IMD 1.16: 1/06/2007 13:36:29 FOGCPM.205 Z33DEFN LIB Z33HDR LIB Z33HDR LIB---FOGCPM205-03-09 89 Z33HDR1 LIBZ33HDR2 LIB !Z33HDR3 LIB"#$%Z33HDR4 LIB&'()Z33HDR5 LIB*+,-Z33MAC LIB ./01Z3BASE LIB42345678ZCPR33 ZQ09:;<=>?@ABCDEFGHZCPR33 ZQ0IJKLMNOPQRSTUVWXZCPR33 ZQ0YZ[\]^_`abcdefghZCPR33 ZQ0ijklmnopqrstuvwxZCPR33 ZQ0Nyz{|}~-CPM205 DOCASSEMBLYNOT"ZCPR33 NOTZCPR33 NOTF ; Definitions for offsets in ZCPR33 code offvers equ 5 ; Offset to version byte offopt equ 6 ; Offset to first option byte offparse equ 16 ; Offset to entry point to REPARSE offscan equ 22 ; Offset to entry point for SCAN offcmd equ 25 ; Offset to command table ; Offset in message buffer for new data offcdrv equ 2fh ; Current drive offcusr equ 2eh offsrun equ 2dh ; SUBMIT running flag offxsub equ 2ch ; XSUB input redirection flag ; Bit positions and offsets within option bytes of various options obadduecp equ 0 bbadduecp equ 7 orootonly equ 0 brootonly equ 6 ondrenv equ 0 bndrenv equ 5 ofcpenv equ 0 bfcpenv equ 4 orcpenv equ 0 brcpenv equ 3 oinclenv equ 0 binclenv equ 2 oaduenv equ 0 baduenv equ 1 oduenv equ 0 bduenv equ 0 ohighuser equ 1 bhighuser equ 7 odrvprefix equ 1 bdrvprefix equ 6 oscancur equ 1 bscancur equ 5 oincldir equ 1 bincldir equ 4 oincldu equ 1 bincldu equ 3 odufirst equ 1 bdufirst equ 2 oaccptdir equ 1 baccptdir equ 1 oaccptdu equ 1 baccptdu equ 0 opwcheck equ 2 bpwcheck equ 6 opwnoecho equ 2 bpwnoecho equ 5 owdu equ 2 bwdu equ 4 owpass equ 2 bwpass equ 3 owprefix equ 2 bwprefix equ 2 ofastecp equ 2 bfastecp equ 1 oskippath equ 2 bskippath equ 0 oshellif equ 3 bshellif equ 7 oattsys equ 3 battsys equ 6 oattdir equ 3 battdir equ 5 oattchk equ 3 battchk equ 4 osubecho equ 3 bsubecho equ 3 osubquiet equ 3 bsubquiet equ 2 osubclue equ 3 bsubclue equ 1 osubon equ 3 bsubon equ 0 fcpenv equ 0 bfcpenv equ 4 orcpenv equ 0 brcpenv equ 3 oinclenv equ 0 binclenv equ 2 oaduenv equ 0 baduenv equ 1 oduenv equ 0 bduenv equ 0 ohighuser equ 1 bhighuser equ 7 odrvprefix equ 1 bdrvprefix equ 6 oscancur equ 1 bscancur equ 5 oincldir equ 1 bincldir equ 4 oincldu equ 1 bincldu equ 3 odufirst equ 1 bdufirst equ 2 oaccptd ; Z33HDR.LIB ; This is the configuration file for the ZCPR Version 3.3 command processor. ; You should read through this file and set the equates according to the ; features you want to implement. Since the command processor is limited to ; no more than 2K (2048 bytes), it is impossible to include all features. ; Basic definitions no equ 0 yes equ not no off equ no on equ yes rel equ no ; This equate MUST be set to YES if assembling ; to a REL file, and it MUST be set to NO if ; assembling to a HEX or COM file. ;============================================================================= ; ; R E S I D E N T C O M M A N D S S E L E C T I O N ; ;============================================================================= ; Commands to include in the command processor ; The primary function of the command processor is to interpret user commands. ; Providing resident command functions is secondary. As the command processor ; has evolved to provide ever more advanced command processing functions, there ; has been correspondingly less room for resident command code in the ; processor. We recommend that you opt for most if not all of the advanced ; processing features and leave the resident command code to the resident ; command processor (RCP) module and to transient programs (COM files). ; ; There are some interrelations between a number of the possible resident ; commands. Some are so close (LIST and TYPE) that a single equate controls ; both functions. Others like DIR and ERA share code (both display file ; listings). It is efficient to select or deselect them together. The RCP ; has the room to provide more elaborate capabilities. Therefore, it makes ; sense to choose for the CPR those resident commands that are intrinsically ; simple, (e.g., NOTE) or which depend on intrinsic command processing code ; (e.g., GET, GO, JUMP). diron equ no ; DIR command to display disk directory eraon equ no ; ERA command for deleting files geton equ yes ; GET command for loading a file to a general address goon equ yes ; GO command to execute code in TPA (at 100h) jumpon equ yes ; JUMP command to execute code at a general address lton equ no ; LIST and TYPE commands for file printing and display noteon equ no ; NOTE command for comments in multiple command lines renon equ no ; REN command for changing names of files saveon equ no ; SAVE command for saving TPA to files ;----------------------------------------------------------------------------- ; Wheel control over accessibility of commands ; To prevent unauthorized users from performing certain dangerous or sensitive ; operations on the computer, ZCPR33 provides the capability of disabling the ; operation of certain commands when the wheel byte is off. In ZCPR30, an ; attempt to use one of these wheel-protected commands when the wheel byte was ; off resulted in an error message. In ZCPR33 things work differently. In the ; same situation, the command simply disappears. In this way a transient ; program or extended command processor function can take over and deal with ; the attempt to use the command in a much more flexible way. ; ; Wheel-protected commands in ZCPR30 had extra code to intercept the function ; and disable it. In ZCPR33, wheel protection is enabled and disabled in a ; different way. To wheel-protect a command the high bit of the first ; character in the command name is set. The command table scanner in ZCPR33 ; will not recognize these commands when the wheel byte is off. Since the same ; command scanner is used to scan the commands in the RCP and FCP (flow control ; package), commands there can be wheel protected in the same way. For skilled ; computer operators it is very easy to use a debugger, file patcher, or disk ; utility to enable and disable wheel protection without having to reassemble ; the CPR, RCP, or FCP. ; ; Because of the way the command scanner works, once one command is wheel ; protected, there is no further code penalty in protecting other commands. ; Therefore, we recommend protecting all possibly sensitive commands or none. wdir equ no ; Wheel-protect DIR wera equ yes ; " " ERA wget equ yes ; " " GET wgo equ yes ; " " GO wjump equ yes ; " " JUMP wren equ yes ; " " REN wsave equ yes ; " " SAVE wlt equ yes ; " " LIST and TYPE ;----------------------------------------------------------------------------- ; Command names ; The CTABLE macro, which constructs the command dispatch table, includes a ; line for each command, the first parameter of which is the name of the ; command. These names may be changed if you wish. But make sure that you ; do not use a name that is longer than the maximum allowed length. If you ; do, the name will be truncated and a nonfatal error will occur during ; assembly. DO NOT CHANGE ANY PARAMETER OTHER THAN THE COMMAND NAME. Lower ; case letters will be converted to upper case. The macro COMMAND is defined  ; in Z33MAC.LIB. cmdsize equ 4 ; Maximum length of command names ; Command table name, enable, wheel, jump_addr ; [ DO NOT CHANGE THESE PARAMETERS ] ctable macro command DIR, diron, wdir, dir command ERA, eraon, wera, era command GET, geton, wget, get command GO, goon, wgo, go command JUMP, jumpon, wjump, jump command LIST, lton, wlt, list command NOTE, noteon, false, note command REN, renon, wren, ren command SAVE, saveon, wsave, save command TYPE, lton, wlt, type endm ;----------------------------------------------------------------------------- ; DIR command options wide equ yes ; Wide display for 80-column terminals fence equ '|' ; Separator to use between columns of names allchar equ 'A' ; Option letter (must be upper case) for ; showing SYS and DIR files syschar equ 'S' ; Option letter (must be upper case) for ; showing only SYS files slashfl equ yes ; Allow forms "DIR /S" and "DIR /A"? whldir equ yes ; Allow display of SYS files only if wheel set ; Do not change whldir defl whldir and diron ;----------------------------------------------------------------------------- ; ERA command options ; There are options that control whether or not and in what way the user will ; be prompted before files are erased. If ERAOK is off, then there will never ; by any prompting. If ERAOK is on and INSPFL is off, then the user will be ; prompted before all deletions. If INSPFL is also on, then the user will be ; prompted only when the prompt option character is included on the command ; line. If this character is defined to be a blank space, then any character ; will turn on prompting. eraok equ on ; Enable prompting before files are erased inspfl equ on ; Enable command-line inspection flag inspch equ ' ' ; Character to use (must be upper case) to ; invoke inspection. If this is set to ; ' ' (space character), then any character ; after the files spec will turn on the ; inspect option. ;----------------------------------------------------------------------------- ; GET command options fullget equ yes ; If yes, no memory checks are performed with ; the GET command (files can even overwrite the ; command processor or page 0). ;----------------------------------------------------------------------------- ; SAVE command options sectch equ ' ' ; Option character (must be upper case) to ; select saving of sectors. If set to ' ' ; (space), then any character will select the ; sector-save option. bellfl equ yes ; If yes, bell will ring for SAVE and REN ; commands when the file already exists. ;----------------------------------------------------------------------------- ; TYPE command options pagefl equ yes ; If enabled, normally page the output. If not ; enabled, page output only when paging toggle ; character is present. pagech equ 'P' ; Option character (must be upper case) to ; toggle paging. If it is set to ' ' ; (space), then any character will toggle ; the paging mode ;============================================================================= ; ; C O M M A N D P R O C E S S I N G O P T I O N S ; ;============================================================================= ; ZCPR33 has many more command processing options than did ZCPR30. These are ; controlled by the following equates. ;----------------------------------------------------------------------------- ; Environment access ; In ZCPR30 the command processor knew about its environment only at the time ; it was assembled. Therefore, all aspects of the environment were fixed. ; Loading a new ENV module might change the way a transient program would ; function (for example by changing the maximum drive and user values that ; would be accepted), but the command processor would not recognize these ; changes. ZCPR33 can be made to recognize dynamically several possible ; changes in the environment. duenv equ yes ; If enabled, the CPR will get the values of ; the maximum drive and user to recognize from ; the environment descriptor aduenv equ yes ; If enabled, the CPR will use the DUOK flag ; byte in the environment to determine ; whether or not to accept DU: references inclenv equ no ; If enabled, inclusion of the DU in the ; prompt will be controlled by the DUOK flag ; The following three functions, if enabled, allow one to dynamically trade off ; buffer space between named directories, resident commands, and flow control. ; By executing a command like "LDR NEW.ENV,NEW.RCP,NEW.FCP,NEW.NDR" one can ; temporarily expand the capabilities of one module at the expense of another. ; To use these capabilities, the three buffers must be contiguous in memory. ; Since making such changes can be risky, it is recommended that it be done ; only with aliases, so that all necessary changes get made automatically and ; at the same time. fcpenv equ yes ; If enabled, the CPR will determine the address ; of the FCP (flow command package) from the ; environment descriptor. rcpenv equ yes ; If enabled, the CPR will determine the address ; of the RCP (resident command package) from ; the environment descriptor. ndrenv equ yes ; If enabled, the CPR will determine the address ; of the NDR (named directory registers) from ; the environment descriptor. ;----------------------------------------------------------------------------- ; Control over types of files to load and run as transient programs. comtyp macro ; The file type for executable files (this will db 'COM' ; be changed only in the most unusual endm ; situtations). This file type will also apply ; to the extended command processor. attchk equ no ; If enabled, the command processor can be made ; to recognize as executable files only those ; with particular attributes (defined by the ; COMATT equate below). comatt equ 0 ; 0 = system, 80h = DIR (01h will give both, ; but in that case setting ATTCHK to false will ; give the same result with less code). ;----------------------------------------------------------------------------- ; Batch processing using the submit facility. This takes up quite a bit of ; space in the command processor, and you may wish to omit it. Most of the ; type of processing that submit can do can be accomplished using either the ; the memory-based ZEX batch processor or command-line scripts (aliases). subon equ yes ; If enabled, the command processor will ; process submit files. subnoise equ 0 ; If 0, submit lines, like command lines ; generated by aliases, will not be echoed ; to the screen. If 1, then echoing will ; be controlled by the ENV QUIET flag. If more ; than 1, submit command lines will always ; be echoed. subclue equ no ; If yes, use the flag returned by the DOS ; as a clue to the existence of a submit file ; (some versions of ZRDOS -- including 1.7 -- ; do not return the correct value, in which ; case 'no' should be used here). The speed ; advantage to using 'yes' is probably not ; great. sprmpt equ ']' ; CPR prompt indicating submit command subtyp macro ; The file type for the '$$$' file used by the db 'SUB' ; submit processor (this will very rarely be endm ; changed) ; WARNING -- the following equate should not be changed from 'A' unless you ; know what you are doing! subdrv equ 'A' ; Drive to use for submit file (normally this ; will be 'A', but in special cases, such as ; when there is a RAM disk, you might want to ; specify another drive) ;----------------------------------------------------------------------------- ; PATH options -- ZCPR searches for user programs along a path of directories ; specified in the path buffer. Because of the efficiency it adds, the ; minpath (minimum path) is not an option in ZCPR33 but is always in effect. ; This minimum path eliminates duplicate references that can arise in several ; ways and otherwise cause a useless search of a directory a second or third ; time. drvprefix equ yes ; If enabled, an explicit DU: or DIR: prefix on ; a command verb will be recognized and made ; the first element of the command search path. scancur equ no ; If enabled, the currently logged directory ; will always be added to the beginning of the ; symbolic path (we advise disabling this ; option -- you can always include '$$' in the ; path, but then you can omit it when you wish ; and you can control its position in the path, ; searching your main directories first). See ; the Z33 User Guide for special precautions ; required when SCANCUR is off. ; In order to save space in the CPR for valuable code, the minpath can be ; built in a memory buffer external to the CPR. If your symbolic path has ; no more than 10 elements, the minpath will automatically be built at the ; bottom of the external stack. Otherwise, if you want an external minpath, ; you must set the EXTMPATH symbol to yes and supply the address of the memory ; to use. The memory requirement is twice the length of the symbolic path ; (see Z3BASE.LIB or run SHOW to get this value) plus 2 if SCANCUR is enabled ; plus 2 if DRVPREFIX is enabled, plus 1 for the ending null. extmpath equ no ; If yes, the minpath will be built in a buffer ; external to the command processor at an ; address supplied in the next definition. extmpathadr equ 0 ; If EXPMPATH is enabled, provide the address ; of the external buffer here. ; Do not change the following code if [ expaths le 10 ] extmpath defl yes ; Automatic placement of minpath extmpathadr defl extstk ; ..at bottom of external stack endif ;----------------------------------------------------------------------------- ; Control over the acceptance and display of drive/user and named directory ; forms. With the options provided in ZCPR33 it is quite easy to provide a ; fully secure system with the DU form enabled. The DU form is often the only ; one recognized by non-ZCPR programs and is often more convenient and natural ; to use. We, therefore, recommend that both DU and DIR forms be allowed and ; displayed. Processing of DIR forms will not be carried out, obviously, if ; the named directory register (NDR) is not implemented in the system. accptdu equ yes ; Accept DU: form in command lines accptdir equ yes ; Accept DIR: form in command lines dufirst equ no ; If enabled, the DU form will be checked ; before the DIR form. incldu equ yes ; Include DU in prompt incldir equ yes ; Include DIR in prompt ; Do not change the following incldir defl incldir and [z3ndir ne 0] accptdir defl accptdir and [z3ndir ne 0] ;----------------------------------------------------------------------------- ; Security matters pwcheck equ yes ; If enabled, passwords on named directories ; will be checked for DIR forms in the command ; verb and the first two command-line tokens. ; If disabled, passwords will not be checked ; even if a directory has a password defined. pwnoecho equ yes ; If yes, the BIOS conout routine will be ; disabled during password input so that the ; password will not be echoed to the screen. ; This does involves poking in the BIOS and ; could in rare instances cause problems. wdu equ no ; If enabled, the DU: and DIR: forms will not ; be allowed for changing the logged directory ; unless the wheel byte is set. wpass equ yes ; If enabled, password checking of named ; directories is bypassed when the wheel byte ; is set. wprefix equ no ; If set, this option will effectively turn ; off DRVPREFIX when the wheel byte is off. ; Explicit drive prefixes will then be allowed ; only when the wheel byte is set. Otherwise ; they will be ignored except that ECPs will ; not be invoked if a prefix was present. ; Do not change the next lines pwcheck defl pwcheck and [ z3ndir ne 0 ] pwnoecho defl pwnoecho and pwcheck ;----------------------------------------------------------------------------- ; Advanced command processing options highuser equ no ; If yes, the command processor will log into ; user numbers higher than 15 (up to 31). ; WARNING: BECAUSE CP/M USES A SINGLE BYTE AT ; ADDRESS 0004H TO KEEP BOTH DRIVE AND USER, ; PROGRAMS THAT USE THAT BYTE TO DETERMINE ; THE DEFAULT DU MAY NOT RUN PROPERLY WHEN ONE ; IS LOGGED INTO A USER NUMBER ABOVE 15. skippath equ yes ; If yes, command verbs with an explicit DU: or ; DIR: prefix will not use the search path; if ; the command is not found in the specified ; directory, the error handler will be invoked ; immediately (no path and no ECP). fastecp equ yes ; If yes, command verbs with leading spaces will ; be executed directly by the ECP (saves the ; time of searching the path for a COM file ; when one knows the command is for the ECP). altspace equ yes ; If yes, the alternate character, ECPCHAR, can ; also be used to invoke ECP processing ; immediately (FASTECP must be enabled). altonly equ no ; If ALTSPACE is on, then if ALTONLY is also ; on, the alternate character the only one that ; will invoke fast ECP processing (spaces will ; not). ecpchar equ '/' ; Alternate (or required) character for fast ECP ; invocation. altcolon equ yes ; If enabled, an alternate character (period ; recommended) can be used in place of a colon ; to make the CPR skip resident commands and ; add the current directory to the search path. altchar equ '.' ; Character that serves as an alias for leading ; colon if it is the first non-blank character ; in the command. badduecp equ yes ; If yes, pass commands that try to log into a ; bad directory to the ECP for processing; if ; set to NO, invoke the error handler ; immediately under these circumstances. ; WARNING -- do not change the following equate from 'no' unless you ; know what you are doing! shellif equ no ; If yes, flow control processing can take ; place in shell aliases (complex command ; sequences being used as a shell). The ; penalty is that each time the shell runs, ; the entire flow control system is ; reinitialized. Flow control information ; will not persist across shell invocations. ; If SHELLIF is off, flow commands in shell ; aliases will not be recognized as FCP ; commands (they will be flushed) and, ; therefore, should not be used. ; Do not change the following skippath defl skippath and drvprefix ;----------------------------------------------------------------------------- ; Extended command processing ; The extended command processor comes into effect when a way to process a ; command verb has still not been found after the entire search path for a ; COM file has been exhausted. The entire user command is taken as the ; command tail on the extended command processor. In ZCPR30 one could either ; have extended command processing OR error handling. In ZCPR33 one can, and ; should, have both. rootonly equ yes ; If yes, the command processor looks for the ; ECP only in the directory specified as the ; last one in the path instead of scanning the ; entire path for the ECP. ; The following macro defines the name of the ECP. Rename your favorite ; ECP (ours is ARUNZ) to CMDRUN.COM or whatever name you put in below. ecpname macro db 0 ; Drive (do not change this from 0) db 'CMDRUN ' ; Name of ECP program (exactly 8 characters) ; '--------' ; (Eight-character space marker) endm ;----------------------------------------------------------------------------- ; Miscellaneous equates cmdsep equ ';' ; Separator between multiple commands ; The following two equates are used only if the equates to get this ; information from the environment descriptor are not enabled. maxusr equ 31 ; Maximum user number accessible maxdisk equ 4 ; Maximum number of disks accessible supres equ false ; Supresses user number in prompt for user 0 cprmpt equ '>' ; CPR prompt indicating user command numbase equ 'H' ; Character used to designate a hexadecimal ; number in the SAVE command curind equ '$' ; Symbol in symbolic path for current disk ; or user comment equ ';' ; Lines beginning with this character are ; treated as comments ; Definition equates wheel defl wera or wren or wlt or wgo or wsave or wget or wjump or wdir path equ expath ; Definition from Z3BASE.LIB ; End of Z33HDR.LIB  '--------' ; (Eight-character space marker) endm ;----------------------------------------------------------------------------- ; Miscellaneous equates cmdsep equ ';' ; Separator between multiple commands ; The following two equates are used only if the equates to get this ; information from the environment descriptor are not enabled. maxusr equ 31 ; Maximum ; Z33HDR.LIB --- Condensed Form ; This configuration is for a secure system with SUBMIT facilities enabled ; (hence few resident commands). Almost all advanced processing options are ; enabled. ; Basic definitions no equ 0 yes equ not no off equ no on equ yes rel equ no ;-------------------- diron equ no eraon equ no geton equ yes goon equ yes jumpon equ yes lton equ no noteon equ yes renon equ no saveon equ no ;-------------------- wdir equ no wera equ yes wget equ yes wgo equ yes wjump equ yes wren equ yes wsave equ yes wlt equ yes ;-------------------- cmdsize equ 4 ctable macro command DIR, diron, wdir, dir command ERA, eraon, wera, era command GET, geton, wget, get command GO, goon, wgo, go command JUMP, jumpon, wjump, jump command LIST, lton, wlt, list command NOTE, noteon, false, note command REN, renon, wren, ren command SAVE, saveon, wsave, save command TYPE, lton, wlt, type endm ;-------------------- ; DIR command options wide equ yes fence equ '|' allchar equ 'A' syschar equ 'S' slashfl equ yes whldir equ yes whldir defl whldir and diron ; Do not change ;-------------------- ; ERA command options eraok equ on inspfl equ on inspch equ ' ' ;-------------------- ; GET command options fullget equ yes ;-------------------- ; SAVE command options sectch equ ' ' bellfl equ yes ;-------------------- ; TYPE command options pagefl equ yes pagech equ 'P' ;-------------------- ; Environment access duenv equ yes aduenv equ yes inclenv equ no fcpenv equ yes rcpenv equ yes ndrenv equ yes ;-------------------- ; Transient programs comtyp macro db 'COM' endm attchk equ no comatt equ 0 ;-------------------- ; SUBMIT facility subon equ yes subnoise equ 0 ; 0 (off), 1 (quiet flag), 2 (on) subclue equ no sprmpt equ ']' subtyp macro db 'SUB' endm subdrv equ 'A' ; WARNING: risky if changed from A ;--------------------  ; Path options drvprefix equ yes scancur equ no extmpath equ no extmpathadr equ 0 ; Needed only if elements in path > 10 if [ expaths le 10 ] extmpath defl yes extmpathadr defl extstk endif ;-------------------- ; Directory reference forms accptdu equ yes accptdir equ yes dufirst equ no incldu equ yes incldir equ yes incldir defl incldir and [z3ndir ne 0] ; Do not change accptdir defl accptdir and [z3ndir ne 0] ; Do not change ;-------------------- ; Security matters pwcheck equ yes pwnoecho equ yes wdu equ no wpass equ yes wprefix equ no pwcheck defl pwcheck and [ z3ndir ne 0 ] ; Do not change pwnoecho defl pwnoecho and pwcheck ; Do not change ;-------------------- ; Advanced command processing options highuser equ no skippath equ yes fastecp equ yes altspace equ yes altonly equ no ecpchar equ '/' altcolon equ yes altchar equ '.' badduecp equ yes shellif equ no skippath defl skippath and drvprefix ; Do not change ;-------------------- ; Extended command processing rootonly equ yes ecpname macro db 0 ; Must be 0 db 'CMDRUN ' endm ;-------------------- ; Miscellaneous cmdsep equ ';' maxusr equ 31 maxdisk equ 4 supres equ false cprmpt equ '>' numbase equ 'H' curind equ '$' comment equ ';' ; Do not change wheel defl wera or wren or wlt or wgo or wsave or wget or wjump or wdir path equ expath ; End of Z33HDR.LIB ity matters pwcheck equ yes pwnoecho equ yes wdu equ no wpass equ yes wprefix equ no pwcheck defl pwcheck and [ z3ndir ne 0 ] ; Do not change pwnoecho defl pwnoecho and pwcheck ; Do not change ;-------------------- ; Advanced command processing options highuser equ no skippath equ yes fastecp equ yes altspace equ yes altonly equ no ecpchar equ '/' altcolon equ yes altchar equ '.' badduecp equ yes shellif equ no skippath defl skippath and drvprefix ; Do not change   ; Z33HDR.LIB --- Condensed Form ; This configuration is for a secure system without the SUBMIT facility. ; Basic definitions no equ 0 yes equ not no off equ no on equ yes rel equ no ;-------------------- diron equ no eraon equ no geton equ yes goon equ yes jumpon equ yes lton equ no noteon equ yes renon equ yes saveon equ no ;-------------------- wdir equ no wera equ yes wget equ yes wgo equ yes wjump equ yes wren equ yes wsave equ yes wlt equ yes ;-------------------- cmdsize equ 4 ctable macro command DIR, diron, wdir, dir command ERA, eraon, wera, era command GET, geton, wget, get command GO, goon, wgo, go command JUMP, jumpon, wjump, jump command LIST, lton, wlt, list command NOTE, noteon, false, note command REN, renon, wren, ren command SAVE, saveon, wsave, save command TYPE, lton, wlt, type endm ;-------------------- ; DIR command options wide equ yes fence equ '|' allchar equ 'A' syschar equ 'S' slashfl equ yes whldir equ yes whldir defl whldir and diron ; Do not change ;-------------------- ; ERA command options eraok equ on inspfl equ on inspch equ ' ' ;-------------------- ; GET command options fullget equ yes ;-------------------- ; SAVE command options sectch equ ' ' bellfl equ yes ;-------------------- ; TYPE command options pagefl equ yes pagech equ 'P' ;-------------------- ; Environment access duenv equ yes aduenv equ yes inclenv equ no fcpenv equ yes rcpenv equ yes ndrenv equ yes ;-------------------- ; Transient programs comtyp macro db 'COM' endm attchk equ no comatt equ 0 ;-------------------- ; SUBMIT facility subon equ no subnoise equ 0 ; 0 (off), 1 (quiet flag), 2 (on) subclue equ no sprmpt equ ']' subtyp macro db 'SUB' endm subdrv equ 'A' ; WARNING: risky if changed from A ;-------------------- ; Path options drvprefix equ yes scancur equ no extmpath equ no extmpathadr equ 0 ; Needed only if elements in path > 10 if [ expaths le 10 ] extmpath defl yes extmpathadr defl extstk endif ;-------------------- ; Directory reference forms accptdu equ yes accptdir equ yes dufirst equ no incldu equ yes incldir equ yes incldir defl incldir and [z3ndir ne 0] ; Do not change accptdir defl accptdir and [z3ndir ne 0] ; Do not change ;-------------------- ; Security matters pwcheck equ yes pwnoecho equ yes wdu equ no wpass equ yes wprefix equ no pwcheck defl pwcheck and [ z3ndir ne 0 ] ; Do not change pwnoecho defl pwnoecho and pwcheck ; Do not change ;-------------------- ; Advanced command processing options highuser equ no skippath equ yes fastecp equ yes altspace equ yes altonly equ no ecpchar equ '/' altcolon equ yes altchar equ '.' badduecp equ yes shellif equ no skippath defl skippath and drvprefix ; Do not change ;-------------------- ; Extended command processing rootonly equ yes ecpname macro  db 0 ; Must be 0 db 'CMDRUN ' endm ;-------------------- ; Miscellaneous cmdsep equ ';' maxusr equ 31 maxdisk equ 4 supres equ false cprmpt equ '>' numbase equ 'H' curind equ '$' comment equ ';' ; Do not change wheel defl wera or wren or wlt or wgo or wsave or wget or wjump or wdir path equ expath ; End of Z33HDR.LIB  ;-------------------- ; Security matters pwcheck equ yes pwnoecho equ yes wdu equ no wpass equ yes wprefix equ no pwcheck defl pwcheck and [ z3ndir ne 0 ] ; Do not change pwnoecho defl pwnoecho and pwcheck ; Do not change ;-------------------- ; Advanced command processing options highuser equ no skippath equ yes fastecp equ yes altspace equ yes altonly equ no ecpchar equ '/' altcolon equ yes altchar equ '.' badduecp equ yes shellif equ no skippath defl skippath and drvprefix ; Do not change ;-------------------- ; Extended command processing rootonly equ yes ecpname macro  ; Z33HDR.LIB --- Condensed Form ; This configuration is for an open system with SUBMIT facilities enabled ; (hence fewer resident commands). Almost all advanced processing options are ; enabled, but no security features are included. ; Basic definitions no equ 0 yes equ not no off equ no on equ yes rel equ no ;-------------------- diron equ no eraon equ no geton equ yes goon equ yes jumpon equ yes lton equ no noteon equ yes renon equ yes saveon equ no ;-------------------- wdir equ no wera equ no wget equ no wgo equ no wjump equ no wren equ no wsave equ no wlt equ no ;-------------------- cmdsize equ 4 ctable macro command DIR, diron, wdir, dir command ERA, eraon, wera, era command GET, geton, wget, get command GO, goon, wgo, go command JUMP, jumpon, wjump, jump command LIST, lton, wlt, list command NOTE, noteon, false, note command REN, renon, wren, ren command SAVE, saveon, wsave, save command TYPE, lton, wlt, type endm   ;-------------------- ; DIR command options wide equ yes fence equ '|' allchar equ 'A' syschar equ 'S' slashfl equ yes whldir equ yes whldir defl whldir and diron ; Do not change ;-------------------- ; ERA command options eraok equ on inspfl equ on inspch equ ' ' ;-------------------- ; GET command options fullget equ yes ;-------------------- ; SAVE command options sectch equ ' ' bellfl equ yes ;-------------------- ; TYPE command options pagefl equ yes pagech equ 'P' ;-------------------- ; Environment access duenv equ no aduenv equ no inclenv equ no fcpenv equ yes rcpenv equ yes ndrenv equ yes ;-------------------- ; Transient programs comtyp macro db 'COM' endm attchk equ no comatt equ 0 ;-------------------- ; SUBMIT facility subon equ yes subnoise equ 0 ; 0 (off), 1 (quiet flag), 2 (on) subclue equ no sprmpt equ ']' subtyp macro db 'SUB' endm subdrv equ 'A' ; WARNING: risky if changed from A ;-------------------- ; Path options drvprefix equ yes scancur equ no extmpath equ no extmpathadr equ 0 ; Needed only if elements in path > 10 if [ expaths le 10 ] extmpath defl yes extmpathadr defl extstk endif ;-------------------- ; Directory reference forms accptdu equ yes accptdir equ yes dufirst equ no incldu equ yes incldir equ yes incldir defl incldir and [z3ndir ne 0] ; Do not change accptdir defl accptdir and [z3ndir ne 0] ; Do not change ;-------------------- ; Security matters pwcheck equ no pwnoecho equ no wdu equ no wpass equ no wprefix equ no pwcheck defl pwcheck and [ z3ndir ne 0 ] ; Do not change pwnoecho defl pwnoecho and pwcheck ; Do not change ;-------------------- ; Advanced command processing options highuser equ no skippath equ yes fastecp equ yes altspace equ yes altonly equ no ecpchar equ '/' altcolon equ yes altchar equ '.' badduecp equ yes shellif equ no skippath defl skippath and drvprefix ; Do not change ;-------------------- ; Extended command processing rootonly equ yes ecpname macro db 0 ; Must be 0 db 'CMDRUN ' endm ;-------------------- ; Miscellaneous cmdsep equ ';' maxusr equ 31 maxdisk equ 4 supres equ false cprmpt equ '>' numbase equ 'H' curind equ '$' comment equ ';' ; Do not change wheel defl wera or wren or wlt or wgo or wsave or wget or wjump or wdir path equ expath ; End of Z33HDR.LIB ;-------------------- ; Security matters pwcheck equ no pwnoecho equ no wdu equ no wpass equ no wprefix equ no pwcheck defl pwcheck and [ z3ndir ne 0 ] ; Do not change pwnoecho defl pwnoecho and pwcheck ; Do not change ;-------------------- ; Advanced command processing options highuser equ no skippath equ yes fastecp equ yes altspace equ yes altonly equ no ecpchar equ '/' altcolon equ yes altchar equ '.' badduecp equ yes shellif equ no skippath defl skippath and d ; Z33HDR.LIB --- Condensed Form ; This configuration is for an open system without SUBMIT facilities enabled. ; Almost all advanced processing options are enabled, but no security features ; are included. ; Basic definitions no equ 0 yes equ not no off equ no on equ yes rel equ no ;-------------------- diron equ no eraon equ no geton equ yes goon equ yes jumpon equ yes lton equ no noteon equ yes renon equ yes saveon equ yes ;-------------------- wdir equ no wera equ no wget equ no wgo equ no wjump equ no wren equ no wsave equ no wlt equ no ;-------------------- cmdsize equ 4 ctable macro command DIR, diron, wdir, dir command ERA, eraon, wera, era command GET, geton, wget, get command GO, goon, wgo, go command JUMP, jumpon, wjump, jump command LIST, lton, wlt, list command NOTE, noteon, false, note command REN, renon, wren, ren command SAVE, saveon, wsave, save command TYPE, lton, wlt, type endm ;-------------------- ; DIR command options wide equ yes fence equ '|' allchar equ 'A' syschar equ 'S' slashfl equ yes whldir equ yes whldir defl whldir and diron ; Do not change ;-------------------- ; ERA command options eraok equ on inspfl equ on inspch equ ' ' ;-------------------- ; GET command options fullget equ yes ;-------------------- ; SAVE command options sectch equ ' ' bellfl equ yes ;-------------------- ; TYPE command options pagefl equ yes pagech equ 'P' ;-------------------- ; Environment access duenv equ no aduenv equ no inclenv equ no fcpenv equ yes rcpenv equ yes ndrenv equ yes ;-------------------- ; Transient programs comtyp macro db 'COM' endm attchk equ no comatt equ 0 ;-------------------- ; SUBMIT facility subon equ no subnoise equ 0 ; 0 (off), 1 (quiet flag), 2 (on) subclue equ no sprmpt equ ']' subtyp macro db 'SUB' endm subdrv equ 'A' ; WARNING: risky if changed from A ;--------------------  ; Path options drvprefix equ yes scancur equ no extmpath equ no extmpathadr equ 0 ; Needed only if elements in path > 10 if [ expaths le 10 ] extmpath defl yes extmpathadr defl extstk endif ;-------------------- ; Directory reference forms accptdu equ yes accptdir equ yes dufirst equ no incldu equ yes incldir equ yes incldir defl incldir and [z3ndir ne 0] ; Do not change accptdir defl accptdir and [z3ndir ne 0] ; Do not change ;-------------------- ; Security matters pwcheck equ no pwnoecho equ no wdu equ no wpass equ no wprefix equ no pwcheck defl pwcheck and [ z3ndir ne 0 ] ; Do not change pwnoecho defl pwnoecho and pwcheck ; Do not change ;-------------------- ; Advanced command processing options highuser equ no skippath equ yes fastecp equ yes altspace equ yes altonly equ no ecpchar equ '/' altcolon equ yes altchar equ '.' badduecp equ yes shellif equ no skippath defl skippath and drvprefix ; Do not change ;-------------------- ; Extended command processing rootonly equ yes ecpname macro db 0 ; Must be 0 db 'CMDRUN ' endm ;-------------------- ; Miscellaneous cmdsep equ ';' maxusr equ 31 maxdisk equ 4 supres equ false cprmpt equ '>' numbase equ 'H' curind equ '$' comment equ ';' ; Do not change wheel defl wera or wren or wlt or wgo or wsave or wget or wjump or wdir path equ expath ; End of Z33HDR.LIB urity matters pwcheck equ no pwnoecho equ no wdu equ no wpass equ no wprefix equ no pwcheck defl pwcheck and [ z3ndir ne 0 ] ; Do not change pwnoecho defl pwnoecho and pwcheck ; Do not change ;-------------------- ; Advanced command processing options highuser equ no skippath equ yes fastecp equ yes altspace equ yes altonly equ no ecpchar equ '/' altcolon equ yes altchar equ '.' badduecp equ yes shellif equ no skippath defl skippath and drvprefix ; Do not change ; ; Z33HDR.LIB --- Condensed Form ; This configuration is for an open system with SUBMIT facilities enabled ; but no named directory support. ; Basic definitions no equ 0 yes equ not no off equ no on equ yes rel equ no ;-------------------- diron equ no eraon equ no geton equ yes goon equ yes jumpon equ yes lton equ no noteon equ no renon equ yes saveon equ yes ;-------------------- wdir equ no wera equ no wget equ no wgo equ no wjump equ no wren equ no wsave equ no wlt equ no ;-------------------- cmdsize equ 4 ctable macro command DIR, diron, wdir, dir command ERA, eraon, wera, era command GET, geton, wget, get command GO, goon, wgo, go command JUMP, jumpon, wjump, jump command LIST, lton, wlt, list command NOTE, noteon, false, note command REN, renon, wren, ren command SAVE, saveon, wsave, save command TYPE, lton, wlt, type endm ;-------------------- ; DIR command options wide equ yes fence equ '|' allchar equ 'A' syschar equ 'S' slashfl equ yes whldir equ yes whldir defl whldir and diron ; Do not change ;-------------------- ; ERA command options eraok equ on inspfl equ on inspch equ ' ' ;-------------------- ; GET command options fullget equ yes ;-------------------- ; SAVE command options sectch equ ' ' bellfl equ yes ;-------------------- ; TYPE command options pagefl equ yes pagech equ 'P' ;-------------------- ; Environment access duenv equ no aduenv equ no inclenv equ no fcpenv equ yes rcpenv equ yes ndrenv equ yes ;-------------------- ; Transient programs comtyp macro db 'COM' endm attchk equ no comatt equ 0 ;-------------------- ; SUBMIT facility subon equ yes subnoise equ 0 ; 0 (off), 1 (quiet flag), 2 (on) subclue equ no sprmpt equ ']' subtyp macro db 'SUB' endm subdrv equ 'A' ; WARNING: risky if changed from A ;-------------------- ; Path options drvprefix equ yes scancur equ no extmpath equ no extmpathadr equ 0 ; Needed only if elements in path > 10 if [ expaths le 10 ] extmpath defl yes extmpathadr defl extstk endif ;-------------------- ; Directory reference forms accptdu equ yes accptdir equ no dufirst equ no incldu equ yes incldir equ no incldir defl incldir and [z3ndir ne 0] ; Do not change accptdir defl accptdir and [z3ndir ne 0] ; Do not change ;-------------------- ; Security matters pwcheck equ no pwnoecho equ no wdu equ no wpass equ no wprefix equ no pwcheck defl pwcheck and [ z3ndir ne 0 ] ; Do not change pwnoecho defl pwnoecho and pwcheck ; Do not change ;-------------------- ; Advanced command processing options highuser equ no skippath equ yes fastecp equ yes altspace equ yes altonly equ no ecpchar equ '/' altcolon equ yes altchar equ '.' badduecp equ yes shellif equ no skippath defl skippath and drvprefix ; Do not change ;-------------------- ; Extended command processing rootonly eq u yes ecpname macro db 0 ; Must be 0 db 'CMDRUN ' endm ;-------------------- ; Miscellaneous cmdsep equ ';' maxusr equ 31 maxdisk equ 4 supres equ false cprmpt equ '>' numbase equ 'H' curind equ '$' comment equ ';' ; Do not change wheel defl wera or wren or wlt or wgo or wsave or wget or wjump or wdir path equ expath ; End of Z33HDR.LIB ndir ne 0] ; Do not change ;-------------------- ; Security matters pwcheck equ no pwnoecho equ no wdu equ no wpass equ no wprefix equ no pwcheck defl pwcheck and [ z3ndir ne 0 ] ; Do not change pwnoecho defl pwnoecho and pwcheck ; Do not change ;-------------------- ; Advanced command processing options highuser equ no skippath equ yes fastecp equ yes altspace equ yes altonly equ no ecpchar equ '/' altcolon equ yes altchar equ '.' badduecp equ yes shellif equ no skippath defl skippath and drvprefix ; Do not change ;-------------------- ; Extended command processing rootonly eq ; Z33MAC.LIB : Macros for use with ZCPR33 ; This code is copyright (C), 1987, by Jay P. Sage, all rights reserved. ; General purpose macros putreg macro push hl ; Save registers in order push de push bc endm getreg macro pop bc ; Restore registers in order pop de pop hl endm swap macro rrca ; Exchange nibbles rrca rrca rrca endm ;---------------------------------------- ; Macro for forming option bytes ; This macro generates a byte with bits corresponding to up to 8 option ; flags. The bits are filled in the order of the parameters and are right ; justified in the byte. optflag macro f1,f2,f3,f4,f5,f6,f7,f8 flag defl 0 ;; initial value irp temp, if not nul temp flag defl flag shl 1 if temp flag defl flag or 1 endif ;;temp endif ;;not nul temp endm ;; irp defb low flag endm ;; optflag ;---------------------------------------- ; Macro for directory scanning ; This macro resolves the command token for possible directory references. ; FORM1 and FORM2 can each be either "DU" or "DIR". FORM2 can also be null. ; The two forms are scanned for in the indicated order. ; This macro preserves the pointer to the FCB in DE and to the next ; character in the line in HL. On return, the FCB pointer has been restored, ; and the command string pointer is still on the stack. The routines DUSCAN ; and DIRSCAN are called as needed. resolve macro form1,form2 local resolved push hl ; Save pointer to command string push de ; Save pointer to FCB call form1&scan ; Scan for the first directory form if not nul form2 jr z,gotit ; Resolved successfully, so jump ahead pop de ; Restore pointers for use by second call pop hl push hl ; Save them again push de call form2&scan ; Scan for the second directory form endif ;not nul form2 gotit: pop de ; Restore pointer to FCB endm ;resolve ;----------------------------------------------------------------------------- ; Command table entry definition macro ; Macro to form an entry for one command in the table. The first parameter is ; the name to be used for the command (no quotes); the second parameter is the ; flag that indicates whether or not the command is to be enabled; the third ; parameter is the wheel control flag; and the last parameter is the jump ; address to the code that carries out the command. The command names are ; automatically padded out to the correct length (they will be truncated and ; an error message will result if a command name is too long). The characters ; in the command name are automatically converted to upper case. command macro cmdname,enableflag,wheelflag,address if enableflag ;; Generate command only if enabled whlmask defl wheelflag ;; Initialize variables count defl cmdsize ;; Initialize to size of each command name irpc char,cmdname ;; Repeat over letters in command name count defl count - 1 ;; Count down characters in name if [ count lt cmdsize ] ;; If character is lower case, convert to upper case if [ '&char' ge 'a' ] and [ '&char' le 'z' ] if whlmask defb [ '&char' and 5fh ] + 80h else ;;not whlmask defb [ '&char' and 5fh ] endif ;;whlmask else ;;not lower case if whlmask defb '&char' + 80h ;; If controlled by wheel, set high bit else ;;not whlmask defb '&char' ;; If not restricted, leave high bit clear endif ;;whlmask endif ;;lower case endif ;;[ count lt cmdsize ] whlmask defl false ;; Turn off high-bit setting after first char endm ;irpc ;; Pad command name with blanks if [ count gt cmdsize ] ;; If we underflowed *** Command name "&cmdname" is too long / truncated *** else rept count defb ' ' endm endif ;[ count gt cmdsize ] dw address ;; Dispatch address for command endif ;enable endm ;command ; End Z33MAC.LIB  ; Z3BASE - Dynamic Configuration ; ; ZCPR33 is copyright 1987 by Echelon, Inc. All rights reserved. End-user ; distribution and duplication permitted for non-commercial purposes only. ; Any commercial use of ZCPR33, defined as any situation where the duplicator ; recieves revenue by duplicating or distributing ZCPR33 by itself or in ; conjunction with any hardware or software product, is expressly prohibited ; unless authorized in writing by Echelon. ; ; This is a special version of Z3BASE, inspired by Joe Wright's Z3BASE ; for Z-Com. All segment addresses are automatically derived when the ; CCP equate is set. The benefit of this is that reconfiguration of the ; system after initial installation is greatly eased. ; ; Although this version of Z3BASE is being distributed with ZCPR 3.3, any ; previous version of Z3BASE can be used to assemble the Z33 Command ; Processor. No new symbols are needed. So, if you have an existing ; Z3BASE, go ahead and use it. ; ; Instructions: ; ; The user should first design the ZCPR3 memory usage using the chart ; below. (Echelon recommends the chart be filled out, even though it is ; not read by the assembler, so that your system will be self-documenting.) ; Then set the CCP equate for the beginning address of ZCPR3. Next, examine ; and change the SEGn equates which follow in the file to ensure that the ; system segments and buffers are placed at the proper addresses. ; ; This file has been customized for use with AMPRO hard disk systems. The ; target configuration has support for hard disks up to 49 Meg, extended ; IOP support, and 28-entry NDR. ; ;**************************************************************** ;* * ;* Z3BASE.LIB -- Base Addresses for ZCPR 3.3/Z-System * ;* * ;* Segments: * ;* * ;* Segment Function * ;* ------- -------- * ;* ZRDOS Echelon Z80 Replacement Disk Operating * ;* System, Version 1.7 (Public ZRDOS Plus) * ;* CBIOSZ Ampro-compatible BIOS with additional * ;* ZCPR3 initialization routines * ;* ZCPR3 Echelon Z80 Command Processor * ;* Replacement, Version 3.3 (ZCPR3) * ;* *.ENV All Environment Descriptors * ;* *.FCP All Flow Command Packages * ;* *.NDR All Named Directory Definition Files * ;* *.RCP All Resident Command Packages * ;* *.IOP All Input/Output Packages * ;* * ;* * ;* Memory Map of System (for CCP EQU 0BC00H): * ;* * ;* Address Range Size Function * ;* ------------- ------- -------- * ;* 0 - FF 256 b Standard CP/M Buffers except * ;* 100 - C3FF ~49 K Transient Program Area * ;* BC00 - C3FF 2K ZCPR 3.3 Command Processor * ;* C400 - D1FF 3.5 K ZRDOS * ;* D200 - EAFF 6.25K Ampro BIOS w/hard disk buffers * ;* EB00 - F2FF 2 K Resident Command Package * ;* F300 - F8FF 1.5 K Input/Output Package * ;* F900 - FAFF .5 K Flow Command Package * ;* FB00 - FB7F 128 b ZCPR3 Shell Stack * ;* FB80 - FBCF 80 b ZCPR3 Message Buffers * ;* FBD0 - FBF3 36 b ZCPR3 External FCB * ;* FBF4 - FBFE 11 b ZCPR3 External Path * ;* FBFF 1 b Wheel Byte * ;* FC00 - FDFF .5 K Memory-Based Named Directory * ;* FE00 - FEFF 256 b Environment Descriptor * ;* Bytes 00H-7FH: Z3 Parameters * ;* Bytes 80H-FFH: Z3 TCAP * ;* FF00 - FFCF 208 B Multiple Command Line Buffer * ;* FD00 - FFFF 48 b ZCPR3 External Stack * ;**************************************************************** FALSE equ 0 TRUE equ NOT FALSE Z3REV EQU 33 ; ZCPR3 REV NUMBER MSIZE EQU 54 ; SIZE OF CPM SYSTEM BASE EQU 0 CCP EQU 0BC00H ; ZCPR3 COMMAND PROCESSOR seg1 equ CCP+2F00h ; 11.75k from CCP to here (adding 2k ZCPR, ; 3.5k DOS, and 6.25k BIOS). ; ; RCP definition. Set RCPS to 0 to eliminate RCP ; RCPS EQU 16 ; 16 128-byte Blocks (2K bytes) IF RCPS NE 0 RCP EQU seg1 ; RESIDENT COMMAND PACKAGE ELSE RCP EQU 0 ENDIF seg2 equ seg1+[rcps*128] ; ; IOP definition. Set IOPS to 0 to eliminate IOP ; IOPS EQU 12 ; 12 128-byte Blocks (1.5K bytes) IF IOPS NE 0 IOP EQU seg2 ; REDIRECTABLE I/O PACKAGE ELSE IOP EQU 0 ENDIF seg3 equ seg2+[iops*128] ; ; FCP definition. Set FCPS to 0 to eliminate FCP ; FCPS EQU 4 ; 4 128-byte Blocks (0.5K bytes) IF FCPS NE 0 fcp equ seg3 ELSE fcp equ 0 ENDIF seg4 equ seg3+[fcps*128] ; ; Shell Stack definition. Set SHSTKS to 0 to eliminate Shell Stack ; SHSTKS EQU 4 ; NUMBER OF SHSIZE-BYTE SHELL STACK ENTRIES SHSIZE EQU 32 ; SIZE OF A SHELL STACK ENTRY ; (STACK SIZE = SHSTKS * SHSIZE) IF SHSTKS NE 0 SHSTK EQU seg4 ELSE SHSTK EQU 0 ENDIF seg5 equ seg4+[shstks*shsize] ; ; The ZCPR3 Message Buffers are mandatory for ZCPR 3.3. ; Z3MSG EQU seg5 ; ZCPR3 MESSAGE BUFFER seg6 equ seg5+80 ; ; The ZCPR3 External FCB is mandatory for ZCPR 3.3. ; EXTFCB EQU seg6 ; ZCPR3 EXTERNAL FCB seg7 equ seg6+36 ; ; The Path is mandatory for ZCPR 3.3. No more than 5 path elements can be ; used with this Z3BASE.LIB file. ; EXPATH EQU seg7 ; EXTERNAL PATH EXPATHS EQU 5 ; 5 2-byte Path Elements ; (PATH SIZE = EXPATHS*2 + 1) seg8 equ seg7+[expaths*2]+1 ; ; The ZCPR3 Wheel Byte is mandatory for ZCPR 3.3. ; Z3WHL EQU seg8 ; WHEEL BYTE ADDRESS seg9 equ seg8+1 ; ; ZCPR3 Named Directory Buffer definition. Set Z3NDIRS to 0 to eliminate ; the named directory buffer. If Z3NDIRS is changed, also change the seg10 ; equate below. ; Z3NDIRS EQU 28 ; 28 18-byte Named Directory Elements permitted ; (NDIR SIZE = Z3NDIRS*18 + 1 for trailing 0) IF Z3NDIRS NE 0 Z3NDIR EQU seg9 ; ZCPR3 NAMED DIRECTORY AREA ELSE Z3NDIR EQU 0 ENDIF seg10 equ seg9+512 ; add 512 for 28-entry NDR ; add 256 for 14-entry NDR ("standard") ; add 0 if Z3NDIRS is set to 0 ; ; The ZCPR3 External Environment Descriptor is mandatory for ZCPR 3.3. ; Echelon recommends you work this out so that your ENV begins at address ; FE00h, but this is only a recommendation and not mandatory. ; Z3ENV EQU seg10 ; ENVIRONMENT DESCRIPTORS Z3ENVS EQU 2 ; SIZE OF ENVIRONMENT DESCRIPTOR IN 128-BYTE BLOCKS seg11 equ seg10+[z3envs*128] ; ; The ZCPR3 External Command Line Buffer is mandatory for ZCPR 3.3. ; Z3CL EQU seg11 ; ZCPR3 COMMAND LINE BUFFER Z3CLS EQU 208 ; SIZE OF COMMAND LINE BUFFER seg12 equ seg11+z3cls ; ; The ZCPR3 External Stack is mandatory for ZCPR 3.3. ; EXTSTK EQU seg12 ; ZCPR3 EXTERNAL STACK ; end of Z3BASE.LIB  1 for trailing 0) IF Z3NDIRS NE 0 Z3NDIR EQU seg9 ; ZCPR3 NAMED DIRECTORY AREA ELSE Z3NDIR EQU 0 ENDIF seg10 equ seg9+512 ; add 512 for 28-entry NDR ; add 256 for 14-entry NDR ("standard") ; add 0 if Z3NDIRS is set to 0 ; ; The ZCPR3 External Environment Descriptor is mandatory for ZCPR 3.3. ; Echelon recommends you work this out so that your ENV begins at address ; FE00h, but this is only a recommendation and not mandatory. ; Z3ENV EQU seg10 ; ENVIRONMENT DESCRIPTORS Z3vzZCPR33.Z80c  !"#$%&'()*+,-./0123456789:;<=>?@ABCoDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abWo\=T.R۫oٓʷ}}S7DžR Ϟ>xI!o˫ׯ#귍_{m dFŚ MJm€R$=R5I}d8[t̔ѭX>jzW0:H֔xfvYHws$؎o˫ׯ7@ e€3{Dϳco *#E(̄uy*:f ) dY:7[|;]^~uϑJUxjͫT ќS|pJ>&WϔnfS78go) {FŚ] #s{\-ڨX8QWWZ_ {ݤ#~7ٛ-֙a,3e_)TaO#6gحxÙPV09e_Ӭ HS8Ron %XmmTJ(ޭЭ™=cR=*r#E . i mioj7[3XFg`8QlodؕM ՚H?f2]*,7Rd-] #ڨX VB]ep4wy[k687u?akŕu9wF<+l'W|j^<Oa?^_B )>0R"_#n/[|\0R}J!O1 #a*nOj p#d:RBa;. dH]39o˫ׯ &\s+2eǓF8.E:nK|q껯S"%## f[iTJa څ`;:9ind@wL&S7tb yRvvz׻osd8\H >Xi ֞{@dd3ty;f aqw~dG3s$ѕb ]n2G,dD&a;ӌj7[pH58@կ3SƤ.X7>.R8Fo ^^J aF4w$,.n-j _għ`:R 5nO6GootOVd6[RS%D2+^*Qޤ0;of|%G&o6p&cqfˍ4,;"e.)#ӑ2SX7vfLjBKUx?f쭉R8%3}Ӳ[zfP`1 ,;p$ݧ03 Q$d:RBxk>Ygw( ް혣7[p#4mX=vp#tQSW\mvY0nآZj *ex%c%QRd)޸R4JaZי)auWDֹ=w_=ހ m XR [2J :2;@P7F6.>"#ʰ[uyi[rdf|j p2i!ðNW_ck)bu n3aON7842hj _g n5r ժRee*anśqC'dzdTpogf nDmDB#;-dћJ5I)F RdxeA={7W ^^H543hH)e8UJ٧0@ݻ:{sRq쭉O; `@3掄Ȥ0pzFvfpoLg{p\DUrL-Έ&,{T 5&τcGRXl19%p#T  ,V)LV. fS푔2̼9"+:oLP6S7ųELNa-wF*erLRn-K!!nK) y<_%wR) - o/q/+<->0R}J!'m)>AdǴb]+s$}Peʠc)  N s sd{·V0GglA՚ R-޿Ǔ?x-2uo(|{.dqU_.Ү5Y\-~ׯ[]k ) 3ps njMY{kM-snWSL!gvzqP[xS˜ 7X+xVxS˜٦0 I+5`-m@wLj\mȮmPnKXI7) W@՚ #S'2S!T,dohg2I+.C#*7[2n- ~j /72FJXX)grV7ѭЈ =7·o]>Av)@dE{]A? "wLj\ALӛHLⶰM2p_V[|严@dEHUb|<eQ)Y ڋJ^T{q[X?Q>QnKXIS ^V2"ڋ* ܚWk2Lj ڋJ^T{q[X?u-2i.BvY(P ڋJ^T{q[X?82p{ǤDv,rhDVq30aI;Xš5Rm%S/B-p @?nD)컌C#*Ca8LJ*d) ]HM!g|x>~z~uo˫xt]۫'RP$[ e<7p#iY>R}Ja0Dq8 pw?/po!xS )0]UԽ쭉) ůrUd_cqUmDo˫ׯSH!gsdxR uKaR~/-vЏYPЏY\KЏYrK!޿ N"#RSHZB?fY]_l2p'.XebLaνЏYV闇j25J o׵3xb)F./l2l*{kP]) údU,kGn.7XIS^B?f^_.2d4x>oν1" VoЏYj~y@Mޜ@ձ&Rx.Uj3RvzsnRuFXif PnKXI"zq"6{9ƙ7T:RљJj͙\H#Ja- s$E)=RdoFl~-HjuUT [3=]TGdbXF6ɨX)ڜRs3Û7[T ̖.湶 _n'~B TK 8}!v6ߣeq&c3?ρtja,c%ՙ)o K9uo2/(RoE,eBco `, ~v{g{'\~N!f^~2ey!] XFJ)Ȼt7QeyYIagPgB TЏY?K_2M?_n K9uo2DwOJ!dz>"ce3dTV;8%>B Tyr}.E,ϿgG^j5Rx.4S!T,docvL142S!T,do;)|D1exI-SepJ`Ѧ01&ƍ WnT[ ]P\1Z~+g9+۱eq&xCXISX^u-Qd#-7؎jř a{'M!޿ NvY5`-F5`-[ELXX Vǔ &L)0bu4a,ÚGWyѕ٭'W ހeq&cR[)FVS6֙JXExdck!tn-lIo-nOa@Jh(RH.U,tǽ)wWpBdWRH!gB?f;|_*`;}dWrV1P1 q3*xCp2#g)w5G,d8~̞ܿ&sMыۦdܿ&s{m2e^ GWfJaqwsT2GЏY_9=72/#)̔BY/B?fMwj2-ɾ:f W+ML%؎ǯOѭ.)Teܿ&s&rVJ Qtǰ(ys`U lC )0]>QnKXISHj/n+B?fĭU(fB/nk/"cK\dzä`:aD#||xYV[RKܿ^"',dDv0RxW3[~><ϸ3<WxOp8 )o>w1TD;dH{[-3͔XJS 2w2J )0p՟qÓ xNW_0Rxi.cy>m 2{LpJ}FJ;ܤ0ٙ4tOf ä.F^# 7F(jř o}&èvYXI#̔|&v7Ja R& 7FvY(|D/slw_{nvzdx) ,sa?BLFνn"dX7gS[ɰ} dl-؂!rVqHa  g41Ȱ1Yo8p#LvQlu쭉XgFsG)å0T#ռLVZAuzp&Ci*R7BqpR8Fo ̼;܀8=[3/+)l)aѳ0psɰH>573/+)|mF8]^Agw9KIaGBp#n6`#{}lvzdǤ8FoMLa]`eq&cR[)Fqnsq̵mRmv7q^ki՚Rxgs7[ڙ DŽj5{kvy7ºg) ܓ cq&LyFzPaM7Ja`R9uI1""\3pŻnk0)u?RHA໸kRL}W6)DJA2URɾp-֤=V n.ܞ.ᗩB{kpc'` #0M1Eq#7B'dz|p W809uIᦉ)b3]o ){8rٛ-*:0G;-7҃7Ja{HG2X=GTkynڜʤ8ax}uL1n?ͩL/+AڭL 8J;m] )|"SL+'W) [S)H թ6>T"0 [S)H թ6)de֔} *d W8&U&MA2URɾ.2 dqrRHA2U6̓ \L"2UL֤xS ) =& GE`BFo6.n qu{vb03X s FCf[lȤ00Yo2bGx/Oo0Yo2bv=w<]RH!Vg &CB O)0˗W) pt;x%)&/FF Ep#eq&='|M!'P8n-2{:W2\DC| H >a30ph6x}uLf^VR؎ڜʤހ\mvY;I#nR"lVO.-P8m)@.gSdX7 F6UTf ;39FL/q7) p#%3uτv XLF`o{ ڮw)B]2i R= |$Q8aB1B"2HaqU-ׯ??^>IA2UDnM`J!٧[|{?=xO}x۫Rx-@wL&SFLƤRV#*e4RL njř7ǘϞ"?#\|~װ gpuċ/P8QA&.NOSq K ~jM )0]-/^ճӧg/p3ٕRx|DJpTI!Rx.MA2(EZͨv6dQ.2j Rګ>MA2(EN*Rae%M! y&nMƷB 2-B wR) 9->Gn%'8|'#nS)}J!O?Ó?'x˫Rx|FX7 úda7BLƤRVw[2{p#RPȤXȨְGWfF##-V)Ep#Y 0Re] )I %K6]=+ĈY )|`,fSm&2pEdZo^ZcgڙdY2n-78]&n9!?7B[oRXL'7ѕ""[ oPnKXIwyoUoX=Rs$tn⸶ 8o JkKa`q{9)9 K!͑4dq*2ps$CV${&ųę,y1!?R RX)H6Ud 1\ =VWRxp \׵PLAɲ G[H 3/+i RƉ vd,H`diesSg^bؒQg:ް)H\$2p12 ptev-7թ#j!)IM+"ϵGWf-> [<ަ %d]Vo|rȾwR2RB)3YVJX=[Eۆ9JSW*:s3?ac09%xǯ)HrSg^oZSvL82S*FV$81GϟJ$2߶9,nSENvcꏄux8e88&dGJAJq"3=s RMB>uτճ$$"7u-Sg"DŽ9J,eDv;g2{$dQ7nLFtG7ZRHA@&.m#i ) b-vT >LFq^ϘVћ-|; nS-H .}!3xg2HNk7Ja S[2#[7BvFPsa3뛗}O6S ֔=`@wTg kDuFvYɘV*aqޤ0@uz;dř1 Z:3_j+|)) ՙ  n"1"9 J?fHi\YPHS7Lvf8fX] k]eps י3(E 0vD8] )G dG3<78&n L˗;|DkCv6Gg p#%TgRX .y dG³V_Vy670T[ 00Lh‘4zk"lǷǷ;I#n6pvbo X eΔ69X |DlVμK!8gtW}RHA+E2yq2pAOrVldqv obpJ)HuH$#i RCn"W} #HFNW_{#]g27Z&gMa㛯/%F0tǨvY(ݖbl1ZZ)›i C_AgcSq^ofw n|) y} nبDv,!u n90pP!TPDW!6*]=ۀp#F` oP8Sxm#".";)HMdWd"1"zY,7uɑrq2pENWQ8ыۦ Tq"v',=9ئ %=y3rq2y}uLvYɘ. ]Z,7wq^{q덓GlѭO_ߠMA@&.#Ϋ5)Hʦ.x#?J[o7[؎jř a{'MAJsǵpG7L 0tǨͩL V1)YnZ< |#3eq&xCE88]Z)4& \#a0)آeq&xC)HuE43]g27o yبM ngs$NA&;I+"_zzä`jř %ܴr-2pjTЭe!(P R'vYȰzqPaU&K J~)yGl-VWЭˍJAxˍ#m])v޶R}J!O}x'>{r.ޞn/.?|'WORHaI> ѭZl07[g@w>7[T,74BU0#9L.؃[p#.PzC9g2 ް7I tO8#"[(_>[Aƭs$*uѭV`R̖=@w njřȎ^>bR[)F;I#ɸ=]b \pJP8`oq-|DmT(0Эܞ.AVijܬnOX=Ù R3"87Eڤ0Pa>ՙI2؂T9 . q]diesSg^bY =n)#?ɘ#i RMkgs$4m)3Yz' GWfb\,L]F6G$$"_1GRxo_B)Ui"3Y [{Z()Yn܋^o \c>7ܖB Rw'|fRJ5 %=y3rq)|8֤ %]^zdɬwx3 *{kRɾˈjM )Hʦ.9^dz` njřȎ^7)H67\ |!CްG&ųD)M+"W*ϮTb(EiZd"1\ܞ.zNA*2pA*t g2H*Vz zqN*2"[3=]T &ߐUKbj j͙\HSH%?,qDvL(#g)HuH:a"Հ-2u7FJS͍Z.7 ^#62)l;FLNA96iEd I9uIJ1_;آɳ+P8Q! J͑ \.*,7]g27-RV=;" .C01OLYe|ǁ2=< d+eq&C7Rps{o`&Ϯ{Ja75jř)vfQv)Pݴ9prgW=eq&xC)H67\ |!FmN]eRd.ɚ#)-i"EuR妕zxSK - 1Ī8 "2xCYQsKNA^Mu:w807(NX]=K!$ \Qdzä` Cwڜʤ`ImSH%~B NW_cR{"5G2L%tr<+-wF rѓ-0) 6j5`nJRe{JCd+3?0}&èvYqw<?&5 9uIQJ) aRpkdU&pvY;I#dn.g2]2u 0q쏄ڜʤ7Q\2e4w$8Ff@#pœ%n"V*p a,[ eXx Aƭ&B.{E\kP8Q!8%3?MRJ(֞yE n€+Ljjs*[7BŚR.cE:a"SL+lMSJxd22Lu?*E: Wؚ?wq-y+"js*[E!٢bM 17xd\.62)n^^\ %Z7/@lµ9MAJiZd 1ȨͩL o`jř u*2pѽFFmN]eRg>?ڀEx"yb7.7Lm2^^ %M+כUdDT\%<7T[I%vOSɾp-֤B NW_#d#) `'Dps D1OvYɘVћ) |vt W=DT,䈃B.{E\%ź\F6t) (E0]grU:=FL9 kbg26*=؂LjřImpO痗Ϟ|]g2|Ĥe{8Re{ĉ:f2\ BŚ "9͛-l7 o:vp#ܞ.ᔐ}tkKa༃eq&Gv6ހ!NT}Re H*30#93B;/q7o=>~=]Gqk3p̴L€X\&E[x+>#{Vp#T,dHRnO Lj>DջL.lw L2 n ܔ(Ng7B js*vp#T,do>"#e@/n oi7b"Up#TLxr{ā*{ Wyv%ݮ62)FOGRUM㓷>> 2ۑqk784_!i8JnGN!]dS )|W8N wR-\.62)Urٛ-* ~\ ~ 3'WͩLxq,kݼ V+~թ6)H67\ |!F9uI P8QNRE;ȨͩL q{<}~vVr /RW*~c_2F XƋ?+Ljjs*^ %M+כUdDT\%<7UJ%^ } UJ!)Y榕k/^#62)ALFR{\덓 w$x7mSJx'' ♟PeoSɾ.2)Ds?_^>{0œ%V kDvڜʤ.37qr"x槉2jtB `,T'#Ɉg~d^#zd0UBmN]ed22Lu?™xqK!`MͳǯK8as#?_^>{*^>xr{NAd`;"[%8xnWON]M!0]dde3?M1*.)Ynȵ9޸d22Lu?™xq?L]FwNxqU.B W07[njř X'2d2lGR(Ev2p[b8:eq&xC)H*2̱῝ґ ToBR(Ev2ysձtj-R:I]rId<3]g2"MN[K Jo q]_yA<\#J1eq& TiEd3| H )+Cw\Zv;g2&b;FLN!Cw\WOSHa)#coF;&5T9 ݖblQm;R7Y)Fn:aT,dxo?]|ЭbuIVS`LLxCFvY(nǁўQޥ,nsSq/2.3m z'2"[ZEs&Rxsձ&yb7.2pOGRcxYޚdKX7;KRdrIE.FJvY(ȠX{n5ys`FvY)ݧR"''|3|#- '|ƻ'#nSHaS ) >+bO.F;༃峋'K؉5dZ(oP8# 6!qr""FJlp{DImRxs{-ƂԸjř VB|;]^~[]"D$4grf;]g2H*l*e/b7[tpJIaȤvnـp#F g&;-7҃`6!W6#8QSZEs&ovY(8) 1."NT}aT9 )93X.39!BuXJv6ynoԸRbt[Md_>N)RH!ݧR%?MAF.2p7+Ћ=ZjnKAJK츗kBjřȎ^6Y=Ɖ \4*gD⿤ T7Nu2pa,!6*eImQ8S;Dr#=HFGl7 MAJ'^7Nv;%o<{W=%>2-p&Z̔L]FlT)wl S,5Rm٦3;>"d)bFp9+t X ve d^Y02Ū~b;I>ح=5G&8xnF) LFb8#H}.842pp#آ#!z-z€xy -VW)#[|u ^.L2>ޚK!^) ]z`2vj3w<]X_B B ߥ׉QdcKlt Rj|{}oSHAJeq&Ù5` Cwwzǫ}y'̑Pm&T!yry5d"#a3 IDr#=H l-IA^Mr1tu2۹523ռL)ded=NJߥL]F !R%?w.2 VgS RM62p+ⶈVq{7G[{k6)H^ v`kY6[:=ƤRlSW*jd2LuU.B k~7<xY*yύW ;[,n 2pQ8\CJ1)u:9r bUnPm H 3FL)+sv^SH!><:]Rm٦3;>"d)•bFp9+pu[r ]n2G,dbU?QWW՚#a<7pfvvp#|{L s>XC88lܑZl=Kav<]t{ps V+Vǔ-RXD/Op&t@MeoMܥw:df:]X_B B Z) ]Nd"[bf RZ't ) % mjx{$7߂-Np9+ŘTWLg[ۻ1>[b:]NZ,g~0WRP$sf(t R) %K+//p9+ňvo]>I! hSHA+EcuFdԨ[EL7:] T7Օ2ݖ.ng<7rٛ-NW_^L] B ) ^?E0NvYɸT[)Fo)P'K~B RK˫Jg2jř vkR.9VgDv;g2bu*]gr J~S])ڭ wt;qs`, /SH!޿ d\wOԙ0NvYɸT[)Fo)P풽>w?PdtxVx~֔=nWluڜu )|IRmn{]y~-.3-N/RW*~S"2p+ՙ0Tac0U̖`;Wluk>!"V[ e{QRHAJ}hZЈ =S bUyǡXF. T%{}B eu9TdXsq2pd2|X,n/D^Zo:vܞ.S{\KA^T IBgc٦ %=y3rq2pV Jq. oOְڂ^7qg5)Ȼݷ?if(eT[;nNAy&)Yn'Of5O_if(eT[WMA@&.#Ϋ5) %K+12u7Q[b]Y)dq"{_]){2x?p&íH1YuYdu -V8xnDwOޠ.JAJK츗k85gvYɈxm dy vKl7[8iR\fǗ)0pz/dX7ntGufo l7B.SƤvn8W8&ac0N>~zKn{R^>"op>"aMaZm!ԭt6ƛ-&[u.+eR-i R])rZGrٛ- PRIi "';Q8xO|}2B?f_ \Zo*yύW ;[,lD#lG9uIa;]g2,6νO|}2$;& %Z7BMN=f305xۿfqwXL:J&K -Ȩi |y,nsʵbU&EW/)HuG&[DNUܾR߰q 8%dk()Yn2]ǫͩL oɛ/_ TiEdY>:S Ic ML)7UJ FmN]eRT;NA+s/|8PktXjs* 5L)HuȤްSq{#i/bt[JA*+"2۩7[TJ Wy_l^d`Ff&8?} |y4*Nddo')HrzRNҊba0)آ62) c3 %M+כ*2pV ΆSHaj6(e`u&z2IVݒB R])΋ b<~zxx!3iѕRHa[]fc_MdWco lǷטn-7)#x? sjBSHAJV67tGe/Ĩ*Q[R)HuD.;/5&[uK Jo&+Eި3w) u"wxäƕk9zf!)+Dvn-eLo"R{kRHAҊ|tb*U~[bLAJV7pQ.g7(uA՚ c MVR妕Mۆd2p93AۆuϔB zٕ4n쭁Fn-H Օ"⼪J!)YZܿ&sK#Zab[LjxS;.ЏY"&E oofb:֤ Օ""'W X ]:&KlT"&bf W=P7J.)YZ%Gv܋ \Q$7BlT V.31QiZd`m- vYɈJ8RpzL]FlT) ~aofBLƤRlS.YRw2pxW/:uτuRy5df >iRq쏄W2 IDr#=HhH`lSWdݎі eJA@&.#qR.Rx.s!)nԸ[UL.T[)Fo)dq٫ ܪZEЭbu+UGcoM )է)0pq 8%(ƛ-΀Ըjř V΀Tnp آ;H*xVj3ExEDb{p#:=Ƥvn٥,l#;E.7 vYɈxmSճܴr-2pjTLdj-V)+s!Ue#oP jfĠ;&5} RPm7Nr#=HDw$UT ]gPȤ)@V?MA|ܴr-2pEKґ C5=ys`#UhBuIV15/8ys`aasʵ_R oi؛-Bgب TTch7بDv,4B؃7[T >›ZLlg8T.ک o7 F&ncR H*3:c,c%t;u&5ĹVM 0qfh(RHAV|sʵ_g@VќɅ(GuPK JoHVSd# HI+ UhBB uV%8Ȏ >i`Q-X%p#U8j<7p#cT,t<Ttv!Ոmw8.0P8ѭ."]g24625H*30#93X[%p#L&7FX~*jř a{'Ę؂eq&snQ] J7l x&kWMa`#X+@wLj\ZEs&RfM%xc:8S8ݕoxӽL(N;I#LJ L20P6Teq&8tW"arʰ.3~d*!6; c9֙@V <&4w$f[ňxS7[Y¡ /1mjřx#e8€7GW|FLޥwu!< Օ"3E88Cw%_"cڀԸRߐ7nלɅ_ el6s$/ޛd2z`) XonZ FLFdsD/nnjmuIAJV6Z,[U4gr!ELFRmnZ85g^#c3[ŤTp&*Nd`#UvY(P J~Cް"ƂT9 s$/XC)Hrc6޴"%s$UT,do.eq& &1tuej6vY8xnvf(EbfȎ^6Rx.s!W}&øUB͔B j>แ5Q)vYب]g2lFbR:a(YT&p#9Q 0qj͙\HT72bRP8w)@=M!)Y2mb|&[Y  6*]=KAJV6E>%I.7 0t ú7Y RuE>?==S[,H)H^EdNFY rgUSp#dXlIAJLB )OS.q^IA+E⼞"2t1UGB3/>컌8֤TWT-]dPdiesS<^+m1la;VQ8SJIVDnk D[(To/"WyRW(Ev"W)tyB &w~}H!ܖRHaw~}H!ۻO)8->Gn_ps|y[<6ݧRx|D09P8Q!L Xq"#Zps nImC[#c ]g2"9 ξ.&i )HɒiS*[p#T,d?mdqȎ{%\QryfƉ vOp\NA^4>OAJKu wp^=jsfKvY)HWy"7G{F UhBR1TSw?;VRe{̖ix,7Lk7NvIdp#%cQm7~{NAJy"3j%enOhcoM Rtkszq2T,dIm) ID;HjIm)ct ndRW*~ vT9 i 2wX]3)&dɴKu_e;#Y Ƃgt_G2)H67E{ڜʤ'JA$/Bd+a-Μ\4)Y܆r] ܪZEЭ—B[WP8ѭ.)+s!U2pa,oўH*3LslҊ;& - 1=lGLNAJV6.Keq0/OO-^ޤ %Z7S /ĨvY(& bu,4B؃7[3؎j3G8Ug-97ǷЋGDbXS) 8Re{ĉ:GdbLހeq&HRxˍHDڜ|<zq ֙aM`r1zE#%dK1n^[b:;R[~|aB Lk@?f_ \Zo*yύW ;[,n 2ۭ{\}p{3{C)HrSmzd༃g<~~@/nB /F a;jř g2"1 I.3yB 2ͱI+"HvY(& "2,#[ŤMUZȰ7[T!i$TD^zA&vp.39J+"[cU&MAJiZd`s&cK )HuG&[DPdt a;]gr Jo& фbXN!)YnצכVdI.39$ |!& -JQ8ΗRx|Zl=6&"`L7FvY(a n>2u7ӛOm3\8a0)؂eq&/) t(IQf o؂eq&/XI>j3G̑r kd8fZ&f Fjř ײ:oR(Iqhd@H"eq&Gcp|[p#ɔSvYɘVxJg2d\<[T,9<Õh7p&0@uz|qk!8Fձ/ns${Xnn-qB H|y,7|M+2pᎄzä`jř v9pR^#R%ӆ{]E.7 ^##SwsaB&bj L Xq33-&lj5{[p#t x~?E`nx~ꒂJD)r$^7y85gx#{VU=$SL"o\=<-ՌjgXL)H*R&Ɖ \UZE/n n;Hu :cH?MA&;I&/xyzzäX]=KA&;I+"W*a0)آeq&#zMA+Ebu \TgЭB0nRx|D0#Ep#t_q껯5lȤB~)H67\ |!9uIa;/BTr Bwiӊsmxyzzä->LAJn~x{$[t_S)YZ٬5;ɴiEd6L&X]=K!)YkO/ڜʤޠBD)H|G'{)+sO]; ♟`x?&ћm )7UZ0آ62)\gRؽHA96$2pᎄzä`7x?Q R])3S2p4/OoM 2I2B~OSLVD.ndauޤ %Z7x{$FWBD`J7xyzZSLVD.nda҈ճdqe^bĉ2H 3/+i Rd8ΙV 9=lӛRՙOρ3?-*629uI:™ρݎ~̮ *؂LvY)H67\ |!;FmN]eN/~y.2h wܜA\J_ Օ"lx;d؎ *d؎jřR_ TiEdOlaQSW4y 1&yb7:Zv3 :c٦BSys-|Nj7辐q x?1\dzäV{nLXlWޚdqv)ӳX'2pA{R^6QRx|ڙ!xsgqqzGtp[S;gn"{k8=Ca81)E#Ep#:S ?-^͑1(.2js* %M+כx!UB\%p#ddV I+m1la;H oSNҊEJ7L \]W)Hɲn~2/ͩL.SJa:Գ)H67EcͩLTWE8ɳ+9ܴr-2pR%s/2bq\[ R'y"EIQSW(#NIAXEvWp##e*Ąqm)7UZ80 & - 1js*ě*Rtg"7m ;Uu:*Nd-)nij|[fsc )de`:F,wRHaIfceI'%732/Oo0Yo2bCi#009xpx<q edTRw;3|Dk\6Fꏔ€3s$ѕ""[ oxr-|D$€ѕ`;I-|j((m}dR<ۥ0R8F0n*[Gt; X `5C)ʔ7Fs$) xF*&jl n*[Gp#XC*.{RJq|Dw%8pTJ1V3|&7JaT9 )|Ė +eo2W\;I#]5` n>GX cRU`  ]g2";#zq[pg\r +!cXtyIVnQ])WϮ.nw7Q]$p#dn.@J#xVCyn{R^>B)oLL&%P7PȤx఺*[sgof7) \}p{/Jj~_l ހ XsOjqte&D nSFon- Sep#,SǯVћ-|+Ѧ0Jp&3-"ϯ07 ^}WJ;)c H >ar1f^=[]6#T7G`Zh) ]\g)R8Fxnu0J l2-ּQɞ5hKa-7҃ǯgp:%ϻRod0آ{uۑRe{tK )|c։󜂔,nsZd 1ȨͩL ۑRe$Ϋ kq qrR%{@hHpsc Wluhޚd2eZ's )IM+"ϵa0) R.&+yǖ\J1[ŷ׷6)YhMdml .gSiMZTGdaRӛRd:E\J1]po [<ަ &{%Uxa,><^/S SNA@% ћ- Rν %Kkkda|xJA@&.&+c )d:i RMk/0tǨͩLX'2wɰRW*TSod0¸`;WluxS%S 2ͱI+"H7L 0n!N 3oVSiM2 \#a0)ȰSe*2a^VR؎ڜʤlQ29R^cudqL)H䦕䕊d:Z;⸶ ~̞L;U MVD.7 0tǨͩL.SJA)ɯ̽d:]Nv6l&Xy4$D(UdaҘLvVRW*5VgJި3w [k3ǵНdڴ"2,0t ú7x,k<]dW{n-_+=SDxSYk BwiJ J%{ՙ2p .So)0pt|>[  bsJ~)o2 QNaLhK!b,:qS^I9bq\MNA2Uq) }a,:qSH!{ՙz*"׆ngSLVD.kdaRŇ+a1ؤΙVQ "2piaIQ*ɚlx~,usʵb̑GWf7lqJA2UiEdz`H)HɲnnZB -ޤwQ=K!)YZY2uV%91Jh3#-ԙ-nΪ8S!Nu^6kV6k8erJ)d'iEd"[%L&[|x} J~,2pBZib])ٙqר7R8gxnd0V3jz>bO.F842F84uSĻR.Ř,nssʵ |!ơ{Ī8C#*XL)+sy. Q=fxc 2wŘB O6|w_3 X .QFx#[(#{VPd*ExjřqhdPgU2#+v) \ 8jzDH >ar1fXn*[cy0DlLVl'{^8FJ1x78jzn:aDdǴ;MA&;ZE(Uҏ"SFV?̑4yry80x7yJAJK츗k ;&55>P z'2ۑU4grf u bEg5 l=`u+UOAJ<eV*̈́n˘\9y5 ZM!H2eLڨLvVDN#Ll NJ ngd ^`0eźG&Ma`r^x 7Y0GkLJqbsـ!?) ̑GWfpJl2OWp&˯Wp#ܓZxg2\ GWf'J< oIlFzpOjыG(Ep0ܓZ] >Bg5 >2)R) +7R4cxK!j8"J<~}nuI!TʻO6Gv^ !ϼGӳ)Ȼ[R3>MA"7El|RLU\ )XyНdڴ"2pq\^`0)ě* \ZolѽFƺg[M )HɲMuz-J'EU0HEU0# %ܴr-2ѯ q껯5)HWy[n ՚#)-̼x1yR7yՙ2pwxؠ;EIR1uXy.ܠ;E,Ɖ Fz0GѕG2)7UZɘ7 0tǨͩLB yՙOSo"wFV$:%<,nsʵbL6FI'[I^E J~X.¤ܑp1d"Hx+3Ex7R$S+e 1DwO_\Iae%7l攂LvVD(Uѕ"JTEg5 Û+>#S+I&)YfB C)΅SD>3B>Ԧ J,^dX@g5 l=`us$4)YMx+3G{7xsJ!n8QSFJ#JnRe \41<0@G2#̰̖LUL.ƃՌI-SeʻRs|,lnskB:adGI [|xS \4Y̖|{{ rgUSTG/nĵJ+ 29%]) T78)0p'{xjU)Np0n*[XL.ƃռ|__> BтcL.ƃՌڨy01v ep`3GD &] )|&{!yrsμcyx'XB e:FLdcr1٢6gw] )|bLAJ}hZЈ =S bUyǡ{&D ♟P3o\9 T&Yv;g2\41L1컌bL!)Y2mUdY>:S l1Vs rV6RmnZB52js*vL.ƃ՜I^E J~,2pa +>k )Da,c:F,J$γ1L]tY )deܿ6+ !3 ]\EN'6)Y&kB^6*Nd+eZib)+MIUd`g~=+bu& g2R.y&s87[,YLI.)HfqwYe 1wH->™a-> %'YpteN T&Ϥ,nDPd̑GWfJA$5yR7y&T"Qѕ"l5)YfqwdzN T&Ϥ,n9j R')+3 }g2Ry~,7L4Gެ5*Nd-\+Ř(q )de:qSHad|;]^~ۯ) R ) |;]^~v~}H!ۻO)|->Wxx_Wxxs|-.nq->0RB )>0Rro^'n/R)>bDZ]$U&EWZm!<7 Lj+z\G&xIaq8N R$=RO62)|j(<ۥBƛ)HR7E<@T֤ Օ"k1# ~ty_O.nSHa)0pHʨͩL o l1O)LAw&38%LJHyB su dD>x;3 uߟ7#9b頋_R%*2pJ~}= % m\ R])f;R 2I֚LvL)x&.7BmN]eRDVoB;G؃7[p#TW ؂P;7KaI#DVo`qPSWf#m>"*\.g 2{L''p#DVonf8ՕǤT)SƺKa:U^g57ԉ2"TJG&pJ"2xK!I4Z:xC)074;/Ę7L lSJIVD.FdfНzӊEJdDb(.gS%N!M ) \7 nڜʤl1Yo2bt1U&sKamVa \ js*J<珘7)יEFmN]eRdwR`Bi#F] N)I))RHaRo)H67\ |!CmN]eě* \Zola莱RDnM투laR(ܧ .2pᎄ^6 dD>x;3 Օ";zèͩLLvE)"2pLx2=" T&[I!wR) yyx7o/p)wRHa\R.pb%2R.xk(SFOLƓ?_ޢϦ&i Rdpk JERɾ@akRHawB W2Ռv7BLF`BM )(\4)Y2m{]SHa\R.FzÔ)dD~dػ>ޚρpS;oۋg{B O!+o^[p&㠞 v"u쭉;I#N nNSRxoN_n?~| y|{_Ha0޿B x .gw37=& '#|D$[p2u7ѕ`;~}1Ȱ1Yo]>gH F82S 27->2iܥB^8/i Rd:B^\$~,uܵʚmH)0޿I!v o GWfb o J[7~{ޥB$4)YhRn TlctGJ!M ) B; #/` !NT}M O/Oo6p&ΪdJj`{R1Ȱ1Yoo/o?0}!7)-=o#HyB v"S4*NduV%PV3!)Yn{]yzR%Ӧ.UNvY5`- ~tyv"B v"4)Y77o/`'2賩IAxJ7-BJ FPY oRPȤxh1I-zq[H pp΀T+Ȥ17 o7p&G8%LJHyB k)Rd6Fwě*Nd-UU(&QRݤHFzÔR.XEWkRFz,u Tl#Sd2;58֤x&.imVѽF6ox úda\\>xkddn.7) 9RdX7O)-=o#HyB %{VAꬁU(k`ɚ#?,6*25\/OoRɾ^U:k`JXEtG&#?MAJy Tl#SR}J! rZUc,kf l$<7LlxK!Z u[S0D2=ϯL3Tfi R-yf" }X&wRHa|)pf8gt_GՙRHAy&⼞4)YZymeԨ[E3/o@wTg֤ %ܴrX'2)˽y@wTgfj`!ys|)xFR;R妕Fju^6s$hs$C RdyuG*Ą8gt_(ys`[ov6EBLP;7B 2wjM )=/C>b0eź. VdUDw$k`q^I!S!)HR7_ʚmH)de:k`JXEtGV՚R}J!/p&#c0+Ȥo6xd|S¤Iwm}dn#\R$=Rcac0.n|zK!-I %|NAJiZdxVn2G,dY "2pE<7W ڜʤRHawB vfol{$E\oνb0eź;ୁj6) p#ܓZ@ Sl2dn *]gr &62.Y %ܴr-29uISo"2pia7B؃7[U&MA$/BdbrRij8 wDфxɛm J+"o\=<-5* ~vdtW -wB vfolQ3ڜʤ.3&*gdr xCRdĪ8[a;]g27D^dxV{R^8%GDNvYɈ49ul/) -"14;O!M ) Ov 1 & S[{<ަ7{] wVť %M F>&{&ě*D.7 [S)HuuxKȘ2lӛρpS;o BguޤxSHax{a;^l$t_-dzÔdX4B`Bp&)!-*62iF7:mL7JaR-NW*Rq x̼JpJ`{RKaI#\<Ǻg` n:ȃf^VրX{E7RQlzB i RE.*sUV}!D)H6/"龔Ϊdtq"Ġ;&XL`{RxS%S RMuz,77NdϱuV%Ø#i ML)Hɲn^ \UkܓZ)ȝUq"/])3آRRHa)0җ{L XxsCmN]eRxgV)B"(arm >XF*Sޥwu"sUha&+c 4)YZܿ&sK -Vzcv~[dUVS%oD>3-;l8q9K+L"3.gxNAJiZd 1=`3vL-c MVD.7 h~۰RmnZs Rd>R->LAJ =E/n a,&WܖR%"o{`NZ(;ɴiEdR) 2\J1vL-<ަ .gieIdzä`?rúg\=s[71Qb"ԢE$&zT) }D:9*LV2Rݤ#⼪BmT""wN  /1nc EڀAxVqpOjы"na,UGJa%";&X :ȀԢPĻR.N0xxF;^.a,/S SN!ߙ"?MAJnn|X{ӬJqI [68ȎoM RM pf;UNAKA^o|g\ި3w#\eę,'PgU2x);SOSLUEbp#ܓZ)L]F !w7)0p0]g2&8xnx g 78xnvf8śm 9uIw#|+тLk7BU0#90p`%DJy7d) ]%)HɲnN{dGI.l攂,uSDvSP,kY2uV%g2H o) ojs )7UVڐ ll w翧 Օ"y \wp#%jU)Ndox<^ %Ky.2pq'̑7ϱLq a:XL:q9K+L))H67\ ܚ /)Uq)˽yG( -"q )7UZ0b0|x} R'YENv#L1yb7y>qm[3)X)H67\ |!Iae%MAJɨvR Jo={}.6X]=C g,7RSLUK"6{@k\8-QRɾ˸mWC )># aK`Q!oѭeq&c{'O0m)V3)lǤު=|D) 9v'WinCw Gؕ7.vw8y]®켡v7ISHAuOSHAJ;M/2n^gc٢MAKA^Ifox`kR[̑L3wjyG3xGqkAmTЭs )H67q^{qkxBѭ"xMAKA^obRfcy5`BJ7) wVʼn |[xs$C R])HTWddx{g7L,6q^{]ez`8gt_/OoRJ;x{ȠB)+ܟu6;AwPN!)YZyZez` j50A3^ޤ %ܴr-2f^VRj5Gx 8+s%PVs RyU7Nv;g2 [Y CZJNA+E\xL` %u TFue:S|) ܴr-2pEy AZͨv69TK -.c3v<͞|P"dizD.xހ)ojTW u R])R$2p*6.}!XCPV3J!MA^o\^\ި3wb#;_({P7B27l̅T.3Ja`{'M!)Y2mjjX.7 vY(dܰ ]g2ֹwdieܻ \ZolU( o.xFRHA໬s/deKo2pQ8Q!sŚ-)9j5oRe_nǍ ^ JjFWoov_ߠB)DνA!Ko2GB֔=yݗ,kݬs/d~y.7BLFν }ν/UD3xCjy]~x+|Dq*nj3wj2pX 9nKp#=1zqdq':*.yb7J.s' Tf njřL]FWc}$LaR՛jgijs7Bu{ⶈp&GLf FlQSWtB %#YB f^Vҧ)Hʆ{]U.1YolA&vyYIY٦ %Z7 |62i[L RE U||&þ{NYEdт!RW*~xO Ia,Ro"2pia?aqzF,7\o^ \T\%|g8xn83tƱρΙJ7->O) }ݑI!M ) }OX^RHѝ)Hʆ{]y.[DVokd PSW՛-& S[{|Q92\C;yYIqÍ̑>?aqzF F w))HɒiwϷﰺH)+uyFdaKO՚#i@P )nRHaIdX7[]"2Uj͑4zk`;"7[xn5r  .2U4)YZp/eIf^VRDVo)02{LDڭ._\AH5՛-& S=>ܥBW?MAJL"T eEJAxJ7-dH]Sw?v;uߡZs$J!'GBH՛-& S[{|9z70)Ûowy7BH5qbsـLJ< o>d[p#U&7`ǔ`e%gְ&cU&ݥ0p 93js*Gv6LJyn3{CPYMs7Buzq[D #؂N&{EmN]e] )˫7OSesٻ Jq.zi bU'wFSG(ER$f*n_bRGʻRXߟ t'o\!2pᎄg/Smu&vRtW*`gp&㔂,uSR̓]Im+ %˺y1VϨv6L:h3~Ѣ{e.IzNAT v>TG/n2=䕊ezwyGu{ˈ3?&g9c LNai *MdʲcPmA [TOAT NDNְ73A-;f njmó-Q*2c,sa?O3{f oآ:} _{Y?hnjm߱z) %˺q" lB)΅#oN)݉_ \Qd~+xJ[4 JB O)03{CYD L/IQSW)-=> %js*<3-"1|gL/IwRRPȤN R$=RUv)3i RM+"_PSW4; 0qLPȤĸ*L)H&SɎez`L/IQ|dY&S!g*G2[n_<)HEu*ǵ tw'"W*Ai#DEdxV #SgRTG#SgRU&)H^^ yHA*/$b"ɫx"ɫ/Rʋ{U^$b"ɫ< ]#M0E WK4 }Qi!/RT)0޿B ްWTkyC & S[{<+ȤpJ"Haˍ4)6gwT|+3EtF`Z&Ng2H€Sݱʔ.Fxyz;0=p/_xހ|C[ 97BJ'[; =H*3RHAd*H5*5dM )}LslId I/OoRLVRmnZBH)Hɲ"o{`JNA\f)HR77\ |!I [RD.;#L8䕊}.:S\#SmnYe-7҃8=L*FVě*Nd`w PgSu-vi R'2Y [IAJe^o*Ę'0-U{<~ѕb R])RiDv;g2LvL"W*a0)M ) |F l3B1Wlu8QW\w) TiEdY>:S IJj~_l)J+)H67\ \wx0ܓĪ$~ wD7G{F UhBB "2GjRHA@&.#{VAꬁUVdUDw$kRHa)>-a net*[+Ȥo630)E#] )eZ)HɒisôLsk #~2ei)HuH$#sLGI))#|Du %dOHoY x_͑ѭ"?ԙ-a{$8? |[xCdG3JI^yG\ wFpKNA^M=)Y)H6/"龔R^?MA&;I&+l0Yol&u-v+2n DwO+UO!rh%{MAJ}hZN 9 Vʼn wˈp#5V vboMLA^o.컌C+k )H672pjTЭ™=b&MAJu\deq[tX-7<_?_B1Rjs*2pAJş/L5b&MA^oIEި3wDd ox@?_B֔} R'XS "?_a'֠3i J~N*2F #i R_Vx~ޚGB5)Ȼj'xWW`IadT>d2ZB O!GTǩ= [2 |cVL7[Wp#G&) DbnK4!ѭP5e_>[/aM٧0gtX-R.٫5 RgM )d>MAdֈ MAJyTWd0zl<2=lG`B)HuȤ݈ \7 R^TWJLdԨ[[r J~K R])6s"6t0tP Jo"'k؛;/ngSH!{)d'$2pE"zdD.zqDSHA@&.٫5 RgM )>w^U8`ΚRx|ڙ!(&a0)` n*[݃ ɛ/_U8Y#؂'{J[4ℛ L)u{$sdX׻R^'֧)Hʆ׹,nSE n>X#15~[SJk"Ę7L RƺgJAJiZd 12ER%N! d*smg RgM )>t;L \<I 1wD3nR@m6R ) ];5 %cM )S)Hɒiý"[RZb̑Jq&R R'y"O(2UL[ u}$~)yA/slF ^ .3JA^M#b7BRHA@&.X&wRHaRat_-zÔ?w^U(k`ɚR)Hɲn~xq*n_QSW4P R])2i7SJIa˙ $S_ׇ,Sq{FmN]eoROSmnZBڜʤ)7UZ0 Օ";zèͩLW^&Gk'pS;oWJ ) }ZP2*;5)0޿B OP;7%D|}!4cJY:3E8 0Rgix7 eHaq r @i#F辐q 1_g&ؕ7xvfRΜ7BFzFͩL^Z7‹r{"mٛ-c€7FX\|op&3|ǟ~{~7o|O<x\n [;g?:Kj 1vB [z~dDWsdj(Lj< l۽NATOsa?==^[Tk 3/+)ئ Չng{-e Z] RԍpG=bRLL*2boM CęoY eޑgf nI2.&dieý"F *ܲyoнFF`B)Hu[RJ^b"Ek R^2pjTЭ-Ξ5q Օ"nYk;KA uV%ꏄnMFR&ƥ Օ"QkENUؒ}t#R1%d:S|G@w>rLdl %P5B2pA Rj3[E`,$jUd`s&Û=#U4gr!MA<)Hu1ExBѭB;L%8ijc9)Y"w9%: [2/)4&D.ܑ0Yol&)YZpw0 Uؒ}!P Ji RMk/ĨͩL aKq %K88Ai# %ܴr-29uIa; `B)HrzDv;ob*--,7\ǫͩL aKq 0tq TiEdY>:S Ic ML)H~eE<%i@ɸgS[B 2I2 \Qdzä`7)HR7 y|{%BMeoM j59d25)0޿B ',r{,y*"B1V4!Ww[u'{P3F^aB1!Wwǹ<8q E؎ EJ u2ɘ.[Ma7qԭH]$[](psjN]eR8{C..O ~j̀ /6F&!"QSW~%&NT[N!BI!R4Mz3Ξ 8^dI}ձdZ(%)Y{]Zw8߀ RƺIS8pGgxj3ab)de# u,dɴ^WK -/OoRJ^b"3n [p#ĉ2WluB %{Vk;gי Q=f kހEBub R">NJ6oPLA@&.#{Vk;K!^'To+U u2/S%{gU0) ]H=ToeR.ĩ'GRmSH1\dYJ1vⶸ=7z_m&,6cou RC R'&N Gx3&NTvbo_RHAx`/B;MW&NT9uI#DwO9yb7nI21|gc62i *Dd3|7B\%U&MA^oHwݎ3?aRL k pL]7q /RHA@&.Û8B R])27\SL}o lq.ҋׇ͋TWTkB S:ɋ?3ſ J,^dj;Rɾg)@?MAJLuMA^M#bB"PYM )dEdV5)0޿B ',I /gS[T.q껧 p#|xR /.|4ڜbѳ:>9oPЭXc-'4)Yܦ |!FmN]eRT;NA$>4cd2lG JjNA^ 'z-2q#xRJ% Cw j5vt_(Qb1"e A&vt_(d+ĨͩLjg)Hʆ׹w0آ{ڜʤ)0ybnzlQSW4r J~SRw?< (>22}RNbU&Y 2ͱIdc %KQdœ_Ϧ&y5y9ρ3O3-5slSHOSNbU&Y 2ͱ"H uޠ[䶄ڨ Օ";ۙ՚h u/ĨͩL3&.2pjTЭlS%s/2pa,@pJP )Ȼnjgb )LnK4ؤdie3m5,T2 E(-o*IA2Ui:yb7ے> X 1-9ܖRmn2õ |!FK䶄jgj9zf!)HrƉ \Q$FaCK䶔´e+cI޼F̈́uӶm RC R'ܖjt[B°GR`' SK )|m6 9zMWϨͩLnnRHALnK wLn>"Swsfr[2]>r{0zMA@% wLn22u7NA^䶤e`| 91r07)컌mRP$"9uIv-17R.R/"z\8yb7ے>Ι=js*b!g"lSP$"zLͅSW*mIn9uI3S! zRɾ˘ܖzI!컌m6 H!ysd؎m)d)Hum_EyF9›ifܼ9{jM4u 2I֚I^^?^ <9 Zj$Cw\,n7 |DLN!mI?MA&;I+"W*DSHA@&.I!ݧR8eq&?ųMal*{kO,;5L#l7“g-gpJa%>Maų}m)=nS"HU=eyYIa;&Nٛ-kt \>Kaxq껧 0Rroowe%Vnw) pooV{ ֙aW8 F)0D̼*[PǍܜSHADw$kRHaְ1Yo*.-]gr )Dw)HuTdU]jř TfuJ*hj͙\H;Vae%MA96Y;̼)Hu4MN#/pIae%TjSNҊbDl cu ް)H672pjTU5/OoR:IʵwT6 9zC+js*n ^˔RDwwx9uISP$"{f gͩLӓ^u Jo;҃ ve ̞7[Xn * }rm0xB rV6 7G{F UhBB 2ͱI+"HT* %K+uMA+Eܲv&2pjTЭ-vD7Gl5m nGVќɅ#RJc,2"[d*vt_d*wD,u&2wFl*{kRJ59yrHEި3wUx؛-/B 2I*2*[EaxoN)Hʆ'ׇ&Ę7L Tfԭ\>K!i R*2pjTЭ !*5Te"';FkՈ^6b69IAgW qPLqbs)&#}8xsa!DU-dc \#!Rev6,6>4gL%bĺ5j5 .gie)ؤ w$b5Y Bwiӊp9+o*<@u Օ"yqXd#U3 %K z&Dl5)YǷ8gBVgS[TW莔LvVD#VW [|Lv |!FVQlg-ޜRW*\d㠞 qbs`kznUJ!)Y̓;Н/SH!#}TWb# d;z&t ę,.7Zl$(fsKAZ)F)"wR`RH!#~*~Rj3 T^Mj5d2ݑI!ݧR.UH*5-5)0pjT}!TkXmZl=da`uѭ™=462i͋ޥ0pE<[TW7[Ljc Gª UhBKaI#+тG8Z&ޣB0n!~;9RH-kmgOSiMZpGdaRӛě* \ZolѽFFmN]eRx RmnZ ^#62)|C\N/RW*=h7XՙjJ4F` i 1ٕR.e&^4itgEd 1u.g [9 TfuJ*0nўH*3xMA96YnLFtGRDirId&Τp9+ň+3 +l@wTg#ʖxR-].IՕw6V*B 2we&wRHadřTMal*{k+ڭހ3<7;3uٛm CX٢]}<-o_?] ̵֙0Dj͑'PzWFs4[Ťvn(pٓhQJ) W=P5PZ,{W+ňLKsԮKa0^Z]|ycߧwZkRHak %K+1 O.Ep#ՙ5p9+ŘB 2wZkRHA໼XZ#',֠L)%nK,7tGe޴Y'2pA{R^lAƭPeo8]}|R&e[]P])9xn(7[>N!컌W2YZkRHa)NvYO^Φ<(ep#ĉ2/vA l'{p9+ŘKK|*_n\ֿ=R"q껧 -DwO\WrV1!2cp#+"9 1G`M7Bv) ӳW /a,c%t; oPgU2^=fS(F8T[9S7FDuB eKlM )lO~EDbp#t_-F; s$ps Pm&^тcp#t__ VB.SFW!{Vx5G\Na`%2 ä"]g2[hB %qRdXc R /SŚkxV=E.]'{)HrSmzd {V)ded=NJ03uL!)YZpw8i'/Oo-N_ޠ[E. ,6uɽ)HɲJAJLvVRJ |rg8+B2ܲl爛#USw?v; UhB u ) w|}|`M7B)BpŚ-"9 -0nO`@f붔wIHBeq&cR[)F) {01nO(Rޥ,l#;E.7 vYɈxmSH,77\ <ܞ.ыۂ-&# tTW43"2ź R-ޜRW*ule%o 3/+T9 i )|c}.eK,n wق-uް"ar[JAX1\ZMA^oVͼ)des)[RmVOHp9+od),n{xѭ-X٦ ~tyK.L]֤vzw~}H!ܖRHaB wR) x'w?/pg 3|#|s|-xG)o>#blGP7lbu4RpC0Pl#b72؂A7PȤ;I#P B`b]\ ]g2/j -XgF O6AL(IQ] H>NT}Qp9+ňe0GʻF >}4G&2uٛ-/{$7H{EGe3])0PR-`rVS<7 dX7<(2cRT2Z"ɾ:unǷ úY)FDJSp9+ň?nb]%*Q7QyRL.lc dnK7tWibtFr.3F/~ |׻RXui Rܐ9~덓 byύW ;[= % QuY71 tGufou.gSJLp^ \3b[*/HNkB ) LY:3E؎OPġjZhw[ 3WDPS&vk |0DlM-s&pfڤ0LƳ'ON H Dڥwq̵ 5eկ3jzdZ( %T8fxƬ~"DwOןvߤ %MG|q2pA^6 \Y )>'_pzxB NW_afr񬴁[ |+#Ħ0xOF`;NW6H7Rpvbo b*Q 7o I+XIqcg>NW;༃ar#b) mx39n`%LUp n2!#ӂȮRHAJLq0آ{ *ax9eWL[ RY&M.7 X7s)ȝUq)HrƉ O` Z&cfrRH!ǫ}y'2n-7F8]^KR[ ΀gdT>NJCLO{ *anqndMW^80t7_=#{V8?7FvYɛ úX\&xֆq}yuO{kc l@wS3WluI;8RO֔= 0#٥wzKc&EV`R/) %T[ "j58I)axjřXR,& w3?5r9aR.)Yk 84uaM bU\ J~32pa,od2Rw) %%^bdGBWeq&M Rܴrq"3#?aśqKAҊ|t& %% |!Iae%EWeq&M Rܴrq"33aśqKAҊ|t& - 1& Th!)ȝUq"~{HAJV7Nddox7X&-ŝ}L]'RH!ӳWdZ(|{ #en:Wlu7]Jo@G28xnvf8y*axn9] }yuOdZ(o쁎X[RuV%) dTleΔ7XgƁ̑3B1rDN#buP[D"n>+ኒ{p#p>0`,o Lnd` nqo|$x[c.wFi RMk/0tLjeWLȰSD;68Lfqg49n,kY2po*I7xPgU2H)7UV bdG[3[)HM85gVQgU2He7 ߼NA^owFW2pܑPgU2HoRe8 =DwOY [Iaqg49n4J&K -H+3+&-)Y&ӵb̑4J&K - 1B ~Ym㖂IdSznuV%Ø#)~YmMx7/SW*ŝQ;ݠ;J ,uDnK$,HU=ȇް)ŝi ) #|7BЭXق!NT}}!{DrZ7[p#,L.Ϊ8gs$Y #x8QWxn,7uɽ']LӛRXuR29n2piaJ[o7[؎śqK!X?M![ύ/]<=]*<{|z{[ܑ+C\js*E8D5-+U.{1L.3J1z=C)2n-Ό:|3|܀p#H#"&)Y܆u2pjfBjř c& &1R*ݤRp΀TDbiZdKSHAJV6T^W8i=]-]g2^ޤ %KM]rk Ru[Sx)Br RRM]z-_1YolQgU2jř Օ"H|K@]g2\7BL;_RHA໨lMGkЭt o2Wluk>)YZ٨R˯ %˺q"oM MVD.7 #)̼)HR77\ |-N)HrôLsZe GWf)7UZ0 `rRJbL$2n &})cꏔB 1v&2pJo;3{k`Mv~B"[ n' Ǭ~b )HɒiS*[T,dALH s$}'{p9+ň\r +a7p82l˗# )!Zp#TG/n/>b%D] )9~"/E.7Ln޼F̈́f}uIA$E.;EF n 2G,d8yR7K.v2p3DxԖB MVD3ź R8X)7UZIAJ RM+"_Qp9+oě* %Kܴr,eRכVd;3{kPp9+ŘB K.vOS QuYe 1]A.{Y)Rh]7B6Xܙ7[Y <7R.`bRT2Z#L ),źWOS.}.eK,nsCe>-|˗j|}jř|xSʼn v -V(~ڨyMA^ob]5컌>%N!TRe2{kBsG[̑TluBVŖ8Te6m +{7*H2e(dY7oȰ1ׄ H*LVh̄nuIA@&.C,ns/ZmȘܖR$S'2Mj*SB} R'YE;G{ ѕ6)+Yu v:S[ R*2G Hqte&x7),źWi R'i"ϔp l7[=3aRT2Z,nC'Rd 1\3#i/Rj3 &R*2pjívf=3aRT2ZSXu֧)4& \#(ebLAN2mZ gp9+ŘTWERDd"2EF.#VWRW*~e\ZUIAJL87Ui!(ebĺ₩ .gie)y_ aofB.{M!s"aRU`Q-7vfxCs*[݃eq&00Ut; nIVݲ2YuWV){q3Gk8SxWt oP8fB K.i )0-U,sK Ft=7z_m&,6coM L˔U,die󐂔,7uɽ<}i%Y ?+Y ªz n)#{V)H:G b|o*I7PgU2H)H6-Ydz:adGJAJ))ȫI"IE>-H g2xVvo=x&4vfoQ=`H߱ξdoF7Xx7ٹVB?:3<"e8kkpMձ7[d^ l3Naeq& 7ڙ!(&แԢR$ޥwg~Rg~i RMŚkkPmހeq&%*.Qb"ԢE$0SHAtX]3))Y{\k F^#62).bM *R^#cȎ)wXn[RmDvJ$x6}ձ:컌"S`y:I^<}( \j|GPmf`|Rɾˈg~RHad|;]^~ݷ_RHA&R}Ja0D O ~>n ~>/q8->"xS ) \-xCv6u4KakD>eʰ;.32g)0m54ԣ< E k0-R({T:d2 [B ) ɛqÕ>r{'}›???? }O! RmSHAdvz:?XlWޚdqN/DET,dxsgqPeoꤳh7ZdTKT)d2LԢR$ޥwg~Rg~i RMŚkkPmހeq&%*.Qb"ԢE$0SHAtX]3))Y{\k F^#62).bM *R^#cȎ)wXn[RmDvJ$x6}ձ:컌"S`y:I^<}( \j Z3TIPS04.LBR Bill Tishey 9/10/87 I have compiled this series of notes/tips relating to ZCPR3 primarily from messages between users on Z-Node #3 (617-965-7259) and sysop Jay Sage. Jay graciously provided me his message base for the effort. Messages from other sources may also be included occasionally to expand on certain topics. -------------------------------------------------------------------------- Assembly Tips 1. Virtual Assemblers 2. Linking Microsoft REL Files with SLR Linker 3. ZAS Assembly Errors with Z33 -------------------------------------------------------------------------- 1. Virtual Assemblers 09/06/87... There are vast differences between the memory-based and virtual assemblers and linker. There are two fundamental advantages that result from the effectively unlimited memory that the virtual tools have: (1) files of arbitrary length can be linked or assembled, and (2) the tools themselves can have many more features since their own size does not impose a limitation on the files they can handle. The virtual assemblers have several very convenient features that I have begun to make extensive use of: (1) the ability to automatically declare all variables to be public so that they are included in the linker map and appear in the SYM file for debugging; (2) the ability to flag any JP instructions that could be JRs instead; (3) the ability to make listings with T-states for each instruction. The linker can group the CSEG, DSEG, and COMMON blocks from all modules before the final linkage. It can generate PRL and SPR files. The new version has extensive facilities for generating overlays. More extensive crossreference listings are possible also. (Jay Sage) 2. Linking Microsoft REL files with SLR Linker 09/06/87... Can the SLR linker be used in conjunction with the REL files generated by Microsoft's BASIC or FORTRAN compilers? They normally use the Microsoft L80 linker, but it's got to be the slowest thing around. Is it compatible with Microsoft LIB files? (Larry Schnitger) 09/06/87... The SLR linker will link files in mixed formats so long as the names match to the number of significant characters supported. Thus you can have a linker command: SLRNK OUTFILE/N,/P:100,/D:2000,MAIN,SUB1,SUB2,/E where MAIN.REL and SUB2.REL are in SLR format and SUB1.REL is in M-REL format. However, if the main module refers to a routine with EXTRN SUBROUTINE and this routine is defined in SUB1, it will be known only as SUBROU (or SUBROUT in M-REL-7) in the module and will not be picked up by the linker. So long as only six character names are used, there will be no problem with mixing formats. The SLR tools are specifically designed to handle linkages with high-level-language compilers. (Jay Sage) 3. ZAS Assembly Errors with Z33 08/27/87... The only assembler I have is ZAS. I was delighted to find (at least it appeared this way) that some of the new ZCPR33 files weren't assembler-specific and ought to work with the ZAS assembler. However, I ran into a problem tonight trying to assemble the Z33FCP.Z80 file. A duplicate-label error I think I've figured out (labels in one of the library files are the same as in this one, or else they're the same in two of the libraries). But there seemed to be a problem around the option-byte section. I got an illegal opcode error and an undefined label error two different times. Any ideas? (John Branch) 08/27/87... The file ERRATA1.Z33 explains the changes that have to be made to make the Z33 FCP and RCP assemble with ZAS. ZAS objects to redefined symbols even when the second definition gives the same value as the first (as in multiple definitions of TRUE and FALSE). Also, ZAS will not recognize labels that begin anywhere except the far left margin. The SLR assemblers that I use behave more reasonably (and consistently with other assemblers) is these respects. The multiply-defined symbols can be dealt with by using DEFL directives instead of EQU's. (Jay Sage) -------------------------------------------------------------------------- ary files are the same as in this one, or else they're the same in two of the libraries). But there seemed to be a problem around the option-byte section. I got an illegal opcode error and an undefined label error two different times. Any ideas? (John Branch) 08/27/87... The file ERRATA1.Z33 explains the changes that have to be made to make the Z33 FCP and RCP assemble with ZAS. ZAS objects to redefined symbols even when the second definition gives the same value as the first (as in multiple definitions of TRUE and FALSE). Also, ZAS will not recognize labels that begin anywhere except the far left margin. The SLR assemblers that I use behave more reasonably (and consistently with other assemblers) is these respects. The multi Z3TIPS01.LBR Bill Tishey 5/20/87 I have compiled this series of notes/tips relating to ZCPR3 primarily from messages between users on Z-Node #3 (617-965-7259) and sysop Jay Sage. Jay graciously provided me his message base for the effort. Messages from other sources may also be included occasionally to expand on certain topics. -------------------------------------------------------------------------- ZCPR Version 3.3 Index of Topics - 1. Release and copyright status 2. Error handling 3. Fixup of SUBMIT processing 4. Extended GET command 5. Command line parsing 6. New RCP 'H' command 7. Z33 with RCP145 8. USER and DRIVE stored in message buffer 9. FCBs with Bad DIRs 10. Improved BADDUECP option 11. DUOK flag 12. Type-2 environments 13. Use of M80 on Z33 14. ZCPR 3.3 on Apples 15. Some of the thrills of beta-testing -------------------------------------------------------------------------- 1. Release and Copyright Status 04/25/87... ZCPR33 will be published under the same conditions as ZCPR30. It is copyrighted software. It may not be used for any commercial purpose without paying a license fee, but it may be used freely for personal purposes. There will be a users guide (I am now writing that -- probably the hardest part of the project!) that will be offered for sale for a modest fee so that we can get some compensation for the enormous amount of work that has gone into this project and so that there will be some incentive to continue to work on further developments. (Jay Sage) 04/26/87... I would like to know when the anticipated date of release of Z33 will be. Also, if I am a registered user of Z-COM and ZRDOS 1.7 what will be the charge to update to 3.3? Finally, where can I find the instructions for overwriting the Z-COM file with the updated version? (Howard Sambol) 04/26/87... I am still shooting for a May 1 release, though as the day approaches it appears more and more likely that it will slip a little bit. Echelon will determine what the price will be, and I really haven't asked about that. Of course, if you are willing to do the work yourself and do without the printed documentation, the cost (in money) will be zero. Whatever the price, I am sure it will not be high. The procedure for installing a new command processor in Z-COM is discussed in detail in my forthcoming The Computer Journal column (due out any day). That article, and the one for the next issue, have all kinds of information on configuring Z-COM to your liking. (Jay Sage) 2. Error Handling 04/19/87... When an error handler is invoked in ZCPR33, it now knows more than the simple fact that an error has occurred. A flag in the message buffer can give it some clue, and advanced error handlers will be able to suggest to the user what might have caused the error (e.g., a bad number, an incorrect password, an ambiguous file name). Because of the way this is implemented, ERRORX will have to be modified slightly. The byte at Z3MSG+0 is now the error code; the byte at Z3MSG+10H is used to indicate the presence of an error handling command line. (Jay Sage) 04/21/87... There is an additional change in the code that allows a further hook into the error processing. Bits 3..7 in the command status flag can now be used by a program that is forcing error handling by setting bits 1 (error) and 2 (ECP) to indicate more specific information about the type of error. In the process of checking this out I discovered a defect in Z3LIB. The QERROR routine, which is supposed to check the error bit (bit 1), does not return the correct value if other bits are also set. This will have to be changed if the new hook is used, otherwise error handlers will mistakenly think they have been invoked directly by the user when in fact they have been called on by the command processor. This is another example of somewhat careless coding in the library routines. Fortunately, these are being gone over thoroughly by another member of the new Echelon team. (Jay Sage) 04/28/87... Another feature is an experiment with allowing error handlers to work with submit jobs. In the past, any error in a submit job resulted in an abort of the entire procedure. The one problem with this is that I do not know how to handle input redirection from XSUB. We really need a new XSUB that will respond to a flag in the way ZEX does, so that input redirection can be turned off by the error handler to allow the user to take over. Does anyone have any suggestion on this point? Has anyone ever seen a public-domain version of XSUB with source code? Would anyone like to write one? Could the code in ZEX be adapted to this purpose? (Jay Sage) 04/29/87... Z33ERR03.LBR is an example of an advanced error handler. When entered as a manual command by the user, it installs itself including an explicit directory prefix. It uses the facility in ZCPR33 that allows a program to determine not only its own name but also where along the path it was actually located. When running as an error handler, it gives a very complete error and system status report. It can tell whether ZEX and/or SUBMIT are running and allows them to be aborted. It can tell whether the error invocation came from the command processor (including ECP) or from an external program (RCP, FCP, or transient), and it can tell what kind of error occurred. (Jay Sage) 3. Fixup of SUBMIT processing 04/19/87... It seems to me that SUBMIT must not have always worked in ZCPR30 (I never implemented SUBMIT, so I don't know from experience). In ZCPR33, user area 0 is logged in when $$$.SUB is searched for (and when the disk system is reset -- otherwise the SUBMIT clue is not properly returned in the A register -- the DOS knows which user number a file with a '$' was created in). I would appreciate any comments from people who use SUBMIT under ZCPR3. (Jay Sage) 04/20/87... I knew that SUB.COM wrote the $$$.SUB file to A$: -- that was the only way anything would work before. That would just have to be changed, an effort well worthwhile if it will give a full powered SUBMIT facility. Improper transferring of the command from the file to the multiple command line surprises me. I did not make any intentional changes to that code. Perhaps I changed a subroutine that has an effect on that routine. (Jay Sage) 04/21/87... I have now established beyond doubt what I have suspected for several days: ZRDOS (at least all relatively recent versions) ARE NOT BDOS COMPATIBLE! The flag that is supposed to be returned on a disk reset if there exists any file with a '$' character in its name or type in drive A and the current user DOES NOT WORK WITH ZRDOS. I have, therefore, removed the code based on that flag from the command processor. SUBMIT now works correctly, and, in fact, operations do not appear to be noticeably slower. (Jay Sage) 04/23/87... I finally had a chance to fully test the new SUBMIT code -- it worked like a charm. How nice it was to see the submit job taking one into all kinds of directories. User numbers are no longer restricted! Change them freely inside a submit job. If you have a RAM disk that is initialized by the cold boot code, you can even set up Z33 so that the $$$.SUB file goes to the RAM disk for super fast operation (I didn't test that, however). (Jay Sage) 4. Extended GET Command 04/08/87... Why does it not work to load an RCP with the GET resident command and the appropriate address for your system's RCP? This would eliminate the need for LDR under some circumstances. (Bob Walsh) 04/08/87... GET uses the CPR loader code, and that code, quite rightly has safeguards to make sure that it does not overwrite the operating system. In ZCPR33 this code has been improved to protect even resident system extensions (RSXs) that install themselves beneath the command processor. Your comment gives me the idea of considering an additional command (perhaps called PUT or LOAD) that would function like GET but with the safeguards turned off. Or perhaps they should be turned off for GET all the time. Or, perhaps they should be turned off if the starting load address is already above the BIOS entry page. I would appreciate any comments from users on this matter. (Jay Sage) 04/12/87... Thanks for the explanation about the GETting of an FCP or RCP. I think that a separate command to be able to load command packages as part of either the CCP or RCP would be great. This would allow use of GET without wheel protection and still wheel protect a LOAD (my preferred name) command. Addition of this capability would be of great benefit to those of us still running ZCPR3 with a f loppy drive-based system. (Bob Walsh) 04/18/87... It did not seem right that GET could not be used to load code modules into high memory. An unlimited GET option in ZCPR33 thus allows GET to load stuff ANYWHERE, even if it is suicidal. It replaces LDR very nicely, and I have written ARUNZ aliases called NDR, RCP, and FCP that load a module. The simple command "RCP SYS" loads SYS.RCP. (Jay Sage) 5. Command Line Parsing 04/28/87... The latest ZCPR33 feature is a defined entry point to the command line parsing code in the command processor. This allows any other program to use the parsing facilities of the command processor. Not only does this save the program probably almost a K of code, it also guarantees that the parsing will be done in a consistent way (whether to accept DU and/or DIR forms, if both which one first, whether and under what conditions to check passwords, etc.). I have already written a transient SAVE.COM using this feature. (Jay Sage) 6. NEW RCP 'H' command 04/12/87... I see that the RCP 'H' command can now get at the FCP header. I assume that this is something new for ZCPR33. My question is: will there be a new RCP package released with it? (John Lorimer) 04/14/87... Yes, there is a new RCP (Z33RCP). Making the 'H' command show the FCP commands is not at all difficult. Just look at the code for displaying the CPR commands and repeat it with the pointer set up for byte 5 of the FCP. (Jay Sage) 7. Z33 with RCP145 05/14/87... If you are trying to use ZCPR33 with the old experimental RCP145, there is a change that must be made to the code for the 'H' command. The beginning of the command dispatch table in Z33 is different from that in ZCPR30 (and it will be changing again with the next release of Z33!). In version 13, the offset is 15 instead of 6. If you look for the line of code reading LD HL,CCP+6 (or CCP plus something) and change the offset to the proper value, the 'H' command will work. (Jay Sage) 8. USER and DRIVE Stored in Message Buffer 04/19/87... 'User' and 'drive' are now stored in the message buffer. This allows programs like CD and ZFILER to change the logged directory without the disk reset that could not be avoided in ZCPR30. As a side effect, logging into user numbers above 15 became possible, but some programs become obnoxiously unhappy when they find themselves logged into high user areas. Eventually this problem can be fixed, I think, and the high user option could become useful. (Jay Sage) 9. FCB's with Bad DIRs 05/12/87... ZCPR33 is actually better and more consistent than ZCPR30 in this respect. Here is the specification for the FCBs built by the Z33 parser: 1. If no DIR prefix (DU:, DIR:, or just :) was present, the drive byte is set to 0 2. If any DIR prefix was present, the drive byte is set to something 3. If the DIR prefix was valid, the drive byte is set to the corresponding drive 4. If the DIR prefix was invalid, the drive is set to the current drive AND the record count byte (offset 15 in the FCB) is set to FF as a flag to show the error This scheme is not the same as with ZCPR30, but it has absolutely no ambiguity. A program can tell exactly what the story was. That is how the resident commands know to invoke the error handler now on an invalid drive reference instead of just operating on the current directory. (Jay Sage) 10. Improved BADDUECP option 04/19/87... In ZCPR33 the ECP is invoked only on faulty attempts to change directories. A verb with a bad directory spec will go straight to the error handler. (Jay Sage) 11. DUOK flag 05/11/87... The only things that I can find with ZCPR33 is that it doesn't always like to find drive/user areas that do not have a name. ZCOM has to have the first 2 jumps as JP's instead of JR's, other than that everything seems to be all right. (Bob Peddicord) 05/14/87... I can only guess at what you meant by Z33 having trouble recognizing DU references unless they referred to directories with names. Most likely, you have your system set up to control acceptance of the DU form with the DUOK flag in the environment. If that flag is on, then any DU form that refers to drives and users within the max-drive/max-user range will be accepted. If the DUOK flag is off, however, then the command processor is in effect translating DU references into DIR forms. Consequently, the only DUs that will be recognized will be those that have corresponding named directories. This is a very important feature of ZCPR33 that permits it to be used in a named-directory-only secure system but still let the user employ DU references. This topic will be covered in detail in the ZCPR33 User Guide. 12. Type-2 environments 05/14/87... After the issue was raised about type-2 environments, I looked at the code again. It seems to me that it would take 6 extra bytes to take! care of this special case. Just after the CALL Z3CHK preceeding the NOINSTALL: label, I would add LD A,(HL) ; Get the ENV type CP 2 ; If it is type 2 JR Z,NOINSTALL ; ..do not install Before, I felt that this was a waste of six bytes since NO ONE ever uses programs with type-2 environments. Now I am wondering if I should reconsider. One of my stated design goals with Z33 has been reliability, and in this respect it is not reliable. A conscious decision was made not to support type-2 environments in Z33, and that fact is covered explicitly in the ZCPR33 User Guide. In general, Z33 is designed as an advanced Z System command processor, and it dropped support for many of the simpler implementations of ZCPR. For example, the external stack, external command FCB, multiple command line, external environment, and message buffer are all required now. This, by the way, is the very first time I have ever heard of anyone using a ZCPR3 program with a type-2 environment. Here is the fix I would suggest. Remove the 'Z3ENV' header in the file (I would just patch it to lower case 'z3env'). Then the command processor will treat it as an ordinary CP/M program, which is really what it is. (Jay Sage) 13. Use of M80/L80 on Z33 05/12/87... As to the use of M80 on Z33. I do it. You gotta examine the statements having "[" and "]" and rewrite them to M80-ese. You ALSO must change the FORMAL names in the macros to 6 chars in order to use M80. For example, in the COMMAND MACRO shorten cmdname to CMDNAM, enableflag to ENABLF, etc. M80 likes the object of the MACLIB statement to be in UPPER CASE, so the 3 MACLIBS in Z33 gotta be changed to upper case. In the HDR file the EXTMPATH and EXTMPATHADR equates need to be changed from EQU to SET or DEFL to satisfy M80 (actually, it's a small bug, but apparently SLR and ZAS ignore the fact that numerics defined via EQU shouldn't be redefined. M80 is not so forgiving!) This makes M80 like it pretty much. I don't use L80 to load Z33. I use my own homebrew RMLOAD program. Works like MLOAD but for REL files (in some respects it's like SEGLINK). One can make a "fixed" binary image of a rel file or (if they're clever) use RMLOAD to overlay ZCPR33 (or any other .REL over their sysgen image). Works ok for "fixing" type 3 env programs, too. My research shows that L80 won't make a COM file 2k long containing only the ZCPR33 binary. I thought the /N:P control would do it, but it won't. (Roger Warren) 14. ZCPR 3.3 on Apples 04/20/87... I will prepare a package for Applicards and have it ready for release as soon as 3.3 is ready to go. This will include all the .SUB files to make it simple for Apple guys. I contend that Apple and Commodore 128 owners are the most logical CP/M converts so we should help them! (Jim Lill) 15. Some of the Thrills of Beta-Testing 04/20/87... The only bug I've seen, and it's not really a bug, is that if you have a long command line and it goes to the ECP, the CR alone followed by the opening display from the ECP, in my case LRUNZ03, does not "cover-up" the command line, leaving part of the original command line following the ECP stuff. (Jim Lill) 04/21/87... When PWCHECK was turned off, the resulting code had more pushes than pops and resulted in the usual strange and upredictable behavior. This bug was a hard one to find, especially since I thought it was a SUBMIT problem. I am actually lucky I did not wipe out the hard disk, since for a while it was not possible to boot, and I thought files had been destroyed. The trouble was actually that I was trying to EXECUTE the named directory module! (Jay Sage) 04/23/87... The problem, as I suspected was the most likely culprit, stems from the fact that CURDR is in the range 0..15 and TEMPDR is in the range 1..16. Hence the simple fix was to change the code in SCANNER from LD BC,(CURUSR) LD (TEMPUSR),BC to the following: LD BC,(CURUSR) ; Get current drive and user into BC INC B ; Shift drive into range 1..16 LD (TEMPUSR),BC ; Set temporary drive and user Since the drive is always put into the FCB explicitly, there is no need for the LD (DE),A at the beginning of SCANNER. The code comes out even. (Jay Sage) 04/23/87... On the problem in READBUF, there is not really anything the CPR can do about that. We simply have to document the fact that the proper number to use in Z3BASE.LIB for Z3CLS is the number of bytes for actual characters in the command line buffer. (Jay Sage) 04/25/87... The REL option doesn't throw an error in ZAS when the CCP is too big (my configuration turned out to be precisely ONE byte too large!). *ACTUALLY* the expression $ gt CCP+800H is NOT a valid relocatable arithmetic expression when in the REL mode ($ is REL, CCP is absolute. M80 throws an error! Zas doesn't! Of course, this "is REALLY a ZAS bug, but the coding should bomb on any respectable assembler.) Anyway, I humbly suggest that the line be changed to legal expression like: If [$-entry] gt 800h This should flush in REL or ABS mode. (Roger Warren) 04/25/87... You are, of course, quite right about the REL bug. When I started the work I did not even consider that anyone would make a REL file out if it. The other problem (LD B,HIGH ENTRY -1) has been taken care of. I will change the code to read IF [ $ - ENTRY ] GT 800H. That is much clearer also. (Jay Sage) 04/26/87... I have been using Z33 for about a week now and have experienced a few 'new features'... When logged on E1:, I gave the command: nulu bghist -f The system gets as far as the opening sign-on for NULU, and hangs up. I was able to repeat this, and it is no fluke. If I boot Z3.0, no problem occurs. The path is set to A0:, A14:, A15:, with NULU.COM in A14:. Further investigation has shown that it does not seem important how nulu is invoked, ie., I can load nulu while logged into A0:, without a command tail, and all goes well. I can (L)og directly to E1:, still with no problem. But, when I (O)pen any library on E1:, it puts garbage on the screen, and locks up the computer! This is absolutely 100% repeatable, and never occurs with my older Z3 system running! I'll be glad to pursue it further if you have anything specific in mind. (Steve Hirsch) 05/07/87... I will have to think about whether there is any reason to have separate file types for the ECP and general executable code. I considered it briefly before but then forgot about it. I see no reason, however, not to save the code. (Jay Sage) 05/07/87... On the PKGOFF code, YOU CANNOT ASSUME THAT MODULES BEGIN ON EVEN PAGE BOUNDARIES. In all of Conn's examples, they happen to do so, but there is nothing that I know of in the specifications that requires page alignment. That is why I wrote that code the way I did. The saving in code is not worth the possible incompatibility. (Jay Sage) 05/08/87... Originally there were only two possible calls to PKGOFF, and thus the code came out the same length either way (you are saving one byte in each invocation but adding two bytes to the routine). Now it is called, I believe, in four places. (Jay Sage) 05/08/87... There are code efficiency reasons for the way the FASTECP feature works now. Since many have raised the issue, I will put in some options to allow and/or require another special character for direct ECP invocation. I think I have all the code worked out, but I have not had the chance to put it in and test it. At this point, finishing the documentation is more important. For the future there are many other things one would like to see done with the command interpretation. I would like to see the ECP take precedence over transient command searching, and it would be nice to have variable parsing on the command line (a la RESOLVE/GETVAR). But we have to draw the line somewhere with 3.3. There will be a 3.4! (Jay Sage) 05/08/87... In the latest version, passwords can be made not to echo to the screen, an alternate character can be used as an alias or as a replacement for a leading space, operation of SUBMIT has been cleaned up, the code has been shortened further, and ability to use directory prefixes with commands (DRVPREFIX) can be under control of the wheel byte. (Jay Sage) 05/09/87... I prefer the system that uses the space as the FASTECP character because 1) it is the easiest key to hit (and I have more aliases than standalone commands at this point) and 2) it is compatible with BGii version 1.13 (of course, maybe Bridger Mitchell will be able to make some further changes to BGii to make it more like Z33). (Jay Sage) 05/12/87... In working with Al Butler to get Z33 up on his Morrow MD3, I discovered two problems related to having no elements in one's symbolic path. Both the command processor code and the code in ARUNZ assumed that if a path was defined in the environment it always had something in it. Of course, this need not be the case. The command processor has now been fixed to generate a rootpath of A0 in this case, and ARUNZ has been fixed to use the hard-coded DU value. (Jay Sage) 05/13/87... The semi-capable ZCPR 3.0 user should be warned about trying to use type 3 ENV programs under ZCPR 3.0. ATTEMPTING to "install" a program with a type 3 environment (via Z3INS [version 1.3]) *WILL NOT* work! (I got burned when trying to make ARNUZ09C runnable under ZCPR 3.0. I "fixed" the file at 100h, but the INSTALL garbaged the file!). Apparently Z3INS (v 1.3) handles type 1 and "NOT 1", and, therfore, a type 3 program that is "fixed" to 100H is not INSTALLABLE by Z3INS... Z3ins treats the type 3 as a type 2 - and overlays the code with the ENV descriptor. (Roger Warren) 05/14/87... Thanks for pointi#ng out the problem with Z33 in Z-COM. I had tested it with Z-COM but only in the warm-install mode. Indeed, it will not work cold-installed in its present form. Only the first jump, by the way, has to be absolute. This is because Z-COM uses that jump to figure out where to load the CCP and to jump there to start processing. This could have been done quite differently, and I could have taken the position that Z-COM should be changed. However (besides the fact that I would not want to do that), I realized that it is quite valuable to be able to tell by examining the CPR image where it is intended to run (this is like an extra option byte containing the CPR page address). (Jay Sage) ndles type 1 and "NOT 1", and, therfore, a type 3 program that is "fixed" to 100H is not INSTALLABLE by Z3INS... Z3ins treats the type 3 as a type 2 - and overlays the code with the ENV descriptor. (Roger Warren) 05/14/87... Thanks for pointi This is the release date of the disk. ASSEMBLYNOT ZCPR33 NOT cCPR33 NOT #-PEARRE .X06 00 00 0 0 ASSEMBLY.NOT DF 01 4352 34 ZCPR33 .NOT 37 A7 25344 198 ILL ONLY MAKE IT WORSE. FEATHERKILE'S RULE WHATEVER YOU DID,THAT'S WHAT YOU PLANNED. FLAP'S LAW ANY INANIMATE OBJECT,REGARDLESS OF ITS POSITION,CONFIGURATION OR PZMOOX03 ZZ01Z[LX COMSALIAS COM@SDZ COM/ Fog Library Disk FOG-CPM.205 Copyright (1989) by Fog International Computer Users Group to the extent not copyrighted by the original author for the exclusive use and enjoyment of its members. Any reproduction or distribution for profit or personal gain is strictly forbidden. For information, contact FOG, P. O. Box 3474, Daly City, CA. 94015-0474. as part of the description of a file indicates that the program is distributed on a "try first, pay if you like it" basis. If you find the program(s) meet your need, please refer to the author's documentation for information on becoming a registered user. Only by registering and paying for the programs you like and use will the authors of such programs continue development. Often, more complete documentation, additional modules, and new releases are available only to registered users. Disk 1 of 4. ZCPR 3. The ZCPR on these disks is the last public domain version. For future enhancements, you must buy the commercial version (NZ-COM for CP/M 2.2 systems or Z3PLUS for CPM+ systems). These are available from Z Systems Assoc., 1435 Centre Street, Newton Centre, MA 02159. A large discount for the commercial versions is available to members of user groups who apply for the group discount. Filename Description -03-09 .89 This is the release date of the disk. -CPM205 .DOC This is the description of the disk contents. Z33DEFN .LIB 27C7 2K ver. 3.3 [ZCPR 1 of 25] The last public domain version. Included here are programs, installation instructions and a workbook, etc. Some of the documentation was written for version 3.0 but applies to this version. Z33HDR .LIB 372E 22K ver. 3.3 [ZCPR 2 of 25] Z33HDR1 .LIB 05EE 4K ver. 3.3 [ZCPR 3 of 25] Z33HDR2 .LIB 6563 4K ver. 3.3 [ZCPR 4 of 25] Z33HDR3 .LIB 671E 4K ver. 3.3 [ZCPR 5 of 25] Z33HDR4 .LIB DC18 4K ver. 3.3 [ZCPR 6 of 25] Z33HDR5 .LIB 6785 4K ver. 3.3 [ZCPR 7 of 25] Z33MAC .LIB 18BB 4K ver. 3.3 [ZCPR 8 of 25] Z3BASE .LIB 71EE 7K ver. 3.3 [ZCPR 9 of 25] ZCPR33 .ZQ0 0ED7 74K ver. 3.3 [ZCPR 10 of 25] ASSEMBLY.NOT DF01 5K ver. 3.3 [ZCPR 11 of 25] ZCPR33 .NOT 37A7 25K ver. 3.3 [ZCPR 12 of 25]  05EE 4K ver. 3.3 [ZCPR 3 of 25] Z33HDR2 .LIB 6563 4K ver. 3.3 [ZCPR 4 of 25] Z33HDR3 .LIB 671E 4K ver. 3.3 [ZCPR 5 of 25] Z33HDR4 .LIB DC18 4K ver. 3.3 [ZCPR 6 of 25] Z33HDR5 .LIB 6785 4K ver. 12] tem Assoc. 143 Centr St Newto Centre M 02159 health discoun i availabl t member o club wh appl fo membe discount. Z33HDR .LIB 37 2E 22144 17 [ZCPR3 o 12] Z33HDR1 .LIB 05 EE 3584 2 [ZCPR3 o 12] Z33HDR2 .LIB 65 63 3456 2 [ZCPR3 o 12] Z33HDR3 .LIB 67 1E $This is the disk name. CPM22005APP CPM22006APP CPM22007APP  CPM22008APP CPM22009APP # CPM22010APP & CPM22011APP *3CPM22012APP 7CPM22013APP 9CPM22014APP <CPM22015APP CCPM22 PAT I3%&'