#include #include #include #include #include #include #include #include #include #include int main (int argc,char **argv) { int status,lbn,blkcnt = 0; struct FAB inFAB,outFAB; struct RAB outRAB; iosb iosb; char buf [ 2048 ], *bufptr = buf; struct rec { short type; short len; char buf[1]; } *rec = (struct rec *) &buf; /* if ( argc < 3 ) { printf("\nUsage: $fix_acct:==$dev:[dir]fix_acct.exe\n\ $fix_acct bad_accounting.dat good_accounting.dat\n\n"; } */ /* ** */ inFAB = cc$rms_fab; inFAB.fab$b_fac = FAB$M_GET; inFAB.fab$l_fna = argv[1]; inFAB.fab$b_fns = strlen(argv[1]); inRAB.fab$v_ufo = 1; if ( !(1 & (status = sys$open(&inFAB))) ) return status; /* ** */ outFAB = cc$rms_fab; outFAB.fab$b_fac = FAB$M_PUT; outFAB.fab$l_fna = argv[2]; outFAB.fab$b_fns = strlen(argv[2]); outFAB.fab$v_sqo = outFAB.fab$v_dfw = 1; if ( !(1 & (status = sys$create(&outFAB))) ) return status; outRAB = cc$rms_rab; outRAB.rab$l_fab = &outFAB; outRAB.rab$b_mbf = 128; outRAB.rab$b_mbc = 16; if ( !(1 & (status = sys$connect(&outRAB))) ) return status; /* ** */ lbn = 0; blkcnt = sizeof(buf)/512; bufptr = buf; rec = (struct rec *) buf; while (1) { /* ** Get blocks */ if ( !(1 & (status = sys$qiow(0,inFAB.fab$l_stv,IO$_READVBLK,&iosb, 0,0,bufptr,blkcnt*512,lbn,0,0,0); lbn += blkcnt/512; /* ** */ while ( (rec-buf) < iosb.iosb$w_bcnt ) ) { outRAB.rab$l_rbf = (char *) &rec; outRAB.rab$w_rsz = rec.len; if ( !(1 & (status = sys$put(&outRAB))) ) break; } } /* ** */ sys$close(&outFAB); sys$dassgn(inFAB.fab$l_stv); return (status==RMS$_EOF?SS$_NORMAL:status); }