home *** CD-ROM | disk | FTP | other *** search
- 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
-