IMD 1.15: 1/01/1998 1:09:32 fog hak 020         -FOG/HAK020/HAK#020CRC)/HAK#020DOCBULLETIN +CALLERS ,ENTERCPM -RBBS COM RBBS COMIRBBS35 ASCh !"#$%RBBS35 DQC,&'( First Osborne Group (FOG) -FOG/HAK.020 Copyrigh 198 b Firs Osborn Grou (FOG t th exten no copyrighte b th origina autho fo th exclusiv us an enjoymen o it members An reproductio o distributio fo profi o persona gai i strictl forbidden Fo information contac FOG P O Bo 3474 Dal City C 94015. RBBS35 - A BULLETIN BOARD SYSTEM On these two disks is the RBBS35 message system for use in a Remote Bulletin Board S  ystem (RBBS). To use this system, you really need to compile the Basic files with the Bascom compiler. I have included the .com files for you to test the features, etc. of this system out first, or you could use ddt, du, edfile, or similar to change the info and passwords, and use it as is. It has been linked with the OBSLIB library, and does not need BRUN.COM to be used. It does call BYE to hang up on the caller from the 'G' command. To really make the system work, though, you will need the p!"9?!=:=+H9>!"7>!=:=\H~\H~H SI> SI>SI*9?;?=+I;?=ìH:=E:=following. BYE (version 2 or 3 will do fine) BASCOM The Microsoft Basic compiler L80 (LD80) The Microsoft linker (L80 is supplied with Bascom, but you may have to use LD80 or strip all comments, etc out of the RBBS source code tH>ͺI*7>9>=+I9>=ìH|}6Iƀ)`iÊI> SI> SI> SI:=E:=|J =ŠI!9>>!=ÊI:=E:=G*7>|=̯I#"7>8>w:=o fit in the memory available on the o1) or try compiling on an Executive instead of an O1 You will also need to be fairly comfortable with Basic and with 8080 assembler (for BYE) if you want to make any major changes in the system, but try ==+J!=J!>'J_!= NJ LJ SI~UJfJ7ȷ!JC@@J> G!JCGDISK FULLit anyway! You will learn a lot, that's for sure! Any questions or problems, try contacting me on FOG #2 300/1200 baud (604) 596-0314 . I'll help where I can. ......enjoy!! .....Jack Brown !J:>gK@Kw#2{=.ʒK!ڒKw#kK2{=.ʙK!ҀKÙK6 #’K:{=.ʦK`"w#¦KpJJK2J2J:J=KJJ L!J"J>2J*J~L7 L  #"JɅo$ɧGw#LG~#3L#%L++G~#GL##7L+++L~#fo{z|/g}/o## dLZM a{ >!LL~#fo><ڏL0E"}_|W=€L)T]))ɯ!xGyOLL2[`!O!`|g)))صoMM!&M$M}tL0? *|/g}/o|ʏ R!N|1à !"^>;x!N|!"U1!"{3!}|!HPA  BN!f}!O}!i}!yN}!}R|}/|!͖~!O}!͖~}2|5!O|8!oO|;!O|!'">!"@>2!"B͇y3:]o&"D> 2]:[o&"F>x2[!"H*H#"J*J#"L!"N!"P1R!|!"U1!kO,!dO}! !ͥ| !q͚s!#t!&t!)t! t1x!^N|>*|  !"*Ͳ~|YN!`}!UN}!c}!UN}!}!UN}!}!UN}!}|!QN,!IN}!> !iv!>͑v!>"4*#"*#B*Ͳ~|4!B!%!@N|q5r!O|R!&N|1!"!5t!;t!>t!@t!%!"W!"YR!|!"U111[!HP|!`O!*D}o|r !\O!*F}o|r !"^!"B!kO5!QO}! !q͚s!`t!ct!%R!@O|`!< f!`|c!HP|i!c|R!`}!*>2JB1R!M|!"U1*Ͳ~!}o|gQ~*Ͳ~}R|1R!M|!"U1*Ͳ~!}o|gQ~*Ͳ~}R|1!%1*"!"!"!"!"!"!"!QN5!M}! !"!iv!͑v!"P*^!R!L|1>2+n!L|q5%!L|q5%!L|q51%`!r!L|g}o|rÛ11R!8|11[!HP|%!"1!"^!QN5!N}! !iv!͑v*L^!8{"^R!L|!"U1*^|’!8{"*#"*)*s#r*|L*|A*"*|N)[*+"Ò*###^4!Oͥ"*|•!|!HP|ù*+}|*#!&~|!`!c|g}o|`!<L!!|g}o|#Ͳ~R|1!%1x!]L|!"U13}!HPA!}|!|W)fx!AL$wx!)L|!"U1!"{3}!HP<!#L|å!}|@*|/g}/o|fAx!L|!"U1!"{3}!HPA!}|!|)L*|/g}/o|41f!M}R|11!"*"'*"*#"*^!8{*)|s#r*)|^#V*"*"*|1R!oM|*|R!_M}R|*|)R!MM}R|11!%x!AM|*Y|/x!K$wýx!K|!"U1!"{3!}|!#L!}!N|g}o|nR!K|1*Y|°1*@Ͳ~|K!}!K}R|1R!bK|11!"**@}o|R!RK|1Ñ*#"*Ͳ~!}o|gQ~*Ͳ~g}/o|x!M}x|!"U1!"{3}!HPAM!}ͥ"M*|v*ƃ Px :Y%_,*)V0b5S5;}!M<>B}!L<C%}!L<5%}!L`!|g}o|8%1L!}}!L}!f}!*+"*|Ñ*@++*}o|Yx!L,`!<*%1x!PH|>*|/g}/o|+!"!A"!QN5!EH}!A !iv!A!&~|}!}}|H!}ͥ"*|4&%*|A&)G&%**z|X&}|d&Q?%11!QN5!M}! !"!iv!͑v*^!ͥ*P|g}o|¢'!8{"*|&)Ң'**zz&{z&*"Ü&7*͑v!^!8yP{"*|/+!"!O|4*B*#"bI!f}!O}!i}|4*BR!H|11x!MK|!"U13}!HPA+*#"!}|!A"4*BË+*Ͳ~|!A"4!B!%|/g}/o*|g}o|$'*"Ü&**#^*|i'4!|?!ͥ|i'*"Ü&'*P|¢'**}o|go*P|g}o|¢'*##"Ü&1R!H|111!%%*Ͳ~!}o|gQ~*Ͳ~}!J}R|*1*Ͳ~ H}!G}*Ͳ~}!G}R|11%x!G|11!G͖l>2>2[+n`!r!L|g}o|ʁ,ê,11R!8|11[!HP|%1!G|$!}|,!",!}8{"*|,),1%**z|  -}|-Q?ê,R!G|!"U1!QN5!M}! !"!iv!͑v!"*^!ͥ|?0!8{"*|ڇ-)?0**zz-{zҬ-*"Z-**z|-}|?07*|/g}/o*|g}o|-?0*^4!UNͥ"!x|x!HP|*U|02x!Rw!R|2q!O}!"*|go*|go|g}o*|go|g}o|ʑ2!i!"2*|go*|go|g}o*|go|g}o|2!"P2x!R$w!R*"R!HP|!"U!HP|*|go`!|g}o*|g}o*|g}o|C.!"Ò.*#!&~|1x!sG|!"U1!"{3}!A.R!fG|H0aG!]G}*Ͳ~}|4*B!%R!BG|!"U1!QN5!I}!A !"!iv!A%[!HP*W|g}o|(3x!͖~w}!HP|!"P[!HP<\38*{|\3x!HP$w[!UNͥ"*|…3}![|[!HP|é3*+[}}|*#[!&~[|!}|½3!"{%*{|3!}|?}!|!}*"!"{%y-{wP4v!"*#"**z| /}|?0*)^#V"**zzD/{za/*)|^#V*"/**}o|/>G!]G}*Ͳ~}!]G}!`}!N}!c}|!A"4*B*)s#r!%R!"G|1!QN5!N}! !iv!vy y-{sP4!"vyBy-{oP(4vyy-{kP74vyy-{gPF4vyy-{cPU4vyMy-{_Pd4vyy-{[Ps4vy$y-{WP4vy'y-{SP4vyM+y-{OP4vy5y-{KP4vy9>5y*++Q~}}! ͖~}! ͖~}͓}%!++"*!&~!͑v*H^!8y{P!~͓}*HB1R!G|H0R!F|!%1ê,1!QN,!IN}!> !iv!͑v!͑v!<͑v!iv ! ͑v!^! 8{"1*#Ø1*^!NA14 !| !UNͥ"*+ }O<5*+"*|54*}|*!&~!F<P5!O}|%*Y|/g}/o"Y%*W|/g}/o"W%!kO,!}! !"P!ͥ|5*N|«51ñ5!"N1!ͥ*P|g}o|5!q!R@u1ö51!%%`!r!L|*# !&~|!UNͥ"*#!&~|*+}|!UNͥ"*+}|!O}!}!F}!}R|1*P|«1*+"*|ڨ1)0!%1%1R!F|[!HPx!HP|g}o|1x!HP|%x!HPA2R|g}o|6*61R!8|11%1R!F|11!QN,!N}!< !iv!<͑v!^!8{"*"*#6*^4*Ͳ~!}o|gQ~*Ͳ~}!O}!}R|1*P|6*+"*+"*|6)Ҍ6!%  1R!F|11%!"!"*^!Fͥ|D7!"`!Ax7*###^{7*|x7*##^{7%4!Oͥ"*+}|*#!&~|!`!c|g}o|7!"7!"%*| 8}F!}|!/IU1!"{3l!}|l!HP<)<%x!E|!"U1!"{3o!}|o!HP<_<%!"<*|z<MC;R!{E|1;!QN,!IN}!> !iv!>͑v!^!8{"*#"-!!>*^4!&~/|/!UNͥ"}|!"%1!QN5!EH}!A !"!iv!A͑v*^*#"!ͥ|t84R!|1C8!%1*|Ž8%R!cF|11*|ڮ8)Ҵ8%x!JF|>*|85!EH}%!"[!HP|!"!!0"#!i!*+/}2|*#/!&~5|5!UNͥ"*#5!&~|*+5}5|!UNͥ"*#!&~|*+}|!UNͥ"*|¥=!>G|=*#!&~|*+}|!8{"l!2o!5|g}o|>!}u"%*%|9%*%|9*%|+9):*|;9)M9x!͖~w8*%͖~[}[|*#"*##"#*#|9!0"#*!|ʓ9x! ͖~w*{|ʮ9x*%͖~wú9x*#͖~w*|9x!͖~w!"!8*|8x!2w!"!*+"*#+"#|1*"8!"!%%*#"**-z|5>}|;!QN,!IN}!> !iv!>͑vu!O}!2}!UN}!5}!UN}!}!UN}!}!UN}*Ͳ~}|!>"4*8B!%%!x|!"x!|![*}[|8*|8*%|8:x!/w!"!9*%|L:::*%|m:x!HP$wx!w:*%|”:x!EF$wx!w!"!8*%|8:8*"'!:x!/w*)#")*)*'z|:}|Ҵ:%*{|:x![w5;!0"#*"+"U1!"{3}!}:|:!HPA>:!wE<C?!"%:!L<>%RE!f}!;!|ڔ;)>;x!E|!"U1!"{3!}A;x!E|1>;R!E|11%`!<B>x!E|!""A!i@*!&~!"?*?|-@)go*?|>@)?go|g}o|e@*?͖~*+}*#"**Az|}@}| @%l!|o!HP|!!#L|g}o|ʾ@!"%C!2|F!5|I!|L!|*"O*8"QS!r|!Oͥ  "*|A!"|A*+}l|*#!&~o|!"<2!C|5!F|!I|!L|*O"*Q"8r!S|*|/g}/o|ʘAx!.E|>%!!#L|g}o|A!|%!l|x?l!|!o|x?o!|l!O}!o Ffor your PASSWORD: *FEnter at least six alphanumeric charactersHF #MFDelete COMMENTS file? fF*** End of COMMENTS ***F(F;*F*** End of CALLERS ***FHit Ctrl K to Abort listingF?2F** Use CTL-S or S to PAUSE, CTL-K or K to ABORT.**F, FMe}|%!`|x?f!|!c|x?i!|%R!O|111R! E|1x!D|>*|/g}/o|ʃB%!Bx!͖~w*>"V!åB*X#"X*X*Vz|B}|ҡB*Z#"Z*Z|B)ډB11R!D|1R!HP|1*W"\ssage not found.GMessage killed.%GUpdating Message count...AG0EGUpdating Message file...`G:dG 0 iGIncorrect. vGPassword: GScanning Summary file...GKillGBYE8GSorry, too many errors. Try again another time. Bye...G typed by you.G typed by!"Wx!D|!"U13}!D}!D|g}o|GC*\"W%C`!A[Cx!D|!"U1!"{3}!`O<CK>1x![D|!"U1!"{3}!AC;x!?D|!"U1!"{3}!;D<Cu!N|Cu!L|P>! system -  HCharacter count: $!HEnter text; type two RETURNs to end.HHCOMMENTS3SHEnter confidential comments for the SYSOP HPlease call again! Bye...H, thanks for calling...H, Don't call back Again ! H to => H*** End of Survey ***HF4D|!"Nq5%!-D|!"Nq5*+n0DTWIT7DNEWS>DTBDwit or alid user ->*^DEnter validation authorization Password ->,DChange

