þþË &AŸDOS VERSION NUMBER MODIFICATIONAd|n#X; *** ORG = $1DOO FOR OS/A+ ***xX;‚X; *** DOS ENTRY POINTS ***Œ…XDEL0S ;;DELETE FILE–…SFDIR!;;SEARCH DIR †CSFDIR1;;SEARCH CONTINUEª…RDDIRn;;READ DIRECTORY´†WRTDIRq;;WRITE DIRECTORY¾†WRVTOC•;;WRITE VTOCÈX;Ò#X; *** DOS STORAGE LOCATIONS ***Ü…CDIRD;;CUR DIR SECTORæ…CDIRS;;CUR DIR DISPL.ð…SFNUM;;FILE NUMBERú…FNAMEY;;FILE NAME†FCBOTC‚;;FCB OPEN TYPE†FILDIR;;DIR BUFFERX;"X; *** MY STORAGE AREAS ***,"X; TABEL FOR CURRENT FILES.6X; LAYOUT:@"X;BYTE 1 - VERSION NUMBER (BCD)JX;BYTE 2 - DIRECTORY SECTORT$X;BYTE 3 - DIRECTORY DISPLACEMENT^X;BYTE 4 - FILE NUMBERhi…TABLE ===============================r†MAXVER ;;MAXIMUM NUMBER|X; OF VERSIONS (2 - 8)†…CTABDr;;CURRENT TABLEX; DISPLACEMENTš ‡NUMNAMEs;;NUMBER OF FILES¤…TEMPXt;;X HOLDING PLACE®†TMPCNTu;;TEMP COUNTER¸…CMDD8v;;OPEN TYPE/8ÂX;Ì"X;*** MISCELLANEOUS EQUATES ***Ö…OPOUT;;OPEN FOR OUTPUTà„OPIN;;OPEN FOR INPUTêX;èX;ÓÔÁÒÔ ÏÆ ÃÏÄÅòX;üX;INITIALIZE, THEN CHECK FORX;THE PROPER FILE NAME. THE X;X REGISTER CONTAINS THE FCB"X;NUMBER, AND MUST BE PRESERVED$X;THROUGH THIS ROUTINE.X;8Q>;;INITIALIZE:BP…CTABD;;DISPLACEMENTLP‡NUMNAME;;NUMBER OF FILESV%>` ˆCLRTABLPjP…TABLE8;;AND TABLE (8t1;;4-BYTE ENTRIES)~ IˆCLRTABLPˆX;’Q…FNAME;;IF EXTENDER NOTœR> V;; = 'V '¦H†NOTAPP;;THEN LEAVE° Q…FNAME ºR> Ä H†NOTAPPÎ Q…FNAME ØR> â H†NOTAPPìX;ö Q†FCBOTC9R>„OPIN;;IF OPEN FOR F‡IOCOMND;;INPUT OR OUTPUTR>…OPOUT;;THEN CONTINUE F‡IOCOMND( †NOTAPP2!†SREXIT;;ELSE LEAVE<X;F#X;PROPER FILE TO DO THIS ROUTINEPX;Z ‡IOCOMNDd&…TEMPX;;SAVE X REGISTERnQ> ?;;PUT WILDCARDSxP…FNAME ;;OVER SPACES‚ P…FNAME Œ …SFDIR;;SEARCH FOR FILE–E†NOMORE;;NO SUCH FILE X;ª X;ENTER ALL FILES OF THE TYPE´X; 'NAME.V??' INTO THE TABLE¾X;È †SRCHLPÒ%…CDIRD;;GET THE TWOÜ$…CTABD;;DISPLACEMENTSæQ†FILDIR8;;FETCH NAMEðT?;;EXTENSION ANDúT?;;CHANGE LAST TWOT?;;DIGITS TO BCD T?;;FORMATP…TABLE9;;HIGH DIGIT"Q†FILDIR8,M>;;AND LOW DIGIT6 L…TABLE9@P…TABLE9;;PUT IN TABLEJQ…CDIRS;;SAVE DIR SECTORTP…TABLE9;;AND^C;;AND DISPLACEMENThP…TABLE9rQ…SFNUM;; & FILE NUMBER|P…TABLE9;;FOR TABLE†,;;Q…CTABD;;ADD FOUR TOšO>;;THE TABLE¤P…CTABD;;DISPLACEMENT.®#‡NUMNAME;;¸ ‰SKIPENTRY †CSFDIR;;IF MORE FILESÌD†SRCHLP;; THEN GO BACKÖX;à"X;WHEN NO MORE FILES, SEE IF WEêX;NEED TO DELETE ANYôX;þ †NOMORE$…TEMPX;;IF OPEN TYPE =Q†FCBOTC9;; INPUT THENR>„OPIN;; SKIP OVER&F‰GETHINAME;;SEARCH0 ˆTOOMANY?:Q‡NUMNAME;;IF NUMNAME ;;CURRENT ENTRYŠ$>;;SMALLEST ENTRY” ‰SEARCHLOWž"†TMPCNT;;IF NO MORE¨FˆOUTSRCHL;;THEN OUT²Q…TABLE9;;ELSE IF CURRENT¼R…TABLE8;; > SMALLESTÆD†NOTLOW;; THEN SKIPÐC;;ELSE MOVEÚ>;;CURRENT TO MINä †NOTLOWî3;;POINT TO NEXTø3;;TABLE ENTRY3 3;;GOTO SEARCHLOW!‰SEARCHLOW  ˆOUTSRCHL*X;4#X;POINTER TO EARLIEST VERSION IS> X;IN X REGISTER, SO DELETE ITHX;R ‡PTABFNM;;RETRIEVE NAME\ ˆPULLDOWN;;PATCH TABLEf$…TEMPX;;GET FCB #p …RDDIR;;READ DIRECTORYz …XDEL0;;FREE SECTORS„ †WRTDIR;;WRITE DIRECTORYŽ †WRVTOC;;WRITE VTOC˜"‡NUMNAME;;ONE LESS NAME¢!ˆTOOMANY?;;CHECK MORE¬X;¶X;FIND LATEST CURRENT FILEÀX;Ê ‰GETHINAMEÔ%>;;MAXIMUM ENTRYÞ$>;;CURRENT ENTRYèQ‡NUMNAME;;GET NUMBER OFòP†TMPCNT;;ENTRIESü ‡SERCHHI Q…TABLE9;;IF CURRENT < R…TABLE8;; MAXIMUM D…NOTHI;; THEN BRANCH$ A;;ELSE MOVE X TO. ?;;Y BY WAY OF A8 …NOTHIB 2;;POINT TO NEXTL 2;;ENTRY ANDV 2;;DECREMENT THE` 2;;COUNTERj "†TMPCNTt Q†TMPCNT;;IF COUNTER >= 0~ I‡SERCHHI;; THEN GO BACKˆ X;’ X;GET OPEN TYPE (4 OR 8) ANDœ !X;DIVIDE BY 8 TO GET ZERO OR 1¦ X;° $…TEMPX;;CURRENT FCBº Q†FCBOTC9Ä V?;;SHIFT RIGHTÎ V?;;THREE TIMESØ V?â ,;;ADD TO VERSIONì <;;NUMBER IN BCDö O…TABLE8;;MODE. IF OPEN P…TABLE8;;FOR INPUT, ZERO -;;IS ADDED, ONE C;;FOR OUTPUT >;;MOVE TO X REG(  ‡PTABFNM;;GET INFORMATION2 $…TEMPX;;RESTORE X REG< †SREXITF  …SFDIR;;SEARCH FOR FILEP :;;TO PLEASE DOSZ X;d X;SET VERSION NUMBER IN FNAMEn X;AND SET OTHER DOS VARIABLESx X;ACCORDING TO OUR TABLE. X‚ X;HAS OFFSET TO TABLE ENTRYŒ X;– ‡PTABFNM  Q…TABLE9;;GET BCD VERSIONª M>;;NUMBER AND´ L>0;;CHANGE BACK T0¾ P…FNAME ;;TWO DIGITSÈ Q…TABLE9Ò V?Ü V?æ V?ð V?ú L>0;;STORE IT IN P…FNAME ;;FNAME BUFFER Q…TABLE9 P…CDIRS;;RESTORE SECTOR," Q…TABLE9, P…CDIRD;; DISPLACEMENT,6 Q…TABLE9@ P…SFNUM;; AND NUMBERJ :T X;^ X;CONDENSE TABLE TO ELIMINATEh !X;THE DELETED FILE. X REGISTERr X;CONTAINS OFFSET TO TABLE| X;† ˆPULLDOWN Q>;;STORE ZERO IFš (>;;LAST ENTRY ELSE¤ EˆSKIPNEXT® Q…TABLE9;;GET NEXT¸ ˆSKIPNEXT P…TABLE9;;INTO CURRENTÌ 2;;ENTRYÖ (> ;;UNTIL END OFà HˆPULLDOWN;;THE TABLEê :ô X;þ