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 / W22.LBR / W22.ZZ0 / W22.Z80
Text File  |  2000-06-30  |  32KB  |  1,121 lines

  1. ;  Program:  W -  Wildcard Processing Shell
  2. ;  Author:  Steve Cohen
  3. ;
  4. ;  VERSION 2.2
  5. ;  DATE November 9, 1987 by Rob Wood
  6. ;
  7. ;  Add code for W to use the external FCB to find the name it was invoked with
  8. ;  and build the shell/reinvokation command using this name.
  9. ;  Added Z33 option in program configuration bytes.  This option is set to TRUE
  10. ;  if running in ZCPR 3.3 and the DU: from the external FCB is to be included in
  11. ;  the shell/reinvokation command line.  If running on ZCPR 3.0 or the DU: is
  12. ;  not wanted then set Z33 to FALSE.
  13. ;
  14. ;  Added INSERT option in program configuration bytes.  If this option is TRUE
  15. ;  then W will insert it's reinvokation command, which is stored in the first
  16. ;  shell stack entry, into the multiple command line buffer after the command
  17. ;  line W builds using the AFN.  Any commands pending in the multiple command
  18. ;  line buffer are then appended to the end of the reinvokation command.  This
  19. ;  causes W to be reinvoked from the command line and not as a shell.  The two
  20. ;  shell stack entries are still used.
  21. ;  If the INSERT option is FALSE, then W functions as a shell and will be
  22. ;  reinvoked after all commands have been processed from the multiple command
  23. ;  line buffer.  
  24. ;
  25. ;  Corrected problem in next filename selection.  The compare routine compares
  26. ;  all eight bits of each byte of the filename.  If any of the file attributes,
  27. ;  the msb's of the filename, are set then files were being skipped.
  28. ;  Added code that clears the msb of the directory filenames while searching
  29. ;  for the next filename.
  30. ;
  31. ;  Added internal QUIET flag support.  If the IQUIET flag is TRUE then only
  32. ;  install, finish, and  abort messages will be displayed.  Added IQUIET in
  33. ;  configuration bytes.
  34. ;
  35. ;  The AND of the SYS and NONSYS flags is now kept in word 31 of the second
  36. ;  shell stack entry for easy use when W is reinvoked.  WTOKEN is also moved to
  37. ;  word 30 of the second shell stack entry.
  38. ;
  39. ;  M80 and L80 were used for this revision.  The []'s were changed to ()'s.
  40. ;
  41. ;  VERSION 2.1 (Jay Sage personal version)
  42. ;  DATE: December 27, 1986
  43. ;  1) Added an extra message and check for abort at each shell invokation to
  44. ;     keep up user's patience.
  45. ;  2) Fixed a bug in the code that set up the initial value for the previously
  46. ;     matched file.  Since it only replaced '?' with ' ' before, the program
  47. ;     would not work when the ambiguous file spec happened to be unambiguous, a
  48. ;     overlook a file named "JUNK." with no type.  The new code just
  49. ;     initializes the previously matched file to all ' '.
  50. ;  3) Fixed errors in the code for delay. Value is now put in directly in
  51. ;     millisecs.
  52. ;  4) Put SYS, NONSYS, and QSEC (now MSEC) parameters into configuration
  53. ;     and patch bytes at start of program.
  54. ;
  55. ;  Changed code is marked with <JPS>.
  56. ;
  57. ;  VERSION 2.0
  58. ;  DATE    FEB. 10, 1986
  59. ;  Passage of DU: now works as follows:
  60. ;  If Logged user <> file user then
  61. ;    Pass du:filename.typ
  62. ;  Else
  63. ;    If    Logged Drive <>    file drive then
  64. ;      Pass d:filename.typ
  65. ;    Else
  66. ;      Pass filename.typ
  67. ;
  68. ;  Added reset of command status byte so that flow control can work
  69. ;  Corrected results when no files matched wildcard,
  70. ;  Now no trailing spaces follow commands.
  71. ;  Made    delay user settable.
  72. ;  Indication now given if no files match wildcard
  73. ;
  74. ;  VERSION 1.1
  75. ;  date: Jan 29, 1986
  76. ;  improved command line control of user areas:
  77. ;    user area only passed if different from    current.
  78. ;    This way only progs that can use user area info    get it.
  79. ;  removed conditional assembly    HELP equate
  80. ;
  81. ;  previous version:  1.0
  82. ;  date:  Jan 26, 1986
  83. ;
  84. ;    .z80            ; for m80 compatiblity
  85. ;    aseg            ; also for M80/L80 compatiblity
  86. VERS    EQU    22
  87. Z3ENV    ASET    0FE00H
  88. ;
  89. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  90. ;
  91. ;  W.COM may be    used freely by the ZCPR3 community
  92. ;  and is released to the ZCPR3 community through the
  93. ;  new NAOG/ZSIG user's group.
  94. ;
  95. ; W.COM    is a ZCPR3 shell which stores an afn and a ufn on the
  96. ; shell    stack.    It merely finds    the next instance matching the afn
  97. ; which    is larger than the ufn,    stores the find    as a new ufn and inserts
  98. ; it into whatever command line    it is storing, allowing    wildcard capability
  99. ; to programs that do not accept afn parameters.  W.COM    then passes the    rest
  100. ; of the command line to the command processor for action.
  101. ; If no    suitable match is found, W.COM removes itself from the shell
  102. ; stack    and control reverts to the OS.
  103. ;
  104. ;   W.COM is installed by Z3INS.
  105. ;
  106. ;   W.COM works    with all z80 ZCPR3 systems with    at least a
  107. ;   2-entry shell stack    whose entries are at least 32 bytes
  108. ;   The    ZCPR3 "standard" shell stack is    4 32-byte entries.
  109. ;
  110. ;   Z80ASM is required for assembly of this file.
  111. ;   It should also be adaptible    to M80 without much difficulty.
  112. ;
  113. ;   Usage: W COMMAND AFN [parm,parm,...,parm]
  114. ;      or  W ZEX COMMAND AFN [Parm,parm...,parm]
  115. ;
  116. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  117. ;                        ;
  118. ;   routines here need vlib, z3lib and syslib    ;
  119. ;                        ;
  120. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  121. ;
  122.     EXT    GETEFCB                ; z3lib
  123.     EXT    Z3INIT,ZPRSFN,GETSH1,GETSH2    ; z3lib
  124.     EXT    SHPOP,PUTCL,Z3LOG        ; z3lib
  125.     EXT    WAIT1MS,PUTZEX,GETCL1,PUTCST    ; z3lib
  126.     EXT    GETZRUN,GETSHM,PUTSHM,GETMSG    ; z3lib
  127.     EXT    MAFDC,ARGV,CODEND,COMPB,DIRF    ; syslib
  128.     EXT    FILLB,INITFCB,MFN2,SKNSP,SKSP    ; syslib
  129.     EXT    RETUD,PSTR            ; syslib
  130.     EXT    GETUD,PUTUD,CONDIN        ; syslib
  131. ;
  132. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  133. ;                        ;
  134. ; basic    definitions                ;
  135. ;                        ;
  136. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  137. ;
  138. CR    EQU    0DH
  139. LF    EQU    0AH
  140. ESC    EQU    1BH
  141. BDOS    EQU    5
  142. RDBUF    EQU    10
  143. TAILB    EQU    80H
  144. ;
  145. FALSE    EQU    0
  146. TRUE    EQU    NOT FALSE
  147. ;
  148. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  149. ;                        ;
  150. ; user selectable equates            ;
  151. ;                        ;
  152. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  153. ;
  154. Z33    EQU    FALSE    ; true if running on a ZCPR3.3 system and include DU:
  155. SYS    EQU    TRUE    ; <JPS> true to see system type files
  156. NONSYS    EQU    TRUE    ; <JPS> true to see non-system type files
  157. SECHO    EQU    TRUE    ; true for command line echo
  158. IQUIET    EQU    FALSE    ; true for only install, finish, and abort messages
  159. INSERT    EQU    TRUE    ; true for W reinvokation command to be inserted in
  160.             ;   the mult cmd line buf, false to execute as a shell
  161. MSEC    EQU    0000    ; <JPS> delay in milliseconds
  162. ;
  163. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  164. ;                        ;
  165. ;  MAIN    PROGRAM    BODY                ;
  166. ;                        ;
  167. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  168. ;
  169. ;    ORG    100H
  170. ;
  171. ; environment definition
  172. ;
  173.     IF    Z3ENV NE 0
  174. ;
  175. ; external ZCPR3 environment descriptor
  176. ;
  177.     JP    START
  178.     DB    'Z3ENV'        ; this is a ZCPR3 utility
  179.     DB    1        ; external environment descriptor
  180. Z3EADR:
  181.     DW    Z3ENV
  182. ;
  183.     ELSE
  184. ;
  185. ; internal ZCPR3 environment descriptor
  186. ;
  187.     MACLIB    Z3BASE.LIB
  188.     MACLIB    SYSENV.LIB
  189. Z3EADR:
  190.     JP    START
  191.     SYSENV
  192. ;
  193.     ENDIF
  194. ;
  195. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  196. ;                        ;
  197. ; configurataion and patch area <JPS>        ;
  198. ;                        ;
  199. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  200. ;
  201.     DB    'Z33='        ; marker in code
  202. AZ33:
  203.     DB    Z33        ; FFH if ZCPR3.3, else 00H for ZCPR3.0
  204. ;
  205.     DB    'SYS='        ; marker in code
  206. ASYS:
  207.     DB    SYS        ; FFH to allow SYS type files, else 00H
  208. ;
  209.     DB    'NONSYS='    ; marker in code
  210. ANONSYS:
  211.     DB    NONSYS        ; FFH to allow non-SYS type files, else 00H
  212. ;
  213.     DB    'SECHO='    ; marker in code
  214. ASECHO:
  215.     DB    SECHO        ; FFH to have command line echoed
  216. ;
  217.     DB    'IQUIET='    ; marker in code
  218. AIQUIET:
  219.     DB    IQUIET        ; FFH for only install, finish and abort msgs
  220. ;
  221.     DB    'INSERT='    ; marker in code for easy patching
  222. AINSERT:
  223.     DB    INSERT        ; FF to insert W reinvoke cmd in cmd line,
  224.                 ;   else 00H to execute as a shell
  225.     DB    'MSEC='        ; marker in code
  226. DELAY:
  227.     DW    MSEC        ; number of milliseconds to wait between files
  228. ;
  229. ; start of program
  230. ;
  231. START:
  232.     IF    Z3ENV NE 0
  233.     LD    HL,(Z3EADR)    ; pt to    ZCPR3 environment if external env desc
  234.     ELSE
  235.     LD    HL,Z3EADR    ; pt to    ZCPR3 environment if internal env desc
  236.     ENDIF
  237. ;
  238. ; initialize ZCPR3 environment
  239. ;
  240.     CALL    Z3INIT
  241. ;
  242. ; get shell data
  243. ;
  244.     CALL    GETSH2        ; is there a shell stack?
  245.     JR    NZ,SHFINE    ; yes
  246. SHBAD:    LD    HL,SHERR    ; no, so error and abort
  247.     JP    PSTR
  248. ;
  249. SHFINE:
  250.     LD    (SHLSTK),HL    ; save this pointer
  251.     LD    (SHSIZE),DE    ; save shell size
  252.     ADD    HL,DE        ; hl points to 2nd entry on shell stack
  253.     LD    (SHLSTK2),HL    ; save 2nd entry on shell stack
  254. ;
  255. ; determine what name invoked with from the external FCB, if it doesn't exist
  256. ; then use the compiled defaults.
  257. ; if using ZCPR 3.3 and the Z33 flag is true (FFH) then the drive and user (DU)
  258. ; where the com file is located can also be found from the external FCB.
  259.     CALL    GETEFCB        ; get EXT FCB address
  260.     JP    Z,NOFCB        ; if no EXT FCB, use default SHNAME
  261.     PUSH    HL        ; save EXT FCB address
  262.     LD    DE,SHNAME    ; point to SHNAME
  263.     LD    A,(AZ33)    ; get Z33 flag
  264.     OR    A
  265.     JP    Z,NODU        ; if 0 then not Z33, thus can't determine DU:
  266.     POP    IX        ; get EXT FCB address
  267.     PUSH    IX        ; save it again for later use
  268.     LD    A,(IX+14)    ; get Drive from EXT FCB byte 14
  269.     CALL    DPASS        ; decode and put in SHNAME
  270.     LD    A,(IX+13)    ; get User from EXT FCB byte 13
  271.     CALL    MAFDC        ; decode and put in SHNAME
  272.     LD    A,':'        ; append ':' to DU in SHNAME
  273.     LD    (DE),A
  274.     INC    DE        ; point to next byte in SHNAME
  275.  
  276. NODU:    POP    HL        ; get EXT FCB address
  277.     INC    HL        ; point to filename
  278.     LD    BC,8        ; move first 8 bytes of the filename to SHNAME
  279.     LDIR
  280.     LD    A,' '        ;
  281.     LD    (DE),A        ; insure filename is terminated with a space
  282.     LD    HL,SHNAME    ; point to start of SHNAME
  283.     CALL    SKNSP        ; move pointer to first space in SHNAME
  284.     INC    HL        ; point to next byte
  285.  
  286.     LD    DE,SHNAME    ; calculate length of reinvokation name
  287.     OR    A        ; clear carry
  288.     SBC    HL,DE        ; subtract start from end
  289.     LD    (SHNLEN),HL    ; save length
  290. ;
  291. NOFCB:
  292. ;
  293. ; determine whether to install or just run
  294. ;
  295.     LD    HL,(SHNLEN)
  296.     LD    B,L
  297.     LD    HL,(SHLSTK)    ; compare first entry in the shell stack with
  298.     LD    DE,SHNAME    ;   shell name to see if we are installed
  299.     CALL    COMPB        ; compare
  300.     JP    Z,RUNSH        ; if the same don't install, just run
  301. ;
  302. ; install by putting information in shell stack 
  303. ;
  304.     LD    BC,(SHSIZE)    ; get shell stack size
  305.     LD    A,C
  306.     CP    32
  307.     JR    NC,STD        ; shell    stack size must    be at least 32
  308.     LD    HL,SHERR    ; give message that won't work and abort
  309.     JP    PSTR
  310. ;
  311. STD:    XOR    A        ; don't    mess with command line
  312.     LD    DE,TKNTBL
  313.     LD    HL,TAILB+1
  314.     CALL    ARGV        ; split    command    line into tokens
  315. ;
  316.     LD    A,(NFND)    ; no of    tokens in command line
  317.     CP    2        ; must be at least 2
  318.     JR    NC,CHEKZEX    ; it is, go on
  319. NENUF:    LD    HL,HLPMSG    ; it isn't so print help msg and
  320.     JP    PSTR        ; abort
  321. ;
  322. CHEKZEX:
  323.     LD    HL,(TKN1)    ; compare first    cmd line token
  324.     LD    DE,ZEXNAME    ; with "ZEX "
  325.     LD    B,4
  326.     CALL    COMPB
  327.     JR    NZ,ENUFTOK
  328.     LD    HL,WTOKEN    ; this flag holds either 2 (default) or    3 (ZEX)
  329.                 ; indicating wildcard location
  330.     LD    (HL),3
  331. ENUFTOK:
  332.     LD    BC,(WTOKEN)
  333.     LD    A,(NFND)
  334.     CP    C
  335.     JR    C,NENUF        ; if ZEX now need 3 tokens
  336.     JR    NZ,GT2        ; if exactly 2 tokens must find    end of tail
  337.     CALL    HLTOKEN
  338.     PUSH    HL
  339.     POP    DE        ; copy token address to    de
  340.     DEC    HL
  341. CNTR:    INC    HL        ; look at each character in 2nd    token
  342.     LD    A,(HL)
  343.     OR    A        ; is it    0?
  344.     JR    NZ,CNTR        ; no, get next
  345.     JR    TSTLNG
  346. GT2:    LD    BC,(WTOKEN)
  347.     CALL    HLTOKEN
  348.     EX    DE,HL        ; de has addr of wildcard token
  349.     INC    BC
  350.     CALL    HLTOKEN        ; hl has addr of following token
  351. TSTLNG:    SBC    HL,DE        ; derive length    of wildcard token
  352.     LD    A,(TAILB)    ; length of the    command    tail
  353.     SBC    A,L        ; subtract length of wildcard token
  354.     LD    HL,(SHNLEN)    ; get length of reinvokation name
  355.     ADD    A,L        ; add it to the reinvokation command tail
  356.     CP    32        ; too long for the shell stack?
  357.     JR    C,SMLENUF    ; no, small enough
  358.     JR    Z,SMLENUF    ;
  359.     LD    HL,TOOLRG    ; yes, error and abort
  360.     JP    PSTR
  361. ;
  362. SMLENUF:
  363.     LD    DE,(TKN1)    ; beginning of command in de
  364.     LD    BC,(WTOKEN)
  365.     CALL    HLTOKEN        ; beginning of wildcard    token in hl
  366.     SBC    HL,DE        ; length of tokens before wildcard in hl
  367.     PUSH    HL
  368.     POP    BC        ; move to bc
  369.     LD    HL,SHNAME    ; get start address of SHNAME buffer
  370.     LD    DE,(SHNLEN)    ; get length of shell name
  371.     ADD    HL,DE        ; calc where to append rest of cmd line
  372.     LD    DE,(TKN1)    ; get address for start of cmd line
  373.     EX    DE,HL
  374.     LDIR            ; copy
  375.     PUSH    DE        ; save next load address in ntail buffer
  376.  
  377.     LD    BC,(WTOKEN)
  378.     LD    A,(NFND)
  379.     INC    C        ; bump it
  380.     CP    C        ; and compare with no of tokens    found
  381.  
  382.     JR    NC,DOMOVE    ; c <= # of tokens, so more to move
  383.     POP    HL        ; c > #    of tokens so
  384.     LD    (HL),0        ; put a    zero at    end of ntail
  385.     JR    STARTCONT
  386.  
  387. DOMOVE:    LD    BC,(WTOKEN)
  388.     INC    C        ; we want the token after the wild card
  389.     CALL    HLTOKEN
  390.     POP    DE        ; de has dest addr in ntail buffer
  391.     XOR    A        ; we're    looking    for a zero
  392.     CALL    CPUNTL        ; copy bytes until we find one
  393. ;
  394. STARTCONT:
  395.     LD    BC,(WTOKEN)
  396.     CALL    HLTOKEN        ; convert second token
  397.     LD    DE,AMBIGFCB    ; to a proper z3 fcb
  398.     CALL    INITFCB
  399.     XOR    A        ; a=0 scan dir: first
  400. ;    INC    A        ; a=1 scan du: first <JPS - commented out>
  401.     CALL    ZPRSFN
  402.     LD    A,(DE)
  403.     OR    A        ; was a    drive specified?
  404.     JR    NZ,COPYFCB    ; yes, don't bother changing it
  405.     CALL    RETUD        ; get current du:
  406.     INC    B        ; b is drive code -1
  407.     LD    A,B
  408.     LD    (DE),A        ; store    it in fcb
  409. ;
  410. COPYFCB:    ; <JPS> following code modified to initialize to blanks
  411.     LD    HL,AMBIGFCB+16
  412.     LD    (HL),' '    ; fill starting filename with blanks
  413.     LD    DE,AMBIGFCB+17
  414.     LD    BC,11
  415.     LDIR
  416. ;
  417. FORMSHL:
  418.     LD    HL,AMBIGFCB
  419.     LD    A,1        ; no null termination in SHPUSH2
  420.     CALL    SHPUSH2
  421.     JP    NZ,SHBAD
  422.  
  423.     LD    HL,SHNAME
  424.     XOR    A        ; null termination okay    here
  425.     CALL    SHPUSH2        ; store    the shell name
  426.     JR    Z,RUNSH0    ; push okay, then skip next
  427.     CALL    SHPOP        ; get rid of the fcb's just placed on stack
  428.     JP    SHBAD        ; and abort
  429. RUNSH0:
  430.     LD    HL,HELLO    ; tell user that W has been installed
  431.     CALL    PSTR        ;
  432. ;
  433.     LD    IX,(SHLSTK2)    ; get address of second shell stack
  434. ;
  435. ; Store the value at WTOKEN in the second shell stack entry word 30 so
  436. ; on reinvokation we can easily tell if we are processing a ZEX command
  437. ;
  438.     LD    A,(WTOKEN)    ; get value at WTOKEN, 2=normal, 3=ZEX
  439.     LD    (IX+29),A    ; store in second shell stack word 30
  440. ;
  441. ; Store the system and non-system file use flags in the second shell stack
  442. ; entry word 31
  443. ;
  444.     LD    A,(ASYS)    ; get use system file flag
  445.     AND    01000000B    ; mask to get flag
  446.     LD    B,A        ; save value
  447.     LD    A,(ANONSYS)    ; get use non-system file flag
  448.     AND    10000000B    ; mask to get flag
  449.     OR    B        ; combine flags
  450.     LD    (IX+30),A    ; store in second shell stack word 31
  451. ;
  452. ; Store the current shell control byte in the second shell stack
  453. ; entry word 32 and set this byte for echo of command line
  454. ;
  455.     LD    B,0        ; byte is at Z3MSG+13
  456.     CALL    GETSHM
  457.     LD    (IX+31),A    ; store    it at word 32 of 2nd shell stack
  458.     LD    A,(ASECHO)    ; get shell echo command flag
  459.     AND    00000010B    ; value    to echo    command    lines built
  460.     CALL    PUTSHM        ; put it
  461. ;
  462. ; here is where    the normal processing after initial installation begins
  463. ;
  464. RUNSH:
  465. ;
  466. ; the need to check for ZEX running is only when using ZCPR30, ZEX processes
  467. ; all pending command lines in ZCPR33 before returning to the shell
  468. ;
  469.     CALL    GETZRUN        ; check    ZEX message byte
  470.     JP    NZ,ZEXRUN    ; process ZEX command line if ZEX running
  471.  
  472.     LD    HL,WAITMSG    ; <JPS> remind user that W is running
  473.     CALL    LQPSTR        ; if quiet flag is not set
  474.  
  475.     LD    BC,(DELAY)    ; Delay    value in milliseconds
  476. DLOOP:    LD    A,B
  477.     OR    C
  478.     JR    Z,XLOOP        ; BC = 0 delay finished
  479.     CALL    WAIT1MS        ; delay    to give    chance for abort
  480.     DEC    BC
  481.     JR    DLOOP        ; loop
  482. XLOOP:    CALL    CONDIN
  483.     JR    Z,RUNSH1    ; no key hit, go ahead
  484.     CP    ESC        ; is it    <escape>?
  485.     JR    NZ,RUNSH1    ; no so    go ahead
  486.     LD    HL,ABORTMSG    ; yes
  487.     CALL    PSTR        ; print    msg and
  488.     JP    QUIT1        ; quit
  489. ;
  490. RUNSH1:
  491.     LD    IX,(SHLSTK2)    ; point to second shell stack entry
  492.     LD    A,(IX+29)    ; get WTOKEN value from word 30
  493.     LD    (WTOKEN),A    ; store value in local WTOKEN
  494.  
  495.     CALL    PUTUD        ; save current du:
  496.     LD    A,(IX+13)    ; store    user num from second shell entry in a
  497.     OR    (IX+30)        ; system and non-system file usage flags
  498.     LD    B,A        ; user area to search
  499.     CALL    CODEND        ; hl points to beginning of dir    buffer
  500.     LD    DE,(SHLSTK2)    ; de points to ambiguous fcb in    shell stack
  501.     CALL    Z3LOG
  502.     CALL    DIRF        ; load directory entries
  503.     CALL    GETUD        ; restore du:
  504.     JP    Z,TPAOVFL    ; just in case
  505.     LD    A,B        ; bc holds number of matching entries
  506.     OR    C
  507.     JP    Z,ZQUIT        ; end operation    if no matching entries
  508.  
  509.     PUSH    BC        ; # of dir entries matching ambigfcb
  510.     LD    DE,15        ; so, when 16 is added in the loop, hl
  511.     SBC    HL,DE        ; will point to    the directory buffer + 1
  512.     PUSH    HL
  513. ;
  514. ; loop compares    sorted directory with last filename processed in
  515. ; previous runs
  516. ;
  517. CMPLOOP:
  518.     LD    DE,(SHLSTK2)
  519.     LD    HL,17
  520.     ADD    HL,DE        ; hl holds 1st byte of last file name
  521.                 ; in shell stack fcb
  522.     POP    DE        ; de holds current directory file name
  523.     PUSH    HL
  524.     LD    HL,16
  525.     ADD    HL,DE        ; hl holds next    entry in dir buffer
  526.     POP    DE        ; de holds 1st byte of last file selected
  527. ;
  528. ; reset file attributes so that the ascii compare works properly
  529. ;
  530.     PUSH    HL        ; save pointer to next entry in dir buffer
  531.     LD    B,11        ; reset MSB on the 11 bytes of file name
  532. RLOOP:    RES    7,(HL)        ; reset MSB (file flag) in dir file name
  533.     INC    HL        ; next byte
  534.     DEC    B        ; 
  535.     JR    NZ,RLOOP    ; do for 11 bytes
  536.     POP    HL        ; hl holds next entry in dir buffer
  537.  
  538.     LD    B,11        ; compare 11 bytes
  539.     CALL    COMPB
  540.     JR    C,BUMPB        ; if dir < last    one, not one we    want
  541.     JR    Z,BUMPB        ; if dir = last    one, not one we    want
  542.     JP    DOIT        ; dir >    last one, we want that one
  543. BUMPB:    POP    BC
  544.     DEC    BC
  545.     LD    A,C
  546.     OR    B
  547.     JP    Z,QUIT        ; none found, time to exit shell
  548.     PUSH    BC
  549.     PUSH    HL
  550.     JR    CMPLOOP        ; try again
  551. ;
  552. ; the 'next' file name is entered into the command line
  553. ;
  554. DOIT:                ; <JPS> check again for abort
  555.     CALL    CONDIN
  556.     POP    BC        ; restore BC regs pushed above
  557.     JR    Z,DOIT0        ; no key hit - continue
  558.     CP    ESC        ; is it <escape>?
  559.     JR    NZ,DOIT0    ; no - continue
  560.     LD    HL,ABORTMSG    ; yes - point to abort message
  561.     CALL    PSTR        ; display it
  562.     JP    QUIT1        ; quit
  563. ;
  564. DOIT0:
  565.     PUSH    HL        ; saving addrss    in dir buffer for mfn2
  566.     LD    HL,(SHLSTK2)
  567.     LD    DE,17
  568.     ADD    HL,DE
  569.     EX    DE,HL        ; de points to filename    field of fcb on
  570.                 ; level    2 of shell stack
  571.     POP    HL        ; hl points to chosen filename in dir
  572.     PUSH    HL        ; we're    still gonna need it
  573.     LD    BC,11
  574.     LDIR            ; shell    stack now updated for next runthrough
  575. ;
  576. ; parse    the pseudo - command line in the shell stack
  577. ;
  578. ;    1: eliminate the first argument    as it is W and pass the    second to
  579. ;       the temporary buffer
  580. ;
  581. DOIT1:    LD    HL,(SHLSTK)    ; point to command line in shell stack
  582.     CALL    SKNSP        ; move pointer to first space
  583.     INC    HL        ; now point to second token in command line
  584.     LD    A,(WTOKEN)    ; get value from local WTOKEN
  585.     CP    3        ; if =3 then ZEX command
  586.     LD    A,' '        ; stop on a space
  587.     LD    DE,TEMPBUF
  588.     JR    NZ,ONCE        ; not ZEX, copy    only one token
  589.     CALL    CPUNTL        ; copy token to    temporary buffer
  590. ONCE:    CALL    CPUNTL        ; copy token to    temporary buffer
  591. ;
  592. ;    2: process the fcb that    cmploop    stopped    on, converting it
  593. ;       to a    string with d: and u: if different from    current
  594. ;       add it to the temporary buffer
  595. ;       Note: DE still has address in temporary file    name buffer
  596. ;
  597. DOIT2:    POP    BC        ; address in directory buffer
  598.     PUSH    HL        ; hl = address in shell    stack buffer to    move
  599.     PUSH    BC
  600.     LD    B,17
  601.     LD    A,' '
  602.     EX    DE,HL
  603.     CALL    FILLB        ; fill next 17 bytes of    tempbuf    with ' '
  604.                 ; drive:    1
  605.                 ; user:        2
  606.                 ; colon:    1
  607.                 ; filename:    8
  608.                 ; period:    1
  609.                 ; file type:    3
  610.                 ; trail. space    1
  611.                 ; total           17
  612.     EX    DE,HL
  613.     LD    IX,(SHLSTK2)
  614.     CALL    RETUD        ; Current DU in    BC
  615.     LD    A,(IX+13)    ; File U in A
  616.     CP    C        ; Same?
  617.     JR    Z,USRSAME    ; Yes
  618.     LD    A,(IX)        ; No so    must pass DU:
  619.     CALL    DPASS        ; Pass Drive
  620.     LD    A,(IX+13)
  621.     CALL    MAFDC        ; Pass User
  622.     JR    COLON        ; add the ':'
  623. USRSAME:
  624.     LD    A,(IX)        ; A has    drive code of afn in shell stack
  625.     INC    B        ; B has    Current    D from RETUD, must add 1
  626.     CP    B        ; Current Drive    = File Drive?
  627.     JR    Z,FILENM    ; Yes, pass no DU: at all
  628.     CALL    DPASS        ; Pass Drive
  629. COLON:    LD    A,':'
  630.     LD    (DE),A        ; add the colon
  631.     INC    DE        ; de points to next byte of temp buffer
  632. FILENM:    POP    HL        ; hl = address in directory buffer to process
  633.     EX    DE,HL        ; switch em
  634.     CALL    MFN2        ; adds it to the temp buffer
  635.     CALL    SKNSP        ; hl points to first space
  636. ;
  637. ;    3: move    the rest of the    pseudo command line in the shell stack
  638. ;       buffer into the temporary buffer.  this buffer now contains the
  639. ;       command line    we will    pass to    the ccp.
  640. ;
  641. DOIT3:
  642.     POP    DE        ; de = address in shell    stack buffer to    move
  643.     EX    DE,HL        ; switch 'em
  644.     LD    A,(HL)        ; next byte to write
  645.     OR    A        ; is it    a zero?    (EOL)
  646.     JR    NZ,DOIT3A    ; No.
  647.     LD    (DE),A        ; Yes, Zero last byte of command line
  648.     JR    DOIT3B
  649. DOIT3A:    INC    DE        ; leave    space alone and    add rest of CL
  650.     XOR    A        ; lookin for a zero
  651.     CALL    CPUNTL        ; copy rest of command line to buffer
  652. DOIT3B:    LD    B,0        ; look at shell    msg 0
  653.     CALL    GETSHM
  654.     AND    00000010B    ; echo byte on?
  655.     OR    A        ;
  656.     JR    Z,DOIT5        ; no so    don't print cmdline
  657.     LD    HL,INFORM1
  658.     CALL    LQPSTR        ; print abbreviated <w> message if quiet
  659.                 ; flag is not set
  660.     LD    HL,TEMPBUF
  661.     CALL    LQPSTR        ; print if quiet flag is not set
  662. ;
  663. ; turn off command status byte so IF's will work right
  664. ;
  665. DOIT5:    CALL    GETMSG
  666.     INC    HL
  667.     INC    HL
  668.     INC    HL        ; HL points to command status byte
  669.     LD    (HL),0
  670. ;
  671. ; put our generated command and reinvokation command in the mult cmd buf
  672. ;
  673. ; Note:  the command lines are moved to a scratch buffer in unused memory and
  674. ;      then moved to the mult cmd line buf  because the PUTCL routine
  675. ;      will append any pending commands in the mult cmd buf to the command
  676. ;      line being added, then copy the new command line back to the start
  677. ;      of the mult cmd line buf
  678. ;
  679. DOIT6:    CALL    CODEND        ; hl = start of scratch buffer/memory
  680.     PUSH    HL        ; save start address for later use
  681.     LD    DE,TEMPBUF    ; address of generated command
  682.     EX    DE,HL        ; swap so hl = command, de = buffer
  683.     XOR    A        ; set end of copy character to null word
  684.     CALL    CPUNTL        ; copy command to scratch buffer
  685.  
  686.     LD    A,(AINSERT)    ; get INSERT W reinvokation flag
  687.     OR    A
  688.     JP    Z,DOIT7        ; if FALSE, go add just generated cmd to cmd buf
  689.  
  690.     LD    A,(WTOKEN)    ; get local WTOKEN value
  691.     CP    3        ; if = 3 then processing a ZEX command
  692.     JP    Z,DOIT7        ; if ZEX, go add just generated cmd to cmd buf
  693.  
  694.     EX    DE,HL        ;
  695.     DEC    HL        ; point to null word
  696.     LD    (HL),';'    ; add multiple command seperator in buffer
  697.     INC    HL        ;
  698.     LD    DE,(SHLSTK)    ; get address of reinvokation command
  699.     EX    DE,HL        ; swap so hl = command, de = buffer
  700.     LD    A,' '        ; copy only W, rest of tail not needed
  701.     CALL    CPUNTL        ; copy command to scratch buffer
  702.     EX    DE,HL        ; swap so hl = buffer, de = command
  703.     DEC    HL        ; point to space copied to buffer
  704.     LD    (HL),0        ; mark end of command with null
  705.  
  706. DOIT7:    POP    HL        ; get start address of scratch buffer back
  707.     CALL    PUTCL        ; put commands in mult cmd buf
  708.     JP    Z,MCLOVFL    ; jump if mult cmd buf overflow
  709.     RET            ; to ccp
  710. ;
  711. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  712. ;                        ;
  713. ; EXIT ROUTINES                    ;
  714. ;                        ;
  715. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  716. ;
  717. ; dump the shell and exit
  718. ;
  719. ZQUIT:    LD    HL,STRIKEOUT    ; no matching files message
  720.     CALL    LQPSTR        ; print if quiet flag not set
  721. QUIT:
  722.     LD    HL,GOODBYE
  723.     CALL    PSTR
  724. QUIT1:                ; land here on aborts
  725.     LD    B,0
  726.     LD    IX,(SHLSTK2)
  727.     LD    A,(IX+31)    ; get old shell    message    byte
  728.     CALL    PUTSHM        ; restore it
  729.     CALL    SHPOP        ; take our name    off
  730.     CALL    SHPOP        ; get rid of fcb's on shell stack
  731.     RET            ; to ccp
  732. ;
  733. ; not enuf memory for directory    (just in case)
  734. ;
  735. TPAOVFL:
  736.     CALL    SHPOP        ; reset    shell stack to prior condition
  737.     LD    HL,TPAMSG
  738.     JP    PSTR
  739. ;
  740. ; not enuf room in multiple command line buffer
  741. ;
  742. MCLOVFL:
  743.     LD    HL,MCLMSG
  744.     CALL    PSTR
  745.     JP    QUIT1
  746. ;
  747. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  748. ;                        ;
  749. ; UTILITY ROUTINES                ;
  750. ;                        ;
  751. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  752. ;
  753. ; Convert drive    code in    A to a letter, move it to location
  754. ; in DE    pointer    and bump the pointer
  755. ;
  756. DPASS:
  757.     ADD    A,'@'        ; convert drive    code to    a letter
  758.     LD    (DE),A
  759.     INC    DE        ; bump pointer to temp buffer
  760.     RET
  761. ;
  762. ; this routine takes a value in    c and returns in hl an address to the
  763. ; c'th token in    a string which has been    parsed by argv.
  764. ;
  765. HLTOKEN:
  766.     PUSH    DE
  767.     LD    A,C
  768.     ADD    A,C        ; double this value to get offset
  769.     LD    D,0        ; transfer to de
  770.     LD    E,A
  771.     LD    HL,TKNTBL    ; add to beginning of table
  772.     ADD    HL,DE        ; hl now has pointer to    beginning addr of token
  773.     LD    E,(HL)
  774.     INC    HL
  775.     LD    D,(HL)
  776.     EX    DE,HL        ; hl now points    to beginning of    token
  777.     POP    DE
  778.     RET
  779. ;
  780. ; copy bytes upto and including a given byte
  781. ;   inputs:
  782. ;    a  : byte to stop on
  783. ;    hl : source
  784. ;    de : dest
  785. ;   outputs :
  786. ;    hl and de point    to byte    following the last byte copied
  787. ;
  788. CPUNTL:    
  789.     CP    (HL)
  790.     LDI            ; copy byte from hl to de
  791.     JR    NZ,CPUNTL
  792.     RET
  793. ;
  794. ; local quiet print string - uses AIQUIET flag
  795. ;   inputs:
  796. ;    hl : point to null terminated string to print
  797. ;    (AIQUIET) : internal quiet flag; 00h=print, FFh=don't print
  798. ;   outputs:
  799. ;    none
  800. ;
  801. LQPSTR:
  802.     PUSH    PSW        ; save reg a
  803.     LD    A,(AIQUIET)    ; get W internal quiet flag
  804.     OR    A
  805.     CALL    Z,PSTR        ; if FALSE, print string
  806.     POP    PSW        ; restore reg a
  807.     RET
  808. ;
  809. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  810. ;                        ;
  811. ; module SHPUSH2                ;
  812. ;                        ;
  813. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  814. ;
  815. ; The following    code is    derived    from and is in fact, almost identical
  816. ; to R.    Conn's Z3SHPUSH.MAC, the only differences being
  817. ; 1> z80 code and
  818. ; 2> the fact that Conn's code
  819. ; quite    sensibly stops copying the new entry onto the stack once a
  820. ; zero byte is encountered.  This program introduces a non-
  821. ; standard use of a shell stack    entry to hold an FCB, so needs
  822. ; to copy the full number of bytes regardless of content.  Therefore
  823. ; we introduce an input    flag in    the a register.     When zero the
  824. ; normal SHPUSH    null terminated    copy is    performed.  When non-zero,
  825. ; the full number of bytes is copied.  Obviously, be very careful
  826. ; with this sort of thing.
  827. ;
  828. ; macros
  829. ;
  830. PUTRG    MACRO
  831.     PUSH    HL
  832.     PUSH    DE
  833.     PUSH    BC
  834.     ENDM
  835. GETRG    MACRO
  836.     POP    BC
  837.     POP    DE
  838.     POP    HL
  839.     ENDM
  840. ;
  841. ;    SHPUSH pushes the string (incl ending 0) pted to by hl onto
  842. ; the shell stack if possible.    SHPUSH returns with a=0    and zero flag
  843. ; set (z) if push is successful, else SHPUSH returns with a<>0 and
  844. ; zero flag clear (nz) if an error occurred.  the following error
  845. ; codes    are returned:
  846. ;        1 - no shell stack available
  847. ;        2 - shell stack    is full
  848. ;        3 - string is too long for shell stack entry
  849. ;
  850. SHPUSH2:
  851.     PUTRG            ;save registers
  852. ;
  853. ; get shell data for later use
  854. ;
  855.     LD    (NULTRM),A    ;store a into null termination flag
  856.     PUSH    HL        ;save ptr to string
  857.     CALL    GETSH2        ;get ptr to shell stack
  858. ;
  859.     POP    HL        ;get ptr to string
  860.     JP    Z,NOSHELL    ;error if no shell stack
  861. ;
  862. ; see if string    is too long (only if null-termination in effect);
  863. ;
  864.     PUSH    HL        ;save ptr to string
  865.     LD    A,(NULTRM)    ;following check unnecessary in    event
  866.     OR    A        ;null termination disabled
  867.     JR    NZ,CKS1        ;
  868. CKSIZE:
  869.     LD    A,(HL)        ;get elt
  870.     INC    HL        ;pt to next
  871.     OR    A        ;end of    string?
  872.     JR    Z,CKS1
  873.     DEC    E        ;count down
  874.     JR    NZ,CKSIZE
  875.     JP    TOOBIG        ;string    is too long
  876. CKS1:
  877. ;
  878. ; check    to see if shell    stack is full
  879. ;
  880.     CALL    GETSH2        ;get values for    copy
  881. FCHK:
  882.     LD    A,(HL)        ;get next element
  883.     OR    A        ;last element on stack?
  884.     JR    Z,FCHK1        ;stack ok
  885.     ADD    HL,DE        ;pt to next element
  886.     DEC    B        ;count down
  887.     JR    NZ,FCHK
  888.     JP    NOROOM        ;shell is full
  889. FCHK1:
  890. ;
  891. ; copy current shell stack up
  892. ;
  893.     CALL    GETSH2        ;get shell stack values
  894. ;
  895. ; point    to end of new top element
  896. ;
  897.     PUSH    BC
  898. MOVE0:
  899.     LD    A,B        ;check for done
  900.     CP    1
  901.     JR    Z,MOVE1
  902.     ADD    HL,DE        ;pt to next
  903.     DEC    B        ;count down
  904.     JR    MOVE0
  905. MOVE1:
  906.     POP    BC
  907.     LD    C,E        ;get count of elements in c
  908.     DEC    HL        ;pt to first byte to copy
  909.     EX    DE,HL        ;de pts    to source
  910.     ADD    HL,DE        ;hl pts    to destination
  911. ;
  912. ; copy stack up    one entry size
  913. ;
  914. MOVE2:
  915.     LD    A,B        ;check for copy    done
  916.     CP    1        ;one less element
  917.     JP    Z,MOVE4
  918.     DEC    B        ;count down
  919.     PUSH    BC        ;b=number of elements left to copy, c=size of each
  920. MOVE3:
  921.     LD    A,(DE)        ;get
  922.     LD    (HL),A        ;put
  923.     DEC    HL        ;back up
  924.     DEC    DE
  925.     DEC    C        ;count down
  926.     JR    NZ,MOVE3
  927.     POP    BC        ;get values
  928.     JR    MOVE2
  929. MOVE4:
  930.     LD    A,(NULTRM)    ;the null termination flag is evaluated
  931.     OR    A
  932.     JR    NZ,FULLCOPY
  933.     CALL    GETSH2        ;get ptr to shell stack
  934.     POP    DE        ;get ptr to string
  935. ;
  936. ; copy new shell entry from de to hl
  937. ;
  938. COPY:
  939.     LD    A,(DE)        ;get byte
  940.     LD    (HL),A        ;put byte
  941.     INC    HL        ;pt to next
  942.     INC    DE
  943.     OR    A        ;done?
  944.     JR    NZ,COPY
  945.     JR    WELLDONE
  946. FULLCOPY:
  947.     CALL    GETSH1        ;get ptr to shell stack, and # of bytes    in b
  948.     LD    C,B
  949.     LD    B,0
  950.     POP    DE        ;get ptr to string
  951.     EX    DE,HL        ;reverse em for    ldir
  952.     LDIR
  953. WELLDONE:
  954.     GETRG            ;restore registers
  955.     XOR    A        ;ok return
  956.     RET
  957. NULTRM:    DS    1        ; null termination flag
  958. ;
  959. ; no shell stack available
  960. ;
  961. NOSHELL:
  962.     POP    HL        ;restore hl
  963.     GETRG            ;restore registers
  964.     LD    A,1        ;error code
  965.     OR    A
  966.     RET
  967. ;
  968. ; no room on shell stack
  969. ;
  970. NOROOM:
  971.     POP    HL        ;restore hl
  972.     GETRG            ;restore registers
  973.     LD    A,2        ;error code
  974.     OR    A
  975.     RET
  976. ;
  977. ; string is too    large
  978. ;
  979. TOOBIG:
  980.     POP    HL        ;restore hl
  981.     GETRG            ;restore registers
  982.     LD    A,3        ;error code
  983.     OR    A
  984.     RET
  985. ;
  986. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  987. ;                        ;
  988. ;  Run ZEX on top of W                ;
  989. ;                        ;
  990. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  991. ;
  992. ;  Command line    is currently empty and ZEX is active.
  993. ;  Accept new command line from    ZEX and    pass it    to ZCPR3.
  994. ;  This    code unasheamedly cribbed from Al Dunsmuir's VFILER.
  995. ;
  996. ZEXRUN:    LD    HL,WSTR
  997.     CALL    LQPSTR        ; print if quiet flag not set
  998.     JR    ZEXR1
  999. WSTR:    DEFB    CR,LF,'W> ',0
  1000. ZEXR1:    LD    A,1        ;tell ZEX that it is prompted
  1001.     CALL    PUTZEX
  1002.     CALL    GETCL1        ;pt to command line buffer
  1003.     LD    D,H        ;copy pointer
  1004.     LD    E,L
  1005.     INC    DE        ;pt to 1st char
  1006.     INC    DE
  1007.     INC    DE
  1008.     INC    DE
  1009.     LD    (HL),E        ;set ptr to first character.
  1010.     INC    HL
  1011.     LD    (HL),D
  1012.     INC    HL        ;pt to char count
  1013.     EX    DE,HL        ;... in    de
  1014.     PUSH    DE        ;save ptr
  1015.     LD    C,RDBUF        ;input line via    bdos
  1016.     CALL    BDOS
  1017.     POP    HL        ;pt to char count
  1018.     INC    HL
  1019.     LD    E,(HL)        ;get char count
  1020.     INC    HL        ;pt to first char
  1021.     PUSH    HL        ;save ptr
  1022.     LD    D,0        ;de=char count
  1023.     ADD    HL,DE
  1024.     LD    (HL),0        ;store ending 0
  1025.     POP    HL        ;pt to first char
  1026.     CALL    SKSP        ;skip over leading spaces
  1027.     LD    A,(HL)        ;check for comment
  1028.     CP    ';'        ;if comment,
  1029.     JR    Z,ZEXRUN    ;loop until real command is found
  1030.     XOR    A        ;a=0
  1031.     CALL    PUTZEX        ;resume    ZEX (a=0)
  1032.     JP    PUTCST        ;set command status to normal (a=0),
  1033.     ;... then return to opsys
  1034. ;
  1035. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1036. ;                        ;
  1037. ; Miscellaneous    Buffers                ;
  1038. ;                        ;
  1039. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1040. ;
  1041. WTOKEN:    DW    2        ; default is that 2nd token is wildcard
  1042. ZEXNAME:
  1043.     DB    'ZEX '        ; check    to see if a ZEX    command
  1044. AMBIGFCB:
  1045.     DS    36
  1046. TEMPBUF:
  1047.     DS    64
  1048. SHLSTK:
  1049.     DS    2
  1050. SHLSTK2:
  1051.     DS    2
  1052. SHSIZE:
  1053.     DW    32
  1054. SHNLEN:
  1055.     DW    NTAIL-SHNAME
  1056. SHNAME:
  1057.     DB    'W '
  1058. NTAIL:    DS    32-($-SHNAME)    ; 32 spaces in shell stack entry
  1059. ;
  1060. ; table    of pointers to command line tokens created by argv
  1061. ;
  1062. TKNTBL:    DB    6
  1063. NFND:    DS    1
  1064. TKN1:    DS    2
  1065. TKN2:    DS    2
  1066. TKN3:    DS    2
  1067. TKN4:    DS    2
  1068. TKN5:    DS    2
  1069. TKN6:    DS    2
  1070. ;
  1071. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1072. ;                        ;
  1073. ; Miscellaneous    Messages            ;
  1074. ;                        ;
  1075. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  1076. ;
  1077. SHERR:    DB    'Shell Stack Error.',0
  1078. TOOLRG:    DB    'W Command Line Overflow.',0
  1079. TPAMSG:    DB    CR,LF,'Not Enough Memory. Aborting.',0
  1080. MCLMSG:    DB    CR,LF,'Multiple Command Line Buffer Overflow. Aborting.',0
  1081. HELLO:    DB    '<W Vers. '
  1082.     DB    (VERS/10)+30h,'.'
  1083.     DB    (VERS mod 10)+30h
  1084.     DB    ' Installed>',CR,LF,0
  1085. INFORM1:
  1086.     DB    CR,LF,'<W> ',0
  1087. WAITMSG:
  1088.     DB    CR,LF
  1089.     DB    '   W Scanning for Next Matching File',CR,LF
  1090.     DB    '   Please wait or ESC to abort ... '
  1091.     DB    CR,LF,0
  1092. STRIKEOUT:
  1093.     DB    CR,LF,'   No files match wildcard. ',0
  1094. GOODBYE:
  1095.     DB    CR,LF,'<W Finished>',0
  1096. ABORTMSG:
  1097.     DB    CR,LF,'<W Aborted> ',0
  1098. HLPMSG:
  1099.     DB    CR,LF,'<W Vers. '
  1100.     DB    (VERS/10)+30h,'.'
  1101.     DB    (VERS mod 10)+30h
  1102.     DB    '> -- THE WILDCARD PROCESSOR'
  1103.     DB    CR,LF
  1104.     DB    CR,LF,'SYNTAX:'
  1105.     DB    CR,LF,'      W COMMAND AFN [parm,parm...parm]'
  1106.     DB    CR,LF,'         where COMMAND is any executable ZCPR3 command'
  1107.     DB    CR,LF,'         and AFN is an ambiguous filename upon which'
  1108.     DB    CR,LF,'         COMMAND is to act, with optional parameters'
  1109.     DB    CR,LF,' OR --'
  1110.     DB    CR,LF,'      W ZEX COMMAND AFN [parm,parm...parm]'
  1111.     DB    CR,LF,'         where COMMAND is a ZEX command script file'
  1112.     DB    CR,LF
  1113.     DB    CR,LF,'W is used to add wildcard capability for commands that'
  1114.     DB    CR,LF,'do not normally accept wildcards.'
  1115.     DB    CR,LF
  1116.     DB    CR,LF,'To abort W type <ESCAPE> several times.'
  1117.     DB    CR,LF,0
  1118. ;
  1119.     END
  1120.