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 / ENTERPRS / CPM / UTILS / A / EDIR.ZIP / EDIR.ASM next >
Assembly Source File  |  1990-11-24  |  5KB  |  177 lines

  1.  
  2. ;EDIR AS OF 11/28/87
  3. ;COPYRIGHT (C) 1987 BY ROBERT GREENLEE, P.O. BOX 23286, SAN DIEGO CA 92123
  4. ;PHONE VOICE 619-268-0112
  5. ;      MODEM 619-569-8613.
  6. ;
  7. ;THIS PROGRAM LOGS YOU INTO THE ERASED FILE DIRECTORY ON A CP/M 2.2
  8. ; COMPUTER DISK AND CHANGES THE CP/M ERA COMMAND SO THAT IT UNERASES FILES 
  9. ; AND CAUSES THE REN COMMAND TO RENAME JUST ONE DUPLICATE FILE 
  10. ; INSTEAD OF ALL FILES HAVING THE SAME NAME.   YOU CAN USE
  11. ; THE CP/M DIR COMMAND TO SEE WHICH FILES ON A DISK ARE ERASED.
  12. ;
  13. ;THE NAME EDIR STANDS FOR FOR "ERASED DIRECTORY" WHICH IS SHORT FOR
  14. ; "ERASED FILE DIRECTORY."
  15. ;
  16. ;ON MOST COMPUTERS THE PROGRAM ONLY LASTS UNTIL THE NEXT WARM BOOT.  
  17. ;
  18. ;TO CREATE THE EDIR.COM FILE FROM THIS SOURCE USE ASM.COM AND LOAD.COM
  19. ; LIKE SO:
  20. ;
  21. ;     A>ASM EDIR
  22. ;     A>LOAD EDIR
  23. ;
  24.  
  25. ORG 0100H
  26.  
  27. JMP START
  28.  
  29. MESSAGE:
  30. DB 0DH,0AH
  31. DB 'EDIR v1.0 (C) 1987 by Robert Greenlee, P.O. Box 23286,',0DH,0AH
  32. DB 'San Diego CA 92123. 619-268-0112 Voice, Modem 619-569-8613.',0DH,0AH
  33. DB 'Please send for free CP/M & MSDOS product listings.',0DH,0AH
  34. DB 0DH,0AH
  35. DB 'You are now logged into the mystical Erased File Directory.',0DH,0AH
  36. DB 'While in this directory the ERA command will unerase files.',0DH,0AH
  37. DB 'To see which files are erased on this disk you can use DIR.',0DH,0AH
  38. DB 'You may also use the TYPE command to view the erased files.',0DH,0AH
  39. DB 'From here REN can change duplicate filenames one at a time.',0DH,0AH
  40. DB 'Refer to EDIR.DOC for more information.',0DH,0AH
  41. DB 0DH,0AH
  42. DB 'On most computers you can usually exit back to normal space',0DH,0AH  
  43. DB 'by typing Control-C to cause a Warm Boot.  Good luck.',0DH,0AH
  44. DB '$'
  45.  
  46. SAYOOPS:
  47. DB 0DH,0AH
  48. DB 'Oh darn nothing happened!  It seems you''re not using the real',0DH,0AH
  49. DB 'CP/M 2.2 BDOS which EDIR v1.0 needs in order for it to work.',0DH,0AH
  50. DB '$'
  51.  
  52. START:
  53. LHLD 1          ;GET START OF BIOS (EG.'S BELOW ASSUME EA00)
  54. DCR H           ;GO DOWN INTO BDOS
  55. DCR H
  56. MVI L,7FH       ;POINT TO CP/M 2.2 VERSION NUMBER, 22H (EG. E87F)
  57. MVI A,22H
  58. CMP M
  59.  
  60. MVI C,9        ;IF NOT CP/M 2.2 BDOS THEN SAY SO AND ABORT.
  61. LXI D,SAYOOPS
  62. JNZ 5
  63.  
  64. ; NOW UPDATE CODE LISTS BELOW WITH REAL MSB OF BDOS MEMORY LOCATIONS 
  65. MOV A,H
  66. STA LIST2A      ;EG. E8
  67. SUI 4
  68. STA LIST1A      ;EG. E4
  69. DCR A
  70.  
  71. ;;;STA LIST1B   ;EG. E3.  DON'T INCLUDE THIS IF YOU WANT TO BE 
  72.         ;           ABLE TO unERA AMBIGUOUS FILENAMES (LIKE ERA *.*).
  73.  
  74. STA LIST1D
  75. SUI 2           ;EG. E1 
  76. PUSH PSW
  77. SUI 2           ;EG. DF
  78. STA LIST1C      ;MSB OF ADDR OF USERNO IN BDOS
  79. ;
  80. MVI L,59H       ;EG. HL=E859    
  81. LXI D,LIST1
  82. MVI B,LIST2-LIST1
  83. CALL BMOVEL
  84.  
  85. POP PSW
  86. MOV H,A
  87. MVI L,48H       ;EG. HL=E148    
  88. ;;;LXI D,LIST2    ;DON'T NEED THIS SINCE DE ALREADY POINTS TO LIST2
  89. MVI B,LIST3-LIST2
  90.  
  91. CALL BMOVEL
  92.  
  93. MVI C,9
  94. LXI D,MESSAGE
  95. JMP 5        ;DISPLAY SIGNON MESSAGE AND RETURN TO CCP
  96.  
  97.  
  98. BMOVEL:
  99. LDAX D
  100. MOV M,A
  101. INX D
  102. INX H
  103. DCR B
  104. JNZ BMOVEL
  105. RET
  106.  
  107.  
  108.  
  109. ;ROUTINE IN LIST1 REPLACES AUTOSEL ROUTINE 
  110. ;EG. E859
  111. LIST1:
  112. MVI M,0E5H      ;SET USERS FCB BYTE 0 TO E5H FOR ERASED FILES ONLY
  113.  
  114. DB 3AH          ;LDA USERNO (GET CURRENT USER NUMBER INTO A).
  115. DB 41H
  116. LIST1C: DB 0    ;EG. DF41
  117.  
  118. DB 32H          ;STA.  MAKES ERA ROUTINE USE CUR. USER NUMBER INSTEAD OF E5.
  119. DB 0AFH         
  120. LIST1D: DB 0    ;EG. E3AF 
  121.  
  122. ;;
  123. ;RESET THE "JUST ONE FILE PLEASE" TRICK IN ERA/REN ROUTINES 
  124. MVI A,0C8H
  125. DB 01H          ;OPCODE FOR LXI B
  126.  
  127. ;IF ENTRY IS MADE AT POKEC9 THEN "JUST ONE" TRICK GOES INTO EFFECT 
  128. POKEC9:
  129. MVI A,0C9H
  130.  
  131. POKEC:
  132. DB 32H
  133. DB 2AH          ;CAUSES RENAME COMMAND TO STOP AFTER ONE FILE 
  134. LIST1A: DB 0    ;EG. E42A
  135.  
  136. ;;;DB 32H    ;CAUSES ERA COMMAND TO STOP AFTER ONE FILE
  137. ;;;DB 0A7H    ; WHICH ALSO MEANS NO ERA *.* ETC. ALLOWED. 
  138. ;;;LIST1B: DB 0 ;EG. E3A7
  139. RET
  140.  
  141. ;;;
  142.  
  143. ;ROUTINE IN LIST2 REPLACES "CHECK FOR READ ONLY FILE ROUTINE" 
  144. ; WHICH IS CALLED BEFORE DIRECTORY WRITE TAKES PLACE
  145. ;EG. E148
  146. LIST2:
  147. DB 0FH          ;LOOK AT 16TH BYTE IN DIRECTORY
  148. DB 0
  149. DAD D
  150. MOV A,M
  151. DCR A           ;DECREMENT IT (IF E5H IT WILL GO TO E4H)
  152. RPE             ;RETURNS ONLY IF ACCUMULATOR WAS 80H PRIOR TO DCR A
  153.  
  154. ;IF ACC WAS E5H THEN THAT'S THE END OF DIRECTORY 
  155. ;IF ACC WAS NOT E5H OR 80H THEN ALLOW THIS DIRECTORY
  156. ; ENTRY TO BE RENAMED/UNERASED BUT CAUSE THIS TO BE THE LAST
  157. ; DIRECTORY ENTRY FOR THIS FILE BY POKING RETURN OPCODES INTO 
  158. ; REN AND ERA ROUTINES USING OUR POKEC9 ROUTINE 
  159. CPI 0E5H-1
  160. DB 0C2H         ;OPCODE FOR JNZ (JUMPS IF NEITHER 80H OR E5H) 
  161. DB POKEC9-LIST1+59H
  162. LIST2A: DB 0    ;EG. E864
  163.  
  164. ;OK IT WAS E5H SO PREVENT ANYTHING FROM HAPPENING TO THIS DIRECTORY
  165. ; ENTRY BY TERMINATING ERA/REN ROUTINES NOW.
  166. POP PSW         ;TAKE RETURN OFF STACK AND TERMINATE ERA/REN ROUTINE
  167.         ; (ACTUALLY ONLY ERA COULD EVER BE TERMINATED SINCE
  168.         ;  REN DOESN'T ACCEPT AMBIGUOUS FILENAMES).
  169. RET
  170.  
  171. LIST3 EQU $
  172.  
  173.  
  174.  END
  175.  
  176.