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 / PWD.MAC < prev    next >
Text File  |  2000-06-30  |  5KB  |  249 lines

  1. ;
  2. ; Program: PWD
  3. ; Author: Richard Conn
  4. ; Version: 1.0
  5. ; Date: 5 Mar 84
  6. ;
  7. version    equ    10
  8.  
  9. ;
  10. ;    The purpose of PWD is to display the names of the named directories.
  11. ; If the option PASS (P) is given, then the passwords to the directories will
  12. ; be displayed as well IF the Wheel Byte is Available and Set.  If the Wheel
  13. ; Byte is not available, the passwords will be displayed without question.
  14. ;
  15.  
  16. ;
  17. ; Basic Equates
  18. ;
  19. z3env    SET    0f400h    ;address of ZCPR3 Environment
  20. fcb    equ    5ch
  21. cr    equ    0dh
  22. lf    equ    0ah
  23.  
  24. ;
  25. ; External References
  26. ;
  27.     ext    z3init
  28.     ext    cout,crlf,print,padc
  29.     ext    qprint,qcrlf
  30.     ext    getndr,getwhl
  31.  
  32. ;
  33. ; Environment Definition
  34. ;
  35.     if    z3env ne 0
  36. ;
  37. ; External ZCPR3 Environment Descriptor
  38. ;
  39.     jmp    start
  40.     db    'Z3ENV'    ;This is a ZCPR3 Utility
  41.     db    1    ;External Environment Descriptor
  42. z3eadr:
  43.     dw    z3env
  44. start:
  45.     lhld    z3eadr    ;pt to ZCPR3 environment
  46. ;
  47.     else
  48. ;
  49. ; Internal ZCPR3 Environment Descriptor
  50. ;
  51.     MACLIB    Z3BASE.LIB
  52.     MACLIB    SYSENV.LIB
  53. z3eadr:
  54.     jmp    start
  55.     SYSENV
  56. start:
  57.     lxi    h,z3eadr    ;pt to ZCPR3 environment
  58.     endif
  59.  
  60. ;
  61. ; Start of Program -- Initialize ZCPR3 Environment
  62. ;
  63.     call    z3init    ;initialize the ZCPR3 Env and the VLIB Env
  64. ;
  65. ; Print Banner
  66. ;
  67.     call    qprint    ;check quiet flag
  68.     db    'PWD, Version '
  69.     db    (version/10)+'0','.',(version mod 10)+'0'
  70.     db    cr,lf,0
  71. ;
  72. ; Check for options
  73. ;
  74.     lxi    h,fcb+1    ;pt to option char
  75.     mov    a,m    ;get option char
  76.     cpi    '/'    ;help?
  77.     jz    prhelp
  78.     cpi    ' '    ;no option?
  79.     jz    namedir
  80.     cpi    'P'    ;passwords?
  81.     jnz    invopt    ;bad option if not
  82. ;
  83. ; Prepare to process passwords - check for authorization
  84. ;
  85.     call    getwhl    ;get wheel byte
  86.     jnz    namedir    ;permission granted
  87.     call    print
  88.     db    ' Password Request Denied - Not Wheel',cr,lf,0
  89.     mvi    m,' '    ;clear option
  90. ;
  91. ; Print Named Directory Info
  92. ;
  93. namedir:
  94.     call    getndr    ;get location of directory
  95.     jnz    ndir1
  96.     call    print
  97.     db    ' Named Directory Buffer Not Available',0
  98.     ret
  99. ;
  100. ; Print Names of Directory Elements
  101. ;
  102. ndir1:
  103.     lda    fcb+1    ;see if passwords included
  104.     cpi    'P'
  105.     jz    ndir1p
  106. ;
  107. ; Print Header if Not Quiet for Non-Password Entries
  108. ;
  109.     mvi    b,4    ;4 times
  110. ndir1a:
  111.     call    qprint    ;print banner (optional)
  112.     db    ' DU : DIR Name    ',0
  113.     dcr    b    ;count down
  114.     jnz    ndir1a
  115.     call    qcrlf    ;new line
  116.     mvi    b,4    ;4 more times
  117. ndir1b:
  118.     call    qprint
  119.     db    '----  --------    ',0
  120.     dcr    b    ;count down
  121.     jnz    ndir1b
  122.     call    qcrlf    ;new line
  123.     jmp    ndir1z
  124. ;
  125. ; Print Header if Not Quiet for Password Entries
  126. ;
  127. ndir1p:
  128.     mvi    b,2    ;2 times
  129. ndir1c:
  130.     call    qprint
  131.     db    ' DU : DIR Name - Password    ',0
  132.     dcr    b    ;count down
  133.     jnz    ndir1c
  134.     call    qcrlf
  135.     mvi    b,2
  136. ndir1d:
  137.     call    qprint
  138.     db    '----  --------   --------    ',0
  139.     dcr    b    ;count down
  140.     jnz    ndir1d
  141.     call    qcrlf
  142. ;
  143. ; Begin Output Processing
  144. ;
  145. ndir1z:
  146.     mvi    c,0    ;set entry count
  147.     mvi    b,1    ;set disk 1
  148. ;
  149. ; Print Each Resident Command Name
  150. ;
  151. ndir2:
  152.     mov    a,m    ;get table entry
  153.     ora    a    ;end of table?
  154.     rz        ;exit
  155.     cmp    b    ;same disk?
  156.     jz    ndir3
  157. ;
  158. ; Advance to Next Set of Entries for New Disk
  159. ;
  160.     mov    b,a    ;set new disk
  161.     mov    a,c    ;get count
  162.     ani    3    ;see if newline already given
  163.     cnz    crlf    ;complete current line
  164.     call    crlf    ;1 additional line
  165.     mvi    c,0    ;reset count
  166. ndir3:
  167.     push    b    ;save counters
  168. ;
  169. ; Print DU:
  170. ;
  171.     mov    a,m    ;get disk
  172.     adi    '@'    ;convert to letter (A to P)
  173.     call    cout
  174.     inx    h    ;pt to user
  175.     mov    a,m    ;get user
  176.     call    padc    ;print user number
  177.     call    print    ;print separator
  178.     db    ': ',0
  179.     inx    h    ;pt to name
  180. ;
  181. ; Print DIR
  182. ;
  183.     call    prname    ;print name of directory
  184.     lda    fcb+1    ;check for password option
  185.     cpi    'P'
  186.     jnz    ndir4
  187.     call    print
  188.     db    ' - ',0
  189.     call    prname    ;print name of password
  190.     pop    b    ;get counters
  191.     inr    c    ;another entry
  192.     push    b    ;save counters
  193.     jmp    ndir5
  194. ;
  195. ; Advance to Next and Print Separator
  196. ;
  197. ndir4:
  198.     lxi    b,8    ;skip over password
  199.     dad    b
  200. ;
  201. ; Print Separator
  202. ;
  203. ndir5:
  204.     call    print    ;print separator
  205.     db    '    ',0
  206.     pop    b    ;get counters
  207. ;
  208. ; New Line Counter
  209. ;
  210.     inr    c    ;increment entry counter
  211.     mov    a,c    ;check for done
  212.     ani    3    ;every 4
  213.     cz    crlf    ;new line
  214.     jmp    ndir2
  215. ;
  216. ; Print 8-char name (directory or password) and advance ptr
  217. ;
  218. prname:
  219.     mvi    b,8    ;print name
  220. prn1:
  221.     mov    a,m    ;get char
  222.     call    cout
  223.     inx    h    ;pt to next
  224.     dcr    b    ;count down
  225.     jnz    prn1
  226.     ret
  227. ;
  228. ; Print Invalid Option and then Help Messages
  229. ;
  230. invopt:
  231.     call    print
  232.     db    cr,lf,'Invalid Option',cr,lf,0    ;fall thru to PRHELP
  233. ;
  234. ; Print Help Message
  235. ;
  236. prhelp:
  237.     call    print
  238.     db    cr,lf,'PWD - Print Working Directories',cr,lf
  239.     db    cr,lf,'PWD Syntax:'
  240.     db    cr,lf,'    PWD or PWD P'
  241.     db    cr,lf
  242.     db    cr,lf,'where just "PWD" prints the names of the directories'
  243.     db    cr,lf,'and "PWD P" (for PWD PASSWORD) prints the names and'
  244.     db    cr,lf,'passwords of the directories if the user has Wheel'
  245.     db    cr,lf,'Powers',0
  246.     ret
  247.  
  248.     end
  249.