clum.mud 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. " CLUM MUD "
  2. ;"THIS FILE CONTAINS RANDOM MUDDLE SUPPORT FOR THE CLU COMPILER."
  3. <USE "JOBS">
  4. <USE "NOW">
  5. <USE "DATIME">
  6. <USE "DDT">
  7. <SETG :TIME ,TIME>
  8. <DEFINE :CLU_VERSION () .CLU-VERSION>
  9. <SETG :XUNAME ,XUNAME>
  10. <SETG :REALSTRING ,UNPARSE>
  11. <SETG :REALVAL$SUB ,->
  12. <SET :REALVAL$SUB$TYPE :REALVAL>
  13. <DEFINE :SET_DDSKO (CHAN) <SET OUT .CHAN> DONE>
  14. <DEFINE :NO_DDSKO () <UNASSIGN OUT> DONE>
  15. <DEFINE CLU (FS "AUX" IN OUT)
  16. #DECL( (IN OUT) <SPECIAL CHANNEL> )
  17. <AND <TYPE? .FS ATOM> <SET FS <PNAME .FS>>>
  18. <:CLU .FS>>
  19. <OR <BOUND? PARSER-NAME> <SET PARSER-NAME "PARSE">>
  20. <DEFINE :PARSE (FS ES "AUX" PRE PRE1)
  21. #DECL( (FS ES PRE PRE1) STRING )
  22. <SET PRE <REST <MEMBER ":" .FS>>>
  23. <SET PRE <SUBSTRUC .PRE 0 <- <LENGTH .PRE>
  24. <LENGTH <MEMBER " " .PRE>>>>>
  25. <SET PRE1 <SUBSTRUC .PRE>>
  26. <SET ES <SUBSTRUC .ES>>
  27. <PUT <MEMBER ";" .PRE> 1 !"/>
  28. <PUT <MEMBER ";" .ES> 1 !"/>
  29. <PUT <MEMBER " " .ES> 1 !".>
  30. <RUN .PARSER-NAME
  31. <STRING "\""
  32. .FS
  33. "\" "
  34. .PRE
  35. ".CLUPAR "
  36. .PRE
  37. ".CLUTAB >"
  38. .ES
  39. "
  40. ">
  41. <SNAME>
  42. <FUNCTION ("TUPLE" X) <PRINT .X> <LISTEN>>
  43. <>
  44. "CLU">
  45. <COND (<==? .OUTCHAN ,OUTCHAN> <GET-TTY>)>
  46. <:GLOBALS$CREATE <STRING .PRE1 " CLUTAB"> <STRING .PRE1 " CLUPAR">>>
  47. <DEFINE :STAT_FILE ("OPTIONAL" (EL ())) .STAT-FILE>
  48. <SET STAT-FILE "CLU;CLU STAT">
  49. <DEFINE :FUDGE (E)
  50. <COND (<MONAD? .E> .E)
  51. (<AND <TYPE? .E VECTOR>
  52. <1? <LENGTH .E>>
  53. <TYPE? <NTH .E 1> LIST>
  54. <==? <LENGTH <NTH .E 1>> 2>
  55. <TYPE? <NTH <NTH .E 1> 1> FIX>>
  56. <VECTOR "" <:FUDGE <NTH .E 1>>>)
  57. (T <MAPR <>
  58. <FUNCTION (R)
  59. <PUT .R 1 <:FUDGE <NTH .R 1>>>>
  60. .E>
  61. .E)>>
  62. <DEFINE :IN_SYSTEM ("OPTIONAL" E) #FALSE ()>
  63. <DEFINE :TYPE_CHECKING ("OPTIONAL" E) .DO-TC>
  64. <SETG :TYPE_CHECKING$TYPE :BOOL>
  65. <DEFINE :GET_DU_TAB ("OPTIONAL" E) .DU_TAB>
  66. <DEFINE :GET_IDNTAB () .IDNTAB>
  67. <DEFINE :GET_STRTAB () .STRTAB>
  68. <DEFINE :SET_IDNTAB (S) <SET IDNTAB .S>>
  69. <DEFINE :SET_STRTAB (S) <SET STRTAB .S>>
  70. <DEFINE :TRACING () .TRACING>
  71. <SET TRACING <>>
  72. <SET CLU-VERSION "?">
  73. <SET CLU-DATE "?">
  74. <DEFINE SAVE-COMPILER (VERSION-NAME
  75. "OPTIONAL" (GC-FLAG T) (DIRECTORY "CLU")
  76. "AUX" MSG OSNAME Y)
  77. #DECL ((VALUE VERSION-NAME DIRECTORY MSG OSNAME) STRING)
  78. #DECL ((Y) <OR CHANNEL FALSE>)
  79. <SET CLU-VERSION
  80. <REPEAT (L S N C)
  81. #DECL ((L) LIST (S) STRING (N) FIX (C) CHARACTER)
  82. <SET S .VERSION-NAME>
  83. <SET N <LENGTH .S>>
  84. <COND (<G? .N 1>
  85. <SET C <NTH .S .N>>
  86. <COND (<OR <==? .C !"L> <==? .C !"X>>
  87. <SET S <SUBSTRUC .S 0 <- .N 1>>>)>)>
  88. <SET L <LPARSE .S>>
  89. <COND (<OR <N==? <LENGTH .L> 1> <NOT <TYPE? <1 .L> FIX FLOAT>>>
  90. <SET VERSION-NAME
  91. <ERROR BAD-FORMAT-ERRET-NEW-VERSION-NAME!-ERRORS
  92. .VERSION-NAME
  93. SAVE-COMPILER>>)
  94. (ELSE <RETURN .VERSION-NAME>)>>>
  95. <SET CLU-DATE <:NICE_DATE>>
  96. <SET MSG
  97. <STRING "CLU Compiler Version "
  98. .VERSION-NAME
  99. " ("
  100. .CLU-DATE
  101. ")">>
  102. <SET OSNAME <SNAME>>
  103. <SNAME "">
  104. <SET PROCLIST ()> ;"SAVE SOME SPACE"
  105. <SET IDNTAB NONE>
  106. <SET STRTAB NONE>
  107. <COND (<N=? <FSAVE <STRING .DIRECTORY "; CLUSAV " .VERSION-NAME>
  108. .GC-FLAG>
  109. "RESTORED">
  110. <SNAME .OSNAME>
  111. <SET MSG
  112. <STRING "CLU Compiler Version " .VERSION-NAME " Saved.">>)
  113. (ELSE
  114. <SET Y <OPEN "READ" "MESSAG" .VERSION-NAME "DSK" "CLU">>
  115. <AND .Y <FILECOPY .Y .OUTCHAN> <CLOSE .Y>>
  116. <BLOAT 0 0 0 0 0 0 0 100> ;" SET FREMIN LOW FOR ACCURATE BLOAT"
  117. <BLOAT 52000 0 0 0 0 0 0 100> ;" 52000 SHOULD LEAVE 50K FOR PURE"
  118. <BLOAT 0 0 0 0 0 0 0 52000>)> ;" NOW SET FREMIN NICE AND HIGH"
  119. .MSG>
  120. <DEFINE :NICE_DATE ("AUX" DAT)
  121. #DECL ((DAT) <LIST FIX FIX FIX> (VALUE) STRING)
  122. <SET DAT <DATE>>
  123. <STRING <UNPARSE <2 .DAT>>
  124. "/"
  125. <UNPARSE <3 .DAT>>
  126. "/"
  127. <UNPARSE <1 .DAT>>>>
  128. <DEFINE :NICE_TIME ("AUX" DAT)
  129. #DECL ((DAT) <LIST FIX FIX FIX> (VALUE) STRING)
  130. <SET DAT <RTIME>>
  131. <STRING <PR-FIX-2 <1 .DAT>>
  132. ":"
  133. <PR-FIX-2 <2 .DAT>>>>
  134. <DEFINE PR-FIX-2 (X "AUX" S)
  135. #DECL ((X) FIX (VALUE S) STRING)
  136. <SET S <UNPARSE .X>>
  137. <COND (<L? .X 10> <STRING "0" .S>) (ELSE .S)>>