Program Zap; Procedure ZapIt(FileName : String; Pattern : Char; LastPass : Boolean); Var NumRead, NumWritten : Word; Buffer : Array[1..4096] Of Char; BufferSize : Word; ZapFile : File; ZapFilePos : LongInt; Begin BufferSize := SizeOf(Buffer); Assign(ZapFile, FileName); {$I-} Reset(ZapFile, 1); {$I+} If IOResult <> 0 Then Begin WriteLn('File not found'); Halt; end; Repeat ZapFilePos := FilePos(ZapFile); BlockRead(ZapFile, Buffer, BufferSize, NumRead); FillChar(Buffer, BufferSize, Pattern); Seek(ZapFile, ZapFilePos); BlockWrite(ZapFile, Buffer, NumRead, NumWritten); Until (NumRead = 0) Or (NumWritten <> NumRead); Close(ZapFile); if LastPass Then Erase(ZapFile); End; begin ZapIt(ParamStr(1), #005, False); {0101} ZapIt(ParamStr(1), #010, False); {1010} ZapIt(ParamStr(1), #000, False); {0000} ZapIt(ParamStr(1), #255, True ); {1111} end. { Here's the comments for the above procedure: Get the buffer size for later use Get the file name from the first command line parameter Try to open the file If there was an error opening file, show the user and exit otherwise repeat this code Save the current file position Read a block of data from the file into a buffer Fill buffer with specified bit pattern Reset file position to where we read this block from and write the block back to the file until we're done or there was a conflict in the read/write size close the file delete the file from disk if it's the last pass }