home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol135 / dir-dump.asm < prev    next >
Encoding:
Assembly Source File  |  1984-04-29  |  6.8 KB  |  402 lines

  1. ;            DIR-DUMP.ASM Version 2.2
  2. ;
  3. ;                as of
  4. ;
  5. ;              September 23/11/1980
  6. ;
  7. ;
  8. ;    Mod for 64 char wide screen 23/11/82 W.Ellis
  9. ;
  10. ;   Changed are; Spacing between characters.
  11. ;           ; Headings have been abrevated
  12. ;           ; Proprietary bit check was removed
  13. ;
  14. ;           ; All this was to make it fit on one
  15. ;           ; 64 character line
  16. ;
  17. ;           ; Bit 7 gets turned off before the filename
  18. ;           ; gets printed
  19. ;
  20. ;    Name changed from FILE-XT2.ASM after this change
  21. ;
  22. ;
  23. ;==============================================================
  24. ;
  25. ;
  26. ;  Renamed from filename FILE-EXT.ASM, to indicate CP/M Version
  27. ;  2.X only compatibility (display format) only.
  28. ;
  29. ;  Added: User number  display, "proprietary software" display
  30. ;      and  removed "ILLCHK" for non-ASCII characters which 
  31. ;      then requested deletion of the questionable file.
  32. ;
  33. ;                   Kelly Smith
  34. ;
  35. ;
  36. ;  Originally  named  FILES.ASM,  and  from a  disassembly  by 
  37. ; "J.A.P"  of January 23,1980...FILE-XT2.ASM will display  the 
  38. ; selected disk's directory entries in the form:
  39.  
  40. ;Us Filename.Typ RSH ExSfSiRc <-----------Group-------------->'
  41. ;============================================================='
  42. ;
  43. ; Where:
  44. ;
  45. ; "Us" is the User assignment for the file.
  46. ; "Filename" is the ASCII file name.
  47. ; "Typ" is the ASCII file type.
  48. ; "R" is the "read only" control bit
  49. ; "S" is the "system directory" control bit
  50. ; "R" is the "reserved" (MP/M Ver.1.0) control bit
  51. ; "Ex" is the "file extension" byte
  52. ; "Sf" is a CP/M "internal function" byte.
  53. ; "Si" is a CP/M "internal function" byte
  54. ; "Rc" is the "record count" byte.
  55. ; "Group" is the "allocation vector table" for the file.
  56. ;  The "hack-job" I did on this one was less than  ideal,  but 
  57. ; none the less, it get's the job done...the display format is 
  58. ; now  alot  cleaner,  and  it    does'nt  "warm    boot"  as  the 
  59. ; FILES.ASM version did...
  60. ;  The    program will display the disk directory of the    logged 
  61. ; on  disk,  including all the Hexadecimal information on  the 
  62. ; groups. 
  63. ;  On  the  subject  of     "hack-job's"  of  software,  read  an 
  64. ; interesting  article    in  Psychology    Today  magazine,  "The 
  65. ; Hacker  Papers;  Computer  Addiction:     Reflection on    a  New 
  66. ; Obsession"...August 1980 issue, pages 62-69.
  67. ;                Best regards,
  68. ;                Kelly Smith, CP/M-NET (tm)
  69. ;                805-527-9321 (Modem, 300 Baud)
  70. ;                805-527-0518 (Verbal)
  71.  
  72.     ORG    0100H
  73.  
  74. BDOS    EQU    05H
  75. TBUFF    EQU    80H
  76. ;
  77. CR    EQU    0DH    ;ASCII CARRIAGE RETURN
  78. LF    EQU    0AH    ;ASCII LINE FEED
  79. ;
  80. ;
  81. FILES:            ; 
  82.     LXI    H,0    ;
  83.     DAD    SP    ;
  84.     SHLD    OLDSTK    ;
  85.     LXI    SP,NEWSTK    ;
  86.     MVI    C,12    ;GET CP/M VERSION NUMBER
  87.     CALL    BDOS
  88.     CPI    20H    ;CP/M VERSION 2.0 OR BETTER?
  89.     JNC    BEGIN    ;IF VERSION O.K., PRESS ON
  90.     LXI    D,BADVER;OOPS...BAD VERSION FOR THIS FILE
  91.     CALL    PRINT
  92.     JMP    QUIT    ;QUIT
  93. ;
  94. ;
  95. ;    SYSTEM SUBROUTINES
  96. ;
  97. ;    PRINT STRING FROM D&E REGS.
  98. ;
  99. PRINT:    MVI    C,9
  100.     CALL    BDOS
  101.     RET
  102. ;
  103. ;    TYPE A CHAR FROM (A)
  104. ;
  105. TYPE:        ; 
  106.     PUSH    B
  107.     PUSH    D
  108.     PUSH    H
  109.     MVI    C,2
  110.     MOV    E,A
  111.     CALL    BDOS    ;
  112.     POP    H
  113.     POP    D
  114.     POP    B
  115.     RET
  116. ;
  117. ;    SEARCH FOR A FILE
  118. ;
  119. SEARCH:        ; 
  120.     PUSH    B
  121.     PUSH    D
  122.     PUSH    H
  123.     MVI    C,11H
  124.     LXI    D,AFN    ;
  125.     CALL    BDOS    ;
  126.     STA    RESULT    ;
  127.     POP    H
  128.     POP    D
  129.     POP    B
  130.     RET
  131. ;
  132. ;    AMBIGUOUS FILENAME.TYP
  133. ;
  134. AFN:        ; 
  135.     DB    '?????????????'
  136. RESULT:        ; 
  137.     DB    0    ;STORAGE FOR RESULT OF BDOS CALL
  138. ;
  139. ;    FIND NEXT OCCURRENCE OF FILE
  140. ;
  141. NEXTFILE:        ; 
  142.     PUSH    B
  143.     PUSH    D
  144.     PUSH    H
  145.     MVI    C,12H
  146.     LXI    D,AFN    ;
  147.     CALL    BDOS    ;
  148.     STA    RESULT    ;
  149.     POP    H
  150.     POP    D
  151.     POP    B
  152.     RET
  153. ;
  154. ;    GET INPUT FROM CONSOLE
  155. ;
  156. CONIN:        ; 
  157.     PUSH    B
  158.     PUSH    D
  159.     PUSH    H
  160.     MVI    C,1
  161.     CALL    BDOS    ;
  162.     POP    H
  163.     POP    D
  164.     POP    B
  165.     RET
  166. ;
  167. ;    CONVERT A BYTE IN (A) TO TWO PRINTED CHARACTERS
  168. ;
  169. HEXASC:        ; 
  170.     CPI    0AH
  171.     JC    HEXA2    ;
  172.     ADI    '7'    ;
  173.     CALL    TYPE    ;
  174.     RET
  175. HEXA2:        ; 
  176.     ADI    '0'    ;
  177.     CALL    TYPE    ;
  178.     RET
  179. HEXCON:        ; 
  180.     PUSH    PSW
  181.     RAR
  182.     RAR
  183.     RAR
  184.     RAR
  185.     ANI    0FH
  186.     CALL    HEXASC    ;
  187.     POP    PSW
  188.     ANI    0FH
  189.     CALL    HEXASC    ;
  190.     RET
  191. ;
  192. ;    NEWLINE
  193. ;
  194. CRLF:        ; 
  195.     MVI    A,CR
  196.     CALL    TYPE    ;
  197.     MVI    A,LF
  198.     CALL    TYPE    ;
  199.     RET
  200. ;
  201. ;    PRINT A SPACE
  202. ;
  203. SPACE:        ; 
  204.     MVI    A,' '    ;
  205.     CALL    TYPE    ;
  206.     RET
  207. ;
  208. ;    MAIN WORK LOOP
  209. ;
  210. ;    THIS ROUTINE FINDS THE POSITION OF THE FILE
  211. ;    INFORMATION IN THE DIRECTORY DMA, PRINTS THE
  212. ;    DATA IF IT IS A CURRENT FILE, AND PROMPTS THE
  213. ;    OPERATOR FOR INSTRUCTIONS IF THE FILENAME HAS
  214. ;    ILLEGAL (NON-ASCII) DATA IN IT.
  215. ;
  216. WORKLOOP:        ; 
  217.     LDA    RESULT    ;RESULT HOLDS POSITION OF-
  218.     MOV    B,A    ; -THE DIRECTORY ENTRY IN THE DIR. DMA
  219.     ANI    3
  220.     RAL
  221.     RAL
  222.     RAL
  223.     RAL
  224.     RAL
  225.     ANI    0E0H
  226.     MOV    E,A
  227.     MVI    D,0
  228.     LXI    H,TBUFF ;
  229.     DAD    D    ;HL NOW POINTS AT THE FILE INFO
  230.     MOV    A,M
  231.     CPI    0E5H    ;KILLED FILE?
  232.     RZ        ;YES
  233.     MOV    A,M
  234.     CALL    HEXCON    ;PRINT USER NUMBER
  235.     CALL    SPACE
  236.     PUSH    H
  237.     PUSH    H
  238.     INX    H    ;POINT TO FIRST CHARACTER IN FILE NAME
  239.  
  240.     MVI    B,8
  241. WORK02: MOV    A,M    ;PRINT FILE NAME
  242.     ANI    7FH    ;AND IT TO TURN OFF BIT 7
  243.     CALL    TYPE    ;
  244.     DCR    B
  245.     INX    H
  246.     JNZ    WORK02    ;
  247.     MVI    B,3
  248.     MVI    A,'.'
  249.     CALL    TYPE    ;PRINT NEXT THREE CHARACTERS AS ASCII
  250. WORK03: MOV    A,M
  251.     ANI    7FH    ;AND IT TO TURN OFF BIT 7
  252.     CALL    TYPE    ;
  253.     DCR    B
  254.     INX    H
  255.     JNZ    WORK03    ;
  256.     CALL    TYPE
  257.     CALL    SPACE
  258.     MVI    B,3
  259.     POP    H    ;NOW DISPLAY ATTRIBUTES
  260.     LXI    D,9
  261.     DAD    D
  262.  
  263. WORK03A:MOV    A,M
  264.     RLC        ;TEST $SYS AND $R/O, AND RESERVED
  265.     MVI    A,'1'
  266.     JC    WORK03B
  267.     MVI    A,'0'
  268. WORK03B:CALL    TYPE
  269.     DCR    B
  270.     INX    H
  271.     JNZ    WORK03A
  272.  
  273.     MVI    B,20
  274. WORK04: MOV    A,B
  275.     ANI    3
  276.     CZ    SPACE    ;
  277.     MOV    A,M
  278.     CALL    HEXCON    ;
  279.     INX    H
  280.     DCR    B
  281.     JNZ    WORK04    ;
  282.     CALL    CRLF    ;
  283.     POP    H
  284.     RET
  285. ;
  286. BADVER: DB    'Sorry, CP/M Version 2.X required$'
  287.  
  288. MSG:    DB    'Us Filename.Typ RSH ExSfSiRc'
  289.     DB    ' <--------------Group-------------->'
  290.     DB    CR,LF
  291.     DB    '============================'
  292.     DB    '===================================='
  293.     DB    CR,LF,LF,'$'
  294. ;
  295. ;
  296. ;
  297. ; ERROR MESSAGES
  298. ;
  299. ERROR1: LXI    D,ERMSG1;SAY NO GO, AND BAIL OUT
  300.     CALL    PRINT
  301.     JMP    QUIT
  302.  
  303. ;
  304. ERMSG1: DB    CR,LF,'Disk select should be " N:"$'
  305.  
  306. ;
  307. ERROR2: LXI    D,ERMSG2;SAY NO GO, AND BAIL OUT
  308.     CALL    PRINT
  309.     JMP    QUIT
  310.  
  311. ERMSG2: DB    CR,LF,'Bad delimeter, should be ":"$'
  312.  
  313. ;
  314. ERROR3: LXI    D,ERMSG3;SAY NO GO, AND BAIL OUT
  315.     CALL    PRINT
  316.     JMP    QUIT
  317.  
  318. ERMSG3: DB    CR,LF,'No drive specified$'
  319.  
  320. ;
  321. ERROR4: LXI    D,ERMSG4;SAY NO GO, AND BAIL OUT
  322.     CALL    PRINT
  323.     JMP    QUIT
  324.  
  325. ERMSG4: DB    CR,LF,'Only drives A to D allowed$'
  326.  
  327. ;
  328.  
  329. ;    PROGRAM BEGINS HERE
  330. ;
  331. BEGIN:
  332. ;
  333. ; CHECK FOR DRIVE SPECIFICATION
  334. ;
  335.     CALL    CRLF
  336.     LDA    TBUFF    ;GET LENGTH OF COMMAND PARAMETERS
  337.     CPI    2    ; IF <2, NO PARAMETERS
  338.     JC    MAIN01    ; MUST BE PRESENT LOGGED-IN DRIVE
  339.     JZ    ERROR1    ;EXACTLY 2, IS ERROR
  340.     LHLD    TBUFF+2 ;AT LEAST 3 THEN...
  341.     MOV    A,H    ;NEXT CHARACTER SHOULD BE ":"
  342.     CPI    ':'
  343.     JNZ    ERROR2    ;ONLY ALLOW DRIVE SET
  344.     MOV    A,L    ;NEXT CHARACTER SHOULD BE DRIVE
  345.     CPI    'A'    ;AT A MINIMUM, "A"
  346.     JC    ERROR3
  347.     CPI    'E'    ;AT A MAXIMUM "D"
  348.     JNC    ERROR4
  349.     ANI    7    ;STRIP BITS, FOR 0 TO 3
  350.     DCR    A    ;BACK OFF FOR 0 TO 3
  351.     MOV    E,A    ;MAKE DISK NUMBER
  352.     MVI    D,0
  353.     MVI    C,14    ;BDOS SELECT DISK FUNCTION
  354.     CALL    BDOS
  355.  
  356. MAIN01: LXI    D,MSG
  357.     CALL    PRINT
  358.     CALL    SEARCH    ;
  359. MAIN02:        ; 
  360.     LDA    RESULT    ;
  361.     CPI    0FFH
  362.     JZ    QUIT
  363.     CALL    WORKLOOP    ;
  364.     CALL    NEXTFILE    ;
  365.     JMP    MAIN02    ;
  366. ;MAIN04:        ; 
  367. ;    LHLD    DELPTR    ;
  368. ;    LXI    D,DELFIL
  369. ;    MOV    A,L
  370. ;    CMP    E
  371. ;    JNZ    MAIN06    ;
  372. ;    MOV    A,H
  373. ;    CMP    D
  374. ;    JZ    QUIT    ;
  375. ;MAIN06:        ; 
  376. ;    LXI    D,-10H
  377. ;    DAD    D
  378. ;    SHLD    DELPTR    ;
  379. ;    XCHG
  380. ;    CALL    DELETE    ;
  381. ;    JMP    MAIN04    ;
  382. QUIT:        ; 
  383.     LHLD    OLDSTK    ;
  384.     SPHL
  385.     RET        ;
  386. ;
  387. ;    SOME STORAGE LOCATIONS
  388. ;
  389. OLDSTK: DS    2    ;STORAGE FOR "OLD" STACK POINTER
  390.     DS    32
  391. NEWSTK    EQU    $    ;STORAGE FOR "NEW" STACK
  392. ;
  393. ;
  394.     END
  395.