tvguts.149 51 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961
  1. <USE "ASYLUM" "MADMAN" "INFERIOR" "MUDTEC">
  2. <SETG FROBS
  3. '![<ASK.QUESTIONS> ;"Answer"
  4. <BABBLE-SORT> ;"Babble, slowly"
  5. <RUNJOB "SYS2;TS BABBLE" "BABBLE" T> ;"Babble, quickly"
  6. <GRADE.STUFF> ;"Grade"
  7. <MAKE.QUESTIONS> ;"Make questions"
  8. <RUNJOB "SYS2;TS TVPEEK" "TVPEEK" <>> ;"Peek"
  9. <PSCORES> ;"Printing scores"
  10. <QUIT> ;"Leave"
  11. <READ.MAIL> ;"Read mail"
  12. <PRINT.QSCORE> ;"Status of questions"
  13. <PRINT.QSCORE <>> ;"Summary status of questions"
  14. <BABBLE-SORT T> ;"Tiny babble"
  15. <RUNJOB "SYS2;TS TWHOIS" "TWHOIS" T> ;"Twhois"!]>
  16. <SETG FROB-NAMES
  17. '["
  18. Answering Questions.
  19. "
  20. "
  21. Babbling
  22. "
  23. "
  24. DDT.babbling
  25. "
  26. "
  27. Grading/Reading Answers.
  28. "
  29. "
  30. Making questions
  31. "
  32. "
  33. Peeking
  34. "
  35. "
  36. Printing score
  37. "
  38. "
  39. Quitting
  40. "
  41. "
  42. Reading mail.
  43. "
  44. "
  45. Status of questions
  46. "
  47. "
  48. Summary status of questions
  49. "
  50. "
  51. Tiny babbling
  52. "
  53. "
  54. Twhois
  55. "]>
  56. <SETG TECO <>>
  57. <OR <GASSIGNED? TUV> <SETG TUV <IUVECTOR 4 0>>>
  58. <SETG TTUV <IUVECTOR 1 0>>
  59. <SETG NTTUV <IUVECTOR 1 0>>
  60. <SETG TBUV <IUVECTOR 4 0>>
  61. <SETG FOOUV <IUVECTOR 4 0>>
  62. <SETG CTRLG-KILL <>>
  63. <GDECL (TUV TBUV FOOUV)
  64. <UVECTOR [4 FIX]>
  65. (TTUV NTTUV)
  66. <UVECTOR FIX>
  67. (CTRLG-KILL)
  68. <OR ATOM FALSE>>
  69. <SETG STATUS-VECTOR
  70. '[0
  71. "Grading"
  72. 1
  73. "Answer "
  74. 2
  75. "Babbling"
  76. 3
  77. "Reading mail"
  78. 4
  79. "Making "
  80. 5
  81. "Peek"
  82. 6
  83. "Start up"
  84. 7
  85. "Printing score"
  86. 8
  87. "Command"
  88. 9
  89. "Updating"
  90. 10
  91. "Status"
  92. 11
  93. "FLUSH"
  94. 12
  95. "ERROR"
  96. 13
  97. "SHOUT"]>
  98. <DEFINE DFUMP ("OPTIONAL" (FNAM "MADMAN;TV FOO"))
  99. #DECL ((FNAM) STRING)
  100. <DBG>
  101. <CHAR-INIT>
  102. <FUMP -1 ,TIME -1 .FNAM>>
  103. <SETG PLAYER-CT 0>
  104. <GDECL (PG PLAYER-CT) FIX (LASTMAIL) WORD>
  105. <DEFINE FUMP (VERSION
  106. "OPTIONAL" (SAVER ,TIME) (MODIF 0) (FNAM "MADMAN;TV FILE")
  107. "AUX" M PG PLAYERS TEMP PLAYER)
  108. #DECL ((VERSION MODIF) FIX (M) <OR FALSE LIST> (SAVER) APPLICABLE
  109. (PLAYERS) STRUCTURED (PG TEMP) FIX (FNAM) STRING (PLAYER) TIME
  110. (IMLAC) <SPECIAL <OR ATOM FALSE>>)
  111. <SETG ASPACE <AFIND 1>>
  112. <SETG SSPACE <AFIND 1>>
  113. <SETG QSPACE <AFIND 1>>
  114. <SETG TVSPACE ,ASPACE>
  115. <SETG LOSSSPACE <AFIND 2>>
  116. <PAGE-GIVE <PAGE-FIND 15> 15>
  117. <COND
  118. (<=? <APPLY .SAVER "MADMAN;TRV SAVFIL"> "SAVED">)
  119. (<AND <DINIT> <>>)
  120. (<AND <=? <JNAME> "DEBUG"> <MEMQ <CHTYPE <XUNAME> TIME> ,WINNERS>>
  121. <SETG TVASS <OPEN-DATA-FILE .FNAM <> 7 5>>
  122. "LOSING")
  123. (<SETG TVASS <OPEN-DATA-FILE .FNAM <> 7 5>>
  124. <UNWIND <PROG ()
  125. <OR <MEMQ <SETG PLAYER <SET PLAYER <CHTYPE <XUNAME> TIME>>>
  126. ,WINNERS>
  127. <SETG CTRLG-KILL T>>
  128. <PRINC "
  129. TRIVIA.">
  130. <PRIN1 .VERSION>
  131. <COND (<0? .MODIF>) (<PRINC "."> <PRIN1 .MODIF>)>
  132. <CRLF>
  133. <IPC-OFF>
  134. <IPC-ON <SETG SPLAYER <MYSIXTOS .PLAYER>> "TRIVIA">
  135. <COMREP>
  136. <INIT> ;"SET UP TTY'S"
  137. <SET IMLAC?!-CALRDR!-PACKAGE .IMLAC?>
  138. <GET-SPACE ,ASPACE>
  139. <GET-SPACE ,SSPACE>
  140. <GET-SPACE ,QSPACE>
  141. <GET-SPACE ,LOSSSPACE>
  142. <NEW-LOSS>
  143. <RESET ,INCHAN>
  144. <COND (<SET M <MEMQ .PLAYER ,LOSSTABLE>>
  145. <SETG LUBLK <3 .M>>
  146. <SETG TINDEX <4 .M>>
  147. <OR <PASS-CHECK <2 .M>> <QUIT>>
  148. <PRINC "
  149. Last played ">
  150. <PDSKDATE <DATA-READW ,TVASS <+ ,LUBLK ,LASTIN>>>)
  151. (<SETG LUBLK <NEW-USER .PLAYER>>)>
  152. <AND <SET PG <DIRMAP ,TVASS ,PEEK-PAGE>>
  153. <DIR-INIT .PG>
  154. <PUT <MEMQ .PG <5 ,TVASS>> 3 1>
  155. <SET TEMP
  156. <+ ,PEEK-START
  157. <SETG PG <* .PG 1024>>
  158. <SETG TINDEX <* ,TINDEX 4>>>>
  159. <COND (<DHLOCK .TEMP>)
  160. (T <VALRET ":KILL
  161. :ALREADY PLAYING
  162. ">)>>
  163. <UPDATE-BABBLE ,LUBLK ,TINDEX>
  164. <PUT ,TUV 2 <CHTYPE .PLAYER FIX>>
  165. <PUT ,TUV 3 <CHTYPE <DSKDATE> FIX>>
  166. <SET-STATUS ,$SWAKE>
  167. <DATA-PRINTW ,TVASS
  168. <+ ,LUBLK ,LASTIN>
  169. <SETG DATA-READ-WORD
  170. <SETG DATA-WRITE-WORD <DSKDATE>>>>
  171. <SETG DATA-AUTHOR-WORD <SQUOZE ,PLAYER>>
  172. <SETG LASTMAIL
  173. <CHTYPE <1 <GET-LOC <+ ,PG 1 ,TELEC-START ,TINDEX>
  174. ,TTUV>>
  175. WORD>>
  176. <SETG CTRLG-KILL <>>
  177. <READ.ANNOUNCE>
  178. <PLAY-BALL>>
  179. <AND ,CTRLG-KILL <QUIT>>>)
  180. (<PRINC "
  181. TRIVIA DATA BASE MISSING?
  182. "> <QUIT>)>>
  183. <DEFINE UPDATE-BABBLE (LUBLK TINDEX
  184. "AUX" SCORE (TBUV ,TBUV) (PG ,PG) LOC (TTUV ,TTUV))
  185. #DECL ((LOC LUBLK TINDEX PG) FIX (TBUV) <UVECTOR [3 FIX]>
  186. (SCORE) <OR FALSE <UVECTOR [REST UVECTOR]>> (TTUV) <UVECTOR FIX>)
  187. <PUT-LOC <+ .PG ,TELEC-START .TINDEX 2> <PUT .TTUV 1 0>>
  188. <SET LOC <+ .PG ,BABBLE-START .TINDEX>>
  189. <UNWIND <PROG ((TOTAL 0.000) (POSS 0.000))
  190. #DECL ((TOTAL POSS) FLOAT)
  191. <COND (<DHLOCK .LOC>
  192. <SET SCORE
  193. <DATA-AREAD ,TVASS
  194. <+ .LUBLK ,SCORE>
  195. <ARESET ,SSPACE T <>>>>
  196. <GET-LOC .LOC .TBUV>
  197. <PUT .TBUV 2 <GETLASTQ .LUBLK>>
  198. <MAPF <>
  199. <FUNCTION (X)
  200. <SET TOTAL <+ .TOTAL <1 .X>>>
  201. <SET POSS <+ .POSS <2 .X>>>>
  202. .SCORE>
  203. <PUT .TBUV 3 <CHTYPE .TOTAL FIX>>
  204. <PUT .TBUV 4 <CHTYPE .POSS FIX>>
  205. <PUT-LOC .LOC .TBUV>
  206. <DUNLOCK .LOC>)
  207. (<SLEEP 1> <AGAIN>)>>
  208. <DUNLOCK .LOC>>>
  209. <SETG VERBOSE <>>
  210. <DEFINE DO-TELECON ("AUX" FX)
  211. #DECL ((FX) <OR FALSE FIX>)
  212. <COND (<SET FX
  213. <READER '[] "at intervals of " '["" ""] '["FIX"] ,VERBOSE>>
  214. <TELECON .FX>)>>
  215. <SETG TELEC-INTERVAL 0>
  216. <GDECL (TELEC-INTERVAL) FIX>
  217. <DEFINE TELECON (AMT)
  218. #DECL ((AMT) FIX)
  219. <SETG TELEC-INTERVAL .AMT>
  220. <COND (<GASSIGNED? RTIMINT>)
  221. (<SETG RTIMINT <ON "REALT" ,CHECK.MAIL 1>>)>
  222. <PUT-LOC <+ ,PG ,TELEC-START ,TINDEX 2>
  223. <PUT ,TTUV 1 *400000000000*>>
  224. <REALTIMER .AMT>>
  225. <DEFINE OFFTELECON ()
  226. <COND (<GASSIGNED? RTIMINT>
  227. <SETG TELEC-INTERVAL 0>
  228. <OFF ,RTIMINT>
  229. <PUT-LOC <+ ,PG ,TELEC-START ,TINDEX 2> <PUT ,TTUV 1 0>>
  230. <GUNASSIGN RTIMINT>)>>
  231. <DEFINE CHECK.MAIL ("AUX" LST (UV ,TTUV) (TINDEX ,TINDEX))
  232. #DECL ((LST) WORD (UV) <UVECTOR FIX> (TINDEX) FIX)
  233. <COND (<==? <CHTYPE <GETBITS <1 <GET-LOC <+ ,PG ,PEEK-START .TINDEX 3>
  234. .UV>>
  235. <BITS 18 18>>
  236. FIX>
  237. ,$SREAD>)
  238. (<==? <SET LST
  239. <CHTYPE <1 <GET-LOC <+ ,TELEC-START ,PG .TINDEX 1>
  240. .UV>>
  241. WORD>>
  242. ,LASTMAIL>)
  243. (<SETG LASTMAIL .LST>
  244. <SETG EXISTS T>
  245. <PRINC "
  246. --MESSAGE HERE--
  247. ">)>
  248. <INT-LEVEL 0>
  249. <DISMISS T>>
  250. <SETG PNEWMAIL <>>
  251. <SETG EXISTS <>>
  252. <GDECL (PNEWMAIL EXISTS) <OR ATOM FALSE>>
  253. <SETG WINNERS
  254. (<CHTYPE #WORD *554162430000* TIME>
  255. <CHTYPE #WORD *644141000000* TIME>
  256. <CHTYPE #WORD *525542000000* TIME>
  257. <CHTYPE #WORD *435462000000* TIME>
  258. <CHTYPE #WORD *604454000000* TIME>)>
  259. "MARC, TAA, JMB, CLR, PDL"
  260. <DEFINE PASS-CHECK (PW "AUX" PS I)
  261. #DECL ((PS PW) STRING (I) HANDLER)
  262. <SET I
  263. <ON "CHAR"
  264. <FUNCTION (R N)
  265. #DECL ((R) CHARACTER (N) CHANNEL)
  266. <COND (<==? .R <ASCII 19>>
  267. <OR <MEMQ ,PLAYER ,WINNERS> <QUIT>>)>>
  268. 8
  269. 0
  270. ,INCHAN>>
  271. <REPEAT ((N 3))
  272. <RESET .INCHAN>
  273. <TTYECHO .INCHAN <>>
  274. <PRINC "
  275. Password: ">
  276. <READSTRING <SET PS <ISTRING 10>> .INCHAN ,PWTERM>
  277. <UPPERCASE .PS>
  278. <TTYECHO .INCHAN T>
  279. <COND (<=? .PS .PW> <OFF .I> <RETURN T>)
  280. (<SET N <- .N 1>> <AND <L? .N 0> <OFF .I> <RETURN <>>>)>>>
  281. <DEFINE NEW-USER (XUNM "AUX" PS VEC (TVA ,TVASS) (LSP ,LOSSSPACE) (SSP ,SSPACE))
  282. #DECL ((PS) STRING (XUNM) TIME (VEC) <UVECTOR [REST UVECTOR]> (TVA) ASYLUM
  283. (LSP SSP) SPACE)
  284. <PROG ()
  285. <SET PS <ISTRING 10>>
  286. <PRINC "
  287. Your TRIVIA password: ">
  288. <RESET .INCHAN>
  289. <TTYECHO .INCHAN <>>
  290. <READSTRING .PS .INCHAN ,PWTERM>
  291. <UPPERCASE .PS>
  292. <COND (<MEMQ <1 .PS> " î">
  293. <PRINC "
  294. Illegal password.">
  295. <AGAIN>)>
  296. <TTYECHO .INCHAN T>
  297. <PRINC "
  298. Please confirm your chosen password,">
  299. <OR <PASS-CHECK .PS> <AGAIN>>
  300. <UNWIND
  301. <PRINT-HELP T>
  302. <QUIT>>
  303. <PROG (L)
  304. #DECL ((L) <OR FALSE FIX>)
  305. <COND
  306. (<SET L <DATA-RESERVE .TVA ,LBLEN>>
  307. <PROG (CRAZY P)
  308. #DECL ((CRAZY) <OR FALSE MANIAC> (P) LIST)
  309. <COND
  310. (<SET CRAZY <DATA-OPEN "PRINT" .TVA ,LUSERS>>
  311. <UNWIND
  312. <PROG (TINDEX)
  313. #DECL ((TINDEX) FIX)
  314. <COND (<==? <SET TINDEX
  315. <CHTYPE <DATA-READW .TVA ,HIPOFFSET> FIX>>
  316. 83>
  317. <PERR "Can't make NEW-USER--no slots available">)
  318. (T
  319. <SETG TINDEX .TINDEX>
  320. <DATA-PRINTW .TVA ,HIPOFFSET <+ .TINDEX 1>>
  321. <SETG PLAYER-CT <+ .TINDEX 1>>)>
  322. <SET VEC <AIUVECTOR <ARESET .SSP T <>> ,NCAT <AUVECTOR .SSP>>>
  323. <MAPR <>
  324. <FUNCTION (X) <PUT .X 1 <AUVECTOR .SSP 0.000 0.000>>>
  325. .VEC>
  326. <DATA-APRINT .TVA <+ .L ,SCORE> .SSP .VEC>
  327. <DATA-APRINT .TVA
  328. <+ .L ,QASKED>
  329. .SSP
  330. <AIVECTOR <ARESET .SSP T <>> ,NCAT <ALIST .SSP>>>
  331. <ARESET .LSP T <>>
  332. <SET P <DATA-AREAD .TVA ,LUSERS .LSP>>
  333. <SET P <ACONS .LSP .TINDEX .P>>
  334. <SET P <ACONS .LSP .L .P>>
  335. <SET P <ACONS .LSP <ACOPY .LSP .PS> .P>>
  336. <SET P <ACONS .LSP .XUNM .P>>
  337. <SETG LOSSTABLE .P>
  338. <OR <DATA-IPRINT .TVA .CRAZY .LSP .P>
  339. <PERR "Can't print NEW-USER">>
  340. <DATA-CLOSE .TVA .CRAZY>>
  341. <DATA-CLOSE .TVA .CRAZY>>
  342. <DATA-PRINTW .TVA <+ .L ,QNEXT> ,LOWQUES>
  343. <DATA-PRINTW .TVA <+ .L ,ALAST> <+ .L ,ANEXT>>
  344. <DATA-PRINTW .TVA <+ .L ,MLAST> <+ .L ,MNEXT>>
  345. <DATA-PRINTW .TVA <+ .L ,ANNEXT> ,LOMAIL>
  346. .L)
  347. (<AGAIN>)>>)
  348. (<AGAIN>)>>>>
  349. <DEFINE PRINT-HELP ("OPTIONAL" (NEW-PLAYER? <>))
  350. #DECL ((NEW-PLAYER?) <OR ATOM FALSE>)
  351. <COND (.NEW-PLAYER?
  352. <CRLF>
  353. <PRINC ,NEWMSG>)>
  354. <COND (<RUNJOB "SYS1;TS PR" "TVDOC" <COND (.NEW-PLAYER? "HELP")
  355. (T)>>)>>
  356. <SETG LOSEMSG
  357. "
  358. Full documentation can be found in MADMAN;TVDOC > and MADMAN;TVUPD >.">
  359. <SETG NEWMSG
  360. "
  361. The following information has been found more or less essential to new
  362. TRIVIA users. Please read it.">
  363. <DEFINE COMMAND ("AUX" RD)
  364. #DECL ((RD) <OR FALSE SYMBOL>)
  365. <REPEAT ()
  366. <AND ,PNEWMAIL ,EXISTS <READ.MAIL>>
  367. <AND ,FLUSH <FLUSH-EM>>
  368. <SET-STATUS ,$SCOM>
  369. <COND (<SET RD <READER ,MCOMS "
  370. @" '["" ""] '["SYM"] <>>>
  371. <EVAL <2 .RD>>)>>>
  372. <SETG COMS
  373. <MAKEBST "COMMANDS"
  374. '["Announce"
  375. <ANNOUNCE>
  376. "Answer"
  377. <ASK.QUESTIONS>
  378. "Auto.read"
  379. <COND (<SETG PNEWMAIL <NOT ,PNEWMAIL>>
  380. <PRINC "
  381. Automatic reading">)
  382. (T <PRINC "
  383. Manual reading">)>
  384. "Babble"
  385. <BABBLE-SORT>
  386. "DDT.babble"
  387. <RUNJOB "SYS2;TS BABBLE" "BABBLE" T>
  388. "End.teleconference"
  389. <OFFTELECON>
  390. "Grade"
  391. <GRADE.STUFF>
  392. "Help"
  393. <PRINT-HELP>
  394. "Intest"
  395. <PROG ()
  396. <READ.ANNOUNCE>
  397. <PLAY-BALL>>
  398. "Kill.teco"
  399. <TECO-KILL>
  400. "Load.scores"
  401. <MOBY-VEC>
  402. "Make"
  403. <MAKE.QUESTIONS>
  404. "No.simple"
  405. <COND (<SETG IGNORE-SIMPLE <NOT ,IGNORE-SIMPLE>>
  406. <PRINC "
  407. Ignore simple questions">)
  408. (<PRINC "
  409. Read simple questions">)>
  410. "Peek"
  411. <RUNJOB "SYS2;TS TVPEEK" "TVPEEK" <>>
  412. "Print.score"
  413. <PSCORES>
  414. "Question.print"
  415. <PRINT.QSCORE T T>
  416. "Quit"
  417. <QUIT>
  418. "Read.mail"
  419. <READ.MAIL>
  420. "Rpeek"
  421. <RUNJOB "SYS2;TS TVPEEK" "TVPEEK" "R">
  422. "Safety"
  423. <COND (<SETG BUFSAFE <NOT ,BUFSAFE>> <PRINC "
  424. Safe">)
  425. (<PRINC "
  426. Sorry">)>
  427. "Save.tailor"
  428. <SAVE-TAILOR>
  429. "Send.mail"
  430. <SEND.MAIL>
  431. "Sequence"
  432. <GET-SEQUENCE>
  433. "Shout"
  434. <SHOUT>
  435. "Simple.load"
  436. <LOAD.SIMPLE>
  437. "Simple.print"
  438. <PRINT.SIMPLE>
  439. "Simple.update"
  440. <UPDATE.QUESTION <>>
  441. "Status.of.question"
  442. <PRINT.QSCORE>
  443. "Summary.status.of.question"
  444. <PRINT.QSCORE <>>
  445. "Teleconference"
  446. <DO-TELECON>
  447. "Tiny.babble"
  448. <BABBLE-SORT T>
  449. "Tvbug"
  450. <RUNJOB "SYS2;TS TVBUG" "TVBUG" <>>
  451. "Tvtodo"
  452. <RUNJOB "SYS2;TS TVTODO" "TVTODO" T>
  453. "Twhois"
  454. <RUNJOB "SYS2;TS TWHOIS" "TWHOIS" T>
  455. "Update.question"
  456. <UPDATE.QUESTION>
  457. "Verbosity"
  458. <COND (<SETG VERBOSE <NOT ,VERBOSE>> <PRINC "
  459. Verbose">)
  460. (<PRINC "
  461. Unverbose">)>
  462. "Which.teco"
  463. <GET-TECO>]>>
  464. <SETG BUFSAFE <>>
  465. <SETG DCOMS <MAKESST "DCOM" []>>
  466. <SETG MCOMS <MAKEMST "MCOM" [,COMS ,DCOMS]>>
  467. <SETG DCOM
  468. '["Recurse"
  469. <RECURSE>
  470. "Play"
  471. <PLAY>
  472. "Erret"
  473. <DO-ERRET>
  474. "Evaluate"
  475. <DO-EVAL>]>
  476. <SETG DP " with JCL of ">
  477. <GDECL (DP) STRING>
  478. <DEFINE RUNJOB (FILE JNAME JCL? "AUX" (JCL <>) (JOB <>))
  479. #DECL ((FILE JNAME) STRING (JCL?) <OR STRING ATOM FALSE> (JCL) <OR FALSE STRING>
  480. (JOB) <OR FALSE INF>)
  481. <COND (.JCL?
  482. <COND (<TYPE? .JCL? STRING>
  483. <SET JCL .JCL?>)
  484. (T
  485. <SET JCL <READER [] ,DP "" ["LINE"] ,VERBOSE>>)>)>
  486. <CRLF>
  487. <UNWIND
  488. <COND (<SET JOB <INF-LOAD .FILE .JNAME .JCL>>
  489. <INF-START .JOB>
  490. <OR <NOT <2 .JOB>>
  491. <INF-KILL .JOB>>)
  492. (T
  493. <CRLF>
  494. <PRIN1 .JOB>)>
  495. <AND .JOB <2 .JOB> <INF-KILL .JOB>>>>
  496. <DEFINE DO-ERRET () <ERRET <READER '[] "" "" '["ANY"] <>>>>
  497. <DEFINE DO-EVAL () <AND <MEMQ <CHTYPE <XUNAME> TIME> ,WINNERS>
  498. <EVAL <READER '[] "" "" '["ANY"] <>>>>>
  499. <SETG DEBUGSW <>>
  500. <DEFINE DBG () <PUT ,DCOMS 2 ,DCOM> <SETG DEBUGSW T>>
  501. <SETG FLUSH <>>
  502. <SETG QTYPES
  503. <MAKEBST "QT"
  504. '["Command"
  505. 1
  506. "Joint"
  507. 8
  508. "Long Answer"
  509. 2
  510. "Matching"
  511. 3
  512. "Multiple Choice"
  513. 4
  514. "None"
  515. 0
  516. "Quit"
  517. 6
  518. "Ranking"
  519. 9
  520. "Simple"
  521. 7
  522. "True/False"
  523. 5]>>
  524. <SETG CATS
  525. <MAKEBST "CAT"
  526. '["Athletics"
  527. 1
  528. "Cinema"
  529. 2
  530. "Events"
  531. 3
  532. "General"
  533. 4
  534. "History"
  535. 5
  536. "Literature"
  537. 6
  538. "Music"
  539. 7
  540. "Science Fiction"
  541. 8
  542. "TV/Radio"
  543. 9]>>
  544. <DEFINE QUESTIONABLE? (STR)
  545. #DECL ((STR) STRING)
  546. <NOT <MAPF <>
  547. <FUNCTION (X) <COND (<G? <ASCII .X> 32> <MAPLEAVE T>)>>
  548. .STR>>>
  549. <DEFINE TP (QUESTION) ;"Hack to get Q's to print evenly"
  550. #DECL ((QUESTION) STRING)
  551. <COND (<L=? <14 .OUTCHAN> 40> <PUT .OUTCHAN 14 41>)>
  552. .QUESTION>
  553. <DEFINE UNTASTEFUL-CODE (Q "OPTIONAL" (GST <>) (LETR <>) "AUX" (IDX 0))
  554. #DECL ((Q) STRUCTURED (GST LETR) <OR 'T FALSE> (IDX) FIX)
  555. <MAPF ,VECTOR
  556. <FUNCTION (X)
  557. <SET IDX <+ .IDX 1>>
  558. <COND (<AND <1? .IDX> .GST>
  559. <MAPRET 2
  560. ,MATCH-HACK
  561. <STRING <UNPARSE .IDX>
  562. ". "
  563. .X>
  564. 0>)>
  565. <MAPRET <STRING <COND (.LETR <ASCII <+ .IDX 96>>)
  566. (<UNPARSE .IDX>)>
  567. ". "
  568. .X>
  569. <COND (.GST 0) (.IDX)>>>
  570. .Q>>
  571. <DEFINE FLUSH-EM ()
  572. <COND (<==? ,FLUSH SYSDOWN>
  573. <OUT SYSTEM\ GOING\ DOWN>)
  574. (<==? ,FLUSH SHOUT> <SETG FLUSH <>> <PRINT.SHOUT>)
  575. (<==? ,FLUSH PURGE> <OUT EXCESSIVE-SYSTEM-LOAD>)
  576. (<==? ,FLUSH TECO>
  577. <SETG FLUSH <>>
  578. <COND (,TECO
  579. <TECO-KILL>
  580. <PRINC "
  581. TECO killed to free system resources.
  582. ">)>)
  583. (T <OUT ,FLUSH>)>>
  584. <DEFINE OUT (WHY? "AUX" MSG)
  585. #DECL ((WHY?) ATOM (MSG) <VECTOR TIME STRING>)
  586. <SET-STATUS ,$SFLUSH>
  587. <OFF "CHAR" ,INCHAN>
  588. <IPC-OFF>
  589. <INT-LEVEL 999>
  590. <COND (<==? .WHY? T>
  591. <SET MSG <DATA-AREAD ,TVASS ,SHOUTMSG <ARESET ,ASPACE T <>>>>
  592. <CRLF>
  593. <PRINC "TRIVIA brought down by ">
  594. <PRINC <1 .MSG>>
  595. <CRLF>
  596. <PRINC <2 .MSG>>)
  597. (T
  598. <PRINC "TRIVIA brought down due to ">
  599. <PRINC .WHY?>)>
  600. <VALRET ":KILL
  601. :
  602. TRIVIA DOWN!
  603. 
  604. ">>
  605. <DEFINE PRINT.SHOUT ("AUX" (MSG
  606. <DATA-AREAD ,TVASS ,SHOUTMSG <ARESET ,ASPACE T <>>>))
  607. #DECL ((MSG) <VECTOR TIME STRING>)
  608. <CRLF>
  609. <CRLF>
  610. <CRLF>
  611. <IMAGE 7>
  612. <IMAGE 7>
  613. <IMAGE 7>
  614. <PRINC "Message from ">
  615. <6PRINC <1 .MSG>>
  616. <CRLF>
  617. <PRINC <2 .MSG>>
  618. <CRLF>>
  619. <DEFINE FLUSH-TECOS ()
  620. <COND (<MEMQ ,PLAYER ,WINNERS>
  621. <SEND-TRIVIAS TECO>)>>
  622. <DEFINE SHOUT ("AUX" MSG ID (TVA ,TVASS) (ASP ,ASPACE))
  623. #DECL ((MSG) STRING (ID) <OR FALSE MANIAC> (TVA) ASYLUM (ASP) SPACE)
  624. <COND (<MEMQ ,PLAYER ,WINNERS>
  625. <SET MSG <GETBUF "Message: ">>
  626. <COND (<NOT <QUESTIONABLE? .MSG>>
  627. <COND (<SET ID <DATA-OPEN "PRINT" .TVA ,SHOUTMSG>>
  628. <DATA-IPRINT .TVA
  629. .ID
  630. .ASP
  631. <AVECTOR <ARESET .ASP T <>>
  632. ,PLAYER
  633. <ACOPY .ASP .MSG>>>
  634. <SEND-TRIVIAS SHOUT>
  635. <DATA-CLOSE .TVA .ID>)
  636. (<CRLF>
  637. <PRINC
  638. "The right hand knows not what the left hand does.">
  639. <CRLF>)>)>)>>
  640. <DEFINE FLUSH-ALL ("OPTIONAL" (WHY? <>) "AUX" ID CH MSG (TVA ,TVASS) (ASP ,ASPACE))
  641. #DECL ((WHY?) <OR ATOM FALSE> (MSG) STRING (CH) <OR CHANNEL FALSE>
  642. (ID) <OR MANIAC FALSE> (TVA) ASYLUM (ASP) SPACE)
  643. <COND (<MEMQ ,PLAYER ,WINNERS>
  644. <CRLF>
  645. <OR <SET CH <OPEN "PRINT" "_MSGS_;TRIVIA DEATH">>
  646. <ERROR .CH>>
  647. <COND (.WHY?
  648. <MSGOUT .WHY? .CH>
  649. <SEND-TRIVIAS .WHY?>)
  650. (T
  651. <SET MSG <GETBUF "Message: ">>
  652. <COND (<NOT <QUESTIONABLE? .MSG>>
  653. <COND (<SET ID <DATA-OPEN "PRINT" .TVA ,SHOUTMSG>>
  654. <DATA-IPRINT .TVA .ID .ASP
  655. <AVECTOR <ARESET .ASP T <>>
  656. ,PLAYER
  657. <ACOPY .ASP .MSG>>>
  658. <MSGOUT .MSG .CH>
  659. <SEND-TRIVIAS T>
  660. <DATA-CLOSE .TVA .ID>)
  661. (T
  662. <CRLF>
  663. <PRINC "One at a time, please!">
  664. <CRLF>)>)>)>)
  665. (<QUIT>)>>
  666. <DEFINE MSGOUT (MSG CH) #DECL ((MSG) <OR ATOM STRING> (CH) CHANNEL)
  667. <PRINC "TRIVIA brought down by " .CH>
  668. <PRINC ,PLAYER .CH>
  669. <CRLF .CH>
  670. <PRINC .MSG .CH>
  671. <CLOSE .CH>>
  672. <DEFINE SEND-TRIVIAS (WHAT?
  673. "AUX" (PG ,PG) (UV ,FOOUV) (SENDER ,PLAYER)
  674. (MSG <STRING "<SETG FLUSH " <UNPARSE .WHAT?> ">">))
  675. #DECL ((WHAT?) ANY (PG) FIX (UV) <UVECTOR [4 FIX]> (MSG) STRING (SENDER) TIME)
  676. <SET-STATUS ,$SHOUT>
  677. <REPEAT ((N 0) (LOC <+ .PG ,PEEK-START>) LOSER)
  678. #DECL ((N LOC) FIX (LOSER) TIME)
  679. <COND (<G? .N 83> <RETURN>)
  680. (<AND <GET-LOC .LOC .UV> <0? <1 .UV>>>
  681. <COND (<==? <SET LOSER <CHTYPE <2 .UV> TIME>> .SENDER>)
  682. (T
  683. <SEND <MYSIXTOS .LOSER> "TRIVIA" .MSG *400000000000*>
  684. <6PRINC .LOSER>
  685. <CRLF>)>)>
  686. <SET N <+ .N 1>>
  687. <SET LOC <+ .LOC 4>>>>
  688. <SETG GIVEUP <MAKESST "GIVE" ["
  689. Give up (CR)" <>]>>
  690. <SETG SYMTAB <MAKESST "SYMS" []>>
  691. <SETG ALLSYMS <MAKEMST "ALLSYMS" [,GIVEUP ,SYMTAB]>>
  692. <SETG ALWAYS-ANSWER <>>
  693. <SETG KEEPASKING <>>
  694. <SETG IGNORE-SIMPLE <>>
  695. <SETG T/F <MAKESST "T/F" ["Yes" T "No" <>]>>
  696. <DEFINE TRUE? (STR1 STR2 TRUELST FALSELST "OPTIONAL" INTCHR "AUX" CHR)
  697. #DECL ((STR1 STR2) STRING (INTCHR CHR) CHARACTER (TRUELST FALSELST) STRING)
  698. <PROG ()
  699. <PRINC .STR1>
  700. <RESET ,INCHAN>
  701. <PRINC " (">
  702. <PRINC .STR2>
  703. <PRINC ") ">
  704. <SET CHR <TYI>>
  705. <COND (<AND <ASSIGNED? INTCHR> <==? .CHR .INTCHR>>
  706. <INTERRUPT "CHAR" .INTCHR ,INCHAN>)>
  707. <COND (<MEMQ .CHR .TRUELST>)
  708. (<MEMQ .CHR .FALSELST> <>)
  709. (<AGAIN>)>>>
  710. <DEFINE SEND-PLAYER (WHO WHAT
  711. "OPTIONAL" (WHR ,ALAST) (MUNG-SLOT? <>) (MUNG-SLOT1? <>)
  712. (ASP ,ASPACE) "AUX" (TVA ,TVASS) (TTUV ,NTTUV) NUTS LAST
  713. LOC)
  714. #DECL ((WHO) TIME (WHAT) ANY (ASP) SPACE (NUTS) LIST (LOC LAST WHR) FIX
  715. (TVA) ASYLUM (MUNG-SLOT MUNG-SLOT1) <OR FIX FALSE>
  716. (TTUV) <UVECTOR FIX> (MUNG-SLOT? MUNG-SLOT1?) <OR FIX FALSE>)
  717. <COND (<==? ,PLAYER ,DEBUGNAME>)
  718. (<SET NUTS <GET-LOSER .WHO>>
  719. <SET LAST <+ .WHR <3 .NUTS>>>
  720. <COND (.MUNG-SLOT?
  721. <SET LOC <+ ,PG <* 4 <4 .NUTS>> .MUNG-SLOT?>>
  722. <UNWIND <PROG ()
  723. <COND (<DHLOCK .LOC>
  724. <GET-LOC .LOC .TTUV>
  725. <PUT .TTUV 1 <CHTYPE <4 .WHAT> FIX>>
  726. <PUT-LOC <+ .LOC 1> .TTUV>
  727. <DUNLOCK .LOC>)
  728. (<SLEEP 2> <AGAIN>)>>
  729. <DUNLOCK .LOC>>)
  730. (.MUNG-SLOT1?
  731. <SET LOC <+ 3 ,PG <* 4 <4 .NUTS>> .MUNG-SLOT1?>>
  732. <GET-LOC .LOC .TTUV>
  733. <PUT .TTUV 1 <+ <1 .TTUV> 1>>
  734. <PUT-LOC .LOC .TTUV>)>
  735. <COND (<CHAIN-APPEND .TVA .ASP .WHAT .LAST>
  736. <CRLF>
  737. <PRINC "Sent.">)
  738. (<PERR "SEND-PLAYER FAILURE -- PLEASE REPORT TO MARC">)>)>>
  739. <DEFINE NEW-LOSS ("AUX" NUTS)
  740. #DECL ((NUTS) <OR LIST FALSE>)
  741. <COND (<N==? ,PLAYER-CT
  742. <SETG PLAYER-CT
  743. <CHTYPE <DATA-READW ,TVASS ,HIPOFFSET> FIX>>>
  744. <GUNASSIGN PLAYER-SYMS>
  745. <COND (<SET NUTS <DATA-AREAD ,TVASS ,LUSERS <ARESET ,LOSSSPACE T <>>>>
  746. <SETG LOSSTABLE .NUTS>
  747. .NUTS)
  748. (T
  749. <PERR "Can't read losstable--your TRIVIA is DEAD"
  750. .NUTS
  751. NEW-LOSS>)>)
  752. (T ,LOSSTABLE)>>
  753. <DEFINE CHAIN-APPEND (TVA TVS WHAT CHAIN "AUX" OINT)
  754. #DECL ((TVA) ASYLUM (TVS) SPACE (WHAT) ANY (OINT CHAIN) FIX)
  755. <SET OINT <INT-LEVEL 20>>
  756. <PROG (FROB HIA WHR RETVAL)
  757. #DECL ((FROB HIA) <OR FALSE MANIAC> (RETVAL WHR) FIX)
  758. <COND (<SET FROB <DATA-APRINT .TVA -1 .TVS .WHAT>>
  759. <OR <0? <CHTYPE <DATA-READW .TVA <SET RETVAL <1 .FROB>>>
  760. FIX>>
  761. <AND <INT-LEVEL 0>
  762. <PERR "Non-zero chain pointer"
  763. CHAIN-APPEND
  764. .FROB>>>
  765. <COND (<AND <SET HIA <DATA-OPEN "PRINTW" .TVA .CHAIN>>
  766. <SET WHR <CHTYPE <DATA-READW .TVA .CHAIN> FIX>>
  767. <DATA-PRINTW .TVA .WHR .RETVAL>
  768. <DATA-PRINTW .TVA .HIA .RETVAL>>
  769. <INT-LEVEL .OINT>
  770. .RETVAL)
  771. (<AND <NOT .HIA> <MEMQ <1 .HIA> '(5 6)>>
  772. <STALL <1 .HIA>>
  773. <AGAIN>)
  774. (<PERR "Can't CHAIN-APPEND" .FROB .HIA>)>)
  775. (<MEMQ <1 .FROB> '(5 6)> <STALL <1 .FROB>> <AGAIN>)
  776. (<INT-LEVEL 0>
  777. <PERR "Can't PRINT append, CHAIN-APPEND" .FROB>)>>>
  778. <DEFINE STALL (WHY)
  779. #DECL ((WHY) FIX)
  780. <PRINC "
  781. NON-FATAL TIME OUT, STALLING BECAUSE --">
  782. <PRINC <NTH ,DATA-ERRORS .WHY>>
  783. <SLEEP 4>>
  784. <DEFINE GET-LOSER (PLAYER "AUX" (NUTS ,LOSSTABLE) OINT)
  785. #DECL ((PLAYER) TIME (NUTS) <OR LIST FALSE> (OINT) FIX)
  786. <SET OINT <INT-LEVEL 20>>
  787. <COND (<SET NUTS <MEMQ .PLAYER .NUTS>>)
  788. (<SET NUTS <NEW-LOSS>>
  789. <COND (<SET NUTS <MEMQ .PLAYER .NUTS>>)
  790. (<PERR "Player does not exist!!" .PLAYER GET-LOSER>)>)>
  791. <INT-LEVEL .OINT>
  792. .NUTS>
  793. <DEFINE ADDSCORE (WHO QUES AMT
  794. "AUX" (NUTS <GET-LOSER .WHO>) (TVA ,TVASS) (SSP ,SSPACE) ID
  795. SCORE SCUVEC LBLK CATSCR OINT)
  796. #DECL ((WHO) TIME (QUES) VECTOR (AMT) <OR FIX FLOAT> (TVA) ASYLUM
  797. (NUTS) LIST (SSP) SPACE (ID) <OR MANIAC FALSE> (SCORE) WORD
  798. (SCUVEC) <UVECTOR [REST <UVECTOR FLOAT FLOAT>]>
  799. (OINT LBLK) FIX (CATSCR) <UVECTOR FLOAT FLOAT>)
  800. <COND
  801. (<==? ,PLAYER ,DEBUGNAME>)
  802. (<SET OINT <INT-LEVEL 20>>
  803. <COND
  804. (<SET ID <DATA-OPEN "PRINTW" .TVA <NTH .QUES ,QSCORE>>>
  805. <SET SCORE <DATA-READW .TVA <1 .ID>>>
  806. <SET SCORE
  807. <PUTBITS .SCORE
  808. <BITS 18 18>
  809. <CHTYPE <+ 1 <CHTYPE <GETBITS .SCORE <BITS 18 18>> FIX>>
  810. WORD>>>
  811. <DATA-PRINTW
  812. .TVA
  813. .ID
  814. <PUTBITS .SCORE
  815. <BITS 18 0>
  816. <CHTYPE <+ <FIX <* 1000 .AMT>>
  817. <CHTYPE <GETBITS .SCORE <BITS 18 0>> FIX>>
  818. WORD>>>)
  819. (<INT-LEVEL 0> <PERR "Can't update QUESTION-SCORE" .QUES>)>
  820. <SET LBLK <3 .NUTS>>
  821. <PROG (QVAL (TBUV ,TBUV) (TINDEX <4 .NUTS>)
  822. (LOC <+ ,PG ,BABBLE-START <* 4 .TINDEX>>))
  823. #DECL ((QVAL) FLOAT (TBUV) <UVECTOR [4 FIX]> (TINDEX LOC) FIX)
  824. <COND
  825. (<SET ID <DATA-OPEN "PRINT" .TVA <+ .LBLK ,SCORE>>>
  826. <SET SCUVEC <DATA-IREAD .TVA .ID <ARESET .SSP T <>>>>
  827. <SET CATSCR <NTH .SCUVEC <NTH .QUES ,QCAT>>>
  828. <PUT .CATSCR 1 <FLOAT <+ .AMT <1 .CATSCR>>>>
  829. <PUT .CATSCR
  830. 2
  831. <+ <SET QVAL <FLOAT <NTH .QUES ,QVAL>>> <2 .CATSCR>>>
  832. <DATA-IPRINT .TVA .ID .SSP .SCUVEC>
  833. <PROG ()
  834. <COND (<DHLOCK .LOC>
  835. <GET-LOC .LOC .TBUV>
  836. <PUT .TBUV
  837. 3
  838. <CHTYPE <+ <CHTYPE <3 .TBUV> FLOAT> <FLOAT .AMT>>
  839. FIX>>
  840. <PUT .TBUV
  841. 4
  842. <CHTYPE <+ <CHTYPE <4 .TBUV> FLOAT> .QVAL> FIX>>
  843. <PUT-LOC .LOC .TBUV>
  844. <DUNLOCK .LOC>)
  845. (<SLEEP 2> <AGAIN>)>>
  846. <DATA-CLOSE .TVA .ID>)
  847. (<MEMQ <1 .ID> '(5 6)> <STALL <1 .ID>> <AGAIN>)
  848. (<INT-LEVEL 0>
  849. <PERR "Can't update PLAYER-SCORE" .WHO .AMT .NUTS>)>>
  850. <INT-LEVEL .OINT>)>>
  851. <DEFINE PERR (STR "TUPLE" ARG)
  852. #DECL ((STR) STRING (ARG) TUPLE)
  853. <SET-STATUS ,$SERROR>
  854. <CRLF>
  855. <PRINC "ERROR, ">
  856. <PRINC .STR>
  857. <PRINC ". ">
  858. <SETG REP ,SAVEREP>
  859. <COND (<NOT ,CTRLG-KILL>
  860. <SEND-ERROR .STR .ARG>)>
  861. <ERROR TRIVIA-LOSSAGE!-ERRORS !.ARG>>
  862. <SETG TAASIX <CHTYPE -12322603008 TIME>>
  863. <SETG MARCSIX <CHTYPE -19834195968 TIME>>
  864. <MANIFEST TAASIX MARCSIX>
  865. <SETG TAASTR "TAA">
  866. <SETG MARCSTR "MARC">
  867. <SETG MAINT "MARC or TAA">
  868. <DEFINE SEND-ERROR (STR ARG "AUX" IT)
  869. #DECL ((STR) STRING (IT) FIX (ARG) TUPLE)
  870. <COND (<OR <AND <SET IT <IDLE-TIME ,TAASIX>>
  871. <L? .IT 600>
  872. <CLI-SEND ,TAASTR .STR .ARG>>
  873. <AND <SET IT <IDLE-TIME ,MARCSIX>>
  874. <L? .IT 600>
  875. <CLI-SEND ,MARCSTR .STR .ARG>>>)
  876. (T
  877. <PRINC "Please report to ">
  878. <PRINC ,MAINT>)>>
  879. <DEFINE CLI-SEND (PLAYER MSG ARG "AUX" CH)
  880. #DECL ((CH) <OR CHANNEL FALSE> (PLAYER) STRING)
  881. <COND (<AND <N=? ,SPLAYER .PLAYER>
  882. <SET CH <OPEN "PRINT" .PLAYER "HACTRN" "CLI">>>
  883. <PRINC ,SPLAYER .CH>
  884. <CRLF .CH>
  885. <PRINC .MSG .CH>
  886. <MAPF <> <FUNCTION (X) <PRINT .X .CH>> .ARG>
  887. <CLOSE .CH>
  888. <CRLF>
  889. <PRINC <7 .CH>>
  890. <PRINC " is on line and has been informed.">)>>
  891. <SETG WHOSYMS <MAKESST "FOO" []>>
  892. <DEFINE P-SYMS ("AUX" (NUTS <NEW-LOSS>) (CURSPACE ,LOSSSPACE)
  893. (LS ,LOSSSPACE))
  894. #DECL ((NUTS) LIST (CURSPACE) <SPECIAL SPACE> (LS) SPACE)
  895. <COND (<GASSIGNED? PLAYER-SYMS> ,PLAYER-SYMS)
  896. (<SETG PLAYER-SYMS
  897. <PUT ,WHOSYMS
  898. 2
  899. <MAPR ,ALVECTOR
  900. <FUNCTION (X)
  901. <COND (<==? 1 <1 .X>> <MAPRET>)
  902. (<TYPE? <1 .X> TIME>
  903. <MAPRET <ASTRING .LS <MYSIXTOS <1 .X>>> <3 .X>>)
  904. (<MAPRET>)>>
  905. .NUTS>>>)>>
  906. <DEFINE SEND.MAIL ("AUX" (ASP <ARESET ,ASPACE T <>>) WHO LST MSG)
  907. #DECL ((ASP) SPACE (WHO) <OR FALSE VECTOR> (LST) <LIST [REST SYMBOL]>
  908. (MSG) STRING)
  909. <COND
  910. (<SET WHO <READARGS <P-SYMS> "To " '["" ""] '["SYM" "MULT"]>>
  911. <COND (<EMPTY? <SET LST <1 .WHO>>>)
  912. (<SET MSG <GETBUF "Message: " .ASP>>
  913. <MAPF <>
  914. <FUNCTION (X)
  915. <SEND-PLAYER <CHTYPE <STRTOX <1 .X>> TIME>
  916. <AVECTOR .ASP
  917. .MSG
  918. 1
  919. ,PLAYER
  920. <DSKDATE>>
  921. ,MLAST
  922. ,TELEC-START>>
  923. .LST>)>)>>
  924. <DEFINE CHAIN-FOLLOW (APP FROM TO "OPTIONAL" (FROB? <>)
  925. "AUX" (TVA ,TVASS)
  926. (LO <CHTYPE <DATA-READW .TVA <+ ,LUBLK .FROM>> FIX>)
  927. (ASP <ARESET ,ASPACE T <>>) (TTUV ,NTTUV) MAIL NEXT)
  928. #DECL ((TVA) ASYLUM (LO FROM TO) FIX (ASP) SPACE
  929. (MAIL) <OR FALSE VECTOR> (NEXT) WORD (TTUV) <UVECTOR <PRIMTYPE WORD>>
  930. (APP) <VECTOR [REST APPLICABLE]> (FROB?) <OR FIX FALSE>)
  931. <COND (<0? .LO> #FALSE ())
  932. (<SET MAIL <DATA-AREAD .TVA .LO .ASP>>
  933. <APPLY <NTH .APP <NTH .MAIL ,ATYPE>> .MAIL>
  934. <AND .FROB?
  935. <GET-LOC .FROB? .TTUV>
  936. <PUT-LOC .FROB? <PUT .TTUV 1 <- <1 .TTUV> 1>>>>
  937. <DATA-PRINTW .TVA
  938. <+ ,LUBLK .FROM>
  939. <SET NEXT <DATA-READW .TVA .LO>>>
  940. <COND (<==? .NEXT #WORD *000000000000*>
  941. <DATA-PRINTW .TVA <+ ,LUBLK .TO> <+ ,LUBLK .FROM>>)>
  942. <DATA-DELETE .TVA .LO>)>>
  943. <DEFINE VERBOHACK ("TUPLE" TUP)
  944. <CRLF>
  945. <COND (<SETG KEEPASKING <NOT ,KEEPASKING>>
  946. <PRINC "Continuous questions mode">
  947. <AND <ASSIGNED? topask>
  948. <LEGAL? .topask>
  949. <RETURN T .topask>>)
  950. (<PRINC "One at a time mode">)>
  951. <CRLF>>
  952. <DEFINE ANSHACK ()
  953. <CRLF>
  954. <COND (<SETG ALWAYS-ANSWER <NOT ,ALWAYS-ANSWER>>
  955. <PRINC "Always give answer mode">
  956. <AND <ASSIGNED? topask>
  957. <LEGAL? .topask>
  958. <RETURN T .topask>>)
  959. (<PRINC "Dont give answers">)>
  960. <CRLF>>
  961. <DEFINE ANSWERHACK ("TUPLE" X)
  962. <PROG ()
  963. <COND (<AND <ASSIGNED? Q.A>
  964. <ASSIGNED? BUF>
  965. <==? <NTH .Q.A ,QTYPE> ,$TLONG>>
  966. <ADDSTRING .BUF <NTH .Q.A 10>>
  967. <PRINC "[Answer added]">)
  968. (<ANSHACK>)>>>
  969. <DEFINE CHAR-INIT ("AUX" FOO)
  970. #DECL ((FOO) <VECTOR [REST CHARACTER <OR APPLICABLE FORM>]>)
  971. <CALRDRINIT>
  972. <SETG SPCCHARS <STRING <ASCII 22> !,SPCCHARS>>
  973. <SET FOO <MEMQ <ASCII 12> .CHRTABLE>>
  974. <PUT .FOO 2 ,BUFHACK>
  975. <SET CHRTABLE
  976. [<ASCII 20> ,ANSWERHACK <ASCII 22> ,VERBOHACK !.CHRTABLE]>
  977. <SET FOO <MEMQ <ASCII 5> .CHRTABLE>>
  978. <PUT .FOO 2 ,BUFTECO>
  979. <SET FOO <MEMQ <ASCII 12> ,XSPCCHARS>>
  980. <PUT .FOO 2 '<CLEAR>>
  981. <SETG XSPCCHARS
  982. [<ASCII 20> '<ANSHACK> <ASCII 22> '<VERBOHACK> !,XSPCCHARS]>
  983. <SETG INPUT-INT <ON "CHAR" ,CHARINT 8 0 ,INCHAN>>
  984. '<SETG MORE-INT <ON "CHAR" ,MORE-HANDLE 8 0 ,OUTCHAN>>>
  985. <DEFINE GET-TECO ("AUX" EDT FIL TEMP)
  986. #DECL ((EDT) <LIST [REST TIME]> (FIL TEMP) STRING)
  987. <PRINC "Please give the name of the TECO you desire: 'E', 'RMODE',
  988. or whatever. ">
  989. <PROG ()
  990. <COND (<NOT <EMPTY? <SET TEMP <READER [] "Program name " "" ["LINE"] ,VERBOSE>>>>
  991. <SET EDT <BUFLEX .TEMP ,DBRKS>>
  992. <COND (<==? <LENGTH .EDT> 1>
  993. <SET FIL <MYSIXTOS <1 .EDT>>>
  994. <SETG TECO-PROGRAM .FIL>
  995. <CRLF>
  996. <PRINC "Using 'TS ">
  997. <PRINC .FIL>
  998. <PRINC "' as TECO">)
  999. (T
  1000. <PRINC
  1001. "I can't understand that. Please type the name of the job to run,
  1002. e.g., TECO, EMACS, RMODE, etc.
  1003. ">
  1004. <AGAIN>)>)>>>
  1005. <DEFINE CLEAR ()
  1006. <PRINC "C">
  1007. <COND (<ASSIGNED? QUESTION?>
  1008. <PQHEADER .QUESTION?>
  1009. <COND (<==? <NTH .QUESTION? ,QTYPE> ,$TMATCH>
  1010. <MATCH-PRINT <REST .QUESTION? ,QQUES>>)
  1011. (<==? <NTH .QUESTION? ,QTYPE> ,$TRANK>
  1012. <PRINC <NTH .QUESTION? <+ ,QQUES 4>>>
  1013. <CRLF>
  1014. <PRINC "Number to rank: ">
  1015. <PRIN1 <NTH .QUESTION? <+ ,QQUES 5>>>
  1016. <CRLF>
  1017. <SSTPOSSYM!-ICALSYM "" 0 <2 .TBL>>)
  1018. (<PRINC <NTH .QUESTION? <+ ,QQUES 1>>>)>)
  1019. (<ASSIGNED? Q.A>
  1020. <TERPRI>
  1021. <PRINC "Answer from ">
  1022. <PRINC <NTH .A ,AAUTH>>
  1023. <PRINC ": ">
  1024. <PRINC <NTH .A ,ARESP>>)>
  1025. <COND (<GASSIGNED? MATCH>
  1026. <TERPRI>
  1027. <PRINC "Match ">
  1028. <PRINC ,MATCH>)
  1029. (<ASSIGNED? MARKING>
  1030. <PRINC "
  1031. Score (out of ">
  1032. <PRIN1 .MARKING>
  1033. <PRINC ")">)>
  1034. <RETYPE-BUFFER!-ICALRDR T>>
  1035. <DEFINE CHARINT (CHR CHN)
  1036. #DECL ((CHR) CHARACTER (CHN) CHANNEL)
  1037. <INT-LEVEL 0>
  1038. <COND (<==? .CHR <ASCII 7>>
  1039. <COND (<MEMQ ,PLAYER ,WINNERS> <RECURSE> <DISMISS T>)
  1040. (,CTRLG-KILL <QUIT>)
  1041. (<DISMISS T>)>)
  1042. (<==? .CHR <ASCII 22>> <VERBOHACK>)
  1043. (<==? .CHR <ASCII 20>> <ANSHACK>)>>
  1044. <DEFINE MORE-HANDLE (X "OPTIONAL" Y "AUX" CHAR)
  1045. #DECL ((X) <OR FIX CHANNEL> (Y) CHANNEL (CHAR) CHARACTER)
  1046. <COND (<TYPE? .X FIX>)
  1047. (T
  1048. <PRINC "--More--" .X>
  1049. <COND (<==? <SET CHAR <TYI ,INCHAN>> !\ > <CRLF .X> <DISMISS T>)
  1050. (<AND <ASSIGNED? MORE-ACT> <LEGAL? MORE-ACT>>
  1051. <INT-LEVEL 0>
  1052. <PRINC "Flushed" .X>
  1053. <CRLF .X>
  1054. <DISMISS T .MORE-ACT>)
  1055. (<CRLF .X>
  1056. <DISMISS T>)>)>>
  1057. <DEFINE BUFHACK (BUF CHR)
  1058. #DECL ((CHR) CHARACTER (BUF) BUFFER)
  1059. <PRINC "C">
  1060. <AND <ASSIGNED? QUESTION?> <PQHEADER .QUESTION?>>
  1061. <COND (<ASSIGNED? qprompt> <PRINC .qprompt> <CRLF>)>
  1062. <COND (<ASSIGNED? bprompt> <PRINC .bprompt>)>
  1063. <COND (<ASSIGNED? aprompt>
  1064. <PRINC .aprompt>
  1065. <TERPRI>
  1066. <PRINC "Correct answer">)>
  1067. <AND ,VERBOSE <PRINC " (BUFFER): ">>
  1068. <IBUFPRINT .BUF <ASCII 4>>>
  1069. <SETG SCOREVEC <IVECTOR 2 0>>
  1070. <DEFINE GETQSCORE (QLOC "AUX" (SCWD <DATA-READW ,TVASS .QLOC>) (SV ,SCOREVEC))
  1071. #DECL ((QLOC) FIX (SCWD) WORD (SV) <VECTOR [2 <OR FIX FLOAT>]>)
  1072. <PUT .SV 1 <CHTYPE <GETBITS .SCWD <BITS 18 18>> FIX>>
  1073. <PUT .SV
  1074. 2
  1075. </ <CHTYPE <GETBITS .SCWD <BITS 18 0>> FIX> 1000.000>>>
  1076. <DEFINE PQSCORE (QLOC QMAX
  1077. "OPTIONAL" (SV <GETQSCORE .QLOC>) (MX <* <1 .SV> .QMAX>)
  1078. "AUX")
  1079. #DECL ((QLOC) FIX (MX QMAX) <OR FIX FLOAT>
  1080. (SV) <VECTOR [2 <OR FIX FLOAT>]>)
  1081. <PRIN1 <1 .SV>>
  1082. <PRINC " players received ">
  1083. <PRIN1 <2 .SV>>
  1084. <PRINC " points of maximum ">
  1085. <PRIN1 .MX>
  1086. <PRINC " [">
  1087. <PRIN1 <FIX </ <* 100 <2 .SV>> .MX>>>
  1088. <PRINC "%]">
  1089. .SV>
  1090. <DEFINE GETSCORE (PLAYER "AUX" (TVA ,TVASS) (SSP ,SSPACE) NUTS WHR)
  1091. #DECL ((PLAYER) TIME (TVA) ASYLUM (SSP) SPACE (NUTS) LIST (WHR) FIX)
  1092. <SET WHR
  1093. <+ ,SCORE
  1094. <COND (<==? .PLAYER ,PLAYER> ,LUBLK)
  1095. (<SET NUTS <GET-LOSER .PLAYER>> <3 .NUTS>)>>>
  1096. <DATA-AREAD .TVA .WHR <ARESET .SSP T <>>>>
  1097. <DEFINE PSCORE (PLAYER
  1098. "AUX" SCUVEC (SSP ,SSPACE) (TVA ,TVASS) (N 1) (TOT 0) (SCTOT 0)
  1099. (QTOT 0) QTEMP QASKED LUBLK NSC NSC1 USLOT (TUV ,FOOUV) M
  1100. CODE VAL)
  1101. #DECL ((PLAYER) TIME (SCUVEC) UVECTOR (QTEMP QTOT N CODE) FIX
  1102. (TVA) ASYLUM (SSP) SPACE (TOT SCTOT) <OR FIX FLOAT>
  1103. (NSC NSC1) FLOAT (QASKED) <VECTOR [REST LIST]> (LUBLK USLOT) FIX
  1104. (TUV) <UVECTOR [4 FIX]> (VAL) <LIST [REST TIME STRING FIX FIX]>
  1105. (M) <OR FALSE <VECTOR [REST FIX STRING]>>)
  1106. <SET SCUVEC <GETSCORE .PLAYER>>
  1107. <SET LUBLK <3 <SET VAL <MEMQ .PLAYER ,LOSSTABLE>>>>
  1108. <SET USLOT <* 4 <4 .VAL>>>
  1109. <SET QASKED
  1110. <DATA-AREAD
  1111. .TVA
  1112. <+ .LUBLK
  1113. ,QASKED>
  1114. .SSP>>
  1115. <MAPF <>
  1116. <FUNCTION (X)
  1117. #DECL ((X) <OR STRING FIX>)
  1118. <COND (<TYPE? .X STRING>
  1119. <CRLF>
  1120. <PRINC .X>
  1121. <INDENT-TO 19>
  1122. <PRIN1 <SET NSC <1 <1 .SCUVEC>>>>
  1123. <SET SCTOT <+ .SCTOT .NSC>>
  1124. <INDENT-TO 33>
  1125. <PRIN1 <SET NSC1 <2 <1 .SCUVEC>>>>
  1126. <SET TOT <+ .TOT .NSC1>>
  1127. <SET N <+ .N 1>>
  1128. <INDENT-TO 47>
  1129. <COND (<==? .NSC1 0.000> <PRINC "---">)
  1130. (T <PRIN1 </ .NSC .NSC1>>)>
  1131. <SET SCUVEC <REST .SCUVEC>>
  1132. <INDENT-TO 61>
  1133. <PRIN1 <SET QTEMP </ <LENGTH <1 .QASKED>> 2>>>
  1134. <SET QTOT <+ .QTEMP .QTOT>>
  1135. <SET QASKED <REST .QASKED>>)>>
  1136. <2 ,CATS>>
  1137. <CRLF>
  1138. <PRINC "Total of ">
  1139. <PRIN1 .SCTOT>
  1140. <PRINC " points out of ">
  1141. <PRIN1 .TOT>
  1142. <PRINC " [">
  1143. <PRIN1 <FIX </ <* 100 .SCTOT> .TOT>>>
  1144. <PRINC "%]. ">
  1145. <PRIN1 .QTOT>
  1146. <PRINC <COND (<1? .QTOT> " question.")
  1147. (t " questions.")>>
  1148. <CRLF>
  1149. <PRINC "Progress: ">
  1150. <PRIN1 <GETLASTQ .LUBLK>>
  1151. <PRINC " ">
  1152. <GET-LOC <+ ,PG ,PEEK-START .USLOT> .TUV>
  1153. <COND (<0? <1 .TUV>>
  1154. <PRINC "Playing: ">
  1155. <COND (<SET M
  1156. <MEMQ <CHTYPE <GETBITS <4 .TUV> <BITS 18 18>> FIX>
  1157. ,STATUS-VECTOR>>
  1158. <PRINC <2 .M>>)
  1159. (<PRINC "??">)>
  1160. <COND (<OR <1? <SET CODE <1 .M>>> <==? .CODE 9>>
  1161. <COND (<0? <SET CODE
  1162. <CHTYPE <GETBITS <4 .TUV> <BITS 18>>
  1163. FIX>>>)
  1164. (<PRINC "#"> <PRIN1 .CODE>)>)
  1165. (<==? .CODE ,$SMAKE>
  1166. <COND (<0? <SET CODE
  1167. <CHTYPE <GETBITS <4 .TUV> <BITS 18>>
  1168. FIX>>>)
  1169. (<PRINC <NTH ,MAKETYPES .CODE>>)>)>)
  1170. (T
  1171. <PRINC "Last played on">
  1172. <PDSKDATE <CHTYPE <3 .TUV> WORD>>
  1173. <PRINC <ASCII 46>>)>>
  1174. <DEFINE GETLASTQ (LUBLK "AUX" (QSP ,QSPACE) Q LOWQ)
  1175. #DECL ((LOWQ LUBLK) FIX (Q) <OR FALSE <VECTOR FIX [REST ANY]>>
  1176. (QSP) SPACE)
  1177. <COND (<==? <SET LOWQ
  1178. <CHTYPE <DATA-READW ,TVASS <+ .LUBLK ,QNEXT>> FIX>>
  1179. ,LOWQUES>
  1180. 0)
  1181. (<SET Q <DATA-AREAD ,TVASS .LOWQ <ARESET .QSP T <>>>>
  1182. <QQNUM .Q>)>>
  1183. <DEFINE PDSKDATE (WD
  1184. "AUX" (TIM <CHTYPE <GETBITS .WD <BITS 18 0>> FIX>)
  1185. (A/P " AM ") HR)
  1186. #DECL ((WD) <PRIMTYPE WORD> (TIM HR) FIX (A/P) STRING)
  1187. <PRINC " ">
  1188. <COND (<0? <CHTYPE .WD FIX>>
  1189. <PRINC "unknown ">)
  1190. (T
  1191. <PRINC <NTH ,MONTHS <CHTYPE <GETBITS .WD <BITS 4 23>> FIX>>>
  1192. <PRINC " ">
  1193. <PRIN1 <CHTYPE <GETBITS .WD <BITS 5 18>> FIX>>
  1194. <PRINC " at ">
  1195. <SET HR </ .TIM 7200>>
  1196. <COND (<G=? .HR 12> <SET HR <- .HR 12>> <SET A/P " PM ">)>
  1197. <COND (<0? .HR> <SET HR 12>)>
  1198. <PRIN1 .HR>
  1199. <PRINC ":">
  1200. <SET HR </ <MOD .TIM 7200> 120>>
  1201. <COND (<L? .HR 10> <PRINC "0">)>
  1202. <PRIN1 .HR>
  1203. <PRINC .A/P>)>>
  1204. <SETG MONTHS
  1205. ["January"
  1206. "February"
  1207. "March"
  1208. "April"
  1209. "May"
  1210. "June"
  1211. "July"
  1212. "August"
  1213. "September"
  1214. "October"
  1215. "November"
  1216. "December"]>
  1217. <GDECL (MONTHS) <VECTOR [12 STRING]>>
  1218. <DEFINE 6PRINC (FROB "AUX" (BITTBL ,6BIT))
  1219. #DECL ((FROB) <PRIMTYPE WORD> (BITTBL) <UVECTOR [REST BITS]>)
  1220. <REPEAT (CHAR) #DECL ((CHAR) FIX)
  1221. <SET CHAR <CHTYPE <GETBITS .FROB <1 .BITTBL>> FIX>>
  1222. <COND (<0? .CHAR> <RETURN .FROB>)
  1223. (T
  1224. <PRINC <CHTYPE <+ .CHAR 32> CHARACTER>>
  1225. <COND (<EMPTY? <SET BITTBL <REST .BITTBL>>>
  1226. <RETURN .FROB>)>)>>>
  1227. <PRINTTYPE TIME ,6PRINC>
  1228. <SETG 6BIT
  1229. <UVECTOR <BITS 6 30>
  1230. <BITS 6 24>
  1231. <BITS 6 18>
  1232. <BITS 6 12>
  1233. <BITS 6 6>
  1234. <BITS 6 0>>>
  1235. <SETG SCRATCH "MARCGR">
  1236. <GDECL (6BIT) <UVECTOR [6 BITS]> (PLAYER) TIME (SCRATCH) STRING>
  1237. <DEFINE MYSIXTOS (X "AUX" (S ,SCRATCH) (CT 0) (BIT ,6BIT))
  1238. #DECL ((X) <PRIMTYPE WORD> (CT) FIX (BIT) <UVECTOR [REST BITS]> (VALUE S) STRING)
  1239. <REPEAT (TCHAR)
  1240. #DECL ((TCHAR) FIX)
  1241. <COND (<0? <SET TCHAR <CHTYPE <GETBITS .X <1 .BIT>> FIX>>>
  1242. <RETURN <SUBSTRUC .S 0 .CT>>)
  1243. (T
  1244. <SET CT <+ .CT 1>>
  1245. <PUT .S .CT <CHTYPE <+ .TCHAR 32> CHARACTER>>
  1246. <COND (<EMPTY? <SET BIT <REST .BIT>>>
  1247. <RETURN <STRING .S>>)>)>>>
  1248. <DEFINE SQUOZE (SIXBIT
  1249. "AUX" (MULF <* 40 40 40 40 40 40>) (VAL 0) (COUNT 6) (TC 0)
  1250. (SBITS ,6BIT))
  1251. #DECL ((VAL COUNT TC MULF) FIX (SIXBIT) <PRIMTYPE WORD>
  1252. (SBITS) <UVECTOR [REST BITS]>)
  1253. <REPEAT ()
  1254. <COND (<OR <EMPTY? .SBITS> <L? .COUNT 1>>
  1255. <RETURN>)>
  1256. <SET TC <CHTYPE <GETBITS .SIXBIT <1 .SBITS>> FIX>>
  1257. <SET SBITS <REST .SBITS>>
  1258. <COND (<AND <G=? .TC 17> <L=? .TC 26>>
  1259. <SET TC <- .TC 16>>)
  1260. (<AND <G=? .TC 33> <L=? .TC 58>>
  1261. <SET TC <- .TC 22>>)
  1262. (<==? .TC <ASCII !\.>> <SET TC 37>)
  1263. (<==? .TC <ASCII !\$>> <SET TC 38>)
  1264. (<==? .TC <ASCII !\%>> <SET TC 39>)
  1265. (T <AGAIN>)>
  1266. <SET COUNT <- .COUNT 1>>
  1267. <SET VAL <+ .VAL <* .TC <SET MULF </ .MULF 40>>>>>>
  1268. <CHTYPE .VAL WORD>>
  1269. <DEFINE ANNOUNCE ("AUX" (ASP <ARESET ,ASPACE T <>>) (TVA ,TVASS) ANN)
  1270. #DECL ((TVA) ASYLUM (ASP) SPACE (ANN) STRING)
  1271. <COND (<AND <PRINC
  1272. "
  1273. [PLEASE ONLY MAKE ANNOUNCEMENTS IF REALLY NECESSARY
  1274. TYPE ALTMODE TO FLUSH THIS COMMAND]
  1275. ">
  1276. <SET ANN <GETBUF "Announcement: " .ASP>>
  1277. <NOT <QUESTIONABLE? .ANN>>>
  1278. <CHAIN-APPEND .TVA
  1279. .ASP
  1280. <AVECTOR .ASP <DSKDATE> ,PLAYER .ANN>
  1281. ,HIMAIL>)>>
  1282. <DEFINE READ.ANNOUNCE ("AUX" (TVA ,TVASS) (ASP <ARESET ,ASPACE T <>>) ANN
  1283. (NXT
  1284. <CHTYPE <DATA-READW .TVA <+ ,LUBLK ,ANNEXT>>
  1285. FIX>) DAT)
  1286. #DECL ((TVA) ASYLUM (NXT) FIX (ASP) SPACE (ANN) <OR FALSE VECTOR>
  1287. (DAT) <PRIMTYPE WORD>)
  1288. <REPEAT ()
  1289. <COND (<0? <SET NXT <CHTYPE <DATA-READW .TVA .NXT> FIX>>>
  1290. <RETURN>)
  1291. (<SET ANN <DATA-AREAD .TVA .NXT .ASP>>
  1292. <PRINC "
  1293. From ">
  1294. <6PRINC <2 .ANN>>
  1295. <PDSKDATE <1 .ANN>>
  1296. <CRLF>
  1297. <PRINC <3 .ANN>>
  1298. <SET DAT <DSKDATE>>
  1299. <COND (<==? <GETBITS .DAT <BITS 4 23>>
  1300. <GETBITS <1 .ANN> <BITS 4 23>>>
  1301. <AND <G? <- <CHTYPE <GETBITS .DAT <BITS 5 18>> FIX>
  1302. <CHTYPE <GETBITS <1 .ANN> <BITS 5 18>>
  1303. FIX>>
  1304. 14>
  1305. <DELETE.ANNOUNCE .NXT>>)
  1306. (<G? <- <+ <CHTYPE <GETBITS .DAT <BITS 5 18>> FIX> 30>
  1307. <CHTYPE <GETBITS <1 .ANN> <BITS 5 18>> FIX>>
  1308. 14>
  1309. <DELETE.ANNOUNCE .NXT>)>)>
  1310. <DATA-PRINTW .TVA <+ ,LUBLK ,ANNEXT> .NXT>>>
  1311. <DEFINE DELETE.ANNOUNCE (WHR "AUX" DAT LOC)
  1312. #DECL ((WHR LOC) FIX (DAT) <UVECTOR [4 WORD]>)
  1313. <SET DAT <DATA-FIND ,TVASS .WHR>>
  1314. <SET LOC <CHTYPE <NTH .DAT <+ ,NAMDATA 1>> FIX>>
  1315. <PUT .DAT 2 #WORD *000000000000*>
  1316. <PUT .DAT 3 #WORD *000000000000*>
  1317. <DATA-PUT ,TVASS .WHR .DAT>
  1318. <DATA-BLOCK-FREE ,TVASS .LOC>>
  1319. <DEFINE COMREP () <SNAME ,SPLAYER> <SETG SAVEREP ,REP> <SETG REP ,COMMAND>>
  1320. <DEFINE RECURSE () <COND (<MEMQ <CHTYPE <XUNAME> TIME> ,WINNERS>
  1321. <SETG REP ,SAVEREP>
  1322. <SNAME "MARC">
  1323. <LISTEN>
  1324. <SNAME ,SPLAYER>
  1325. <SETG REP ,COMMAND>)>>
  1326. <DEFINE ANSWER? ()
  1327. <OR ,ALWAYS-ANSWER
  1328. <PROG topask ()
  1329. #DECL ((topask) <SPECIAL ACTIVATION>)
  1330. <TRUE? "
  1331. Want the answer "
  1332. "Y/N"
  1333. "Yy"
  1334. "Nn"
  1335. <ASCII 20>>>>>
  1336. <DEFINE FLOATPRINT (FLT "AUX" DEC X1000)
  1337. #DECL ((FLT) FLOAT (DEC X1000) FIX)
  1338. <COND (<==? <MOD <SET X1000 <FIX <* 1000 .FLT>>> 10> 9>
  1339. <SET X1000 <+ .X1000 1>>)>
  1340. <PRIN1 </ .X1000 1000>>
  1341. <PRINC ".">
  1342. <SET DEC <MOD .X1000 1000>>
  1343. <AND <L? .DEC 100> <PRINC <ASCII 48> ;"Char 0">>
  1344. <AND <L? .DEC 10> <PRINC <ASCII 48> ;"Char 0">>
  1345. <PRINC .DEC>>
  1346. <PRINTTYPE FLOAT ,FLOATPRINT>
  1347. <OVERFLOW <>>
  1348. <DEFINE TVSAVE (VER DBG "OPTIONAL" (MODIF 0))
  1349. #DECL ((DBG) <OR 'T FALSE> (VER MODIF) FIX)
  1350. <CHAR-INIT>
  1351. <AND .DBG <DBG>>
  1352. <FUMP .VER ,SAVE .MODIF>>
  1353. <SETG QSYMS <MAKESST "QSYMS" []>>
  1354. <DEFINE Q-SYMS ("AUX" QPOSS (TVA ,TVASS) (CURSPACE <ARESET ,ASPACE T <>>) (IDX 1) WHR)
  1355. #DECL ((TVA) ASYLUM (CURSPACE) <SPECIAL SPACE> (WHR IDX) FIX
  1356. (QPOSS) <VECTOR [REST <LIST [REST FIX]>]>)
  1357. <COND
  1358. (<SET QPOSS <DATA-AREAD .TVA <+ ,LUBLK ,QASKED> .CURSPACE>>
  1359. <PUT
  1360. ,QSYMS
  1361. 2
  1362. <MAPF ,ALVECTOR
  1363. <FUNCTION (X "AUX" CATNM)
  1364. #DECL ((X) LIST (CATNM) STRING)
  1365. <AND <EMPTY? .X> <SET IDX <+ .IDX 1>> <MAPRET>>
  1366. <SET CATNM <NTH <2 ,CATS> <- <* .IDX 2> 1>>>
  1367. <REPEAT ((Y .X))
  1368. #DECL ((Y) LIST)
  1369. <COND (<EMPTY? .Y> <RETURN>)
  1370. (<SET WHR <1 .Y>>
  1371. <PUT .Y
  1372. 1
  1373. <ASTRING .CURSPACE
  1374. .CATNM
  1375. "."
  1376. <UNPARSE <2 .Y>>>>
  1377. <PUT .Y 2 .WHR>
  1378. <SET Y <REST .Y 2>>)>>
  1379. <SET IDX <+ .IDX 1>>
  1380. <MAPRET !.X>>
  1381. .QPOSS>>)>>
  1382. <DEFINE GET.QUESTION ("OPTIONAL" (MULT <>) "AUX" SYMS SYMV)
  1383. #DECL ((SYMS) <OR FALSE SYMTABLE> (SYMV) <OR FALSE VECTOR>
  1384. (MULT) <OR FALSE 'T>)
  1385. <COND (<SET SYMS <Q-SYMS>>
  1386. <COND (<SET SYMV
  1387. <READARGS .SYMS
  1388. "Question "
  1389. '["" ""]
  1390. <COND (.MULT '["SYM" "MULT"]) ('["SYM"])>>>
  1391. <AND <NOT <EMPTY? <1 .SYMV>>> <1 .SYMV>>)>)
  1392. (<PERR "Can't get QUESTION SYMBOLS, Q-SYMS">)>>
  1393. <GDECL (SIMPLE-SPACE) SPACE>
  1394. <SETG MY-SIMPLE <MAKESST "SI1" []>>
  1395. <SETG HIS-SIMPLE <MAKESST "SI2" []>>
  1396. <SETG SIMTABLE <MAKEMST "SSS" [,MY-SIMPLE ,HIS-SIMPLE]>>
  1397. <SETG SIMTABLE? <>>
  1398. <GDECL (SIMTABLE MY-SIMPLE HIS-SIMPLE) SYMTABLE (SIMTABLE?) <OR ATOM FALSE>>
  1399. <DEFINE GET.SIMPLE ("OPTIONAL" (EVERYBODY? <>) "AUX" SYMV)
  1400. #DECL ((SYMV) <OR FALSE VECTOR> (EVERYBODY?) <OR ATOM FALSE>)
  1401. <COND (<NOT ,SIMTABLE?>
  1402. <LOAD.SIMPLE>)>
  1403. <COND (<SET SYMV
  1404. <READARGS <COND (.EVERYBODY? ,SIMTABLE)
  1405. (T ,MY-SIMPLE)>
  1406. "Question "
  1407. '["" ""]
  1408. <COND (.EVERYBODY? '["SYM" "MULT"]) ('["SYM"])>>>
  1409. <AND <NOT <EMPTY? <1 .SYMV>>> <1 .SYMV>>)>>
  1410. <DEFINE LOAD.SIMPLE ("AUX" (TVA ,TVASS)
  1411. (CURSPACE
  1412. <COND (<GASSIGNED? SIMPLE-SPACE>
  1413. <ARESET ,SIMPLE-SPACE T <>>)
  1414. (T <SETG SIMPLE-SPACE <AFIND 1>>)>)
  1415. (SISP ,SIMPLE-SPACE) SLIST (PLAYER ,PLAYER)
  1416. (SPLAYER ,SPLAYER))
  1417. #DECL ((CURSPACE) <SPECIAL SPACE> (TVA) ASYLUM
  1418. (SLIST) <LIST [REST TIME FIX FIX]> (SISP) SPACE (PLAYER) TIME
  1419. (SPLAYER) STRING)
  1420. <SET SLIST <DATA-AREAD .TVA ,SIMPLE-LIST .SISP>>
  1421. <PUT ,MY-SIMPLE
  1422. 2
  1423. <MAPR ,ALVECTOR
  1424. <FUNCTION (X "AUX" (Y <1 .X>)) #DECL ((X) <LIST [REST <PRIMTYPE WORD>]>)
  1425. <COND (<==? .Y .PLAYER>
  1426. <MAPRET <ASTRING .SISP
  1427. .SPLAYER
  1428. <ASCII 46> ;"Char ."
  1429. <UNPARSE <2 .X>>>
  1430. <3 .X>>)
  1431. (<MAPRET>)>>
  1432. .SLIST>>
  1433. <PUT ,HIS-SIMPLE
  1434. 2
  1435. <MAPR ,ALVECTOR
  1436. <FUNCTION (X "AUX" (Y <1 .X>)) #DECL ((X) <LIST [REST <PRIMTYPE WORD>]>)
  1437. <COND (<AND <TYPE? .Y TIME>
  1438. <N==? .Y .PLAYER>>
  1439. <MAPRET <ASTRING .SISP <MYSIXTOS .Y> <ASCII 46> <UNPARSE <2 .X>>>
  1440. <3 .X>>)
  1441. (<MAPRET>)>>
  1442. .SLIST>>
  1443. <SETG SIMTABLE? T>>
  1444. <DEFINE PRINT.QSCORE ("OPTIONAL" (PRINT? T) (VERBOSE? <>)
  1445. "AUX" (TVA ,TVASS) (QSP ,QSPACE) (PL 0) (PS 0.000)
  1446. (MX 0.000) SYML)
  1447. #DECL ((SYML) <OR FALSE <LIST [REST SYMBOL]>> (TVA) ASYLUM (QSP) SPACE
  1448. (PS MX) FLOAT (PL) FIX (PRINT? VERBOSE?) <OR ATOM FALSE>)
  1449. <COND
  1450. (<SET SYML <GET.QUESTION T>>
  1451. <CRLF>
  1452. <PROG MORE-ACT
  1453. ()
  1454. #DECL ((MORE-ACT) <SPECIAL ACTIVATION>)
  1455. <RESET ,INCHAN>
  1456. <MAPF <>
  1457. <FUNCTION (X "AUX" FROB QUES)
  1458. #DECL ((X) SYMBOL (QUES) VECTOR
  1459. (FROB) <VECTOR [2 <OR FIX FLOAT>]>)
  1460. <SET QUES <DATA-AREAD .TVA <2 .X> <ARESET .QSP T <>>>>
  1461. <COND (.PRINT?
  1462. <PQHEADER .QUES>
  1463. <COND (.VERBOSE? <PRINT-QUESTION .QUES>)
  1464. (T <PRINC <NTH .QUES <+ ,QQUES 1>>>)>
  1465. <CRLF>
  1466. <CRLF>
  1467. <SET FROB
  1468. <PQSCORE <NTH .QUES ,QSCORE> <NTH .QUES ,QVAL>>>
  1469. <CRLF>
  1470. <PRINC "------">)
  1471. (<SET FROB <GETQSCORE <NTH .QUES ,QSCORE>>>)>
  1472. <SET PL <+ .PL <1 .FROB>>>
  1473. <SET PS <+ .PS <2 .FROB>>>
  1474. <SET MX <+ .MX <* <NTH .QUES ,QVAL> <1 .FROB>>>>>
  1475. .SYML>
  1476. <AND <NOT <LENGTH? .SYML 1>>
  1477. <CRLF>
  1478. <PRINC "
  1479. Total for all questions...">
  1480. <CRLF>>
  1481. <OR <AND <LENGTH? .SYML 1> <OR .PRINT? .VERBOSE?>>
  1482. <PQSCORE 0 0 <VECTOR .PL .PS> .MX>>>)>>
  1483. <DEFINE PSCORES ("AUX" SYMV)
  1484. #DECL ((SYMV) <OR FALSE VECTOR>)
  1485. <SET-STATUS ,$SPSCORE>
  1486. <COND (<SET SYMV
  1487. <READARGS <P-SYMS> "for " '["" ""] '["SYM" "MULT"]>>
  1488. <PROG MORE-ACT
  1489. ()
  1490. #DECL ((MORE-ACT) <SPECIAL ACTIVATION>)
  1491. <RESET ,INCHAN>
  1492. <MAPF <>
  1493. <FUNCTION (X)
  1494. #DECL ((X) SYMBOL)
  1495. <PRINC "
  1496. Score for ">
  1497. <PRINC <1 .X>>
  1498. <INDENT-TO 19>
  1499. <PRINC
  1500. "Points Possible Average Questions">
  1501. <CRLF>
  1502. <PSCORE <CHTYPE <STRTOX <1 .X>> TIME>>
  1503. <CRLF>>
  1504. <1 .SYMV>>>)>>
  1505. <DEFINE GETBUF (bprompt "OPTIONAL" (SP ,QSPACE) qprompt SPROMPT "AUX" BUF)
  1506. #DECL ((qprompt bprompt) <SPECIAL STRING> (SPROMPT) <OR FALSE STRING>
  1507. (BUF) <SPECIAL BUFFER> (SP) SPACE)
  1508. <TERPRI>
  1509. <SET BUF <BUFMAKE 20>>
  1510. <AND <ASSIGNED? SPROMPT>
  1511. .SPROMPT
  1512. <ADDSTRING .BUF .SPROMPT>>
  1513. <REPEAT ()
  1514. <COND (,VERBOSE <GETSTR .BUF .CHRTABLE .bprompt " (BUFFER):">)
  1515. (<GETSTR .BUF .CHRTABLE .bprompt>)>
  1516. <COND (,BUFSAFE <AND <CONFIRM> <RETURN>>) (<RETURN>)>>
  1517. <ACOPY .SP <BUFTOS .BUF>>>
  1518. <DEFINE CONFIRM ()
  1519. <PRINC "[confirm]">
  1520. <AND <RESET ,INCHAN> <==? <TYI> <ASCII 27>>>>
  1521. <DEFINE PLAY-BALL ("AUX"
  1522. (TAILOR
  1523. <DATA-AREAD ,TVASS <+ ,LUBLK ,TAILOR> <ARESET ,SSPACE T <>>>)
  1524. SWITCHES (SEQUENCE ,SEQUENCE))
  1525. #DECL ((TAILOR) <OR FALSE <UVECTOR [3 WORD]>> (SEQUENCE SWITCHES) WORD)
  1526. <COND (<NOT .TAILOR>)
  1527. (T
  1528. <SET SEQUENCE <SETG SEQUENCE <SEQ-WORD .TAILOR>>>
  1529. <SET SWITCHES <SWITCH-WORD .TAILOR>>
  1530. <MAPF <>
  1531. <FUNCTION (BT SW)
  1532. #DECL ((BT) BITS (SW) ATOM)
  1533. <COND (<==? <GETBITS .SWITCHES .BT> #WORD *000000000000*>
  1534. <SETG .SW <>>)
  1535. (<SETG .SW T>)>>
  1536. ,BIT-TABLE
  1537. ,SWITCH-TABLE>
  1538. <COND (<0? <SETG TELEC-INTERVAL
  1539. <CHTYPE <GETBITS .SWITCHES ,RIGHT-HALF> FIX>>>)
  1540. (<TELECON ,TELEC-INTERVAL>)>
  1541. <SETG TECO-PROGRAM <MYSIXTOS <TECO-WORD .TAILOR>>>)>
  1542. <MAPF <>
  1543. <FUNCTION (BT "AUX" COD)
  1544. #DECL ((BT) BITS (COD) FIX)
  1545. <COND (<0? <SET COD <CHTYPE <GETBITS .SEQUENCE .BT> FIX>>>
  1546. <MAPLEAVE T>)
  1547. (<PRINC <NTH ,FROB-NAMES .COD>>
  1548. <EVAL <NTH ,FROBS .COD>>)>>
  1549. ,SEQ-BITS>
  1550. <COMMAND>>
  1551. <SETG SWITCH-TABLE
  1552. '[VERBOSE ALWAYS-ANSWER PNEWMAIL IGNORE-SIMPLE KEEPASKING BUFSAFE]>
  1553. <SETG BIT-TABLE
  1554. '[#BITS *430100000000*
  1555. #BITS *420100000000*
  1556. #BITS *410100000000*
  1557. #BITS *400100000000*
  1558. #BITS *370100000000*
  1559. #BITS *360100000000*]>
  1560. <SETG RIGHT-HALF <BITS 18 0>>
  1561. <MANIFEST RIGHT-HALF>
  1562. <DEFINE SAVE-TAILOR ("AUX" (SWITCH #WORD 0) (SEQ ,SEQUENCE)
  1563. (SSP <ARESET ,SSPACE T <>>))
  1564. #DECL ((SEQ SWITCH) WORD (SSP) SPACE)
  1565. <MAPF <>
  1566. <FUNCTION (BT SW)
  1567. #DECL ((BT) BITS (SW) ATOM)
  1568. <SET SWITCH <PUTBITS .SWITCH .BT <COND (,.SW 1) (0)>>>>
  1569. ,BIT-TABLE
  1570. ,SWITCH-TABLE>
  1571. <SET SWITCH
  1572. <PUTBITS .SWITCH
  1573. ,RIGHT-HALF
  1574. ,TELEC-INTERVAL>>
  1575. <DATA-APRINT ,TVASS
  1576. <+ ,LUBLK ,TAILOR>
  1577. .SSP
  1578. <AUVECTOR .SSP
  1579. .SEQ
  1580. .SWITCH
  1581. <CHTYPE <STRTOX ,TECO-PROGRAM> WORD>>>>
  1582. <DEFINE GET-SEQUENCE ("AUX" SEQ (S #WORD *000000000000*))
  1583. #DECL ((SEQ) <OR FALSE <VECTOR LIST>> (S) WORD)
  1584. <UNWIND
  1585. <PROG ()
  1586. <SETG COMPLETES " ,">
  1587. <COND (<SET SEQ
  1588. <READARGS ,SEQ-SYMS "will be " '["" ""] '["SYM" "MULT"]>>
  1589. <MAPF <>
  1590. <FUNCTION (BT SYM)
  1591. #DECL ((BT) BITS (SYM) <PRIMTYPE VECTOR>)
  1592. <SET S <PUTBITS .S .BT <2 .SYM>>>>
  1593. ,SEQ-BITS
  1594. <1 .SEQ>>
  1595. <SETG SEQUENCE .S>)>
  1596. <SETG COMPLETES " ">>
  1597. <SETG COMPLETES " ">>>
  1598. <SETG SEQ-SYMS
  1599. <MAKEBST "SS"
  1600. ["Answer"
  1601. 1
  1602. "Babble"
  1603. 2
  1604. "DDT.babble"
  1605. 3
  1606. "Grade"
  1607. 4
  1608. "Make"
  1609. 5
  1610. "Peek"
  1611. 6
  1612. "Print.score"
  1613. 7
  1614. "Quit"
  1615. 8
  1616. "Read.mail"
  1617. 9
  1618. "Status.of.question"
  1619. 10
  1620. "Summary.status.of.question"
  1621. 11
  1622. "Tiny.babble"
  1623. 12
  1624. "Twhois"
  1625. 13]>>
  1626. <DEFINE SET-STATUS (CODE "OPTIONAL" (FROB 0) "AUX" (PG ,PG) (TU ,TUV))
  1627. #DECL ((PG CODE FROB) FIX (TU) <UVECTOR [4 FIX]>)
  1628. <COND (<GASSIGNED? TINDEX>
  1629. <PUT-LOC <+ ,PEEK-START .PG ,TINDEX>
  1630. <PUT .TU 4 <PUTBITS .FROB <BITS 18 18> .CODE>>>)>>
  1631. <SETG TOBRKS " ,
  1632. ">
  1633. <SETG DBRKS ",./
  1634. ">
  1635. <GDECL (TOBRKS DBRKS) STRING>
  1636. <DEFINE BUFLEX (S "OPTIONAL" (BRKS ,TOBRKS) "AUX" (LL (<CHTYPE 0 TIME>))
  1637. (L .LL) (S1 .S))
  1638. #DECL ((S S1 BRKS) STRING (VALUE LL L) <LIST [REST TIME]>)
  1639. <REPEAT ()
  1640. <COND (<OR <EMPTY? .S1> <MEMQ <1 .S1> .BRKS>>
  1641. <AND
  1642. <N==? .S .S1>
  1643. <PUTREST
  1644. .L
  1645. <SET L
  1646. (<CHTYPE <STRTOX <SUBSTRUC
  1647. .S
  1648. 0
  1649. <- <LENGTH .S> <LENGTH .S1>>>> TIME>)>>>
  1650. <AND <EMPTY? .S1> <RETURN <REST .LL>>>
  1651. <SET S <REST .S1>>)>
  1652. <SET S1 <REST .S1>>>>
  1653. <SETG MAKETYPES
  1654. ["ZORK!"
  1655. "long answer"
  1656. "matching"
  1657. "M.C."
  1658. "T/F"
  1659. "ZORK!"
  1660. "simple"
  1661. "ZORK!"
  1662. "ranking"]>
  1663. ;"POINTER TO START OF USER BLOCK FOR USER FOO
  1664. SETG'S FOO TO THAT FIX"
  1665. <DEFINE UBLOCK (STR "OPTIONAL" (L ,LOSSTABLE) M)
  1666. #DECL ((STR) STRING (L) LIST (M) <OR LIST FALSE>)
  1667. <COND (<GASSIGNED? <PARSE .STR>> ,<PARSE .STR>)
  1668. (<SET M <MEMQ <CHTYPE <STRTOX .STR> TIME> .L>>
  1669. <SETG <PARSE .STR> <3 .M>>)>>
  1670. <SETG ERRFLAG <>>
  1671. <GDECL (ERRFLAG) <OR ATOM FALSE>>
  1672. <DEFINE HANDLE (EFRM "TUPLE" JUNK "AUX" VAL TLIST TTY-HEADER)
  1673. #DECL ((EFRM) FRAME (JUNK) TUPLE (VAL) FIX
  1674. (TLIST) <OR FALSE <LIST [REST TIME STRING FIX FIX]>>
  1675. (TTY-HEADER) IHEADER)
  1676. <COND
  1677. (,ERRFLAG
  1678. <PRINC "ERROR in error handler.">
  1679. <QUIT>)
  1680. (,CTRLG-KILL
  1681. <SETG ERRFLAG T>
  1682. <DISABLE <SET TTY-HEADER <GET ,INCHAN INTERRUPT!- >>>
  1683. <INT-LEVEL 100000>
  1684. <PRINC "*ERROR*">
  1685. <CRLF>
  1686. <MAPF <>
  1687. <FUNCTION (X)
  1688. <PRIN1 .X>
  1689. <CRLF>>
  1690. .JUNK>
  1691. <PRINC "ERROR during startup.">
  1692. <COND (<SEND-ERROR "STARTUP ERROR" .JUNK>
  1693. <VALRET ":GENJOB
  1694. :DISOWN
  1695. ">
  1696. <ENABLE .TTY-HEADER>
  1697. <OFF ,ERRH>)
  1698. (T
  1699. <CRLF>
  1700. <PRINC "TRIVIA suicided.">
  1701. <QUIT>)>)
  1702. (<AND <==? <LENGTH .JUNK> 3>
  1703. <==? <1 .JUNK> UNASSIGNED-VARIABLE!-ERRORS>
  1704. <==? <3 .JUNK> GVAL>>
  1705. <COND (<AND <GASSIGNED? LOSSTABLE>
  1706. <SET TLIST
  1707. <MEMQ <CHTYPE <STRTOX <SPNAME <2 .JUNK>>> TIME>
  1708. ,LOSSTABLE>>>
  1709. <SETG <2 .JUNK> <SET VAL <3 .TLIST>>>
  1710. <INT-LEVEL 0>
  1711. <ERRET .VAL .EFRM>)>)
  1712. (<OR <==? ,PLAYER <CHTYPE <STRTOX "TAA"> TIME>>
  1713. <==? ,PLAYER <CHTYPE <STRTOX "MARC"> TIME>>>
  1714. <SETG REP ,SAVEREP>
  1715. <SNAME "MARC">)>>
  1716. <DEFINE AFIXCHOMP ("AUX" TTY-HEADER)
  1717. #DECL ((TTY-HEADER) IHEADER)
  1718. <DISABLE <SET TTY-HEADER <GET ,INCHAN INTERRUPT!- >>>
  1719. <CLOSE <OPEN "PRINT" "_MSGS_;TRIVIA DEATH">>
  1720. <CRLF>
  1721. <PRINC "GROSS LOSSAGE">
  1722. <CRLF>
  1723. <PRINC "TRIVIA is down. Please tell other triviators to go away,
  1724. then use TVBUG to describe EXACTLY what you were doing.">
  1725. <CRLF>
  1726. <VALRET ":GENJOB
  1727. :DISOWN
  1728. :TVBUG
  1729. ">
  1730. <ENABLE .TTY-HEADER>
  1731. <OFF ,ERRH>
  1732. <LISTEN>>
  1733. <DEFINE SYSDOWN (DWNTIME) #DECL ((DWNTIME) FIX)
  1734. <COND (<L? .DWNTIME 0>
  1735. <CRLF>
  1736. <PRINC "ITS revived!">
  1737. <CRLF>
  1738. <AND <==? ,FLUSH SYSDOWN> <SETG FLUSH <>>>)
  1739. (T
  1740. <SETG FLUSH SYSDOWN>)>>
  1741. <AND <NOT <LOOKUP "COMPILE" <ROOT>>>
  1742. <NOT <LOOKUP "GLUE" <GET PACKAGE OBLIST>>>
  1743. <SETG ERRH <HANDLER <GET ERROR!-INTERRUPTS INTERRUPT> ,HANDLE>>
  1744. <SETG SYSDOWNH <HANDLER <EVENT "SYSDOWN" 1> ,SYSDOWN>>>
  1745. <DEFINE PLAY ("OPTIONAL" (PLAYER <>) "AUX" FOO TINDEX LUBLK)
  1746. #DECL ((PLAYER) <OR STRING FALSE> (FOO) <OR FALSE FIX> (TINDEX LUBLK) FIX)
  1747. <COND (<MEMQ <CHTYPE <XUNAME> TIME> ,WINNERS>
  1748. <COND (<NOT .PLAYER>
  1749. <SET PLAYER <READER '[] "as " "" '["LINE"] <>>>)>
  1750. <COND (<SET FOO <UBLOCK .PLAYER>>
  1751. <SET TINDEX <* 4 <4 <MEMQ <CHTYPE <STRTOX .PLAYER> TIME>
  1752. ,LOSSTABLE>>>>
  1753. <COND (<DHLOCK <+ .TINDEX ,PEEK-START ,PG>>
  1754. <DUNLOCK <+ ,TINDEX ,PEEK-START ,PG>>
  1755. <SETG TINDEX .TINDEX>
  1756. <SETG LUBLK .FOO>
  1757. <SETG PLAYER <CHTYPE <STRTOX .PLAYER> TIME>>
  1758. <PUT ,TUV 2 <CHTYPE ,PLAYER FIX>>
  1759. .PLAYER)
  1760. (T <PRINC "Already playing">)>)
  1761. (T <PRINC "You blew it, champ.">)>)>>
  1762. <DEFINE UNLOCK-PLAYER (NAME "AUX" (L <MEMQ <CHTYPE <STRTOX .NAME> TIME> <NEW-LOSS>>)
  1763. TINDEX TEMP)
  1764. #DECL ((L) <OR FALSE <LIST [REST TIME STRING FIX FIX]>> (NAME) STRING
  1765. (TINDEX TEMP) FIX)
  1766. <COND (.L
  1767. <SET TINDEX <4 .L>>
  1768. <SET TEMP <+ ,PEEK-START
  1769. <SETG PG <* .PG 1024>>
  1770. <* .TINDEX 4>>>
  1771. <COND (<0? <1 <GET-LOC .TEMP ,NTTUV>>>
  1772. <OR <DUNLOCK .TEMP>
  1773. <PUT-LOC .TEMP ![-1]>>
  1774. T)
  1775. (T
  1776. #FALSE ("ALREADY UNLOCKED"))>)
  1777. (#FALSE ("NOT A PLAYER"))>>
  1778. <DEFINE RDELETE (FOO "AUX" (DC ,TVASS) (S <ARESET ,ASPACE T <>>)
  1779. (ZORK <ALIST .S 1>) FWEEP)
  1780. #DECL ((FOO) <OR FIX <LIST [REST FIX]>> (DC) ASYLUM (S) SPACE (ZORK) LIST
  1781. (FWEEP) <OR <FALSE FIX> <PRIMTYPE VECTOR>>)
  1782. <COND (<TYPE? .FOO FIX>
  1783. <COND (<SET FWEEP <DATA-DELETE .DC .FOO>>)
  1784. (<==? <1 .FWEEP> 8>
  1785. <DATA-APRINT .DC .FOO .S .ZORK>
  1786. <DATA-DELETE .DC .FOO>)>)
  1787. (T
  1788. <MAPF <>
  1789. <FUNCTION (X) #DECL ((X) FIX)
  1790. <COND (<SET FWEEP <DATA-DELETE .DC .X>>)
  1791. (<==? <1 .FWEEP> 8>
  1792. <DATA-APRINT .DC .X .S .ZORK>
  1793. <DATA-DELETE .DC .X>)>>
  1794. .FOO>)>>