; ; BYETIME2 by: Joubert Berger ; Atlanta Kaypro MBBS ; (404) 923-2580 [300/1200 baud] ; ; 8/16/86 - Fixed code to save stack properly so program will exit ; v. 31 with a simple RETurn instead of a warm-boot (faster this ; way). Removed seconds display (non-essential info). ; ; 6/28/86 - Eliminated 'S' option. Now displays time/date along with ; v. 30 stats. Fixed nulls (removed MOV E,A as value already in A). ; Added equate for clock. Made display a little more pleasing ; to the eye. ; Lawrence Davis - Glendale Litera QBBS - 818/956-6164 ; ; ;********************************************************************** ; 12/22/85 ADDED RBBS38 SUPPORT JIM GOOCH (Norcross RCPM) 921-1116 ;********************************************************************** ; After just setting up BYE502, I decided to play around a bit with ; the extended BDOS functions that are in BYE5xx. ; ; BYETIME will display the time and date to the user if he just types ; 'BYETIME'. If he types 'BYETIME S' he will be given some statistcs about ; what kind of access he has. It will include the max. drive/user, ; time on system, max. time allowed, number of nulls, and if the ; sysop is in. ; ; It is nothing fancy, and not written that great, but it is just a ; demonstration how you can use all those new BDOS calls in BYE5xx. ; If anyone adds or updates anything to this, I would appreciate it ; if they send me a copy of it. ; Joubert Berger - 12/17/85 ; ; NO EQU 0 YES EQU NOT NO ; RBBS EQU YES ; Set YES if RBBS or QBBS MBBS EQU NO ; Set YES if MBBS CLOCK EQU YES ; Yes, if RTC installed ; GSUSR EQU 32 ; Get/Set user MXDRV EQU 69 ; Max drive MXUSR EQU 70 ; Max user NULLS EQU 72 ; Number of nulls BELLON EQU 78 ; Bell toggle RTCBUF EQU 79 ; Get clock(RTC) buffer LCDATA EQU 80 ; Get user buffer MXTIME EQU 81 ; Max time on system ; CR EQU 0DH ; Carrige return LF EQU 0AH ; Line feed FCB EQU 5CH ; File control block BDOS EQU 0005H ; ORG 100H BEGIN: LXI H,0 ; Save stack for RET exit DAD SP SHLD OLDSP ; MVI C,GSUSR ; Check if running BYE MVI E,241 CALL BDOS CPI 77 JZ START ; If there continue CALL ILPRT ; If not abort - Print abort message DB 'BYE5xx is not running....aborting.',0 JMP EXIT ; START: ; IF CLOCK TIME: CALL ILPRT DB CR,LF,0 CALL DATE ; Read the clock buffer LDA HRSAV ; Get hour CALL PASC ; Print it ; MVI A,':' CALL CTYPE ; LDA MNSAV ; Get minutes CALL PASC ; Print it ; CALL ILPRT DB ' ',0 ; LDA MMSAV ; Get the month CPI 1 ; And print the month name JNZ FEBU CALL ILPRT DB 'January ',0 JMP DONE ; FEBU: CPI 2 JNZ MARC CALL ILPRT DB 'February ',0 JMP DONE ; MARC: CPI 3 JNZ APRL CALL ILPRT DB 'March ',0 JMP DONE ; APRL: CPI 4 JNZ MAYY CALL ILPRT DB 'April ',0 JMP DONE ; MAYY: CPI 5 JNZ JUNE CALL ILPRT DB 'May ',0 JMP DONE ; JUNE: CPI 6 JNZ JULY CALL ILPRT DB 'June ',0 JMP DONE ; JULY: CPI 7 JNZ AUGS CALL ILPRT DB 'July ',0 JMP DONE ; AUGS: CPI 8 JNZ SEPT CALL ILPRT DB 'August ',0 JMP DONE ; SEPT: CPI 9 JNZ OCTO CALL ILPRT DB 'September ',0 JMP DONE ; OCTO: CPI 10 JNZ NOVB CALL ILPRT DB 'October ',0 JMP DONE ; NOVB: CPI 11 JNZ DECM CALL ILPRT DB 'November ',0 JMP DONE ; DECM: CALL ILPRT DB 'December ',0 ; DONE: ; LDA DDSAV ; Get the day CALL PASC ; Print it ; CALL ILPRT DB ', ',0 ; LDA CNSAV ; Get the century CALL PASC ; Print it LDA YYSAV ; Get the year CALL PASC ; Print it ENDIF ; ; STATIS: CALL ILPRT DB CR,LF,LF,0 MVI C,LCDATA ; Get the user buffer MVI E,255 CALL BDOS ; next 2 not necessary for RBBS (lastcalr name starts in col 1) ; IF MBBS INX H ; Jump over the first two spaces INX H ; AT LEAST FOR MBBS ENDIF ; MBBS ; PRTNAM: MOV A,M ; Print the first name ; IF MBBS CPI ';' ; Check for end of first name ENDIF ; MBBS ; IF RBBS CPI ' ' ; Rbbs uses a space ENDIF ; Rbbs ; JZ PRTNDN CALL CTYPE INX H JMP PRTNAM ; PRTNDN: CALL ILPRT DB ', here are some statistics regarding your' DB ' access level.',CR,LF,LF,0 ; ; Here we go... CALL ILPRT DB 'Maximum Drive/User : ',0 ; MVI C,MXDRV ; Get max. drive MVI E,255 ; Using the BDOS calls in BYE5 CALL BDOS ADI 40H ; Make it a letter CALL CTYPE ; Print it ; MVI C,MXUSR ; Get max. user MVI E,255 CALL BDOS ; CPI 10 ; If user # < 10, skip JC DUX PUSH B MVI C,'0'-1 DUY: INR C ; Get tens digit SUI 10 JNC DUY ; Loop until we've gone too far ADI 10 MOV B,A ; Save units digit MOV A,C ; Print tens digit CALL CTYPE MOV A,B ; Get units back POP B DUX: ADI '0' CALL CTYPE ; CALL ILPRT ; Finish with a colon DB ':',CR,LF,0 ; ; CALL ILPRT DB 'Number of Nulls : ',0 ; MVI C,NULLS ; Get number of nulls MVI E,255 ; Will be between 0 and 9 CALL BDOS ; MOV A,E ; Move it over ADI 30H ; Make it a digit to print CALL CTYPE CALL ILPRT ; Clean up with a CR/LF DB CR,LF,0 ; ; CALL ILPRT DB 'Minutes on System : ',0 ; CALL DATE ; Use DATE to get current time on LDA TOS ; System CALL PASC ; Print it - already in binary CALL ILPRT ; And clean up DB CR,LF,0 ; ; CALL ILPRT DB 'Maximum Time Allowed : ',0 ; MVI C,MXTIME ; Max. time on system allowed MVI E,255 CALL BDOS CPI 0 ; Check for unlimited JNZ NOLIMT CALL ILPRT ; And print "Unlimited" if so DB 'UNLIMITED',0 JMP EXMXTIM NOLIMT: CALL PASC ; Else print max. time allowed CALL ILPRT DB ' minutes',0 EXMXTIM:CALL ILPRT ; And finish up DB CR,LF,0 ; ; CALL ILPRT DB CR,LF,'The System Operator is currently ',0 ; MVI C,BELLON ; Now tell if sysop is in - this MVI E,255 ; Is done by checking if console CALL BDOS ; Bell is set or not CPI 0FFH ; Check if set JZ BELON CALL ILPRT DB 'not ',0 ; It is set so report it BELON: CALL ILPRT DB 'in.',CR,LF,0 ; EXIT: LHLD OLDSP SPHL RET ; Done, so lets exit... ; ;======================================================================== ; ; The call will find the Real-Time Clock buffer in BYE and get the hour, ; minutes, second, month, date, century, and year and save it in buffers ; DATE: MVI C,RTCBUF ; Lets find the buffer CALL BDOS ; Use BYE's BDOS call ; MOV A,M ; Get the hour CALL BCDBIN ; Change to binary STA HRSAV ; Save it for later INX H ; Increment the buffer ; MOV A,M ; Get the minute CALL BCDBIN ; Change to binary STA MNSAV ; Save it for later INX H ; Increment buffer ; MOV A,M ; Get the second CALL BCDBIN ; Change to binary STA SESAV ; Save it INX H ; Increment buffer ; MOV A,M ; Get the century CALL BCDBIN ; Change to binary STA CNSAV ; Save it INX H ; Increment buffer ; MOV A,M ; Get the year CALL BCDBIN ; Change to binary STA YYSAV ; Save it INX H ; Increment buffer ; MOV A,M ; Get the month STA MMSAV ; Save it - no need to change INX H ; Increment buffer ; MOV A,M ; Get the day CALL BCDBIN ; Change to binary STA DDSAV ; Save it for later INX H ; Increment buffer ; MOV A,M ; Get time on system STA TOS ; Save if for later ; RET ; ; Inline print routine - this will print everything until it finds ; a null (0). ; ILPRT: XTHL ILPLP: MOV A,M INX H ORA A JZ ILPRET CALL CTYPE JMP ILPLP ILPRET: XTHL RET ; ; This will print the character in register A ; CTYPE: PUSH B PUSH D PUSH H PUSH PSW MOV E,A MVI C,2 CALL BDOS POP PSW POP H POP D POP B RET ; ; This will convert the BCD number in A to binary ; BCDBIN: PUSH PSW ANI 0F0H RRC RRC RRC RRC MOV C,A MVI B,9 ; BCDBL: ADD C DCR B JNZ BCDBL MOV B,A POP PSW ANI 0FH ADD B RET ; ; This will print the the binary number in A ; PASC: MVI C,0 PASC1: SUI 10 JC PASC2 INR C JMP PASC1 PASC2: ADI 10 PUSH PSW MOV A,C ORA A JZ ONENUM ADI 030H CALL CTYPE JMP TWONUM ONENUM: MVI A,'0' CALL CTYPE TWONUM: POP PSW ADI 030H CALL CTYPE RET ; ; Buffer area ; HRSAV: DB 0 ; Hour MNSAV: DB 0 ; Minutes SESAV: DB 0 ; Seconds CNSAV: DB 0 ; Century YYSAV: DB 0 ; Year MMSAV: DB 0 ; Month DDSAV: DB 0 ; Day TOS: DB 0 ; Time on system ; OLDSP: DS 2 DS 20 STACK EQU $ END