#include <u.h>
#include <libc.h>
#include <diskfs.h>

void
usage(void)
{
	fprint(2, "usage: fscat fspartition\n");
	exits("usage");
}

int
main(int argc, char **argv)
{
	extern int nfilereads;
	u8int *zero;
	u32int i;
	u32int n;
	Block *b;
	Disk *disk;
	Fsys *fsys;

	ARGBEGIN{
	default:
		usage();
	}ARGEND

	if(argc != 1)
		usage();

	if((disk = diskopenfile(argv[0])) == nil)
		sysfatal("diskopen: %r");
	if((disk = diskcache(disk, 16384, 16)) == nil)
		sysfatal("diskcache: %r");
	if((fsys = fsysopen(disk)) == nil)
		sysfatal("ffsopen: %r");

	zero = emalloc(fsys->blocksize);
	fprint(2, "%d blocks total\n", fsys->nblock);
	n = 0;
	for(i=0; i<fsys->nblock; i++){
		if((b = fsysreadblock(fsys, i)) != nil){
			write(1, b->data, fsys->blocksize);
			n++;
			blockput(b);
		}else
			write(1, zero, fsys->blocksize);
		if(b == nil && i < 2)
			sysfatal("block %d not in use", i);
	}
	fprint(2, "%d blocks in use, %d file reads\n", n, nfilereads);
	exits(nil);
	return 0;
}
