;***********************************************************************
; CLRAND - CLEARs a RANDOM FILE
; Purpose: great after you use CREATE and you want the file clean
; Usage: L OPR:
; CLRAND {filespec}
; by Dave Heyliger - AMUS Staff
;***********************************************************************
SEARCH SYS ; search the normals
SEARCH SYSSYM
SEARCH TRM
PHDR -1,0,PH$REE!PH$REU!PH$OPR ;must be in OPR:
.OFINI ; define one variable
.OFDEF IDDB,D.DDB ; DDB for the file
.OFSIZ IMPSIZ ; IMPSIZ is 150 octal bytes
GETIMP IMPSIZ,A3 ; A3 points to varibles
BYP ; bypass bs
LIN ; just a CR?
BNE 10$ ; nope
TYPECR <Usage: CLRAND {filespec}, where filespec is a random file.>
TYPECR < (default extension is .DAT)>
EXIT
10$: LEA A1,IDDB(A3) ; point to a DDB
MOVB #D$ERC!D$BYP,IDDB+D.FLG(A3) ; set D$ERC bit (trap errors)
FSPEC @A1,DAT ; get the filename
CMPB IDDB+D.ERR(A3),#D$ESPC ; error?
BEQ INERR ; yup
CMP IDDB+D.FIL(A3),#0 ; just a ".xxx"?
BNE INOK ; nope, ok so far
INERR: TYPECR <?Invalid file specification>
EXIT ; something was exit
INOK: LEA A1,IDDB(A3) ; point to DDB
INIT @A1 ; initialize
LOOKUP @A1 ; find the file
BNE NOFILE ; nope - error
CMPW IDDB+D.WRK+6(A3),#-1 ; random file?
JEQ AOK ; yup, continue
LEA A2,IDDB+D.FIL(A3) ; nope, point to file
TYPE <?> ; yes, start error message
PFILE @A1 ; type out file
TYPECR < is not a random file.> ; and error message
EXIT ; then quit
NOFILE: TYPECR <?This file does not exist.>
EXIT ; other possible error
AOK: CRLF ; make sure now..........
TYPE <You are about to zero out all data in this file. Enter Y to confirm: >
KBD ; must hit CR for extra safety
CTRLC END ; quit on ^C
CMPB @A2,#'Y ; yes?
JNE END ; nope
MOV IDDB+D.WRK(A3),D2 ; D2 holds the number of blocks
OPENR @A1 ; open the file
READIT: READ @A1 ; get a block
LOOP: MOV #128.,D3 ; number of longword clears
MOV IDDB+D.BUF(A3),A4 ; A4 points to block
10$: CLR (A4)+ ; zero it out
DEC D3 ; one less to do
BNE 10$ ; still more to do
WRITE @A1 ; write the block
DEC D2 ; one less block to do
BEQ END ; if zero, we are done
INCW IDDB+D.REC+2(A3) ; point to next block
BR READIT ; and read it