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 / ENTERPRS / CPM / UTILS / F / NAME12.LBR / NAME12.ZZ0 / NAME12.Z80
Text File  |  1991-06-29  |  6KB  |  207 lines

  1. ;Program: NAME
  2. ;Author: Bruce Morgen
  3. ;Date: May 21, 1988
  4. ;Purpose:
  5. ;Inspired by Jay Sage's ARUNZ script for the same function.
  6. ;Jay's script invoked A.E.Hawley's wonderful EDITND tool to
  7. ;simply rename the current directory.  EDITND is a powerful
  8. ;program with lots of features - it also weighs in at about
  9. ;6 1/2 K.  NAME is under 1K and it does on-the-fly renaming
  10. ;and deletion of directory names very quickly and safely.
  11. ;It's really quite nice on a ramdisk or in COMMAND.LBR and
  12. ;makes a good team with PWD and A.E.'s SAVNDR tool.  The
  13. ;syntax is simple enough to be thoroughly understood by
  14. ;viewing the help screen - invoked without a new directory
  15. ;name, it just deletes the NDR entry for the current or
  16. ;specified DU:/DIR:.
  17.  
  18. ;Version 1.2 modifications by Bruce Morgen, 6/29/91
  19. ;Deleted and re-coded parts of NAME to take advantage of
  20. ;the fact that SUBNDR and ADDNDR now work as documented.
  21. ;Used new GETND0 routine in place of old, errant GETNDR.
  22. ;Thanks to Howard Schwartz for spotting problems and to
  23. ;Hal Bower and Howard Goldstein for repairing Z3LIB.
  24. ;Hallelujah!
  25.  
  26. ;Version 1.1 modifications by Bruce Morgen, 6/12/91
  27. ;Improved help screen and Type 4 executable implemented,
  28. ;trival code tweaks.  The Type 3 version now exceeds 1K
  29. ;-- the price of progress?  Perhaps....
  30.  
  31.     public    print        ; To fool prttyp
  32.  
  33.     extrn    z3init,addndr,subndr,dirndr,dundr,getnd0
  34.     extrn    getwhl,puter2,prtnam,prttyp,z33chk,fcb1chk
  35.     extrn    eprint,epstr,retud
  36.  
  37. fcb    equ    5ch
  38. fcb2    equ    6ch
  39. tbuff    equ    80h
  40. usroff    equ    13
  41. bdose    equ    5
  42. prnstr    equ    9
  43. cr    equ    0dh
  44. lf    equ    0ah
  45. bel    equ    07h
  46. blank    equ    20h
  47.  
  48. ; TYPE 3 HEADER
  49.  
  50. ; Code modified as suggested by Charles Irvine to function correctly with
  51. ; interrupts enabled.  Program will abort with an error message when not
  52. ; loaded to the correct address (attempt to run it under CP/M or Z30).
  53.  
  54. entry:
  55.     jr    start0        ; Must use relative jump
  56.     ds    1
  57.     db    'Z3ENV',3    ; Type-3 environment
  58. z3eadr:
  59.     dw    00        ; Filled in by Z33
  60.     dw    entry        ; Intended load address
  61.  
  62. start0:
  63.     ld    hl,0        ; Point to warmboot entry
  64.     ld    a,(hl)        ; Save the byte there
  65.     di            ; Protect against interrupts
  66.     ld    (hl),0c9h    ; Replace warmboot with a return opcode
  67.     rst    0        ; Call address 0, pushing RETADDR
  68.                 ; Onto stack
  69. retaddr:
  70.     ld    (hl),a        ; Restore byte at 0
  71.     dec    sp        ; Get stack pointer to point
  72.     dec    sp        ; To the value of RETADDR
  73.     pop    hl        ; Get it into HL and restore stack
  74.     ei            ; We can allow interrupts again
  75.     ld    de,retaddr    ; This is where we should be
  76.     xor    a        ; Clear carry flag
  77.     sbc    hl,de        ; Subtract -- we should have 0 now
  78.     jr    z,start        ; If addresses matched, begin real code
  79.     add    hl,de        ; Restore value of RETADDR
  80.  
  81.     ld    de,notz33msg-retaddr ; Offset to message
  82.     add    hl,de
  83.     ex    de,hl        ; Switch pointer to message into DE
  84.     ld    c,prnstr
  85.     jp    bdose        ; Return via BDOS print string function
  86. notz33msg:
  87.     db    'Not Z33+$'    ; Abort message if not Z33-compatible
  88.  
  89. start:    ld    hl,(z3eadr)
  90.     call    z3init
  91.     xor    a
  92.     call    puter2
  93.     call    getwhl        ; NAME is for wheels only,
  94.     jr    z,failed    ; so reject the unempowered
  95.     call    getnd0        ; NDR implemented?
  96.     jr    z,fail3        ; Nope, failure...
  97.     ld    hl,entry-0100h    ; Get load address-100h in HL
  98.     ld    a,l        ; Test for 100h load address
  99.     or    h
  100.     jr    nz,chkfcb    ; If not, assume Z33+ parsing
  101.     call    z33chk        ; Otherwise check for Z33+ CCP
  102.     jr    nz,nocfcb    ; If not, handle as Z30
  103. chkfcb:    call    fcb1chk        ; Test for invalid directory
  104.     jr    nz,fail4    ; Error is it's invalid
  105. nocfcb:    ld    de,fcb+1    ; Point to new name
  106.     ld    a,(de)        ; First character
  107.     cp    '/'        ; Give help if requested
  108.     jp    z,help
  109.     ld    h,d        ; Scan for illegal wildcards
  110.     ld    l,e
  111.     ld    bc,18h+1    ; Range over both FCBs
  112.     ld    a,'?'        ; Doubles as wildcard error code
  113.     cpir
  114.     jp    pe,fail1
  115.     ld    l,e        ; Name pointer into HL (H = 0)
  116.     call    dirndr        ; See if name is taken
  117.     ex    de,hl        ; Get back pointer
  118.     call    nz,subndr    ; Get rid of the old one if so
  119.     dec    hl        ; Point to FCB drive byte
  120.     ld    b,(hl)        ; Into B
  121.     inc    b        ; Cleverly test for zero
  122.     djnz    gotdsk        ; indicating current drive
  123.     call    retud        ; Ask BDOS what disk this is
  124.     inc    b        ; Translate to FCBese
  125.     ld    (hl),b        ; Poke it in
  126. gotdsk:
  127.     push    hl        ; FCB pointer to stack
  128.     ld    de,usroff    ; Offset to Z3-parsed user code
  129.     add    hl,de        ; Add it in
  130.     ld    c,(hl)        ; User number in C
  131.     call    dundr        ; See if it already has a name
  132.     jr    z,nosub2    ; Branch ahead if not
  133.     inc    hl        ; Bump past old DU bytes
  134.     inc    hl
  135.     ld    e,tbuff        ; Our work buffer is TBUFF (D=0)
  136.     ld    bc,8        ; Longest name length
  137.     push    de        ; Save buffer pointer
  138.     ldir            ; Move name to buffer
  139.     pop    hl        ; Get back buffer pointer
  140.     call    subndr        ; Delete entry, sort NDR
  141. nosub2:    pop    hl        ; Pointer to FCB1 in HL
  142.     inc    hl        ; Get back first FCB character
  143.     ld    a,(hl)
  144.     cp    blank        ; Blank means removal only,
  145.     ret    z        ; so we're done
  146.     dec    hl        ; Otherwise, point to FCB again
  147.     ld    de,fcb2+1    ; Pointer to password in DE
  148.     ld    a,(de)        ; Get first password character
  149.     sub    blank        ; A=0 if it's blank
  150.     call    addndr        ; Add entry, sort NDR
  151.     ret    nz        ; All done if no error
  152. ;    fall    through     ; Only on error
  153.  
  154. fail2:    ld    hl,string2    ; Error #2, "no room"
  155.     ld    a,2
  156.     jr    prstr2
  157.  
  158. fail3:    ld    hl,string3    ; Error #3, "no NDR buffer"
  159.     ld    a,3
  160.     jr    prstr2
  161.  
  162. fail4:    ld    hl,string4    ; Error #4, "bad Z3 d/u"
  163.     ld    a,4
  164. prstr2:
  165.     call    prstrg
  166.     xor    a
  167.     cpl
  168. failed:    ld    hl,string    ; Jump to here with A = 0
  169.     inc    a        ; is Error #1, "no wheel"
  170. prstrg:    or    a
  171.     call    nz,puter2
  172.     jp    epstr        ; Errors and help exit via SYSLIB
  173.  
  174. fail1:    ld    hl,string1    ; Error #"?", "wildcard n/g"
  175.     jr    prstr2
  176.  
  177. string1:
  178.     db    'Illegal wildcard characters',0
  179. string2:
  180.     db    'No room for any new names',0
  181. string3:
  182.     db    'NDR buffer not implemented',0
  183. string4:
  184.     db    'Invalid ZCPR3 drive/user',0
  185. string:
  186.     db    bel,',',cr,lf,'directory change failed.',0
  187. help:
  188.     call    eprint
  189.     db    'NAME, Version 1.2 ',0
  190.     ld    a,((z3eadr-1))
  191.     ld    hl,entry
  192.     call    prttyp
  193.     call    eprint
  194.     db    cr,lf,'Syntax:',cr,lf,' ',0
  195.     call    prtnam
  196.     call    eprint
  197.     db    ' [du: or dir:][newname] [password]',cr,lf
  198.     db    'Changes the directory name of the',cr,lf
  199.     db    'specified or default directory.',cr,lf
  200.     db    'Execution without "newname"',cr,lf
  201.     db    'deletes the current name, if any.',cr,lf,0
  202.     ret
  203.  
  204. print:    jp    eprint
  205.  
  206.     end
  207.