12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961 |
- <USE "ASYLUM" "MADMAN" "INFERIOR" "MUDTEC">
- <SETG FROBS
- '![<ASK.QUESTIONS> ;"Answer"
- <BABBLE-SORT> ;"Babble, slowly"
- <RUNJOB "SYS2;TS BABBLE" "BABBLE" T> ;"Babble, quickly"
- <GRADE.STUFF> ;"Grade"
- <MAKE.QUESTIONS> ;"Make questions"
- <RUNJOB "SYS2;TS TVPEEK" "TVPEEK" <>> ;"Peek"
- <PSCORES> ;"Printing scores"
- <QUIT> ;"Leave"
- <READ.MAIL> ;"Read mail"
- <PRINT.QSCORE> ;"Status of questions"
- <PRINT.QSCORE <>> ;"Summary status of questions"
- <BABBLE-SORT T> ;"Tiny babble"
- <RUNJOB "SYS2;TS TWHOIS" "TWHOIS" T> ;"Twhois"!]>
- <SETG FROB-NAMES
- '["
- Answering Questions.
- "
- "
- Babbling
- "
- "
- DDT.babbling
- "
- "
- Grading/Reading Answers.
- "
- "
- Making questions
- "
- "
- Peeking
- "
- "
- Printing score
- "
- "
- Quitting
- "
- "
- Reading mail.
- "
- "
- Status of questions
- "
- "
- Summary status of questions
- "
- "
- Tiny babbling
- "
- "
- Twhois
- "]>
- <SETG TECO <>>
- <OR <GASSIGNED? TUV> <SETG TUV <IUVECTOR 4 0>>>
- <SETG TTUV <IUVECTOR 1 0>>
- <SETG NTTUV <IUVECTOR 1 0>>
- <SETG TBUV <IUVECTOR 4 0>>
- <SETG FOOUV <IUVECTOR 4 0>>
- <SETG CTRLG-KILL <>>
- <GDECL (TUV TBUV FOOUV)
- <UVECTOR [4 FIX]>
- (TTUV NTTUV)
- <UVECTOR FIX>
- (CTRLG-KILL)
- <OR ATOM FALSE>>
- <SETG STATUS-VECTOR
- '[0
- "Grading"
- 1
- "Answer "
- 2
- "Babbling"
- 3
- "Reading mail"
- 4
- "Making "
- 5
- "Peek"
- 6
- "Start up"
- 7
- "Printing score"
- 8
- "Command"
- 9
- "Updating"
- 10
- "Status"
- 11
- "FLUSH"
- 12
- "ERROR"
- 13
- "SHOUT"]>
- <DEFINE DFUMP ("OPTIONAL" (FNAM "MADMAN;TV FOO"))
- #DECL ((FNAM) STRING)
- <DBG>
- <CHAR-INIT>
- <FUMP -1 ,TIME -1 .FNAM>>
- <SETG PLAYER-CT 0>
- <GDECL (PG PLAYER-CT) FIX (LASTMAIL) WORD>
- <DEFINE FUMP (VERSION
- "OPTIONAL" (SAVER ,TIME) (MODIF 0) (FNAM "MADMAN;TV FILE")
- "AUX" M PG PLAYERS TEMP PLAYER)
- #DECL ((VERSION MODIF) FIX (M) <OR FALSE LIST> (SAVER) APPLICABLE
- (PLAYERS) STRUCTURED (PG TEMP) FIX (FNAM) STRING (PLAYER) TIME
- (IMLAC) <SPECIAL <OR ATOM FALSE>>)
- <SETG ASPACE <AFIND 1>>
- <SETG SSPACE <AFIND 1>>
- <SETG QSPACE <AFIND 1>>
- <SETG TVSPACE ,ASPACE>
- <SETG LOSSSPACE <AFIND 2>>
- <PAGE-GIVE <PAGE-FIND 15> 15>
- <COND
- (<=? <APPLY .SAVER "MADMAN;TRV SAVFIL"> "SAVED">)
- (<AND <DINIT> <>>)
- (<AND <=? <JNAME> "DEBUG"> <MEMQ <CHTYPE <XUNAME> TIME> ,WINNERS>>
- <SETG TVASS <OPEN-DATA-FILE .FNAM <> 7 5>>
- "LOSING")
- (<SETG TVASS <OPEN-DATA-FILE .FNAM <> 7 5>>
- <UNWIND <PROG ()
- <OR <MEMQ <SETG PLAYER <SET PLAYER <CHTYPE <XUNAME> TIME>>>
- ,WINNERS>
- <SETG CTRLG-KILL T>>
- <PRINC "
- TRIVIA.">
- <PRIN1 .VERSION>
- <COND (<0? .MODIF>) (<PRINC "."> <PRIN1 .MODIF>)>
- <CRLF>
- <IPC-OFF>
- <IPC-ON <SETG SPLAYER <MYSIXTOS .PLAYER>> "TRIVIA">
- <COMREP>
- <INIT> ;"SET UP TTY'S"
- <SET IMLAC?!-CALRDR!-PACKAGE .IMLAC?>
- <GET-SPACE ,ASPACE>
- <GET-SPACE ,SSPACE>
- <GET-SPACE ,QSPACE>
- <GET-SPACE ,LOSSSPACE>
- <NEW-LOSS>
- <RESET ,INCHAN>
- <COND (<SET M <MEMQ .PLAYER ,LOSSTABLE>>
- <SETG LUBLK <3 .M>>
- <SETG TINDEX <4 .M>>
- <OR <PASS-CHECK <2 .M>> <QUIT>>
- <PRINC "
- Last played ">
- <PDSKDATE <DATA-READW ,TVASS <+ ,LUBLK ,LASTIN>>>)
- (<SETG LUBLK <NEW-USER .PLAYER>>)>
- <AND <SET PG <DIRMAP ,TVASS ,PEEK-PAGE>>
- <DIR-INIT .PG>
- <PUT <MEMQ .PG <5 ,TVASS>> 3 1>
- <SET TEMP
- <+ ,PEEK-START
- <SETG PG <* .PG 1024>>
- <SETG TINDEX <* ,TINDEX 4>>>>
- <COND (<DHLOCK .TEMP>)
- (T <VALRET ":KILL
- :ALREADY PLAYING
- ">)>>
- <UPDATE-BABBLE ,LUBLK ,TINDEX>
- <PUT ,TUV 2 <CHTYPE .PLAYER FIX>>
- <PUT ,TUV 3 <CHTYPE <DSKDATE> FIX>>
- <SET-STATUS ,$SWAKE>
- <DATA-PRINTW ,TVASS
- <+ ,LUBLK ,LASTIN>
- <SETG DATA-READ-WORD
- <SETG DATA-WRITE-WORD <DSKDATE>>>>
- <SETG DATA-AUTHOR-WORD <SQUOZE ,PLAYER>>
- <SETG LASTMAIL
- <CHTYPE <1 <GET-LOC <+ ,PG 1 ,TELEC-START ,TINDEX>
- ,TTUV>>
- WORD>>
- <SETG CTRLG-KILL <>>
- <READ.ANNOUNCE>
- <PLAY-BALL>>
- <AND ,CTRLG-KILL <QUIT>>>)
- (<PRINC "
- TRIVIA DATA BASE MISSING?
- "> <QUIT>)>>
- <DEFINE UPDATE-BABBLE (LUBLK TINDEX
- "AUX" SCORE (TBUV ,TBUV) (PG ,PG) LOC (TTUV ,TTUV))
- #DECL ((LOC LUBLK TINDEX PG) FIX (TBUV) <UVECTOR [3 FIX]>
- (SCORE) <OR FALSE <UVECTOR [REST UVECTOR]>> (TTUV) <UVECTOR FIX>)
- <PUT-LOC <+ .PG ,TELEC-START .TINDEX 2> <PUT .TTUV 1 0>>
- <SET LOC <+ .PG ,BABBLE-START .TINDEX>>
- <UNWIND <PROG ((TOTAL 0.000) (POSS 0.000))
- #DECL ((TOTAL POSS) FLOAT)
- <COND (<DHLOCK .LOC>
- <SET SCORE
- <DATA-AREAD ,TVASS
- <+ .LUBLK ,SCORE>
- <ARESET ,SSPACE T <>>>>
- <GET-LOC .LOC .TBUV>
- <PUT .TBUV 2 <GETLASTQ .LUBLK>>
- <MAPF <>
- <FUNCTION (X)
- <SET TOTAL <+ .TOTAL <1 .X>>>
- <SET POSS <+ .POSS <2 .X>>>>
- .SCORE>
- <PUT .TBUV 3 <CHTYPE .TOTAL FIX>>
- <PUT .TBUV 4 <CHTYPE .POSS FIX>>
- <PUT-LOC .LOC .TBUV>
- <DUNLOCK .LOC>)
- (<SLEEP 1> <AGAIN>)>>
- <DUNLOCK .LOC>>>
- <SETG VERBOSE <>>
- <DEFINE DO-TELECON ("AUX" FX)
- #DECL ((FX) <OR FALSE FIX>)
- <COND (<SET FX
- <READER '[] "at intervals of " '["" ""] '["FIX"] ,VERBOSE>>
- <TELECON .FX>)>>
- <SETG TELEC-INTERVAL 0>
- <GDECL (TELEC-INTERVAL) FIX>
- <DEFINE TELECON (AMT)
- #DECL ((AMT) FIX)
- <SETG TELEC-INTERVAL .AMT>
- <COND (<GASSIGNED? RTIMINT>)
- (<SETG RTIMINT <ON "REALT" ,CHECK.MAIL 1>>)>
- <PUT-LOC <+ ,PG ,TELEC-START ,TINDEX 2>
- <PUT ,TTUV 1 *400000000000*>>
- <REALTIMER .AMT>>
- <DEFINE OFFTELECON ()
- <COND (<GASSIGNED? RTIMINT>
- <SETG TELEC-INTERVAL 0>
- <OFF ,RTIMINT>
- <PUT-LOC <+ ,PG ,TELEC-START ,TINDEX 2> <PUT ,TTUV 1 0>>
- <GUNASSIGN RTIMINT>)>>
- <DEFINE CHECK.MAIL ("AUX" LST (UV ,TTUV) (TINDEX ,TINDEX))
- #DECL ((LST) WORD (UV) <UVECTOR FIX> (TINDEX) FIX)
- <COND (<==? <CHTYPE <GETBITS <1 <GET-LOC <+ ,PG ,PEEK-START .TINDEX 3>
- .UV>>
- <BITS 18 18>>
- FIX>
- ,$SREAD>)
- (<==? <SET LST
- <CHTYPE <1 <GET-LOC <+ ,TELEC-START ,PG .TINDEX 1>
- .UV>>
- WORD>>
- ,LASTMAIL>)
- (<SETG LASTMAIL .LST>
- <SETG EXISTS T>
- <PRINC "
- --MESSAGE HERE--
- ">)>
- <INT-LEVEL 0>
- <DISMISS T>>
- <SETG PNEWMAIL <>>
- <SETG EXISTS <>>
- <GDECL (PNEWMAIL EXISTS) <OR ATOM FALSE>>
- <SETG WINNERS
- (<CHTYPE #WORD *554162430000* TIME>
- <CHTYPE #WORD *644141000000* TIME>
- <CHTYPE #WORD *525542000000* TIME>
- <CHTYPE #WORD *435462000000* TIME>
- <CHTYPE #WORD *604454000000* TIME>)>
- "MARC, TAA, JMB, CLR, PDL"
- <DEFINE PASS-CHECK (PW "AUX" PS I)
- #DECL ((PS PW) STRING (I) HANDLER)
- <SET I
- <ON "CHAR"
- <FUNCTION (R N)
- #DECL ((R) CHARACTER (N) CHANNEL)
- <COND (<==? .R <ASCII 19>>
- <OR <MEMQ ,PLAYER ,WINNERS> <QUIT>>)>>
- 8
- 0
- ,INCHAN>>
- <REPEAT ((N 3))
- <RESET .INCHAN>
- <TTYECHO .INCHAN <>>
- <PRINC "
- Password: ">
- <READSTRING <SET PS <ISTRING 10>> .INCHAN ,PWTERM>
- <UPPERCASE .PS>
- <TTYECHO .INCHAN T>
- <COND (<=? .PS .PW> <OFF .I> <RETURN T>)
- (<SET N <- .N 1>> <AND <L? .N 0> <OFF .I> <RETURN <>>>)>>>
- <DEFINE NEW-USER (XUNM "AUX" PS VEC (TVA ,TVASS) (LSP ,LOSSSPACE) (SSP ,SSPACE))
- #DECL ((PS) STRING (XUNM) TIME (VEC) <UVECTOR [REST UVECTOR]> (TVA) ASYLUM
- (LSP SSP) SPACE)
- <PROG ()
- <SET PS <ISTRING 10>>
- <PRINC "
- Your TRIVIA password: ">
- <RESET .INCHAN>
- <TTYECHO .INCHAN <>>
- <READSTRING .PS .INCHAN ,PWTERM>
- <UPPERCASE .PS>
- <COND (<MEMQ <1 .PS> "
î">
- <PRINC "
- Illegal password.">
- <AGAIN>)>
- <TTYECHO .INCHAN T>
- <PRINC "
- Please confirm your chosen password,">
- <OR <PASS-CHECK .PS> <AGAIN>>
- <UNWIND
- <PRINT-HELP T>
- <QUIT>>
- <PROG (L)
- #DECL ((L) <OR FALSE FIX>)
- <COND
- (<SET L <DATA-RESERVE .TVA ,LBLEN>>
- <PROG (CRAZY P)
- #DECL ((CRAZY) <OR FALSE MANIAC> (P) LIST)
- <COND
- (<SET CRAZY <DATA-OPEN "PRINT" .TVA ,LUSERS>>
- <UNWIND
- <PROG (TINDEX)
- #DECL ((TINDEX) FIX)
- <COND (<==? <SET TINDEX
- <CHTYPE <DATA-READW .TVA ,HIPOFFSET> FIX>>
- 83>
- <PERR "Can't make NEW-USER--no slots available">)
- (T
- <SETG TINDEX .TINDEX>
- <DATA-PRINTW .TVA ,HIPOFFSET <+ .TINDEX 1>>
- <SETG PLAYER-CT <+ .TINDEX 1>>)>
- <SET VEC <AIUVECTOR <ARESET .SSP T <>> ,NCAT <AUVECTOR .SSP>>>
- <MAPR <>
- <FUNCTION (X) <PUT .X 1 <AUVECTOR .SSP 0.000 0.000>>>
- .VEC>
- <DATA-APRINT .TVA <+ .L ,SCORE> .SSP .VEC>
- <DATA-APRINT .TVA
- <+ .L ,QASKED>
- .SSP
- <AIVECTOR <ARESET .SSP T <>> ,NCAT <ALIST .SSP>>>
- <ARESET .LSP T <>>
- <SET P <DATA-AREAD .TVA ,LUSERS .LSP>>
- <SET P <ACONS .LSP .TINDEX .P>>
- <SET P <ACONS .LSP .L .P>>
- <SET P <ACONS .LSP <ACOPY .LSP .PS> .P>>
- <SET P <ACONS .LSP .XUNM .P>>
- <SETG LOSSTABLE .P>
- <OR <DATA-IPRINT .TVA .CRAZY .LSP .P>
- <PERR "Can't print NEW-USER">>
- <DATA-CLOSE .TVA .CRAZY>>
- <DATA-CLOSE .TVA .CRAZY>>
- <DATA-PRINTW .TVA <+ .L ,QNEXT> ,LOWQUES>
- <DATA-PRINTW .TVA <+ .L ,ALAST> <+ .L ,ANEXT>>
- <DATA-PRINTW .TVA <+ .L ,MLAST> <+ .L ,MNEXT>>
- <DATA-PRINTW .TVA <+ .L ,ANNEXT> ,LOMAIL>
- .L)
- (<AGAIN>)>>)
- (<AGAIN>)>>>>
- <DEFINE PRINT-HELP ("OPTIONAL" (NEW-PLAYER? <>))
- #DECL ((NEW-PLAYER?) <OR ATOM FALSE>)
- <COND (.NEW-PLAYER?
- <CRLF>
- <PRINC ,NEWMSG>)>
- <COND (<RUNJOB "SYS1;TS PR" "TVDOC" <COND (.NEW-PLAYER? "HELP")
- (T)>>)>>
- <SETG LOSEMSG
- "
- Full documentation can be found in MADMAN;TVDOC > and MADMAN;TVUPD >.">
- <SETG NEWMSG
-
- "
- The following information has been found more or less essential to new
- TRIVIA users. Please read it.">
- <DEFINE COMMAND ("AUX" RD)
- #DECL ((RD) <OR FALSE SYMBOL>)
- <REPEAT ()
- <AND ,PNEWMAIL ,EXISTS <READ.MAIL>>
- <AND ,FLUSH <FLUSH-EM>>
- <SET-STATUS ,$SCOM>
- <COND (<SET RD <READER ,MCOMS "
- @" '["" ""] '["SYM"] <>>>
- <EVAL <2 .RD>>)>>>
- <SETG COMS
- <MAKEBST "COMMANDS"
- '["Announce"
- <ANNOUNCE>
- "Answer"
- <ASK.QUESTIONS>
- "Auto.read"
- <COND (<SETG PNEWMAIL <NOT ,PNEWMAIL>>
- <PRINC "
- Automatic reading">)
- (T <PRINC "
- Manual reading">)>
- "Babble"
- <BABBLE-SORT>
- "DDT.babble"
- <RUNJOB "SYS2;TS BABBLE" "BABBLE" T>
- "End.teleconference"
- <OFFTELECON>
- "Grade"
- <GRADE.STUFF>
- "Help"
- <PRINT-HELP>
- "Intest"
- <PROG ()
- <READ.ANNOUNCE>
- <PLAY-BALL>>
- "Kill.teco"
- <TECO-KILL>
- "Load.scores"
- <MOBY-VEC>
- "Make"
- <MAKE.QUESTIONS>
- "No.simple"
- <COND (<SETG IGNORE-SIMPLE <NOT ,IGNORE-SIMPLE>>
- <PRINC "
- Ignore simple questions">)
- (<PRINC "
- Read simple questions">)>
- "Peek"
- <RUNJOB "SYS2;TS TVPEEK" "TVPEEK" <>>
- "Print.score"
- <PSCORES>
- "Question.print"
- <PRINT.QSCORE T T>
- "Quit"
- <QUIT>
- "Read.mail"
- <READ.MAIL>
- "Rpeek"
- <RUNJOB "SYS2;TS TVPEEK" "TVPEEK" "R">
- "Safety"
- <COND (<SETG BUFSAFE <NOT ,BUFSAFE>> <PRINC "
- Safe">)
- (<PRINC "
- Sorry">)>
- "Save.tailor"
- <SAVE-TAILOR>
- "Send.mail"
- <SEND.MAIL>
- "Sequence"
- <GET-SEQUENCE>
- "Shout"
- <SHOUT>
- "Simple.load"
- <LOAD.SIMPLE>
- "Simple.print"
- <PRINT.SIMPLE>
- "Simple.update"
- <UPDATE.QUESTION <>>
- "Status.of.question"
- <PRINT.QSCORE>
- "Summary.status.of.question"
- <PRINT.QSCORE <>>
- "Teleconference"
- <DO-TELECON>
- "Tiny.babble"
- <BABBLE-SORT T>
- "Tvbug"
- <RUNJOB "SYS2;TS TVBUG" "TVBUG" <>>
- "Tvtodo"
- <RUNJOB "SYS2;TS TVTODO" "TVTODO" T>
- "Twhois"
- <RUNJOB "SYS2;TS TWHOIS" "TWHOIS" T>
- "Update.question"
- <UPDATE.QUESTION>
- "Verbosity"
- <COND (<SETG VERBOSE <NOT ,VERBOSE>> <PRINC "
- Verbose">)
- (<PRINC "
- Unverbose">)>
- "Which.teco"
- <GET-TECO>]>>
- <SETG BUFSAFE <>>
- <SETG DCOMS <MAKESST "DCOM" []>>
- <SETG MCOMS <MAKEMST "MCOM" [,COMS ,DCOMS]>>
- <SETG DCOM
- '["Recurse"
- <RECURSE>
- "Play"
- <PLAY>
- "Erret"
- <DO-ERRET>
- "Evaluate"
- <DO-EVAL>]>
- <SETG DP " with JCL of ">
- <GDECL (DP) STRING>
- <DEFINE RUNJOB (FILE JNAME JCL? "AUX" (JCL <>) (JOB <>))
- #DECL ((FILE JNAME) STRING (JCL?) <OR STRING ATOM FALSE> (JCL) <OR FALSE STRING>
- (JOB) <OR FALSE INF>)
- <COND (.JCL?
- <COND (<TYPE? .JCL? STRING>
- <SET JCL .JCL?>)
- (T
- <SET JCL <READER [] ,DP "" ["LINE"] ,VERBOSE>>)>)>
- <CRLF>
- <UNWIND
- <COND (<SET JOB <INF-LOAD .FILE .JNAME .JCL>>
- <INF-START .JOB>
- <OR <NOT <2 .JOB>>
- <INF-KILL .JOB>>)
- (T
- <CRLF>
- <PRIN1 .JOB>)>
- <AND .JOB <2 .JOB> <INF-KILL .JOB>>>>
- <DEFINE DO-ERRET () <ERRET <READER '[] "" "" '["ANY"] <>>>>
- <DEFINE DO-EVAL () <AND <MEMQ <CHTYPE <XUNAME> TIME> ,WINNERS>
- <EVAL <READER '[] "" "" '["ANY"] <>>>>>
- <SETG DEBUGSW <>>
- <DEFINE DBG () <PUT ,DCOMS 2 ,DCOM> <SETG DEBUGSW T>>
- <SETG FLUSH <>>
- <SETG QTYPES
- <MAKEBST "QT"
- '["Command"
- 1
- "Joint"
- 8
- "Long Answer"
- 2
- "Matching"
- 3
- "Multiple Choice"
- 4
- "None"
- 0
- "Quit"
- 6
- "Ranking"
- 9
- "Simple"
- 7
- "True/False"
- 5]>>
- <SETG CATS
- <MAKEBST "CAT"
- '["Athletics"
- 1
- "Cinema"
- 2
- "Events"
- 3
- "General"
- 4
- "History"
- 5
- "Literature"
- 6
- "Music"
- 7
- "Science Fiction"
- 8
- "TV/Radio"
- 9]>>
- <DEFINE QUESTIONABLE? (STR)
- #DECL ((STR) STRING)
- <NOT <MAPF <>
- <FUNCTION (X) <COND (<G? <ASCII .X> 32> <MAPLEAVE T>)>>
- .STR>>>
- <DEFINE TP (QUESTION) ;"Hack to get Q's to print evenly"
- #DECL ((QUESTION) STRING)
- <COND (<L=? <14 .OUTCHAN> 40> <PUT .OUTCHAN 14 41>)>
- .QUESTION>
- <DEFINE UNTASTEFUL-CODE (Q "OPTIONAL" (GST <>) (LETR <>) "AUX" (IDX 0))
- #DECL ((Q) STRUCTURED (GST LETR) <OR 'T FALSE> (IDX) FIX)
- <MAPF ,VECTOR
- <FUNCTION (X)
- <SET IDX <+ .IDX 1>>
- <COND (<AND <1? .IDX> .GST>
- <MAPRET 2
- ,MATCH-HACK
- <STRING <UNPARSE .IDX>
- ". "
- .X>
- 0>)>
- <MAPRET <STRING <COND (.LETR <ASCII <+ .IDX 96>>)
- (<UNPARSE .IDX>)>
- ". "
- .X>
- <COND (.GST 0) (.IDX)>>>
- .Q>>
- <DEFINE FLUSH-EM ()
- <COND (<==? ,FLUSH SYSDOWN>
- <OUT SYSTEM\ GOING\ DOWN>)
- (<==? ,FLUSH SHOUT> <SETG FLUSH <>> <PRINT.SHOUT>)
- (<==? ,FLUSH PURGE> <OUT EXCESSIVE-SYSTEM-LOAD>)
- (<==? ,FLUSH TECO>
- <SETG FLUSH <>>
- <COND (,TECO
- <TECO-KILL>
- <PRINC "
- TECO killed to free system resources.
- ">)>)
- (T <OUT ,FLUSH>)>>
- <DEFINE OUT (WHY? "AUX" MSG)
- #DECL ((WHY?) ATOM (MSG) <VECTOR TIME STRING>)
- <SET-STATUS ,$SFLUSH>
- <OFF "CHAR" ,INCHAN>
- <IPC-OFF>
- <INT-LEVEL 999>
- <COND (<==? .WHY? T>
- <SET MSG <DATA-AREAD ,TVASS ,SHOUTMSG <ARESET ,ASPACE T <>>>>
- <CRLF>
- <PRINC "TRIVIA brought down by ">
- <PRINC <1 .MSG>>
- <CRLF>
- <PRINC <2 .MSG>>)
- (T
- <PRINC "TRIVIA brought down due to ">
- <PRINC .WHY?>)>
- <VALRET ":KILL
- :
- TRIVIA DOWN!
- ">>
- <DEFINE PRINT.SHOUT ("AUX" (MSG
- <DATA-AREAD ,TVASS ,SHOUTMSG <ARESET ,ASPACE T <>>>))
- #DECL ((MSG) <VECTOR TIME STRING>)
- <CRLF>
- <CRLF>
- <CRLF>
- <IMAGE 7>
- <IMAGE 7>
- <IMAGE 7>
- <PRINC "Message from ">
- <6PRINC <1 .MSG>>
- <CRLF>
- <PRINC <2 .MSG>>
- <CRLF>>
- <DEFINE FLUSH-TECOS ()
- <COND (<MEMQ ,PLAYER ,WINNERS>
- <SEND-TRIVIAS TECO>)>>
- <DEFINE SHOUT ("AUX" MSG ID (TVA ,TVASS) (ASP ,ASPACE))
- #DECL ((MSG) STRING (ID) <OR FALSE MANIAC> (TVA) ASYLUM (ASP) SPACE)
- <COND (<MEMQ ,PLAYER ,WINNERS>
- <SET MSG <GETBUF "Message: ">>
- <COND (<NOT <QUESTIONABLE? .MSG>>
- <COND (<SET ID <DATA-OPEN "PRINT" .TVA ,SHOUTMSG>>
- <DATA-IPRINT .TVA
- .ID
- .ASP
- <AVECTOR <ARESET .ASP T <>>
- ,PLAYER
- <ACOPY .ASP .MSG>>>
- <SEND-TRIVIAS SHOUT>
- <DATA-CLOSE .TVA .ID>)
- (<CRLF>
- <PRINC
- "The right hand knows not what the left hand does.">
- <CRLF>)>)>)>>
- <DEFINE FLUSH-ALL ("OPTIONAL" (WHY? <>) "AUX" ID CH MSG (TVA ,TVASS) (ASP ,ASPACE))
- #DECL ((WHY?) <OR ATOM FALSE> (MSG) STRING (CH) <OR CHANNEL FALSE>
- (ID) <OR MANIAC FALSE> (TVA) ASYLUM (ASP) SPACE)
- <COND (<MEMQ ,PLAYER ,WINNERS>
- <CRLF>
- <OR <SET CH <OPEN "PRINT" "_MSGS_;TRIVIA DEATH">>
- <ERROR .CH>>
- <COND (.WHY?
- <MSGOUT .WHY? .CH>
- <SEND-TRIVIAS .WHY?>)
- (T
- <SET MSG <GETBUF "Message: ">>
- <COND (<NOT <QUESTIONABLE? .MSG>>
- <COND (<SET ID <DATA-OPEN "PRINT" .TVA ,SHOUTMSG>>
- <DATA-IPRINT .TVA .ID .ASP
- <AVECTOR <ARESET .ASP T <>>
- ,PLAYER
- <ACOPY .ASP .MSG>>>
- <MSGOUT .MSG .CH>
- <SEND-TRIVIAS T>
- <DATA-CLOSE .TVA .ID>)
- (T
- <CRLF>
- <PRINC "One at a time, please!">
- <CRLF>)>)>)>)
- (<QUIT>)>>
- <DEFINE MSGOUT (MSG CH) #DECL ((MSG) <OR ATOM STRING> (CH) CHANNEL)
- <PRINC "TRIVIA brought down by " .CH>
- <PRINC ,PLAYER .CH>
- <CRLF .CH>
- <PRINC .MSG .CH>
- <CLOSE .CH>>
- <DEFINE SEND-TRIVIAS (WHAT?
- "AUX" (PG ,PG) (UV ,FOOUV) (SENDER ,PLAYER)
- (MSG <STRING "<SETG FLUSH " <UNPARSE .WHAT?> ">">))
- #DECL ((WHAT?) ANY (PG) FIX (UV) <UVECTOR [4 FIX]> (MSG) STRING (SENDER) TIME)
- <SET-STATUS ,$SHOUT>
- <REPEAT ((N 0) (LOC <+ .PG ,PEEK-START>) LOSER)
- #DECL ((N LOC) FIX (LOSER) TIME)
- <COND (<G? .N 83> <RETURN>)
- (<AND <GET-LOC .LOC .UV> <0? <1 .UV>>>
- <COND (<==? <SET LOSER <CHTYPE <2 .UV> TIME>> .SENDER>)
- (T
- <SEND <MYSIXTOS .LOSER> "TRIVIA" .MSG *400000000000*>
- <6PRINC .LOSER>
- <CRLF>)>)>
- <SET N <+ .N 1>>
- <SET LOC <+ .LOC 4>>>>
- <SETG GIVEUP <MAKESST "GIVE" ["
- Give up (CR)" <>]>>
- <SETG SYMTAB <MAKESST "SYMS" []>>
- <SETG ALLSYMS <MAKEMST "ALLSYMS" [,GIVEUP ,SYMTAB]>>
- <SETG ALWAYS-ANSWER <>>
- <SETG KEEPASKING <>>
- <SETG IGNORE-SIMPLE <>>
- <SETG T/F <MAKESST "T/F" ["Yes" T "No" <>]>>
- <DEFINE TRUE? (STR1 STR2 TRUELST FALSELST "OPTIONAL" INTCHR "AUX" CHR)
- #DECL ((STR1 STR2) STRING (INTCHR CHR) CHARACTER (TRUELST FALSELST) STRING)
- <PROG ()
- <PRINC .STR1>
- <RESET ,INCHAN>
- <PRINC " (">
- <PRINC .STR2>
- <PRINC ") ">
- <SET CHR <TYI>>
- <COND (<AND <ASSIGNED? INTCHR> <==? .CHR .INTCHR>>
- <INTERRUPT "CHAR" .INTCHR ,INCHAN>)>
- <COND (<MEMQ .CHR .TRUELST>)
- (<MEMQ .CHR .FALSELST> <>)
- (<AGAIN>)>>>
- <DEFINE SEND-PLAYER (WHO WHAT
- "OPTIONAL" (WHR ,ALAST) (MUNG-SLOT? <>) (MUNG-SLOT1? <>)
- (ASP ,ASPACE) "AUX" (TVA ,TVASS) (TTUV ,NTTUV) NUTS LAST
- LOC)
- #DECL ((WHO) TIME (WHAT) ANY (ASP) SPACE (NUTS) LIST (LOC LAST WHR) FIX
- (TVA) ASYLUM (MUNG-SLOT MUNG-SLOT1) <OR FIX FALSE>
- (TTUV) <UVECTOR FIX> (MUNG-SLOT? MUNG-SLOT1?) <OR FIX FALSE>)
- <COND (<==? ,PLAYER ,DEBUGNAME>)
- (<SET NUTS <GET-LOSER .WHO>>
- <SET LAST <+ .WHR <3 .NUTS>>>
- <COND (.MUNG-SLOT?
- <SET LOC <+ ,PG <* 4 <4 .NUTS>> .MUNG-SLOT?>>
- <UNWIND <PROG ()
- <COND (<DHLOCK .LOC>
- <GET-LOC .LOC .TTUV>
- <PUT .TTUV 1 <CHTYPE <4 .WHAT> FIX>>
- <PUT-LOC <+ .LOC 1> .TTUV>
- <DUNLOCK .LOC>)
- (<SLEEP 2> <AGAIN>)>>
- <DUNLOCK .LOC>>)
- (.MUNG-SLOT1?
- <SET LOC <+ 3 ,PG <* 4 <4 .NUTS>> .MUNG-SLOT1?>>
- <GET-LOC .LOC .TTUV>
- <PUT .TTUV 1 <+ <1 .TTUV> 1>>
- <PUT-LOC .LOC .TTUV>)>
- <COND (<CHAIN-APPEND .TVA .ASP .WHAT .LAST>
- <CRLF>
- <PRINC "Sent.">)
- (<PERR "SEND-PLAYER FAILURE -- PLEASE REPORT TO MARC">)>)>>
- <DEFINE NEW-LOSS ("AUX" NUTS)
- #DECL ((NUTS) <OR LIST FALSE>)
- <COND (<N==? ,PLAYER-CT
- <SETG PLAYER-CT
- <CHTYPE <DATA-READW ,TVASS ,HIPOFFSET> FIX>>>
- <GUNASSIGN PLAYER-SYMS>
- <COND (<SET NUTS <DATA-AREAD ,TVASS ,LUSERS <ARESET ,LOSSSPACE T <>>>>
- <SETG LOSSTABLE .NUTS>
- .NUTS)
- (T
- <PERR "Can't read losstable--your TRIVIA is DEAD"
- .NUTS
- NEW-LOSS>)>)
- (T ,LOSSTABLE)>>
- <DEFINE CHAIN-APPEND (TVA TVS WHAT CHAIN "AUX" OINT)
- #DECL ((TVA) ASYLUM (TVS) SPACE (WHAT) ANY (OINT CHAIN) FIX)
- <SET OINT <INT-LEVEL 20>>
- <PROG (FROB HIA WHR RETVAL)
- #DECL ((FROB HIA) <OR FALSE MANIAC> (RETVAL WHR) FIX)
- <COND (<SET FROB <DATA-APRINT .TVA -1 .TVS .WHAT>>
- <OR <0? <CHTYPE <DATA-READW .TVA <SET RETVAL <1 .FROB>>>
- FIX>>
- <AND <INT-LEVEL 0>
- <PERR "Non-zero chain pointer"
- CHAIN-APPEND
- .FROB>>>
- <COND (<AND <SET HIA <DATA-OPEN "PRINTW" .TVA .CHAIN>>
- <SET WHR <CHTYPE <DATA-READW .TVA .CHAIN> FIX>>
- <DATA-PRINTW .TVA .WHR .RETVAL>
- <DATA-PRINTW .TVA .HIA .RETVAL>>
- <INT-LEVEL .OINT>
- .RETVAL)
- (<AND <NOT .HIA> <MEMQ <1 .HIA> '(5 6)>>
- <STALL <1 .HIA>>
- <AGAIN>)
- (<PERR "Can't CHAIN-APPEND" .FROB .HIA>)>)
- (<MEMQ <1 .FROB> '(5 6)> <STALL <1 .FROB>> <AGAIN>)
- (<INT-LEVEL 0>
- <PERR "Can't PRINT append, CHAIN-APPEND" .FROB>)>>>
- <DEFINE STALL (WHY)
- #DECL ((WHY) FIX)
- <PRINC "
- NON-FATAL TIME OUT, STALLING BECAUSE --">
- <PRINC <NTH ,DATA-ERRORS .WHY>>
- <SLEEP 4>>
- <DEFINE GET-LOSER (PLAYER "AUX" (NUTS ,LOSSTABLE) OINT)
- #DECL ((PLAYER) TIME (NUTS) <OR LIST FALSE> (OINT) FIX)
- <SET OINT <INT-LEVEL 20>>
- <COND (<SET NUTS <MEMQ .PLAYER .NUTS>>)
- (<SET NUTS <NEW-LOSS>>
- <COND (<SET NUTS <MEMQ .PLAYER .NUTS>>)
- (<PERR "Player does not exist!!" .PLAYER GET-LOSER>)>)>
- <INT-LEVEL .OINT>
- .NUTS>
- <DEFINE ADDSCORE (WHO QUES AMT
- "AUX" (NUTS <GET-LOSER .WHO>) (TVA ,TVASS) (SSP ,SSPACE) ID
- SCORE SCUVEC LBLK CATSCR OINT)
- #DECL ((WHO) TIME (QUES) VECTOR (AMT) <OR FIX FLOAT> (TVA) ASYLUM
- (NUTS) LIST (SSP) SPACE (ID) <OR MANIAC FALSE> (SCORE) WORD
- (SCUVEC) <UVECTOR [REST <UVECTOR FLOAT FLOAT>]>
- (OINT LBLK) FIX (CATSCR) <UVECTOR FLOAT FLOAT>)
- <COND
- (<==? ,PLAYER ,DEBUGNAME>)
- (<SET OINT <INT-LEVEL 20>>
- <COND
- (<SET ID <DATA-OPEN "PRINTW" .TVA <NTH .QUES ,QSCORE>>>
- <SET SCORE <DATA-READW .TVA <1 .ID>>>
- <SET SCORE
- <PUTBITS .SCORE
- <BITS 18 18>
- <CHTYPE <+ 1 <CHTYPE <GETBITS .SCORE <BITS 18 18>> FIX>>
- WORD>>>
- <DATA-PRINTW
- .TVA
- .ID
- <PUTBITS .SCORE
- <BITS 18 0>
- <CHTYPE <+ <FIX <* 1000 .AMT>>
- <CHTYPE <GETBITS .SCORE <BITS 18 0>> FIX>>
- WORD>>>)
- (<INT-LEVEL 0> <PERR "Can't update QUESTION-SCORE" .QUES>)>
- <SET LBLK <3 .NUTS>>
- <PROG (QVAL (TBUV ,TBUV) (TINDEX <4 .NUTS>)
- (LOC <+ ,PG ,BABBLE-START <* 4 .TINDEX>>))
- #DECL ((QVAL) FLOAT (TBUV) <UVECTOR [4 FIX]> (TINDEX LOC) FIX)
- <COND
- (<SET ID <DATA-OPEN "PRINT" .TVA <+ .LBLK ,SCORE>>>
- <SET SCUVEC <DATA-IREAD .TVA .ID <ARESET .SSP T <>>>>
- <SET CATSCR <NTH .SCUVEC <NTH .QUES ,QCAT>>>
- <PUT .CATSCR 1 <FLOAT <+ .AMT <1 .CATSCR>>>>
- <PUT .CATSCR
- 2
- <+ <SET QVAL <FLOAT <NTH .QUES ,QVAL>>> <2 .CATSCR>>>
- <DATA-IPRINT .TVA .ID .SSP .SCUVEC>
- <PROG ()
- <COND (<DHLOCK .LOC>
- <GET-LOC .LOC .TBUV>
- <PUT .TBUV
- 3
- <CHTYPE <+ <CHTYPE <3 .TBUV> FLOAT> <FLOAT .AMT>>
- FIX>>
- <PUT .TBUV
- 4
- <CHTYPE <+ <CHTYPE <4 .TBUV> FLOAT> .QVAL> FIX>>
- <PUT-LOC .LOC .TBUV>
- <DUNLOCK .LOC>)
- (<SLEEP 2> <AGAIN>)>>
- <DATA-CLOSE .TVA .ID>)
- (<MEMQ <1 .ID> '(5 6)> <STALL <1 .ID>> <AGAIN>)
- (<INT-LEVEL 0>
- <PERR "Can't update PLAYER-SCORE" .WHO .AMT .NUTS>)>>
- <INT-LEVEL .OINT>)>>
- <DEFINE PERR (STR "TUPLE" ARG)
- #DECL ((STR) STRING (ARG) TUPLE)
- <SET-STATUS ,$SERROR>
- <CRLF>
- <PRINC "ERROR, ">
- <PRINC .STR>
- <PRINC ". ">
- <SETG REP ,SAVEREP>
- <COND (<NOT ,CTRLG-KILL>
- <SEND-ERROR .STR .ARG>)>
- <ERROR TRIVIA-LOSSAGE!-ERRORS !.ARG>>
- <SETG TAASIX <CHTYPE -12322603008 TIME>>
- <SETG MARCSIX <CHTYPE -19834195968 TIME>>
- <MANIFEST TAASIX MARCSIX>
- <SETG TAASTR "TAA">
- <SETG MARCSTR "MARC">
- <SETG MAINT "MARC or TAA">
- <DEFINE SEND-ERROR (STR ARG "AUX" IT)
- #DECL ((STR) STRING (IT) FIX (ARG) TUPLE)
- <COND (<OR <AND <SET IT <IDLE-TIME ,TAASIX>>
- <L? .IT 600>
- <CLI-SEND ,TAASTR .STR .ARG>>
- <AND <SET IT <IDLE-TIME ,MARCSIX>>
- <L? .IT 600>
- <CLI-SEND ,MARCSTR .STR .ARG>>>)
- (T
- <PRINC "Please report to ">
- <PRINC ,MAINT>)>>
- <DEFINE CLI-SEND (PLAYER MSG ARG "AUX" CH)
- #DECL ((CH) <OR CHANNEL FALSE> (PLAYER) STRING)
- <COND (<AND <N=? ,SPLAYER .PLAYER>
- <SET CH <OPEN "PRINT" .PLAYER "HACTRN" "CLI">>>
- <PRINC ,SPLAYER .CH>
- <CRLF .CH>
- <PRINC .MSG .CH>
- <MAPF <> <FUNCTION (X) <PRINT .X .CH>> .ARG>
- <CLOSE .CH>
- <CRLF>
- <PRINC <7 .CH>>
- <PRINC " is on line and has been informed.">)>>
- <SETG WHOSYMS <MAKESST "FOO" []>>
- <DEFINE P-SYMS ("AUX" (NUTS <NEW-LOSS>) (CURSPACE ,LOSSSPACE)
- (LS ,LOSSSPACE))
- #DECL ((NUTS) LIST (CURSPACE) <SPECIAL SPACE> (LS) SPACE)
- <COND (<GASSIGNED? PLAYER-SYMS> ,PLAYER-SYMS)
- (<SETG PLAYER-SYMS
- <PUT ,WHOSYMS
- 2
- <MAPR ,ALVECTOR
- <FUNCTION (X)
- <COND (<==? 1 <1 .X>> <MAPRET>)
- (<TYPE? <1 .X> TIME>
- <MAPRET <ASTRING .LS <MYSIXTOS <1 .X>>> <3 .X>>)
- (<MAPRET>)>>
- .NUTS>>>)>>
- <DEFINE SEND.MAIL ("AUX" (ASP <ARESET ,ASPACE T <>>) WHO LST MSG)
- #DECL ((ASP) SPACE (WHO) <OR FALSE VECTOR> (LST) <LIST [REST SYMBOL]>
- (MSG) STRING)
- <COND
- (<SET WHO <READARGS <P-SYMS> "To " '["" ""] '["SYM" "MULT"]>>
- <COND (<EMPTY? <SET LST <1 .WHO>>>)
- (<SET MSG <GETBUF "Message: " .ASP>>
- <MAPF <>
- <FUNCTION (X)
- <SEND-PLAYER <CHTYPE <STRTOX <1 .X>> TIME>
- <AVECTOR .ASP
- .MSG
- 1
- ,PLAYER
- <DSKDATE>>
- ,MLAST
- ,TELEC-START>>
- .LST>)>)>>
- <DEFINE CHAIN-FOLLOW (APP FROM TO "OPTIONAL" (FROB? <>)
- "AUX" (TVA ,TVASS)
- (LO <CHTYPE <DATA-READW .TVA <+ ,LUBLK .FROM>> FIX>)
- (ASP <ARESET ,ASPACE T <>>) (TTUV ,NTTUV) MAIL NEXT)
- #DECL ((TVA) ASYLUM (LO FROM TO) FIX (ASP) SPACE
- (MAIL) <OR FALSE VECTOR> (NEXT) WORD (TTUV) <UVECTOR <PRIMTYPE WORD>>
- (APP) <VECTOR [REST APPLICABLE]> (FROB?) <OR FIX FALSE>)
- <COND (<0? .LO> #FALSE ())
- (<SET MAIL <DATA-AREAD .TVA .LO .ASP>>
- <APPLY <NTH .APP <NTH .MAIL ,ATYPE>> .MAIL>
- <AND .FROB?
- <GET-LOC .FROB? .TTUV>
- <PUT-LOC .FROB? <PUT .TTUV 1 <- <1 .TTUV> 1>>>>
- <DATA-PRINTW .TVA
- <+ ,LUBLK .FROM>
- <SET NEXT <DATA-READW .TVA .LO>>>
- <COND (<==? .NEXT #WORD *000000000000*>
- <DATA-PRINTW .TVA <+ ,LUBLK .TO> <+ ,LUBLK .FROM>>)>
- <DATA-DELETE .TVA .LO>)>>
- <DEFINE VERBOHACK ("TUPLE" TUP)
- <CRLF>
- <COND (<SETG KEEPASKING <NOT ,KEEPASKING>>
- <PRINC "Continuous questions mode">
- <AND <ASSIGNED? topask>
- <LEGAL? .topask>
- <RETURN T .topask>>)
- (<PRINC "One at a time mode">)>
- <CRLF>>
- <DEFINE ANSHACK ()
- <CRLF>
- <COND (<SETG ALWAYS-ANSWER <NOT ,ALWAYS-ANSWER>>
- <PRINC "Always give answer mode">
- <AND <ASSIGNED? topask>
- <LEGAL? .topask>
- <RETURN T .topask>>)
- (<PRINC "Dont give answers">)>
- <CRLF>>
- <DEFINE ANSWERHACK ("TUPLE" X)
- <PROG ()
- <COND (<AND <ASSIGNED? Q.A>
- <ASSIGNED? BUF>
- <==? <NTH .Q.A ,QTYPE> ,$TLONG>>
- <ADDSTRING .BUF <NTH .Q.A 10>>
- <PRINC "[Answer added]">)
- (<ANSHACK>)>>>
- <DEFINE CHAR-INIT ("AUX" FOO)
- #DECL ((FOO) <VECTOR [REST CHARACTER <OR APPLICABLE FORM>]>)
- <CALRDRINIT>
- <SETG SPCCHARS <STRING <ASCII 22> !,SPCCHARS>>
- <SET FOO <MEMQ <ASCII 12> .CHRTABLE>>
- <PUT .FOO 2 ,BUFHACK>
- <SET CHRTABLE
- [<ASCII 20> ,ANSWERHACK <ASCII 22> ,VERBOHACK !.CHRTABLE]>
- <SET FOO <MEMQ <ASCII 5> .CHRTABLE>>
- <PUT .FOO 2 ,BUFTECO>
- <SET FOO <MEMQ <ASCII 12> ,XSPCCHARS>>
- <PUT .FOO 2 '<CLEAR>>
- <SETG XSPCCHARS
- [<ASCII 20> '<ANSHACK> <ASCII 22> '<VERBOHACK> !,XSPCCHARS]>
- <SETG INPUT-INT <ON "CHAR" ,CHARINT 8 0 ,INCHAN>>
- '<SETG MORE-INT <ON "CHAR" ,MORE-HANDLE 8 0 ,OUTCHAN>>>
- <DEFINE GET-TECO ("AUX" EDT FIL TEMP)
- #DECL ((EDT) <LIST [REST TIME]> (FIL TEMP) STRING)
- <PRINC "Please give the name of the TECO you desire: 'E', 'RMODE',
- or whatever. ">
- <PROG ()
- <COND (<NOT <EMPTY? <SET TEMP <READER [] "Program name " "" ["LINE"] ,VERBOSE>>>>
- <SET EDT <BUFLEX .TEMP ,DBRKS>>
- <COND (<==? <LENGTH .EDT> 1>
- <SET FIL <MYSIXTOS <1 .EDT>>>
- <SETG TECO-PROGRAM .FIL>
- <CRLF>
- <PRINC "Using 'TS ">
- <PRINC .FIL>
- <PRINC "' as TECO">)
- (T
- <PRINC
- "I can't understand that. Please type the name of the job to run,
- e.g., TECO, EMACS, RMODE, etc.
- ">
- <AGAIN>)>)>>>
- <DEFINE CLEAR ()
- <PRINC "C">
- <COND (<ASSIGNED? QUESTION?>
- <PQHEADER .QUESTION?>
- <COND (<==? <NTH .QUESTION? ,QTYPE> ,$TMATCH>
- <MATCH-PRINT <REST .QUESTION? ,QQUES>>)
- (<==? <NTH .QUESTION? ,QTYPE> ,$TRANK>
- <PRINC <NTH .QUESTION? <+ ,QQUES 4>>>
- <CRLF>
- <PRINC "Number to rank: ">
- <PRIN1 <NTH .QUESTION? <+ ,QQUES 5>>>
- <CRLF>
- <SSTPOSSYM!-ICALSYM "" 0 <2 .TBL>>)
- (<PRINC <NTH .QUESTION? <+ ,QQUES 1>>>)>)
- (<ASSIGNED? Q.A>
- <TERPRI>
- <PRINC "Answer from ">
- <PRINC <NTH .A ,AAUTH>>
- <PRINC ": ">
- <PRINC <NTH .A ,ARESP>>)>
- <COND (<GASSIGNED? MATCH>
- <TERPRI>
- <PRINC "Match ">
- <PRINC ,MATCH>)
- (<ASSIGNED? MARKING>
- <PRINC "
- Score (out of ">
- <PRIN1 .MARKING>
- <PRINC ")">)>
- <RETYPE-BUFFER!-ICALRDR T>>
- <DEFINE CHARINT (CHR CHN)
- #DECL ((CHR) CHARACTER (CHN) CHANNEL)
- <INT-LEVEL 0>
- <COND (<==? .CHR <ASCII 7>>
- <COND (<MEMQ ,PLAYER ,WINNERS> <RECURSE> <DISMISS T>)
- (,CTRLG-KILL <QUIT>)
- (<DISMISS T>)>)
- (<==? .CHR <ASCII 22>> <VERBOHACK>)
- (<==? .CHR <ASCII 20>> <ANSHACK>)>>
- <DEFINE MORE-HANDLE (X "OPTIONAL" Y "AUX" CHAR)
- #DECL ((X) <OR FIX CHANNEL> (Y) CHANNEL (CHAR) CHARACTER)
- <COND (<TYPE? .X FIX>)
- (T
- <PRINC "--More--" .X>
- <COND (<==? <SET CHAR <TYI ,INCHAN>> !\ > <CRLF .X> <DISMISS T>)
- (<AND <ASSIGNED? MORE-ACT> <LEGAL? MORE-ACT>>
- <INT-LEVEL 0>
- <PRINC "Flushed" .X>
- <CRLF .X>
- <DISMISS T .MORE-ACT>)
- (<CRLF .X>
- <DISMISS T>)>)>>
- <DEFINE BUFHACK (BUF CHR)
- #DECL ((CHR) CHARACTER (BUF) BUFFER)
- <PRINC "C">
- <AND <ASSIGNED? QUESTION?> <PQHEADER .QUESTION?>>
- <COND (<ASSIGNED? qprompt> <PRINC .qprompt> <CRLF>)>
- <COND (<ASSIGNED? bprompt> <PRINC .bprompt>)>
- <COND (<ASSIGNED? aprompt>
- <PRINC .aprompt>
- <TERPRI>
- <PRINC "Correct answer">)>
- <AND ,VERBOSE <PRINC " (BUFFER): ">>
- <IBUFPRINT .BUF <ASCII 4>>>
- <SETG SCOREVEC <IVECTOR 2 0>>
- <DEFINE GETQSCORE (QLOC "AUX" (SCWD <DATA-READW ,TVASS .QLOC>) (SV ,SCOREVEC))
- #DECL ((QLOC) FIX (SCWD) WORD (SV) <VECTOR [2 <OR FIX FLOAT>]>)
- <PUT .SV 1 <CHTYPE <GETBITS .SCWD <BITS 18 18>> FIX>>
- <PUT .SV
- 2
- </ <CHTYPE <GETBITS .SCWD <BITS 18 0>> FIX> 1000.000>>>
- <DEFINE PQSCORE (QLOC QMAX
- "OPTIONAL" (SV <GETQSCORE .QLOC>) (MX <* <1 .SV> .QMAX>)
- "AUX")
- #DECL ((QLOC) FIX (MX QMAX) <OR FIX FLOAT>
- (SV) <VECTOR [2 <OR FIX FLOAT>]>)
- <PRIN1 <1 .SV>>
- <PRINC " players received ">
- <PRIN1 <2 .SV>>
- <PRINC " points of maximum ">
- <PRIN1 .MX>
- <PRINC " [">
- <PRIN1 <FIX </ <* 100 <2 .SV>> .MX>>>
- <PRINC "%]">
- .SV>
- <DEFINE GETSCORE (PLAYER "AUX" (TVA ,TVASS) (SSP ,SSPACE) NUTS WHR)
- #DECL ((PLAYER) TIME (TVA) ASYLUM (SSP) SPACE (NUTS) LIST (WHR) FIX)
- <SET WHR
- <+ ,SCORE
- <COND (<==? .PLAYER ,PLAYER> ,LUBLK)
- (<SET NUTS <GET-LOSER .PLAYER>> <3 .NUTS>)>>>
- <DATA-AREAD .TVA .WHR <ARESET .SSP T <>>>>
- <DEFINE PSCORE (PLAYER
- "AUX" SCUVEC (SSP ,SSPACE) (TVA ,TVASS) (N 1) (TOT 0) (SCTOT 0)
- (QTOT 0) QTEMP QASKED LUBLK NSC NSC1 USLOT (TUV ,FOOUV) M
- CODE VAL)
- #DECL ((PLAYER) TIME (SCUVEC) UVECTOR (QTEMP QTOT N CODE) FIX
- (TVA) ASYLUM (SSP) SPACE (TOT SCTOT) <OR FIX FLOAT>
- (NSC NSC1) FLOAT (QASKED) <VECTOR [REST LIST]> (LUBLK USLOT) FIX
- (TUV) <UVECTOR [4 FIX]> (VAL) <LIST [REST TIME STRING FIX FIX]>
- (M) <OR FALSE <VECTOR [REST FIX STRING]>>)
- <SET SCUVEC <GETSCORE .PLAYER>>
- <SET LUBLK <3 <SET VAL <MEMQ .PLAYER ,LOSSTABLE>>>>
- <SET USLOT <* 4 <4 .VAL>>>
- <SET QASKED
- <DATA-AREAD
- .TVA
- <+ .LUBLK
- ,QASKED>
- .SSP>>
- <MAPF <>
- <FUNCTION (X)
- #DECL ((X) <OR STRING FIX>)
- <COND (<TYPE? .X STRING>
- <CRLF>
- <PRINC .X>
- <INDENT-TO 19>
- <PRIN1 <SET NSC <1 <1 .SCUVEC>>>>
- <SET SCTOT <+ .SCTOT .NSC>>
- <INDENT-TO 33>
- <PRIN1 <SET NSC1 <2 <1 .SCUVEC>>>>
- <SET TOT <+ .TOT .NSC1>>
- <SET N <+ .N 1>>
- <INDENT-TO 47>
- <COND (<==? .NSC1 0.000> <PRINC "---">)
- (T <PRIN1 </ .NSC .NSC1>>)>
- <SET SCUVEC <REST .SCUVEC>>
- <INDENT-TO 61>
- <PRIN1 <SET QTEMP </ <LENGTH <1 .QASKED>> 2>>>
- <SET QTOT <+ .QTEMP .QTOT>>
- <SET QASKED <REST .QASKED>>)>>
- <2 ,CATS>>
- <CRLF>
- <PRINC "Total of ">
- <PRIN1 .SCTOT>
- <PRINC " points out of ">
- <PRIN1 .TOT>
- <PRINC " [">
- <PRIN1 <FIX </ <* 100 .SCTOT> .TOT>>>
- <PRINC "%]. ">
- <PRIN1 .QTOT>
- <PRINC <COND (<1? .QTOT> " question.")
- (t " questions.")>>
- <CRLF>
- <PRINC "Progress: ">
- <PRIN1 <GETLASTQ .LUBLK>>
- <PRINC " ">
- <GET-LOC <+ ,PG ,PEEK-START .USLOT> .TUV>
- <COND (<0? <1 .TUV>>
- <PRINC "Playing: ">
- <COND (<SET M
- <MEMQ <CHTYPE <GETBITS <4 .TUV> <BITS 18 18>> FIX>
- ,STATUS-VECTOR>>
- <PRINC <2 .M>>)
- (<PRINC "??">)>
- <COND (<OR <1? <SET CODE <1 .M>>> <==? .CODE 9>>
- <COND (<0? <SET CODE
- <CHTYPE <GETBITS <4 .TUV> <BITS 18>>
- FIX>>>)
- (<PRINC "#"> <PRIN1 .CODE>)>)
- (<==? .CODE ,$SMAKE>
- <COND (<0? <SET CODE
- <CHTYPE <GETBITS <4 .TUV> <BITS 18>>
- FIX>>>)
- (<PRINC <NTH ,MAKETYPES .CODE>>)>)>)
- (T
- <PRINC "Last played on">
- <PDSKDATE <CHTYPE <3 .TUV> WORD>>
- <PRINC <ASCII 46>>)>>
- <DEFINE GETLASTQ (LUBLK "AUX" (QSP ,QSPACE) Q LOWQ)
- #DECL ((LOWQ LUBLK) FIX (Q) <OR FALSE <VECTOR FIX [REST ANY]>>
- (QSP) SPACE)
- <COND (<==? <SET LOWQ
- <CHTYPE <DATA-READW ,TVASS <+ .LUBLK ,QNEXT>> FIX>>
- ,LOWQUES>
- 0)
- (<SET Q <DATA-AREAD ,TVASS .LOWQ <ARESET .QSP T <>>>>
- <QQNUM .Q>)>>
- <DEFINE PDSKDATE (WD
- "AUX" (TIM <CHTYPE <GETBITS .WD <BITS 18 0>> FIX>)
- (A/P " AM ") HR)
- #DECL ((WD) <PRIMTYPE WORD> (TIM HR) FIX (A/P) STRING)
- <PRINC " ">
- <COND (<0? <CHTYPE .WD FIX>>
- <PRINC "unknown ">)
- (T
- <PRINC <NTH ,MONTHS <CHTYPE <GETBITS .WD <BITS 4 23>> FIX>>>
- <PRINC " ">
- <PRIN1 <CHTYPE <GETBITS .WD <BITS 5 18>> FIX>>
- <PRINC " at ">
- <SET HR </ .TIM 7200>>
- <COND (<G=? .HR 12> <SET HR <- .HR 12>> <SET A/P " PM ">)>
- <COND (<0? .HR> <SET HR 12>)>
- <PRIN1 .HR>
- <PRINC ":">
- <SET HR </ <MOD .TIM 7200> 120>>
- <COND (<L? .HR 10> <PRINC "0">)>
- <PRIN1 .HR>
- <PRINC .A/P>)>>
- <SETG MONTHS
- ["January"
- "February"
- "March"
- "April"
- "May"
- "June"
- "July"
- "August"
- "September"
- "October"
- "November"
- "December"]>
- <GDECL (MONTHS) <VECTOR [12 STRING]>>
- <DEFINE 6PRINC (FROB "AUX" (BITTBL ,6BIT))
- #DECL ((FROB) <PRIMTYPE WORD> (BITTBL) <UVECTOR [REST BITS]>)
- <REPEAT (CHAR) #DECL ((CHAR) FIX)
- <SET CHAR <CHTYPE <GETBITS .FROB <1 .BITTBL>> FIX>>
- <COND (<0? .CHAR> <RETURN .FROB>)
- (T
- <PRINC <CHTYPE <+ .CHAR 32> CHARACTER>>
- <COND (<EMPTY? <SET BITTBL <REST .BITTBL>>>
- <RETURN .FROB>)>)>>>
- <PRINTTYPE TIME ,6PRINC>
- <SETG 6BIT
- <UVECTOR <BITS 6 30>
- <BITS 6 24>
- <BITS 6 18>
- <BITS 6 12>
- <BITS 6 6>
- <BITS 6 0>>>
- <SETG SCRATCH "MARCGR">
- <GDECL (6BIT) <UVECTOR [6 BITS]> (PLAYER) TIME (SCRATCH) STRING>
- <DEFINE MYSIXTOS (X "AUX" (S ,SCRATCH) (CT 0) (BIT ,6BIT))
- #DECL ((X) <PRIMTYPE WORD> (CT) FIX (BIT) <UVECTOR [REST BITS]> (VALUE S) STRING)
- <REPEAT (TCHAR)
- #DECL ((TCHAR) FIX)
- <COND (<0? <SET TCHAR <CHTYPE <GETBITS .X <1 .BIT>> FIX>>>
- <RETURN <SUBSTRUC .S 0 .CT>>)
- (T
- <SET CT <+ .CT 1>>
- <PUT .S .CT <CHTYPE <+ .TCHAR 32> CHARACTER>>
- <COND (<EMPTY? <SET BIT <REST .BIT>>>
- <RETURN <STRING .S>>)>)>>>
- <DEFINE SQUOZE (SIXBIT
- "AUX" (MULF <* 40 40 40 40 40 40>) (VAL 0) (COUNT 6) (TC 0)
- (SBITS ,6BIT))
- #DECL ((VAL COUNT TC MULF) FIX (SIXBIT) <PRIMTYPE WORD>
- (SBITS) <UVECTOR [REST BITS]>)
- <REPEAT ()
- <COND (<OR <EMPTY? .SBITS> <L? .COUNT 1>>
- <RETURN>)>
- <SET TC <CHTYPE <GETBITS .SIXBIT <1 .SBITS>> FIX>>
- <SET SBITS <REST .SBITS>>
- <COND (<AND <G=? .TC 17> <L=? .TC 26>>
- <SET TC <- .TC 16>>)
- (<AND <G=? .TC 33> <L=? .TC 58>>
- <SET TC <- .TC 22>>)
- (<==? .TC <ASCII !\.>> <SET TC 37>)
- (<==? .TC <ASCII !\$>> <SET TC 38>)
- (<==? .TC <ASCII !\%>> <SET TC 39>)
- (T <AGAIN>)>
- <SET COUNT <- .COUNT 1>>
- <SET VAL <+ .VAL <* .TC <SET MULF </ .MULF 40>>>>>>
- <CHTYPE .VAL WORD>>
- <DEFINE ANNOUNCE ("AUX" (ASP <ARESET ,ASPACE T <>>) (TVA ,TVASS) ANN)
- #DECL ((TVA) ASYLUM (ASP) SPACE (ANN) STRING)
- <COND (<AND <PRINC
- "
- [PLEASE ONLY MAKE ANNOUNCEMENTS IF REALLY NECESSARY
- TYPE ALTMODE TO FLUSH THIS COMMAND]
- ">
- <SET ANN <GETBUF "Announcement: " .ASP>>
- <NOT <QUESTIONABLE? .ANN>>>
- <CHAIN-APPEND .TVA
- .ASP
- <AVECTOR .ASP <DSKDATE> ,PLAYER .ANN>
- ,HIMAIL>)>>
- <DEFINE READ.ANNOUNCE ("AUX" (TVA ,TVASS) (ASP <ARESET ,ASPACE T <>>) ANN
- (NXT
- <CHTYPE <DATA-READW .TVA <+ ,LUBLK ,ANNEXT>>
- FIX>) DAT)
- #DECL ((TVA) ASYLUM (NXT) FIX (ASP) SPACE (ANN) <OR FALSE VECTOR>
- (DAT) <PRIMTYPE WORD>)
- <REPEAT ()
- <COND (<0? <SET NXT <CHTYPE <DATA-READW .TVA .NXT> FIX>>>
- <RETURN>)
- (<SET ANN <DATA-AREAD .TVA .NXT .ASP>>
- <PRINC "
- From ">
- <6PRINC <2 .ANN>>
- <PDSKDATE <1 .ANN>>
- <CRLF>
- <PRINC <3 .ANN>>
- <SET DAT <DSKDATE>>
- <COND (<==? <GETBITS .DAT <BITS 4 23>>
- <GETBITS <1 .ANN> <BITS 4 23>>>
- <AND <G? <- <CHTYPE <GETBITS .DAT <BITS 5 18>> FIX>
- <CHTYPE <GETBITS <1 .ANN> <BITS 5 18>>
- FIX>>
- 14>
- <DELETE.ANNOUNCE .NXT>>)
- (<G? <- <+ <CHTYPE <GETBITS .DAT <BITS 5 18>> FIX> 30>
- <CHTYPE <GETBITS <1 .ANN> <BITS 5 18>> FIX>>
- 14>
- <DELETE.ANNOUNCE .NXT>)>)>
- <DATA-PRINTW .TVA <+ ,LUBLK ,ANNEXT> .NXT>>>
- <DEFINE DELETE.ANNOUNCE (WHR "AUX" DAT LOC)
- #DECL ((WHR LOC) FIX (DAT) <UVECTOR [4 WORD]>)
- <SET DAT <DATA-FIND ,TVASS .WHR>>
- <SET LOC <CHTYPE <NTH .DAT <+ ,NAMDATA 1>> FIX>>
- <PUT .DAT 2 #WORD *000000000000*>
- <PUT .DAT 3 #WORD *000000000000*>
- <DATA-PUT ,TVASS .WHR .DAT>
- <DATA-BLOCK-FREE ,TVASS .LOC>>
- <DEFINE COMREP () <SNAME ,SPLAYER> <SETG SAVEREP ,REP> <SETG REP ,COMMAND>>
- <DEFINE RECURSE () <COND (<MEMQ <CHTYPE <XUNAME> TIME> ,WINNERS>
- <SETG REP ,SAVEREP>
- <SNAME "MARC">
- <LISTEN>
- <SNAME ,SPLAYER>
- <SETG REP ,COMMAND>)>>
- <DEFINE ANSWER? ()
- <OR ,ALWAYS-ANSWER
- <PROG topask ()
- #DECL ((topask) <SPECIAL ACTIVATION>)
- <TRUE? "
- Want the answer "
- "Y/N"
- "Yy"
- "Nn"
- <ASCII 20>>>>>
- <DEFINE FLOATPRINT (FLT "AUX" DEC X1000)
- #DECL ((FLT) FLOAT (DEC X1000) FIX)
- <COND (<==? <MOD <SET X1000 <FIX <* 1000 .FLT>>> 10> 9>
- <SET X1000 <+ .X1000 1>>)>
- <PRIN1 </ .X1000 1000>>
- <PRINC ".">
- <SET DEC <MOD .X1000 1000>>
- <AND <L? .DEC 100> <PRINC <ASCII 48> ;"Char 0">>
- <AND <L? .DEC 10> <PRINC <ASCII 48> ;"Char 0">>
- <PRINC .DEC>>
- <PRINTTYPE FLOAT ,FLOATPRINT>
- <OVERFLOW <>>
- <DEFINE TVSAVE (VER DBG "OPTIONAL" (MODIF 0))
- #DECL ((DBG) <OR 'T FALSE> (VER MODIF) FIX)
- <CHAR-INIT>
- <AND .DBG <DBG>>
- <FUMP .VER ,SAVE .MODIF>>
- <SETG QSYMS <MAKESST "QSYMS" []>>
- <DEFINE Q-SYMS ("AUX" QPOSS (TVA ,TVASS) (CURSPACE <ARESET ,ASPACE T <>>) (IDX 1) WHR)
- #DECL ((TVA) ASYLUM (CURSPACE) <SPECIAL SPACE> (WHR IDX) FIX
- (QPOSS) <VECTOR [REST <LIST [REST FIX]>]>)
- <COND
- (<SET QPOSS <DATA-AREAD .TVA <+ ,LUBLK ,QASKED> .CURSPACE>>
- <PUT
- ,QSYMS
- 2
- <MAPF ,ALVECTOR
- <FUNCTION (X "AUX" CATNM)
- #DECL ((X) LIST (CATNM) STRING)
- <AND <EMPTY? .X> <SET IDX <+ .IDX 1>> <MAPRET>>
- <SET CATNM <NTH <2 ,CATS> <- <* .IDX 2> 1>>>
- <REPEAT ((Y .X))
- #DECL ((Y) LIST)
- <COND (<EMPTY? .Y> <RETURN>)
- (<SET WHR <1 .Y>>
- <PUT .Y
- 1
- <ASTRING .CURSPACE
- .CATNM
- "."
- <UNPARSE <2 .Y>>>>
- <PUT .Y 2 .WHR>
- <SET Y <REST .Y 2>>)>>
- <SET IDX <+ .IDX 1>>
- <MAPRET !.X>>
- .QPOSS>>)>>
- <DEFINE GET.QUESTION ("OPTIONAL" (MULT <>) "AUX" SYMS SYMV)
- #DECL ((SYMS) <OR FALSE SYMTABLE> (SYMV) <OR FALSE VECTOR>
- (MULT) <OR FALSE 'T>)
- <COND (<SET SYMS <Q-SYMS>>
- <COND (<SET SYMV
- <READARGS .SYMS
- "Question "
- '["" ""]
- <COND (.MULT '["SYM" "MULT"]) ('["SYM"])>>>
- <AND <NOT <EMPTY? <1 .SYMV>>> <1 .SYMV>>)>)
- (<PERR "Can't get QUESTION SYMBOLS, Q-SYMS">)>>
- <GDECL (SIMPLE-SPACE) SPACE>
- <SETG MY-SIMPLE <MAKESST "SI1" []>>
- <SETG HIS-SIMPLE <MAKESST "SI2" []>>
- <SETG SIMTABLE <MAKEMST "SSS" [,MY-SIMPLE ,HIS-SIMPLE]>>
- <SETG SIMTABLE? <>>
- <GDECL (SIMTABLE MY-SIMPLE HIS-SIMPLE) SYMTABLE (SIMTABLE?) <OR ATOM FALSE>>
- <DEFINE GET.SIMPLE ("OPTIONAL" (EVERYBODY? <>) "AUX" SYMV)
- #DECL ((SYMV) <OR FALSE VECTOR> (EVERYBODY?) <OR ATOM FALSE>)
- <COND (<NOT ,SIMTABLE?>
- <LOAD.SIMPLE>)>
- <COND (<SET SYMV
- <READARGS <COND (.EVERYBODY? ,SIMTABLE)
- (T ,MY-SIMPLE)>
- "Question "
- '["" ""]
- <COND (.EVERYBODY? '["SYM" "MULT"]) ('["SYM"])>>>
- <AND <NOT <EMPTY? <1 .SYMV>>> <1 .SYMV>>)>>
- <DEFINE LOAD.SIMPLE ("AUX" (TVA ,TVASS)
- (CURSPACE
- <COND (<GASSIGNED? SIMPLE-SPACE>
- <ARESET ,SIMPLE-SPACE T <>>)
- (T <SETG SIMPLE-SPACE <AFIND 1>>)>)
- (SISP ,SIMPLE-SPACE) SLIST (PLAYER ,PLAYER)
- (SPLAYER ,SPLAYER))
- #DECL ((CURSPACE) <SPECIAL SPACE> (TVA) ASYLUM
- (SLIST) <LIST [REST TIME FIX FIX]> (SISP) SPACE (PLAYER) TIME
- (SPLAYER) STRING)
- <SET SLIST <DATA-AREAD .TVA ,SIMPLE-LIST .SISP>>
- <PUT ,MY-SIMPLE
- 2
- <MAPR ,ALVECTOR
- <FUNCTION (X "AUX" (Y <1 .X>)) #DECL ((X) <LIST [REST <PRIMTYPE WORD>]>)
- <COND (<==? .Y .PLAYER>
- <MAPRET <ASTRING .SISP
- .SPLAYER
- <ASCII 46> ;"Char ."
- <UNPARSE <2 .X>>>
- <3 .X>>)
- (<MAPRET>)>>
- .SLIST>>
- <PUT ,HIS-SIMPLE
- 2
- <MAPR ,ALVECTOR
- <FUNCTION (X "AUX" (Y <1 .X>)) #DECL ((X) <LIST [REST <PRIMTYPE WORD>]>)
- <COND (<AND <TYPE? .Y TIME>
- <N==? .Y .PLAYER>>
- <MAPRET <ASTRING .SISP <MYSIXTOS .Y> <ASCII 46> <UNPARSE <2 .X>>>
- <3 .X>>)
- (<MAPRET>)>>
- .SLIST>>
- <SETG SIMTABLE? T>>
- <DEFINE PRINT.QSCORE ("OPTIONAL" (PRINT? T) (VERBOSE? <>)
- "AUX" (TVA ,TVASS) (QSP ,QSPACE) (PL 0) (PS 0.000)
- (MX 0.000) SYML)
- #DECL ((SYML) <OR FALSE <LIST [REST SYMBOL]>> (TVA) ASYLUM (QSP) SPACE
- (PS MX) FLOAT (PL) FIX (PRINT? VERBOSE?) <OR ATOM FALSE>)
- <COND
- (<SET SYML <GET.QUESTION T>>
- <CRLF>
- <PROG MORE-ACT
- ()
- #DECL ((MORE-ACT) <SPECIAL ACTIVATION>)
- <RESET ,INCHAN>
- <MAPF <>
- <FUNCTION (X "AUX" FROB QUES)
- #DECL ((X) SYMBOL (QUES) VECTOR
- (FROB) <VECTOR [2 <OR FIX FLOAT>]>)
- <SET QUES <DATA-AREAD .TVA <2 .X> <ARESET .QSP T <>>>>
- <COND (.PRINT?
- <PQHEADER .QUES>
- <COND (.VERBOSE? <PRINT-QUESTION .QUES>)
- (T <PRINC <NTH .QUES <+ ,QQUES 1>>>)>
- <CRLF>
- <CRLF>
- <SET FROB
- <PQSCORE <NTH .QUES ,QSCORE> <NTH .QUES ,QVAL>>>
- <CRLF>
- <PRINC "------">)
- (<SET FROB <GETQSCORE <NTH .QUES ,QSCORE>>>)>
- <SET PL <+ .PL <1 .FROB>>>
- <SET PS <+ .PS <2 .FROB>>>
- <SET MX <+ .MX <* <NTH .QUES ,QVAL> <1 .FROB>>>>>
- .SYML>
- <AND <NOT <LENGTH? .SYML 1>>
- <CRLF>
- <PRINC "
- Total for all questions...">
- <CRLF>>
- <OR <AND <LENGTH? .SYML 1> <OR .PRINT? .VERBOSE?>>
- <PQSCORE 0 0 <VECTOR .PL .PS> .MX>>>)>>
- <DEFINE PSCORES ("AUX" SYMV)
- #DECL ((SYMV) <OR FALSE VECTOR>)
- <SET-STATUS ,$SPSCORE>
- <COND (<SET SYMV
- <READARGS <P-SYMS> "for " '["" ""] '["SYM" "MULT"]>>
- <PROG MORE-ACT
- ()
- #DECL ((MORE-ACT) <SPECIAL ACTIVATION>)
- <RESET ,INCHAN>
- <MAPF <>
- <FUNCTION (X)
- #DECL ((X) SYMBOL)
- <PRINC "
- Score for ">
- <PRINC <1 .X>>
- <INDENT-TO 19>
- <PRINC
- "Points Possible Average Questions">
- <CRLF>
- <PSCORE <CHTYPE <STRTOX <1 .X>> TIME>>
- <CRLF>>
- <1 .SYMV>>>)>>
- <DEFINE GETBUF (bprompt "OPTIONAL" (SP ,QSPACE) qprompt SPROMPT "AUX" BUF)
- #DECL ((qprompt bprompt) <SPECIAL STRING> (SPROMPT) <OR FALSE STRING>
- (BUF) <SPECIAL BUFFER> (SP) SPACE)
- <TERPRI>
- <SET BUF <BUFMAKE 20>>
- <AND <ASSIGNED? SPROMPT>
- .SPROMPT
- <ADDSTRING .BUF .SPROMPT>>
- <REPEAT ()
- <COND (,VERBOSE <GETSTR .BUF .CHRTABLE .bprompt " (BUFFER):">)
- (<GETSTR .BUF .CHRTABLE .bprompt>)>
- <COND (,BUFSAFE <AND <CONFIRM> <RETURN>>) (<RETURN>)>>
- <ACOPY .SP <BUFTOS .BUF>>>
- <DEFINE CONFIRM ()
- <PRINC "[confirm]">
- <AND <RESET ,INCHAN> <==? <TYI> <ASCII 27>>>>
- <DEFINE PLAY-BALL ("AUX"
- (TAILOR
- <DATA-AREAD ,TVASS <+ ,LUBLK ,TAILOR> <ARESET ,SSPACE T <>>>)
- SWITCHES (SEQUENCE ,SEQUENCE))
- #DECL ((TAILOR) <OR FALSE <UVECTOR [3 WORD]>> (SEQUENCE SWITCHES) WORD)
- <COND (<NOT .TAILOR>)
- (T
- <SET SEQUENCE <SETG SEQUENCE <SEQ-WORD .TAILOR>>>
- <SET SWITCHES <SWITCH-WORD .TAILOR>>
- <MAPF <>
- <FUNCTION (BT SW)
- #DECL ((BT) BITS (SW) ATOM)
- <COND (<==? <GETBITS .SWITCHES .BT> #WORD *000000000000*>
- <SETG .SW <>>)
- (<SETG .SW T>)>>
- ,BIT-TABLE
- ,SWITCH-TABLE>
- <COND (<0? <SETG TELEC-INTERVAL
- <CHTYPE <GETBITS .SWITCHES ,RIGHT-HALF> FIX>>>)
- (<TELECON ,TELEC-INTERVAL>)>
- <SETG TECO-PROGRAM <MYSIXTOS <TECO-WORD .TAILOR>>>)>
- <MAPF <>
- <FUNCTION (BT "AUX" COD)
- #DECL ((BT) BITS (COD) FIX)
- <COND (<0? <SET COD <CHTYPE <GETBITS .SEQUENCE .BT> FIX>>>
- <MAPLEAVE T>)
- (<PRINC <NTH ,FROB-NAMES .COD>>
- <EVAL <NTH ,FROBS .COD>>)>>
- ,SEQ-BITS>
- <COMMAND>>
- <SETG SWITCH-TABLE
- '[VERBOSE ALWAYS-ANSWER PNEWMAIL IGNORE-SIMPLE KEEPASKING BUFSAFE]>
- <SETG BIT-TABLE
- '[#BITS *430100000000*
- #BITS *420100000000*
- #BITS *410100000000*
- #BITS *400100000000*
- #BITS *370100000000*
- #BITS *360100000000*]>
- <SETG RIGHT-HALF <BITS 18 0>>
- <MANIFEST RIGHT-HALF>
- <DEFINE SAVE-TAILOR ("AUX" (SWITCH #WORD 0) (SEQ ,SEQUENCE)
- (SSP <ARESET ,SSPACE T <>>))
- #DECL ((SEQ SWITCH) WORD (SSP) SPACE)
- <MAPF <>
- <FUNCTION (BT SW)
- #DECL ((BT) BITS (SW) ATOM)
- <SET SWITCH <PUTBITS .SWITCH .BT <COND (,.SW 1) (0)>>>>
- ,BIT-TABLE
- ,SWITCH-TABLE>
- <SET SWITCH
- <PUTBITS .SWITCH
- ,RIGHT-HALF
- ,TELEC-INTERVAL>>
- <DATA-APRINT ,TVASS
- <+ ,LUBLK ,TAILOR>
- .SSP
- <AUVECTOR .SSP
- .SEQ
- .SWITCH
- <CHTYPE <STRTOX ,TECO-PROGRAM> WORD>>>>
- <DEFINE GET-SEQUENCE ("AUX" SEQ (S #WORD *000000000000*))
- #DECL ((SEQ) <OR FALSE <VECTOR LIST>> (S) WORD)
- <UNWIND
- <PROG ()
- <SETG COMPLETES " ,">
- <COND (<SET SEQ
- <READARGS ,SEQ-SYMS "will be " '["" ""] '["SYM" "MULT"]>>
- <MAPF <>
- <FUNCTION (BT SYM)
- #DECL ((BT) BITS (SYM) <PRIMTYPE VECTOR>)
- <SET S <PUTBITS .S .BT <2 .SYM>>>>
- ,SEQ-BITS
- <1 .SEQ>>
- <SETG SEQUENCE .S>)>
- <SETG COMPLETES " ">>
- <SETG COMPLETES " ">>>
- <SETG SEQ-SYMS
- <MAKEBST "SS"
- ["Answer"
- 1
- "Babble"
- 2
- "DDT.babble"
- 3
- "Grade"
- 4
- "Make"
- 5
- "Peek"
- 6
- "Print.score"
- 7
- "Quit"
- 8
- "Read.mail"
- 9
- "Status.of.question"
- 10
- "Summary.status.of.question"
- 11
- "Tiny.babble"
- 12
- "Twhois"
- 13]>>
- <DEFINE SET-STATUS (CODE "OPTIONAL" (FROB 0) "AUX" (PG ,PG) (TU ,TUV))
- #DECL ((PG CODE FROB) FIX (TU) <UVECTOR [4 FIX]>)
- <COND (<GASSIGNED? TINDEX>
- <PUT-LOC <+ ,PEEK-START .PG ,TINDEX>
- <PUT .TU 4 <PUTBITS .FROB <BITS 18 18> .CODE>>>)>>
- <SETG TOBRKS " ,
- ">
- <SETG DBRKS ",./
- ">
- <GDECL (TOBRKS DBRKS) STRING>
- <DEFINE BUFLEX (S "OPTIONAL" (BRKS ,TOBRKS) "AUX" (LL (<CHTYPE 0 TIME>))
- (L .LL) (S1 .S))
- #DECL ((S S1 BRKS) STRING (VALUE LL L) <LIST [REST TIME]>)
- <REPEAT ()
- <COND (<OR <EMPTY? .S1> <MEMQ <1 .S1> .BRKS>>
- <AND
- <N==? .S .S1>
- <PUTREST
- .L
- <SET L
- (<CHTYPE <STRTOX <SUBSTRUC
- .S
- 0
- <- <LENGTH .S> <LENGTH .S1>>>> TIME>)>>>
- <AND <EMPTY? .S1> <RETURN <REST .LL>>>
- <SET S <REST .S1>>)>
- <SET S1 <REST .S1>>>>
- <SETG MAKETYPES
- ["ZORK!"
- "long answer"
- "matching"
- "M.C."
- "T/F"
- "ZORK!"
- "simple"
- "ZORK!"
- "ranking"]>
- ;"POINTER TO START OF USER BLOCK FOR USER FOO
- SETG'S FOO TO THAT FIX"
- <DEFINE UBLOCK (STR "OPTIONAL" (L ,LOSSTABLE) M)
- #DECL ((STR) STRING (L) LIST (M) <OR LIST FALSE>)
- <COND (<GASSIGNED? <PARSE .STR>> ,<PARSE .STR>)
- (<SET M <MEMQ <CHTYPE <STRTOX .STR> TIME> .L>>
- <SETG <PARSE .STR> <3 .M>>)>>
- <SETG ERRFLAG <>>
- <GDECL (ERRFLAG) <OR ATOM FALSE>>
- <DEFINE HANDLE (EFRM "TUPLE" JUNK "AUX" VAL TLIST TTY-HEADER)
- #DECL ((EFRM) FRAME (JUNK) TUPLE (VAL) FIX
- (TLIST) <OR FALSE <LIST [REST TIME STRING FIX FIX]>>
- (TTY-HEADER) IHEADER)
- <COND
- (,ERRFLAG
- <PRINC "ERROR in error handler.">
- <QUIT>)
- (,CTRLG-KILL
- <SETG ERRFLAG T>
- <DISABLE <SET TTY-HEADER <GET ,INCHAN INTERRUPT!- >>>
- <INT-LEVEL 100000>
- <PRINC "*ERROR*">
- <CRLF>
- <MAPF <>
- <FUNCTION (X)
- <PRIN1 .X>
- <CRLF>>
- .JUNK>
- <PRINC "ERROR during startup.">
- <COND (<SEND-ERROR "STARTUP ERROR" .JUNK>
- <VALRET ":GENJOB
- :DISOWN
- ">
- <ENABLE .TTY-HEADER>
- <OFF ,ERRH>)
- (T
- <CRLF>
- <PRINC "TRIVIA suicided.">
- <QUIT>)>)
- (<AND <==? <LENGTH .JUNK> 3>
- <==? <1 .JUNK> UNASSIGNED-VARIABLE!-ERRORS>
- <==? <3 .JUNK> GVAL>>
- <COND (<AND <GASSIGNED? LOSSTABLE>
- <SET TLIST
- <MEMQ <CHTYPE <STRTOX <SPNAME <2 .JUNK>>> TIME>
- ,LOSSTABLE>>>
- <SETG <2 .JUNK> <SET VAL <3 .TLIST>>>
- <INT-LEVEL 0>
- <ERRET .VAL .EFRM>)>)
- (<OR <==? ,PLAYER <CHTYPE <STRTOX "TAA"> TIME>>
- <==? ,PLAYER <CHTYPE <STRTOX "MARC"> TIME>>>
- <SETG REP ,SAVEREP>
- <SNAME "MARC">)>>
- <DEFINE AFIXCHOMP ("AUX" TTY-HEADER)
- #DECL ((TTY-HEADER) IHEADER)
- <DISABLE <SET TTY-HEADER <GET ,INCHAN INTERRUPT!- >>>
- <CLOSE <OPEN "PRINT" "_MSGS_;TRIVIA DEATH">>
- <CRLF>
- <PRINC "GROSS LOSSAGE">
- <CRLF>
- <PRINC "TRIVIA is down. Please tell other triviators to go away,
- then use TVBUG to describe EXACTLY what you were doing.">
- <CRLF>
- <VALRET ":GENJOB
- :DISOWN
- :TVBUG
- ">
- <ENABLE .TTY-HEADER>
- <OFF ,ERRH>
- <LISTEN>>
- <DEFINE SYSDOWN (DWNTIME) #DECL ((DWNTIME) FIX)
- <COND (<L? .DWNTIME 0>
- <CRLF>
- <PRINC "ITS revived!">
- <CRLF>
- <AND <==? ,FLUSH SYSDOWN> <SETG FLUSH <>>>)
- (T
- <SETG FLUSH SYSDOWN>)>>
- <AND <NOT <LOOKUP "COMPILE" <ROOT>>>
- <NOT <LOOKUP "GLUE" <GET PACKAGE OBLIST>>>
- <SETG ERRH <HANDLER <GET ERROR!-INTERRUPTS INTERRUPT> ,HANDLE>>
- <SETG SYSDOWNH <HANDLER <EVENT "SYSDOWN" 1> ,SYSDOWN>>>
- <DEFINE PLAY ("OPTIONAL" (PLAYER <>) "AUX" FOO TINDEX LUBLK)
- #DECL ((PLAYER) <OR STRING FALSE> (FOO) <OR FALSE FIX> (TINDEX LUBLK) FIX)
- <COND (<MEMQ <CHTYPE <XUNAME> TIME> ,WINNERS>
- <COND (<NOT .PLAYER>
- <SET PLAYER <READER '[] "as " "" '["LINE"] <>>>)>
- <COND (<SET FOO <UBLOCK .PLAYER>>
- <SET TINDEX <* 4 <4 <MEMQ <CHTYPE <STRTOX .PLAYER> TIME>
- ,LOSSTABLE>>>>
- <COND (<DHLOCK <+ .TINDEX ,PEEK-START ,PG>>
- <DUNLOCK <+ ,TINDEX ,PEEK-START ,PG>>
- <SETG TINDEX .TINDEX>
- <SETG LUBLK .FOO>
- <SETG PLAYER <CHTYPE <STRTOX .PLAYER> TIME>>
- <PUT ,TUV 2 <CHTYPE ,PLAYER FIX>>
- .PLAYER)
- (T <PRINC "Already playing">)>)
- (T <PRINC "You blew it, champ.">)>)>>
- <DEFINE UNLOCK-PLAYER (NAME "AUX" (L <MEMQ <CHTYPE <STRTOX .NAME> TIME> <NEW-LOSS>>)
- TINDEX TEMP)
- #DECL ((L) <OR FALSE <LIST [REST TIME STRING FIX FIX]>> (NAME) STRING
- (TINDEX TEMP) FIX)
- <COND (.L
- <SET TINDEX <4 .L>>
- <SET TEMP <+ ,PEEK-START
- <SETG PG <* .PG 1024>>
- <* .TINDEX 4>>>
- <COND (<0? <1 <GET-LOC .TEMP ,NTTUV>>>
- <OR <DUNLOCK .TEMP>
- <PUT-LOC .TEMP ![-1]>>
- T)
- (T
- #FALSE ("ALREADY UNLOCKED"))>)
- (#FALSE ("NOT A PLAYER"))>>
- <DEFINE RDELETE (FOO "AUX" (DC ,TVASS) (S <ARESET ,ASPACE T <>>)
- (ZORK <ALIST .S 1>) FWEEP)
- #DECL ((FOO) <OR FIX <LIST [REST FIX]>> (DC) ASYLUM (S) SPACE (ZORK) LIST
- (FWEEP) <OR <FALSE FIX> <PRIMTYPE VECTOR>>)
- <COND (<TYPE? .FOO FIX>
- <COND (<SET FWEEP <DATA-DELETE .DC .FOO>>)
- (<==? <1 .FWEEP> 8>
- <DATA-APRINT .DC .FOO .S .ZORK>
- <DATA-DELETE .DC .FOO>)>)
- (T
- <MAPF <>
- <FUNCTION (X) #DECL ((X) FIX)
- <COND (<SET FWEEP <DATA-DELETE .DC .X>>)
- (<==? <1 .FWEEP> 8>
- <DATA-APRINT .DC .X .S .ZORK>
- <DATA-DELETE .DC .X>)>>
- .FOO>)>>
-
|