10 ' EXITRBBS.BAS, version 1.1 20 ' Routine to allow users to leave comments before logging off 30 ' Original by Brian Kantor & Skip Hansen 09/81 (?) 40 ' Minor text changes, bye call, and time-on-system stuff added 50 ' by Ben Bronson, 10/11/81 60 ' Note that this is meant to be compiled and called "BYE.COM", while 70 ' the real assembly-language BYE.COM (which is still needed) is 80 ' given another name (here, 'BYEX.COM'). The easiest way to handle 90 ' this is to use Macro-80 to assemble a dummy file like the following: 91 ' ENTRY BYEX 92 ' BYEX EQU 0F800H 93 ' RET 94 ' where '0F800H' is the address at which the real BYE runs. Then you 95 ' just include BYEX.REL when using L80 to load the BYE.REL file pro- 96 ' duced by BASCOMing BYE.BAS: 'L80 BYE,BYEX,BYE/N/E' 97 ' 100 ' Main routine for users to leave comments before logging off 120 ' 130 DEFINT A-Z 140 DIM H(6),HT(6),HD(6) 150 ERS$=CHR$(8)+" "+CHR$(8) 165 OPEN "I",1,"A:LASTCALR":INPUT #1,N$,O$,F$,DT$:CLOSE 170 PRINT 180 PRINT "Want to leave any comments (Y/N)? ";:C=1:GOSUB 400:C=0 190 IF LEFT$(B$,1)="N" OR LEFT$(B$,1)="n" THEN 360 200 IF LEFT$(B$,1)<>"Y" AND LEFT$(B$,1)<>"y" THEN 180 210 PRINT 230 OPEN "R",1,"A:COMMENTS",65:FIELD#1,65 AS RR$ 240 GET#1,1:RE=VAL(RR$)+1:RL=65 250 IF RE=1 THEN RE=2 260 S$="From: "+N$+" "+O$+" "+DT$:GOSUB 510 'This assumes you have the date in LASTCALR as "DT$" 270 PUT#1,RE 280 PRINT "Enter comments, to end, (16 lines max)" 290 PRINT 300 PRINT "*"; 310 GOSUB 400 320 IF B$="" THEN 350 330 RE=RE+1:S$=B$:RL=65:GOSUB 510:PUT#1,RE 340 GOTO 300 350 S$=STR$(RE):RL=65:GOSUB 510:PUT#1,1:CLOSE 360 GOSUB 44000 370 PRINT "Please call again" 390 CALL BYEX 'Calling the dummy file that points to the real BYE 395 END 400 ' 410 ' Accept string into B$ from console 420 ' 430 GOSUB 560 440 B$=SAV$ 450 IF LEN(B$)=0 THEN RETURN 460 IF C=0 THEN 500 470 FOR ZZ=1 TO LEN(B$) 480 MID$(B$,ZZ,1)=CHR$(ASC(MID$(B$,ZZ,1))+32*(ASC(MID$(B$,ZZ,1))>96)) 490 NEXT ZZ 500 RETURN 510 ' 520 ' Fill and store disk record 530 ' 540 LSET RR$=LEFT$(S$+SPACE$(RL-2),RL-2)+CHR$(13)+CHR$(10) 550 RETURN 560 CHC=0: SAV$="" 570 NCH=ASC(INPUT$(1)) 580 IF NCH=127 THEN 640 590 IF NCH<32 THEN 670 600 IF CHC>=62 THEN PRINT CHR$(7);:GOTO 570 610 SAV$=SAV$+CHR$(NCH): CHC=CHC+1: PRINT CHR$(NCH); 620 IF CHC=55 THEN PRINT CHR$(7); 630 GOTO 570 640 IF CHC=0 THEN 570 ELSE PRINT RIGHT$(SAV$,1);: GOTO 660 650 IF CHC=0 THEN 570 ELSE PRINT ERS$; 660 CHC=CHC-1: SAV$=LEFT$(SAV$,CHC): GOTO 570 670 IF NCH=8 THEN 650 680 IF NCH=13 THEN PRINT: RETURN 690 IF NCH=21 THEN PRINT " #": GOTO 560 700 IF NCH<>24 OR CHC=0 THEN 570 710 FOR BCC=1 TO CHC: PRINT ERS$;: NEXT BCC: GOTO 560 44000 ' Clock routine from Hank Szyszka, modified 44010 ' Print present time first 44210 C=32 : ' C=CLOCK PORT (20H) 44220 ' Note that this is a Mountain Hardware 100,000 DAY Clock 44230 H(1)=INP(C+9) AND 15:H(2)=INP(C+8) AND 15 44240 H(3)=INP(C+7) AND 15:H(4)=INP(C+6) AND 15 44250 H(5)=INP(C+5) AND 15:H(6)=INP(C+4) AND 15 44260 REM 44270 PRINT:PRINT N$+" "+O$+" logged off at "; 44280 TF$="#" 44290 FOR I=1 TO 6 44300 PRINT USING TF$;H(I); 44310 IF I=2 THEN PRINT ":"; 44320 IF I=4 THEN PRINT ":"; 44330 NEXT I 44340 PRINT 44700 ' Now get hh/mm/ss stored by enterbbs prog (not yet released as of 10/11/81) 44710 HT(1)=PEEK(74):HT(2)=PEEK(75):HT(3)=PEEK(76) 44720 HT(4)=PEEK(77):HT(5)=PEEK(78):HT(6)=PEEK(79) 44730 ' And calculate the difference... 44740 IF H(6)