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 / S-Z / SHOW14.LBR / SHOWPATH.ZZ0 / SHOWPATH.Z80
Text File  |  1988-03-07  |  3KB  |  156 lines

  1.  
  2. ; SHOWPATH.Z80
  3.  
  4. pdisp:
  5.     call    banner
  6.     call    gxymsg
  7.     defb    3,31
  8.     defb    highon,' Path Expressions ',highoff,0
  9.  
  10.     call    getpath        ; Get pointer to path
  11.     ld    a,(hl)        ; See if path is empty
  12.     or    a
  13.     jr    nz,pdisp1
  14.  
  15.     call    gxymsg
  16.     defb    8,33
  17.     defb    'Path is Empty',0
  18.  
  19.     jp    getcmd
  20.  
  21. pdisp1:
  22.     call    gxymsg
  23.     defb    6,17
  24.     defb    highon,' Symbolic Form ',highoff,0
  25.  
  26.     call    gxymsg
  27.     defb    6,35
  28.     defb    highon,' DU Form ',highoff,0
  29.  
  30.     call    gxymsg
  31.     defb    6,50
  32.     defb    highon,' DIR Form ',highoff,0
  33.  
  34. ; Display the symbolic path elements
  35.  
  36. symdisp:
  37.     ld    hl,8*100h+23    ; Set up cursor
  38.     ld    (infoxy),hl
  39.     call    getpath        ; Set up pointer to path
  40.  
  41. symdisp1:
  42.     ld    a,(hl)        ; Check for end of path
  43.     or    a
  44.     jr    z,dudisp    ; If end, go on to display DU form
  45.  
  46.     call    dispxy        ; Position cursor
  47.     call    dispxy        ; Skip extra line
  48.     ld    a,(hl)        ; Get drive
  49.     cp    '$'        ; Current drive specifier?
  50.     jr    z,symdisp2    ; If so, skip
  51.     add    a,'A'-1        ; Else, convert to letter
  52. symdisp2:
  53.     call    cout        ; Display drive letter
  54.     inc    hl        ; Point to user
  55.     ld    a,(hl)        ; Get user number
  56.     cp    '$'        ; Current?
  57.     jr    nz,symdisp3    ; If not, skip
  58.     call    cout        ; If so, display current indicator
  59.     jr    symdisp4    ; ..and skip ahead
  60. symdisp3:
  61.     call    pafdc        ; Display user number
  62. symdisp4:
  63.     inc    hl        ; Point to next element in path
  64.     jr    symdisp1
  65.  
  66. ; Dispay DU form of path
  67.  
  68. dudisp:
  69.     ld    hl,8*100h+38    ; Set up cursor
  70.     ld    (infoxy),hl
  71.     call    retud        ; Get current user/drive into BC
  72.     inc    b        ; Shift drive to range 1..16
  73.     call    getpath        ; Set up pointer to path in HL
  74.  
  75. dudisp1:
  76.     ld    a,(hl)        ; Check for end of path
  77.     or    a
  78.     jr    z,dirdisp    ; If so, go on to DIR display
  79.  
  80.     call    dispxy
  81.     call    dispxy
  82.     ld    a,(hl)        ; Get drive
  83.     cp    '$'        ; Current?
  84.     jr    nz,dudisp2    ; If not, skip ahead
  85.     ld    a,b        ; Else substitute current drive
  86. dudisp2:
  87.     add    a,'A'-1        ; Convert to letter
  88.     call    cout        ; Display the drive
  89.     inc    hl        ; Point to user
  90.     ld    a,(hl)        ; Get user
  91.     cp    '$'        ; Current?
  92.     jr    nz,dudisp3    ; If not, skip
  93.     ld    a,c        ; Else substitute current user
  94. dudisp3:
  95.     call    pafdc        ; Display user number
  96.     inc    hl        ; Point to next path element
  97.     jr    dudisp1
  98.  
  99. ; Dispay DIR form of path
  100.  
  101. dirdisp:
  102.     ld    hl,8*100h+52    ; Set up cursor
  103.     ld    (infoxy),hl
  104.     call    getpath        ; Set up pointer to path in HL
  105.  
  106. dirdisp1:
  107.     ld    a,(hl)        ; Get drive
  108.     or    a        ; Done?
  109.     jp    z,getcmd    ; If so, get next SHOW command
  110.  
  111.     call    dispxy
  112.     call    dispxy
  113.     call    retud        ; Get current user/drive into BC
  114.     ld    a,(hl)        ; Get drive
  115.     cp    '$'        ; Current?
  116.     jr    z,dirdisp2    ; If so, skip ahead
  117.     ld    b,a        ; Else replace with specified drive
  118.     dec    b        ; Adjusted to range 0..15
  119. dirdisp2:
  120.     inc    hl        ; Point to user
  121.     ld    a,(hl)        ; Get user
  122.     cp    '$'        ; Current?
  123.     jr    z,dirdisp3    ; If so, skip
  124.     ld    c,a        ; Else replace with specified user
  125. dirdisp3:
  126.     push    hl        ; Save pointer to path
  127.     call    prtdir        ; Display the named directory
  128.     pop    hl
  129.     inc    hl        ; Point to next path element
  130.     jr    dirdisp1
  131.  
  132. ;----------------------------------------
  133.  
  134. ; Subroutine to convert DU in register BC into a named directory and to display
  135. ; it.  If there is no corresponding name, 'noname' is displayed instead.
  136.  
  137. prtdir:
  138.     call    dutdir        ; Convert to name
  139.     jr    z,prtdir2    ; Skip if no corresponding name
  140.  
  141.     ld    b,8        ; Eight characters max
  142. prtdir1:
  143.     ld    a,(hl)        ; Get name character
  144.     call    cout        ; Display it
  145.     inc    hl        ; Point to next
  146.     djnz    prtdir1        ; Loop through them
  147.     ret
  148.  
  149. prtdir2:
  150.     call    vprint
  151.     defb    'noname',0
  152.     ret
  153.  
  154. ; End SHOWPATH.Z80
  155.  
  156.