; logon.seg.s public start public fix.return clear set pa$=ram,8:set ph$=ram+8,12 when$=ram+20:flag=ram+22 nibble=ram+27:byte=ram+29 start if no=1 no=0:goto lose1 modem(1):text:home:close ; XCALL is an m/l program that I wrote to send commands to the modem. ; This one sends an ATZ. use "b:xcall",1,6 print "Loading DATA..." open #1,"b:data" input #1,c1,c2,ct,ct$,da$ input #1,nu,mn,wm\lu$ close:print "Loading DATA1..." open #1,"data1" input #1,sn$\sys$\sv$ input #1,md$\s$ input #1,lg,fv:close print "Loading DATA3..." open #1,"data3":position #1,80,5:input #1,mn:close t$=chr$(20):p$=chr$(16):o$=chr$(15):n$=chr$(14) date$=da$:da$=date$:cn$=str$(c2) if (right$(time$,2)<>"AM") and (right$(time$,2)<>"PM") or mid$(date$,3,1)<>"/" poke -28672,0:print "Clock error!":use "b:xboot" sc$=chr$(12):rn=17:bo=0 if ct$=da$ goto jump print "End of day's calls."\"Updating DATA3..." f$="b:data3":create f$:open #1,f$:position #1,80,0:input #1,a,x,i$ if a>200 x=0:a=0:i$=da$ a=a+1:x=x+ct:position #1,80,0:print #1,a,x,i$:close print "Updating GRAPH..." create "b:graph":open #1,"b:graph" position #1,80,0:input #1,a:a=a+1:if a=51 a=1 position #1,80,0:print #1,a:position #1,80,a print #1,left$(ct$,5),ct:close ct=1:ct$=da$ print "Updating DATA..." kill "b:data":create "b:data":open #1,"b:data" print #1,c1,c2,ct,ct$,da$\nu,mn,wm\lu$:close:poke -28672,0:use "b:xboot" jump print "Loading DATA2..." open #1,"b:data2":mark(1)=1120:input #1,tb:close if c1 cn$=right$("000"+cn$,4):cn$=str$(c1)+left$(cn$,1)+","+right$("00"+cn$,3) kill "l:last.data" open #1,"l:messages":a=mark(1):close if not a goto jump1 print "Copying sub-board names to RAM..." create "l:messages" open #1,"b:data2":open #2,"l:messages" for a=1 to tb:position #1,128,a+8:input #1,a$ position #2,40,a:print #2,a$:next:close #1:close #2 jump1 home print @29,1 p$"["n$" Shooting Star BBS "p$"["n$ print @29,3 "Copyright 1985-"right$(date$,2)" by" print @38,5 "-DC-" print @25,8 "Awaiting call #"o$;cn$;n$" on "da$ print @27,10 "This will be call #"o$;ct;n$" today" bb=(39-(len(lu$)/2))-6 print \chr$(32,bb)"Last caller: "lu$ print @34,22 "206/838-7686" set t1$=2048,11 open #1,"b:data3":position #1,80,1:input #1,t1$:close if not t1$ t1$=time$ ; use "b:acos.alarm",33,14,"12:00:00 AM" modem(0):home:clock(0):clock(2)=0:bb=0 b4=val(mid$(time$,1,2)):b5=val(mid$(time$,4,2)):b6=val(mid$(time$,7,2)) a1=val(mid$(t1$,1,2)):a2=val(mid$(t1$,4,2)):a3=val(mid$(t1$,7,2)) if b6"Y") print "No" print chr$(5); for a=1 to 200:b=key(0):if b=0 next if info(0)=0 b=29 if b<>29 f$="b:logon0":p$="":o$="":n$="":goto ptse f$="b:logon"+str$(random(4)-1) ptse gosub show.file:if b=29 print n$ if info(0) print ' Type DYM below to enter the Dating Area of this BBS!' print \"[OFF= Hang up, NEW= New user, DYM= Dial Your Match]"\"PST - "time$ on nocar goto start ba$=str$(info(2)*3)+"00 baud" if not info(0) ba$=" local" logon clear key un=0:input \"Enter User Name/Number ]->"i$:x=val(i$) if left$(i$,4)="NET#" sn=val(right$(i$,len(i$)-4)):link "a:wait.rec" if i$="NEW" goto new.user if i$="OFF" goto start if i$="GUEST" gu=1:goto new.user if i$="DYM" link "a:dym.seg" if x<1 goto logon1 if x=666 goto logon3 if x<1 or x>nu goto bad.user gosub rd.user:if d1$ goto logon3 print ' That user number does not exist. Checking validation log.'; ab$="+++":goto validation logon1 gosub lower.case:x=999 open #1,"b:users":for a=1 to nu:position #1,64,a:input #1,d1$,d2$ d3$=d1$+" "+d2$:if d2$="." d3$=d1$ if ab$=d3$ x=a:a=nu:next:close:goto logon3 next:close:print ' That name is not in the userlist. Checking validation log.'; validation open #1,"b:val.log":position #1,80,0:input #1,a:ww=0:z=a val.log position #1,80,z:input #1,i$,y if (x=y) or (left$(i$,len(ab$))=ab$) close:goto val.log1 ww=ww+1:if ww=99 close:goto val.log2 z=z-1:if not z z=99 if not (ww mod 20) print "."; goto val.log val.log1 print ' Information found. Your account was voted on as shown below: _Username'chr$(95,15)'|TV|S|_Y%|_N%|_Date___|_Time______'\i$\ if mid$(i$,29,1)="Y" goto val.yes print "Sorry, you were not validated and your account was deleted." goto lose1 val.yes print "You were validated. Try using your user number or your full name.":bb=bb+1 if bb<>3 goto logon:else goto lose1 val.log2 print \"No information was found.":bb=bb+1 print \"Log in as a new user? ";:gosub get.key if i$="Y" print "Yes":goto new.user print "No":if bb=3 goto lose1 goto logon logon3 echo=" ":input " Password ]->"i$:echo="" if i$="NEW" goto new.user print \"Checking...."; logon2 if (x=666) and (i$="AC/DC") bo=1:kill "l:no.losers":goto new.user gf=len(i$):i$=left$(i$+" ",8) autolog gosub rd.user if bo flag(1)=1 if i$=pa$ goto login if i$="" goto login bad.user bb=bb+1 if bb<3 print \"'"left$(i$,gf)"' is wrong: Try again":goto logon print \"As usual, you're wrong again.":goto lose1 ; *** New User Logon *** new.user ; The "no losers" routine is skipped now with the next goto. goto new1 f$="l:no.losers":open #1,f$:input #1,i$,b$:close if ((not i$) or (ba$<>b$)) and (b$<>"!") kill f$:goto new1 b4=val(mid$(time$,1,2)):b5=val(mid$(time$,4,2)):b6=val(mid$(time$,7,2)) a1=val(mid$(i$,1,2)):a2=val(mid$(i$,4,2)):a3=val(mid$(i$,7,2)) if b620) kill f$:goto new1 print \"Sorry, no NEW at this time. Please try again soon.":goto start new1 print \"Enter your name (Handles Suggested)":input @1"]->"i$ gosub lower.case:i$=ab$:gf=instr(" ",i$):d1$=i$:d2$="." if gf d1$=left$(i$,gf-1):d2$=mid$(i$,gf+1):d4$=d1$+" "+d2$ if gf<1 d4$=d1$ if (len(d1$+" "+d2$)<2) or (len(d1$+" "+d2$)>18) print ' Invalid amount of characters. Max = 18, Min = 2':goto new.user print \d4$\\"Correct? ([Y]/N): ";:gosub get.key if i$="N" print "No":goto logon print "Yes" get.from print \"Calling from (City)" input @1 "]->"i$:gosub lower.case:a$=ab$ if len(d4$+a$)>22 print \"Too long; max="22-len(d4$);:goto get.from fill ram,34,0 state print \"State (XX)" input @1 "]->"d3$:if len(d3$)<>2 goto state d3$=a$+", "+d3$ if bo goto sex if gu goto video print \"What is your age?" input @1 "]->"x:if (x<4) or (x>90) goto no.losers byte(5)=x sex nibble(1)=0 print \"Are you male or female? [M/F]" input @0 "]->"i$:if i$="M" nibble(1)=1 if i$="F" nibble(1)=2:if (byte(5)<35) and (byte(5)>15) bo=2 if i$="F" print \"-=> Don't forget to call back and type DYM! <=-" if nibble(1)=0 goto sex get.phone print \"Phone number [xxx/xxx-xxxx]" input @1 "]->"i$:if len(i$)<>12 goto get.phone a$=left$(i$,3)+"-"+mid$(i$,5,3)+"-"+right$(i$,4) if bo=2 ph$=a$:goto video if a$="206/838-7686" or val(left$(a$,3))=0 goto no.losers if (a$="123-456-7890") or (a$="206-838-7686") goto no.losers ph$=a$ video print \"Video width? ["width(1),width(2),width(3),width(4)"]" input @1 "]->"i$:ww=val(i$):for gf=1 to 4 if ww=width(gf) nibble(0)=nibble(0)/4*4+(gf-1):edit(3)=ww-1 next:if edit(3)+1"i$:ww=0:if i$="6" ww=1 if i$="3" ww=2 if not ww goto backspace nibble(0)=(nibble(0) mod 4)+(ww*4) edit(4)=ww print sc$"New user - "date$" "time$ print \" Name: "d4$ print " From: "d3$ print "Phone: "ph$ if (bo<1) and (gu<1) print " Age: "byte(5) if gu<1 print " Sex: ";:if nibble(1)=1 print "Male":else print "Female" print \"Is this all correct? ([Y]/N): ";:gosub get.key if i$<>"N" print "Yes"\:goto get.guest print "No"\:goto logon get.guest if gu<1 goto get.pass x=0:pa$="GUEST":flag(0)=1 lc$="UNKNOWN":goto login get.pass flag(0)=0:on nocar goto start f$="b:new.user.info":if nibble(1)=2 f$=f$+"2" copy f$:clear key:print "Do you wish to apply? ([Y]/N): "; i$="Y":if bo<1 gosub get.key if i$<>"N" print "Yes":else print 'No Oh well.. Later':goto start print \"Scanning record #[000]"; open #1,"b:users" a=nu:z=0:a$=d1$+","+d2$ add.user print chr$(8,4); i$=right$("00"+str$(a),3) print i$"]"; position #1,64,a input #1,i$ if a$=i$ close:print " -- Name being used!":goto logon if i$="" z=a a=a-1:if a goto add.user print " -- No match" a=z:if not z nu=nu+1:a=nu close:when$=date$ if bo=2 print \"Please leave your message in feedback.":goto auto if bo goto auto print\"Enter message: "edit(3)" col / .s = save / .h = help / done = editor" edit(0):edit(1):if (edit(2)<80) and (nibble(1)=1) goto no.losers print \"Characters typed: "edit(2)" - "; x=edit(2):if x<100 x$="Deletion guaranteed" if (x<200) and (x>99) x$="Pretty damn lame" if (x<300) and (x>199) x$="Very minimal chance" if (x<400) and (x>299) x$="Minimal chance" if (x<500) and (x>399) x$="Validation possible" if (x<600) and (x>499) x$="Fair chance" if (x<700) and (x>599) x$="Decent chance" if (x<800) and (x>699) x$="Good chance" if (x<900) and (x>799) x$="Very good chance" if x>899 x$="Validation likely" print x$ auto if not info(0) input \"Continue (Y/N)? "x$:print:if x$<>"Y" goto start print \"Want a [R]andom p/w or your [O]wn? ";:gosub get.key if i$="R" print "Random":else goto auto.own a$="":for x=1 to 4:a$=a$+rnd$:next goto pw auto.own print "Own":input @1 \"Enter password: "a$ if len(a$)>8 print \"Too long, max=8 characters":goto auto if len(a$)<4 print \"Too short, min=4 characters":goto auto pw pa$=left$(a$+" ",8) print \"Your ID #["a"]" print "Password:["left$(pa$,len(a$))"]" print \"Write them down while I save this stuff." kill "f:r."+str$(a):kill "f:b."+str$(a):kill "f:u."+str$(a) ready "e:mail":kill #msg(a):msg(a)=0:update ready "e:gmail":kill #msg(a):msg(a)=0:update open #1,"b:users" position #1,64,a print #1,d1$,d2$\d3$ position #1,64,a,30 write #1,ram,34 close:open #1,"k:pae.points" position #1,12,a:print #1,0,0,0:close if bo<1 goto normal edit(0):ready "e:mail":print #msg(1),a print #6,' -%> A System Letter <%- Letter From -%>Logon Segment Date Mailed -%>'date$' 'time$\ if bo=1 print #6,d4$" (#"a") has logged on using the secret password." if bo=2 print #6,"A "byte(5)" year old female, "d4$" (#"a") has been given access." copy #8,#6:print #msg(1),chr$(4);chr$(0);:msg(1)=msg(1)+1:update goto auto2 normal f$="h:nu.data":open #1,f$ input #1,x,z z=z+1:if z>999 z=1 close:kill f$:create f$:open #1,f$ print #1,x,z:close f$="h:nu"+str$(z)+".user":create f$ open #1,f$:print #1,a:close f$="h:nu"+str$(z)+".1":create f$ if nibble(1)=1 i$="Male":else i$="Female" open #1,f$:print #1,'2 Name -%>'d4$' Date -%>'date$' 'time$' Baud -%>'ba$' Fone -%>'ph$' Age -%>'byte(5)' Sex -%>'i$' From -%>'d3$' Stat -%>'x$\ copy #8,#1:print #1,\'[1) Yes, validate him. [2) No, waste him.':close kill "h:nu"+str$(z):un=a:gosub user.create auto2 print \""; input @3 i$ x=a:i$=pa$:goto logon2 ; *** Sub - Routines *** no.losers print \chr$(7)"NO LOSERS TOLERATED!" lose1 kill "l:no.losers":create "l:no.losers" open #1,"l:no.losers":print #1,time$,ba$:close:goto start user.create create "f:u."+str$(un):open #1,"f:u."+str$(un) for x=0 to rn:position #1,5,x:print #1,0 next:position #1,5,5:print #1,byte(5) position #1,5,4:print #1,8:close return ; *** Main Logon Routine *** login if lc$<>date$ nibble(2)=0:flag(36)=0 lr=byte(3)+byte(4)*256 un=x:nb=lr:a1$=d1$:a2$=d2$:a3$=d3$ if d2$<>"." a4$=d1$+" "+d2$:else a4$=d1$ flag(10)=(bo=2):info(5)=flag(34):if (not info(5)) or (not info(0)) goto login2 print \"Remote password":echo="X":input "]->"i$ echo="":if i$<>sv$ info(5)=0:print \"Incorrect!" login2 if (a4$=lu$) and (not flag(8)) and (peek(-16287)<128) and info(0) print \"%> Sorry, you can't call twice in a row!":goto lose1 if a4$<>"NAME ERROR" goto j6 login3 print \"Enter your name (Handles Suggested)":input @1"]->"i$ gosub lower.case:i$=ab$:gf=instr(" ",i$):a1$=i$:a2$="." if gf a1$=left$(i$,gf-1):a2$=mid$(i$,gf+1):a4$=a1$+" "+a2$ if gf<1 a4$=a1$ if (len(d1$+" "+d2$)<2) or (len(d1$+" "+d2$)>18) print ' Invalid amount of characters. Max = 18, Min = 2':goto login3 j6 if a3$<>"CITY, ST" goto j2 print \"Calling from (City)":input @1 "]->"i$:gosub lower.case:i$=ab$ if len(a1$+a2$+i$)>22 print \"Input too long, try again.":goto j6 j1 z=99:a3$=i$:print \"State (XX)":input @1 "]->"i$:if len(i$)<>2 goto j1 if z=99 a3$=a3$+", "+i$ j2 if len(ph$)<>12 ph$="???-???-????" if ph$<>"XXX-XXX-XXXX" goto j3 print \"Phone number? [xxx/xxx-xxxx]":input "]->"i$:if len(i$)=12 ph$=i$ if ph$="XXX-XXX-XXXX" goto j2 j3 if (flag(0)) or (byte(0)=0) goto hello if left$(lc$,5)<"02/22" goto j3a open #1,"f:u."+str$(un):position #1,5,5:input #1,x:close byte(5)=x:if (byte(5)>3) and (byte(5)<91) goto j4 j3a print \"What is your age?":input "]->"x if (x>3) and (x<90) byte(5)=x:else goto j3 j4 if (nibble(1)=1) or (nibble(1)=2) goto hello print \"Are you male or female? [M/F]":input @0 "]->"i$ if i$="M" nibble(1)=1 if i$="F" nibble(1)=2 goto j4 hello print sc$\"Hello, "a4$"!" print "You were last on "lc$", and are caller #"cn$"." print "You are caller #"ct" today. The system has been waiting" if b1 print o$;b1;n$" hour";:if b1<>1 print "s"; if b1 print ", "; if b2 print o$;b2;n$" minute";:if b2<>1 print "s"; if b2 print ", "; if b3 print o$;b3;n$" second ";:if b3<>1 print chr$(8)"s "; print "before this call at "time$"." print chr$(5); for a=1 to 200:b=key(0):if not b next if ((b=29) or (info(0)=0)) and (byte(0)<>0) flag(32)=1:goto pt.spec if flag(32)=0 goto pt.spec2 print \"Enable Proterm Special? ";:gosub get.key if i$<>"Y" print "No":flag(32)=0:goto pt.spec2 print "Yes" pt.spec if info(0)=0 goto pt.spec2 x=random(255):i$=chr$(x):x=0:if pdl(0)=0 x=4 print #x,t$;i$;i$"~";:for a=1 to 1500:next pt.spec2 if info(0)=0 goto j7 f$=right$(" "+str$(un),4):clear #9 print #9,c1;c2,a4$" of "a3$,nibble(2) print #9,byte(0),nibble(3),byte(2) print #9,byte(1),ph$,lc$,f$,pa$ for x=1 to 34:print #9,flag(x);:next print ^ j7 kill "l:robbed":kill "l:no.losers" if flag(32) p$=chr$(16):o$=chr$(15):n$=chr$(14) if flag(32) print p$"U"n$" ProTERM Special is active." if lr"Y" print "No" j8 print \"Last five callers:" f$="b:last":open #1,f$:input #1,d1$\d2$\d3$\d4$\d5$:close if not d1$ print "[No data]":goto j9 setint(1):print chr$(95,70) print "Call_#_|_User's_Name______|_Sub-Name___________|Baud|Logon_Time_|MM:SS" print d1$\d2$\d3$\d4$\d5$ if flag(32) print p$;chr$(76,70);n$ setint(""):if key(1) print "%> Aborted <%" j9 open #1,"b:data3":position #1,80,2:input #1,z\i$:close print \"The top poster is: "i$:print chr$(160,19)"With "z" posts." open #1,"f:u."+str$(un):position #1,5,17:input #1,bb:close if bb open #1,"b:names":position #1,21,bb:input #1,nb$:close if nb$ goto sname if flag(0) nb$="Guest User" if flag(1)=0 nb$="Unvalidated" if info(5) nb$="System Operator" sname d5$=right$(" "+cn$,7)+"|" d5$=d5$+left$(a4$+chr$(32,18),18)+"|" d5$=d5$+left$(nb$+chr$(32,20),20)+"|" if info(2)=1 d5$=d5$+" 300|":else if info(0) d5$=d5$+left$(ba$,4)+"|" if not info(0) d5$=d5$+"locl|" d5$=d5$+time$+"|Incom" if mid$(d5$,7,45)=mid$(d1$,7,45) create "l:last.data":goto same.call if (not info(5)) or info(0) goto upd5 print \"Update last five callers? ";:gosub get.key if i$<>"Y" print "No":goto same.call print "Yes" upd5 kill "b:last":create "b:last" open #1,"b:last":print #1,d5$\d1$\d2$\d3$\d4$:close same.call print:if flag(0) tm=10:goto no.extra open #1,"f:u."+str$(un) position #1,5,2:input #1,a:position #1,5,12:input #1,x tm=x:if (flag(1)) and (tm<1) tm=30 if flag(4) tm=60 if tm>90 tm=90 position #1,5,12:print #1,tm:close if a<1 a=15:if flag(2)=0 print "You are in need of time credits." if a>tm a=tm tm=a:if flag(1)=0 tm=15 if right$(time$,2)="PM" goto no.extra a=val(left$(time$,2)):if a>5 goto no.extra tm=90:print "Added time on-line for early morning calls." no.extra if nb$ print "Your sub-name is ["nb$"]." if nb$="" print "You have no assigned sub-name." if flag(2)=0 print 'You have a total of 'tm' minutes on-line this call out of a possible total of 'x' minutes.' if flag(2) print "You have unlimited time on-line this call." ready "d:b1":if mnmn lr=mn:print "Due to a system bug, your new message pointer has been reset." i$=str$(mn):gosub comma print "There are "tb" sub-boards containing a total of "i$" messages," print "with "o$;mn-lr;n$" new messages." if flag(0) goto begin open #1,"f:u."+str$(un):if not mark(1) close:goto j5 close:print "Creating user account..."; gosub user.create:print "done." j5 f$="f:r."+str$(un):open #1,f$:if not mark(1) close:goto jump5 print "Creating ratings account..."; close:create f$:open #1,f$:for a=1 to nu:position #1,2,a print #1,"4":next:close:print "done." jump5 f$="f:b."+str$(un):open #1,f$:if not mark(1) close:goto jump6 print "Creating g-scan config..."; close:create f$:open #1,f$:for a=1 to tb:position #1,2,a print #1,"Y":next:close:print "done." jump6 f$="f:u."+str$(un) open #1,f$:position #1,5,14:input #1,bo:close begin bb=1:ready "d:b1" if not info(0) nibble(0)=4 clock(2)=tm*60:edit(4)=nibble(0)/4 edit(3)=width((nibble(0) mod 4)+1)-1 if flag(2) clock(2)=0 ch=1:if info(5) or (info(0)=0) edit(3)=79 flag(35)=info(5):link "a:mid.seg" ; *** Sub - Routines *** rd.user open #1,"b:users" position #1,64,x input #1,d1$,d2$\d3$ position #1,64,x,30 read #1,ram,34 lc$=mid$(" "+when$,2) close #1 return show.file setint(1):copy f$:setint(""):return comma if len(i$)<4 return if len(i$)<5 gf=1:else gf=2 i$=left$(i$,gf)+","+right$(i$,3):return lower.case if len(i$)=1 ab$=i$:return ab$=left$(i$,1):for wy=2 to len(i$):wx=asc(mid$(i$,wy,1)) if wx=32 ab$=ab$+" "+mid$(i$,wy+1,1):wy=wy+1:next:return if (wx<65) or (wx>96) ab$=ab$+chr$(wx):next:return ab$=ab$+chr$(wx+32):next:return get.key ww=0:wx=0 get.key1 gf=clock(2) if (gf<>0) and (clock(1)>gf) print \\"[ Time Limit Exceeded ]":pop:goto start gf=peek(-16384):if (gf=129) or (gf=150) get i$:print chr$(8);:return gf=key(0):if (gf>96) and (gf<123) gf=gf-32 if (gf>31) or (gf=13) i$=chr$(gf):return ww=ww+1:if flag(33)=0 goto get.key2 wx=wx+1:if wx>16 wx=1 print mid$("!/-\!/-\!\-/!\-/",wx,1);chr$(8); get.key2 if ww=2000 print chr$(7,2); if ww=4000 pop:goto start if (not info(0)) and (not info(5)) and (eu<>1) pop:goto start goto get.key1