home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol147 / file-ext.a86 < prev    next >
Text File  |  1984-04-29  |  7KB  |  412 lines

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