. . 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