DIRECTORY Commander, CommandTool, Disk, File, FileInternal, IO, Rope, VolumeFormat; FastReader: CEDAR PROGRAM IMPORTS Commander, CommandTool, File, FileInternal, IO = BEGIN FastReaderProc: Commander.CommandProc = { NowPage: FileInternal.EnumeratePagesProc = TRUSTED { count _ count+1; IF count > 10000 THEN exit _ TRUE; }; argv: CommandTool.ArgumentVector; volume: File.Volume; volumeFree: INT; volumeSize: INT; badStatus: INT _ 0; count: INT _ 0; argv _ CommandTool.Parse[cmd: cmd ! CommandTool.Failed => { msg _ errorMsg; CONTINUE; }]; IF argv = NIL THEN GOTO Failed; IF argv.argc # 2 THEN GOTO Usage; volume _ File.FindVolumeFromName[argv[1]]; IF volume = NIL THEN GOTO NoVolume; [size: volumeSize, free: volumeFree] _ File.LogicalInfo[volume]; FileInternal.EnumeratePages[volume: volume, start: [0], skipBadPages: TRUE, work: NowPage]; cmd.out.PutF[" Volume %g is %s pages with %g pages free in the VAM\n", IO.rope[argv[1]], IO.int[volumeSize], IO.int[volumeFree] ]; cmd.out.PutF[" Count %g \n", IO.int[count]]; EXITS Failed => RETURN[$Failure, msg]; Usage => RETURN[$Failure, " Usage: FastReader volumename\n"]; NoVolume => RETURN[$Failure, " No such volume\n"]; }; CHECKED BEGIN Commander.Register[key: "FastReader", proc: FastReaderProc, doc: "Read volume as fast as possible"]; END; END. ÔFastReader.mesa Last Edited by: Bob Hagmann, January 18, 1985 10:15:24 am PST PROC[status: Disk.Status, da: VolumeFormat.LogicalPage, label: POINTER TO Disk.Label] RETURNS[exit: BOOL _ FALSE]; Start code Êþ˜Icode1šœ™™K™-—šÏk ˜ Jšœ ˜ Jšœ ˜ J˜Kšœ˜Kšœ ˜ Kšœ˜Kšœ˜Kšœ ˜ —šœ ˜Kšœ+˜6Kšœ˜—šÏbœ˜)šœ+œ˜4Kš œ;œœ œœœ™rKšœ˜Kšœœœ˜"K˜—Kšœ!˜!Kšœ˜Kšœ œ˜Kšœ œ˜Kšœ œ˜Kšœœ˜K˜šœ!˜!Kšœ+œ˜8—Kšœœœœ˜Kšœœœ˜!Kšœ*˜*Kšœ œœœ ˜#Kšœ@˜@KšœFœ˜[šœG˜GKšœ9˜;—šœ˜Kšœ˜—š˜Kšœ œ˜ Kšœ œ0˜?Kšœ œ"˜4—K˜—K˜K™ šœ˜ Kšœd˜dKšœ˜—šœ˜K™—K˜J˜—…—î