. X;SAVE #D9:FMSSRCH.M65ADIRECTORY SEARCHAX;#X; SFDIR - SEARCH FILE DIRECTORY$X; CSFDIR - FILE DIRECTORY SEARCHX;$,X; THE FILE DIRECTORY IS SEARCHED FOR THE.+X; FILENAME IN FNAME. THE SEARCH STARTS8/X; AT THE CENTRAL SECTOR+1 AND WILL CONTINUEB+X; FOR UP TO A TOTAL OF 8 SECTORS. WHENL(X; TESTING FOR FNAME MATCH, '?' FNAMEV.X; CHARS WILL ALWAYS MATCH THE CORESPONDING`-X; DIR FILENAME CHAR. IF A MATCH IS FOUNDj2X; CDIRS CONTAINS THE RELATIVE DIRECTORY SECTORt,X; NUMBER (0-7) AND CDIRD (AND THE Y REG)~-X; CONTAINS THE DISPLACEMENT OF THE ENTRY.5X; AFTER A MATCH HAS BEEN FOUND, THE DIRECTORY CAN2X; BE SEARCHED FOR ANOTHER MATCH VIA THE CSFDIR1X; ENTRY POINT. IF A MATCH HAS NOT BEEN FOUND-X; THEN DHOLES AND DHOLED WILL POINT TO A &X; DIRECTORY HOLE THAT CAN BE USED.0X; IF DHOLED = FF THEN THE DIRECTORY IS FULL.0X; THE CARRY IS RETURNED CLEAR IF FILE FOUND,X; SET IF FILE NOT FOUND.X; SFDIRQ>;;INIT TO -1PDHOLES;;DIR HOLE SECTORPCDIRS;;CUR DIR SECTOR PSFNUM;;FILE NUMBER$Q>p;;INIT TO -16 (-ENTRY LENGTH)PCDIRD;;CUR DIR DISPL(X;2 CSFDIR< #SFNUMF,P!QCDIRD;;CDIRD=CDIRD+ENTRY LENZ O>DFDELNd!ISFD2;;IF RESULT <128 THEN BRnX; ELSE AT END OF DIR SECTx"#CDIRS;;INC TO NEXT DIR SECTORQ>;;TEST END OF DIR RCDIRSDSFD1;;BR NOT END FSDRTNX;)SFD1 RDDIR;;READ THE NEXT DIR RECORDQ>;;SET DIR DISPL = 0X;"SFD2PCDIRD;;SET NEW DIR DISPL?;;PUT DISPL IN Y AS INDEXX; QFILDIRDFDFL18;;GET FLAG 1.FSFDSH;;BR IF UNUSED (END OF USED ENTRIES)GSFDSH;;BR IF DELETED&M>DFDEXTDFDINU;; mask for safety$R>DFDEXT;; BR IF "EXTENDED" FILE" F:INUSE,M>DFDOUT;;IF OPEN OUTPUT6HCSFDIR;;DON'T FIND IT@X;J"X; ENTRY IN USE, TEST FOR MATCHT&:INUSE$>;;TEST MATCH ON 11 CHARS^ SFD3QFNAME9;;FILE NAME CHARhR> ?;;IS FNC WILD CARDrFSFD4;;THEN IT MATCHES|1RFILDIRDFDPFN8;;ELSE IT MUST MATCH FOR REAC'HCSFDIR;;IF NOT MATCH THEN TRY NEXTSFD42;;INC CHAR CNT3(> ;;TEST ALLHSFD3;;AND CONTINUE CHECKX;,;;WE HAVE A MATCH DSDRTNX; SFDSH QDHOLES;;IF DHOLES NOT MINUS*ISFDSH1;;THEN ALREADY HAVE A GOOD HOLEX; X; ELSEX;"QCDIRS;;MOVE CURR DISPL SECTOR&"PDHOLES;;AND CURRENT DIR DISPL0$QCDIRD;;TO HOLE SECTOR AND DISPL: PDHOLEDDQSFNUM;;SAVE HOLENPDHFNUM;;FILE NUMBERXX;b2SFDSH1QFILDIRDFDFL18;;IF HOLE WAS A DELETEDl GCSFDIR;;ENTRY THEN CONTINUEvX;X; ELSE WE ARE AT END OFX;&;;;USED ENTRIES THUS FILE NOT FOUND SDRTN$CURFCB;;RESTORE X REG:X;!X; routine to do three things:X; 1. decode file name'X; 2. search for file in directory0X; 3. abort with file name error if not fndX; NEEDFILE FNDCODE;; what's the name? NEEDSRCH  SFDIR;; search for itE:NEEDBAD;; oops :*X;4 :NEEDBAD>!ERFNF;; file not foundHX;