home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / jsage / znode3 / z3util / acmdu11.lbr / ACMDUTIL.MQC / ACMDUTIL.MAC
Encoding:
Text File  |  1993-06-07  |  5.5 KB  |  368 lines

  1. ;  PROGRAM:  ACMDUTL
  2. ;  AUTHOR:  Paul Pomerleau
  3. ;  VERSION:  1.1
  4. ;  DATE:  30 September 85
  5. VERS    equ    11
  6. Z3ENV    set    0f300h
  7.  
  8. ;    ACMDUTIL allows quick access to an ARUNZ alias file.
  9. ; It was written to eliminate the need to use a word processor
  10. ; on ALIAS.CMD.  Ideally, the ALIAS.CMD file should be created
  11. ; by ACMDUTIL as this would produce an alphabetically sorted
  12. ; list.
  13. ;    ACMDUTIL looks for ALIAS.CMD in the named directory
  14. ; specified by the string at DIRNAME (typically the ALIAS.CMD
  15. ; file is kept in base) so change it if you want to look for 
  16. ; ALIAS.CMD in ROOT: for example.
  17.  
  18.     ext    fi0$open, f0$get            ; SYSLIB
  19.     ext    fo0$open, fo0$close, f0$put
  20.     ext    f$delete, f$rename
  21.     ext    subhd, instr, compb, bbline, print
  22.     ext    cout, bios, caps, getud, putud, sknsp
  23.     ext    z3init, dirndr, z3log            ; Z3LIB
  24.  
  25.     ASEG
  26.     .z80
  27.  
  28. True        equ    1
  29. False        equ    not True
  30. Linefeed    equ    0ah
  31. Carriage    equ    0dh
  32. CLINE        equ    80h
  33. FCB1        equ    5ch
  34. FCB2        equ    6ch
  35.  
  36. Drive        equ    1
  37. User        equ    0
  38.     org    100h
  39.  
  40. ;
  41. ; Environment Definition
  42. ;
  43.     if    Z3ENV ne 0
  44. ;
  45. ; External ZCPR3 Environment Descriptor
  46. ;
  47.     jp    START
  48.     db    'Z3ENV'        ;This is a ZCPR3 Utility
  49.     db    1        ;External Environment Descriptor
  50. Z3EADR:
  51.     dw    Z3ENV
  52. START:
  53.     ld    hl,(Z3EADR)    ;pt to ZCPR3 environment
  54. ;
  55.     else
  56. ;
  57. ; Internal ZCPR3 Environment Descriptor
  58. ;
  59.     MACLIB    Z3BASE.LIB
  60.     MACLIB    SYSENV.LIB
  61. Z3EADR:
  62.     jp    START
  63.     SYSENV
  64. START:
  65.     ld    hl,Z3EADR    ;pt to ZCPR3 environment
  66.     endif
  67. ;
  68. ; Start of Program
  69. ;
  70.  
  71.     call    Z3INIT
  72.     call    PUTUD
  73.     call    PRINT
  74. db    'ACMDUTIL, Version ',(VERS / 10) + '0','.',(VERS mod 10) + '0',13,10,0
  75.     ld    a,(CLINE)
  76.     or    a
  77.     jp    z,NOTHELP
  78.     ld    a,(82h)
  79.     cp    '/'
  80.     jp    nz,NOTHELP
  81.     call    PRINT
  82. db    'A fast little ALIAS.CMD utility which displays, adds and '
  83. db    'deletes aliases.',13,10,13,10
  84. db    'Command line:',13,10
  85. db    ' ACMDUTIL [DU:] [Alias name to display] <ret>',13,10
  86. db    'At the colon:',13,10
  87. db    ' Name of alias <space> Alias text <ret>  --  Creates an alias.',13,10
  88. db    ' Name of alias <ret>  --  Deletes an alias.',0
  89.     ret
  90. NOTHELP:
  91.     ld    hl,FCB1 + 1
  92.     ld    a,(hl)
  93.     cp    ' '
  94.     jr    nz,ATODISP
  95.     ld    a,0ffh
  96.     ld    (DONTBASE),a
  97.     ld    a,(FCB1)
  98.     ld    (IFCB),a
  99.     ld    a,(FCB1 + 13)
  100.     ld    (IFCB + 13),a
  101.     ld    hl,FCB2 + 1
  102.     ld    a,(hl)
  103.     cp    ' '
  104.     jp    z,DOIT
  105. ATODISP:
  106.     ld    (APLACE + 1),hl
  107.     call    SKNSP
  108.     ld    (hl),0
  109.     ld    hl,LINEALIAS
  110.     ld    (ALIASCALL + 1),hl
  111.     ld    a,0ffh
  112.     ld    (NOWRITE),a
  113.     call    PRINT
  114. db    'Searching...',13,10,0
  115. DOIT:
  116.     ld    a,(DONTBASE)
  117.     or    a
  118.     jr    nz,NOBASE
  119.     ld    hl,DIRNAME
  120.     call    DIRNDR
  121.     jr    z,NOBASE
  122.     ld    a,b
  123.     ld    (IFCB),a
  124.     ld    (OFCB),a
  125.     ld    a,c
  126.     ld    (IFCB + 13),a
  127.     ld    (OFCB + 13),a
  128. NOBASE:    ld    de,IFCB
  129.     call    Z3LOG        ; Log drive and user of FCB
  130.     ld    de,IFCB
  131.     call    FI0$OPEN
  132.     ld    de,OFCB
  133.     ld    a,(NOWRITE)
  134.     or    a
  135.     call    z,FO0$OPEN
  136. ALIASCALL:
  137.     call    GETALIAS
  138. COPYLOOP:
  139.     call    READLN
  140.     call    COMPARE
  141.     jr    nz,NOTSAME
  142.     call    SHOW
  143.     ld    a,(NOWRITE)
  144.     or    a
  145.     jr    nz,SAME
  146.     call    PRINT
  147. db    'Delete? (Y for yes) ',0
  148. GETC:    ld    a,3
  149.     call    BIOS
  150.     cp    ' '
  151.     jr    c,GETC
  152.     call    CAPS
  153.     call    COUT
  154.     cp    'Y'
  155.     jr    z,COPY
  156.     call    WRITELN
  157.     jr    SAME
  158. COPY:    call    WRITEOURS
  159.     jr    SAME
  160. NOTSAME:
  161.     call    c,WRITEOURS
  162.     call    WRITELN
  163. SAME:    xor    a
  164.     ld    (BUFFER),a
  165.     ld    a,(EOFFLAG)
  166.     or    a
  167.     jr    z,COPYLOOP
  168.     call    WRITEOURS
  169.     ld    a,(NOWRITE)
  170.     or    a
  171.     jr    nz,DONE
  172.     call    FO0$CLOSE
  173.     ld    de,IFCB
  174.     call    F$DELETE
  175.     ld    hl,IFCB
  176.     ld    de,OFCB
  177.     call    F$RENAME
  178. DONE:    ld    a,(SHOWED)
  179.     or    a
  180.     jr    nz,WASTHERE
  181.     ld    a,(NOWRITE)
  182.     or    a
  183.     jr    z,WASTHERE
  184.     call    PRINT
  185. db    'No Alias Of That Name.',13,10,0
  186. WASTHERE:
  187.     call    GETUD
  188.     ret
  189.  
  190. LINEALIAS:
  191. APLACE:    ld    hl,0000
  192.     jr    GLEAN
  193. GETALIAS:
  194.     call    PRINT
  195.     db    ': ',0
  196.     ld    a,0ffh
  197.     call    BBLINE
  198. GLEAN:    ld    de,OURS
  199.     ld    a,(hl)
  200. GETLOOP:
  201.     ld    (de),a
  202.     inc    hl
  203.     inc    de
  204.     ld    a,(hl)
  205.     or    a
  206.     jr    nz,GETLOOP
  207.     push    de
  208.     ld    a,Carriage
  209.     ld    (de),a
  210.     inc    de
  211.     ld    a,Linefeed
  212.     ld    (de),a
  213.     call    COUT
  214.     ld    hl,OURS
  215.     ld    de,SPACE
  216.     call    INSTR
  217.     pop    de
  218.     ret    z
  219.     ld    a,' '
  220.     ld    (de),a
  221.     ld    a,0ffh
  222.     ld    (WRITFLAG),a
  223.     ret
  224.  
  225. WRITEOURS:
  226.     ld    de,BUFFER
  227.     ld    a,(NOWRITE)
  228.     or    a
  229.     ret    nz
  230.     ld    a,(WRITFLAG)
  231.     or    a
  232.     ret    nz
  233.     cpl
  234.     ld    (WRITFLAG),a
  235.     ld    b,0ffh
  236.     ld    de,OURS
  237.     jp    WRITELOOP
  238.  
  239. READLN:
  240.     xor    a
  241.     ld    (QUOTE),a
  242.     ld    b,0ffh
  243.     ld    de,BUFFER
  244. READLOOP:
  245.     call    F0$GET
  246.     jr    z,GOOD
  247. DONEREAD:
  248.     ld    hl,EOFFLAG
  249.     xor    a
  250.     ld    (de),a
  251.     ld    (hl),0ffh
  252.     ret
  253. GOOD:    cp    '"'
  254.     jr    nz,NOTQUOTE
  255.     ex    af,af'
  256.     ld    a,(QUOTE)
  257.     cpl
  258.     ld    (QUOTE),a
  259.     ex    af,af'
  260. NOTQUOTE:
  261.     cp    ';'
  262.     jr    nz,NOTSEMI
  263.     ex    af,af'
  264.     xor    a
  265.     ld    (QUOTE),a
  266.     ex    af,af'
  267. NOTSEMI:
  268.     cp    1ah
  269.     jr    z,DONEREAD
  270.     ex    af,af'
  271.     ld    a,(QUOTE)
  272.     or    a
  273.     jr    nz,SKIPCAP
  274.     ex    af,af'
  275.     call    CAPS
  276.     ex    af,af'
  277. SKIPCAP:
  278.     ex    af,af'
  279.     ld    (de),a
  280.     inc    de
  281.     cp    Linefeed
  282.     ret    z
  283.     djnz    READLOOP
  284.     ret
  285.  
  286. WRITELN:
  287.     ld    b,0ffh
  288.     ld    de,BUFFER
  289.     ld    a,(NOWRITE)
  290.     or    a
  291.     ret    nz
  292. WRITELOOP:
  293.     ld    a,(de)
  294.     or    a
  295.     ret    z
  296.     inc    de
  297.     call    F0$PUT
  298.     jr    nz,WRITEERR
  299.     cp    Linefeed
  300.     ret    z
  301.     djnz    WRITELOOP
  302.     ret
  303.  
  304. COMPARE:
  305.     call    FINDSPACE
  306.     ld    b,a
  307.     ld    de,BUFFER
  308.     ld    hl,OURS
  309.     jp    COMPB
  310.  
  311. FINDSPACE:
  312.     ld    hl,BUFFER
  313.     ld    de,SPACE
  314.     call    INSTR
  315.     ld    de,BUFFER
  316.     call    SUBHD
  317.     ld    a,l
  318.     ret
  319.  
  320. SHOW:
  321.     ld    a,0ffh
  322.     ld    (SHOWED),a
  323.     ld    hl,BUFFER
  324.     ld    b,0ffh
  325. SHOWLOOP:
  326.     ld    a,(hl)
  327.     call    COUT
  328.     cp    Linefeed
  329.     jr    z,SHOWSUB
  330.     inc    hl
  331.     djnz    SHOWLOOP
  332. SHOWSUB:
  333.     ret
  334.  
  335. WRITEERR:
  336.     pop    hl
  337.     call    PRINT
  338.     db    'Write Error.',0
  339.     jp    DONE
  340.  
  341. WRITFLAG:
  342.     db    0
  343. DONTBASE:
  344.     db    0
  345. NOWRITE:
  346.     db    0
  347. EOFFLAG:
  348.     db    0
  349. QUOTE:    db    0
  350. SHOWED:    db    0
  351. DIRNAME:
  352.     db    'BASE     '
  353. IFCB:
  354.     db    Drive,'ALIAS   CMD',0,User
  355.     db    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  356. OFCB:
  357.     db    Drive,'ALIAS   $$$',0,User
  358.     db    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  359. SPACE:    db    ' ',0
  360. BUFFER    equ    SPACE + 1000h    ; 4k of externals allowed for
  361. OURS    equ    BUFFER + 0ffh
  362.     end
  363. ADLOOP
  364.     ret
  365.  
  366. WRITELN:
  367.     ld    b,0ffh
  368.     ld    de,BUFFER
  369.