check.4 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. <COND (<GASSIGNED? $TSIMPLE>)
  2. (T
  3. <SETG ATYPE 2>
  4. <SETG AQUES 1>
  5. <SETG QAUTH 4>
  6. <SETG QQNUM 1>
  7. <SETG ANEXT 1>
  8. <SETG MNEXT 7>
  9. <SETG HIQNUM 5>
  10. <MANIFEST ATYPE AQUES QAUTH QQNUM ANEXT MNEXT HIQNUM>
  11. <NEWTYPE SPACE VECTOR>
  12. <NEWTYPE ASYLUM VECTOR>)>
  13. <FLOAD "AR2:TAA;SSNAME NBIN">
  14. <SETG QNUMS <REST <IUVECTOR 100 0> 100>>
  15. <GDECL (QNUMS) <UVECTOR [REST FIX]>>
  16. <DEFINE WINNING-ANSWER? (ANS PLAYER PROGRESS "AUX" TQUES (TVA ,TVASS) (TVS ,TVSPACE)
  17. (QNUM <AQUES .ANS>) (QNUMS ,QNUMS))
  18. #DECL ((PLAYER) TIME (PROGRESS QNUM) FIX (TQUES) <VECTOR FIX FIX FIX TIME>
  19. (ANS) <VECTOR FIX FIX TIME> (TVA) ASYLUM (TVS) SPACE
  20. (QNUMS) <UVECTOR [REST FIX]>)
  21. <COND (<1? <ATYPE .ANS>>
  22. <L=? <SET QNUM <QQNUM <DATA-AREAD .TVA .QNUM <ARESET .TVS>>>>
  23. .PROGRESS>)
  24. (<MEMQ .QNUM .QNUMS>)
  25. (<SET TQUES <DATA-AREAD .TVA <AQUES .ANS> <ARESET .TVS>>>
  26. <COND (<==? <QAUTH .TQUES> .PLAYER>
  27. <PUT <SETG QNUMS <BACK .QNUMS>> 1 .QNUM>
  28. T)>)>>
  29. <DEFINE ANS-CHAIN-CHECK (PLAYER IDX PROGRESS "AUX" (START <+ .IDX ,ANEXT>)
  30. (TVA ,TVASS)(TVS ,QSPACE))
  31. #DECL ((PLAYER) TIME (IDX PROGRESS START) FIX (TVA) ASYLUM (TVS) SPACE)
  32. <SETG QNUMS <REST ,QNUMS <LENGTH ,QNUMS>>>
  33. <REPEAT (ANS NEXT) #DECL ((ANS) <OR FALSE VECTOR>)
  34. <COND (<0? <SET START <CHTYPE <DATA-READW .TVA .START> FIX>>>
  35. <RETURN>)
  36. (<SET ANS <DATA-AREAD .TVA .START <ARESET .TVS>>>
  37. <COND (<WINNING-ANSWER? .ANS .PLAYER .PROGRESS>)
  38. (T
  39. <PRIN1 .START>
  40. <PRINC " ">
  41. <&1 .ANS>
  42. <CRLF>)>)
  43. (<PRINC "CAN'T READ ">
  44. <PRIN1 .START>
  45. <PRINC " ">
  46. <PRINC <NTH ,DATA-ERRORS <1 .ANS>>>
  47. <CRLF>)>>>
  48. <DEFINE SCHECK ("OPTIONAL" (CHECK? T) "AUX" (OUTCHAN <OPEN "PRINT" "TAA;CHECK OUTPUT">))
  49. #DECL ((CHECK?) <OR ATOM FALSE> (OUTCHAN) <SPECIAL CHANNEL>)
  50. <DO-CHECK .CHECK?>
  51. <CLOSE .OUTCHAN>
  52. ZORK>
  53. <DEFINE DO-CHECK ("OPTIONAL" (CHECK? T) "AUX" (TVA ,TVASS))
  54. #DECL ((CHECK?) <OR ATOM FALSE> (TVA) ASYLUM)
  55. <REPEAT ((L ,LOSSTABLE) PROGRESS PLAYER IDX)
  56. #DECL ((L) <LIST [REST TIME STRING FIX FIX]>
  57. (PROGRESS) FIX (PLAYER) TIME (IDX) FIX)
  58. <SSNAME <SET PLAYER <1 .L>>>
  59. <SET IDX <3 .L>>
  60. <SET PROGRESS <GETLASTQ .IDX>>
  61. <6PRINC .PLAYER>
  62. <PRINC " ">
  63. <PRIN1 .PROGRESS>
  64. <PRINC " ">
  65. <PDSKDATE <DATA-READW .TVA <+ .IDX ,LASTIN>>>
  66. <CRLF>
  67. <COND (.CHECK?
  68. <SCORE-CHECK .PLAYER .IDX>
  69. <QASKED-CHECK .PLAYER .IDX>
  70. <ANS-CHAIN-CHECK .PLAYER .IDX .PROGRESS>
  71. <MAIL-CHAIN-CHECK .PLAYER .IDX>)>
  72. <COND (<EMPTY? <SET L <REST .L 4>>><RETURN>)>>>
  73. <DEFINE SCORE-CHECK (PLAYER IDX "AUX" SCORE)
  74. #DECL ((PLAYER) TIME (IDX) FIX (SCORE) ANY)
  75. <COND (<SET SCORE <DATA-AREAD ,TVASS <+ .IDX ,SCORE> <ARESET ,SSPACE>>>
  76. <COND (<AND <TYPE? .SCORE UVECTOR>
  77. <==? <UTYPE .SCORE> UVECTOR>
  78. <==? <LENGTH .SCORE> 15>>)
  79. (<PRINC "SCORE">
  80. <PRINC " ">
  81. <PRINC .SCORE>)>)
  82. (<PRINC "SCORE">
  83. <PRINC " ">
  84. <PRINC .SCORE>)>>
  85. <DEFINE QASKED-CHECK (PLAYER IDX "AUX" QASKED)
  86. #DECL ((PLAYER) TIME (IDX) FIX (QASKED) ANY)
  87. <COND (<SET QASKED <DATA-AREAD ,TVASS <+ .IDX ,QASKED> <ARESET ,SSPACE>>>
  88. <COND (<AND <TYPE? .QASKED VECTOR>
  89. <==? <LENGTH .QASKED> 15>
  90. <MAPF ,AND?
  91. <FUNCTION (X)
  92. <TYPE? .X LIST>>
  93. .QASKED>>)
  94. (<PRINC "QASKED">
  95. <PRINC " ">
  96. <PRINC .QASKED>)>)
  97. (<PRINC "QASKED">
  98. <PRINC " ">
  99. <PRINC .QASKED>)>>
  100. <GDECL (TVASS) ASYLUM (TVSPACE1) SPACE>
  101. <DEFINE MAIL-CHAIN-CHECK (PLAYER IDX "AUX" (PROGRESS #WORD *0*) (START <+ .IDX ,MNEXT>)
  102. (TVA ,TVASS) (TVS ,QSPACE))
  103. #DECL ((PLAYER) TIME (IDX) FIX (PROGRESS) <OR WORD <FALSE WORD>>
  104. (START) FIX (TVA) ASYLUM (TVS) SPACE)
  105. <REPEAT (MAIL NEXT) #DECL ((MAIL) <OR VECTOR FALSE>)
  106. <COND (<0? <SET START <CHTYPE <DATA-READW .TVA .START> FIX>>>
  107. <RETURN>)
  108. (<SET MAIL <DATA-AREAD .TVA .START <ARESET .TVS>>>
  109. <COND (<SET PROGRESS <WINNING-MAIL? .MAIL .PROGRESS>>)
  110. (T
  111. <PRIN1 .START>
  112. <PRINC " ">
  113. <&1 .MAIL>
  114. <CRLF>
  115. <SET PROGRESS <1 .PROGRESS>>)>)
  116. (<PRINC "CAN'T READ ">
  117. <PRIN1 .START>
  118. <PRINC " ">
  119. <PRINC <NTH ,DATA-ERRORS <1 .ANS>>>
  120. <CRLF>)>>>
  121. <DEFINE WINNING-MAIL? (MAIL PROGRESS "AUX" (TP <4 .MAIL>))
  122. #DECL ((MAIL) <VECTOR [4 ANY]> (PROGRESS) WORD (TP) ANY)
  123. <COND (<AND <TYPE? <3 .MAIL> TIME>
  124. <TYPE? <4 .MAIL> WORD>
  125. <TYPE? <1 .MAIL> STRING>
  126. <G? <CHTYPE .TP FIX> <CHTYPE .PROGRESS FIX>>>
  127. .PROGRESS)
  128. (T <CHTYPE (.TP) FALSE>)>>