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 / ZSYS / SIMTEL20 / ZCPR3 / DEV.MAC < prev    next >
Text File  |  2000-06-30  |  9KB  |  493 lines

  1. ;
  2. ;  PROGRAM:  DEV3
  3. ;  AUTHOR:  RICHARD CONN
  4. ;  VERSION:  1.0
  5. ;  DATE:  4 Apr 84
  6. ;  PREVIOUS VERSION:  None
  7. ;  DERIVATION:  DEVICE2 of ZCPR2
  8. ;
  9. VERS    EQU    10
  10. z3env    SET    0f400h
  11.  
  12. ;
  13. ;    DEV is a program which enables the user to manipulate the
  14. ; extended ZCPR3 redirectable device drivers.  It allows the user to
  15. ; perform the following functions:
  16. ;
  17. ;        o Display the Names of the Current Devices
  18. ;        o Set One or More of the Current Devices
  19. ;        o Ask for Help
  20. ;
  21. ;    The format of the DEV command is:
  22. ;
  23. ;        DEV or DEV //            <-- Ask for Help
  24. ;        DEV command,command,command ...    <-- Issue Commands
  25. ;
  26. ; where "command" may take the following forms:
  27. ;
  28. ;        DISPLAY ALL    <-- Display Names of All Devices
  29. ;        DISPLAY CON    <-- Display Names of Consoles
  30. ;        DISPLAY LST    <-- Display Names of Printers
  31. ;        DISPLAY RDR    <-- Display Names of Readers
  32. ;        DISPLAY PUN    <-- Display Names of Punches
  33. ;
  34. ;        CON:=name    <-- Select Console
  35. ;        LST:=name    <-- Select Printer
  36. ;        RDR:=name    <-- Select Reader
  37. ;        PUN:=name    <-- Select Punch
  38. ;
  39.  
  40. ;
  41. ;  Constants
  42. ;
  43. tbuff    equ    80h
  44. cr    equ    0dh
  45. lf    equ    0ah
  46.  
  47. ;
  48. ;  SYSLIB Routines
  49. ;
  50.     ext    z3init,getiop
  51.     ext    cin,cout,epstr,eprint,cline,crlf
  52.  
  53. ;
  54. ; Environment Definition
  55. ;
  56.     if    z3env ne 0
  57. ;
  58. ; External ZCPR3 Environment Descriptor
  59. ;
  60.     jmp    start
  61.     db    'Z3ENV'    ;This is a ZCPR3 Utility
  62.     db    1    ;External Environment Descriptor
  63. z3eadr:
  64.     dw    z3env
  65. start:
  66.     lhld    z3eadr    ;pt to ZCPR3 environment
  67. ;
  68.     else
  69. ;
  70. ; Internal ZCPR3 Environment Descriptor
  71. ;
  72.     MACLIB    Z3BASE.LIB
  73.     MACLIB    SYSENV.LIB
  74. z3eadr:
  75.     jmp    start
  76.     SYSENV
  77. start:
  78.     lxi    h,z3eadr    ;pt to ZCPR3 environment
  79.     endif
  80.  
  81. ;
  82. ; Start of Program -- Initialize ZCPR3 Environment
  83. ;
  84.     call    z3init    ;initialize the ZCPR3 Env and the VLIB Env
  85.  
  86. ;
  87. ;  Start of Program
  88. ;
  89.  
  90.     call    getiop    ;check for initialization
  91.     mov    a,h
  92.     ora    l    ;must NOT be zero
  93.     jnz    start0
  94.     call    banner
  95.     call    eprint
  96.     db    cr,lf,'DEV NOT Initialized with I/O Base',0
  97. abort:
  98.     call    eprint
  99.     db    ' -- Aborting',0
  100.     ret
  101.  
  102. start0:
  103.     call    status    ;check for drivers
  104.     jnz    start1
  105.     call    banner
  106.     call    eprint
  107.     db    cr,lf,'Redirection Not Supported',0
  108.     jmp    abort
  109.  
  110. start1:
  111.     lxi    h,tbuff    ;pt to input buffer
  112.     call    cline    ;extract and save command line
  113.     call    sblank    ;skip to non-blank
  114.     ora    a    ;EOL?
  115.     jz    help    ;select help
  116.     cpi    '/'    ;help?
  117.     jnz    docmd    ;run command subroutine
  118.  
  119. ;
  120. ;  Print Help Message
  121. ;
  122. help:
  123.     call    banner
  124.     call    eprint
  125.     db    cr,lf,'DEV - Quick Redirectable I/O Device Selector'
  126.     db    cr,lf,'Syntax:'
  127.     db    cr,lf,'   DEV or DEV //             '
  128.     db    '<-- Ask for Help'
  129.     db    cr,lf,'   DEV Command,Command, ...  '
  130.     db    '<-- Issue Commands'
  131.     db    cr,lf,'where "command" may take the following forms:'
  132.     db    cr,lf,'  DISPLAY=ALL    '
  133.     db    '<-- Display All Devices'
  134.     db    cr,lf,'  DISPLAY=CON    '
  135.     db    '<-- Display Consoles'
  136.     db    cr,lf,'  DISPLAY=LST    '
  137.     db    '<-- Display Printers'
  138.     db    cr,lf,'  DISPLAY=RDR    '
  139.     db    '<-- Display Readers'
  140.     db    cr,lf,'  DISPLAY=PUN    '
  141.     db    '<-- Display Punches'
  142.     db    cr,lf
  143.     db    cr,lf,'  CON:=name  <-- Select Console'
  144.     db    cr,lf,'  LST:=name  <-- Select Printer'
  145.     db    cr,lf,'  RDR:=name  <-- Select Reader'
  146.     db    cr,lf,'  PUN:=name  <-- Select Punch'
  147.     db    0
  148.     ret
  149. ;
  150. ; Print Banner
  151. ;
  152. banner:
  153.     call    eprint
  154.     db    'DEV, Version '
  155.     db    (vers/10)+'0','.',(vers mod 10)+'0',0
  156.     ret
  157. ;
  158. ;  Skip to Non-Blank Routine
  159. ;
  160. sblank:
  161.     mov    a,m    ;get char
  162.     inx    h    ;pt to next
  163.     cpi    ' '    ;blank?
  164.     jz    sblank    ;continue if so
  165.     dcx    h    ;pt to non-blank
  166.     ret
  167.  
  168. ;
  169. ;  Skip until a delimiter encountered
  170. ;
  171. sdelm:
  172.     mov    a,m    ;get char
  173.     inx    h    ;pt to next
  174.     cpi    ' '+1    ;<SP> or less?
  175.     rc
  176.     cpi    '='
  177.     rz
  178.     cpi    ','
  179.     rz
  180.     jmp    sdelm
  181.  
  182. ;
  183. ;  DOCMD -- This subroutine processes the command line pted to by HL.
  184. ;    It is the Main Line if a DEVICE command line is given, it is just
  185. ;    a subroutine if the user is in interactive mode.
  186. ;
  187. docmd:
  188.     call    docmd1    ;do first command
  189.     call    sdelm    ;skip to delim
  190.     cpi    ','    ;another command?
  191.     jz    docmd
  192.     ret
  193. docmd1:
  194.     mov    a,m    ;get command letter
  195.     cpi    'C'    ;console assignment?
  196.     jz    docon
  197.     cpi    'D'    ;display?
  198.     jz    dodisp
  199.     cpi    'L'    ;LST:?
  200.     jz    dolst
  201.     cpi    'P'    ;PUN:?
  202.     jz    dopun
  203.     cpi    'R'    ;RDR:?
  204.     jz    dordr
  205. cerr:
  206.     call    eprint
  207.     db    cr,lf,'Error at -- ',0
  208.     call    epstr    ;print rest
  209.     ret
  210.  
  211. ;
  212. ;  Do LST: Assignment
  213. ;
  214. dolst:
  215.     call    eprint
  216.     db    ' LST:',0
  217.     mvi    a,3    ;select LST:
  218.     jmp    assign
  219.  
  220. ;
  221. ;  Do PUN: Assignment
  222. ;
  223. dopun:
  224.     call    eprint
  225.     db    ' PUN:',0
  226.     mvi    a,2    ;select PUN:
  227.     jmp    assign
  228.  
  229. ;
  230. ;  Do RDR: Assignment
  231. ;
  232. dordr:
  233.     call    eprint
  234.     db    ' RDR:',0
  235.     mvi    a,1    ;select RDR:
  236.     jmp    assign
  237.  
  238. ;
  239. ;  Do CON: Assignment
  240. ;
  241. docon:
  242.     call    eprint
  243.     db    ' CON:',0
  244.     mvi    a,0    ;select console
  245. ;
  246. ;  Do Assignment in General
  247. ;
  248. assign:
  249.     mov    b,a    ;save A in B
  250.     push    b    ;save BC
  251.     call    sdelm    ;skip to delimiter
  252.     pop    b    ;get BC
  253.     cpi    ' '
  254.     jz    asgn0
  255.     cpi    '='
  256.     jnz    cerr
  257. asgn0:
  258.     mov    a,b    ;get A back
  259.     sta    logical    ;save logical device number
  260.     shld    name    ;save ptr to mnemonic
  261.     mov    b,a    ;number in B
  262.     inr    b    ;add 1 for offset
  263.     call    status    ;get device status
  264.     dcx    h    ;pt to previous
  265.     dcx    h
  266. asgn1:
  267.     inx    h    ;pt to next
  268.     inx    h
  269.     dcr    b    ;count down
  270.     jnz    asgn1
  271.     mov    c,m    ;get number of devices in C
  272.     mov    a,c    ;check for value of zero
  273.     ora    a
  274.     jnz    asgn2
  275.     lhld    name    ;pt to error name
  276.     jmp    cerr
  277. asgn2:
  278.     lda    logical    ;get logical device number
  279.     mov    b,a    ;... in B
  280.     push    b    ;save device count
  281.     dcr    c    ;pt to previous
  282.     call    namer    ;get name
  283.     xchg        ;name pted to by DE
  284.     lhld    name    ;user's name pted to by HL
  285. asgn3:
  286.     ldax    d    ;get name of device
  287.     cpi    ' '+1    ;done?
  288.     jc    asgn3a
  289.     cmp    m    ;compare to user
  290.     jnz    asgn4
  291.     inx    h    ;pt to next
  292.     inx    d
  293.     jmp    asgn3
  294. asgn3a:
  295.     mov    a,m    ;get user
  296.     cpi    ' '+1    ;done?
  297.     jc    asgn3b
  298.     cpi    ','    ;done?
  299.     jnz    asgn4
  300. asgn3b:
  301.     pop    b    ;match -- C-1 is selected device
  302.     dcr    c    ;decrement
  303.     call    select    ;select device
  304.     lda    logical    ;get logical device in A
  305.     call    current    ;print name of device selected
  306.     lhld    name    ;pt to name for scan continuation
  307.     ret
  308. asgn4:
  309.     pop    b    ;count down
  310.     dcr    c    ;count down
  311.     jnz    asgn2    ;continue
  312.     lhld    name    ;pt to invalid name
  313.     call    eprint
  314.     db    cr,lf,' Invalid Name at -- ',0
  315.     call    epstr
  316.     lhld    name    ;pt to name for scan continuation
  317.     ret
  318.  
  319. ;
  320. ;  Display Devices and Assignments
  321. ;
  322. dodisp:
  323.     call    sdelm    ;skip to delimiter
  324.     ora    a    ;none=all
  325.     jz    dispall
  326.     mov    a,m    ;get char after delimiter
  327.     cpi    'A'    ;all?
  328.     jz    dispall
  329.     cpi    'C'    ;CON:
  330.     jz    dispcon
  331.     cpi    'L'    ;LST:
  332.     jz    displst
  333.     cpi    'P'    ;PUN:
  334.     jz    disppun
  335.     cpi    'R'    ;RDR:
  336.     jz    disprdr
  337.     jmp    cerr
  338. dispall:
  339.     call    dispcon    ;successive displays
  340.     call    disprdr
  341.     call    eprint
  342.     db    cr,lf,'Strike Any Key -- ',0
  343.     call    cin
  344.     call    disppun
  345.     jmp    displst
  346. dispcon:
  347.     call    eprint
  348.     db    cr,lf,'CON:',0
  349.     mvi    a,0    ;select CON:
  350.     call    disp
  351.     jmp    curr
  352. displst:
  353.     call    eprint
  354.     db    cr,lf,'LST:',0
  355.     mvi    a,3    ;select LST:
  356.     call    disp
  357.     jmp    curr
  358. disprdr:
  359.     call    eprint
  360.     db    cr,lf,'RDR:',0
  361.     mvi    a,1    ;select RDR:
  362.     call    disp
  363.     jmp    curr
  364. disppun:
  365.     call    eprint
  366.     db    cr,lf,'PUN:',0
  367.     mvi    a,2    ;select PUN:
  368.     call    disp
  369. ;
  370. ;  Print Name of Current Device
  371. ;
  372. curr:
  373.     call    crlf    ;new line
  374. current:
  375.     push    h    ;save ptr
  376.     mov    b,a    ;save number in B
  377.     push    b    ;save B
  378.     call    eprint
  379.     db    ' Assignment is ',0
  380.     push    b    ;save B
  381.     call    status    ;get status
  382.     pop    b    ;get B
  383.     inr    b    ;add 1 for offset
  384.     dcx    h    ;back up
  385. curr1:
  386.     inx    h    ;pt to next
  387.     inx    h
  388.     dcr    b    ;count down
  389.     jnz    curr1
  390.     pop    b    ;get logical number in B
  391.     mov    c,m    ;get physical number in C
  392.     call    pname0    ;print first part of name only
  393.     pop    h    ;get ptr
  394.     ret
  395. ;
  396. ;  Print Names of All Physical Devices for a Logical Device
  397. ;
  398. disp:
  399.     push    h    ;save char ptr
  400.     push    psw    ;save device number
  401.     call    eprint
  402.     db    ' Devices --',0
  403.     mov    b,a    ;logical device in B
  404.     push    b    ;save for later
  405.     push    b    ;save it
  406.     call    status    ;get status report
  407.     pop    b    ;get logical device number
  408.     inr    b    ;add 1 for offset
  409.     dcx    h    ;back up
  410.     dcx    h
  411. disp1:
  412.     inx    h    ;pt to next
  413.     inx    h
  414.     dcr    b    ;count down
  415.     jnz    disp1
  416.     pop    b    ;get B back
  417.     mov    c,m    ;get count of devices
  418.     mov    a,c    ;check for none
  419.     ora    a
  420.     jz    disp3
  421. disp2:
  422.     push    b    ;save values
  423.     dcr    c    ;pt to next name
  424.     call    eprint
  425.     db    cr,lf,'    ',0
  426.     call    pnamer    ;print name (B=logical, C=physical)
  427.     pop    b    ;get count
  428.     dcr    c    ;count down
  429.     jnz    disp2
  430. disp3:
  431.     pop    psw
  432.     pop    h
  433.     ret
  434. ;
  435. ;  Routine to Print Name of Selected Device
  436. ;    B=logical number, C=physical number
  437. ;
  438. pnamer:
  439.     push    b    ;save BC
  440.     call    pname0    ;print first part of name
  441.     call    eprint    ;print separator
  442.     db    ' - ',0
  443.     call    epstr    ;print rest as string
  444.     pop    b    ;restore BC
  445.     ret
  446. ;
  447. ;  Print first part of selected device name
  448. ;
  449. pname0:
  450.     call    namer    ;get ptr to string
  451.     mvi    b,8    ;at most 8 chars
  452. pname1:
  453.     mov    a,m    ;get char
  454.     inx    h    ;pt to next char
  455.     cpi    ' '    ;end of name?
  456.     jz    pname2
  457.     call    cout    ;print char
  458.     dcr    b    ;count down
  459.     jnz    pname1
  460.     ret
  461. pname2:
  462.     mvi    a,' '    ;print spaces
  463.     call    cout
  464.     dcr    b    ;count down
  465.     jnz    pname2
  466.     ret
  467.  
  468. ;
  469. ;  Basic Interface Routines
  470. ;
  471. status:
  472.     lxi    d,0    ;Offset 0
  473. runit:
  474.     call    getiop    ;device driver base
  475.     dad    d
  476.     pchl
  477. select:
  478.     lxi    d,3    ;Offset 3
  479.     jmp    runit
  480. namer:
  481.     lxi    d,6    ;Offset 6
  482.     jmp    runit
  483.  
  484. ;
  485. ;  Buffers
  486. ;
  487. logical:
  488.     ds    1    ;Logical Device Number
  489. name:
  490.     ds    2    ;Pointer to User-Supplied Name
  491.  
  492.     end
  493.