.
. FIND COMMAND PROCESS
.
.
. (C) Copyright 1972-1978 John Walker
.
. This software is in the public domain
.
AXR$
DEFUNCT$
FANG
.
PURE CODE
.
FIND* LX X9,CDBPC,X8 LOAD PARAMETER CHAIN
LA A1,ELFDT,X9 GET FDT FOR THE ELEMENT
LA A0,FDTYPE,A1 LOAD TYPE OF FDT
JNTAPE A0,FFIND PROCESS FILE FIND IF MASS STORAGE
LMJ A2,IOGET BUILD AN I/O FCT
LX,U X10,,A0 SAVE FCT ADDRESS
BGET 29 ALLOCATE AN I/O BUFFER
LXI,U A0,29 FORM ACCESS WORD
SA A0,IOACW,X10 PUT ACCESS WORD IN PACKET
LX,U X7,,A0 SAVE BUFFER ADDRESS
LA A10,IOBLKN,X10 GET CURRENT TAPE POSITION
LA A9,A10 INITIALISE DYNAMIC TAPE POSITION COUNTER
LA,U A0,R$ LOAD READ FUNCTION
SA A0,IOFUNC,X10 PUT FUNCTION IN PACKET
.
. READ IN A BLOCK AND EXAMINE IT
.
FINDL IOW$ IOPKT,X10 READ IN A BLOCK
AA,U A9,1 INDICATE TAPE MOVED FORWARD
TZ IOSTATUS,X10 CHECK STATUS OF OPERATION
J FINDE ABNORMAL. TEST FOR EOF
LA A0,IOXFER,X10 LOAD WORDS TRANSFERRED
TE,U A0,28 IS IT LABEL BLOCK LENGTH ?
J FINDM NO. IGNORE DATA BLOCK
DL A0,,X7 LOAD SENTINEL FIELD
DTE A0,('**EF**@@@@@@') ELEMENT LABEL ?
J FINDM NO. IGNORE OTHER STUFF
LX,U X5,,X9 LOAD ELEMENT CLASS DESCRIPTION
LX,U X6,2,X7 LOAD SEARCH ITEM ADDRESS
LMJ X11,SELECT APPLY ELEMENT SELECTION CRITERIA
J FINDM NOT SELECTED. TRUCK ON
.
. ELEMENT HAS BEEN FOUND. BACKSPACE OVER LABEL
.
LA,U A0,MB$ LOAD BACKSPACE FUNCTION
SA A0,IOFUNC,X10 SET FUNCTION IN PACKET
IOW$ IOPKT,X10 BACK UP OVER BLOCK
TZ IOSTATUS,X10 NORMAL STATUS ?
J FINDR NO. ERROR THE COMMAND
FINDX LA,H2 A0,IOACW,X10 GET I/O BUFFER ADDRESS
BRELP A0 RELEASE THE I/O BUFFER
BRELP X10 RELEASE THE I/O FCT
COMPLETE . END OF THIS COMMAND
.
.
FINDM TE A9,A10 ARE WE BACK AT START LOCATION ?
J FINDL NO. KEEP ON LOOKING
FINDNO R$DIT . ENTER EDITING MODE
E$MSG NOFEM EDIT NO FIND MESSAGE
LA A0,ELFDT,X9 GET FCT ADDRESS
LMJ X11,FIST APPEND FILE AND STATEMENT
ZAP . ERROR THE COMMAND
J FINDX TERMINATE THE COMMAND
.
. EOF HANDLER
.
FINDE LA A1,IOSTATUS,X10 LOAD I/O STATUS
TE,U A1,1 END OF FILE MARK ?
J FINDR NO. REAL TAPE ERROR
LMJ X11,EOT CHECK FOR END OF VOLUME
J FEOF IT WAS ONLY AN END OF FILE MARK
DSL A9,72 SET STOP SCAN POINT AT BLOCK ZERO OF NEW
. REEL. CANNOT SCAN BACK TO OLD REEL.
J FINDL CONTINUE FIND ON NEW REEL
FINDR LMJ X11,IOSEDT EDIT I/O ERROR STATUS
ZAP . ERROR THE COMMAND
J FINDX COMPLETE
.
.
FEOF LA A0,CDOPTS,X8 LOAD COMMAND OPTIONS
TEP A0,(OPTION('E')) IS THE 'E' OPTION ON ?
J FINDNO YES. SINGLE PASS FILE SEARCH MODE
LA,U A0,MB$ LOAD MOVE BACKWARD FUNCTION
SA A0,IOFUNC,X10 PUT FUNCTION IN PACKET
LR,U R1,1 LOAD UP LOOP COUNTER
.
EOFBL IOW$ IOPKT,X10 BACKSPACE A BLOCK
LA A1,IOSTATUS,X10 LOAD UP STATUS
JZ A1,EOFBC IGNORE DATA BLOCK
TNE,U A1,2 LOAD POINT ?
J EOFET END OF TAPE. RESTART FIND
TE,U A1,1 EOF MARK ?
J FINDR NO. I/O ERROR
JGD R1,EOFBC LOOK UNTIL SECOND MARK
LA,U A0,R$ GET READ FUNCTION
SA A0,IOFUNC,X10 SET PACKET BACK TO READ
IOW$ IOPKT,X10 READ IN EOF MARK
LA A1,IOSTATUS,X10 LOAD COMPLETION CODE
TE,U A1,1 EOF MARK ?
J FINDR NO. UNEXPECTED STATUS
J FINDL LOOP TO READ MORE BLOCKS
.
EOFBC ANA,U A9,1 BACK UP CURRENT TAPE POSITION
J EOFBL TRY AGAIN
.
. END OF TAPE
.
EOFET .
ON DEBUG
TZ A9 AT START OF TAPE ?
IERR . GUESS NOT !
OFF DEBUG
LA,U A0,R$ GET READ FUNCTION
SA A0,IOFUNC,X10 SET PACKET FUNCTION
J FINDL READ MORE BLOCKS
.
. ELEMENT FILE FIND COMMAND PROCESSING
.
FFIND LMJ X6,GELT1 READ IN FILE TABLE INDEX, ELEMENT TABLE
J FBSR BSP ERROR
LA,U A10 CLEAR SEQUENCE NUMBER
.
. SEARCH ELEMENT TABLE FOR ELEMENT
.
FFSR AA,U A10,1 INCREMENT SEQUENCE NUMBER
LA A1,A10 LOAD SEQUENCE NUMBER
LA A0,A14 LOAD FCT ADDRESS
etnl . look up next element
J FFSE ERROR. MUST BE END OF TABLE
TP EIFLG,A0 IS ELEMENT DELETED ?
J FFSR YES. IGNORE IT
LX,U X6,,A0 GET ELEMENT ITEM ADDRESS
LX,U X5,,X9 LOAD ELEMENT CLASS DESCRIPTION
LMJ X11,SELECT APPLY SELECTION RULES
J FFSR SEARCH ON IF NOT SELECTED
LA A0,EITXTA,X6 LOAD TEXT START ADDRESS
LA A1,ELFDT,X9 LOAD FDT ADDRESS
SA A0,FDMSAD,A1 SET FILE ADDRESS TO TEXT START
FFSO LMJ A1,EBUFRL RELEASE BUFFERS FROM BSP
COMPLETE . END OF THIS COMMAND
.
. NO FIND AT END OF ELEMENT TABLE
.
FFSE TE,U A0,014 END OF TABLE STATUS ?
J FBSR NO. REAL BSP ERROR
R$DIT . SET UP EDITOR
LA,U A0,NOFEM LOAD MESSAGE ADDRESS
TNE,U A10,1 NO ELEMENTS IN FILE ?
LA,U A0,FEMTM RIGHT. LOAD FILE EMPTY MESSAGE
E$MSG . COPY THE MESSAGE
LA A0,ELFDT,X9 LOAD THE FDT ADDRESS
LMJ X11,FIST IDENTIFY FILE AND STATEMENT
ZAP . ERROR THE COMMAND
J FFSO EXIT THE COMMAND
.
. BSP ERROR HANDLER
.
fbsr la a2,a14 load BSP FCT address
LMJ X11,BSPERP EDIT BSP ERROR MESSAGE
ZAP . ERROR THE COMMAND
J FFSO EXIT THE COMMAND
.
PURE DATA
.
NOFEM 'ELEMENT NOT FOUND IN !'
FEMTM 'NO ELEMENTS IN !'
.
END