TITLE PSTAT45.MAC 89/01/03 ; Filename PSTAT45 ; Author Terry Pinto ; Language Microsoft MACRO-80 ; Last Update ; By Terry Pinto ; Reason Version 4.5 ; The instructions below show how to assemble and link using two of the more ; popular assemblers. Be sure to set the appropriate equate in PBBSEQU.HDR. ; Assembly/Link - Using M80/L80 ; M80 =PSTATnn/N ; L80 /P:100,PSTATnn,PBBSUBS/S,PSTATnn/N/E ; ; Using SLR180 ; SLR PSTATnn ; SLRNKP PSTATnn,/A:100,PSTATnn,PBBSUBS/S,/E ; ; Where nn represents the version number in both cases above. ; Revision history ; Version 1.00 ; Original Release ; ; Version 1.01 ; (1) MSGST.LIB - Fixed bugs in display of the message reply and ; the forward and reverse links. ; (01/17/89) ; (2) MSGST.LIB - Fixed bug in GOTO function. User unable to use ; goto to position to one of last two messages. ; (01/17/89) ; (3) SFILE.LIB - Fixed cosmetic flaw in display. ; (01/19/89) ; (4) IDX.LIB - Added space padding routines to help align the ; display of the INDEX.PBS information. ; (01/20/89) ; (5) BITMP.LIB - Added support for additional bitmaps. Complete ; support for all new access levels when implemented. Will show a ; list of bitmaps for all user levels. ; (01/20/89) ; ; Version 1.02 ; (1) BITMP.LIB - Reworked bitmap display. Now displays levels 2 ; through 14. Levels 0 and 1 were unecessary and level 15 is left ; as restricted and not shown. TAB's removed to allow the display ; to function with more terminals. Submitted by Ian Cottrell ; (02/06/89) ; (2) ACCTAB.LIB- Modified to allow display of access levels the ; same as the BITMAP above. TAB's removed to allow the display to ; function with more terminals. Submitted by Ian Cottrell ; (02/06/89) ; (3) IDX.LIB - TAB's removed to allow the display to function ; with more terminals. Submitted by Ian Cottrell ; (02/06/89) ; ; Version 1.03 ; (1) First Public Release - Incorporated all modules. Added the ; ZCPR segment to conditionally support ZCPR3 systems with a menu ; selection. Modified ZCPR system equates to accomidate new PBBS ; headers. The program is now compatible with PBBS versions 4.15 ; or higher. Added support for multiple DOS entry. ; (03/04/89) ; ; Version 1.04 ; (1) Fixed SYSENV, ZDRV, MAXDRV printouts when not running with ; ZCPR3. Cleaned up some of the displays. Added support to enable ; the display of the folder name in the message index section. We ; have also made the display of the terminal name under TCAP, and ; the multiple command line buffer, conditional. Submitted by Ian ; Cottrell. (03/17/89) ; ; Version 1.05 ; (1) Fixed problem with the reading and proper display of JUNK ; setting in low memory. Fixed Display of number of folders shown ; in display. ; (2) Fixed problem with MSGINDEX routines. Display crashed when ; the TO, FROM or SUBJECT field was filled. Changed the call used ; from PRINTM to PRINTL. Submitted by Ian Cottrell (03/26/89) ; (3) Added support for new function in PBBS to allow support of ; multiple areas of support and multiple FOR and NEW files. Added ; conditional display of MSGTHD equate and the proposed data from ; the MSGINDEX.PBS file. (03/26/89) ; ; Version 4.50 ; (1) Fixed code to conform with latest release of PBBS. Changed ; references to MDOS drive/user from EQU to DB. With this release ; the version numbering has also been changed to reflect the PBBS ; and PBSUBS.REL files being used. This should make it easier for ; users of PSTAT to keep up to date with the proper version. ; ; Version 4.51 ; (1) Fixed code relating to max drive and max user reporting. ; (2) Made selection of MSGTHD conditional. Release versions of ; PBBS do not allow for message threading as of yet. ; (3) Fixed undefined label of CPMDU for PBBS45 release. ; ; Version 4.52 ; (1) Changed code to maintain M80 compatibility. M80 does not ; like lower case in an include statement and it does not like it ; when you follow the label with a ':' in an equate statement. ; include pbbsequ.hdr --> INCLUDE PBBSEQU.HDR ; STACK: EQU $ --> STACK EQU $ ; ; Version 4.53 ; (1) Changed code in the Z option to correctly display the ; address of the wheel byte and the path, and not the address ; in the environment where the addresses are stored. ; Thank you to George Allen for pointing this one out. ; ; NOTE: PSTAT reads and displays all of the information set or provided ; bye your PBBS system. PSTAT obtains needed information from the ; INDEX.PBS file, the MSGINDEX.PBS file, low memory, PBBSEQU.HDR, ; or the PBBSDB.HDR files. You may select the section you wish to ; observe by specifing the appropriate option on the command line ; or use the menu subsystem by not providing an option. ; ; SYNTAX: PSTAT Menu Sub-System ; PSTAT /o Run PSTAT option ; ; Options: A - Access Table Settings ; B - Bitmaps (Drive/User) ; D - DU: selections ; E - Entry/Welcome Files ; F - Folders Selected ; I - INDEX.PBS Information ; L - Low Memory Settings ; M - Message Statistics ; O - Operating System and PBBS ; P - PBBS Internal Settings ; R - Restrictions ; S - System Files ; V - Version Number ; Z - Z-System (Only IF ZCPR3 running) ; ? or / - Display Help Screen ; ; ------------------------------------------------------------------------- ; PBBS Statistics ; Author: Terry Pinto ; 14385 SW Walker Rd. B3 ; Beaverton, OR 97006 ; Access Programming RAS ; (503) 644-0900 (300/1200/2400) ; PC Pursuit ORPOR ; ------------------------------------------------------------------------- ; The Public Bulletin Board System ; Author: Ian Cottrell ; 44 Lindhurst Cres ; Ottawa, ON, Canada ; K2G 0T7 ; The Information Centre RCP/M ; (613) 952-2289 (300/1200/2400) ;-------------------------------------------------------------------------; ; NOTE: This file MUST be linked to PBBSUBS.REL. ; ;-------------------------------------------------------------------------; NO EQU 0 YES EQU not no ; MTHD is used to beta test the message threading routines. Leave this ; equate set to NO for general release programs. Setting to YES will ; cause assembly errors until a release of PBBS that supports message ; threading. MTHD EQU yes ; ------------------------------------------------------------------------- INCLUDE PBBSEQU.HDR ; PBBS configuration equates IF ZCPR3 ; ZCPR3 ZPTH EQU Z3ENV+9 ; location of ZCPR3 path address ZWHL EQU Z3ENV+41 ; ZCPR3 wheel byte ZDRV EQU Z3ENV+44 ; ZCPR3 maximum user ZUSR EQU Z3ENV+45 ; ZCPR3 maximum drive ENDIF ; ZCPR3 IF M80 ; m80 .Z80 ; Needed for M80 ASEG ; ORG 100H ; ENDIF ; m80 JP START ; Jump around header and data Z3IDEN: DB 'Z3ENV' ; Z3 identifier Z3TYPE: DB 1 ; Z3 environment (external) Z3EADR: DW 0000 ; Z3 environment (address) Z3LOAD: DW 0000 ; Z3 load addresse ; Version name, date and levels VNAME:: DB CR,LF,'PSTAT ' ; Name VERDAT::DB '89/' ; Year DB '08/' ; Month DB '06 ' ; Day DB ' v ',0 ; Status VER:: DB 4 ; Version VERR:: DB 53 ; Revision AUTHOR::DB ' by: Terry Pinto',CR,LF,0 INCLUDE PBBSDB.HDR ; Define your terminals clear screen sequence here. You have up to ten ; bytes including a 0 terminator at the end of the sequence. CLS: DB ESC,'*',0,0,0 ; Clear screen sequence DB 0,0,0,0,0 ; you have up to ten bytes DB 0 ; Terminator - DO NOT CHANGE! INCLUDE BDOSHDR.MAC ; Time and date conversions ; Preserve CPM stack, initialize new one for this program START: LD (CCPSTK),SP ; Save the return address LD SP,STACK ; Install our stack ; Save current drive/user LD E,0FFH LD C,32 CALL BDOS ; Get current user LD (OLDUSR),A ; Save it LD C,25 CALL BDOS ; Get current drive LD (OLDDRV),A ; Save it LD E,SYSDRV LD C,14 CALL BDOS ; Log to system drive LD E,SYSUSR LD C,32 CALL BDOS ; Log to system user ; Check for BYE presence LD E,241 LD C,BEXIST CALL BDOS ; See IF BYE5 is active CP 77 JR Z,BEGIN ; Yes, proceed CALL PRINT ; Else, abort DB CR,LF,'BYE5 not available, aborting...',CR,LF,0 JP EXIT ; Restore D/U and exit ; Everything ok, let's begin BEGIN: LD HL,CLS CALL PRINTM LD A,(MFLG) CP 0 JP NZ,PSE CALL PVER IF CREDITS LD HL,AUTHOR CALL PRINTM ELSE CALL PCRLF ENDIF ; credits ; Parse the command line PSE: CALL GETTIM PARSE: LD HL,80H ; Point to CP/M command line buffer LD A,(HL) ; Get length of command tail CP 0 ; Is command terminated here? JP Z,MENU ; If yes - goto menu operation GCHR: INC HL ; Point to first character in command tail LD A,(HL) ; Get character CP '/' ; Do we have an option delimeter? JR NZ,GCHR ; If not - loop until we get one INC HL ; Point to option LD A,(HL) ; Get option ; Got the option, now act on it OPTION: CP '/' ; ZCPR style help request JP Z,HELP CP '?' ; CP/M stype help request JP Z,HELP CALL CAPS CP 'A' ; Access table JP Z,ACCTAB CP 'B' ; Bitmaps JP Z,BITMP CP 'D' ; DU selections JP Z,DU CP 'E' ; Entry Files JP Z,ENTER CP 'F' ; Folders JP Z,FLDR CP 'I' ; INDEX.PBS JP Z,IDX CP 'L' ; Low memory JP Z,LOWMEM CP 'M' ; Message Statistics JP Z,MSGST CP 'O' ; Operating System JP Z,PBS CP 'P' ; PBBS settings JP Z,PSET CP 'R' ; Restrictions JP Z,PSET1 CP 'S' ; System files JP Z,SFILE CP 'V' ; Display Version Information JP Z,VERS CP 'X' ; Exit from menu JP Z,EXIT IF ZCPR3 ; [tlp] CP 'Z' ; Z-System [tlp] JP Z,ZSYS ; [tlp] ENDIF ; [tlp] LD A,(MFLG) CP 0 JP NZ,MENU ; In menu - rewrite menu JP HELP ; Unknown option - give user help ; Access table information ACCTAB: CALL PRINT DB 'PBBS Access Table Settings',CR,LF,LF DB ' ' DB 'Max Drive Max User Min Online Retention U/D Ratio' DB CR,LF,LF,0 ; [tlp] GETLV: LD B,13 ; Counter for user level [icc] LD HL,ACC2 ; Point to access table [icc] LD (MAPSAV),HL ; Save pointer [icc] LD A,1 ; Set user level [icc] LD (LVL),A ; and save it [icc] GETLV1: PUSH BC ; Save counter [icc] CALL PRINT ; [icc] DB 'Level ',0 ; [icc] LD A,(LVL) ; Get previous level [icc] INC A ; and increment to current level [icc] LD (LVL),A ; Save it again [icc] CALL PA2ASC ; Print current level [icc] LD B,6 ; 6 spaces [icc] CALL PAD ; [icc] LD HL,(MAPSAV) ; Restore access table pointer [icc] DSPLV: LD A,(HL) ; Get max drive INC HL ; Point to max user [icc] PUSH HL ; Save pointer [icc] OR A ; Is max drive zero (unused)? [icc] JR NZ,DSPLV1 ; If not, skip next [icc] LD A,-17 ; Else, prepare to print 0 [icc] DSPLV1: ADD A,41H ; Make it an ASCII letter (or zero) [icc] CALL ECHO ; Print it [icc] LD B,11 ; 11 spaces [icc] CALL PAD ; [icc] POP HL ; Restore pointer [icc] LD A,(HL) ; Get max user INC HL ; Point to time allowed [icc] PUSH HL ; Save pointer [icc] OR A ; Is max user zero (unused)? [icc] JR Z,DSPLV2 ; If yes, don't decrement [icc] DEC A ; Adjust to print actual user area DSPLV2: CALL PA2ASC ; Print with leading zero IF necessary [icc] LD B,8 ; 8 spaces [icc] CALL PAD ; [icc] POP HL ; Restore pointer [icc] LD A,(HL) ; Get time on system PUSH HL ; Save pointer [icc] CP 0 ; Unlimited? JR NZ,DMIN ; If not, go print max time allowed CALL PRINT ; Else, say unlimited DB BS,'Unlimited ',0 ; [icc] JR DMIN1 DMIN: CALL PADC CALL PRINT DB ' Min ',0 DMIN1: POP HL ; Restore pointer INC HL ; Point to days to deletion LD A,(HL) ; Get days to deletion PUSH HL ; Save pointer [icc] CP 0 JR NZ,DDAY CALL PRINT DB BS,BS,'Unlimited ',0 JR DDAY1 DDAY: CALL PADC CALL PRINT DB ' Days ',0 ; [icc] DDAY1: POP HL ; Restore pointer INC HL ; Point to u/d ratio LD A,(HL) ; Get u/d ratio PUSH HL ; Save pointer [icc] CP 0 JR NZ,DUDR CALL PRINT DB BS,BS,'Unlimited',CR,LF,0 ; [icc] JR DUDR1 DUDR: CALL PADC CALL PRINT DB ':1',CR,LF,0 DUDR1: POP HL LD DE,ACTBLEN ; Get length of one table entry [icc] LD HL,(MAPSAV) ; Restore pointer [icc] ADD HL,DE ; Point to max drive for next level [icc] LD (MAPSAV),HL ; Save that [icc] POP BC ; Restore counter [icc] DEC B ; Decrement counter [icc] JP NZ,GETLV1 ; Loop til done [icc] JP CHKMNU ; [icc] PAD: LD HL,PADSTR ; Point to spaces (in PBBSDB.HDR) [icc] CALL PRINTL ; Print 'B' of them [icc] RET ; [icc] ; Display drive and user bitmaps for all user levels BITMP: CALL PRINT DB 'PBBS Drive/User Bitmaps',CR,LF,LF DB ' Drive Maps User Maps',CR,LF,LF DB ' PONMLKJIHGFEDCBA FEDCBA9876543210',CR,LF,LF,0 LD B,13 ; Get counter for user levels [icc] LD HL,USMP2 ; Point to drive/user maps [icc] LD (MAPSAV),HL ; Save this address [icc] LD A,1 ; Set beginning user level-1 [icc] LD (LVL),A ; and store it [icc] DM2: PUSH BC ; Save counter [icc] CALL PRINT ; [icc] DB 'Level ',0 ; [icc] LD A,(LVL) ; Get previous level [icc] INC A ; Make it current level [icc] LD (LVL),A ; and save it [icc] CALL PA2ASC ; Print current level [icc] CALL PRINT ; followed by some spaces [icc] DB ' ',0 ; [icc] LD HL,(MAPSAV) ; Get pointer to current user map [icc] PUSH HL ; Save it on stack [icc] INC HL ; Point to current [icc] INC HL ; drive map [icc] LD E,(HL) ; Get current [icc] INC HL ; drive map [icc] LD D,(HL) ; into DE [icc] INC HL ; Point to next user map [icc] LD (MAPSAV),HL ; Save it [icc] EX DE,HL ; Current drive map to HL [icc] CALL TBIT ; Display it [icc] CALL PRINT ; Some more spaces [icc] DB ' ',0 ; [icc] POP HL ; Restore pointer to current user map [icc] LD E,(HL) ; Get current [icc] INC HL ; user map [icc] LD D,(HL) ; into [icc] EX DE,HL ; HL [icc] CALL TBIT ; Display it [icc] CALL PRINT ; New line [icc] DB CR,LF,0 ; [icc] POP BC ; Restore counter [icc] DJNZ DM2 ; Loop until done [icc] JP CHKMNU LVL: DS 1 MAPSAV: DS 2 ; Display the entry/welcome files used ENTER: CALL PRINT DB 'PBBS Entry/Welcome Files',CR,LF,LF,0 IF NOT ENTY CALL PRINT DB CR,LF,'Standard Entry ........: ',0 LD HL,ENTRY+1 CALL PRINTM CALL PRINT DB '.COM',0 CALL PRINT DB CR,LF,'New User Entry ........: ',0 LD hl,nentry+1 CALL PRINTM CALL PRINT DB '.COM',0 IF SPON CALL PRINT DB CR,LF,'Special User Entry ....: ',0 LD HL,SPENTRY+1 CALL PRINTM CALL PRINT DB '.COM',0 ENDIF ELSE CALL PRINT DB CR,LF,'Entry Files ...........: ENTR1.COM - ENTRF.COM',0 ENDIF IF ALTON CALL PRINT DB CR,LF,'Alternate Entry .......: ',0 LD HL,ALTFILE+1 CALL PRINTM CALL PRINT DB '.COM',0 ENDIF IF PRVATE AND PRVCOM CALL PRINT DB CR,LF,'Private Entry .........: ',0 LD HL,PRVTCM+1 CALL PRINTM CALL PRINT DB '.COM',0 ENDIF CALL PRINT DB CR,LF,'Error File ............: ',0 LD HL,ERRFIL+1 CALL PRINTM CALL PRINT DB '.COM',0 IF WELON IF NOT WELCUM CALL PRINT DB CR,LF,'Welcome File ..........: ',0 LD HL,WELCOM CALL PRINTM ELSE CALL PRINT DB CR,LF,'Welcome Files .........: WELCOM1.PBS - WELCOMF.PBS',0 ENDIF ENDIF CALL PRINT DB CR,LF,LF,0 JP CHKMNU ; Display folders selected within PBBS FLDR: CALL PRINT DB 'PBBS File Folders',CR,LF,LF,0 LD hl,fnames CALL PRINTM IF NMFLDRS GT 0 CALL PRINT DB CR,LF,'1. ',0 LD HL,FNAME1 LD B,11 CALL PRINTL ENDIF IF NMFLDRS GT 1 CALL PRINT DB CR,LF,'2. ',0 LD HL,FNAME2 LD B,11 CALL PRINTL ENDIF IF NMFLDRS GT 2 CALL PRINT DB CR,LF,'3. ',0 LD HL,FNAME3 LD B,11 CALL PRINTL ENDIF IF NMFLDRS GT 3 CALL PRINT DB CR,LF,'4. ',0 LD HL,FNAME4 LD B,11 CALL PRINTL ENDIF IF NMFLDRS GT 4 CALL PRINT DB CR,LF,'5. ',0 LD HL,FNAME5 LD B,11 CALL PRINTL ENDIF IF NMFLDRS GT 5 CALL PRINT DB CR,LF,'6. ',0 LD HL,FNAME6 LD B,11 CALL PRINTL ENDIF IF NMFLDRS GT 6 CALL PRINT DB CR,LF,'7. ',0 LD HL,FNAME7 LD B,11 CALL PRINTL ENDIF IF NMFLDRS GT 7 CALL PRINT DB CR,LF,'8. ',0 LD HL,FNAME8 LD B,11 CALL PRINTL ENDIF IF NMFLDRS GT 8 CALL PRINT DB CR,LF,'9. ',0 LD HL,FNAME9 LD B,11 CALL PRINTL ENDIF CALL PRINT DB CR,LF,LF,'Minimum User Access to Folders: ',CR,LF,LF,0 CALL PRINT DB 'Mail Folder Number: ',0 LD B,NMFLDRS LD A,'0' FNUMB: CALL ECHO INC A PUSH AF PUSH BC CALL PRINT DB ' ',0 POP BC POP AF DJNZ FNUMB CALL PRINT DB CR,LF,'Minimum Access Level: 2 2 ',0 LD HL,MAILTBL LD B,NMFLDRS-2 FACC: LD A,(HL) CP 0AH JR C,DEC ADD A,7 DEC: ADD A,30H CALL ECHO INC HL PUSH HL PUSH BC CALL PRINT DB ' ',0 POP BC POP HL DJNZ FACC CALL PRINT DB CR,LF,0 JP CHKMNU ; Display stats from INDEX.PBS IDX: CALL IOPEN LD HL,0 CALL GET ; Get current index record LD HL,IDATEF LD DE,IDATE LD BC,NDXLEN LDIR LD HL,1 CALL GET ; Get backup index record LD HL,IDATEF LD DE,BIDATE LD BC,NDXLEN LDIR CALL CLOSE CALL PRINT DB 'INDEX.PBS Statistics Current Backup',CR,LF,0 CALL PRINT DB CR,LF,'Current Date......: ',0 ; [icc] LD IX,IDATE CALL FULDAT ; [icc] CALL PRINT DB ' (',0 ; [icc] LD IX,BIDATE CALL FULDAT ; [icc] CALL PRINT DB ')',0 CALL PRINT DB CR,LF,'Next Msg Record...: ',0 LD HL,(IMRNM) CALL PHLDC CALL PRINT DB ' (',0 ; [icc] LD HL,(BIMRNM) CALL PB2ASC CALL PRINT DB ')',0 CALL PRINT DB CR,LF,'Next Msg Number...: ',0 LD HL,(IMNXT) CALL PHLDC CALL PRINT DB ' (',0 ; [icc] LD HL,(BIMNXT) CALL PB2ASC CALL PRINT DB ')',0 CALL PRINT DB CR,LF,'Rcds Msg Index....: ',0 LD HL,(IMNDX) CALL PHLDC CALL PRINT DB ' (',0 ; [icc] LD HL,(BIMNDX) CALL PB2ASC CALL PRINT DB ')',0 CALL PRINT DB CR,LF,'# System Callers..: ',0 ; [icc] LD HL,(ICALL) CALL PHLDC CALL PRINT DB ' (',0 ; [icc] LD HL,(BICALL) CALL PB2ASC CALL PRINT DB ')',0 CALL PRINT DB CR,LF,'# System Users...: ',0 LD HL,(IUSER) CALL PHLDC CALL PRINT DB ' (',0 ; [icc] LD HL,(BIUSER) CALL PB2ASC CALL PRINT DB ')',0 CALL PRINT DB CR,LF,'Rcds User File....: ',0 LD HL,(IUSRC) CALL PHLDC CALL PRINT DB ' (',0 ; [icc] LD HL,(BIUSRC) CALL PB2ASC CALL PRINT DB ')',0 CALL PRINT DB CR,LF,'Hard Cpy Log Sw...: ',0 ; [icc] LD A,(HRDLOG) CP 0 JR Z,HOFF CALL PRINT DB ' ON',0 JR HON HOFF: CALL PRINT DB ' OFF',0 HON: LD A,(BHRDLOG) CP 0 JR Z,BHOFF CALL PRINT DB ' (ON)',0 ; [icc] JR BHON BHOFF: CALL PRINT DB ' (OFF)',0 ; [icc] BHON: CALL PRINT DB CR,LF,'User File Maint' DB CR,LF,' Date...: ',0 ; [icc] LD IX,MUSRD CALL FULDAT ; [icc] CALL PRINT DB ' (',0 ; [icc] LD IX,BMUSRD CALL FULDAT ; [icc] CALL PRINT DB ')',0 CALL PRINT DB CR,LF,' Time...: ',0 ; [icc] LD IX,MUSRT CALL PTIME CALL PRINT DB ' (',0 ; [icc] LD IX,BMUSRT CALL PTIME CALL PRINT DB ')',0 CALL PRINT DB CR,LF,'Msg File Maint' DB CR,LF,' Date...: ',0 ; [icc] LD IX,MMSGD CALL FULDAT ; [icc] CALL PRINT DB ' (',0 ; [icc] LD IX,BMMSGD CALL FULDAT ; [icc] CALL PRINT DB ')',0 CALL PRINT DB CR,LF,' Time...: ',0 ; [icc] LD IX,MMSGT CALL PTIME CALL PRINT DB ' (',0 ; [icc] LD IX,BMMSGT CALL PTIME CALL PRINT DB ')',0 CALL PRINT DB CR,LF,'Daily Minutes.....: ',0 LD HL,(SYACU) CALL PHLDC CALL PRINT DB ' (',0 ; [icc] LD HL,(BSYACU) CALL PB2ASC CALL PRINT DB ')',0 CALL PRINT DB CR,LF,'Daily Calls.......: ',0 LD A,(SYDCC) CALL PADC CALL PRINT DB ' (',0 ; [icc] LD A,(BSYDCC) CALL PA2ASC CALL PRINT DB ')',0 CALL PRINT DB CR,LF,'Current Usage.....: ',0 LD A,(SYCRP) CALL PADC CALL PRINT DB '%',0 CALL PRINT DB ' (',0 ; [icc] LD A,(BSYCRP) CALL PA2ASC CALL PRINT DB '%)',0 CALL PRINT DB CR,LF,'Previous Usage....: ',0 LD A,(SYPVP) CALL PADC CALL PRINT DB '%',0 CALL PRINT DB ' (',0 ; [icc] LD A,(BSYPVP) CALL PA2ASC CALL PRINT DB '%)',CR,LF,0 JP CHKMNU ; Display low memory addresses LOWMEM: CALL PRINT DB 'PBBS Low Memory Statistics',CR,LF,0 LD A,(REENTR) CP 0 JR NZ,LMEM CALL PRINT DB CR,LF,'Low Memory function requires PBBS to be active',CR,LF,0 JP CHKMNU LMEM: CALL PRINT DB CR,LF,'Re-Entry Byte.............: ',0 LD HL,REENTR CALL CHKAD JR NZ,PTH LD A,(HL) CP 0 JR NZ,REON CALL PRINT DB 'OFF',0 JR PTH REON: CALL PRINT DB 'ON',0 PTH: CALL PRINT DB CR,LF,'Path......................: ',0 IF ZCPR3 ; [tlp] LD HL,(ZPTH) ; [tlp] ELSE ; [tlp] LD HL,PATH ; [tlp] ENDIF ; [tlp] CALL CHKAD JP NZ,TMID PTH1: LD A,(HL) CP 0 JR Z,TMID CP '$' JR Z,PDRV ADD A,40H PDRV: CALL ECHO INC HL PUSH HL LD A,(HL) CP '$' JR NZ,PUSR CALL ECHO JR PUSR1 PUSR: CALL PA2ASC PUSR1: CALL PRINT DB ': ',0 POP HL INC HL JR PTH1 TMID: IF TCAP CALL PRINT DB CR,LF,'Terminal Id Code..........: ',0 LD HL,TRMCD CALL CHKAD JR NZ,URECA LD A,(HL) CALL PA2ASC CALL PRINT DB ' - ',0 IF ZCPR3 ; [tlp] LD HL,Z3ENV+80H ; [tlp] ELSE ; [tlp] LD HL,SYSENV+80H ; [tlp] ENDIF ; ZCPR3 [tlp] LD A,(HL) CP ' ' CALL Z,URECA LD B,16 PTERM: LD A,(HL) CALL ECHO INC HL DJNZ PTERM ENDIF ; TCAP URECA: CALL PRINT DB CR,LF,'User Record Address.......: ',0 LD HL,USREC CALL CHKAD LD HL,(USREC) CALL Z,PB2ASC ALCK: CALL PRINT DB CR,LF,'Address of Lock (Access)..: ',0 LD HL,LOCK CALL CHKAD JR NZ,UMAP LD A,(HL) CP 09 JR C,ADEC ADD A,7 ADEC: ADD A,30H CALL ECHO UMAP: CALL PRINT DB CR,LF,'User Map..................: ',0 LD HL,USRMAP CALL CHKAD JR NZ,DMAP LD HL,(USRMAP) CALL TBIT DMAP: CALL PRINT DB CR,LF,'Drive Map.................: ',0 LD HL,DRVMAP CALL CHKAD JR NZ,DLOG LD HL,(DRVMAP) CALL TBIT DLOG: CALL PRINT DB CR,LF,'Disk Log..................: ',0 IF DSKLOG LD HL,DSKFLG CALL CHKAD JR NZ,MSPD CALL PRINT DB 'ON',0 ELSE CALL PRINT DB ' OFF',0 ENDIF MSPD: CALL PRINT DB CR,LF,'Modem Speed Indicator.....: ',0 LD HL,BSPEED CALL CHKAD JP NZ,MDRV LD A,(HL) B110: CP 0 JR NZ,B300 CALL PRINT DB '110 baud',0 JP MDRV B300: CP 1 JR NZ,B450 CALL PRINT DB '300 baud',0 JP MDRV B450: CP 2 JR NZ,B600 CALL PRINT DB '450 baud',0 JP MDRV B600: CP 3 JR NZ,B710 CALL PRINT DB '600 baud',0 JP MDRV B710: CP 4 JR NZ,B1200 CALL PRINT DB '710 baud',0 JP MDRV B1200: CP 5 JR NZ,B2400 CALL PRINT DB '1200 baud',0 JP MDRV B2400: CP 6 JR NZ,B4800 CALL PRINT DB '2400 baud',0 JP MDRV B4800: CP 7 JR NZ,B9600 CALL PRINT DB '4800 baud',0 JP MDRV B9600: CP 8 JR NZ,B19200 CALL PRINT DB '9600 baud',0 JP MDRV B19200: CP 9 JR NZ,BLOCAL CALL PRINT DB '19.2k baud',0 JP MDRV BLOCAL: CALL PRINT DB 'Local',0 MDRV: CALL PRINT DB CR,LF,'Maximum Drive.............: ',0 IF zcpr3 ; [tlp] LD HL,ZDRV ; [tlp] ELSE ; [tlp] LD HL,MXDRV ; [tlp] ENDIF ; ZCPR3 [tlp] PUSH HL CALL phl4hc CALL PRINT DB 'H ',0 POP HL LD A,(HL) ADD A,40H CALL ECHO MUSR: CALL PRINT DB CR,LF,'Maximum User..............: ',0 IF ZCPR3 ; [tlp] LD HL,ZUSR ; [tlp] ELSE ; [tlp] LD HL,MXUSR ; [tlp] ENDIF ; ZCPR3 [tlp] LD A,(HL) LD (TMPUSR),A CALL PHL4HC CALL PRINT DB 'H ',0 LD A,(TMPUSR) CALL Z,PA2ASC CALL PRINT DB CR,LF,'Wheel Byte................: ',0 IF ZCPR3 ; [tlp] LD HL,(ZWHL) ; [tlp] ELSE ; [tlp] LD HL,WHEEL ; [tlp] ENDIF ; ZCPR3 [tlp] CALL CHKAD JR NZ,LOGTM LD A,(HL) CP 0 JR Z,WOFF CALL PRINT DB 'ON',0 JR LOGTM WOFF: CALL PRINT DB 'OFF',0 LOGTM: CALL PRINT DB CR,LF,'Logon-Time (ASCII)........: ',0 LD HL,LOGSTR CALL CHKAD JR NZ,UPL LD b,8 GTM: LD A,(HL) CALL ECHO INC HL DJNZ GTM UPL: CALL PRINT DB CR,LF,'Upload Count..............: ',0 LD HL,UPLOADS CALL CHKAD LD A,(HL) CALL Z,PA2ASC CALL PRINT DB CR,LF,'Download Count............: ',0 LD HL,DNLOADS CALL CHKAD LD A,(HL) CALL Z,PA2ASC CALL PRINT DB CR,LF,'Access in ASCII...........: ',0 LD HL,ASCACC CALL CHKAD LD A,(HL) CALL NZ,PA2ASC CALL PRINT DB CR,LF,0 JP CHKMNU CHKAD: PUSH HL LD DE,JUNK LD B,2 CALL MATCH JR Z,NOTU PTAD: CALL PHL4HC CALL PRINT DB 'H ',0 JR CHKEX NOTU: CALL PRINT DB 'Not Used',0 CHKEX: POP HL RET TBIT: PUSH HL LD C,H CALL PBBITS POP HL LD C,L CALL PBBITS RET PBBITS: LD B,8 PBB1: LD A,'0' BIT 7,C JR Z,PBB2 INC A PBB2: CALL ECHO SLA C DJNZ PBB1 RET ; Display message statistics MSGST: ; Open INDEX.PBS file CALL IOPEN ; Point to INDEX.PBS LD HL,0 ; Message number CALL GET ; Get message LD HL,IDATEF ; Point to source buffer LD DE,IDATE ; Point to destination buffer LD BC,NDXLEN ; Length of buffer LDIR ; Move to buffer CALL CLOSE ; Close file ; Open MSGINDEX.PBS file LD HL,MSGINDEX ; Point to MSGINDEX.PBS CALL OPEN ; Open file LD HL,MNDXLEN ; Get length of index record LD (RRSZ),HL ; Save in RRSZ for later LD HL,0 ; Starting record number LD (MSGREC),HL CALL GET DSPREC: LD HL,CLS CALL PRINTM CALL PRINT DB 'PBBS Message Statistics',CR,LF,0 CALL PRINT DB CR,LF,'Record number (MSG)...: ',0 LD HL,(MSGREC) INC HL CALL PB2ASC CALL PRINT DB ' (',0 LD HL,(MNUMF) CALL PB2ASC CALL PRINT DB ')',0 CALL PRINT DB CR,LF,'Message FROM: ........: ',0 LD HL,MFROMF LD B,30 CALL PRINTL CALL PRINT DB CR,LF,'Message TO: ..........: ',0 LD HL,MTOF LD B,30 CALL PRINTL CALL PRINT DB CR,LF,'Message SUBJECT: .....: ',0 LD HL,MSUBF LD B,26 CALL PRINTL CALL PRINT DB CR,LF,'Time left ............: ',0 LD IX,MTIMEF CALL PTIME CALL PRINT DB CR,LF,'Date left ............: ',0 LD IX,MDATF CALL PDATE CALL PRINT DB CR,LF,'Block Count ..........: ',0 LD A,(MBLKF) CALL PA2ASC CALL PRINT DB CR,LF,'Starting block .......: ',0 LD HL,(MSTRF) CALL PB2ASC CALL PRINT DB CR,LF,'Index record number ..: ',0 LD HL,(MRECF) CALL PB2ASC CALL PRINT DB CR,LF,'Public/Private .......: ',0 LD A,(MPUBF) CP 0 JR NZ,PRVT CALL PRINT DB '(Public)',0 JR RPDNE PRVT: CALL PRINT DB '(Private)',0 RPDNE: CALL PRINT DB CR,LF,'Folder number ........: ',0 LD A,(MFNUMF) CALL PA2ASC CALL PRINT DB ' - ',0 LD A,(MFNUMF) CP 0 JR NZ,FLD1 LD HL,FNAMES LD B,11 CALL PRINTL JP FLDNE FLD1: CP 1 JR NZ,FLD2 LD HL,FNAME1 LD B,11 CALL PRINTL JP FLDNE FLD2: CP 2 JR NZ,FLD3 LD HL,FNAME2 LD B,11 CALL PRINTL JP FLDNE FLD3: CP 3 JR NZ,FLD4 LD HL,FNAME3 LD B,11 CALL PRINTL JP FLDNE FLD4: CP 4 JR NZ,FLD5 LD HL,FNAME4 LD B,11 CALL PRINTL JP FLDNE FLD5: CP 5 JR NZ,FLD6 LD HL,FNAME5 LD B,11 CALL PRINTL JP FLDNE FLD6: CP 6 JR NZ,FLD7 LD HL,FNAME6 LD B,11 CALL PRINTL JP FLDNE FLD7: CP 7 JR NZ,FLD8 LD HL,FNAME7 LD B,11 CALL PRINTL JP FLDNE FLD8: CP 8 JR NZ,FLD9 LD HL,FNAME8 LD B,11 CALL PRINTL JP FLDNE FLD9: LD HL,FNAME9 LD B,11 CALL PRINTL FLDNE: CALL PRINT DB CR,LF,'Read/Delete ..........: ',0 LD A,(MREAD) CP 0 JR NZ,MRD CALL PRINT DB '( )',0 JR MDNE MRD: CP 1 JR NZ,MDLT CALL PRINT DB '(R)',0 JR MDNE MDLT: CP 0FFH JR NZ,MDNE CALL PRINT DB '(D)',0 MDNE: IF MTHD IF MSGTHD CALL PRINT DB CR,LF,'Message retention ....: ',0 LD A,(MRETEN) CALL PA2ASC CALL PRINT DB CR,LF,'Forward link .........: ',0 LD HL,(MFLNK) CALL PB2ASC CALL PRINT DB CR,LF,'Reverse link .........: ',0 LD HL,(MRLNK) CALL PB2ASC CALL PRINT DB CR,LF,'Reply to message .....: ',0 LD HL,(MREPLY) CALL PB2ASC ENDIF ; MSGTHD ENDIF ; MTHD CALL PRINT DB CR,LF,LF,'N)ext P)revious G)oto Q)uit ' DB 'Enter Selection: ',0 GCH: CALL GETCH CALL CAPS CALL ECHO CP 'N' ; Next message index record JP Z,NEXT CP 'P' ; Previous message index record JP Z,PREV CP 'G' ; Goto specific index record JP Z,GOTO CP 'Q' ; Quit JP Z,QUIT CALL PRINT ; Entered unknown character DB BS,' ',BS,0 ; Erase the previous character JR GCH ; and get new one RET NEXT: LD HL,(MSGREC) OR A LD DE,(IMNDX) SBC HL,DE JP Z,DSPREC LD HL,(MSGREC) INC HL LD (MSGREC),HL CALL GET JP DSPREC PREV: LD HL,(MSGREC) LD A,L OR H JP Z,DSPREC DEC HL LD (MSGREC),HL CALL GET JP DSPREC GOTO: CALL PRINT DB BS,BS,BS,BS,BS,BS,BS,BS,BS,BS,BS,BS,BS,BS,BS,BS,BS,BS DB ' ' DB BS,BS,BS,BS,BS,BS,BS,BS,BS,BS,BS,BS,BS,BS,BS,BS,BS,BS DB 'Record Number: ',0 LD C,0 ; Do not force upper case LD B,5 ; Maximum length of input string LD D,0 ; No word wrap LD A,0 ; Echo input to console CALL INPUT ; Get input from user LD (CNVRT0+1),A ; Place length of input string in buffer PUSH HL POP IX CALL CNVRT0 ; Convert ASCII string to BINARY in HL LD (OLDMSG),HL ; Save message number in temp LD A,L ; Check message number to see IF less than 0 OR H JP Z,DSPREC ; If less than 0 - just redisplay record LD HL,(OLDMSG) ; Get current message number (TEMP) OR A ; Reset flags LD DE,(IMNDX) ; Get maximum message number INC DE INC DE SBC HL,DE ; Check to see IF current>largest JP NC,DSPREC ; If larger - just redisplay record LD HL,(OLDMSG) DEC HL ; Account for record 1 actually being 0 LD (MSGREC),HL ; Save current record number CALL GET ; HL has record number to get JP DSPREC ; Display record QUIT: CALL CLOSE ; Close MSGINDEX.PBS LD A,(MFLG) CP 0 JP NZ,MENU JP EXIT ; PBBS Runtime Options PSET: CALL PRINT DB 'PBBS Runtime Options',CR,LF,0 CALL PRINT DB CR,LF,'Show Authors Name on Signon ..... (CREDITS) ',0 LD A,CREDITS CALL CYN CALL PRINT DB CR,LF,'Display Version Number on Signon (VERSION) ',0 LD A,VERSION CALL CYN CALL PRINT DB CR,LF,'Show Bulletin File at Signon ..... (BULTIN) ',0 LD A,BULTIN CALL CYN CALL PRINT DB CR,LF,'Bump User Level Automatically .....(DOBUMP) ',0 LD A,DOBUMP CALL CYN IF DOBUMP CALL PRINT DB 'From 2-',0 LD A,BUMPHI ADD A,30H CALL ECHO ENDIF ; DOBUMP CALL PRINT DB CR,LF,'PBYE Shows List of Last Callers ...(DSPCLR) ',0 LD A,DSPCLR CALL CYN IF DSPCLR LD A,(DSPNUM) CALL PA2ASC CALL PRINT DB ' Callers Shown',0 ENDIF ; DSPCLR CALL PRINT DB CR,LF,'Maintain System Statistics ....... (MSTATS) ',0 LD A,MSTATS CALL CYN CALL PRINT DB CR,LF,'Display System Statistics at Logon (DSTATS) ',0 LD A,DSTATS CALL CYN CALL PRINT DB CR,LF,'Allow Sysop to Signon with SYSOP .. (SYSOK) ',0 LD A,SYSOK CALL CYN CALL PRINT DB CR,LF,'Supports Message Threading ....... (MSGTHD) ',0 LD A,MSGTHD CALL CYN CALL PRINT DB CR,LF,'Display Message Body After Header (SKPHDR) ',0 LD A,SKPHDR CALL CYN CALL PRINT DB CR,LF,'Number of Lines in Message ....... (MSGLIN) ',0 LD A,MSGLIN CALL PA2ASC CALL PRINT DB ' Buf Size - ',0 LD HL,MSGBUF CALL PB2ASC CALL PRINT DB 'k',0 CALL PRINT DB CR,LF,'Display Welcome Message at Logon .. (WELON) ',0 LD A,WELON CALL CYN CALL PRINT DB CR,LF,'Support Multiple Welcome Files ... (WELCUM) ',0 LD A,WELCUM CALL CYN CALL PRINT DB CR,LF,'Number of Tries to Signon ......... (TRIES) ',0 LD A,TRIES CALL PA2ASC CALL PRINT DB CR,LF,'System was Originaly OXGATE System (OXGATE) ',0 LD A,OXGATE CALL CYN CALL PRINT DB CR,LF,'Maximum Number of Users on System .. (MAXU) ',0 LD HL,MAXU CALL PB2ASC CALL PRINT DB CR,LF,'Is System Setup for One Menu ..... (ONEMNU) ',0 LD A,ONEMNU CALL CYN CALL PRINT DB CR,LF,'Skip Asking User to Delete Msgs ... (NODEL) ',0 LD A,NODEL CALL CYN CALL PRINT DB CR,LF,'Number of File Folders .......... (NMFLDRS) ',0 LD A,NMFLDRS CALL PA2ASC CALL PRINT DB CR,LF,'Use Terminals 25th Line ........... (SET25) ',0 LD A,SET25 CALL CYN CALL PRINT DB CR,LF,0 JP CHKMNU CYN: CP YES JP NZ,DNO CALL PRINT DB 'YES ',0 RET DNO: CALL PRINT DB 'NO ',0 RET DHX: CALL PRINT DB 'H',0 RET ; Display PBBS system files SFILE: CALL PRINT DB 'PBBS System Files',CR,LF,0 CALL PRINT DB CR,LF,'Bulletin File .........: ',0 LD HL,BULLETIN CALL PRINTM CALL PRINT DB CR,LF,'Callers File ..........: ',0 LD HL,CALLRS CALL PRINTM CALL PRINT DB CR,LF,'Comments File .........: ',0 LD HL,COMMENTS CALL PRINTM CALL PRINT DB CR,LF,'Index File ............: ',0 LD HL,INDEX CALL PRINTM CALL PRINT DB CR,LF,'Last Caller File ......: ',0 LD HL,LASTCAL CALL PRINTM CALL PRINT DB CR,LF,'Message File ..........: ',0 LD HL,MESSAGES CALL PRINTM CALL PRINT DB CR,LF,'Message Index File ....: ',0 LD HL,MSGINDEX CALL PRINTM CALL PRINT DB CR,LF,'News Files ............: ',0 LD HL,NEWS CALL PRINTM CALL PRINT DB CR,LF,'News Error File .......: ',0 LD HL,NEWSERR CALL PRINTM IF ONEMNU CALL PRINT DB CR,LF,'Menu File .............: ',0 LD HL,ONEMENU CALL PRINTM ELSE CALL PRINT DB CR,LF,'Main Menu .............: ',0 LD HL,MAILMENU CALL PRINTM CALL PRINT DB CR,LF,'PBBS menu .............: ',0 LD HL,PBBSMENU CALL PRINTM ENDIF IF prvate and prvtxt CALL PRINT DB CR,LF,'Private System File ...: ',0 LD HL,PRVTFIL CALL PRINTM ENDIF IF TCAP CALL PRINT DB CR,LF,'TCAP File .............: ',0 LD HL,TCPNAM CALL PRINTM ENDIF CALL PRINT DB CR,LF,'Users File ............: ',0 LD HL,USERS CALL PRINTM CALL PRINT DB CR,LF,'Welcome File ..........: ',0 LD HL,WELCOM CALL PRINTM CALL PRINT DB CR,LF,'ZMD/KMD Descriptions ..: ',0 LD HL,WHATSFOR CALL PRINTM CALL PRINT DB CR,LF,'ZMD/KMD Uploads .......: ',0 LD HL,XMODEM CALL PRINTM CALL PRINT DB CR,LF,0 JP CHKMNU ; Display PBBS settings PBS: CALL PRINT DB 'PBBS and the Operating System',CR,LF,0 CALL PRINT DB CR,LF,'Console Command Processor ...........',0 LD A,(CPLUS) CP 0 JR Z,DEXTCL CALL PRINT DB ' (CPLUS) ' DB 'CPM+',0 JP DCCPL DEXTCL: LD A,(EXTCL) CP 0 JR Z,DSTCCP CALL PRINT DB ' (EXTCL) ' DB 'ZCPRx - Ext Cmd Line',0 JP DCCPL DSTCCP: LD A,(SETCCP) CP 0 JR Z,DZCMD CALL PRINT DB '(SETCCP) ' DB 'Hard Coded CCP Address',0 JP DCCPL DZCMD: LD A,(ZCMD) CP 0 JR Z,DCPM CALL PRINT DB '. (ZCMD) ' DB 'ZCPRx - Int Cmd Line',0 JP DCCPL DCPM: CALL PRINT DB '. (CP/M) ' DB 'Standard CP/M',0 DCCPL: CALL PRINT DB CR,LF,'Console Command Processor Location . (CCPLOC) ',0 LD A,(SETCCP) CP 0 JR Z,NOCCP LD HL,CCPLOC CALL PHL4HC CALL PRINT DB 'H ',0 JR DMCLB NOCCP: CALL PRINT DB 'Calculated from BIOS',0 DMCLB: CALL PRINT DB CR,LF,'Multiple Command Line Buffer ....... (MCLBUF) ',0 IF ZCPR3 LD HL,MCLBUF LD A,H OR L JR Z,NOBUF ELSE LD HL,(CCPLOC+8) LD A,H OR L JR Z,NOBUF ENDIF CALL PHL4HC CALL PRINT DB 'H ',0 NOBUF: CALL PRINT DB CR,LF,'System Environment Loaded at ....... ' IF ZCPR3 DB ' (Z3ENV) ',0 LD HL,Z3ENV ELSE DB '(SYSENV) ',0 LD HL,SYSENV ENDIF CALL PHL4HC CALL PRINT DB 'H',0 IF ZCPR3 CALL PRINT DB ' (Use Z option)',0 ENDIF CALL PRINT DB CR,LF,'Set Different Path for SYSOP ...... (SETPATH) ',0 LD A,SETPATH CALL CYN CALL PRINT DB CR,LF,'Maximum Drive ......................' IF ZCPR3 DB '.. (ZDRV) ',0 LD HL,ZDRV ELSE DB '. (MXDRV) ',0 LD HL,MXDRV ENDIF CALL PHL4HC CALL PRINT DB 'H',0 CALL PRINT DB CR,LF,'Maximum User .......................' IF ZCPR3 DB '.. (ZUSR) ',0 LD HL,ZUSR ELSE DB '. (MXUSR) ',0 LD HL,MXUSR ENDIF CALL PHL4HC CALL PRINT DB 'H',0 CALL PRINT DB CR,LF,'Wheel Byte .........................' IF ZCPR3 DB '.. (ZWHL) ',0 LD HL,ZWHL ELSE DB ' (WHEEL) ',0 LD HL,WHEEL ENDIF CALL PHL4HC CALL PRINT DB 'H ',0 CALL PRINT DB CR,LF,'Using BYE5xx Disk Log Feature ...... (DSKLOG) ',0 LD A,DSKLOG CALL CYN CALL PRINT DB CR,LF,'Run Special File on CP/M Entry ....... (SPON) ',0 LD A,SPON CALL CYN CALL PRINT DB CR,LF,'Run Alternate File on Re-Entry ...... (ALTON) ',0 LD A,ALTON CALL CYN CALL PRINT DB CR,LF,'Activate Total Time per Day ........... (TOT) ',0 LD A,TOT CALL CYN CALL PRINT DB CR,LF,'Date Format ......................... (EDATE) ',0 LD A,EDATE CALL CYN CALL PRINT IF EDATE DB ' (Fmt DD/MM/YY)',0 ELSE DB ' (Fmt MM/DD/YY)',0 ENDIF CALL PRINT DB CR,LF,'Allow Comments to SYSOP at Logoff ... (EXCMT) ',0 LD A,EXCMT CALL CYN CALL PRINT DB CR,LF,'Allow Support for Multiple OS ........ (MDOS) ',0 LD A,MDOS CALL CYN IF MDOS CALL PRINT DB CR,LF,'Number of Support Areas Allowed ..... (NMDOS) ',0 LD A,NMDOS CALL PA2ASC CALL PRINT DB ' (Use D option)',0 ENDIF CALL PRINT DB CR,LF,'Run EXIT File for Each User Level .... (ENTY) ',0 LD A,ENTY CALL CYN CALL PRINT DB CR,LF,0 JP CHKMNU ; System Restrictions PSET1: CALL PRINT DB 'System Restrictions',CR,LF,0 CALL PRINT DB CR,LF,'Minimum Access For Public Msgs (ALLLV) ',0 LD A,ALLLV CALL PA2ASC CALL PRINT DB CR,LF,'Minimum Access To Post Message (POSTLV) ',0 LD A,POSTLV CALL PA2ASC CALL PRINT DB CR,LF,'Restrict NEW Users From CP/M (RSTKON) ',0 LD A,RSTKON CALL CYN IF RSTKON CALL PRINT DB CR,LF,'Minimum Level To Enter CP/M .. (RSTKLV) ',0 LD A,RSTKLV CALL PA2ASC ENDIF CALL PRINT DB CR,LF,'Ask CP/M Knowledge Question ...(KNOWON) ',0 LD A,KNOWON CALL CYN IF KNOWON CALL PRINT DB CR,LF,'Levels Below This Get Question (KNOKLV) ',0 LD A,KNOKLV CALL PA2ASC ENDIF CALL PRINT DB CR,LF,'Private System Running ........(PRVATE) ',0 LD A,PRVATE CALL CYN IF prvate CALL PRINT DB CR,LF,'Add NEW User to User File ... (PLOGUSR) ',0 LD A,PLOGUSR CALL CYN CALL PRINT DB CR,LF,'Display Private Text File .... (PRVTXT) ',0 LD A,PRVTXT CALL CYN CALL PRINT DB CR,LF,'Runs .COM File Before Log Off (PRVCOM) ',0 LD A,PRVCOM CALL CYN ENDIF ; PRVATE CALL PRINT DB CR,LF,'Use BELL Flag To Allow CHAT .. (CHTBYE) ',0 LD A,CHTBYE CALL CYN CALL PRINT DB CR,LF,'Number Of Rings ............... (ALRET) ',0 LD A,ALERT CALL PA2ASC CALL PRINT DB ' >>> CHAT Hours ',0 LD A,CHAT0 CALL PA2ASC CALL PRINT DB ':00-',0 LD A,CHAT1 CALL PA2ASC CALL PRINT DB ':00',0 CALL PRINT DB CR,LF,'Offset To ACESS byte in BYE .. (BYEACC) ',0 LD A,BYEACC CALL PA2ASC CALL PRINT DB CR,LF,'Set Level For ZMD/KMD Use ..... (XMACC) ',0 LD A,XMACC CALL CYN CALL PRINT DB CR,LF,'Level To Use ZMD/KMD .......... (XMLVL) ',0 LD A,XMLVL CALL PA2ASC CALL PRINT DB ' ',0 CALL PRINT DB CR,LF,'Allow PMSG Uploads ............ (XMMSG) ',0 LD A,XMMSG CALL CYN CALL PRINT DB CR,LF,'Tell BYE ZMD/PMSG Upload OK... (ENTMSG) ',0 LD A,ENTMSG CALL PA2ASC CALL PRINT DB ' XMNO - ',0 LD A,XMNO OR ENTMSG CALL PA2ASC CALL PRINT DB ' XMOK - ',0 LD A,XMOK OR ENTMSG CALL PA2ASC CALL PRINT DB ' ',0 CALL PRINT DB CR,LF,0 JP CHKMNU ; PBBS drive/user definitions DU: CALL PRINT DB 'PBBS Drive/User Definitions',CR,LF,0 IF ZCPR3 CALL PRINT DB CR,LF,'ZCPR Max Drive/User .....: ',0 LD A,(ZDRV) ADD A,40H CALL ECHO LD A,(ZUSR) CALL PA2ASC CALL PRINT DB ':',0 ELSE CALL PRINT DB CR,LF,'SYSTEM Max Drive/User ...: ',0 LD A,(MXDRV) ADD A,40H CALL ECHO LD A,(MXUSR) CALL PA2ASC CALL PRINT DB ':',0 ENDIF ; ZCPR3 CALL PRINT DB CR,LF,'PBBS System DU: .........: ',0 LD A,SYSDRV ADD A,41H CALL ECHO LD A,SYSUSR CALL PA2ASC CALL PRINT DB ':',0 IF TCAP CALL PRINT DB CR,LF,'Terminal Cap. DU: .......: ',0 LD A,TCPDRV ADD A,41H CALL ECHO LD A,TCPUSR CALL PA2ASC CALL PRINT DB ':',0 LD HL,TCPNAM CALL PRINTM ENDIF ; TCAP IF NOT MDOS CALL PRINT DB CR,LF,'CP/M Drive/User .........: ',0 LD A,DU0 ; [tlp] ; LD A,CPMDU ; [tlp] LD (DRV),A LD A,0 LD (USR),A CALL PDU ENDIF ; NOT MDOS CALL PRINT DB CR,LF,'Multiple DOS Support ....: ',0 LD A,MDOS CALL CYN CALL PCRLF IF MDOS LD HL,DU0 LD A,(DRV0) LD (DRV),A LD A,(USR0) LD (USR),A CALL PDUL LD HL,DU1 LD A,(DRV1) LD (DRV),A LD A,(USR1) LD (USR),A CALL PDUL LD HL,DU2 LD A,(DRV2) LD (DRV),A LD A,(USR2) LD (USR),A CALL PDUL LD HL,DU3 LD A,(DRV3) LD (DRV),A LD A,(USR3) LD (USR),A CALL PDUL LD HL,DU4 LD A,(DRV4) LD (DRV),A LD A,(USR4) LD (USR),A CALL PDUL LD HL,DU5 LD A,(DRV5) LD (DRV),A LD A,(USR5) LD (USR),A CALL PDUL LD HL,DU6 LD A,(DRV6) LD (DRV),A LD A,(USR6) LD (USR),A CALL PDUL LD HL,DU7 LD A,(DRV7) LD (DRV),A LD A,(USR7) LD (USR),A CALL PDUL LD HL,DU8 LD A,(DRV8) LD (DRV),A LD A,(USR8) LD (USR),A CALL PDUL LD HL,DU9 LD A,(DRV9) LD (DRV),A LD A,(USR9) LD (USR),A CALL PDUL LD HL,DU10 LD A,(DRV10) LD (DRV),A LD A,(USR10) LD (USR),A CALL PDUL LD HL,DU11 LD A,(DRV11) LD (DRV),A LD A,(USR11) LD (USR),A CALL PDUL LD HL,DU12 LD A,(DRV12) LD (DRV),A LD A,(USR12) LD (USR),A CALL PDUL LD HL,DU13 LD A,(DRV13) LD (DRV),A LD A,(USR13) LD (USR),A CALL PDUL LD HL,DU14 LD A,(DRV14) LD (DRV),A LD A,(USR14) LD (USR),A CALL PDUL LD HL,DU15 LD A,(DRV15) LD (DRV),A LD A,(USR15) LD (USR),A CALL PDUL ENDIF ; MDOS JP CHKMNU PDU: LD A,(DRV) CALL ECHO LD A,(USR) CALL PA2ASC CALL PRINT DB ':',0 RET IF ZCPR3 ; [tlp] ; Z System File Settings ZSYS: CALL PRINT DB 'ZCPR System Settings',CR,LF,0 CALL PRINT DB CR,LF,'ZCPR3 Wheel Byte .......(WHEEL) : ',0 LD HL,(ZWHL) PUSH HL CALL PHL4HC CALL PRINT DB 'H ',0 POP HL LD A,(HL) CP 0 JP Z,ZOF CALL PRINT DB 'ON ',0 JR ZMDRV ZOF: CALL PRINT DB 'OFF ',0 ZMDRV: CALL PRINT DB CR,LF,'ZCPR3 Maximum Drive ....(MXDRV) : ',0 LD HL,ZDRV ; [tlp] PUSH HL CALL PHL4HC CALL PRINT DB 'H ',0 POP HL LD A,(HL) ADD A,40H CALL ECHO ZMUSR: CALL PRINT DB CR,LF,'ZCPR3 Maximum User .....(MXUSR) : ',0 LD HL,ZUSR ; [tlp] PUSH HL CALL PHL4HC CALL PRINT DB 'H ',0 POP HL LD A,(HL) CALL Z,PA2ASC CALL PRINT DB CR,LF,LF,'ZCPR3 Env Address ......(Z3ENV) : ',0 LD HL,Z3ENV CALL PHL4HC CALL PRINT DB 'H',0 CALL PRINT DB CR,LF,'CCP Location ..........(CCPLOC) : ',0 LD A,(SETCCP) CP 0 JR Z,ZNOCCP LD HL,CCPLOC CALL PHL4HC CALL PRINT DB 'H',0 JR ZSUSR ZNOCCP: CALL PRINT DB 'AUTO ',0 ZSUSR: CALL PRINT DB CR,LF,'Mtpl Cmd Line Buffer ..(MCLBUF) : ',0 LD A,(ZCMD) CP 0 JR Z,ZMBUF LD HL,(CCPLOC+8) JR ZCCPP ZMBUF: LD HL,MCLBUF ZCCPP: CALL PHL4HC CALL PRINT DB 'H ',0 LD HL,MCLBUF+4 PCL: LD A,(HL) CP 0 JR Z,ZTCP CALL ECHO INC HL JR PCL ZTCP: IF TCAP CALL PRINT DB CR,LF,LF,'ZCPR3 Terminal Cap ......(TCAP) : ',0 LD HL,Z3ENV+80H CALL PHL4HC CALL PRINT DB 'H ',0 LD A,TCPDRV ADD A,41H CALL ECHO LD A,TCPUSR CALL PA2ASC CALL PRINT DB ':',0 LD HL,TCPNAM CALL PRINTM ENDIF ; TCAP ZPH: CALL PRINT DB CR,LF,'ZCPR3 Path Address ......(PATH) : ',0 LD HL,(ZPTH) CALL PHL4HC CALL PRINT DB 'H ',0 LD HL,(ZPTH) ; [tlp] ZPTH1: LD A,(HL) CP 0 JP Z,DPTH CP '$' JR z,zpdrv ADD A,40H ZPDRV: CALL ECHO INC HL PUSH HL LD A,(HL) CP '$' JR NZ,ZPUSR CALL ECHO JR ZPUSR1 ZPUSR: CALL PA2ASC ZPUSR1: CALL PRINT DB ': ',0 POP HL INC HL JR ZPTH1 DPTH: CALL PRINT DB CR,LF,0 JP CHKMNU ENDIF ; ZCPR3 [tlp] ; User has requested the menu option. Show system menu and ; present all options. MENU: LD A,0FFH ; User has requested menu option LD (MFLG),A ; Save menu flag LD HL,CLS ; Clear screen and display menu CALL PRINTM CALL PRINT DB CR,LF,LF DB ' PBBS Statistics Menu',CR,LF,LF DB ' A) Access Table Information',CR,LF DB ' B) Drive/User Bitmaps',CR,LF DB ' D) Drive/User Settings',CR,LF ; [tlp] DB ' E) Entry/Welcome Files',CR,LF DB ' F) Mail Folders and Access',CR,LF DB ' I) INDEX.PBS Information',CR,LF DB ' L) Low Memory Addresses',CR,LF DB ' M) MSGINDEX.PBS Information',CR,LF DB ' O) Operating System',CR,LF ; [tlp] DB ' P) Internal PBBS Settings',CR,LF DB ' R) System Restrictions',CR,LF ; [tlp] DB ' S) System Files',CR,LF DB ' V) Version Number',CR,LF IF ZCPR3 ; [tlp] DB ' Z) Z-System',CR,LF ; [tlp] ENDIF ; [tlp] DB '?-/) Help Screen',CR,LF DB ' X) Exit',CR,LF,LF DB ' Enter Selection: ',0 CALL GETCH ; Get option from user PUSH AF ; Push option on stack LD HL,CLS ; Clear screen for option display CALL PRINTM POP AF ; Restore option JP OPTION ; Display the built-in help menu. HELP: CALL PRINT DB CR,LF,'PBBS Statistics for ',0 LD HL,LOCSTR CALL PRINTM LD A,(REENTR) CP 0 JR Z,NDATH CALL PRINT DB 'as of ',0 LD IX,BDATE CALL PDATE NDATH: CALL PRINT DB CR,LF,'Sysop: ',0 LD HL,SYSOP CALL PRINTM CALL PRINT DB CR,LF,LF DB ' Usage: PSTAT Menu Sub-System',CR,LF DB ' PSTAT /o PSTAT Options',CR,LF,LF DB ' Options A - Access Table (User Access)',CR,LF DB ' B - Bitmaps (PBBSDB.HDR)',CR,LF DB ' D - DU: Selections (PBBSEQU.HDR)',CR,LF DB ' E - Entry/Welcome (PBBSDB.HDR)',CR,LF DB ' F - Folders (PBBSDB.HDR)',CR,LF DB ' I - System Stats (INDEX.PBS)',CR,LF DB ' L - System Flags (Low Memory)',CR,LF DB ' M - Message Stats (MSGINDEX.PBS)',CR,LF DB ' O - Operating System(PBBS EQU/DB)',CR,LF DB ' P - PBBS Settings (PBBS EQU/DB)',CR,LF DB ' R - Restrictions (PBBSEQU.HDR)',CR,LF DB ' S - System Files (PBBSDB.HDR)',CR,LF DB ' V - Version Number',CR,LF IF ZCPR3 ; [tlp] DB ' Z - Z-System',CR,LF ; [tlp] ENDIF ; [tlp] DB ' ? or / - Help Screen',CR,LF,0 JP CHKMNU ; Restore original DU: status and stack. Then exit EXIT: LD A,(OLDDRV) LD E,A LD C,LOGDRV CALL BDOS ; Restore original drive LD A,(OLDUSR) LD E,A LD C,LOGUSR CALL BDOS ; Restore original user LD HL,(CCPSTK) LD SP,HL ; Restore original stack RET ; And exit CHKMNU: LD A,(MFLG) CP 0 JP Z,EXIT CALL PRINT DB CR,LF,'Press Any Key ... ',0 CALL GETCH JP MENU VERS: LD HL,CLS CALL PRINTM CALL PVER IF CREDITS LD HL,AUTHOR CALL PRINTM ENDIF CALL PRINT DB CR,LF,'Statistics for ',0 LD HL,LOCSTR CALL PRINTM LD A,(REENTR) CP 0 JR Z,NDATV CALL PRINT DB 'as of ',0 LD IX,BDATE CALL PDATE NDATV: CALL PRINT DB CR,LF,'SYSOP: ',0 LD HL,SYSOP CALL PRINTM CALL PRINT DB CR,LF,0 JP CHKMNU ; Subroutines IOPEN: LD HL,INDEX ; Point to INDEX.PBS filename CALL OPEN ; Open file LD HL,NDXLEN ; Get length of INDEX.PBS record LD (RRSZ),HL ; Save in buffer RET ;PCRLF1: CALL PRINT ; Two lines ; DB CR,LF,0 ;PCRLF: CALL PRINT ; One line ; DB CR,LF,0 ; RET PDUL: LD A,(HL) CP 0 RET Z PUSH HL CALL PRINT DB ' ',0 LD A,(DRV) CALL ECHO LD A,(USR) CALL PA2ASC CALL PRINT DB ': - ',0 POP HL CALL PRINTM CALL PCRLF RET ; SYSLIB Module Name: SPADC ; Author: Richard Conn ; SYSLIB Version Number: 3.6 ; Module Version Number: 1.2 ; PADC -- ; PRINT REG A AS DECIMAL CHARACTERS W/LEADING IN 3-CHAR FIELD PADC: PUSH BC ; Save regs PUSH DE PUSH AF ; Save A LD D,1 ; Turn on leading flag ; PRINT ROUTINE PADC1: LD B,100 ; Print hundreds CALL PAC ; Print a character LD B,10 ; Print tens CALL PAC ADD A,'0' ; Convert to ASCII CALL ECHO ; Print POP AF ; Restore A POP DE ; Restore regs POP BC RET ; PRINT RESULT OF DIVISION OF A BY B W/LEADING (INTEGER DIVISION) PAC: LD C,0 ; Set count PACL: SUB B ; Compute count JP C,PACD INC C ; Increment count JP PACL PACD: ADD A,B ; Add B back in LD E,A ; Save A LD A,C ; Get count OR A ; zero? JP NZ,PACD1 OR D ; 0 for no leading (A=0, A OR D=0 IF D=0) JP Z,PACD1 LD A,' ' ; Print CALL ECHO LD A,E ; Restore A RET PACD1: LD D,0 ; D=0 for no leading LD A,C ; Get count ADD A,'0' ; Convert to decimal CALL ECHO ; Print it LD A,E ; Restore A RET ; SYSLIB Module Name: SPHL5DC ; Author: Richard Conn ; SYSLIB Version Number: 3.6 ; Module Version Number: 1.2 PUTRG MACRO PUSH BC ; Save BC, DE, HL PUSH DE PUSH HL ENDM GETRG MACRO POP HL ; Restore HL, DE, BC POP DE POP BC ENDM ; PHL5DC -- ; PRINT HL AS 5 DECIMAL CHARACTERS PHL5DC: PUSH AF ; Save all regs PUTRG LD B,0 ; B=0 for no leading JP PHDC ; PHLDC -- ; PRINT HL AS DECIMAL CHARACTERS W/LEADING SPACES IN 5-CHAR FIELD PHLDC: PUSH AF ; Save all regs PUTRG LD B,1 ; A=1 for leading ; PRINT HL USING LEADING FLAG IN B PHDC: LD DE,10000 ; Print 10000'S CALL PHDC1 LD DE,1000 ; Print 1000'S CALL PHDC1 LD DE,100 ; Print 100'S CALL PHDC1 LD DE,10 ; Print 10'S CALL PHDC1 LD A,L ; Print 1'S ADD A,'0' ; Convert to ASCII CALL ECHO GETRG ; Restore all regs POP AF RET ; DIVIDE HL BY DE AND PRINT QUOTIENT WITH LEADING S PHDC1: LD C,0 ; Set count PHDC2: LD A,L ; Sub E from L SUB E LD L,A ; Result in L LD A,H ; Sub D from H w/borrow SBC A,D LD H,A ; Result in H JP C,PHDC3 ; Done IF carry set (further borrow) INC C ; Increment count JP PHDC2 PHDC3: LD A,L ; Add E to L ADD A,E LD L,A ; Result in L LD A,H ; Add D to H w/carry ADC A,D LD H,A ; Result in H LD A,C ; Get result OR A ; Check for zero JP NZ,PHDC4 OR B ; 0 = no leading (A=0, A or B = 0 IF B=0) JP Z,PHDC4 LD A,' ' ; Print JP ECHO PHDC4: LD B,0 ; Turn off leading LD A,C ; Get value ADD A,'0' ; Convert to ASCII JP ECHO ; SYSLIB Module Name: SPHL4HC ; Author: Richard Conn ; SYSLIB Version Number: 3.6 ; Module Version Number: 1.2 ; ; PHL4HC -- Print HL as 4 Hex Characters ; No Registers are to be affected. ; PHL4HC: PUSH AF ; Save A LD A,H ; Print H CALL PA2HC LD A,L ; Print L CALL PA2HC POP AF ; Restore A RET ; SYSLIB Module Name: SPA2HC ; Author: Richard Conn ; SYSLIB Version Number: 3.6 ; Module Version Number: 1.2 ; ; PA2HC -- ; PRINT REG A AS 2 HEXADECIMAL CHARACTERS ON CON: ; PA2HC: PUSH AF ; Save A PUSH AF RRCA ; Exchange nybbles RRCA RRCA RRCA CALL PAHC ; Print low-order nybble as hex POP AF ; Get A CALL PAHC ; Print low-order nybble as hex POP AF ; Restore A RET PAHC: AND 0FH ; Mask for low nybble CP 10 ; Letter or digit? JP C,PADIG ; Digit IF carry ADD A,'A'-10 ; Convert to 'A'-'F' JP ECHO ; Print PADIG: ADD A,'0' ; Convert to '0'-'9' JP ECHO ; Print ; Data section ; Backup INDEX.PBS record BIDATE: DB 0,0,0 ; Current date BIMRNM: DB 0,0 ; Next message record BIMNXT: DB 0,0 ; Next message number BIMNDX: DB 0,0 ; # records in message index BICALL: DB 0,0 ; # callers to system BIUSER: DB 0,0 ; # users on system BIUSRC: DB 0,0 ; # records in users file (reaches USRS max) BSPARE: DB 0 ; Spare byte for future BHRDLOG:db 0 ; Hard-copy log switch BMUSRD: DB 0,0,0 ; Last date user file maintained BMUSRT: DB 0,0,0 ; Last time user file maintained BMMSGD: DB 0,0,0 ; Last date messages maintained BMMSGT: DB 0,0,0 ; Last time messages maintained BSYACU: DB 0,0 ; Total daily minutes BSYDCC: DB 0 ; Total daily calls BSYCRP: DB 0 ; Current usage (%) BSYPVP: DB 0 ; Previous usage (%) BSYDAY: DB 0 BIXTRA: DS syslen-(bsyday+1-bidate); Extra storage for expansion ; MSGINDEX.PBS record MTO: DS 30 ; Message TO: MNUM: DS 2 ; Message number MDAT: DS 3 ; Date message left MBLK: DS 1 ; Message block count MSTR: DS 2 ; Message starting block number MREC: DS 2 ; Actual index record number MSUB: DS 26 ; Message SUBJ: MFROM: DS 30 ; Message FROM: MPUB: DS 1 ; Public/Private switch (00=public) MFNUM: DS 1 ; Message folder number MREADF: DS 1 ; Read/Deleted flag (FF=deleted) MRETENF:DS 1 ; Message retention MTIME: DS 3 ; Time message was left MFLNKF: DS 2 ; Forward link MRLNKF: DS 2 ; Reverse link MREPLYf:DS 2 ; Reply to (unecessary) DRV: DS 1 ; Drive ID storage USR: DS 1 ; User ID storage MSGREC: DS 2 ; Message record number storage OLDMSG: DS 2 ; Temporary message number storage TMPUSR: DB 0 ; Temproary user number storage OLDDRV: DB 0 ; Original drive OLDUSR: DB 0 ; Original user MFLG: DB 0 ; Menu Flag CCPSTK: DW 0 ; Original stack DS 64 STACK EQU $ ; Program stack END