10 fprint(2, "usage: vcat [-z] score >diskfile\n");
11 threadexitsall("usage");
15 threadmain(int argc, char **argv)
17 extern int nfilereads;
20 uchar score[VtScoreSize];
42 fmtinstall('V', vtscorefmt);
44 if(vtparsescore(argv[0], &pref, score) < 0)
45 sysfatal("bad score '%s'", argv[0]);
46 if((z = vtdial(nil)) == nil)
47 sysfatal("vtdial: %r");
49 sysfatal("vtconnect: %r");
50 if((c = vtcachealloc(z, 16384, 32)) == nil)
51 sysfatal("vtcache: %r");
52 if((disk = diskopenventi(c, score)) == nil)
53 sysfatal("diskopenventi: %r");
54 if((fsys = fsysopen(disk)) == nil)
55 sysfatal("fsysopen: %r");
57 zero = emalloc(fsys->blocksize);
58 fprint(2, "%d blocks total\n", fsys->nblock);
60 for(i=0; i<fsys->nblock; i++){
61 if((b = fsysreadblock(fsys, i)) != nil){
62 if(pwrite(1, b->data, fsys->blocksize,
63 (u64int)fsys->blocksize*i) != fsys->blocksize)
64 fprint(2, "error writing block %lud: %r\n", i);
67 }else if(zerotoo || i==fsys->nblock-1)
68 if(pwrite(1, zero, fsys->blocksize,
69 (u64int)fsys->blocksize*i) != fsys->blocksize)
70 fprint(2, "error writing block %lud: %r\n", i);
72 fprint(2, "%d blocks in use, %d file reads\n", n, nfilereads);