.
. ERASE COMMAND PROCESS
.
.
. (C) Copyright 1972-1978 John Walker
.
. This software is in the public domain
.
AXR$
DEFUNCT$
FANG
.
PURE CODE
.
MAXTRK EQU 0177777/(28*64) NUMBER OF TRACKS IN '64K'
RELLEN EQU MAXTRK*28*64 MAXIMUM RELEASE IN 64K ACW
.
ERASE* LA A0,CDBPC,X8 LINK TO PARAMETER
LA A14,CDOPTS,X8 LOAD OPTION BITS
LX X9,PBVAL,A0 GET FDT ADDRESS FOR THE FILE
LA,U A1,,X9 LOAD FDT ADDRESS IN A1
LMJ A2,IOGET BUILD AN I/O FCT
LX,U X10,,A0 SAVE I/O FCT ADDRESS
LA A0,('SECRET') LOAD SECRET DATA
SA A0,IOBB,X10 STORE IN MAKESHIFT I/O BUFFER
LA,U A0,IOBB,X10 GET BUFFER ADDRESS
SA A0,IOACW,X10 SET UP ACCESS WORD
TNZ IOMASS,X10 MASS STORAGE FILE ?
J TERASE NO. ERASE THE TAPE
LA,U A0,REL$ LOAD RELEASE SPACE FUNCTION
SA A0,IOFUNC,X10 PUT FUNCTION IN PACKET
LA,U A5 CLEAR CURRENT ADDRESS
LA A3,FDHITRK,X9 LOAD HIGHEST TRACK REFERENCED
TNZ IOWAD,X10 WORD ADDRESSABLE FILE ?
J FFREL NO. RELEASE FASTRAND FORMAT FILE
LA A3,FDFLW,X9 LOAD LENGTH IN WORDS
ANA,U A3,1 DECREMENT LENGTH
DSA A3,36 SHIFT IT OVER
DI,U A3,1792 COMPUTE LENGTH IN TRACKS
FFREL AA,U A3,1 BUMP HIGHEST TRACK
MSI,U A3,1792 COMPUTE LENGTH IN WORDS
RELIOL SA A5,IODRAD,X10 STORE DRUM ADDRESS
LA,U A0,RELLEN LOAD LENGTH TO RELEASE
TG A0,A3 MORE THAN IS LEFT ?
LA A0,A3 YES. RELEASE THAT MUCH
SA,H1 A0,IOACW,X10 PUT LENGTH IN ACCESS WORD
ANA A3,A0 COMPUTE LENGTH REMAINING
TOP,U A14,OPTION('W') TOP SECRET ERASE ?
J RELIOW NO. JUST RELEASE SPACE
LA,H1 A0,IOACW,X10 LOAD ACCESS LENGTH
OR,U A0,0200000 SET INHIBIT BIT
SA,H1 A1,IOACW,X10 REPLACE ACCESS LENGTH
LA,U A0,W$ LOAD WRITE FUNCTION
SA A0,IOFUNC,X10 SET FUNCTION IN PACKET
IOW$ IOPKT,X10 OVERWRITE THE DATA
TZ IOSTATUS,X10 CHECK I/O STATUS
J IOEREL ERROR. EDIT MESSAGE
LA,U A0,REL$ LOAD RELEASE FUNCTION
SA A0,IOFUNC,X10 REPLACE FUNCTION IN PACKET
LA,H1 A0,IOACW,X10 LOAD ACCESS LENGTH
AND,U A0,-0200000 REMOVE INHIBIT BIT
SA,H1 A1,IOACW,X10 REPLACE ACCESS LENGTH
RELIOW IOW$ IOPKT,X10 RELEASE SOME SPACE
TZ IOSTATUS,X10 NORMAL COMPLETION ?
J IOEREL NO. I/O ERROR ON RELEASE
JZ A3,RELDUN ALL SPACE RELEASED ?
LA,H1 A0,IOACW,X10 LOAD ACCESS LENGTH
TZ IOWAD,X10 W.A.D. MODE ?
J WADRELB YES. ADD LENGTH IN WORDS
DSL A0,36 RIGHT JUSTIFY LENGTH
DI,U A0,28 COMPUTE NUMBER OF SECTORS
WADRELB AA A5,A0 INCREMENT FILE ADDRESS
J RELIOL GO RELEASE MORE SPACE
.
TERASE LA,U A0,W$ LOAD WRITE FUNCTION
SA A0,IOFUNC,X10 PUT FUNCTION IN PACKET
LA,U A0,0200000+8000 GET 8000 WORD ACCESS WITH INHIBIT
SA,H1 A0,IOACW,X10 SET UP FOR OBSCURATION
WRITEM IOW$ IOPKT,X10 WRITE A BLOCK
LA A1,IOSTATUS,X10 LOAD STATUS
JZ A1,WRITEM ZERO ? WRITE ON !!
TE,U A1,2 FOUND END OF TAPE YET ?
J IOEREL NO. SOME OTHER ERROR
LA,U A0,REW$ LOAD REWIND FUNCTION
TEP,U A14,OPTION('I') UNLESS 'I' OPTION IS ON...
LA,U A0,REWI$ ...CAUSING A REWIND WITH INTERLOCK
SA A0,IOFUNC,X10 SET UP FUNCTION
IOW$ IOPKT,X10 REWIND THE TAPE
TZ IOSTATUS,X10 NORMAL COMPLETION ?
J IOEREL NO. EDIT MESSAGE
.
RELDUN BRELP X10 RELEASE I/O FCT
COMPLETE . TERMINATE THIS COMMAND
.
IOEREL LMJ X11,IOSEDT EDIT I/O STATUS MESSAGE
ZAP . ERROR THIS COMMAND
J RELDUN TERMINATE COMMAND
END