assword or alidate this user ->D/exD/EXD>DType /EX to Exit the CHAT mode"DShall I page the SYSOTSI= IStartI : I (RETURN to quit)+I to 2I)6I-:IMessage Number: (NIEnd of Messages.aI+eIFrom: nIMsg #:wIRetrieveIMESSAGESIand Message file.IActive Messages, INext Message #, I 9999IUpdating Summary file, I was: ILine Number: /P EYou have entered the CHAT mode!1ENot a currently known User. OK? "UEThat's an invalid message number, zEY ~ENot found.EUser's LAST Name: EUser's FIRST Name: EOK, now please remember it.ENo match. Try again.ENow enter it again:JThen enter replacement or RETURN for no change.14JEnter Line Number to change (RETURN or 0 to end).hJDate: *qJEnter replacement or RETURN for no change.JAbortedJ: JPW: JRe: JTo: JDate/Time: JHLEACS JH,L,E,A,C,S: ?JSelect: (H)eader,   (L)ist, (E)dit, (A)bort, (C)ontinue, (S)ave: 1K(Last line)?K(2 lines left)PK> UKMessage full.(eKWhen finished, hit two RETURNs in a row.K lines of text (NO semicolons). KEnter up toKCannot use '*' with ALL.KPassword ('*' for Private): KTo lonCLAPDENNISP Version 3.5 01/21/84 (P 'Your name here' RBBS System KPQp2p`j@I:9wzfW (2<FPZdnx}g... 25 character limit LSubject: &LALL,LTo (RETURN for ALL): DLPlease use correct format `LToday's Date/Time (MM/DD|HH:MM) LMsg # will be L!LMENURBBSLINFOLBULLETINLEntering CP/M...LENTERCPMLNOPASSL', LI don't understand 'LZLL&/8A"G'M,M6M@MJRTX^3]hfhkrtry|yyy1  $ * 3 9 > C H Q r Xf {       & : 0 0 0 0 0MNMC MBER?SKGWJUTXP(MB,E,R,S,K,G,W,J,U,T,X,P,L,C,N ( or ? ): DMCommand: PMthese messages. bMthis message.rMPlease Retrieve and Kill M, you have mail:MSUMMARYMLast System Message Number: MNumber of Active Messages: MYou are caller number:  0 0 0 B :! DE DJ DO NX Na N<6f No N)&w X X X b b l v v v  32         ! ' 2 8 = F Q x                  b NCOUNTERSN*N,NONCALLERS)NLogging name to disk...CNNEWCOMLNUSERSTNRXN;\N aNIs anything misspelled? |N from NHello NEnter YOUR City, State: NOK, let's try again.NAre you a New User? NEnter your PASSWORD: NChecking User fil   9,&! * 0 5 ; @ I T k >p ~    * *>;x 4 4 4 > > > > H R R \ \ \ f f* fq p p z z4J z z z z z z  q50   (1BNTYbie...OEnter your LAST Name: !OA%OEnter your FIRST Name: ?O.COWelcome back, TOLASTCALR_OxcOPgOPWDSnOI.rO >> You must be a verified user for access << O/O OA:ODDT OSUPERSYSOPOCPM#OWhat is the DRI Debuging software OZORKOSYSOPOREDx &,2KZc}$$$$ ...8E8JBSBYB^LLLQV`jtt~  F+L<3;AQX[g4|lx 42(($()(.(:2'<?2E2Y<o<<<nFFPPZZddx #).    ( 2 2 2 2 < < F F F F F P Z EZ NZ Qd Zd _d bn bx b  j o x }              < A o u z           " , , , 6 9EMJvUPvx : :NY%8_,l*"V0b5S5;>BC58 ,6@@J&TKh1^:^?^H^Vr]rirnrsrv|||||6 *6 /6 8@ ?@ H@ M@ VJ ]J sJ xJ T T T T ^ ^ ^ ^ h h h h r r r r |      5 D M Z c l r w                 # ( 1 8 N S \ cP>*h !&)0):)D2D7D:X:b:lClHlMlPPPorw| #).3>GZ l q z         & & & & & &  &  &  & & & , & ; & B & S & d 0 i 0 n 0 u 0 x D x N x X ~ X b l l $ v v v Q?b ! ! ! ! '! $ K! Z! o! ! ! $ ! 7f! cf o u z @  *Az444>>>>CC CHHH#R)R.R7\np]fffkfvz{!,3 >PYjs! ! ! ! ! ! ! ! ! " " " " "" +" 2" ;" @" 7E" N" U" ^" j" o" w" |" " " " " " " " " "* "* "* "* #4 #4 A#> (#> -#H 6#H ?#H H#R T#R `#R p#R #\ #f #f #p #p #p #z #z #z #z #z #z #        $  L b  . 8 B 1L V V ` %` *j 9j >t Mt R~ 1W c                     " ' 2 ; Q W \ b g 2 r { # # # # $ T$ 0$ E$ K$ Q$ [$ a$ g$ $ $ $ $ $ $ $ $ $ $ $ %%2%A%G%L%Q%V%Y%Y%$Y%.^%Bg%Bl%Lw%L}%L%L%L%L2%V%V%V%V%V4&%`%`%j%j%t&t&t)&~1&~D&G&\&a&d&i  &n&&&&&'&&&&&&7H&$''!'3'i';'@'I'?N'\'f'n' v''''('('('('2'2'F'P'Z'd(d(nH(xO(xX(x](s(z((((((((((x?l((&)-)6);3n3n33x3x3333333333334444#4(42474A4F4P4U4_4d4n4s4}44"4"4,4,546469>4@4T4^4h4r44445 555+5A5P5S5S5S5_5b5b5b)G)S)g))))))))))*****"*,*6$*6)*61*;<*;K*;P*;u*TS*@b*@g*Jp*Jz*T*T*T*T*^L,:*r*|******+****+ ++)+/+8+=+F+M+j+o+x+++5&n5&q5:q5Dq5N5N5N5X5X5X5b5l5l5l5l5v5555 6*6666"6'6*6/686=6B6[6j6s6666 6 666646 6*747>7>7>7>7R7\!7f'7f07f>7fD7px7O7z[7z{7`7zh7s7{++++++++++++++++,,,1,6,B,0G,0L,DL,IR,NW,X\,b_,v_,_,~,,,,,,,,,,,,,,,,,,, ----!-&-?-E-T-Z-c-?0n-z- -77777777778 88888.848C8L8S8t8^8c8l8q8z8888888$8.8$8.8.8.888L8V8`8`8`8`8j9t9t9~99:.9>9J9M9_9f9m9y99999--- -*-*-4-4-4-4.>:.>@.>.\C.HW.H\.He.Hk.Hp.Rv.R{.R.R.RH0.\.\.\.f.f.f.p.p.p/p/z/z$/z3/H/^/a/q//////////00%0.030<0N0S0V0V0V0[0t0999999999:::&:/:5:8:D::2I::<L:X:a:j:m: y: : : : :::(:2:2:2:<:<5;P:F:F;F ;F;F;;P>;Z>;d>;nC;L;Q;Z;`;e;k;p;y;;;;;;;;;000000$0$1`0.0.0808181B#1B71BG1LS1Lc1V1V1t1j1t1t1~111111111222$2-2202@2222 22223(3<3F3P3P(3Z13Z73dB3d8BG3dS3d\3nh3np3ny;;;;;;;;;B>;;<< <<<&<)<2<8<=<C<H<Q<\<_<"e<"j<"r<"MC~w<"z<,<,<,<@=  >>>>>?>B>B>B>K>i>x>>>>>>>&>0>:>:>D>D?D ?D?D?D$?N/?N:?N@?NC?XN?Xg?bl?bu?bx?vx?x????????? @ @e@N@@@@ @*@*@4@4@4@>@>@>@>@>Im>&2KmlÀ6#} n| nF STOo+nͥo*Sm.. . ........p*am|2n:^m n*\m|ʠnͦnͯo  s#rͯo  {ow#6"_m*Gm*\m>2^mo%n!9N#Fͯo~#~n~+n~#~n+^#V###ön###ön|n~#fo!nF Internal @>@>@HAH AHAH|AfAR$AR8AR>ARCA\LA\UA\^A\gA\mA\sA\AfAfApAAAAAAAAAAA BBB$B-B2B;B>BGBLBQBVB_BdBmBrBBBBBBBB$B$B.B.B8B8BBCBCLCLError - No Line Number Ólͯo~#ʇoF at lineͦn:oåo>noF at address|j}jåo> ͚> ͚~#*ox~#fopu!9"=m!o*=mo"?m!o*?mCLCLCV>CVDCVGC`JCjMCtMCMCXC[CdCjCoCuCzCCCCCCCCCCCCCCCCCCCCC CD DDDDx"Dx'D*D*D[[[[ BASLIB #000000 5.30 - OWNED BY MICROSOFT, 1980 kDo!p~<p=p#~#pp#LSyntax Error in DATRETURN without GOSU Type MismatcOut of DatIllegal Function CalOverfloOut of Memor Subscript Out of Rang Division By ZerOut of String SpacString Formula Too CompleRESUME without Erro2FieldM*"q*o##"oÐm>2k2k*^#V"k##^#V"k 2k!Jl!!""k!|m"ym6#6P>2m>2m>2~mkÏlkÏlÆl_oڪl!6C#6O#6M!\>!͜y!\> }\<И!9%.l>A}.llotl!#& Overflo3Internal Erro4Bad File Numbe5File Not Foun6Bad File Mod7File Already Ope9Disk I/O Erro:File Already Exist=Disk Ful>Input Past En?Bad Record Numbe@Bad File NamCToo Many FileUnprintable Erroohl!q>qrlw>>|Hno}r\ѷ!>/ *OUT OF MEMORY* $É{Ê{!9"Gmͯo !nͯoʳm!nm!Lmn!R"m!O"mͯo|m> Hn6#s#r#=m>2Am>2Dm>2Cm2Fm!l"Sm!$\"r¾`i"Qm!#r"im!r"kmr ,ͷrZrirɆ****yrІB*yrІ݄** #r,Zͷr~#ˆrx>yro!>Snͷr/>|ښr r·r"rG{,xrPX*s!cuOz"ys Js sO{,yĉs  *s s{ $s,> $s$s*s*s͉sr"5s ]s]s 5s,]s Us]s ]s*Qm( 4:mʃs{,ƒs6!cu/O ʃs+~ ws#6!cuɷw#^sN#"s!9"s"sy2s*Qm|ʼs*im!t"amA~#*cvl:ms~ʦtatsɆsІ"cvt#tom!w*um*ym~=x/<?x.x=$x> 9w>,9W*ym#^ ixcx+=cx:|m=cxz{{x{_mxo|·x}rʖx¾`i"Qm++"ym!x"om!x"mm2tmxoHnç*}o|gx> 9+|x!|m"ym!"Qm2tmx!wm~6****0tB*0t݄***cvlTt~#"cv,s ¦t:mʦts~¦t!"am~,"lt#"~ʀtʀt# otæt"†t#"cvx"ʛt ʛt+~ ʐty>0tF?Redo from Start *sp!tu*s:sOs*s+~+utt +w t #wͯo n&ͯo ^#Vk{|o!1yT:^m|*kmozuźzSzozuźzSzozuzSzozuzSzozuźzSzozuźz͐zͮz^#V#ͺz"y*y͐zYz͐z^#{Êz͐z^#V#ʹz_z"y~2y"yo*y*y:y:yA:yzzTUɡzx~#fo^#{ ^#{o}r¾! ~#fo"ev! "gvo|Hn*ev}o|gӘ"ev*gv"gv#s#r++so-wxo8wxoCwxowxo-w3xo8w3xoCw3xz&)))ͯo>4{>4{>4{>4{>4{>^#V#!A{L{ Gͧ|`{~#fob{##oËo5^#V#́{͡2mooâ{oA{ |Hno{o{ö{{:m&|!oʹ{:m)|!oT:o͘w3xo-wwo8wwoCwwo͘wwNwNw"WwH~# Owx2:tmxw‡w͞/<?x~ʀw9#tw.x͞~ʃw 9#Êw>2:tmxF#~#foxw?xww~#9úwwfw>"9G:xmxw*ym+~<x=x###~x*2:E|O|:|||/g}/oʹ:O|!N|ͧ|E|!oEn:goW*|7gk|:k|+>z||/g}/oڃ|!ژ|G|ʔ|Ë|o& Gȯ|g}oÛ|ͱ|>¾|~+~?~|+#|+ |o}~##++>}+V+^  +}+r+s0o|~O")}"'}*)}|Hn}Hn Hn+>o">~o>~o>}2>!~͞>~ ~#~x>++`i+V+^͋°##6+6+~6  >@++*s"ss#r+b*m#~_#~WYoNnr+s##6"q###!s~#fo}͋m<*o"m*q}o|g6@#s#r#6"q*Ã*"s}w>#w##͋¨++6+6ũ>2Ń|+})N#~#fo :Ń!9"Gm!L>>>>>>V!+>C>C>C>C>C>VR~#fo##GNʂyʂ#~#fo~#fo‹#ʁ q yʋy<.ڕ)ʕ)ffͮxHnűʹ y<2F~#~#foyxO #~#fox#!4 m4 ~x#Hn!Lm4!9"Gm^#V#!Lm~w3n!9"Gmɧ~͚#=:L~͚#LG~#h#Z++s0:~͚Є*}/o|/g#"|5Є!~wɯ2ʹ*5͔>2ff*&~fo&~Hn#^#V++fo&o~æ~{l#{l!$>!2+# *!! ͥ>>M>|}+!Ӆͼ+6!>W2!ɡ!!~_#~W#~OW!T¦ɇ<o&5**օ"`i"!^#V#N#F#!Ux{!6ɣwg>Qòb*m#~#~Ҳo?n!*o"m~#^#V#_>x%|J%++~_w#~Ww#%*oDM~#^#V#ڼ|k+zę+{ę##{z~#q#p_ky±x±DMk~#±kYP+++"m6@###{_zW+r+sɷ *s|oBn͢^#V+"sw#s#r :Gw# $! *||<*^!4a͘:2::‚Ç|/g}/oá!:Ҫ">2͞ajà L}؄Ύ>2`h̡~&!-++߇.  ʅe E4l"L"q"Q3:M>M~%ʒ#ʣ!ʤdMDdͭRd_{_̇h̯!ͪ dܭ!!Bdͭd݄߅z=tW ͋/>!Ȍ>!p#=¿!Ņ͘>ȅ)O |"y74t$͞1߅G zͯ4 ͸ͯÒ{ a0_WÛ!{:|yÛ:×:Û:/Û㎯)ʩ6+06-ͯ#60:W:NF27!F :_ x*{AqE?͋Ӆ/{_#zW#yO++͆#ȅp#>=>͋N#F#*/}o|gP"p#==͋w1_cƤ~@zZrN vH Tʚ;@B''d #~: D0,.+60{"+:Imw{+p2!6 ͸**2݉E~~:^0^ #~O>DGM"`i"#~+ʼn-ʜ0OxGʼn#~ƒ`xEºy n>2ʉ|nòn"`i"ȅ#Wً:0?<=:7-++ͩO2H2+>G͡H#sMoEnM!_]}0?)))صo_M!ͅڃ}ͩ0? ڛ? ))))صoÅa{ B::Ò:22oEnoEnx60݅͟+~0.݅G>"w#6+86-/</ ::#p#w#6!#zΊkpzL7{U=L׈}p#6!#:~ ʂ*ʂ+-+_:Im{0Ɗ#Ɗ++wʼÃƊ6%r:͞+6%ً͞o}rʾ!' ~ #~Տ`iͼö>O #~goPY!' ůw:kͶܘ_xLc͟\ċj_yʇ(̇*{_xFLcWLy͏OLGO͟b*=LPsѯx7ًyʇOzWȮ/<ø!' ~o}r!&‡! ~+ngo}r! n&*Qm~ʻЗDM'~4N#V pܐzw w+s#r#6#6DM:k!" s#  r#6L! {zVDw*QmT]% N#F+q#p###6 ё:kͶ>>w+w!( 6# x !emT]~#foxy~#~+*gm"gms#r*|\! s#r#wf2K}r¾! ^#V:‘*{Ę+s#r! w#w! ~#fo!ͬBK>!)Ԗ)#Ֆ)) #=ʖ}_}la)ߘ#xߘ"͇7?*Qm' 6#67~٘#^#fk_9N#~:=++@٘y@٘٘y #~.gz7S#T2fz ٘٘> zn> “noy<И!iy> }:y!iߘy<ʘi*~ʾ#N#F++fE! "G!) "I!}o|gͬ)bk:Koͬ>͌DM*I*G×"GPY͋}o|g*E#"E ͌DM*G*I×"GPYT2*E! ~#foͬs#r²:ʿ!!& ~# xėDM,Ә!! w!( V6 zw O'I'R¾*|'!"}_r:{r͘z L"Qm#y> }66~†<ܘÛ<›Иz!%w#w#w#w~ʷ͹) p# ½ _oy<*Ә!! ~!! ^#V! s#rDMͬ}rL¾`i"Qm!\"ZmÉo!>Sno|Hn,ʃ-:Wm*Xm!rl"Zm{ցf$%ʧ!*ZmÒ|}!"Qm>6>4>?>=>:>7>5>2>3>@>C>oo&Sno!"Qm!cu"cv:uИo!y6# ͮ.o2!zͪ!ͪyИO!  ~#y}~ z>. g:|m W:}mږ> yW~*6?# ®O!!4Δ#4Δ#4y"ܘ><">2Wm!9"Xm:Um<2Um* F? p3A:>\2' +;~O+O!cu2R3O:h>\2yҙ 7 ҙ Œ ҙ ª > >4´>#;͙6!cuO Ox<>ݙyq# O> 3 OR:uSm"!1"Smo"*em|/##n-.(*oFo2n"nobo2o"o<=_!em~#foʖ##{ʬ++Â*em͵"emq#p#s#4#5++###DM !gm"~#fo+V+^##*{zںBK^#V+*s#r! DM* DM?s#r#wåo͚>^@~ ,> #rl*ym P#~+ 9~=¿*ym!|m"ym9"ym> 9> 9:m=> ͂l> ͂l*7  ^#V# ɷ!(!#((w#w#w#w#N>T>9 ~#=X!9#~ k kɅo$ɧGw#{z ͽݤ͔ͽ͋!ͽݤ͔7ͽ͋͠!y2!ƛ~q+MqnNsY+cY W~w+xq!u5Ôݤ!w#š ͫ}ʹͼ!F#^#V#Nä}~#ΠG++Ny̠!ݤ>#Ͳy16#ҙɠԜ Oٜ!!y#ќ+Ĝ ?ͽݤ͔ͽ͋͠!ɠ^:!6ɣg>Q|Ԋ!>akݤ@͢@ !~+>w GW :椐j/<͘ ͼgQ!~_#~W#~OҤ#4ʓ.gäG~_#~W#~O܄Gù >OZG̡x ȯGͭ"ty2vFo͏͘!D*:O  :/NWq2:; x/F+N+=ݝ!!>q#p#=!4ʓ!1g.*t:vOz 1g.*:x<=H{_zWxG)yOHGäGX ͭy+F+F+Fw`h|ʥgy҉:O|g}oxG-|}}xElaOw!~GxŢƀäwͼw+ɷĤx{!6ɣwgz >Q|Զ{>2"םÝ*ɠĤ:Ĥ!N#Fͭ@qSG܅̓x <3þ!_Kj0 TeB׳]h!I.k ͽݤ͔Úͽ͋!Ͳy!q#~++w+qµ DNn"~`35zr1{r1h!I/))ҷ =¯!~7w?##wy7O**""ajSX-ĤJS\E!Ĥ/8 77>{_zW}o|g=.|g}o`CZQS o-yOzW{_xGcw#x‹ͲyJ!qx!F#~怩O 4×go""s#r#q#p"`i"**DM^#Message base on DSK2$, etc. 90 REM 100 REM Note: This is an expanded version and it may 110 REM require CP/M 3.0 to link the REL file 120 REM that is created from BASCOM, or use the 125 REM LD80 Linker (disk version)  130 REM 140 REM ********************************************** 150 DEFINT A-Z 160 DIM A$(25),M(200,2) 170 REM 180 REM LOCAL MODS SECTION (SEE ALSO EXIT ROUTINE @ 4410) 190 REM 200 VERS1$=" 'Your name here' RBBS System " 210 VERS2$=" Version 3.5 01/21/84 " 220 SYS1$="DENNIS" 'Name of SYSOP, so that when you log in RBBS 225 SYS2$="RECLA" 'will check for mail to SYSOP and DENNIS RECLA 230 SYS3$="SYSOP" 'Change as required. 235 VAP$="ZORK" 'Password for use of Validation Software by SYSOP 240 PC$="What is the DRI Debuging software " 250 P1$="CPM":P2$="SUPERSYSOP":P3$="DDT" 260 DSK$="A:":ERS$=CHR$(8)+" "+CHR$(8):BSL$=CHR$(8)+"/"+CHR$(8) 270 DSK2$="A:" 'If no PWDS File default to Drive A: 280 ANS1$=" >> You must be a verified user10 REM ---> RBBS Version 3.5 20 REM 30 REM ***** RBBS - "Remote Bulletin Board System" ***** 40 REM 50 REM Modified fro RBBS3.1 By Dennis Recla 09/10/83 60 REM 70 REM Vers 3.5 Revised 01/21/84 for using two disk 80 REM drives.  for access << " 285 TWIT$=" " 'If no PWDS File default to no TWITS 290 BEEP=10000 'If no PWDS File default to 10,000 counts 295 SIZE=24 'If no PWDS File default to 24 line messages 300 REM 310 REM START OF CODE 320 REM 330 POKE 0,&HCD ' CHAN  GE JMP TO CALL AT 0 340 INC=1 350 ON ERROR GOTO 5300 360 RFLG=PEEK(&H5D):POKE &H5D,&H20 370 RTNOKFLG=PEEK(&H5B):POKE &H5B,120 'Legal return flag. 380 REM 390 REM SIGNON FUNCTIONS 400 REM 410 MSGS=1:CALLS=MSGS+1:MNUM=CALLS+1:NW=0 420 BK=0:GOSUB 504DIRECT CPM EXIT 660 IF N$<"A" OR LEN(N$)=1 THEN 630 670 A1$="Enter your LAST Name: ":N=1:GOSUB 5040 680 C=1:IF N$=SYS3$ THEN C=2 690 GOSUB 5170:O$=B$:IF O$="" THEN 630 700 IF O$<"A" OR LEN(O$)=1 THEN 630 710 IF N$=SYS3$ AND O$=P2$ THEN O$="":CN$=N$:0:A$=VERS1$:N=1:GOSUB 5040 430 OPEN "I",1,DSK$+"PWDS":IF EOF(1) THEN 470 440 REM 450 ' Direct PW - Sysop PW - CP/M PW - CP/M message - Mess.disk - Twit -Beep 455 ' Read the PWDS file 460 INPUT #1,P1$,P2$,P3$,PC$,DSK2$,TWIT$,BEEP,SIZE 470 CLOSE #1 48CO$="":GOTO 910 720 IF N$=SYS3$ THEN 630 730 A$="Checking User file...":GOSUB 5040 740 V=0:T01$=N$:T02$=O$:OK=0:GOSUB 6710:IF OK THEN MF$=MFJ$:GOTO 750 ELSE 790 750 T=0 760 T=T+1:IF T=4 THEN 4390 ELSE A1$="Enter your PASSWORD: " 770 N=1:GOSUB 5040:C=0 BEL=-1:XPR=0 'INITIAL BELL ON, NOT EXPERT 490 A$=VERS2$:N=1:GOSUB 5040:GOSUB 5040:GOSUB 5040:SAV$="" 500 IF RFLG<>ASC("P") THEN 600 510 IF RTNOKFLG<>ASC("x") THEN 600 520 V=0:INC=0 ' SO CALLER NUMBER SAYS SAME 530 OPEN "I",1,DSK2$+"LASTCALR":INPUT 2:GOSUB 5170:UPW$=B$:IF UPW$="" THEN 760 780 IF UPW$=S04$ THEN 910 ELSE 760 790 A1$="Are you a New User? ":GOSUB 6940 800 IF NOT OK THEN A$="OK, let's try again.":GOSUB 5040:GOTO 630 810 V=1:GOSUB 6520 'GET USER TO SET HIS OWN PASSWORD 820 A1$="Enter #1,N$,O$:CLOSE 540 A$="Welcome back, " 550 IF N$<>SYS3$ THEN 570 560 CN$=N$:O$="":CO$=O$:A$=A$+N$+".":GOSUB 5040:GOSUB 5040:V=1:GOTO 960 570 GOSUB 7360:V=1 580 A$=A$+CN$+" "+CO$+".":GOSUB 5040:GOSUB 5040 590 T01$=N$:T02$=O$:GOSUB 6710:MF$=MFJ$:GOTO 9YOUR City, State: ":N=1:GOSUB 5040 830 C=1:GOSUB 5170:S03$=B$:IF S03$="" THEN 820 840 GOSUB 7360 850 A$="Hello "+CN$+" "+CO$+" from "+S03$:GOSUB 5040 860 A1$="Is anything misspelled? ":GOSUB 6940:IF OK THEN 630 870 HM=0:S05$=STR$(HM):S$=" "+N$+";"+O$60 600 GOSUB 1830:IF NOT BK THEN NW=1:GOSUB 1790'REM PRINT INFO, THEN BULLETINS 610 GOSUB 5040:BK=0 620 GOSUB 5040 630 A1$="Enter your FIRST Name: ":N=1:GOSUB 5040 640 C=1:GOSUB 5170:N$=B$:IF N$="" THEN 630 650 IF N$=P1$ THEN POKE &H5B,0:GOTO 1750 ' +";"+S03$+";"+S04$+";"+S05$ 880 OPEN "R",1,DSK$+"USERS",62:FIELD#1,62 AS RR$ 890 RL=62:GOSUB 5450:NU=NU+1:PUT#1,NU+1:S$=STR$(NU):GOSUB 5450:PUT#1,1:CLOSE 900 FIL$="NEWCOM":GOSUB 5680:MF$=" " 910 A$="Logging name to disk...":GOSUB 5040:RE=1 920 OPEN "R  ",1,DSK$+"CALLERS",60:FIELD#1,60 AS RR$:GET#1,1:RE=VAL(RR$)+1 930 S$=STR$(RE):RL=60:GOSUB 5450:PUT#1,1:RE=RE+1 940 S$=N$+" "+O$+" "+S03$:GOSUB 5450:PUT#1,RE:CLOSE#1 950 OPEN "O",1,DSK2$+"LASTCALR":PRINT #1,N$;",";O$:CLOSE 960 PRINT 964 REM MX=0:MZ=0:IU=0:CNT=0:G=0 1200 OPEN "R",1,DSK2$+"SUMMARY",30:RE=1:FIELD#1,28 AS RR$ 1210 BK=0:GET#1,RE:IF EOF(1) THEN 1350 1220 G=VAL(RR$):MZ=MZ+1:M(MZ,1)=G:IF G=0 THEN 1340 ' G=0 =DELETED 1230 IF IU=0 THEN IU=G 1240 IF G>9998 THEN MZ=MZ-1:GOTO 1350 1 CHECK IF THIS CALLER IS A TWIT 965 IF MF$<>"*" GOTO 970 966 IF TWIT$="*" THEN GOTO 7800 970 IF V=0 THEN IF N$<>SYS3$ THEN GOSUB 7360 990 BK=0:GOSUB 5040:CN=1:M=0:U=0 1000 OPEN "R",1,DSK2$+"COUNTERS",5:FIELD#1,5 AS RR$ 1010 GET#1,CALLS:CN=250 GET#1,RE+3:GOSUB 5500 1260 I=INSTR(S$," "):IF I=0 THEN S1$=S$:S2$="":GOTO 1280 1270 S1$=LEFT$(S$,I-1):S2$=MID$(S$,I+1) 1280 IF S1$=N$ AND S2$=O$ THEN 1310 1290 IF N$<>SYS3$ THEN 1340 1300 IF S1$<>SYS1$ AND S2$<>SYS2$ THEN 1340 1310 IF NOT FT THENVAL(RR$)+INC 1020 GET#1,MSGS:M=VAL(RR$) 1030 GET#1,MNUM:U=VAL(RR$) 1040 A$="You are caller number: ":N=1:GOSUB 5040 1050 A$=STR$(CN):LSET RR$=A$ 1060 A$=SPACE$(4-LEN(STR$(CN)))+STR$(CN):GOSUB 5040:PUT#1,CALLS:GOSUB 5040 1070 A$="Number of Active 1330 1320 GOSUB 5040:A$=CN$+", you have mail:":GOSUB 5040:GOSUB 5040:FT=0 1330 RX=RE:GOSUB 3900:RE=RX:CNT=CNT+1 1340 GET#1,RE+5:M(MZ,2)=VAL(RR$):MX=MX+M(MZ,2)+6:RE=RE+6:GOTO 1210 1350 IF CNT=0 THEN 1390 ELSE GOSUB 5040:A$="Please Retrieve and Kill "  Messages: ":N=1:GOSUB 5040 1080 A$=SPACE$(4-LEN(STR$(M)))+STR$(M):GOSUB 5040 1090 A$="Last System Message Number: ":N=1:GOSUB 5040 1100 A$=SPACE$(4-LEN(STR$(U)))+STR$(U):GOSUB 5040:CLOSE 1105 REM ----> Eliminate this if you want 1110 ' IF HM=1360 IF CNT=1 THEN A$=A$+"this message." 1370 IF CNT>1 THEN A$=A$+"these messages." 1380 GOSUB 5040:GOSUB 5040 1390 CLOSE 1400 REM 1410 REM *** MAIN COMMAND ACCEPTOR/DISPATCHER *** 1420 REM 1430 A1$="Command: " 1440 IF NOT XPR THEN A1$=A1$+"B,E,R,S0 THEN 1140 1120 ' A$="Your Last Message Number: ":N=1:GOSUB 5040 1130 ' A$=SPACE$(4-LEN(STR$(HM)))+STR$(HM):GOSUB 5040 1140 GOSUB 5040:IHM=HM 1150 REM 1160 REM LOOK FOR MSGS FOR THIS CALLER 1170 REM AND BUILD MESSAGE INDEX 1180 REM 1190 FT=-1:,K,G,W,J,U,T,X,P,L,C,N ( or ? ): " 1450 N=1:GOSUB 5040:C=1:GOSUB 5170 1460 IF B$="" THEN 1430 1470 FF=INSTR("BER?SKGWJUTXP",B$):GOSUB 1480:GOTO 1430 1480 IF FF=0 THEN 1500 1490 ON FF GOTO 1790,1910,3130,1870,3640,4460,4120,1830,1570,4820,5640,5600,661  0 1500 IF B$="C" THEN GOTO 7380 1510 IF B$="N" THEN GOSUB 7670:RETURN 1520 IF B$="L" THEN GOSUB 5770:RETURN 1530 IF B$="Z" AND N$=SYS3$ THEN GOSUB 6100:RETURN 1540 GOSUB 5040 1550 A$="I don't understand '"+B$+"', "+CN$+".":GOSUB 5040:GOSUB 5040 1560 IF N$=SYS3$ OR MF$="!" THEN GOTO 1970 1950 GOSUB 5040:GOSUB 5040 1960 A$=ANS1$:GOSUB 5040:GOSUB 5040:SAV$="":RETURN 1970 F=0:GOSUB 5040:V=0 1980 OPEN "R",1,DSK2$+"COUNTERS",5 1990 FIELD#1,5 AS RR$:GET#1,MNUM:V=VAL(RR$) 2000 A$="Msg # will be ":N=1:G SAV$="":RETURN 1570 REM 1580 REM ***EXIT TO CP/M*** 1590 REM 1600 GOSUB 5040:T=0 1610 IF N$=SYS3$ THEN 1760 1620 IF MF$<>"*" THEN 1640 1630 A$=ANS1$:GOSUB 5040:SAV$="":RETURN 1640 IF P3$="NOPASS" THEN 1680 1650 T=T+1:IF T=2 THEN GOSUB 5040:GOSUB OSUB 5040 2010 A$=STR$(V+1):GOSUB 5040:CLOSE 2020 GOSUB 5040 2030 A1$="Today's Date/Time (MM/DD|HH:MM) ":N=1:GOSUB 5040:GOSUB 5170 2040 IF B$="" THEN 2030 ELSE D$=B$ 2050 IF LEN(D$) >11 THEN PRINT "Please use correct format":GOTO 2030 2060 A1$="To (R5040:RETURN 1660 A1$=PC$:N=1:GOSUB 5040:C=2:GOSUB 5170 1670 IF B$="" OR B$<>P3$ THEN 1650 1680 IF XPR THEN 1740 1690 REM 1700 REM ***DISPLAY ENTERCPM*** 1710 REM 1720 GOSUB 5040:FIL$="ENTERCPM":NW=1:GOSUB 5680:GOSUB 5040 1730 REM 1740 IF IHM<>HM TETURN for ALL): ":N=1:GOSUB 5040 2070 C=1:GOSUB 5170:IF B$="" THEN T$="ALL" ELSE T$=B$ 2080 GOSUB 7180:IF NOT OK THEN 2060 2090 GOSUB 7290 2100 A1$="Subject: ":N=1:GOSUB 5040 2110 C=0:GOSUB 5170:IF B$="" THEN 2100 ELSE K$=B$: 2115 IF LEN(K$)>26 THEN HEN MFJ$=MF$:GOSUB 6910 1750 GOSUB 4200 1760 POKE 4,0 1770 A$="Entering CP/M...":GOSUB 5040 1780 POKE 0,&HC3:SYSTEM ' RESTORE JMP AT 0 1790 REM 1800 REM ***DISPLAY BULLETINS*** 1810 REM 1820 FIL$="BULLETIN":GOSUB 5680:RETURN 1830 REM 1840 REM ***PRINT "To long... 25 character limit":GOTO 2100 2120 A1$="Password ('*' for Private): ":N=1:GOSUB 5040 2130 C=1:GOSUB 5170:PW$=B$ 2140 IF T$<>"ALL" OR LEFT$(PW$,1)<>"*" THEN 2160 2150 A$="Cannot use '*' with ALL.":GOSUB 5040:GOTO 2120 2160 IF XPR THENDISPLAY WELCOME MESSAGE*** 1850 REM 1860 FIL$="INFO":GOSUB 5680:RETURN 1870 REM 1880 REM *** DISPLAY MENU OF FUNCTIONS *** 1890 REM 1900 FIL$="MENURBBS":GOSUB 5680:GOSUB 5040:RETURN 1910 REM 1920 REM **** ENTER A NEW MESSAGE ***** 1930 REM 1940 2200 2170 GOSUB 5040 2175 SIZE$=STR$(SIZE) 2180 A$="Enter up to"+SIZE$+" lines of text (NO semicolons).":GOSUB 5040 2190 A$="When finished, hit two RETURNs in a row.":GOSUB 5040 2200 GOSUB 5040:F=0 2210 IF F=SIZE THEN A$="Message full.":GOSUB 5040:G  OTO 2280 2220 F=F+1 2230 A1$=SPACE$(3-LEN(STR$(F)))+STR$(F)+"> ":N=1:GOSUB 5040 2240 GOSUB 5170:IF B$="" THEN F=F-1:IF F=0 THEN 2500 ELSE 2280 2250 IF F=SIZE-2 THEN PRINT "(2 lines left)" 2260 IF F=SIZE-1 THEN PRINT "(Last line)" 2270 A$(F)=B$+" ":GO 2580 IF B$="" THEN 2610 2590 TSV$=T$:T$=B$:GOSUB 7180:IF NOT OK THEN T$=TSV$:GOTO 2570 2600 GOSUB 7290 2610 A1$="Re: "+K$+": ":N=1:GOSUB 5040:C=0:GOSUB 5170 2620 IF B$<>"" THEN K$=B$ 2630 A1$="PW: "+PW$+": ":N=1:GOSUB 5040:C=1:GOSUB 5170 2640 ITO 2210 2280 GOSUB 5040 2290 A1$="Select: (H)eader, (L)ist, (E)dit, (A)bort, (C)ontinue, (S)ave: " 2300 IF XPR THEN A1$="H,L,E,A,C,S: " 2310 N=1:GOSUB 5040:C=1:GOSUB 5170 2320 IF B$="" THEN 2290 2330 FF=INSTR("HLEACS",B$):IF FF=0 THEN 2290 2340 ON FF B$="" THEN 2280 2650 IF T$<>"ALL" OR LEFT$(B$,1)<>"*" THEN PW$=B$:GOTO 2280 2660 A$="Cannot use '*' with ALL.":GOSUB 5040:GOTO 2630 2670 REM 2680 REM EDIT DRAFT MESSAGE 2690 REM 2700 IF XPR THEN 2740 2710 GOSUB 5040 2720 A$="Enter Line Number to F GOTO 2540,2380,2700,2500,2210,2800 2350 REM 2360 REM LIST MESSAGE ENTERED 2370 REM 2380 GOSUB 5020:GOSUB 5040 2390 A$="Date/Time: "+D$:GOSUB 5040 2400 A$="To: "+TX$:GOSUB 5040 2410 A$="Re: "+K$:GOSUB 5040 2420 A$="PW: "+PW$:GOSUB 5040 2430change (RETURN or 0 to end).":GOSUB 5040 2730 A$="Then enter replacement or RETURN for no change.":GOSUB 5040 2740 GOSUB 5040:A1$="Line Number: ":N=1:GOSUB 5040:C=3:GOSUB 5170 2750 L=VAL(B$):IF L=0 OR L>F THEN GOSUB 5040:GOTO 2280 2760 A$=" was:":GOSUB GOSUB 5080 2440 FOR L=1 TO F:A$=SPACE$(3-LEN(STR$(L)))+STR$(L)+": "+A$(L) 2450 IF BK THEN 2280 ELSE GOSUB 5040:NEXT L 2460 GOSUB 5040:GOTO 2280 2470 REM 2480 REM ABORT MESSAGE ENTRY 2490 REM 2500 GOSUB 5040:A$="Aborted":GOSUB 5040:GOSUB 5040:RETURN 5040 2770 A$=SPACE$(3-LEN(STR$(L)))+STR$(L)+": "+A$(L):GOSUB 5040 2780 A1$=SPACE$(3-LEN(STR$(L)))+STR$(L)+": ":N=1:GOSUB 5040:GOSUB 5170 2790 IF B$="" THEN 2740 ELSE A$(L)=B$+" ":GOTO 2740 2800 REM 2810 REM SAVE NEW MESSAGE 2820 REM 2830 IF PW$<>"" 2510 REM 2520 REM EDIT HEADER 2530 REM 2540 GOSUB 5040:A$="Enter replacement or RETURN for no change.":GOSUB 5040 2550 A1$="Date: "+D$+": ":N=1:GOSUB 5040:GOSUB 5170 2560 IF B$<>"" THEN D$=B$ 2570 A1$="To: "+TX$+": ":N=1:GOSUB 5040:C=1:GOSUB 5170 THEN PW$=";"+PW$ 2840 A$="Updating Summary file, ":N=1:GOSUB 5040 2850 OPEN "R",1,DSK2$+"SUMMARY",30 2860 RE=1:FIELD#1,30 AS RR$:RL=30 2870 RE=MZ*6+1:S$=STR$(V+1)+PW$:GOSUB 5450:PUT#1,RE 2880 RE=RE+1:S$=D$:GOSUB 5450:PUT#1,RE 2890 RE=RE+1:S$=N$+" "+  O$:GOSUB 5450:PUT#1,RE 2900 RE=RE+1:S$=T$:GOSUB 5450:PUT#1,RE 2910 RE=RE+1:S$=K$:GOSUB 5450:PUT#1,RE 2920 RE=RE+1:S$=STR$(F):GOSUB 5450:PUT#1,RE 2930 RE=RE+1:S$=" 9999":GOSUB 5450:PUT#1,RE 2940 CLOSE#1 2950 A$="Next Message #, ":N=1:GOSUB 5040:VV=0 0 3220 OPEN "R",1,DSK2$+"MESSAGES",65 3230 RE=1:FIELD#1,65 AS RR$:MI=0 3240 MI=MI+1:IF (MI>MZ) OR BK THEN 3530 ELSE G=M(MI,1) 3250 IF GM THEN 3480 3270 GOSUB 5990:IF OK OR NOT PERS THEN 3280 ELSE RE=RE+M(MI2960 OPEN "R",1,DSK2$+"COUNTERS",5:FIELD#1,5 AS RR$:GET#1,MNUM 2970 LSET RR$=STR$(V+1):PUT#1,MNUM 2980 A$="Active Messages, ":N=1:GOSUB 5040 2990 GET#1,MSGS:VV=VAL(RR$) 3000 LSET RR$=STR$(VV+1):PUT#1,MSGS:CLOSE#1 3010 A$="and Message file.":N=1:GOSUB ,2):GOTO 3240 3280 RE=RE+1:GET#1,RE:GOSUB 5500:D$=S$ 3290 RE=RE+1:GET#1,RE:GOSUB 5500:NO$=S$ 3300 RE=RE+1:GET#1,RE:GOSUB 5500:T$=S$ 3310 RE=RE+1:GET#1,RE:GOSUB 5500:GOSUB 6080:K$=S$ 3320 RE=RE+1:GET#1,RE:J=VAL(RR$):GOSUB 5040 3330 IF FT THEN GOSUB 505040 3020 OPEN "R",1,DSK2$+"MESSAGES",65 3030 RL=65:FIELD#1,65 AS RR$:RE=MX+1 3040 S$=STR$(V+1)+PW$:GOSUB 5450:PUT#1,RE 3050 RE=RE+1:S$=D$:GOSUB 5450:PUT#1,RE 3060 RE=RE+1:S$=N$+" "+O$:GOSUB 5450:PUT#1,RE 3070 RE=RE+1:S$=T$:GOSUB 5450:PUT#1,RE 3080 20:GOSUB 5040:FT=0 3340 A$="Msg #:"+STR$(G):GOSUB 5040 3350 A$="Date/Time: "+D$:GOSUB 5040 3360 T01$=NO$:T02$="":TX$=NO$ 3370 I=INSTR(NO$," "):IF I>0 THEN T01$=LEFT$(NO$,I-1):T02$=MID$(NO$,I+1) 3380 IF T01$<>SYS3$ THEN GOSUB 7330 3390 A$="From: "+TX$RE=RE+1:S$=K$:GOSUB 5450:PUT#1,RE 3090 RE=RE+1:S$=STR$(F):GOSUB 5450:PUT#1,RE 3100 RE=RE+1 3110 FOR P=1 TO F:S$=A$(P):GOSUB 5450:PUT#1,RE:RE=RE+1:NEXT P: S$=" 9999":GOSUB 5450:PUT#1,RE:CLOSE#1:MX=MX+F+6:MZ=MZ+1:M(MZ,1)=V+1:M(MZ,2)=F 3120 GOSUB 5040:GO:GOSUB 5040 3400 T01$=T$:T02$="":TX$=T$ 3410 I=INSTR(T$," "):IF I>0 THEN T01$=LEFT$(T$,I-1):T02$=MID$(T$,I+1) 3420 GOSUB 7290 3430 A$="To: "+TX$:GOSUB 5040 3440 A$="Re: "+K$:GOSUB 5040:GOSUB 5040 3450 RE=RE+1:FOR P=1 TO J:GET#1,RE:GOSUB 5500:A$=SSUB 5040:U=U+1:RETURN 3130 REM 3140 REM ***RETRIEVE MESSAGE*** 3150 REM 3160 FT=-1:G=0 3170 GOSUB 5040 3180 A2$="Retrieve":GOSUB 3580 3190 IF LEN(B$)=0 THEN M=0 ELSE M=VAL(B$) 3200 IF M<1 THEN GOSUB 5040:RETURN 3210 IF M>U THEN GOSUB 7010:GOTO 317$:GOSUB 5040 3460 IF BK THEN BK=0:GOTO 3480 3470 RE=RE+1:NEXT P:GOSUB 5040 3480 IF RIGHT$(B$,1)="+" THEN 3510 3490 IF G>HM THEN HM=G 3500 CLOSE:GOTO 3170 3510 M=M+1:MI=0:RE=1 3520 IF M<=U AND NOT BK THEN 3240 3530 IF G>HM THEN HM=G 3540 CLOSE:A$="  End of Messages.":GOSUB 5040:GOSUB 5040:D$="":NO$="":RETURN 3550 REM 3560 REM COMMON MESSAGE NUMBER PROMPT 3570 REM 3580 A1$="Message Number: ("+STR$(IU)+"-"+STR$(U)+")" 3590 IF NOT XPR THEN A1$=A1$+" to "+A2$+" (RETURN to quit)" 3600 A1$=A1$+" : ":N*** End of Survey ***":GOSUB 5040:GOSUB 5040:GOSUB 5040 3890 CLOSE:RETURN 3900 REM 3910 REM DISPLAY ONE-LINER "FULL" SUMMARY OF MSG G 3920 REM 3930 A$=SPACE$(4-LEN(STR$(G)))+STR$(G)+": " ' Msg Number 3940 GET #1,RE+5:GOSUB 5500 3950 A$=A$+SPACE$(3-L=1:GOSUB 5040:GOSUB 5170:GOSUB 5040:RETURN 3610 REM 3620 REM ***SUMMARIZE MESSAGES*** 3630 REM 3640 GOSUB 5040 3650 A2$="Start":GOSUB 3580 3660 IF LEN(B$)=0 THEN M=0:GOSUB 5040:RETURN ELSE M=VAL(B$):GOSUB 5150 3670 IP=INSTR(B$,","):IF IP>0 THEN B$=MEN(STR$(VAL(S$))))+STR$(VAL(S$))+" " ' Lines 3960 RE=RE+1:GET #1,RE:GOSUB 5500 3970 A$=A$+S$+" " ' Date 3980 RE=RE+1:GET #1,RE:GOSUB 5500 ' From 3990 I=INSTR(S$," "):IF I>0 THEN S$=MID$(S$,I+1) 4000 IF LEN(S$) > 8 THEN S$=LEFT$(S$,8) 4010 IF S$<>SID$(B$,IP+1) ELSE ST=0:GOTO 3720 3680 IF LEN(B$)<3 THEN RETURN 3690 IF MID$(B$,2,1)<>"=" THEN RETURN 3700 SV$=MID$(B$,3):B$=LEFT$(B$,1):ST=INSTR("FTS",B$) 3710 IF ST=0 THEN RETURN 3720 IF M<1 THEN RETURN 3730 IF M>U THEN GOSUB 7010:RETURN 3740 GOSUBYS3$ THEN CX$=S$:GOSUB 7020:S$=CX$ 4020 A$=A$+S$+SPACE$(8-LEN(S$))+" to => " 4030 RE=RE+1:GET #1,RE:GOSUB 5500 ' To 4040 I=INSTR(S$," "):IF I>0 THEN S$=MID$(S$,I+1) 4050 IF S$<>SYS3$ AND S$<>"ALL" THEN CX$=S$:GOSUB 7020:S$=CX$ 4060 IF LEN(S$) > 8 THEN 5020:GOSUB 5040 3750 OPEN "R",1,DSK2$+"SUMMARY",30:RE=1:FIELD #1,28 AS RR$ 3760 GET #1,RE 3770 IF EOF(1) OR BK THEN 3870 ELSE G=VAL(RR$) 3780 IF G>9998 THEN 3870 3790 IF GHM THEN MFJ$=MF$:GOSUB 6910 4190 GOTO 4410 4200 REM 4210 REM   COMMENTS FOR SYSOP 4220 REM 4230 IF N$=SYS3$ THEN RETURN 4240 GOSUB 5040 4250 A1$="Enter confidential comments for the SYSOP ":GOSUB 6940 4260 IF NOT OK THEN 4360 4270 RE=2:RL=65:OPEN "R",1,DSK2$+"COMMENTS",65:FIELD#1,65 AS RR$ 4280 GET#1, 5040:GOSUB 5040:SAV$="":RETURN 4520 REM 4530 GOSUB 5040 4540 A2$="Kill":GOSUB 3580 4550 IF LEN(B$)=0 THEN M=0 ELSE M=VAL(B$) 4560 IF M<1 THEN GOSUB 5040:RETURN 4570 IF M>U THEN GOSUB 7010:GOTO 4520 4580 A$="Scanning Summary file...":N=1:GOSUB 5040 1:RE=VAL(RR$)+1:IF RE=1 THEN RE=2 4290 S$=" ":GOSUB 5450:PUT#1,RE:RE=RE+1 4300 S$="From: "+CN$+" "+CO$:GOSUB 5450:PUT#1,RE 4310 A$="Enter text; type two RETURNs to end.":GOSUB 5040 4320 GOSUB 5040 4330 A1$="> ":N=1:GOSUB 5040:GOSUB 5170 4340 IF B$<>" 4590 OPEN "R",1,DSK2$+"SUMMARY",30:RE=1:FIELD#1,30 AS RR$:RL=30 4600 GET#1,RE 4610 IF EOF(1) THEN 4800 ELSE G=VAL(RR$) 4620 IF G>9998 THEN 4800 4630 IF GM THEN 4800 4650 GOSUB 5960:IF OK OR NOT PERS THEN 4660 ELSE" THEN RE=RE+1:S$=B$:RL=65:GOSUB 5450:PUT#1,RE:GOTO 4330 4350 S$=STR$(RE):RL=65:GOSUB 5450:PUT#1,1:CLOSE 4360 GOSUB 5040 4370 A$="Character count: "+STR$(A)+" typed by system - "+STR$(D)+" typed by you.":GOSUB 5040 4380 GOSUB 5040:RETURN 4390 A1$="Sor 4800 4660 GET#1,RE:GOSUB 5500:PW=INSTR(S$,";"):PW$="" 4670 IF PW=0 OR N$=SYS3$ OR PERS OR OK THEN PERS=0:GOTO 4700 4680 PW$=MID$(S$,PW+1):GOSUB 5040:A1$="Password: ":N=1:GOSUB 5040 4690 C=1:GOSUB 5170:IF B$<>PW$ THEN A$="Incorrect.":GOTO 4810 4700 S$ry, too many errors. Try again another time. Bye..." 4400 GOSUB 5040:GOSUB 5040 4410 REM 4420 ' OUT &HFF,29 '<-- TURN OFF DTR TO MODEM FOR DISCONNECT (Morrow Decision) 4425 RUN "BYE" 'LEAVE VIA BYE INSTEAD OF DTR FOR O1 4430 POKE 0,&HC3 '<--- =" 0"+":"+STR$(G):GOSUB 5450:PUT#1,RE:CLOSE 4710 A$="Updating Message file...":N=1:GOSUB 5040 4720 OPEN "R",1,DSK2$+"MESSAGES",65:RE=1:FIELD#1,65 AS RR$:MI=0 4730 MI=MI+1:IF MI>MZ THEN 4800 ELSE G=M(MI,1) 4740 IF G KILL A MESSAGE 4480 REM 4490 IF N$=SYS3$ OR MF$="!" THEN GOTO 4530 4500 GOSUB 5040:GOSUB 5040 4510 A$=ANS1$:GOSUB0 IF G=M THEN S$="0"+":"+STR$(G)+":"+N$+","+O$:RL=65:GOSUB 5450:PUT#1,RE:M(MI,1)=0 4760 CLOSE#1:A$="Updating Message count...":GOSUB 5040 4770 OPEN "R",1,DSK2$+"COUNTERS",5:FIELD#1,5 AS RR$ 4780 GET#1,MSGS:LSET RR$=STR$(VAL(RR$)-1):PUT#1,MSGS 4790 GOSU  B 5040:A$="Message killed.":GOTO 4810 4800 A$="Message not found." 4810 CLOSE:GOSUB 5040:GOTO 4530 4820 REM 4830 REM ***DISPLAY USER FILE*** 4840 REM 4850 GOSUB 5020 4860 OPEN "R",1,DSK$+"USERS",62:FIELD#1,1 AS MU$,1 AS SU$,60 AS RR$ 4870 FIELD#1,1190 REM 5200 IF BEL AND SAV$="" THEN PRINT CHR$(7); 5210 B$="":BK=0 5220 IF SAV$="" THEN GOSUB 6210:IF C<>3 THEN PRINT 5230 SP=INSTR(SAV$,";"):IF SP=0 THEN B$=SAV$:SAV$="":GOTO 5250 5240 B$=LEFT$(SAV$,SP-1):SAV$=MID$(SAV$,SP+1) 5250 IF LEN(B$)=0 THEN0 AS NN$:GET#1,1:NU=VAL(NN$) 4880 GOSUB 5040 4890 FOR J=NU+1 TO 2 STEP -1 4900 GET#1,J:IF SU$="*" THEN 4960 4910 GOSUB 5500:S0$=S$ 4920 I=INSTR(S0$,";"): S1$=LEFT$(S0$,I-1):S2$=MID$(S0$,I+1) 4930 I=INSTR(S2$,";"): S3$=MID$(S2$,I+1):S2$=LEFT$(S2$,I-1) C=0:RETURN 5260 IF C=0 THEN 5280 5270 CY$=B$:GOSUB 7100:B$=CY$ 5280 D=D+LEN(B$):C=0 5290 RETURN 5300 REM 5310 REM ***ON ERROR HANDLER*** 5320 IF ERL=430 THEN RESUME 470 5330 IF ERL=920 THEN RE=0:RESUME 930 5340 IF ERL=1000 THEN RESUME 1040 5350  4940 I=INSTR(S3$,";"): S3$=LEFT$(S3$,I-1) 4950 A$=S1$+" "+S2$+", "+S3$:GOSUB 5040 4960 IF BK THEN 4980 4970 NEXT J 4980 CLOSE:GOSUB 5040:RETURN 4990 REM 5000 REM **** PRINT CONTROL-CHAR INFO 5010 REM 5020 GOSUB 5040 5030 A$="** Use CTL-S or S toIF ERL=1200 THEN RESUME 1350 5360 IF ERL=1980 THEN RESUME 2000 5370 IF ERL=2960 THEN RESUME 2970 5380 IF ERL=2990 THEN RESUME 3000 5390 IF ERL=3220 THEN RESUME 3530 5400 IF ERL=3750 THEN RESUME 3870 5410 IF ERL=4270 THEN RESUME 4300 5420 IF ERL=5710 PAUSE, CTL-K or K to ABORT.**" 5040 REM 5050 REM ***PRINT STRING FROM A$ ON CONSOLE*** 5060 REM 5070 IF SAV$<>"" AND A1$<>"" THEN A1$="":RETURN 5080 IF A1$<>"" THEN A$=A1$:A1$="" 5090 IF N=1 THEN PRINT A$;:PP$=A$:GOTO 5140 5100 BI=ASC(INKEY$+" ")  THEN RESUME 5760 5430 IF ERL=6710 THEN RESUME 6850 5440 RESUME NEXT 5450 REM 5460 REM FILL AND STORE DISK RECORD 5470 REM 5480 LSET RR$=LEFT$(S$+SPACE$(RL-2),RL-2)+CHR$(13)+CHR$(10) 5490 RETURN 5500 REM 5510 REM UNPACK DISK RECORD 5520 REM 55305110 IF BI=&H13 OR BI=&H53 OR BI=&H73 THEN BI=ASC(INPUT$(1)):GOTO 5130 5120 IF BI=&HB OR BI=&H4B OR BI=&H6B THEN BK=-1:GOTO 5150 5130 PRINT A$ 5140 A=A+LEN(A$) 5150 A$="":N=0 5160 RETURN 5170 REM 5180 REM ***ACCEPT STRING INTO B$ FROM CONSOLE*** 5 ZZ=LEN(RR$)-2 5540 WHILE MID$(RR$,ZZ,1)=" " 5550 ZZ=ZZ-1:IF ZZ=1 THEN 5570 5560 WEND 5570 S$=LEFT$(RR$,ZZ) 5580 IF MID$(S$,ZZ,1)="?" THEN S$=S$+" " 5590 RETURN 5600 REM 5610 REM *** TOGGLE EXPERT USER MODE 5620 REM 5630 XPR=NOT XPR:RETURN 5640   REM 5650 REM *** TOGGLE BELL PROMPT 5660 REM 5670 BEL=NOT BEL:RETURN 5680 REM 5690 REM SUBROUTINE TO PRINT A FILE 5700 REM 5710 OPEN "I",1,DSK$+FIL$:BK=0:IF EOF(1) THEN 5760 5720 IF NW=0 THEN GOSUB 5020 ELSE NW=0 5730 GOSUB 5040 5740 IF EOF(1) OR:S2$=MID$(S$,I+1) 6060 IF S1$=N$ AND S2$=O$ THEN OK=-1 ELSE OK=0 6070 RETURN 6080 IF PERS THEN S$="("+S$:S$=S$+")":PERS=0 6090 RETURN 6100 REM 6110 REM PRINT COMMENTS FILE FOR SYSOP (Z COMMAND) 6120 REM 6130 GOSUB 5040:OPEN "R",1,DSK2$+"COMMENTS",6 BK THEN 5760 ELSE LINE INPUT #1,A$:GOSUB 5040:GOTO 5740 5750 GOSUB 5040 5760 CLOSE #1:RETURN 5770 REM 5780 REM PRINT "CALLERS" FILE 5790 REM 5800 IF N$=SYS3$ OR MF$="!" THEN GOTO 5840 5810 GOSUB 5040 5820 A$=ANS1$:GOSUB 5040:GOSUB 5040:RETURN 5835:RE=1:FIELD#1,65 AS RR$ 6140 GET#1,RE:RE=RE+1:IF EOF(1) THEN 6160 6150 GOSUB 5500:A$=S$:GOSUB 5040:GOTO 6140 6160 CLOSE:GOSUB 5040:IF RE=2 THEN RETURN 6170 A$="*** End of COMMENTS ***":GOSUB 5040:GOSUB 5040 6180 IF RE>3 THEN 6190 ELSE RETURN 6190 A10 REM 5840 GOSUB 5040 5850 A$="Hit Ctrl K to Abort listing":GOSUB 5040 5860 GOSUB 5040 5870 OPEN "R",1,DSK$+"CALLERS",60:FIELD #1,60 AS RR$:GET #1,1:SIZ=VAL(RR$) 5880 CA=CN 5890 FOR CNT=SIZ+1 TO 2 STEP -1 5900 GET #1,CNT:GOSUB 5500 5910 A$=SPACE$(5$="Delete COMMENTS file? ":GOSUB 6940:IF OK THEN KILL DSK2$+"COMMENTS" 6200 RETURN 6210 REM 6220 REM CHARACTER-AT-A-TIME LINE INPUT WITH EDITING (IF C=2, NO ECHO) 6230 REM 6240 CHC=0: SAV$="":DC=0:IC=&H30 6250 NCH=ASC(INPUT$(1)) 6260 IF NCH=13 THEN -LEN(STR$(CA)))+STR$(CA)+" "+S$:GOSUB 5040:IF BK THEN 5940 5920 CA=CA-1 5930 NEXT CNT 5940 CLOSE:GOSUB 5040 5950 A$="*** End of CALLERS ***":GOSUB 5040:GOSUB 5040:RETURN 5960 REM 5970 REM TEST FOR PERSONAL MESSAGES 5980 REM 5990 PERS=0:OK=-1:GET #1RETURN 'CR 6270 IF NCH=127 THEN 6350 6280 IF NCH<32 THEN 6370 6290 IF CHC>=63 THEN PRINT CHR$(7);:GOTO 6250 6300 SAV$=SAV$+CHR$(NCH): CHC=CHC+1 :IC=IC+1:IF IC=&H3A THEN IC=&H30 6310 IF DC THEN PRINT CHR$(10); 6320 IF C<>2 THEN PRINT CHR$(NCH); ELSE P,RE:IF INSTR(RR$,";*")<>0 THEN PERS=-1 6000 IF N$=SYS3$ THEN 6030 6010 GET #1,RE+3:GOSUB 6050:IF OK THEN 6030 6020 GET #1,RE+2:GOSUB 6050 6030 RETURN 6040 REM TEST 'FROM' OR 'TO' FIELD FOR USER'S NAME 6050 GOSUB 5500:I=INSTR(S$," "):S1$=LEFT$(S$,I-1)RINT CHR$(IC); 6330 IF CHC=55 THEN PRINT CHR$(7); 6340 DC=0:GOTO 6250 6350 IF CHC=0 THEN 6250 ELSE PRINT BSL$;:DC=-1 6360 CHC=CHC-1:IC=IC-1: SAV$=LEFT$(SAV$,CHC): GOTO 6250 6370 IF CHC=0 THEN 6250 6380 IF NCH=8 THEN PRINT ERS$;:DC=0:GOTO 6360 'BS 63  90 IF NCH=12 THEN GOSUB 6450:GOTO 6460 '^L 6400 IF NCH=18 THEN PRINT:PRINT PP$;:GOTO 6460 '^Retype 6410 IF NCH=21 THEN PRINT " #": PRINT PP$;:DC=0:GOTO 6240 '^U 6420 IF NCH<>24 THEN 6250 '^X 6430 GOSUB 6450 6440 GOTO 6240 6450 FOR BCC=1 TO CHC: PRINT6720 REM CHECK USERS FILE 6730 REM 6740 OPEN "R",1,DSK$+"USERS",62:FIELD#1,62 AS RR$:GET#1,1:NU=VAL(RR$) 6750 FOR J=2 TO NU+1:GET#1,J:GOSUB 5500:S00$=MID$(S$,3) 6760 I=INSTR(S00$,";"): S01$=LEFT$(S00$,I-1):S02$=MID$(S00$,I+1) 6770 I=INSTR(S02$,";"): S ERS$;: NEXT BCC: RETURN 6460 IF C<>2 THEN PRINT SAV$;: GOTO 6480 6470 IC=&H30:FOR BCC=1 TO CHC: IC=IC+1: PRINT CHR$(IC);: NEXT BCC 6480 DC=0:GOTO 6250 6490 REM 6500 REM NEW USER PASSWORD PROMPT 6510 REM 6520 GOSUB 5040 6530 A$="Enter at least six 03$=MID$(S02$,I+1):S02$=LEFT$(S02$,I-1) 6780 I=INSTR(S03$,";"): S04$=MID$(S03$,I+1):S03$=LEFT$(S03$,I-1) 6790 I=INSTR(S04$,";"): IF I=0 THEN S05$="0":GOTO 6810 6800 S05$=MID$(S04$,I+1):S04$=LEFT$(S04$,I-1) 6810 HM=VAL(S05$) 6820 IF T01$<>S01$ OR T02$<alphanumeric characters":GOSUB 5040 6540 A1$="for your PASSWORD: " 6550 N=1:GOSUB 5040:C=2:GOSUB 5170:S04$=B$:IF S04$="" THEN 6520 6560 IF LEN(S04$)<6 THEN 6520 6570 A1$="Now enter it again: " 6580 N=1:GOSUB 5040:C=2:GOSUB 5170 6590 IF S04$<>B$ THEN>S02$ THEN 6840 6830 MFJ$=LEFT$(S$,1):GOSUB 5040:UJ=J:OK=-1:CLOSE:RETURN 6840 NEXT J 6850 CLOSE:RETURN 6860 REM 6870 REM UPDATE USERS FILE 6880 REM 6890 MFJ$=MF$ 6900 GOSUB 6490 6910 OPEN "R",1,DSK$+"USERS",62:FIELD#1,62 AS RR$ 6920 S$=MFJ$+" "+S A1$="No match. Try again.":GOSUB 5040:GOTO 6520 6600 A$="OK, now please remember it.":GOSUB 5040:GOSUB 5040:RETURN 6610 REM 6620 REM USER PASSWORD CHANGE ROUTINE 6630 REM 6640 IF N$<>SYS3$ THEN 6860 6650 A1$="User's FIRST Name: ":N=1:GOSUB 5040 6601$+";"+S02$+";"+S03$+";"+S04$+";"+STR$(HM) 6930 RL=62:GOSUB 5450:PUT#1,UJ:CLOSE:RETURN 6940 REM 6950 REM PROMPT FOR YES OR NO ANSWER 6960 REM 6970 A2$=A1$:OK=0 6980 A1$=A2$:N=1:GOSUB 5040:C=1:GOSUB 5170:ANS$=LEFT$(B$,1) 6990 IF ANS$="" THEN 6980 EL60 C=1:GOSUB 5170:T01$=B$:IF T01$="" THEN RETURN 6670 A1$="User's LAST Name: ":N=1:GOSUB 5040 6680 C=1:GOSUB 5170:T02$=B$:IF T02$="" THEN RETURN 6690 OK=0:GOSUB 6710:IF OK THEN GOSUB 7550:GOTO 6650 6700 A$="Not found.":GOSUB 5040:GOTO 6650 6710 REM SE IF ANS$="Y" THEN OK=-1:RETURN 7000 IF ANS$<>"N" THEN 6940 ELSE RETURN 7010 A$="That's an invalid message number, "+CN$+".":GOSUB 5040:SAV$="":RETURN 7020 REM 7030 REM CAPITALIZE STRING CX$ (e.g., FRANK -> Frank) 7040 REM 7050 FOR ZZ=2 TO LEN(CX$)    7060 ZA=ASC(MID$(CX$,ZZ,1)):IF ZA<&H41 OR ZA>&H5A THEN 7080 7070 MID$(CX$,ZZ,1)=CHR$(ZA+&H20) 7080 NEXT ZZ 7090 RETURN 7100 REM 7110 REM UPPERCASE STRING CY$ (e.g., frank -> FRANK) 7120 REM 7130 FOR ZZ=1 TO LEN(CY$) 7140 ZA=ASC(MID$(CY$,ZZ,1)):IF OT OK THEN RETURN 7420 FOR T1=1 TO 5 7430 PRINT CHR$(7); 7440 FOR T2=1 TO BEEP:NEXT T2 7450 NEXT T1 7460 GOSUB 5040:GOSUB 5040 7470 A$="Type /EX to Exit the CHAT mode":GOSUB 5040 7480 A$="":GOSUB 5040 7490 BELS=BEL:BEL=0 'NO BELL DURING CHAT BUT SZA<&H61 OR ZA>&H7A THEN 7160 7150 MID$(CY$,ZZ,1)=CHR$(ZA-&H20) 7160 NEXT ZZ 7170 RETURN 7180 REM 7190 REM CHECK FOR EXISTING USER (FOR "TO:") 7200 REM 7210 T01$=T$:T02$="" 7220 IF T$=SYS3$ OR T$="ALL" THEN OK=-1:RETURN 7230 U01$=S01$:U02$=S02$:U03AVE ORIG. VALUE 7500 A1$=">":N=1:GOSUB 5040:GOSUB 5170 7510 IF B$="/EX" OR B$="/ex" THEN BEL=BELS:RETURN 7520 GOTO 7500 7530 GOTO 1420 'GO BACK TO BEGINNING JUST IN CASE 7540 REM 7550 REM Program area to validate users by SYSOP 7560 REM 7570 IF $=S03$:U04$=S04$:SHM=HM:SUJ=UJ:SMF$=MF$ 7240 I=INSTR(T$," "): IF I=0 THEN OK=0:GOTO 7270 7250 T01$=LEFT$(T$,I-1):T02$=MID$(T$,I+1):OK=0:GOSUB 6710 7260 S01$=U01$:S02$=U02$:S03$=U03$:S04$=U04$:HM=SHM:UJ=SUJ:MF$=SMF$ 7270 IF NOT OK THEN A1$="Not a currenN$<>SYS3$ THEN GOTO 1420 'DOUBLE CHECK IF SYSOP 7580 A1$="Change

