.cw 11 .po 11 ***************************************************************** * Z-Node Configuration * * * * by David McCord, SYSOP, the ZCPR3 BBS * * * * (415)489-9005 24 hrs. 300/1200 * * * * Date: 27 Feb 1985 * * * ***************************************************************** .pa .he Z-Node Configuration Introduction Philosophy A Z-Node is an expression to the world. It says, "Eight bit is not dead!" Such is our rallying cry. Personally I agree; and I do what I can to promote eight bit. It is my hope that there are many more like me with their Z80 and Hitachi microprocessors. Personally, also, I dislike what IBM has done to the microcomputer environment. The intellectual stagnation and "me- too"-ism is painful for me to see. The major shame of what IBM has done, in my opinion, is to make micros mediocre. With the potential power of their machine, they settled on MSDOS...what a kludge it is! ZCPR3 beats the pants off of it in every conceiveable aspect (except hierarchical directories). So, in conclusion, I want people to realize that there are alternatives. Z-Nodes are an excellent way of promoting those alternatives. This document is on the topic of how to bring up a Z-NODE. I basically have taken the approach of documenting how my system is configured, hoping that you will follow in my footsteps. Please remember as you read through this document that most of what I present may always be modified or changed as necessary to suit your needs; and that this document is a guide, not a dogmatic treatise. Feel free to vary from what I have said herein wherever and whenever you find something that works better. I can only give a small amount of advice regarding being a sysop (SYStem OPerator) to those of you who do not have the experience. The first, and most important, rule is to remember that you are responsible for everything that occurs on your remote access computer. So, right at the outset you will need to have a decision made as to whether you will be running an open system (anyone can access), or a closed ("registration") system. My personal preference is an open system because I feel that a remote access computer system has intrinsic worth to the community, and that worth is greatly diminished when the public as a whole can no longer access it. But there are certainly many sysops who can tell you horror stories about ill-mannered users, and how they think registration is "the only way to go". Bottom line: you are legally reponsible for what happens on your Z-Node. Installation Overview At present, TERM3 and EMSG are not available. Therefore, it is necessary to use some of the old RCP/M programs on your Z-Node until they can be replaced with their ZCPR3 equivalents. The old RCP/M software we will use includes BYE and XMODEM. If a message system is to be used until EMSG is available, I suggest the METAL message system. However, anything you find acceptable is OK as an interim solution. A suggested plan of attack is to install things in the following order: - ZCPR3 (manual or auto install) - ZRDOS - BYE - XMODEM - SD (renamed DIR) - TYPEL (renamed TYPE) Throughout this document, I will be listing assembly-time options for each program under discussion. .pa Files Required You will need the following files to duplicate my system. The files you need are usually available on larger RCP/M's or Z- Nodes. A recommended minimum: - BYE329.ASM (BYE program) - A BYE insert for your machine. Sometimes incorrectly called a BYE "overlay". - XMDM105.ASM (XMODEM program) - An XMODEM overlay for your machine. - TYPEL36.COM (TYPE, LTYPE program) - SD97.ASM (DIR program) - PWD11 (Modified to be used with BYE) - A Z3BASE.LIB file OR a Z3ENV.LIB file for assembly of BYE329 (support of initializing Z3 segments) - The MAC or ZAS assembler - MLOADxx.COM - A message system such as RBBS, METAL, et. al. - And, of course, ZCPR3 and ZRDOS Version numbers are not absolute: subsequent versions should be acceptable. Previous versions may require extensive modifications. All examples of assembly time options are extracted from the versions listed above: other versions may vary. .pa Notes on ZCPR3 for Z-Nodes DU: Disabled Operation The distinguishing characteristic of a Z-Node is that it does not recognize the DU: form when in the operating system. Although I have heard of systems where they have managed to keep the DU: form (security is enforced by non-ZCPR means), I recommend that you use the DIR: form only. This is because TERM3 and EMSG will expect this to be the way system security will be enforced. One of the things that can make using named directories much easier is a terminal (or software emulation) that has programmable function keys. This is very convienent for responding to the PW? prompt when logging into a passworded directory, just hit one key to enter the password and that's it! Function keys are also very useful in invoking ALIASes, and if your function keys are programmable, then DPROG.COM will give you flexibility in redefining them. For instance, use one set of definitions for use with the Z-Node, and another for WordStar, another for WordMaster, another for MEX, etc. Manual-Install ZCPR3 Options (Users of Z-Com can skip to the next section.) The following options should be duplicated in your Z3HDR.LIB file if you are using the manual-install version. People using Z-Com can skip this. COMTYP MACRO DB 'COM' ENDM SUBTYP MACRO DB 'SUB' ENDM SUBON EQU TRUE DRVPREFIX equ TRUE COMATT equ 01H DIRON equ FALSE ;DIR COMMAND LTON equ FALSE ;LIST, TYPE COMMANDS GOON equ TRUE ;GO COMMAND ERAON equ FALSE ;ERA COMMAND SAVEON equ TRUE ;SAVE COMMAND RENON equ FALSE ;REN COMMAND GETON equ FALSE ;GET COMMAND JUMPON equ FALSE ;JUMP COMMAND NOTEON equ FALSE ;NOTE COMMAND IF Z3WHL NE 0 ;IF A WHEEL BYTE ADDRESS IS DEFINED WERA equ TRUE ;Make ERA a Wheel-Oriented Command WREN equ TRUE ; " REN " " " " WLT equ TRUE ; " L/T " " " " (LIST/TYPE) WGO equ TRUE ; " GO " " " " WSAVE equ TRUE ; " SAVE " " " " WGET equ TRUE ; " GET " " " " WJUMP equ TRUE ; " JUMP " " " " WDU equ FALSE ; " DU: " " " " (DU/DIR Change) WHEEL equ WERA OR WREN OR WLT OR WGO OR WSAVE OR WGET OR WJUMP OR WDU ENDIF ;Z3WHL ERAOK equ FALSE ERAV equ FALSE ERDFLG equ 'V' PGDFLT EQU TRUE PGDFLG EQU 'P' NLINES EQU 24 SECTFLG EQU 'S' MINPATH EQU TRUE SCANCUR EQU TRUE INCLDU equ TRUE ACCPTDU EQU FALSE NDINCP EQU TRUE INCLNDR EQU TRUE ACCPTND EQU TRUE DUFIRST EQU FALSE PWCHECK EQU TRUE CMDSEP equ ';' CMDRUN equ FALSE ; Enable the Facility IFON EQU TRUE MAXUSR EQU 31 ;MAXIMUM USER NUMBER ACCESSABLE MAXDISK EQU 3 ;MAXIMUM NUMBER OF DISKS ACCESSABLE SUPRES EQU FALSE ;SUPRESSES USER # REPORT FOR USER 0 SPRMPT EQU '$' ;CPR PROMPT INDICATING SUBMIT COMMAND CPRMPT EQU '>' ;CPR PROMPT INDICATING USER COMMAND NUMBASE EQU 'H' ;CHAR USED TO SWITCH FROM DEFAULT NUMBER BASE CURIND EQU '$' ;SYMBOL FOR CURRENT DISK OR USER COMMENT EQU ';' ;LINES BEGINNING WITH THIS CHAR ARE COMMENTS And don't forget to turn on the wheel check options for the commands you select in Z3HDR.LIB! .pa ZCPR3 System Segments The following discussion about system segments applies only if you are using them. All RCP's, FCP's, and IOP's are optional at this point in time. SYSENV.LIB Your system's environment descriptor should have the "don't accept DU: option enabled. The Z3 utilities will then read this and ignore the DU: form. RCP For folks that are doing a manual-install version of ZCPR3, an RCP that I believe was intended for use under a remote system is found in SYSRCP3.LIB. This will require practically no modification to be used in the secure environment, as all of the commands contained in it respond to the wheel byte. My associate, Joe Wright, suggests that you disable the WHL command that is enabled as the default. FCP At present I am using SYSFCP1.LIB as the system's FCP. I have not as yet discovered a good use of the FCP for remote callers, but I find it useful in some sysop-oriented tasks. IOP There is not an IOP implemented on Z-Node Central at this time. I see no use for it, either. (of course, the AMPRO box I use doesn't have a lot of ports, that's why I'm not using an IOP) .pa Notes on BYE Getting BYE running will probably be the most challenging task involved in getting your Z-Node going. However, it is not any easier under standard CP/M either! BYE329 or later (Sorry, I can't comment on MBYE, don't know anything about it or any other BYE versions) is recommended because it has special support for the ZCPR3 segments that should be initialized when a new caller comes on or BYE terminates. See my document Z3&BYE#2.DOC for further information on the subject of modifying BYE for ZCPR3 if you do not intend to use BYE329 as BYE.COM on your system. BYE Overlay The BYE3xx.ASM file is not complete. This means that if you try to assemble it, you will get a lot of assembly errors. What must be done is a BYE "overlay" must be INSERTED INTO THE BYE3xx.ASM FILE. Use a word processor to do this. If you scan down about a third of the way into the BYE3xx.ASM file, you will find a section labeled "Insert your modem routines here". Using a command to read from a file (like WS ^Kr, or WM y commands), insert the bye "overlay" file at that point. The BYE overlay contains options for selecting which baud rates your system can support. It also contains the code necessary to do software changing of baud rates if you will be supporting more than one speed. Generally speaking, there are overlays available for most computers, but in case you need to make up one of your own, you'd better have the tech manuals for the I/O ports of your machine available. BYE Options BYE329 has about a million assembly-time options that you must have set properly. Some of these may vary from what I have shown below. Please note that my system is set up for use with a non-intelligent modem. Many of you will have to change this. BYELOW EQU YES ; Yes, for BYE3 below CCP; no for above BIOS RAMTOP EQU 0FFFFH ; Last available RAM if BYELOW is 'NO' CCPL EQU 8 ; Number of sectors for CCP size (norm=8) IMODEM EQU NO ; Yes, for intelligent modem, including Hayes B2400 EQU NO ; Yes if your modem supports 2400 baud. Leave ; as EQU until more port I/O inserts catch up DEBUG EQU NO ; Yes, to see helpful info while debugging IOVAL EQU 0 ; Initial value for IOBYTE (only if MINICK YES) OXGATE EQU NO ; Yes, running OxGate RCPM-BBS system RBBSCK EQU NO ; Yes, running RBBS - sets/resets 'WRTLOC' flag MINICK EQU NO ; Yes, running MINICBBS TIMEON EQU NO ; If YES, add your clock reader code at the ; Start of label TIME: and store binary values ; in CHOUR and CMIN RSPEED EQU NO ; Yes, if restricting primetime to a min. speed ; (a clock read routine is required if YES - ; See TIMEON) IF RSPEED OR TIMEON ; Use these bytes in low memory LHOUR EQU 050H ; Set by BBS (or BYE) in binary LMIN EQU 051H ; When user logs on STATUS EQU 053H ; And his status MAXMIN EQU 60 ; Minutes for maximum time allowed on system. ; This should be set to 60 if TIMEON is YES ; (255 minutes maximum.) ENDIF ; RSPEED OR TIMEON IF RSPEED ; 24 hour clock-- 00 = midnight, 23 = 11PM HOUR1 EQU 19 ; Start of prime-time (19=7:00 PM) HOUR2 EQU 23 ; End of prime-time (23=11:00 PM) SPEED EQU 5 ; Minimum speed accepted (5=1200 baud) Change ; OFFMSG to match your times, baud rate and ; time zone. OFFMSG is a message at code end ENDIF ; RSPEED ALLDEV EQU NO ; Yes, retain PUN: RDR: and LST: devices CALLBAK EQU NO ; Yes, allow callback feature COMFILE EQU YES ; Yes, chain a .COM file upon carrier reception DECIMAL EQU NO ; Yes, decimal value for userlog DUAL$IO EQU YES ; Yes, console/modem linked together EXFILE EQU NO ; Yes, chain a .COM file upon loss of carrier FKEYS EQU YES ; Yes, local console has special function keys HARDLOG EQU NO ; Yes, echo remote input to printer PRINTER EQU NO ; Yes, retain list device PRNTGB EQU YES ; Yes, print "Goodbye..." message PRNTWB EQU NO ; Yes, print a string for each warm boot PWRQD EQU NO ; Yes, password needed to login RKEYS EQU NO ; Yes, remote console has special function keys TIMEOUT EQU YES ; Yes, auto logout for sleepy callers TOVALUE EQU 5 ; Minutes to auto logout USRLOG EQU NO ; Yes, count number of users WBRTN EQU NO ; Yes, do function each time system warm boots BLKOUT EQU YES ; Turn off remote send BLNKKEY EQU 'B'-40H ; Keycode to "blank out" remote terminal CCSDISK EQU NO ; Yes, CCS disk controller CLOSS EQU 1 ; If carrier dies, wait 1 sec. before hanging up COMDRV EQU 'A' ; Drive to look for .COM file on COMUSR EQU 14 ; User # of .COM file to be called after answer CPM2 EQU YES ; Yes, using CP/M 2.2 CTRLC EQU 'K'-40H ; Map ^C to this charactero CWAIT EQU 20 ; Wait up to 20 seconds for carrier at first EXDRV EQU 'A' ; Drive to look for exit .COM file on EXUSR EQU 15 ; User # of .COM file to be called upon exit IMSAI EQU NO ; Yes, if using IMSAI computer with front panel LOSER EQU NO ; Yes, warm boot overwrites part of the BIOS LXID EQU 11H ; Define byte of LIX D,nnnn to fake loader LXIH EQU 21H ; Define byte of LXI H,nnnn to fake loader MHZ EQU 4 ; Processor clock in MHz MSGKEY EQU 'W'-40H ; Keycode to print "Message from SYSOP: " MSPEED EQU 003CH ; Baud rate pointer NORING EQU YES ; Yes, UART ring indicator NOT available SELPASS EQU NO ; Require a password SENSE EQU 0FFH ; Sense switch port number SYSDKEY EQU 'O'-40H ; Char. to print "System going down in 5 min.." TWITKEY EQU 'N'-40H ; Keycode to hangup modem manually WELFILE EQU YES ; Yes, to send a WELCOME file WELUSR EQU 14 ; User # of WELCOME file ZILOG EQU YES ; Yes, using a Z-80 or Z-800 ZCPR2 EQU NO ; Yes, if running ZCPR or ZCMD2 or ZCMD or ZCPR ZCPR3 EQU YES ; Yes, if running ZCPR3 IF ZCPR3 MACLIB Z3BASE ; Requires MAC to assemble...otherwise enter ; constants directly..see label DOZ3 for ; required EQU's ENDIF ; ZCPR3 USEZCPR EQU NO ; Yes, if using ZCPR or BBS to set max drive ; And user # MAXDRIV EQU 003DH ; ZCPR lolcation of MAXDRIV byte WHEEL EQU 004BH ; Location of ZCPR's wheel flag MAXUSER EQU 003FH ; ZCPR location of MAXUSR byte MAXDRV EQU 7 ; Highest drive supported (2=B:) MAXUSR EQU 6 ; Highest user area SYSDRV EQU 7 ; Highest local drive supported (2=B:) SYSUSR EQU 15 ; Highest local user area (0-15) CHGPATH EQU YES ; Yes, if changing ZCPR's external path EXTPATH EQU 0040H ; ZCPR external path default location .pa BYE parameter block What follows is how the BYE parameter block looks in RAM. Because BYE relocates itself into high RAM at run time, you may find out where this block resides using the P(eek) RCP command. The key is the three characters "BYE" at the end of the block. ;----------------------------------------------------------------------- ; ; Here is a quickie handy reference table to use so we do not get mixed ; up. Please it in any future changes. ; ; |mxusr|mxdrv|toval|nulls|ulcsw|lfeeds|wrtloc|hardon|lostflg|covect| ; |1 byt|1 byt|1 byt|1 byt|1 byt|1 byte|1 byte|1 byte|1 byte |2 byes| ; ;----------------------------------------------------------------------- ; MXUSR: DB MAXUSR ; Runtime maximum user area available MXDRV: DB MAXDRV ; Runtime maximum drive available TOVAL: DB TOVALUE ; Number of minutes to wait before timeout NULLS: DB 0 ; Number of nulls after ULCSW: DB 0 ; Upper case only switch (32=upper case) LFEEDS: DB 0 ; Line feed mask (0=don't mask) WRTLOC: DB 0 ; Location RBBS pokes so bye doesn't hang HARDON: DB YES ; If 0, hardlog is de-activated LOSTFLG:DB 0 ; If non-zero, do not output to console COVECT: DW VCONOUT+1 ; Console output vector for XMODEM HDROFF EQU $-MCBOOT ; Offset to 'BYE' that follows DB 'BYE' ; Tells XMODEM that BYE is being used .pa Notes on XMODEM XMODEM requires that you overlay the program with a machine- specific overlay, very similar to MDM7xx or MEX. I have recommended XMDM105, but earlier versions are just as suitable. XMODEM Options The following is an example of how my xmodem options are set: MHZ EQU 4 ; Clock speed, use integer (2,4,5,8, etc.) CPMPLUS EQU NO ; Yes, if operating in CP/M Plus environment STOPBIT EQU YES ; Yes, if using 1 stop bit, no if using 2 ZCPR2 EQU YES ; Yes, if using N/ZCPR/1/2/3 with WHEEL byte WHEEL EQU 4BH ; Location of ZCPR wheel byte (normally 03EH) NOCOMR EQU YES ; Yes, change .COM to .OBJ on receive NOCOMS EQU YES ; Yes, .COM files not sent NOLBS EQU YES ; Yes, .??# files not sent NOSYS EQU YES ; Yes, no $SYS files sent or reported USEMAX EQU NO ; Yes if using ZCPR for DRIVMAX & USRMAX values ; No to use MAXDRV and MAXUSR specified next DRIVMAX EQU 03DH ; Location of MAXDRIV byte USRMAX EQU 03FH ; Location of MAXUSER byte MAXDRV EQU 7 ; Number of disk drives used MAXUSR EQU 8 ; Maximum 'SEND' user allowed BUFSIZ EQU 16 ; File transfer buffer size in Kbytes DESCRIB EQU YES ; Yes asks for a description of uploaded file DRIVE EQU 'A' ; Drive area for description of upload USER EQU 14 ; User area for description of upload BSIZE EQU 32*1024 ; Set for 16k, 32k or 48k as desired for DESCRIB LARGEIO EQU NO ; Yes, if modem patch area over 128 bytes LARSIZE EQU 0 ; If 'LARGEIO' set patch area size here LOGCAL EQU YES ; Yes, logs XMODEM transfers LOGUSR EQU 14 ; User area to put 'XMODEM.LOG' file LOGDRV EQU 'A' ; Drive to place 'XMODEM.LOG' file LASTUSR EQU 14 ; User area of 'LASTCALR' file, if 'LOGCAL' yes LASTDRV EQU 'A' ; Drive to read 'LASTCALR' file from OLDRBBS EQU YES ; Yes, look for 'LASTCALR' file - no, look for ; 'LASTCALR.DAT' file PRDRV EQU 'G' ; Private drive for SYSOP to receive file PRUSR EQU 15 ; Private user area for SYSOP to receive file RETRY EQU YES ; Yes requires a valid NAK to resend a record ; No resends a record after any non-ACK SETAREA EQU YES ; Yes, if using designated area to receive files SPCDU EQU YES ; Yes=upload to normal area even with wheel byte DRV EQU 'G' ; Drive to receive file on USR EQU 0 ; User area to receive file in SPLDRV EQU 'G' ; Special drive area for downloading SYSOP files SPLUSR EQU 15 ; Special user area for downloading SYSOP files TAGLBR EQU NO ; Yes tagged .LBR files not sent TIMOUT EQU 1 ; Seconds to abort after carrier loss USECON EQU YES ; Yes to get the original CONOUT address from ; BYE3 or MBYE-3. 'NO' to get the CONOUT ; address the value set in the XMODEM overlay. CONOFF EQU 15 ; Offset to COVECT where original console output ; routine address is stored in BYE3/MBYE ; versions immediately followed by BYE as a ; check to insure BYE is running. RTC EQU NO ; If YES, add clock and date reader code at ; start of GETTIME: and GETDATE: below TIMEON EQU NO ; If YES, add your clock reader code at the start ; of label GETTIME: and return time in regs A & B IF TIMEON AND NOT CPMPLUS ; Use these bytes in low memory LHOUR EQU 050H ; Set by BBS (or BYE) in binary LMIN EQU 051H ; when user logs on STATUS EQU 053H ; and his status ENDIF ; TIMEON AND NOT CPMPLUS IF TIMEON AND CPMPLUS ; Use these bytes in low memory LHOUR EQU 022H ; Set by BBS (or BYE) in binary LMIN EQU 023H ; when user logs on STATUS EQU 024H ; and his status ENDIF ; TIMEON AND CPMPLUS LOGLDS EQU NO ; Count number of up/down loads since login. ; Your BBS program can check UPLDS and DNLDS ; when user logs out and update either the ; user's file or a file for this purpose. ; You can either modify your BBS entry program ; to check the LASTCALR file before updating ; it and then update (risky), or make a sepa- ; rate program that BYE calls when logging ; off a user (preferred). IF LOGLDS UPLDS EQU 054H ; Clear these values to Zero from your BBS pro- DNLDS EQU 055H ; gram when somebody logs in. NOTE: Clear ; ONLY when a user logs in. Not when he re- ; enters the BBS program for CP/M. ENDIF ;LOGLDS MAXTIM EQU YES ; Yes if limiting transmission time MAXMIN EQU 45 ; Minutes for maximum file transfer time ; this should be set to 60 if TIMEON is YES ; (99 minutes maximum.) XMODEM Overlay XMODEM is overlayed by an XMODEM overlay, similar to MDM7xx and it's overlays. The overlay is assembled seperately, and then the object code is overlayed onto the main XMODEM program through the use of MLOAD or DDT/SID/etc. Both the main XMDM105.ASM file and most overlays contain instructions on how to do this. This overlay is very easy to work with, compared to BYE's overlay. .pa Notes on TYPEL Typel has a patch area near the front of the program that should be set appropriately for your system. This area should be patched with the max drive and user that a non-wheel user can access. See the .DQC file on TYPEL for further patch info. TYPEL should be renamed to TYPE.COM TYPEL Patches The following is an extract from TYPEL.DOC file: OPTIONS: TYPEL can be fully configured from the .COM file without need for reas- sembly. The following are the relevant patch locations: 0103 MAXDRV enter highest drive allowed PLUS 1 (A=2, B=3...) 0104 MAXUSR enter highest allowable user area PLUS 1 0105 MAXLIN enter maximum number of lines before TYPEL aborts, or enter 0 for no limit. 0106 MAXLPS enter number of lines on screen MINUS 1, or 0 for continuous display ($N command line option overrides the setting). 0107 LSTEN enables LST output. Set to 1 to enable LST op- tion (default) or set to 0 if LST undesired. 0108 SYSEN enables $SYS type. Set to 0 to disallow $SYS or to 1 (default) to allow $SYS. 0109 EJECTP enter number of lines per printed page or 0 if page eject is not desired. 010A ... The exclusion table starts here. Each entry has 3 bytes. A "?" denotes an ambiguous byte i.e., "OV?" matches "OVR", "OVL", etc. There is room for an additional 9 entries. If you wish to DELETE an entry, use DDT to set all high bits. .pa Notes on SD Sysops who will be running ZRDOS must use SD97 and subsequent versions. SD96 and previous will cause ZRDOS to crash if a command line option of D (all disks) is used. This is because SD96 and previous actually modify the Digital Research BDOS, something that is a big no-no, and is unnecessary under ZRDOS. Joe Wright modified SD to work properly with ZRDOS, beginning with SD97. SD is a oversized mess of spaghetti code that somehow manages to work very nicely. It is renamed to DIR.COM after assembly and serves as the system's DIR command. There are two major advantages of using SD instead of any of the many ZCPR3 DIR commands, 1) SD can display library file directories, and 2) SD supports BYE features that limit access to higher user numbers and disks. There is one disadvantage of using SD, in that it does not understand named directory references as the many ZCPR3 DIR commands would. So that's one disadvantage compared with two advantages, so that is why I recommend it. And when you get to the subsequent section of this document discussing useful ALIASes for use on a Z-Node, you will see how useful SD is. SD Options SD requires that you set a bunch of assembly-time options. There is also a table of drive/user areas that must be edited before assembly. The following options are what is used on my system: DIRCON EQU NO ; Yes for direct console output LOWCCP EQU YES ; Yes only if you are running with byelow [Note: the following equate must be set to the base page of your BDOS] BDOSPG EQU 0C8H ; Set properly if lowccp is yes CPM3 EQU NO ; Set to yes if running cp/m 3 or above TIMEON EQU NO ; If yes, add your clock reader code at ; Start of label time: and store binary ; Values in chour and cmin QUITE EQU YES ; Yes if "Time on System is xx minutes" suppressed IF NOT CPM3 CHOUR EQU 043H ; Some bios clocks keep time CMIN EQU 044H ; Here anyway LHOUR EQU 050H ; Set by bbs (or bye) in binary LMIN EQU 051H ; When user logs on STATUS EQU 053H ; And his status ENDIF ; Not cpm3 IF CPM3 CHOUR EQU 020H ; Some bios clocks keep time CMIN EQU 021H ; Here anyway. LHOUR EQU 022H ; Set by bbs (or bye) in binary LMIN EQU 023H ; When user logs on STATUS EQU 024H ; And his status ENDIF ; Cpm3 MAXMIN EQU 60 ; Minutes for maximum file transfer time ; This should be set to 60. (99 max) ZCPR2 EQU YES ; Yes if nzcpr/zcpr2 (wheel byte enabled) MAXUR EQU YES ; Yes if using maxusr in nzcpr/zcpr2 MAXDR EQU YES ; Yes if using maxdrv in nzcpr/zcpr2 MAXCL EQU NO ; Yes if storing mnpl value at maxc WHEEL EQU 4BH ; Set to wheel location if zcpr2 is yes ; Use 3eh if using nzcpr or zcmd ; Use 3bh if using unmodified zcprhdr file MAXU EQU 0B6D4H ; Set to max user location if maxur is yes MAXD EQU 0B6D5H ; Set to max drive location for maxdr=yes MAXC EQU 3BH ; Set to # of names per line location MXZUSR EQU 15 ; Maximum user # allowed whlusr=yes/wheel set WHLUSR EQU YES ; Yes to allow search 0-mxzusr if wheel set WHLA EQU NO ; Yes to disallow a option if wheel zero WHLC EQU YES ; Yes to disallow c option if wheel zero WHLCL EQU NO ; Yes to disallow 4,6 or 8 options if wheel = 0 WHLD EQU NO ; Yes to disallow d option if wheel zero WHLF EQU YES ; Yes to disallow f option if wheel zero WHLL EQU NO ; Yes to disallow l option if wheel zero WHLP EQU YES ; Yes to disallow p option if wheel zero WHLR EQU YES ; Yes to disallow r option if wheel zero WHLS EQU YES ; Yes to disallow s option if wheel zero WHLU EQU NO ; Yes to disallow u option if wheel zero AOPT EQU YES ; Yes to allow searching all user areas COPT EQU NO ; Yes to allow clear screen CLOPT EQU YES ; Yes allows a 40, 64 or 80 column display DOPT EQU YES ; Yes to allow searching all drives on-line FOPT EQU YES ; Yes to allow file output option LOPREV EQU NO ; No to reverse the "L" option and not print LOPT EQU YES ; Yes to allow library file member printing NOPT EQU YES ; Yes to allow disabling page pause option PGPAWS EQU YES ; Yes for pause after each page POPT EQU YES ; Yes to allow printer option ROPT EQU YES ; Yes to allow reset option SOPT EQU YES ; Yes to allow system file option UOPT EQU YES ; Yes to allow user number option VOPT EQU YES ; Yes to allow version number display REVIDEO EQU NO ; Use reverse video sequences ; If no, the rest of the equates are disabled LEADIN EQU ESC ; Escape lead-in (try a null if not required) INTOREV EQU '4' ; Toggle background (enter your value here) OUTAREV EQU '3' ; Toggle foreground (enter your value here) VECTOR EQU NO ; Yes to display attributes on flashwriter ii VIDEO EQU 0E009H ; Entry to flashwriter video driver prom IF NOT (ZCPR2 AND MAXCL) NPL EQU 4 ; # of names per line max values are: ; 2 for 40 x xx, 3 for 64 x 16, & 4 for 80 x 24 ENDIF LPS EQU 24 ; # of lines per screen max values are: ; ? for 40 x xx, 16 for 64 x 16, 24 for 80x24 LPS1 EQU 16 ; # of lines per screen if names per line = 3 LPS2 EQU 16 ; # of lines per screen if names per line < 3 FENCEC EQU '|' ; Use 00h for none KTHREE EQU NO ; Yes limits file size columns to 3 digits to ; Gain an additional print colomn. allows ; Fence to be used with four files per line. PRDI EQU NO ; Yes to print drive # on each line PRUS EQU NO ; Yes to print user # on each line PRLIBD EQU NO ; If yes and prus & prdi are yes then drive and ; User numbers will be displayed on library ; Listing lines PRBRDR EQU NO ; Yes to print a quasi-border for library files DORST EQU YES ; Yes to always reset disks when d option active DUOPT EQU NO ; Yes, allow drive/user spec zcpr2 style NODISK EQU YES ; Yes if you do not want to specify disk drive ; When asking for options and using default drv REPERR EQU YES ; Yes to report command line option errors REPUSR EQU YES ; Yes to report user numbers VCODE EQU YES ; Yes if files are to be alphabetized vertically Don't forget to edit the drive/user table you will find a small way into the actual code of the program! .pa METAL and SD If you are using METAL as your message system software, the following statements apply to you. SD needs to know where it can find parameters describing what maximum user # and disk drive are available to the caller. The BYE "parameter block" must be located in RAM and the MAXD and MAXU values must be extracted from it. Then, the addresses of the parameters are set into SD before assembly. By default, SD is set up to expect these parameters in the wrong place, SO THIS MUST BE CHANGED IF YOU ARE USING METAL. METAL is different than other message systems in that it sets the values directly in the BYE parameter block, unlike RBBS and others which fool around with locations in page 0 of RAM. These parameters are altered by METAL to allow different usertypes different levels of access. For instance, when I, the sysop, go to the operating system from METAL, it will set the MAXU parameter to 15. I can therefore access user 15 without BYE sending me back to user 0. However, if an ordinary user who's MAXU is set to 6 goes to the operating system, BYE will send him back to user 0 if somehow he managed to get to user 15. (He couldn't get into user 15 anyway, because he doesn't have the password for the Named Directory, but that's beside the point.) The bottom line is that you the sysop have to figure out where these values in the BYE parameter block are located in RAM, and set the corresponding EQUate statements in the SDxx.ASM file in order for SD to follow the right MAXD and MAXU values. I should also point out that if you change BYE at all that this procedure will need to be done all over again. I know that this is a big pain but it is what you must do in these circumstances to prevent callers from seeing directories of A15: and all the nasty COM files that sysops keep there. Not that they could invoke them (as long as DU: is disabled and the directory is passworded), but why give people the temptation? If anyone has a better way, I'll be glad to hear it! Now, to find the BYE parameter block, I suggest that you the sysop come in as a remote caller, i.e., while BYE is active. Call in from someplace. Then enter the operating system, enable the WHEEL byte, and use the peek command of your RCP. See the description of the BYE parameter block in BYE329.ASM, and for an example of how to find the parameter block (when BYE is active in RAM), see the findbye routine in PWD11.MQC. If you follow the same steps, you can find it too. I disable the DU: recognition in SD through EQUate selections, in order for it to behave more like a Z3 utility. .pa ALIASes Convienent ALIASes on a Z-Node First a note about BYE329 and the path: BYE329 has the capability of changing the path when being invoked or terminated. I suggest you use this feature, making the path simply A0: when BYE is invoked and A0: A15: when terminated. These parameters are all set in the BYE329.ASM file. The convienence of having the path set automatically is very nice; however, you (the sysop) will have to set the path manually to A0: A15: when you call in remotely. I mention this because some of the following ALIASes are only found in A15:. ALIAS Name: CHBBS.COM Typically located in: A15:SYSOP> Command line contained: METAL:;TYPE CALLERS $$N;TYPE XMODEM.LOG $$N;COMMAND: Typically the METAL directory is passworded, so you must respond to the PW? prompt you will recieve with the password for the METAL directory. This ALIAS does a quick check of the callers log and xmodem log. ALIAS Name: STARTBBS.COM Typically located in: A14:METAL> Command line contained: METAL R;TCSELECT This program is not normally used by the sysop at all. This ALIAS is the COM file loaded by BYE and executed after BYE types the WELCOME file to the user. (This is how users on my system are forced into TCSELECT before entering ZRDOS - They are actually completing this ALIAS). .pa ALIAS Name: EXITBBS.COM Typically located in A15:SYSOP> Command line contained: LDR SYS.ENV;COMMAND: I have modified my BYE329 to load the command buffer of ZCPR3 with the command EXITBBS. This LDR command re-loads the entire .ENV file, but the real purpose is to re-load the TCAP with my terminal's control sequences. Because BYE329 zeroes out the TCAP on termination (who knows what might be in there...), it is necessary to reload it like this, so if you have WS patched to use the TCAP, you can then use WS. It is not necessary to have this ALIAS, as a manual command is almost as easy, but I found it sure gets repetitive. It is placed in A15: because that is where the SYS.ENV file is located, and for some reason LDR doesn't understand the DIR: prefix, so I have BYE exit to A15:. ALIAS Name: LDIR.COM Typically located in: A0:COMMAND> Command line contained: DIR $1.LBR $$L This ALIAS is a nifty way to eliminate needing to maintain a bonafide LDIR program. It uses SD (renamed to DIR) to show the directory of a library file. It is actually better than the conventional LDIR as it can accept ambiguous filenames. ALIAS Name: LTYPE.COM Typically found in: A0:COMMAND> Command line contained: TYPE $1 $2 This uses TYPEL (renamed to TYPE) and it's support of typing library members. Eliminates the need to maintain a genuine LTYPE program on your system. .pa ALIAS Name: BIGDIR.COM Typically found in: A0:COMMAND> Command line contained: DIR *.* $$u0adl This ALIAS is usually used by new callers to see "everything". And boy, do we mean everything. Uses SD (renamed to DIR). ALIAS Name: FIND.COM Typically found in: A0:COMMAND> Command line contained: DIR $1 $$u0ad This ALIAS allows callers to find which area of the system a file may be located at. I invented this as a temporary measure, because it does not search library file directories. Well, I still haven't gotten around to getting a better version yet. SD will search all accessible user areas, and will report when it finds a matching filename. If an entire (accessible) disk is searched, then a "No File on x:" message is printed. ALIAS Name: ARCHIVE.COM Typically found in A15:SYSOP> Command line contained: AC Z3CORE:*.*=$1:*.* /A This ALIAS is probably only of interest to systems using a hard disk. This uses the ZRDOS AC utility to copy only files that have changed. The directory Z3CORE: on my system is one of the floppy drives, which is probably something different on your system. Change the destination DIR: as appropriate. The usage is ARCHIVE , as ARCHIVE SYSOP. Passworded DIRs like "SYSOP" will require a response to the PW? prompt. .pa ALIAS Name: M8.COM Typically found in A15:SYSOP> Command line contained: M80 =$1;L80 $1/P:100,VLIB/S,Z3LIB/S,SYSLIB/S,$1/N/E A great way to assemble ZCPR3 utilities. No muss, no fuss. Of course, the *.REL files called out should be in the same directory as L80. ALIAS "Breaking" I was suprised to find out ALIASes can be prematurely terminated under certain conditions. What this means is that you must never assume that an ALIAS is secure; it can be prematurely terminated. All that it requires is a ctl-S ctl-C sequence if any characters are being printed to the console. So, don't do things like setting the WHEEL byte from within an ALIAS, because it might not get reset! Notes on System Organization The first thing you should realize is that all .COM files that are to be accessible to ordinary callers should be placed in A0:. This way, a caller can invoke them from any directory and they will be found and executed via the PATH function of ZCPR3. All directories that are to be inaccessible to ordinary callers should be passworded. Although BYE contains an excellent security routine that limits the highest user that a caller may access, when TERM3 replaces BYE this will no longer be available. If you are going to need more than 14 named directories, there will have to be some work done. Although Echelon's advice that LDR can simply load a different .NDR segment to expand to a different set of 14 directories is valid for single-user systems, this is of little value on a Z-Node. The reason: You do not want LDR.COM available to callers...if it were available to callers, they may be able to upload their own segments and use LDR to load them. What this means is that a caller could (for instance) replace the usual RCP for a Z-Node that has all dangerous commands responding to the WHEEL byte with one that doesn't. Very bad situation. Probably the best way to handle the situation of needing more than 14 named directories could be handled by expanding the Named Directory Segment in RAM. Since I have not needed to do this, I am not sure if there are any special difficulties. LDR and/or MKDIR may need to be changed to cope with a larger .NDR file. If someone comes up with a solution, please forward it to me at the ZCPR3 BBS for everyone's mutual edification. .pa There are some directory names that I think should be standard on a Z-Node. Examples: - UPLOADS: A collection point of uploads to the Z-Node. - HELP: Where *.HLP files are found easily by the ZCPR3 HELP program. - COMMAND: Where all .COM files (accessible to callers) are stored. Usually the A0: drive/user area. - SYSOP: Where the sysop stores files on the system that are for his use ONLY. Usually this is A15:, and the directory is passworded. Examples of nice programs to have here are NSWEEP, NULU, ALIAS, etc.