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 / CPM / ZCPR33 / A-R / DUMP12.LBR / DUMP12.MZC / DUMP12.MAC
Text File  |  2000-06-30  |  8KB  |  430 lines

  1. ; DUMP.MAC    Version 1.2
  2. ;
  3. VERS    equ    12        ; current version
  4. SubVers    equ    ' '        ; current revision level
  5. ;
  6. ; Displays disk file on console in hexadecimal and ASCII.  For ZCPR3 only.
  7. ;
  8. ; USAGE:
  9. ;
  10. ;    DUMP {dir:}<fn.ft> {/}{<option>}
  11. ;
  12. ; A filename is required.  If a DIR or DU specification is not given
  13. ; then the current drive/user is assumed.
  14. ;
  15. ; OPTIONS:  A slash before the options is not required.  The only option
  16. ; currently recognized is
  17. ;
  18. ;    A   Display ASCII, even if high bit is set
  19. ;
  20. ; Two slashes give a brief help message.  Invalid options are ignored.
  21. ;
  22. ; Version 1.2 -- October 2, 1989 -- Gene Pizzetta
  23. ;    Modified for ZCPR3.  Added help message.  Added highlighting
  24. ;    from TCAP.  Added automatic paging every two sectors.  Added
  25. ;    option to display ASCII with high bit set.
  26. ; Version 1.1 -- September 16, 1987 -- Gene Pizzetta
  27. ;    Modified screen display slightly.  Added sign-on.
  28. ; Version 1.0 -- August 15, 1987 -- Gene Pizzetta
  29. ;    Original version.
  30. ;
  31. ; Suggestions and, especially, bug reports are welcome:
  32.     Gene Pizzetta
  33.     481 Revere Street
  34.     Revere, MA 02151
  35.     Voice:  (617) 284-0891
  36.     Newton Centre Z-Node:  (617) 965-7259
  37.     Lilliput Z-Node:  (312) 649-1730
  38.     GEnie:  E.PIZZETTA
  39. ;
  40. Bdos    equ    0005h        ; BDOS entry
  41. MemTop    equ    0006h        ; top of memory vector
  42. CpmFcb    equ    005Ch        ; default FCB
  43. FcbTyp    equ    CpmFcb+9    ; filetype in FCB
  44. FcbUsr    equ    CpmFcb+13    ; user in FCB (ZCPR3)
  45. CpmDma    equ    080h        ; default DMA buffer
  46. TPA    equ    100h        ; program load address
  47. ;
  48. ConOut    equ    2        ; print character
  49. DirIO    equ    6        ; direct console I/O
  50. PrtStr    equ    9        ; print string
  51. ConSt    equ    11        ; console status
  52. FOpen    equ    15        ; file open
  53. FRead    equ    20        ; file read sequential
  54. CurUsr    equ    32        ; get/set user
  55. ;
  56. LF    equ    0Ah
  57. CR    equ    0Dh
  58. ;
  59.     MACLIB    Z80
  60. ;
  61.     org    TPA
  62. ;
  63.     jmp    Main
  64. ;
  65.     db    'Z3ENV'
  66.     db    1
  67. Z3EAdr:    dw    0FE00h
  68. ;
  69. ; Messages ...
  70. ;
  71. MsgUse:    db    'DUMP    Version '
  72.     db    VERS/10+'0','.',VERS mod 10+'0',SubVers,CR,LF
  73.     db    'Usage:',CR,LF
  74.     db    '   DUMP {dir:}<fn.ft> {/}{<option>}',CR,LF
  75.     db    'Option:',CR,LF
  76.     db    '   A   Display ASCII with high bit set',0
  77. ;
  78. MsgOpn:    db    'File not found.',0
  79. MsgMor:    db    CR,'[more]',0
  80. MsgEra:    db    CR,'      ',CR,0
  81. MsgSec:    db    CR,'Sector Number ',0
  82. MsgHdr:    db    CR,LF,'      00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F'
  83.     db    '   0123456789ABCDEF',0
  84. ;
  85. Main:    sspd    OldStk        ; save old stack
  86.     lhld    MemTop        ; ..and set up new one
  87.     mov    a,h
  88.     sui    16        ; preserving CCP
  89.     mov    h,a
  90.     sphl
  91. ;
  92.     xra    a        ; initialize flags
  93.     sta    OpAFlg
  94. ;
  95.     call    GetOpt
  96.     jz    ShoHlp
  97. ;
  98. GoToIt:    call    GetTCP        ; get TCAP info
  99.     lxi    h,0        ; initialize offset address
  100.     shld    OffAdr        ; ..to zero
  101.     lxi    h,FcbTyp    ; point to filetype
  102.     mov    a,m        ; do we have a COM file?
  103.     cpi    'C'
  104.     jrnz    GetUsr        ; (no)
  105.     inx    h
  106.     mov    a,m
  107.     cpi    'O'
  108.     jrnz    GetUsr        ; (no)
  109.     inx    h
  110.     mov    a,m
  111.     cpi    'M'
  112.     jrnz    GetUsr        ; (no)
  113.     lxi    h,TPA        ; yes, so re-set offset at 100h
  114.     shld    OffAdr
  115. ;
  116. GetUsr:    lda    FcbUsr        ; get user number
  117.     mov    e,a        ; ..and set it
  118.     mvi    c,CurUsr
  119.     call    Bdos
  120. ;
  121.     lxi    d,CpmFcb    ; open file
  122.     mvi    c,FOpen
  123.     call    Bdos
  124.     inr    a
  125.     jrnz    NxtPag        ; (okay)
  126.     lxi    h,MsgOpn    ; no file
  127.     call    PrtNSt
  128.     jmp    Exit
  129. ;    
  130. NxtPag:    mvi    a,2
  131.     sta    PagCnt
  132. ;
  133. NxtSec:    lxi    d,CpmFcb
  134.     mvi    c,FRead
  135.     call    Bdos
  136.     ora    a
  137.     jnz    Exit
  138.     lxi    h,DimStr
  139.     call    PrtNSt
  140.     lxi    h,MsgHdr
  141.     call    PrtNSt
  142.     lxi    h,NorStr
  143.     call    PrtNSt
  144.     mvi    a,8
  145.     sta    LinCnt
  146.     lxi    h,128
  147.     shld    BufPtr
  148. ;
  149. NxtLin:    lxi    h,OutBuf
  150.     mvi    m,CR
  151.     inx    h
  152.     mvi    m,LF
  153.     inx    h
  154.     lded    OffAdr
  155.     mov    a,d
  156.     call    HexOut
  157.     mov    a,e
  158.     call    HexOut
  159.     mvi    m,' '
  160.     inx    h
  161.     mvi    m,' '
  162.     inx    h
  163.     mvi    m,0
  164.     xchg
  165.     lxi    b,16
  166.     dad    b
  167.     shld    OffAdr
  168. ;
  169.     lxi    h,DimStr
  170.     call    PrtNSt
  171.     lxi    h,OutBuf
  172.     call    PrtNSt
  173.     lxi    h,NorStr
  174.     call    PrtNSt
  175. ;
  176.     lxi    h,OutBuf
  177.     lded    BufPtr
  178.     mvi    b,16
  179. ;
  180. NxtByt:    ldax    d
  181.     inx    d
  182.     call    HexOut
  183.     mvi    m,' '
  184.     inx    h
  185.     djnz    NxtByt
  186.     mvi    m,' '
  187.     inx    h
  188.     mvi    m,' '
  189.     inx    h
  190.     mvi    m,0
  191.     lxi    h,OutBuf
  192.     call    PrtNSt
  193.     lhld    BufPtr
  194.     mvi    b,16
  195. ;
  196. NxtAsc:    lda    OpAFlg        ; extended ASCII option?
  197.     ora    a
  198.     jrnz    ExtAsc        ; (yes)
  199.     mov    a,m        ; here we display real ASCII only
  200.     inx    h
  201.     cpi    7Fh
  202.     jp    Ctrl
  203.     cpi    ' '
  204.     jrc    Ctrl
  205.     cpi    0FFh
  206.     jrnz    NotCtl
  207.     jr    Ctrl
  208. ;
  209. ExtAsc:    mov    a,m        ; here we display ASCII with or
  210.     inx    h        ; ..without high bit set
  211.     ani    7Fh        ; mask high bit
  212.     cpi    ' '
  213.     jrc    Ctrl
  214.     cpi    7Fh
  215.     jrnz    NotCtl
  216. ;
  217. Ctrl:    mvi    a,'.'
  218. ;
  219. NotCtl:    mov    e,a
  220.     mvi    c,ConOut
  221.     push    b
  222.     push    h
  223.     call    Bdos
  224.     pop    h
  225.     pop    b
  226.     djnz    NxtAsc
  227.     shld    BufPtr
  228.     lxi    h,LinCnt
  229.     dcr    m
  230.     jnz    NxtLin
  231.     mvi    e,LF
  232.     mvi    c,ConOut
  233.     call    Bdos
  234.     lxi    h,PagCnt
  235.     dcr    m
  236.     jnz    NxtSec
  237. ;
  238.     lxi    h,DimStr
  239.     call    PrtNSt
  240.     lxi    h,MsgMor    ; say there's more
  241.     call    PrtNSt
  242.     lxi    h,NorStr
  243.     call    PrtNSt
  244. WaitLp:    mvi    c,DirIO        ; wait for response
  245.     mvi    e,0FFh
  246.     call    Bdos
  247.     ora    a
  248.     jrz    WaitLp
  249.     push    psw
  250.     lxi    h,MsgEra
  251.     call    PrtNSt
  252.     pop    psw
  253.     cpi    3        ; ^C ?
  254.     jrz    Exit        ; (yes)
  255.     jmp    NxtPag
  256. ;
  257. ShoHlp:    lxi    h,MsgUse    ; print usage message
  258.     call    PrtNSt
  259. ;
  260. Exit:    lspd    OldStk        ; restore old stack pointer
  261.     ret            ; ..and call it a day!
  262. ;
  263. ; subroutines . . .
  264. ;
  265. ; GetOpt -- gets options from command line
  266. ;
  267. GetOpt:    lxi    h,CpmDma+1    ; point to command tail
  268.     lda    CpmDma        ; anything there?
  269.     ora    a
  270.     rz            ; (no)
  271.     mov    b,a        ; yes, put number of chars in B
  272.     mvi    c,0
  273.     call    EatSpc        ; gobble spaces
  274.     cpi    '/'        ; is it a slash?
  275.     rz            ; (yes, no filename)
  276.     mvi    a,' '        ; no, get past filename
  277.     ccir
  278.     rnz            ; (no options)
  279.     call    EatSpc
  280.     ora    a
  281.     jrz    RetOK        ; (no options)
  282.     mov    a,m        ; get first character of second token
  283.     cpi    '/'        ; a slash?
  284.     jrnz    ScnOpt        ; (no, so get options)
  285.     inx    h        ; yes, move past it
  286.     dcx    b        ; ..and get options
  287. ;
  288. ScnOpt:    call    ScnTbl
  289.     xchg            ; point back to options
  290.     inx    h
  291.     djnz    ScnOpt        ; loop through options
  292. ;
  293. RetOK:    mvi    a,1        ; okay, must return NZ
  294.     ora    a
  295.     ret
  296. ;
  297. ScnTbl:    mov    c,m        ; put option in C
  298.     lxi    d,OptTbl    ; point DE to option table
  299. ScnTLp:    ldax    d        ; get table option
  300.     ora    a        ; end of table?
  301.     jz    NoMat        ; (yes, no match)
  302.     inx    d        ; no, keep looking
  303.     cmp    c        ; match?
  304.     jz    TMatch        ; (yes)
  305.     inx    d        ; move pointer to next entry
  306.     inx    d
  307.     jmp    ScnTLp        ; ..and keep looking
  308. ;
  309. NoMat:    xchg
  310.     ret
  311. ;
  312. TMatch:    push    h        ; save option pointer
  313.     ldax    d        ; put address from table into HL
  314.     mov    l,a
  315.     inx    d
  316.     ldax    d
  317.     mov    h,a
  318.     pop    d        ; recover option pointer in DE
  319.     mvi    a,1        ; set option flag by jumping to
  320.     pchl            ; ..table routine and returning
  321. ;
  322. ; Option Jump Table
  323. ;
  324. OptTbl:    db    'A'        ; A = display ASCII with hi-bit set
  325.     dw    OptA
  326.     db    '/'        ; / = help
  327.     dw    OptH
  328.     db    0        ; end of option table
  329. ;
  330. ; Option routines
  331. ;
  332. OptA:    sta    OpAFlg
  333.     ret
  334. OptH:    jmp    ShoHlp
  335. ;
  336. ; EatSpc -- gobbles up spaces.  Address of string in HL, length in B
  337. ;
  338. EatSpc:    mov    a,m        ; get character
  339.     inx    h        ; increment pointer
  340.     dcx    b        ; decrement counter
  341.     cpi    ' '        ; a space?
  342.     jrz    EatSpc        ; (yes, eat it)
  343.     dcx    h        ; no, back up pointer
  344.     inx    b        ; ..and counter, and
  345.     ret            ; ..return with character
  346. ;
  347. ; HexOut -- outputs a binary number as hexadecimal
  348. ;
  349. HexOut:    push    a
  350.     rar
  351.     rar
  352.     rar
  353.     rar
  354.     ani    15
  355.     adi    '0'
  356.     cpi    ':'
  357.     jrc    Hex1
  358.     adi    7
  359. ;
  360. Hex1:    mov    m,a
  361.     inx    h
  362.     pop    psw
  363.     ani    15
  364.     adi    '0'
  365.     cpi    ':'
  366.     jrc    Hex2
  367.     adi    7
  368. ;
  369. Hex2:    mov    m,a
  370.     inx    h
  371.     ret
  372. ;
  373. ; PrtNSt -- print null-terminated string, address in HL
  374. ;
  375. PrtNSt:    xra    a
  376.     add    m
  377.     rz
  378.     mov    e,a
  379.     mvi    c,ConOut
  380.     push    h
  381.     call    Bdos
  382.     pop    h
  383.     inx    h
  384.     jr    PrtNSt
  385. ;
  386. ; GetTCP -- get highlight strings from TCAP
  387. ;
  388. GetTCP:    lhld    Z3EAdr
  389.     lxi    d,97h        ; offset to terminal table
  390.     dad    d
  391.     mvi    b,3        ; set for 3 iterations
  392. TCPLp:    mov    a,m        ; look for a null
  393.     inx    h
  394.     ora    a
  395.     jnz    TCPLp        ; (not yet)
  396.     dcr    b        ; yep!
  397.     mov    a,b
  398.     ora    a        ; three yet?
  399.     jnz    TCPLp        ; (nope!)
  400.     lxi    d,DimStr
  401. DimLp:    mov    a,m        ; move dim string to us
  402.     inx    h
  403.     stax    d
  404.     inx    d
  405.     ora    a
  406.     jnz    DimLp
  407.     lxi    d,NorStr
  408. NorLp:    mov    a,m        ; move normal string too
  409.     inx    h
  410.     stax    d
  411.     inx    d
  412.     ora    a
  413.     jnz    NorLp
  414.     ret            ; we're through
  415. ;
  416. ; Uninitialized data ...
  417. ;
  418. OpAFlg:    ds    1
  419. DimStr:    ds    10
  420. NorStr:    ds    10
  421. SecCnt:    ds    2
  422. LinCnt:    ds    1
  423. OffAdr:    ds    2
  424. BufPtr:    ds    2
  425. PagCnt:    ds    1
  426. OldStk:    ds    2
  427. OutBuf:    ds    4
  428. ;
  429.     end
  430.