MODIFIED EQU 0 ;CHANGE TO 1 WHEN CBIOS EQUATES SET OK ;PURGE - ROUTINE TO CLEAR UP A DIRECTORY ORG 100H ; ;YOU MUST MODIFY THE SYSTEM EQUATES FOR DISK PHYSICAL I/O ;BEFORE RUNNING THIS SYSTEM. ALL YOU HAVE TO DO IS CHANGE ;'SYSSIZ' FOR YOUR SYSTEM, PROVIDING THE JMP TABLE FOR ;YOUR CBIOS IS 512 BYTES FROM THE END OF THE SYSTEM. ; IF NOT MODIFIED LXI D,ERRMSG MVI C,PRINT JMP BDOS ERRMSG DB '++THIS PROGRAM HAS NOT BEEN MODIFIED',13,10 DB 'FOR YOUR CBIOS. EDIT PURGE.ASM AND'13,10 DB 'MAKE APPROPRIATE CHANGES TO THE EQUATES' DB 10,13,'$' ENDIF CALL START IDMSG DB 'PURGE 09/10/77',0DH,0AH,'$' START POP D ;GET ID MESSGE MVI C,PRINT CALL BDOS ;PRINT ID LDA FCB ;GET DISK (0, 1, 2) ORA A ;USE LOGGED IN DISK? JZ NOSET ;..YES DCR A ;MAKE A=0, B=1 MOV C,A ;SEND IT IN C, CALL SELDSK ;TO SELECT THE DISK NOSET MVI C,2 ;GET TRACK 2 CALL SETTRK ;GO DO IT MVI C,1 ;GET SECTOR PURGE PUSH B ;SAVE SECTOR CALL SETSEC ;SEEK TO IT CALL RDSEC ;READ THE SECTOR LXI H,80H ;POINT TO BUFFER LXI D,32 ;DIRECTORY ENTRY LENGTH CALL CHECK ;CHECK FIRST ENTRY DAD D CALL CHECK ;CHECK SECOND ENTRY DAD D CALL CHECK ;CHECK THIRD ENTRY DAD D CALL CHECK ;CHECK LAST ENTRY CALL WRSEC ;WRITE IT BACK ;GET NEXT SECTOR POP B ;GET SECTOR (IN C) INR C MOV A,C ;GET VALUE CPI 17 JC PURGE ;LOOP UNTIL DONE ;PRINT NUMBER OF ENTRIES FIXED LXI D,MSG MVI C,PRINT CALL BDOS RET ;CHECK IF A DIRECTORY ENTRY (POINTED TO BY H,L) ; IS CORRECT (0 IF IN USE, E5 IF EMPTY) ; IF NOT, FORCE IT TO BE AN E5 (EMPTY) CHECK MOV A,M ;GET CHAR CPI 0E5H RZ ;RET IF E5 ORA A RZ ;RET IF IN USE MVI M,0E5H ;CLEAR IT OUT ;BUMP COUNT OF CHANGED RECORDS PUSH H LXI H,MSG+1 ;POINT TO SECOND DIGIT BUMP MOV A,M ;GET DIGIT INR A ;INCREMENT IT MOV M,A CPI '9'+1 ;CARRY? JC BUMPDN ;..NO, DONE MVI M,'0' DCX H JMP BUMP BUMPDN POP H RET ; MSG DB '00 ENTRIES PURGED$' ; ;BDOS/CBIOS EQUATES (VERSION 4) ; RDCON EQU 1 WRCON EQU 2 PRINT EQU 9 OPEN EQU 15 ;0FFH=NOT FOUND CLOSE EQU 16 ; " " SRCHF EQU 17 ; " " SRCHN EQU 18 ; " " DELT EQU 19 ;NO RET CODE READ EQU 20 ;0=OK, 1=EOF WRITE EQU 21 ;0=OK, 1=ERR, 2=?, 0FFH=NO DIR SPC MAKE EQU 22 ;0FFH=BAD REN EQU 23 ;0FFH=BAD STDMA EQU 26 BDOS EQU 5 FCB EQU 5CH SYSSIZ EQU 24 ;SYSTEM SIZE CBIOS EQU SYSSIZ*1024-512 SELDSK EQU CBIOS+1BH SETTRK EQU SELDSK+3 SETSEC EQU SETTRK+3 SETDMA EQU SETSEC+3 RDSEC EQU SETDMA+3 WRSEC EQU RDSEC+3