;***********************************************************************
; 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

END:    EXIT                        ; back to dot
        END                         ; end of source code