assword or alidate this user ->":N=1:GOSUB 5040 7590 C=1:GOSUB 5170:IF B$="P" THEN GOTO 6900 7600 GOSUB 5040 7610 A1$="Enter validation authorization Password ->":N=1:GOSUB 5040 76tly known User. OK? ":GOSUB 6940 7280 RETURN 7290 REM 7300 REM CAPITALIZE "TO:" FOR MESSAGE ENTRY DISPLAY 7310 REM 7320 IF T$=SYS3$ OR T$="ALL" THEN TX$=T$:RETURN 7330 CX$=T01$:GOSUB 7020:T01$=CX$:CX$=T02$:GOSUB 7020:T02$=CX$ 7340 TX$=T01$+" "+T02$20 C=1:GOSUB 5170:IF B$=VAP$ THEN 7640 7630 GOTO 6650 'GO BACK AND TRY AGAIN 7640 A1$="wit or alid user ->":N=1:GOSUB 5040 7650 C=1:GOSUB 5170:IF B$="T" THEN MFJ$="*" ELSE MFJ$="!" 7660 GOTO 6910 'GO ADD IT TO THE FILE 7670 REM 7680 REM **** 7350 RETURN 7360 CX$=N$:GOSUB 7020:CN$=CX$:CX$=O$:GOSUB 7020:CO$=CX$:RETURN 7370 REM 7380 A$=" ":GOSUB 5040:GOSUB 5040:GOSUB 5040 7390 A$="You have entered the CHAT mode":GOSUB 5040 7400 A1$="Shall I page the SYSOP ":GOSUB 6940 7410 IF N DISPLAY NEWS **** 7690 REM 7700 FIL$="NEWS":NW=0:GOSUB 5680:RETURN 7710 REM 7800 FIL$="TWIT":NW=1:GOSUB 5680 7810 GOTO 4130 7820 REM 7840 REM This is the end of the program for the time being !  KLMNOPQRSTUVWXYZ[\]^_`ab%r=ܝmq4tx뻒K^Dfލ^{ *1S;X?nCH&laĆ ה|O/CC~?x )wQ7%QJ쐈ѤwnF^ykX{( qb\@?@ABCDEFGHIJ y$7bF *pF  - p!K֍Ze"Gto:]#`I@g*Uޒƨ yA1נՔ Ttv"\:ET(P2Gc OH**E$4]h\dyp%Q@5T݇.l.87Gk XDd - *n(F`WUt VS"G  ӽt kD JVPW""  $0F$~y(ZM<؁ؕ|r8#a7W9C8X ڨ^[&`I0D %s$hJAW ̼g*%/"Bv;D,V`M Hh5%`OZh,QɭD۫i ӽtFX"pT c̼Z2i3ZMI saW=סu]`yp0JdFiBO":B|l.y(_h3lU6e(SG*yqu@rC4KnRMRGB0rk: v!R@)YKHMk4$*wMaI<<rgӷ<ՒaH8'uC[$la/tBPH)GMJ.1J+8 $ $ЍZe"4Σ'IJ.%_Dp 8*+ץ H=Tи " ޘ)/%NGtLpp|*E$)u$l.8fލ^{D,LC vДTr);$ Vcs U1Dk#"ݗHh5%)#AԯE4 :K S/ 9e%wBPCDt$ *H0j-H:_| H8" lQKOk^Dk%A}0B /~6זɯJ.<1J=\݄YҖ<8LzaIww2Lpwp;wHA{p;=K.a% #8;tBPHĝXvN. #kJ8+ +\`ZVrɋhhfAKVS`V;`MX"D(Z7p$4]h\F-2؁#HhpOy7zW%3$.UHt8,X{tesAVyG*T̨5M}ءBAp%wB5DHD4]N+\\NˋNNNji w%/ XDhJnLЉ 5%\zC'TqD5ymC fDt$,U.@HۆVd9 .8*cnp$4*L«K^8. 6\8u,%h@Tq=9'h8^5X"9 J * sy!`C^k.Ώq~|{zXj:KnQmZ6f3%h.%b D8G'q1GLuɏ LG$#OqGo)tCH0J~tG$#OǘZ IDGRJ~1>ZJ8" gzt7B^X-c1ۋ ۣǸ0ay%?z+J G$#t p)c|z6#ϸ%ӌZӄ - |h/'#0f4HV@%pK.y 뫻 % 4^3 %v kvXRɝPp$\ c"U0Dk#nKP2&O؁#a赇 *5%FSGreHs' y ޘ)#a}u7D|^GBc ubIPAɍK *(燍Q/T_6F;lR}1J(կ%y> ᄙvBRH2 Dz v(y}(i'FMsp i5 _ Іɣ' ]$_rj Uó؁#!kFO":, zWiUr%oNN[KTó%&D0[`"ڐx{N# ~̅/T Ƽ0C]o'  zR2? ӽt kD JVPW"<,4zp$L58*cץ^ScI!?g sסՔ saW@%/8K^D#' VS"X0D %QH*P,%/HMU%|3m&}D%?<g>%y7B^Jt}=~sypqy|wt=og-yk*:!?0z%~{~us{{}wyqq9.>]Onnog~K ------------------- This File is printed whenever a NEW user has entered the RBBS system it would normally be used to tell the New user about the system and how it works. INFO File ------------------ This File is printed at the beginning ofNȗbv{=-Wŧf=Yog^%oQE''F/#؟pͽk<ٿ\M7G'`D3KW7իptj{:ЀN#8Ɔ5FsK.E$젡#atV B;p$LۃiDІɃ#jJU8R X0ݛNˆ+ FILE: -FOG/HAK.020 CRC = 00 00 --> FILE: /HAK#020.DOC CRC = 26 EF --> FILE: BULLETIN. CRC = CA A2 --> FILE: CALLERS . CRC = DD F9 --> FILE: ENTERCPM. CRC = 64 FC --> FILE: RBBS .COM CRC = F4 81 --> FILE: RBB 8:!_r%i-bFӅՔyV8UkH%o4YU6(:!.1S x֙ vhdU\(50G'Wih  3*Д@ڶ$vH$ ה̑0n#a7j`M hmK"#8v_v%yU l D*P`ݪE$LzbTdp{ #^*Z Xڨa H/^_\b;}&8'̼1S35 .ASC CRC = 3A 53 --> FILE: RBBS35 .DQC CRC = F5 F8 ---------------------> SUM OF CRCS = 59 52 LE: CALLERS . CRC = DD F9 --> FILE: ENTERCPM. CRC = 64 FC --> FILE: RBBS .COM CRC = F4 81 --> FILE: RBB$  rom the SYSOP that you would not normally be read everytime you call the system. TWIT File ---------------------- This is the message a caller gets when he has been taged as a TWIT by the SYSOP. USERS File ---------------------- ed when the P function is called or to ad or modify the validation of a user. A password is required to change the validation of any user. Once the password has allowed access to the rest of the program, the SYSOP can pick to allow full access with th 5 ;Number of Users ! DENNIS;RECLA;GARLAND,TX;SINNED; 2 ;Verified user/last msg =2 ! ROBERT;HUFF;DALLAS,TX;BOBHUFF; 0 ;Verified user ! STEVE;STEPHENS;IRVING,TX;SUPERDUPER; 4 ;Verified usere "!" cue or to identify the caller as a twit "*". The Secret password is String VAP$ and can be changed in line 235. NOTES: This RBBS program written in Microsoft Basic has gotten very large and there has been some problems in Linking the REL fi/last msg =4 * BIG;JOHN;GARLAND,TX;BADGUY; 0 ;Bad Guy use * to keep out NEW;USER;ANYWHERE,TX;HELLOTHERE; 0 ;new user not verified yet The "!" and the "*" can be inserted into the USERS. file after the caller has logged onle that was generated using the BASCOM compiler. I have had success using CP/M 3.0 systems or by using the LD80 linker to link the REL file. LD80 is disk based so it dosen't have the out of memory problem. Dennis Recla 214-270-1834 Garland, Texas by the SYSOP using WordStar or similar program. Be sure to overwrite rather than insert mode to make these changes. You will also not a series of ^@^@ Characters at the end of the file when you load it up in the 'N' mode of WordStar. Do not delete t k the REL file. LD80 is disk based so it dosen't have the out of memory problem. Dennis Recla 214-270-1834 Garland, Texashese. User Validation ------------------ The SYSOP has the capability now of changing the validation of a caller. When the Password change function is called by the SYSOP he/she is given the choice of changing the password of the user describ%  This is the BULLETIN file and it is printed NOW INFO MENURBBS NEWCOM NEWS &   7 JACK BROWN SURREY, B.C. JACK BROWN SURREY, B.C. JACK BROWN SURREY, B.C. JACK BROWN SURREY, B.C. JACK BROWN SURREY, B.C. JACK BROWN SURREY, B.C. JACK BROWN SURREY, B.C. '  This is the ENTERCPM file and it is printed NOW INFO MENURBBS NEWCOM NEWS