[comp.sys.apple] BBS in BASIC for the Apple II

2QN3GLOP@UKANVAX.BITNET (05/22/87)

This is a small BBS program for the Apple II computer.  I have
had some help on it to get it to answer the phone from basic.
I think it works okay now.  Would someone please download it
and EXEC it into memory by typing ]EXEC MINIBOARD
There is a problem though, when you are asked for a I.D.
number the computer locks up.  I think there is a small simple
basic error in one of the lines between 50 and 110.
If you know basic it should be easy to figure out.
I think.  If anyone figures out why it (appears) to
lock up please write back.
                                2QN3GLOP@UKANVAX.BITNET
CUT HERE-----------------------------------------------------+
  RUN
  TEXT:SPEED=100
  10 CLEAR 8000
  12 DIM N$(50),P$(50),FM$(50),TM$(50),MS$(50),T$(50,5)
  14 DIM ML(50),MC(50)
  20 PRINT :PRINT"********* Mini-Board 1.0 ***********"
  30 PRINT"Waiting for Caller." : REM
  32 PRINT "PR#2" :REM Put ctrl-D between first quote and P
  34 PRINT "IN#2" : REM PUT ctrl-D between first quote and I
  36 INPUT A$ :IF A$ <> "CONNECT" THEN GOTO 36
  40 PRINT:PRINT"Incoming call.":PRINT
  42 FOR I=1 TO 500:NEXTI :REM
  44 PRINT"Welcome to the Mini-Board."
  46 PRINT"Supported by "
  48 PRINT"Michael Edward Holman." : GOTO 100
  50 A$=""
  60 Y$=INKEY$:IFY$=""THENGOTO60
  62 IFY$=CHR$(13)THEN PRINT: RETURN
  64 IFY$=CHR$(8)AND LEN(A$)=1 THENPRINTY$;:GOTO50
  66 IFY$=CHR$(8)AND LEN(A$)>1THENPRINTY$;:L=LEN(A$): A$=LEFT$(A$,L-1):GOTO60
  68 IFY$<" "ORY$>"z"THENGOTO60
  69 PRINTY$;:A$=A$+Y$:IFLEN(A$)>LN THEN RETURN
  70 GOTO 60
  100 PRINT:PRINT"Enter your I.D. number" : PRINT"Enter 'N' for New caller"
  110 PRINT"===> ";:LN=5:GOSUB50:IFA$=""ORA$="N"THEN200
  120 IFVAL(A$)<10000 OR VAL(A$)>30000 THEN PRINT"Input error.":GOTO100
  130 ID=VAL(A$)-10000:PRINT
  140 PRINT"Enter password: ";:LN=8:GOSUB50
  145 IFA$=""THENGOTO200
  150 IFA$=""ORA$<>P$(ID)THENPRINT"Incorrect! Access DENIED.": GOTO200
  160 PRINT"Welcome back ";N$(ID):PRINT
  170 PRINT"Welcome to Mini-Board."
  172 IF ID>1 THENGOTO180:
  174 PRINT"SYSOP on-line. Hello ";N$(ID):PRINT
  176 PRINT"Activate SYSOP Menu? ";:LN=1:GOSUB50
  177 IFA$="N" OR A$="n"THEN GOTO 180
  178 IFA$<>"Y" AND A$<>"y" THENGOTO176
  179 GOTO 8000 :
  180 GOTO 350
  200 PRINT"Logged on as New caller. Standby."
  210 TC=TC+1:P$(TC)="":N$(TC)="":ID=TC
  220 PRINT"Enter your first name : ";:LN=15:GOSUB50
  230 IFA$=""THEN A$="NONAME"
  240 N$(ID)=A$
  250 PRINT:PRINT"Enter a passowrd (8 letters or less)"
  260 PRINT"=====>> ";:LN=8:GOSUB50: IF A$=""THENA$="PASSWORD"
  270 P$(ID)=A$
  280 PRINT:PRINT"Logged in as ";N$(ID):PRINT"Password : ";P$(ID)
  290 PRINT"Correct?";:LN=1:GOSUB50
  300 IFA$="N"ORA$="n"THEN PRINT:GOTO 220
  310 IFA$="N"ORA$="n"THEN GOTO 220
  320 PRINT:PRINT"Accepted. Your **Secret** logon"
  330 PRINT"number is ";ID+10000
  340 PRINT"Write this number down and use it whenever":PRINT"you logon to Mini=
