home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / SIMTEL / CPMUG / CPMUG006.ARK / PURGE.ASM < prev    next >
Assembly Source File  |  1984-04-29  |  2KB  |  108 lines

  1. MODIFIED EQU 0    ;CHANGE TO 1 WHEN CBIOS EQUATES SET OK
  2. ;PURGE - ROUTINE TO CLEAR UP A DIRECTORY
  3.     ORG    100H
  4. ;
  5. ;YOU MUST MODIFY THE SYSTEM EQUATES FOR DISK PHYSICAL I/O
  6. ;BEFORE RUNNING THIS SYSTEM.  ALL YOU HAVE TO DO IS CHANGE
  7. ;'SYSSIZ' FOR YOUR SYSTEM, PROVIDING THE JMP TABLE FOR
  8. ;YOUR CBIOS IS 512 BYTES FROM THE END OF THE SYSTEM.
  9. ;
  10.     IF    NOT MODIFIED
  11.     LXI    D,ERRMSG
  12.     MVI    C,PRINT
  13.     JMP    BDOS
  14. ERRMSG    DB    '++THIS PROGRAM HAS NOT BEEN MODIFIED',13,10
  15.     DB    'FOR YOUR CBIOS.  EDIT PURGE.ASM AND'13,10
  16.     DB    'MAKE APPROPRIATE CHANGES TO THE EQUATES'
  17.     DB    10,13,'$'
  18.     ENDIF
  19.  
  20.     CALL    START
  21. IDMSG    DB    'PURGE 09/10/77',0DH,0AH,'$'
  22. START    POP    D    ;GET ID MESSGE
  23.     MVI    C,PRINT
  24.     CALL    BDOS    ;PRINT ID
  25.     LDA    FCB    ;GET DISK (0, 1, 2)
  26.     ORA    A    ;USE LOGGED IN DISK?
  27.     JZ    NOSET    ;..YES
  28.     DCR    A    ;MAKE A=0, B=1
  29.     MOV    C,A    ;SEND IT IN C,
  30.     CALL    SELDSK    ;TO SELECT THE DISK
  31. NOSET    MVI    C,2    ;GET TRACK 2
  32.     CALL    SETTRK    ;GO DO IT
  33.     MVI    C,1    ;GET SECTOR
  34. PURGE    PUSH    B    ;SAVE SECTOR
  35.     CALL    SETSEC    ;SEEK TO IT
  36.     CALL    RDSEC    ;READ THE SECTOR
  37.     LXI    H,80H    ;POINT TO BUFFER
  38.     LXI    D,32    ;DIRECTORY ENTRY LENGTH
  39.     CALL    CHECK    ;CHECK FIRST ENTRY
  40.     DAD    D
  41.     CALL    CHECK    ;CHECK SECOND ENTRY
  42.     DAD    D
  43.     CALL    CHECK    ;CHECK THIRD ENTRY
  44.     DAD    D
  45.     CALL    CHECK    ;CHECK LAST ENTRY
  46.     CALL    WRSEC    ;WRITE IT BACK
  47. ;GET NEXT SECTOR
  48.     POP    B    ;GET SECTOR (IN C)
  49.     INR    C
  50.     MOV    A,C    ;GET VALUE
  51.     CPI    17
  52.     JC    PURGE    ;LOOP UNTIL DONE
  53. ;PRINT NUMBER OF ENTRIES FIXED
  54.     LXI    D,MSG
  55.     MVI    C,PRINT
  56.     CALL    BDOS
  57.     RET
  58. ;CHECK IF A DIRECTORY ENTRY (POINTED TO BY H,L)
  59. ;    IS CORRECT (0 IF IN USE, E5 IF EMPTY)
  60. ;    IF NOT, FORCE IT TO BE AN E5 (EMPTY)
  61. CHECK    MOV    A,M    ;GET CHAR
  62.     CPI    0E5H
  63.     RZ        ;RET IF E5
  64.     ORA    A
  65.     RZ        ;RET IF IN USE
  66.     MVI    M,0E5H    ;CLEAR IT OUT
  67. ;BUMP COUNT OF CHANGED RECORDS
  68.     PUSH    H
  69.     LXI    H,MSG+1    ;POINT TO SECOND DIGIT
  70. BUMP    MOV    A,M    ;GET DIGIT
  71.     INR    A    ;INCREMENT IT
  72.     MOV    M,A
  73.     CPI    '9'+1    ;CARRY?
  74.     JC    BUMPDN    ;..NO, DONE
  75.     MVI    M,'0'
  76.     DCX    H
  77.     JMP    BUMP
  78. BUMPDN    POP    H
  79.     RET
  80. ;
  81. MSG    DB    '00 ENTRIES PURGED$'
  82. ;
  83. ;BDOS/CBIOS EQUATES (VERSION 4)
  84. ;
  85. RDCON    EQU    1
  86. WRCON    EQU    2
  87. PRINT    EQU    9
  88. OPEN    EQU    15    ;0FFH=NOT FOUND
  89. CLOSE    EQU    16    ;   "    "
  90. SRCHF    EQU    17    ;   "    "
  91. SRCHN    EQU    18    ;   "    "
  92. DELT    EQU    19    ;NO RET CODE
  93. READ    EQU    20    ;0=OK, 1=EOF
  94. WRITE    EQU    21    ;0=OK, 1=ERR, 2=?, 0FFH=NO DIR SPC
  95. MAKE    EQU    22    ;0FFH=BAD
  96. REN    EQU    23    ;0FFH=BAD
  97. STDMA    EQU    26
  98. BDOS    EQU    5
  99. FCB    EQU    5CH 
  100. SYSSIZ    EQU    24    ;SYSTEM SIZE
  101. CBIOS    EQU    SYSSIZ*1024-512
  102. SELDSK    EQU    CBIOS+1BH
  103. SETTRK    EQU    SELDSK+3
  104. SETSEC    EQU    SETTRK+3
  105. SETDMA    EQU    SETSEC+3
  106. RDSEC    EQU    SETDMA+3
  107. WRSEC    EQU    RDSEC+3
  108.