þþ›èX;SAVE #D9:FMSXIO.M65ò A†RENAMEAüX;%X;XRENAME - RENAME A FILE OR FILESX; ‡XRENAME$ ‡FNDCODE;; get past old name.# †FNDCNX;; get new name to FNAME8X;B$> ;; 11 character nameL ‡:SVFNLPV Q…FNAME9`P‡NEWNAME9;; save new namej0tI‡:SVFNLP;; all of it~X;ˆX;’,X; new name in NENAME, get old name againœX; and ensure it exists!¦ ˆNEEDFILE;; does all that!°X;º/X; found at least one match on old file nameÄX;Î †:RNMLPØ$ ‡TSTLOCK;; abort if file locked!â( †TSTDOS;; ask: is this file DOS.SYS?ì#6;; save answer to that questionöX;$X; here we do the actual renaming X;$>;; beginning of name&ˆWILDFLAG;; initialize flag('%…CDIRD;; offset in directory sector2X;< ‡:CHARLPF)Q…FNAME9;; char from as-given old namePR> ?;; wild card?ZHˆ:NOTWILD;; nod""ˆWILDFLAG;; yes...set the flagn/R‡NEWNAME9;; also wild in as-given new name?x!H†:ERFNM;; no! illegal rename!‚X;Œ ˆ:NOTWILD–+Q‡NEWNAME9;; a char of as-given new name R> ?;; wild?ªF…:WILD;; yes´0P†FILDIR†DFDPFN8;; store a char of new name!¾ …:WILDÈ3;; next char in dir sectorÒ2;; next char in NEWNAMEÜ$(> ;; 11 chars in file name yet?æH‡:CHARLP;; nopeðX;ú-X; okay...we managed to do a valid rename!X;&8;; but was the old name "DOS.SYS"?H†:NDOS1;; no"' †DELDOS;; yes...change boot sectors,X;6 †:NDOS1@& †TSTDOS;; what about the new name?J+H†:NDOS2;; not "DOS.SYS"...okay to go onTX;^X; new name is "DOS.SYS"hX;r'$…CDIRD;; offset in directory sector|,Q†FILDIR†DFDSSN9;; msb: start of file†#%†FILDIR†DFDSSN9;; lsb: ditto! †SETDSO;; change boot sectorsšX;¤ †:NDOS2®$ †WRTDIR;; write directory sector¸X;Â+QˆWILDFLAG;; any wild cards in old name?ÌF‡:RNMRTS;; noÖX;à+ †CSFDIR;; search for next matching nameê&D†:RNMLP;; found another...continueôX;þX; no more names to renameX; ‡:RNMRTS&!†FGREAT;; we don't need the buffer&X;0 †:ERFNM:!‡ERFNAME;; bad file nameD A†DELETEANX;X/X; XDELETE - DELETE ALL FILENAMES THAT MATCHbX;l ‡XDELETEv- ˆNEEDFILE;; decode name, ensure it exists€ …XDELX Š …XDEL0” †TSTDOSž H…XDELY¨ †DELDOS² …XDELY¼X;Æ †WRTDIR;;WRITE DIR ENTRYÐ †CSFDIR;;LOOK FOR NEXT MATCHÚD…XDELX;;BR IF FOUNDä ‡WRTVTOCî !†FGREATøX;$X; to delete a file, we must read #X; all its sectors, deallocating)X; them from the VTOC bit map as we go X;*…XDEL0 †OPVTOC4X;>…XDEL1%…CDIRD;;GET DIR DISPLH ‡TSTLOCK;;GO TEST LOCKRQ>†DFDEDE;;LOAD DELETED FLAG\!P†FILDIR†DFDFL18;;DELETE FILEfX;p †DFRDSUz#†:XDEL2 ‡FRESECT;; FREE A SECTOR„* †RDNXTS;; GET THE NEXT ONE INTO BUFFERŽ*D†:XDEL2;; AND REPEAT UNTIL END-OF-FILE˜X;¢ …XDEL4 ¬!%>†DVDWRQ;;TURN ON WRITE REQ'D¶*C;; BY PUTTING NON-ZERO VALUE INTO VTOCÀP@‡VTOCPTR7Ê †:XDLRTÔ:ÞX;èALOCK AND UNLOCKAòX;üX; XLOCK - LOCK A FILE X; XUNLOCK - UNLOCK A FILE X; …XLOCK$ Q>†DFDLOC;; SET LOCK. ‡@SKIP2 ;; (skips to XLCOM)8 ‡XUNLOCKB Q>;;SET UNLOCKL …XLCOM ;; common code!V P…TEMP4` X;j . ˆNEEDFILE;; decode name & ensure it existst X;~ "„XLC1%…CDIRD;;GET CURRENT DISPLˆ #Q†FILDIR†DFDFL18;;GET LOCK BYTE’ M>ß;;TURN OFF LOCKœ L…TEMP4;;OR IN LOCK/UNLOCK¦ 'P†FILDIR†DFDFL18;;SET NEW LOCK BYTE°  †WRTDIR;;GO WRITEº X;Ä †CSFDIR;;LOOK FOR NEXT MATCHÎ D„XLC1;;BR FOUNDØ !†FGREAT;;ELSE DONEâ X;ì ;X;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ö X; !X; TSTLOCK - TEST FILE LOCKED X; ‡TSTLOCK %…CDIRD;;GET DIR DISPL( $Q†FILDIR†DFDFL18;;LOAD LOCK BYTE2 M>†DFDLOC;;MASK LOCK BIT< (F†:XDLRT;; not locked...normal returnF ;(fall thru to error)P X;Z ƒTLFd ‡ERFLOCK‡@ERROR ‡E.FLOCKn A…POINTAx X;‚ X; XPOINT - POINT REQUESTŒ X;– †XPOINT  Q†FCBFLG9;;IF ARQ SECTORSª G…PERR1;;POINT INVALID´ Q†ICAUX49;;IF REQUEST IS NOT¾ R†FCBCSN9;;SAME AS CURRENTÈ HƒXP1;;THEN BRÒ Q†ICAUX39Ü R†FCBCSN9æ FƒXP2;;ELSE NO NEED TO CHANGEð X;ú !ƒXP1Q†FCBFLG9;;IF NOT MODIFIED F„XP1A;;BR  †WRCSIO;;ELSE WRITE IT Q>" P†FCBFLG9, „XP1A 6 Q†ICAUX49@ P†FCBLSN9J Q†ICAUX39T P†FCBLSN9^  …RDNSO;;READ REQ SECTORh E…XPERRr X;| #ƒXP2Q†ICAUX59;;TEST REQ DATA LEN† R†FCBMLN9;;LESS THEN MAX DƒXP3š FƒXP3¤ …XPERR ® ,†ERRPDL‡@ERROR …E.PDL;;IF NOT THEN ERROR¸ X; "ƒXP3P†FCBDLN9;;SET NEW DATA LENÌ !…GREATÖ X;à …PERR1ê †ERRPOT‡@ERROR …E.POTô A„NOTEAþ X; "X; XNOTE - EXECUTE NOTE REQUEST X; …XNOTE& Q†FCBDLN9;;DATA LENGHT VALUE0 P†ICAUX59;;TO AUX 2: Q†FCBCSN9;;CUR SEC NO (LO)D P†ICAUX39;;TO AUX 3N Q†FCBCSN9;;CUR SEC NO (HI)X P†ICAUX49;;TO AUX 4b !…GREAT