board."
  345 PRINT:PRINT"Press RETURN or ENTER to see":PRINT"list of options."
  350 PRINT:PRINT"Main Options (B,C,E,K,T,V,)"
  360 PRINT"=-=> ";:GOSUB50
  370 IFA$="T"ORA$="t"THEN GOTO 9000
  380 IFA$="C"ORA$="C"THEN GOTO 7000
  390 IFA$="V"ORA$="v"THEN GOTO 5000
  400 IFA$="E"ORA$="e"THEN GOTO 3000
  410 IFA$="B"ORA$="b"THEN GOTO 1000
  420 IFA$="K"ORA$="k"THEN GOTO 4000
  500 PRINT : PRINT"Command Options :"
  510 PRINT" B - Bulletin section"
  520 PRINT" C - Chat with SYSOP"
  530 PRINT" E - Enter a message"
  540 PRINT" K - Kill a message"
  550 PRINT" T - Terminate your call"
  560 PRINT" V - View present messages"
  570 GOTO 350
  1000 PRINT:PRINT"Bulletin sectioon.":PRINT
  1010 PRINT"Updated : ";PD$: REM Date file was updated
  1020 PRINT
  1030 PRINT"  This is a short bulletin to welcome"
  1040 PRINT"you to the new Mini-Board system."
  1100 PRINT:PRINT"End of file.":GOTO 350
  3000 PRINT:PRINT"Message Entry Section":PRINT
  3010 PRINT"Current high message number is";HM
  3020 M5=HM+1: IFM<50 THEN GOTO 3030
  3022 FORI=1 TO 50 : IF MC(I)=0 THEN GOTO3025
  3024 NEXT I:PRINT"Message file is full.":GOTO350
  3025 M5=1
  3030 PRINT"Enter msg subject :";:LN=20:GOSUB50
  3040 IFA$=""THENPRINT"Msg aborted.":GOTO350
  3050 MS$(M5)=A$
  3060 PRINT "Enter your last name : ";:LN=15:GOSUB50
  3070 IFA$=""THENGOTO3040
  3080 FM$(M5)=N$(ID)+" "+A$
  3090 PRINT"Enter the full name of"
  3100 PRINT"the person you are sending"
  3110 PRINT"the message to : ";:LN=15:GOSUB50
  3120 IFA$=""THENGOTO3040
  3130 TM$(M5)=A$: PRINT
  3140 PRINT"From    : ";FM$(M5)
  3150 PRINT"Sent to : ";TM$(M5)
  3160 PRINT"Subject : ";MS$(M5):PRINT
  3170 PRINT"Correct? ";:LN=1:GOSUB50
  3180 IFA$="N" OR A$="n"THEN GOTO 3030
  3190 IFA$<>"Y" AND A$<>"y"THEN GOTO3170
  3200 MX=1:T$(M5,MX)=""
  3210 PRINT"Enter text. You have a maximum"
  3220 PRINT"of 5 lines at 64 characters per"
  3230 PRINT"line. Press RETURN alone when done."
  3240 PRINT:PRINT"Line. ";MX
  3250 PRINT">";:LN=64:GOSUB50:IFA$=""THEN3280
  3260 T$(M5,MX)=A$:MX=MX+1:IFMX=6 THEN GOTO3080
  3270 GOTO 3240
  3280 MX=MX-1
  3290 IF MX=0 THEN PRINT"Aborted.":GOTO350
  3300 PRINT:PRINT"Listing...."
  3310 FOR I=1 TO MX : PRINT T$(M5,I) : NEXT I
  3320 PRINT : PRINT"Save message? ";:LN=1:GOSUB50
  3330 IFA$="N" OR A$="n"THEN PRINT"ABORTED.":GOTO 350
  3340 IFA$<>"Y" AND A$<>"y" THEN GOTO 3320
  3350 PRINT:PRINT"Message saved.":ML(M5)=MX
  3360 IFM5>HM THEN HM=M5
  3370 MC(M5)=1:GOTO 350
  4000 PRINT : PRINT"Message Kill Section":PRINT
  4005 IF HM=0 THEN GOTO 5005
  4010 PRINT"Current high message    is ";HM
  4020 PRINT"Enter msg   to kill or"
  4030 PRINT"RETURN to abort -> ";:LN=1:GOSUB50
  4040 IFA$=""ORVAL(A$)=0 THEN GOTO350
  4050 MK=VAL(A$)
  4060 IFMK <0 OR MK > HM THENPRINT"Incorrect entry":GOTO4020
  4070 IF MC(MK)=0 THENPRINT"No such msg in file.":GOTO4010
  4080 PRINT:PRINT"Msg   ";MK
  4090 PRINT"From    : ";FM$(MK)
  4100 PRINT"Sent to : ";TM$(MK)
  4110 PRINT"Subject : ";MS$(MK)
  4120 PRINT:PRINT"Correct msg? ";;:LN=1:GOSUB50
  4130 IFA$="N"ORAA$="n"THEN GOTO 4010
  4140 IFA$<>"Y" AND A$<>"y"THEN GOTO 4120
  4150 PRINT:PRINT"Message Deleted from file."
  4160 MC(MK)=0 : IFMK < HM THEN GOTO350
  4170 FOR I=50 TO 1 STEP-1
  4180 IFMC(I)>0 THEN HM=I : GOTO 350
  4190 NEXT I : HM=0 : GOTO 350
  5000 PRINT : PRINT"Message View Section":PRINT
  5005 IF HM=0 THENPRINT"No messages in file.":GOTO350
  5010 PRINT"Current high msg number is";HM
  5020 PRINT:PRINT"Enter message number to View"
  5030 PRINT"or RETURN to abort -> ";:LN=3:GOSUB50
  5040 IFA$=""THEN GOTO 350
  5050 MV=VAL(A$) : IFMV<1 OR MV>HM THEN PRINT"Invalid entry":GOTO 5010
  5055 IFMC(MV)=0 THEN PRINT"That message does not exist.":PRINT:GOTO 5010
  5060 PRINT:PRINT"Message   ";MV
  5070 PRINT"From    : ";FM$(MV)
  5080 PRINT"Sent to : ";TM$(MV)
  5090 PRINT"Subject : ";MS$(MV)
  5100 PRINT: FOR I=1 TO ML(MV)
  5110 PRINT T$(MV,I) : NEXT I
  5120 PRINT : GOTO 5010
  7000 PRINT : PRINT"Chat Section":PRINT
  7010 PRINT"Standby while I check for SYSOP."
  7020 FOR I=1 TO 10
  7030 PRINT I;" - ";
  7040 IFINKEYY$="*" THEN GOTO 7100
  7050 NEXT I : PRINT
  7060 PRINT"Sorry, SYSOP is unavailble at this time."
  7070 GOTO 350
  7100 PRINT : PRINT
  7110 PRINT"Hello ";N$(ID)
  7120 PRINT "<>";:LN=64:GOSUB50
  7130 IFA$="RETURN"THENPRINT"So long!":GOTO350
  7140 GOTO7120
  8000 PRINT:PRINT"<*><*> SYSOP MENU <*><*>":PRINT
  8010 PRINT" 1 : Save DATA to disk"
  8020 PRINT" 2 : Load DATA from disk"
  8030 PRINT" 3 : Examine User file"
  8040 PRINT" 4 : Insert new bulletin"
  8050 PRINT" 5 : Return to Mini-Board"
  8060 PRINT
  8070 PRINT"==========> ";:LN=1:GOSUB50
  8080 IFA$="" OR VAL(A$)=0 THEN GOTO8000
  8090 SC=VAL(A$):IF SC<1 OR SC>5 THEN GOTO8000
  8100 ON SC GOTO 6000,6500,8500,8200,180
  9000 PRINT : PRINT"Are you sure you want to"
  9010 PRINT"Terminate? ";:LN=1:GOSUB50
  9020 IFA$="N"OR A$="n"THEN GOTO 350
  9030 IFA$<>"Y" AND A$<>"y" THENGOTO 9010
  9040 PRINT
  9050 PRINT"Thank you for logging on ";N$(ID)
  9060 PRINT"Please call back soon."
  9100 GOTO 30