home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / simtel / sigm / vols000 / vol016 / file-xt2.asm < prev    next >
Assembly Source File  |  1984-04-29  |  7KB  |  393 lines

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