home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / games / vmsnet / dungeon / part20 < prev    next >
Encoding:
Internet Message Format  |  1992-02-23  |  47.9 KB

  1. Path: uunet!haven.umd.edu!darwin.sura.net!gatech!nntp.msstate.edu!emory!dragon.com!cts
  2. From: cts@dragon.com
  3. Newsgroups: vmsnet.sources.games
  4. Subject: Dungeon Part 20/30
  5. Message-ID: <1992Feb24.013134.813@dragon.com>
  6. Date: 24 Feb 92 06:31:34 GMT
  7. Organization: Computer Projects Unlimited
  8. Lines: 1177
  9.  
  10. -+-+-+-+-+-+-+-+ START OF PART 20 -+-+-+-+-+-+-+-+
  11. X<1E0001F1B5000201F10201EE0201EF0201ED0201E70202EA0202D90201E60201DB0204FCF6
  12. X<1E0001F1D3000201FBFBFBFC0201FD0201FDF70201ED0201F90201F9F9FDFE0201F2F4EE83
  13. X<1E0001F1F1000201FC0201F90201FA0201F70201FC0201F70202FA0201F9DF0201F9F90244
  14. X<1E0001F20F0002D29CB90201FC0201F60205FCDFFA0E0B090B03000201F70205FCFC0201B7
  15. X<1E0001F22D00F9F70201F10201FC0201F60204FC0202E00201F7F90201FC0201F90201F817
  16. X<1E0001F24B000201FA0201F40201F8F20201FE0201F8F9F40214FC0201F90201FA0201F7D5
  17. X<1E0001F269000201F70201F1E6FA0201F7E30201FC0201F4F2D70E04093E03000201F302C8
  18. X<1E0001F2870001F90201FA0201F70201E30201FC0201F70201F20E04092F01000201F4025F
  19. X<1E0001F2A50001F70201E30201F3FC06BF00960D000001BD0DBC000100000006564150504D
  20. X<1E0001F2C3004C490DBE0084F5010006564150504C49C2B902080002A7F70202FC0201E870
  21. X<1E0001F2E1000201F0F0ED0202EF0201F80201F50201F30208019300020FF00201F50201C8
  22. X<1E0001F2FF00F80201FC0201FAE80201F70201FCE50201F70201FCDD0203FCE80209FC026E
  23. X<1E0001F31D0001E80204FC0202E40201F60201F60203FC0201F40203FCE80203FCE802033D
  24. X<1E0001F33B00FCE80203FCFDEB0203FCE80203FCE80204FC0201ED0201FAE1F70203FCE567
  25. X<1E0001F359000201F70201FC0201E90203FCE40201F70201FC0201F8E10201F70203FCE516
  26. X<1E0001F377000201F70201FCE50201F70201FC0201FE0203F6F7FA0204FD0201F00201FAC0
  27. X<1E0001F39500E1C2B90201F70203FC0203F90203F60203FA0201F60201EF0201F50201F52F
  28. X<1E0001F3B3000201F20201F90203FC0201EFE70201F70201FC0201D30201F60201F70201AB
  29. X<1E0001F3D100FC0201F50201ED0201FAEB0201FB0201F70201FE0201F60201F0FB0203FC70
  30. X<1E0001F3EF000201EE0201FAEE0201F70204FC0201F10201F10201DF0201F70201FCE4027E
  31. X<1E0001F40D0001F70201FCDFF70201E80203FC0201F10201DF0201F70201FCE40201F70278
  32. X<1E0001F42B0001FCD3F70201EB0203FC0201ED0204E1F20201F70201FCF40201F70201FC5D
  33. X<1E0001F44900DA0201DF0201F70201FC0201F60203FCC4B90201ED0E1B09F601000201F765
  34. X<1E0001F46700021BFCF50201F70201FC0201F60201F70201FCD40201F70204FC0201F002C8
  35. X<1E0001F4850001FA0201F10201F10201F9FB0202B00201FAF00201F5FA0201EF0201FCFA10
  36. X<1E0001F4A3000201F70203FC0201F6FDF0FC0204FC000201EB0203FCE40201F70201FC029D
  37. X<1E0001F4C10001F20201F70201FC0201F80201F70201FC0201EE0201F7F4E80203FC020181
  38. X<1E0001F4DF00F60201F70201FC0201F0E50201F70201FCF6F7E10203FCFE0203F6F502048B
  39. X<1E0001F4FD00FC0201F8D10201F70201FD0201FC0201FA0201EE0201E80203FC000201F062
  40. X<1E0001F51B000201F5C3B90201F60205EF0201F30201F70201FC0201F70201FC0201F3028E
  41. X<1E0001F5390001F20E1009AD02000201F70210F90201E70201F70205FC0201F50E0409C625
  42. X<1E0001F5570002000201F40207FC0201C30201EE0201F20201E3E30201F4F7F70201FC023C
  43. X<1E0001F5750001F30201E80201FB0201F60201E20201F70201FC0201F4F70201FC0201F5DE
  44. X<1E0001F593000201FC0201F40204FC0201F7E7EB0203FC0201FA0203FE0201FCFBFCFCFBA7
  45. X<1E0001F5B100FC0204F90203FA0201FB0201F70201FC0201EDE70201DE0201FC0201F9FB9C
  46. X<1E0001F5CF00E70201FC0201F50201F70201FC0201FA0201F7C3B90204FCFF0203F6F502E0
  47. X<1E0001F5ED0003FCFD0203F6FE000201000203F6E00201F70201FCF80203FCE10201F7025D
  48. X<1E0001F60B0001FCF80204FC0201FA0201DE0201FC0201F70201F70201FC0201F50201FA24
  49. X<1E0001F629000201FA0201E8F10201F70201FC0201F00201FAD30202F70203FC0201F0E45A
  50. X<1E0001F647000201F60201F70205FCE30201DA0E1E099703000201F70205F90201F7020128
  51. X<1E0001F66500FC0201F10201F70201FC0201F40203FC0201E80204FC0201E70201F70201D1
  52. X<1E0001F68300FC0201F90E0709F700000201EB03CB02FC0201E90205FCFD000201F80201B7
  53. X<1E0001F6A100EFE30201F125B90201EDFA0201F70202DB0201F70201FC0201F60202FB0EE4
  54. X<1E0001F6BF000A09D50000FE0E1009D100009406BF001813000001BD0DBC0001000000063C
  55. X<1E0001F6DD00434C4F434B440DBE009C08020006434C4F434B4419B90204000213F7020150
  56. X<1D0001F6FB00FDE8F70201FEFE0201FEFC0201F3F9FB06BF005000000001BD0DBC000192
  57. X<1E0001F71B000654524F4C4C500DBE00EC0802000654524F4C4C5090B90208000282F70278
  58. X<1E0001F7390001FC0201DE0201F00201FB0201F50201FBF80201ED0201FC0201F90201F90D
  59. X<1E0001F757000201FC0201F70201F9D50201F60201FC0201F80201FAE30201F6ED0201FC11
  60. X<1E0001F775000203F80201F70201DA0201F50201F7E3FAF60201F7EB0201F70201FC0201FB
  61. X<1E0001F79300F20201F70201FC0201F50201FB0201F00201E80201F60201F70201FC0201A3
  62. X<1D0001F7B100F6E10201FCF20201F70201FC0201FFFD06BF007302000001BD0DBC0001B8
  63. X<1E0001F7D100064359434C4F500DBE00600B0200064359434C4F506AB90204000281F7029C
  64. X<1E0001F7EF0001FC0201E40202D40201FD0201F8F1BD0201FCEC0201F10201FC0201F802BB
  65. X<1E0001F80D0001FC0201F30201F00201F80201EB0201FC0201F5FA0201F80201FCBD020162
  66. X<1E0001F82B00FC0205F40201FB0208F00201FE0201F9E1F5F60E0409BC00000201F5F6F64B
  67. X<1E0001F84900D90E0509B60000FD06BF003B02000001BD0DBC0001000000065448494546F8
  68. X<1E0001F86700500DBE009C0D020006544849454650C3B902040002B4F70201FC0201DE02E5
  69. X<1E0001F8850001EA0201F50201F80201ED0201FC0201F70201ED0201FC0201F60201FAE1D7
  70. X<1E0001F8A300FE0201ECF20202F4FB0201F30201D1E90201EFFB0201FEE0FA0201FC0202F6
  71. X<1E0001F8C100FA0201F60201EAF70201FC0201F90201FA0201F5D0DF0201FC0201F70201B6
  72. X<1E0001F8DF00EB0201F90201F5DF0201B70201FC0201F70201F70201FC0201CF0201F402D5
  73. X<1E0001F8FD0001F7DF0201FC0201FAED0201F6FBF7FB0201F40201FC0201D90201F4F7F98D
  74. X<1E0001F91B00DFF50201F70201D90201F70201FC0201E70201F5EF0201FC0201E9F9020172
  75. X<1E0001F93900FC03B900FD06BF009704000001BD0ABC000100000003414E440ABE00341231
  76. X<1E0001F95700020003414E4406B9000202F7F606BF001300000001BD0DBC000100000006A3
  77. X<1E0001F97500494E49524E440DBE004812020006494E49524E4407B9000203FEF8FF06BF3F
  78. X<1E0001F994000B00000001BD0CBC0001000000054954494D450CBE00541202000549544928
  79. X<1C0001F9B2004D4515B9000203F70201F8F40201F5F40201F5F40201F5FF06BF005702
  80. X<1E0001F9D10001BD0EBC000100000007474554555345520EBE00AC1202000747455455534D
  81. X<1B0001F9EF0045520BB9000206EFEDFBFCFDF8FF06BF003900000001BD0ABC00014F
  82. X<1E0001FA0D0003524E440ABE00E812020003524E4406B9000204F7EE06BF001B00000001BD
  83. X<1E0001FA2B00BD09BC0001000000024F5209BE0004130200024F5206B9000202F7F906BF9B
  84. X<1E0001FA4A001000000001BD0DBC00010000000653595354454D0DBE001413020006535974
  85. X<1D0001FA68005354454D0DB9000201ECF70201F50201F8FF06BF003100000001BD0DBC2C
  86. X<1E0001FA8600010000000657495A4152440DBE00481302000657495A4152440CB9000213B0
  87. X<1E0001FAA400F7FDF8FCEEFCE5FB06BF004E00000001BD0ABC000000000003584F520ABE36
  88. X<1E0001FAC40014020003584F5214B80000140200092E20424C414E4B202E0F00000001BD55
  89. X<000001FC000003
  90. X<000001FC00FA09
  91. X<00000000000000
  92. $ CALL UNPACK DUNGEON.HEX;1 1078712267
  93. $ create 'f'
  94. X        .TITLE  DEHEX
  95. X        .SBTTL  Stuart Hecht and Eric McQueen, Stevens Inst of Technology
  96. X
  97. X        .LIBRARY /SYS$LIBRARY:STARLET/
  98. X        .LIBRARY /SYS$LIBRARY:LIB/
  99. X        .IDENT   /1.1.02/
  100. X;++
  101. X;1.1.01
  102. X;Updated March 9, 1898, by Susan Webb and Jerry Holliday of Lockheed Aircraf
  103. Vt
  104. X;Systems Co, Marietta, GA, to work for files longer than 64K.  Added lines
  105. X;marked with ";JH".
  106. X;--
  107. X;++
  108. X;1.1.02
  109. X;Updated March 15, 1989, by Tom Allebrandi of Advanced Computer Consulting,
  110. X;Inc, Charlottesville, VA. (ta2@acci.com)
  111. X;
  112. X;On March 14, 1989, I pulled this file and VMSMIT.HEX from Columbia via
  113. X;KERMSRV. After compiling, this utility would not decode the VMSMIT file.
  114. X;The problem was the 1.1.01 fix noted above.
  115. X;
  116. X;I have removed the 1.1.01 fix and coded it so that it works correctly.
  117. X;My changes are marked ";ta2"
  118. X;--
  119. X
  120. X;++
  121. X;This will take a set hexidecimal strings created by the hexify program and
  122. X;  recreate the source file(s).
  123. X;--
  124. X
  125. X        .EXTRN  LIB$GET_INPUT
  126. X        .EXTRN  LIB$PUT_OUTPUT
  127. X        .EXTRN  DSC$K_DTYPE_T
  128. X        .EXTRN  DSC$K_CLASS_S
  129. X        .EXTRN  SS$_NORMAL
  130. X        .MCALL  $FAB                            ; RMS calls
  131. X        .MCALL  $RAB
  132. X        .MCALL  $CLOSE
  133. X        .MCALL  $CONNECT
  134. X        .MCALL  $CREATE
  135. X        .MCALL  $DISCONNECT
  136. X        .MCALL  $GET
  137. X        .MCALL  $OPEN
  138. X        .MCALL  $WRITE
  139. X        .MCALL  $RAB_STORE
  140. X        .MCALL  $FAB_STORE
  141. X
  142. X        .SBTTL  Definitions of symbols
  143. X
  144. XDWRLUN  =1                              ; Disk read LUN
  145. XDWWLUN  =5                              ; Disk write LUN
  146. XTRUE    =1                              ; True
  147. XFALSE   =0                              ; False
  148. XKNORMAL =0                              ; No error
  149. XLEFTBYTE=`5EO377*`5EO400                    ; All ones in left byte
  150. XHEXOFFSET=7                             ; Offset to get to 'A from '9+1
  151. XCR      =13.                            ; Carriage return
  152. XLF      =10.                            ; Line feed
  153. XMAX.MSG =256.                           ; Maximum number of chars from XK
  154. XRCV.SOH =`5EA/:/                          ; Receive start of packet
  155. XRCV.EOL =13.                            ; End of line character
  156. XMSB     =128.                           ; Most significant bit
  157. X; Packet types currently supported
  158. XPKDATA  =00                             ; Data packet code
  159. XPKRFM   =255.                           ; Record format
  160. XPKRAT   =254.                           ; Record attributes
  161. XPKMRS   =253.                           ; Maximum record size
  162. XPKALQ   =252.                           ; File length(blocks)
  163. XPKFILNM =251.                           ; File name
  164. XPKEOF   =250.                           ; End of task file
  165. X;
  166. X
  167. X
  168. X        .SBTTL  RMS Data
  169. X
  170. X        .PSECT  $PLIT$,LONG
  171. X
  172. XDEFALT: .ASCIZ  'SYS$DISK:'             ; System default.
  173. XDEFALN  =.-DEFALT                       ; Size of the default device.
  174. X        .EVEN
  175. X
  176. X        .SBTTL  Data
  177. X
  178. X
  179. XM$FILE: .BYTE   CR,LF
  180. X        .ASCII  'Please type the file name: '
  181. XL$FILE= .-M$FILE
  182. X
  183. XM$CRLF: .BYTE   CR,LF                   ; Data for carriage return/line feed
  184. XL$CRLF  =.-M$CRLF
  185. X
  186. X;M$AK:
  187. X;       .ASCII  'Y'                     ; Data for aknowledged
  188. X
  189. XM$NAK:
  190. X        ;.ASCII 'N'                     ; Data for not aknowledged
  191. X        .ASCII  'BAD CHECK SUM'         ; Data for not aknowledged
  192. XL$NAK   =.-M$NAK
  193. X
  194. XM$UN:
  195. X        ;.ASCII 'U'                     ; Data for unrecognized code
  196. X        .ASCII  'UNKNOWN BLOCK TYPE'    ; Data for unrecognized code
  197. XL$UN    =.-M$UN
  198. X
  199. XM$RMS:  .BYTE   CR,LF,LF
  200. X        .ASCII  'RMS ERROR'
  201. XL$RMS   =.-M$RMS
  202. X
  203. XM$REC:  .BYTE   CR,LF,LF
  204. X        .ASCII  'RECEIVE ERROR - Try again.'
  205. XL$REC   =.-M$REC
  206. X        .EVEN
  207. X
  208. X
  209. X        .SBTTL  Storage locations
  210. X
  211. X        .PSECT  $OWN$,LONG
  212. X        .ALIGN  LONG
  213. X
  214. XMSGDSC: .BLKW   1                       ; Data block for terminal output
  215. X        .BYTE   DSC$K_DTYPE_T
  216. X        .BYTE   DSC$K_CLASS_S
  217. XADDR:   .ADDRESS ADDR
  218. XLNGADR: .BLKL   1
  219. X
  220. XINP_STR_D:                              ; Key string desciptor
  221. X         .BLKL  1
  222. XINP_BUF: .ADDRESS ADDR
  223. X
  224. XINP_STR_LEN: .BLKL 1                    ; Key string length
  225. X
  226. XWTCOUNT: .BLKL  1                       ; Number of characters written
  227. XLENGTH: .BLKL   1                       ; Length of data portion of packet
  228. XOPENFL: .BLKL   1                       ; Tells us if the file is open
  229. X
  230. XCHKSUM: .BLKL   1                       ; Checksum for the line
  231. XADDRESS: .BLKL  1                       ; Current address
  232. XALQLOC: .BLKW   2                       ; Storage for allocation
  233. X
  234. XOUT.N:  .BLKB   28.                     ; Space for output file name
  235. XOUT.L   =.-OUT.N                        ; Length of output file name
  236. X
  237. XINP.N:  .BLKB   28.                     ; Space for input file name
  238. XINP.L   =.-INP.N                        ; Length of input file name
  239. X
  240. X        .EVEN                           ; Need to start RDBUF on even bounda
  241. Vry
  242. XRDBUF:  .BLKB   MAX.MSG                 ; XK read buffer
  243. X        .EVEN
  244. XWTBUF:  .BLKB   512.                    ; Disk write buffer
  245. X        .EVEN
  246. X
  247. X
  248. X
  249. X        .SBTTL  RMS Data structures
  250. X        .ALIGN  LONG
  251. X
  252. XRDFAB:: $FAB    DNA=DEFALT,DNS=DEFALN,FNA=INP.N,FNS=INP.L,-
  253. X                LCH=DWRLUN,FAC=GET,SHR=GET
  254. X
  255. X        .ALIGN  LONG
  256. XRDRAB:: $RAB    FAB=RDFAB,RAC=SEQ ; Beginning of RAB block.
  257. X
  258. X        .ALIGN  LONG
  259. XWTFAB:: $FAB    DNA=DEFALT,DNS=DEFALN,FNA=OUT.N,FNS=OUT.L,-
  260. X                LCH=DWWLUN,FAC=PUT,SHR=NIL
  261. X
  262. XWTRAB:: $RAB    FAB=WTFAB,RAC=SEQ ; Beginning of RAB block.
  263. X
  264. X
  265. X        .SBTTL  Start of program
  266. X
  267. X        .PSECT  $CODE$,LONG,EXE
  268. X
  269. XDEHEX:: .WORD   `5EM<>
  270. XFILE:   MOVAB   M$FILE,R11              ; Output the get file name message
  271. X        MOVZBL  #L$FILE,R12
  272. X        MOVAB   INP.N,R10               ; Get the file name
  273. X        MOVZBL  #INP.L,R1
  274. X        JSB     READ
  275. X        TSTL    R0                      ; Check for no input
  276. X        BEQL    FILE                    ; Go back and get some
  277. X;Open the file
  278. X        MOVAL   RDFAB,R1                ; Put address of FAB into R1.
  279. X        $FAB_STORE FAB=R1,FNS=R0        ; Tell RMS file name length
  280. X        $OPEN   #RDFAB                  ; Open the file
  281. X        JSB     RMSERR                  ; Check for file error
  282. X        MOVAL   RDRAB,R1                ; Put address of RAB into R1.
  283. X; Put address of user buffer and size and record buffer and size in RAB.
  284. X        $RAB_STORE RAB=R1,UBF=RDBUF,RBF=RDBUF,USZ=#MAX.MSG,RSZ=#MAX.MSG
  285. X        $CONNECT #RDRAB                 ; Connect to record.
  286. X        JSB     RMSERR                  ; Check for file error
  287. X
  288. X
  289. X        .SBTTL  Do the real work
  290. X;++
  291. X; Do the actual work
  292. X;--
  293. XBEGIN:  MOVAL   M$CRLF,R10              ; Get a return/linefeed and output t
  294. Vhem
  295. X        MOVZBL  #L$CRLF,R1
  296. X        JSB     WRITE
  297. X
  298. X20$:    CLRL    WTCOUNT                 ; Initialize the pointer
  299. X        CLRL    ADDRESS                 ; Initialize the address
  300. X        CLRL    OPENFL                  ; Set the file to not open
  301. X
  302. X        .SBTTL  Main loop
  303. X
  304. X; Main loop to get data
  305. XDOLIN:
  306. X        CLRL    CHKSUM                  ; Clear the checksum
  307. X        JSB     RECEIVE                 ; Get the line
  308. X        JSB     CVTBIN                  ; Convert it to a real number
  309. X        MOVL    R10,LENGTH              ; Save the length
  310. XNAB:    JSB     CVTBIN                  ;
  311. X        BISL    R10,R3                  ; Save a byte of the address
  312. X        ASHL    #8.,R3,R3               ; Make room for next byte
  313. X        SOBGEQ  LNGADR,NAB              ; If there are more than 2 bytes
  314. X        JSB     CVTBIN                  ;
  315. X        BISL    R10,R3                  ; Fill in the low byte of address
  316. X
  317. X;ta2 The fix for 1.1.01 converted two more hex values here. As of March
  318. X;    1989, this doesn't appear to be required. The conversion has been
  319. X;    removed.
  320. X
  321. X        JSB     CVTBIN                  ;ta2 Pick up the record type code
  322. X
  323. X        CMPL    #PKDATA,R10             ; Check to see if this is regular da
  324. Vta
  325. X        BNEQ    NOTDAT                  ; If not then check the special case
  326. Vs
  327. X; Check for end of hex file
  328. X        TSTL    R3                      ; Check to see if the address is all
  329. X        BNEQ    DATST                   ;  zero, if not then branch
  330. X        TSTL    LENGTH                  ; Check to see if the length is zero
  331. X        BNEQ    DATST                   ;  also, if not then branch
  332. X        JMP     FINISH                  ; Must be end of hex file so finish
  333. V up
  334. X; Regular data to put into the file
  335. XDATST:  TSTL    OPENFL                  ; Check to see if the file is open y
  336. Vet
  337. X        BNEQ    DAT1                    ; If it is then skip the open
  338. X        JSB     OPEN                    ; Open the file
  339. XDAT1:   CMPL    R3,ADDRESS              ; Check for null compression
  340. X        BEQL    10$                     ; If none compressed then continue p
  341. Vast
  342. X        CLRL    R10                     ; Make a null
  343. X        JSB     PUT                     ;  and put it into the file
  344. X        INCL    ADDRESS                 ; Point to next address
  345. X        BRW     DAT1                    ; Go see if there are any more nulls
  346. X; Go to work on the HEX we got on the line
  347. X10$:    MOVL    LENGTH,R2               ; Get the length
  348. X        TSTL    R2                      ; See if there is any data
  349. X        BEQL    30$                     ; If not then branch
  350. X25$:    JSB     CVTBIN                  ; Convert it
  351. X        JSB     PUT                     ; Put the character in the file
  352. X        INCL    ADDRESS                 ; Increment the address
  353. X        SOBGTR  R2,25$                  ; Repeat until all done
  354. X30$:    BRW     LINDON                  ; Go finish this line
  355. X
  356. X
  357. X
  358. XNOTDAT: MOVAL   WTFAB,R5                ; Get the FAB address
  359. X        CMPL    #PKRFM,R10              ; Check to see if this is record fmt
  360. X        BNEQ    NOTRFM                  ; If not then don't do this stuff
  361. X; Store the Record format (FIX, VAR, ...)
  362. X        JSB     CVTBIN                  ;
  363. X        $FAB_STORE FAB=R5,RFM=R10       ; Store the record format
  364. X        BRW     LINDON                  ; Go finish this line
  365. X
  366. XNOTRFM: CMPL    #PKRAT,R10              ; Check to see if this is record typ
  367. Ve
  368. X        BNEQ    NOTRAT                  ; If not then branch
  369. X; Store the record type (CR, ...)
  370. X        JSB     CVTBIN                  ;
  371. X        $FAB_STORE FAB=R5,RAT=R10       ; Store the record type
  372. X        BRW     LINDON                  ; Go finish this line
  373. X
  374. XNOTRAT: CMPL    #PKMRS,R10              ; Check to see if this is max record
  375. X        BNEQ    NOTMRS                  ;  size, branch if not
  376. X; Get the maximum record size (512. for tasks)
  377. X        JSB     CVTBIN                  ; Convert high order byte
  378. X        MOVL    R10,R3                  ; Save it
  379. X        ASHL    #8.,R3,R3               ; Shift it to the high order byte
  380. X        JSB     CVTBIN                  ; Convert low order byte
  381. X        BISL    R10,R3                  ; Put low order word into R3 also
  382. X        $FAB_STORE FAB=R5,MRS=R3        ; Store the maximum record size
  383. X        BRW     LINDON                  ; Go finish this line
  384. X
  385. XNOTMRS: CMPL    #PKALQ,R10              ; Check to see if this is allocation
  386. X        BNEQ    NOTALQ                  ; If not then branch
  387. X; Get the file length (in blocks)
  388. X        JSB     CVTBIN                  ; Convert high order byte
  389. X        MOVL    R10,R3                  ; Save it
  390. X        ASHL    #8.,R3,R3               ; Shift it to the high order byte
  391. X        JSB     CVTBIN                  ; Convert low order byte
  392. X        BISL    R10,R3                  ; Put low order word into R3 also
  393. X        MOVZWL  R3,ALQLOC               ; Save it
  394. X        $FAB_STORE FAB=R5,ALQ=ALQLOC    ; Store the allocation
  395. X        BRW     LINDON                  ; Go finish this line
  396. X
  397. XNOTALQ: CMPL    #PKFILNM,R10            ; Check to see if this is file name
  398. X        BNEQ    NOTFILNM                ; If not then branch
  399. X; Get the file name
  400. X        MOVL    LENGTH,R2               ; Get the length
  401. X        $FAB_STORE FAB=R5,FNS=R2        ; Store the file name length
  402. X        MOVAB   OUT.N,R3                ; Get the output file name address
  403. X25$:    JSB     CVTBIN                  ; Convert next character of the name
  404. X        MOVB    R10,(R3)+               ; Save the character
  405. X        SOBGTR  R2,25$                  ; Repeat until all done
  406. X        MOVAB   M$CRLF,R10              ;
  407. X        MOVZBL  #L$CRLF,R1              ;
  408. X        JSB     WRITE                   ; Output a return/line feed
  409. X        MOVAB   OUT.N,R10               ;
  410. X        MOVL    LENGTH,R1               ;
  411. X        JSB     WRITE                   ; Output the file name
  412. X        MOVAB   M$CRLF,R10              ;
  413. X        MOVZBL  #L$CRLF,R1              ;
  414. X        JSB     WRITE                   ; Output a return/line feed
  415. X        BRW     LINDON                  ; Go finish this line
  416. X
  417. X
  418. X
  419. XNOTFILNM:
  420. X        CMPL    #PKEOF,R10              ; Check to see if this is end of tas
  421. Vk
  422. X        BNEQ    NOTPKEOF                ; If not then branch
  423. X; End of ouput file record found
  424. X        JSB     CLTSK                   ; Close the task file
  425. X        CLRL    WTCOUNT                 ; Initialize the pointer
  426. X        CLRL    ADDRESS                 ; Initialize the address
  427. X        JMP     LINDON                  ; Go finish this line
  428. X
  429. X; Unknown code
  430. XNOTPKEOF:                               ; Since we don't know what the code
  431. X        MOVAB   M$UN,R10                ;   just send the unknown code text
  432. V to
  433. X        MOVZBL  #L$UN,R1                ;   the terminal
  434. X        JSB     WRITE                   ;
  435. X        JMP     DOLIN                   ; Go do next input line
  436. X
  437. X
  438. X        .SBTTL  Finished with this line
  439. X
  440. X; Line processed without a problem
  441. XLINDON:
  442. X;       MOVAB   M$AK,R10                ; Get the data address of the
  443. X                                        ;  single character
  444. X;       MOVZBL  #1,R1                   ; Only write single char to terminal
  445. X;       JSB     WRITE                   ; Write to the terminal
  446. X        JMP     DOLIN                   ; Good so do next line
  447. X
  448. X
  449. X        .SBTTL  Finish up
  450. X;++
  451. X;Finish up
  452. X;--
  453. XFINISH:
  454. X; Close the file(s)
  455. X        JSB     CLTSK                   ; Close the task file if it isn't ye
  456. Vt
  457. X        MOVAL   RDFAB,R1                ; Get FAB for input file
  458. X        $CLOSE  R1                      ; Close the input file
  459. X        JSB     RMSERR                  ; Check for file error
  460. XEND:    MOVL    #SS$_NORMAL,R0          ; Set up successful completion
  461. X        RET
  462. X
  463. X        .SBTTL  Close file
  464. X
  465. X;++
  466. X; Close the output file if there is one open
  467. X;
  468. X; If there is an error the program stops with an RMS error
  469. X;
  470. X; Registers destroyed:  R0, R1
  471. X; The OPENFL state is changed to file not open (OPENFL=0).
  472. X;--
  473. X
  474. XCLTSK:  TSTL    OPENFL                  ; See if the task file is open
  475. X        BEQL    10$                     ; If not then just return
  476. X
  477. X; Write last buffer if needed
  478. X        TSTL    WTCOUNT                 ; See if there is any data not writt
  479. Ven
  480. X        BEQL    8$                      ; If not then branch
  481. X        MOVAL   WTRAB,R1                ; Get the RAB address
  482. X        $RAB_STORE RAB=R1,RSZ=WTCOUNT   ; Put its size into the RAB.
  483. X        $WRITE  R1                      ; Put the buffer of data.
  484. X        JSB     RMSERR                  ; Check for file error
  485. X
  486. X; Close the file
  487. X8$:     MOVAL   WTFAB,R1                ; Get FAB for output file
  488. X        $CLOSE  R1                      ; Close output file
  489. X        JSB     RMSERR                  ; Check for file error
  490. X        CLRL    OPENFL                  ; Set the state to file not open
  491. X10$:    RSB                             ; Return to sender
  492. X
  493. X
  494. X        .SBTTL  Output and input to/from terminal
  495. X;++
  496. X; Write data to terminal.
  497. X;       R10     Address of data to output
  498. X;       R1      Length of data
  499. X;--
  500. XWRITE:
  501. X        MOVW    R1,MSGDSC               ; Store the length in the descript b
  502. Vlk
  503. X        MOVL    R10,ADDR                ; Store the address of the ASCII
  504. X        PUSHAQ  MSGDSC                  ; Push the descriptor block address
  505. X        CALLS   #1,G`5ELIB$PUT_OUTPUT     ; Do the output
  506. X        RSB                             ; Return to sender
  507. X
  508. X;++
  509. X; Read from the terminal
  510. X;       R10     Address of buffer
  511. X;       R1      Number of characters to read
  512. X;       R11     Input prompt address
  513. X;       R12     Length of prompt
  514. X;
  515. X;Returned:
  516. X;       R0      Number of characters read
  517. X;--
  518. XREAD:
  519. X        MOVL    R1,INP_STR_D            ; Store the buffer length in desc bl
  520. Vock
  521. X        MOVL    R10,INP_BUF             ; Store the buffer address in desc b
  522. Vlk
  523. X        MOVL    R11,ADDR                ; Store prompt address in desc block
  524. X        MOVW    R12,MSGDSC              ; Store length in desctriptor block
  525. X        PUSHAB  INP_STR_LEN             ; Address for string length
  526. X        PUSHAQ  MSGDSC                  ; Push address of prompt descriptor
  527. V blk
  528. X        PUSHAB  INP_STR_D               ; String buffer descriptor
  529. X        CALLS   #3,G`5ELIB$GET_INPUT      ; Get input string value
  530. X        MOVL    INP_STR_LEN,R0          ; Get actual input length back
  531. X        RSB                             ; Return to sender
  532. X
  533. X
  534. X        .SBTTL  RMS error routine
  535. X;++
  536. X;Check for RMS error
  537. X; Call with:            R0      Status of last RMS call (automatically store
  538. Vd
  539. X;                                 in R0 by RMS after an operation)
  540. X;
  541. X; Returned:             R0      Status
  542. X; Registers destroyed:  R0
  543. X; Program stops after error message is displayed if there is any type of err
  544. Vor.
  545. X;--
  546. XRMSERR:
  547. X        BLBC    R0,60$                  ; If error, go check it out
  548. X        MOVL    #KNORMAL,R0             ; Set up a successful return code.
  549. X        RSB                             ; Return to caller
  550. X
  551. X; Here if there is an RMS error we don't know how to handle
  552. X60$:    PUSHL   R0                      ; Save the error code
  553. X        MOVAB   M$RMS,R10               ; Get the address and length of the
  554. X        MOVL    #L$RMS,R1               ;   message to output
  555. X        JSB     WRITE                   ; Output it
  556. X        POPL    R0                      ; Get the error code back
  557. X        RET                             ; Exit program
  558. X
  559. X
  560. X        .SBTTL  Open the output file
  561. X;++
  562. X; Create and open the output file and set the file open flag
  563. X;
  564. X; Registers destroyed:  R0, R1
  565. X; Program stops after error message is displayed if there is any type of err
  566. Vor.
  567. X;--
  568. X
  569. XOPEN:   MOVL    #TRUE,OPENFL            ; State that the file is open
  570. X        MOVAL   WTFAB,R1                ; Put address of FAB into R1.
  571. X        $FAB_STORE FAB=R1,FAC=<BIO,GET> ; Set the block I/O in FAB.
  572. X        ;$FAB_STORE FAB=R1,FOP=CTG      ; Tell RMS to make the task contiguo
  573. Vus
  574. X        $CREATE #WTFAB                  ; Create the file
  575. X        JSB     RMSERR                  ; Check for file error
  576. X        MOVAL   WTRAB,R1                ; Put address of RAB into R1.
  577. X; Put address of user buffer and record buffer and sizes into RAB
  578. X        $RAB_STORE RAB=R1,UBF=WTBUF,RBF=WTBUF,USZ=#512.,RSZ=#512.
  579. X        $CONNECT #WTRAB                 ; Connect to record.
  580. X        JSB     RMSERR                  ; Check for file error
  581. X        RSB                             ; Return to sender
  582. X
  583. X        .SBTTL  Put a character to the file
  584. X;++
  585. X; Put a character to the output file.
  586. X; The buffer is only written when 512. characters have been sent to the rout
  587. Vine
  588. X; If the file does not end on a boundary then the buffer will have to be
  589. X; written by some other routine.
  590. X;
  591. X; Call with:            R10     Contains the character to be put into file
  592. X; Registers destroyed:  R1, R10
  593. X;
  594. X; Program stops after error message is displayed if there is any type of err
  595. Vor.
  596. X;--
  597. X
  598. XPUT:    PUSHL   R10                     ; Save the character
  599. X        MOVL    WTCOUNT,R10             ; Get the offset into the buffer
  600. X        MOVB    (SP),WTBUF(R10)         ; Put the character
  601. X        TSTL    (SP)+                   ; Restore the stack
  602. X        INCL    WTCOUNT                 ; Increment the offset into the buff
  603. Ver
  604. X        CMPL    WTCOUNT,#512.           ; Check to see if we are past the en
  605. Vd
  606. X        BNEQ    10$                     ; If not then branch
  607. X        MOVAL   WTRAB,R1                ; Get the RAB address
  608. X        $RAB_STORE RAB=R1,RSZ=WTCOUNT   ; Put its size into the RAB.
  609. X        $WRITE  R1                      ; Put the buffer of data.
  610. X        JSB     RMSERR                  ; Check for file error
  611. X        CLRL    WTCOUNT                 ; Clear the pointer
  612. X10$:    RSB                             ; Return to sender
  613. X
  614. X        .SBTTL   Convert to binary
  615. X;++
  616. X; Convert 2 hexidecimal digits to binary
  617. X; Input is from the input buffer pointed to by R4 (it is incremented twice)
  618. X;
  619. X; Call with:            R4      The pointer into the input buffer
  620. X; Returned:             R10     The binary walue
  621. X; Registers destroyed:  R10,R1
  622. X;--
  623. X
  624. XCVTBIN:
  625. X        CLRL    R10                     ; Clear R10 for the BISB
  626. X        BISB    (R4)+,R10               ; Get the next digit
  627. X        JSB     BIN                     ;   in place and convert to binary
  628. X        ASHL    #4,R10,R10              ; Multiply the result by 16
  629. X        MOVL    R10,R1                  ;  and save it
  630. X        CLRL    R10                     ; Clear R10
  631. X        BISB    (R4)+,R10               ; Get the next digit
  632. X        JSB     BIN                     ; Convert to binary
  633. X        BISL    R1,R10                  ; Set the correct bits for high orde
  634. Vr
  635. X        ADDL2   R10,CHKSUM              ; Add the value to the checksum
  636. X        RSB                             ; Return to sender
  637. X
  638. XBIN:    CMPL    R10,#`5EA/9/              ; Check to see if above '9
  639. X        BLEQ    1$                      ; If not then branch
  640. X        SUBL2   #HEXOFFSET,R10          ; Subtract offset to alphabet
  641. X1$:     SUBL2   #48.,R10                ; Make binary
  642. X        RSB                             ; Return to sender
  643. X
  644. X
  645. X        .SBTTL  Receive a line of data
  646. X
  647. X;++
  648. X; This will get a line of data from the input device
  649. X;
  650. X; Returned:             R4      Address of start of data buffer
  651. X; Registers destroyed:  R0, R1, R3, R4
  652. X;
  653. X; A checksum error will cause a NAK to be sent and input to be read again
  654. X; A real error will cause an error message to be output and the program to s
  655. Vtop
  656. X;--
  657. X
  658. XRECEIVE:
  659. X; Here to read from a file
  660. X        MOVAL   RDRAB,R1                ; Get the RAB address
  661. X        $GET    R1                      ; Get the record
  662. X        JSB     RMSERR                  ; Check for file error
  663. X        MOVZWL  #MAX.MSG,R3             ; Assume we got a full buffer
  664. X; Here to check the data we got
  665. XRECCHK: MOVAL   RDBUF,R4                ; Get the address of the information
  666. X        CLRL    R1                      ; Clear the data start address
  667. X80$:    BICB    #MSB,(R4)               ; Clear parity bit
  668. X        SUBB3   #RCV.SOH,(R4)+,R0       ; Check for start of header
  669. X        BLSS    81$                     ; If not, just keep going
  670. X        CMPB    R0,#2                   ; There are 3 possible headers
  671. X        BGTR    81$                     ; Not a header
  672. X        MOVZBL  R0,LNGADR               ; Amount of extra bytes in the addre
  673. Vss
  674. X        MOVL    R4,R1                   ; Start of header so save it
  675. X81$:    SOBGTR  R3,80$                  ; Repeat until done
  676. X        TSTL    R1                      ; Check to see if we got a SOH
  677. X        BNEQ    85$                     ; If good then skip the jump
  678. X        JMP     RECEIVE                 ; If not then re-read
  679. X85$:    MOVL    R1,R4                   ; Move to R4 for use
  680. X        PUSHL   R4                      ; Save SOH pointer on stack
  681. X
  682. X        JSB     CVTBIN                  ; Convert all to binary to see if
  683. X                                        ;   checksum is correct
  684. X        MOVL    R10,R3                  ; Get the length of data
  685. X        ADDL2   #4,R3                   ; Add the length of address and fiel
  686. Vd
  687. X                                        ;   type and checksum
  688. X        ADDL2   LNGADR,R3               ; If long address, skip more bytes
  689. X        BLSS    94$                     ; If we have a negative number then
  690. X                                        ;   must have been a bad length
  691. X        CMPL    R3,#MAX.MSG/2-1         ; If we got some length that is out
  692. V of
  693. X        BGEQ    94$                     ;   range then NAK right away
  694. X92$:    JSB     CVTBIN                  ; Convert all to binary to see if
  695. X        SOBGTR  R3,92$                  ;   the checksum is OK
  696. X93$:    BICL    #LEFTBYTE,CHKSUM        ; We only want an 8 bit checksum
  697. X        TSTL    CHKSUM                  ; Test for a zero checksum
  698. X        BEQL    95$                     ; If OK then exit normally
  699. X94$:    CLRL    CHKSUM                  ; Clear the checksum for the line
  700. X        MOVAL   M$NAK,R10               ; Get the address of the message
  701. X        MOVZBL  #L$NAK,R1               ; Only write the first character to
  702. X        JSB     WRITE                   ;   the terminal
  703. X        TSTL    (SP)+                   ; Pull the pointer off the stack
  704. X        JMP     RECEIVE                 ; Try to get the line again
  705. X
  706. X; Return to sender
  707. X95$:    POPL    R4                      ; Get the pointer back
  708. X        RSB                             ; Return to sender
  709. X
  710. X
  711. X        .SBTTL  End of the Dehexify
  712. X
  713. X        .END    DEHEX
  714. $ CALL UNPACK VMSDEH.MAR;1 53467680
  715. $ create 'f'
  716. XTo:`09Dungeon Players
  717. XFrom:`09"The Translator"
  718. XSubj:`09Game Information
  719. XDate:`098-OCT-80, 6-dec-85
  720. X
  721. X
  722. XThis is the first (and last) source release of the PDP-11 version of`20
  723. XDungeon.
  724. X
  725. XPlease note that Dungeon has been superceded by the game ZORK(tm).
  726. XThe following is an extract from the new product announcement for
  727. XZORK in the September, 1980 issue of the RT-11 SIG newsletter:
  728. X
  729. X  "'ZORK:  The Great Underground Empire - Part I' ...was developed
  730. X   by the original authors based on their ZORK (Dungeon) game for
  731. X   the PDP-10.  It features a greatly improved parser;  command
  732. X   input and transcript output files;  SAVEs to any device and
  733. X   file name;  and adaptation to different terminal types,
  734. X   including a status line on VT100s.  Note:  this is not the
  735. X   FORTRAN version that has been available through DECUS.  This
  736. X   version has been completely rewritten to run efficiently on
  737. X   small machines - up to 10 times as fast as the DECUS version.
  738. X
  739. X   ...ZORK runs under RT-ll, HT-ll, or RSTS/E and requires as
  740. X   little as 20K words of memory and a single floppy disk drive.
  741. X   The game package, consisting of an RX01-format diskette and
  742. X   an instruction booklet, is available from Infocom, Inc.,
  743. X   P.O. Box 120, Kendall Station, Cambridge, Ma. 02142."
  744. X
  745. XZORK(tm) is a trademark of Infocom, Inc.  It is available for several
  746. Xpopular personal computers as well as for the PDP-ll.
  747. X
  748. X
  749. X1.  Components
  750. X
  751. XDungeon is a maze-solving game for solitaire play.  It runs on any PDP-11
  752. X(with 28KW of memory or more) or VAX-11.
  753. X
  754. XThe following compile and run information does not apply to the
  755. Xf77/Unix implementation.  See the README file for information on
  756. Xcompilation.
  757. X
  758. XDungeon consists of the following files:
  759. X
  760. X
  761. X`09all operating systems
  762. X`09---------------------
  763. X
  764. X`09DMAIN.FTN`09`09`09-program root
  765. X`09DGAME.FTN`09`09`09-main routine
  766. X`09DSUB.FTN`09`09`09-resident subroutines
  767. X`09DINIT.FTN`09`09`09-initialization routine
  768. X`09NP.FOR`09`09`09`09-parser, part 0
  769. X`09NP1.FOR`09`09`09`09-parser, part 1
  770. X`09NP2.FOR`09`09`09`09-parser, part 2
  771. X`09NP3.FOR`09`09`09`09-parser, part 3
  772. X`09GDT.FTN`09`09`09`09-game debugging tool
  773. X`09VERBS.FTN`09`09`09-principal verbs
  774. X`09OBJCTS.FTN`09`09`09-principal objects
  775. X`09SVERBS.FTN`09`09`09-simple verbs
  776. X`09DVERB1.FTN`09`09`09-auxiliary verbs, part 1
  777. X`09DVERB2.FTN`09`09`09-auxiliary verbs, part 2
  778. X`0C`09all operating systems (continued)
  779. X`09---------------------------------
  780. X
  781. X`09ACTORS.FTN`09`09`09-character processors
  782. X`09DEMONS.FTN`09`09`09-demon processors
  783. X`09CLOCKR.FTN`09`09`09-clock event processors
  784. X`09ROOMS.FOR`09`09`09-room processors
  785. X`09NROOMS.FOR`09`09`09-new room processors
  786. X`09SOBJS.FOR`09`09`09-simple objects
  787. X`09NOBJS.FOR`09`09`09-new objects
  788. X`09BALLOP.FOR`09`09`09-balloon processor
  789. X`09LIGHTP.FOR`09`09`09-light processors
  790. X`09VILLNS.FOR`09`09`09-villain processors
  791. X`09DSO1.FOR`09`09`09-overlaid subroutines, part 1
  792. X`09DSO2.FOR`09`09`09-overlaid subroutines, part 2
  793. X`09DSO3.FOR`09`09`09-overlaid subroutines, part 3
  794. X`09DSO4.FOR`09`09`09-overlaid subroutines, part 4
  795. X`09DSO5.FOR`09`09`09-overlaid subroutines, part 5
  796. X`09DSO6.FOR`09`09`09-overlaid subroutines, part 6
  797. X`09DSO7.FOR`09`09`09-overlaid subroutines, part 7
  798. X`09DINDX.DAT`09`09`09-initialization data base
  799. X`09DTEXT.DAT`09`09`09-main data base `5Bbinary file`5D
  800. X`09DUNGEO.DOC`09`09`09-this file
  801. X
  802. X
  803. X`09RT11 only
  804. X`09---------
  805. X
  806. X`09RTTIM.FOR`09`09`09-time subroutine
  807. X`09RRND.MAC`09`09`09-random number generator
  808. X`09RTCMP.COM`09`09`09-compile command file
  809. X`09RTBLD.COM`09`09`09-link command file
  810. X
  811. X
  812. X`09RSTS/E only
  813. X`09-----------
  814. X
  815. X`09RTTIM.FOR`09`09`09-time subroutine
  816. X`09RRND.MAC`09`09`09-random number generator
  817. X`09RSTSCB.CTL`09`09`09-compile/build batch file
  818. X
  819. X
  820. X`09RSX11M, RSX11M+ only
  821. X`09--------------------
  822. X
  823. X`09RSXTIM.MAC`09`09`09-time subroutine
  824. X`09RRND.MAC`09`09`09-random number generator
  825. X`09RSXCMP.CMD`09`09`09-compile command file
  826. X`09RSXBLD.CMD`09`09`09-task build command file
  827. X`09D.ODL`09`09`09`09-overlay descriptor file
  828. X
  829. X
  830. X`09VMS only
  831. X`09--------
  832. X
  833. X`09VMSTIM.FOR`09`09`09-time subroutine
  834. X`09VMSRND.MAC`09`09`09-random number generator
  835. X`09VMSCMP.COM`09`09`09-compile command file
  836. X`09VMSBLD.COM`09`09`09-link command file
  837. X`0C2.  Installation Instructions, RT11
  838. X
  839. XBefore starting, please note that:
  840. X
  841. X  - Dungeon requires RT11 V3 or later.
  842. X
  843. X  - Dungeon requires Fortran-IV V2 or later, threaded code option.
  844. X
  845. X  - Dungeon requires 26KW of user memory (runs under SJ monitor only).
  846. X
  847. X  - All files (source and object) must reside on the same disk
  848. X    (at least 2500 disk blocks are needed).
  849. X
  850. X  - Dungeon does not require EIS or floating point.
  851. X
  852. XExcept for DTEXT.DAT, all files in the distribution kit are ASCII.
  853. XDTEXT.DAT is a binary file consisting of 76-byte fixed length records.
  854. XIf the distribution kit consists of RT11-compatible media, then PIP
  855. Xcan be used to transfer the files.  If the distribution kit consists
  856. Xof DOS-compatible media, then FILEX must be used to transfer the files.
  857. XThe /I switch (image binary) must be used to transfer DTEXT.DAT;  the
  858. X/A (ASCII) switch should be used to transfer the other files.
  859. X
  860. XTo compile Dungeon, issue the following command:
  861. X
  862. X  .@RTCMP(cr)
  863. X
  864. XSeveral of the compilations will produce warning messages, but none
  865. Xshould produce a fatal error.
  866. X
  867. XTo link the compiled sources, issue the following command:
  868. X
  869. X  .@RTBLD(cr)
  870. X
  871. XThe command file assumes that the Fortran-IV object time library has
  872. Xbeen merged into the system library.  If this is not the case, edit
  873. XRTBLD.COM and add switch /LINKLIBRARY:FORLIB.OBJ to the first command
  874. Xline.
  875. X
  876. XIt is now possible to run Dungeon:
  877. X
  878. X  .R DUNGEO(cr)
  879. X
  880. XWhen invoked, Dungeon takes no more than 5-10 seconds to start up.
  881. X
  882. XNotes on the executable program:
  883. X
  884. X  - The only files needed to execute Dungeon are DUNGEO.SAV,
  885. X    DINDX.DAT, and DTEXT.DAT.  All other files can be deleted.
  886. X
  887. X  - Files DINDX.DAT and DTEXT.DAT must reside on logical device SY:
  888. X    (this can be changed with a source edit, see section 8).
  889. X`0C3.  Installation Instructions, RSTS/E
  890. X
  891. XBefore starting, please note that:
  892. X
  893. X  - Dungeon requires RSTS/E V6C or later.
  894. X
  895. X  - Dungeon requires Fortran-IV V2 or later, threaded code option
  896. X    (operation under Fortran-IV-Plus V2.5 or later will probably
  897. X    work but is not supported).
  898. X
  899. X  - Dungeon requires 28KW of user memory.
  900. X
  901. X  - All files (source and object) must reside in the same user area
  902. X    (at least 2500 disk blocks are needed).
  903. X
  904. X  - Dungeon does not require EIS or floating point.
  905. X
  906. XExcept for DTEXT.DAT, all files in the distribution kit are ASCII.
  907. XDTEXT.DAT is a binary file consisting of 76-byte fixed length records.
  908. XIf the distribution kit consists of RT11- or DOS-compatible disks,
  909. Xthen FIT can be used to transfer the files.  For example (RT11 disk):
  910. X
  911. X  RUN $FIT(cr)
  912. X  FIT>*.*/RSTS=DK:*.*/RT11(cr)
  913. X  FIT>`5EZ
  914. X
  915. XIf the distribution kit consists of DOS-compatible magtape, then PIP
  916. Xcan be used to transfer the files, providing that the magtape is
  917. Xassigned as a DOS-label device.  For example:
  918. X
  919. X  ASSIGN MM0:.DOS(cr)
  920. X  RUN $PIP(cr)
  921. X  **.*/AS=MM:*.FTN,*.FOR,*.MAC,*.DOC,*.CTL(cr)
  922. X  **.*/AS=MM:*.CMD,*.COM,*.ODL,DINDX.DAT(cr)
  923. X  **.*/BL=MM:DTEXT.DAT(cr)
  924. X  *`5EC
  925. X  DEASS MM0:(cr)
  926. X
  927. XTo compile and link Dungeon, submit control file RSTSCB.CTL to the
  928. Xbatch processor:
  929. X
  930. X  SUBMIT RSTSCB.CTL(cr)
  931. X
  932. XSeveral of the compilations will produce warning messages, but none
  933. Xshould produce a fatal error.
  934. X
  935. XIt is now possible to run Dungeon:
  936. X
  937. X  RUN DUNGEO(cr)
  938. X
  939. XWhen invoked, Dungeon takes no more than 5-10 seconds to start up.
  940. X
  941. XNotes on the executable program:
  942. X
  943. X  - The only files needed to execute Dungeon are DUNGEO.SAV,
  944. X    DINDX.DAT, and DTEXT.DAT.  All other files can be deleted.
  945. X
  946. X  - Files DINDX.DAT and DTEXT.DAT must reside in the user's area on
  947. X    logical device SY: (this can be changed with a source edit, see
  948. X    section 8).
  949. X`0C4.  Installation Instructions, RSX11M and RSX11M+
  950. X
  951. XBefore starting, please note that:
  952. X
  953. X  - Dungeon requires RSX11M V3 (RSX11M+ V1) or later.
  954. X
  955. X  - Dungeon requires Fortran-IV-Plus V2.5 or later (operation under
  956. X    Fortran-IV V2 or later will probably work but is not supported).
  957. X
  958. X  - Dungeon requires a 32KW user partition (mapped systems only).
  959. X
  960. X  - All files (source and object) must reside in the same user area
  961. X    (at least 2500 disk blocks are needed).
  962. X
  963. X  - TKB should invoke BIGTKB.TSK with a large memory increment.
  964. X
  965. X  - The Fortran-IV-Plus object time library must be merged into
  966. X    the system library (SYSLIB.OLB).  Further, the library must
  967. X    be set up to invoke the short error text module ($SHORT) as
  968. X    the default.  Task building with a separate object time library
  969. X    produces numerous errors;  task building with a resident library
  970. X    or the normal error text module produces an oversize task image.
  971. X
  972. X  - Dungeon requires EIS but not floating point.
  973. X
  974. XExcept for DTEXT.DAT, all files in the distribution kit are ASCII.
  975. XDTEXT.DAT is a binary file consisting of 76-byte fixed length records.
  976. XIf the distribution kit consists of Files-11 compatible media, then
  977. XPIP can be used to transfer the files.  For example:
  978. X
  979. X  >PIP SY:*.*=MM:*.*(cr)            -requires ANSI magtape support
  980. X
  981. XIf the distribution kit consists of DOS- or RT11-compatible media,
  982. Xthen FLX must be used to transfer the files.  The /IM:76. switch
  983. X(image binary fixed length) must be used to transfer DTEXT.DAT;
  984. Xthe /FA switch (formatted ASCII) should be used to transfer the
  985. Xother files.  For example (DOS magtape):
  986. X
  987. X  >FLX(cr)
  988. X  FLX>SY:/RS/FA=MM:*.FTN,*.FOR,*.MAC,*.DOC/DO(cr)
  989. X  FLX>SY:/RS/FA=MM:*.CMD,*.COM,*.ODL,DINDX.DAT/DO(cr)
  990. X  FLX>SY:/RS/IM:76.=MM:DTEXT.DAT/DO(cr)
  991. X  FLX>`5EZ
  992. X
  993. XTo compile Dungeon, issue the following command:
  994. X
  995. X  >@RSXCMP(cr)
  996. X
  997. XThere should be no error messages.
  998. X
  999. XTo task build the compiled sources, issue the following command:
  1000. X
  1001. X  >TKB @RSXBLD(cr)
  1002. X
  1003. XIt is now possible to run Dungeon:
  1004. X
  1005. X  >RUN DUNGEON(cr)
  1006. X
  1007. XWhen invoked, Dungeon takes no more than 5-10 seconds to start up.
  1008. X`0CIf your system maintains a separate Fortran-IV-Plus object time
  1009. Xlibrary (F4POTS.OLB), then you must create a local copy of the
  1010. Xsystem library with the Fortran-IV-Plus object time library
  1011. Xmerged in and the short error text as the default.  The following
  1012. Xcommands are an example of how such a local copy could be built:
  1013. X
  1014. X  >PIP SY:*.*=LB:`5B1,1`5DSYSLIB.OLB,F4POTS.OLB(cr)`09-copy libraries
  1015. X  >LBR(cr)`09`09`09`09`09-invoke LBR
  1016. X  LBR>SHORT.OBJ=F4POTS.OLB/EX:$SHORT(cr)`09-extract $SHORT
  1017. X  LBR>F4POTS.OLB/DE:$SHORT(cr)`09`09`09-delete $SHORT
  1018. X  LBR>F4POTS.OBJ=F4POTS.OLB/EX(cr)`09`09-extract other modules
  1019. X  LBR>SYSLIB.OLB=F4POTS.OBJ(cr)`09`09`09-insert other modules
  1020. X  LBR>SYSLIB.OLB/DG:$ERTXT(cr)`09`09`09-delete dup entry
  1021. X  LBR>SYSLIB.OLB=SHORT.OBJ/RP(cr)`09`09-insert $SHORT
  1022. X  LBR>`5EZ
  1023. X  >PIP F4POTS.*;*,SHORT.OBJ;*/DE(cr)
  1024. X
  1025. XThen edit D.ODL to reference the local library instead of the
  1026. Xdefault system library:
  1027. X
  1028. X  >TEC D.ODL(cr)
  1029. X  *FS`5B1,1`5D$SY:$EX$$
  1030. X
  1031. XDungeon can now be task built as described above.
  1032. X
  1033. XNotes on the executable program:
  1034. X
  1035. X  - The only files needed to execute Dungeon are DUNGEON.TSK,
  1036. X    DINDX.DAT, and DTEXT.DAT.  All other files can be deleted.
  1037. X
  1038. X  - Files DINDX.DAT and DTEXT.DAT must reside in the user's area on
  1039. X    logical device SY: (this can be changed with a source edit, see
  1040. X    section 8).
  1041. X
  1042. X  - Exiting from Dungeon via an MCR ABOrt command instead of the QUIT
  1043. X    command will leave file DTEXT.DAT open and locked.  The file must
  1044. X    be manually unlocked before the game is next invoked:
  1045. X
  1046. X    >PIP DTEXT.DAT/UN(cr)
  1047. X`0C5.  Installation Instructions, VMS
  1048. X
  1049. XBefore starting, please note that:
  1050. X
  1051. X  - Dungeon requires VMS V1 or later.
  1052. X
  1053. X  - Dungeon requires VAX Fortran-IV V1 or later.
  1054. X
  1055. X  - All files (source and object) must reside in the user's area
  1056. X    (at least 2500 disk blocks are needed).
  1057. X
  1058. XExcept for DTEXT.DAT, all files in the distribution kit are ASCII.
  1059. XDTEXT.DAT is a binary file consisting of 76-byte fixed length records.
  1060. XIf the distribution kit consists of Files-11 compatible media, then
  1061. XCOPY can be used to transfer the files.  For example:
  1062. X
  1063. X  $ COPY MM:*.* *.*(cr)
  1064. X
  1065. XIf the distribution kit consists of DOS- or RT11-compatible media,
  1066. Xthen FLX must be used to transfer the files.  The /IM:76. switch
  1067. X(image binary fixed length) must be used to transfer DTEXT.DAT;
  1068. Xthe /FA switch (formatted ASCII) should be used to transfer the
  1069. Xother files.  For example (DOS magtape):
  1070. X
  1071. X  $ MCR FLX(cr)
  1072. X  FLX>SY:/RS/FA=MM:*.FTN,*.FOR,*.MAC,*.DOC/DO(cr)
  1073. X  FLX>SY:/RS/FA=MM:*.CMD,*.COM,*.ODL,DINDX.DAT/DO(cr)
  1074. X  FLX>SY:/RS/IM:76.=MM:DTEXT.DAT/DO(cr)
  1075. X  FLX>`5EZ
  1076. X
  1077. XTo compile Dungeon, issue the following command:
  1078. X
  1079. X  $ @VMSCMP(cr)
  1080. X
  1081. XThere should be no error messages.
  1082. X
  1083. XTo link the compiled sources, issue the following command:
  1084. X
  1085. X  $ @VMSBLD(cr)
  1086. X
  1087. XIt is now possible to run Dungeon:
  1088. X
  1089. X  $ RUN DUNGEON(cr)
  1090. X
  1091. XWhen invoked, Dungeon takes no more than 5-10 seconds to start up.
  1092. X
  1093. XNotes on the executable program:
  1094. X
  1095. X  - The only files needed to execute Dungeon are DUNGEON.EXE,
  1096. X    DINDX.DAT, and DTEXT.DAT.  All other files can be deleted.
  1097. X
  1098. X  - Files DINDX.DAT and DTEXT.DAT must reside in the user's area
  1099. X    (this can be changed with a source edit, see section 8).
  1100. X`0C6.  Warnings and Restrictions
  1101. X
  1102. XFor those familiar with the MDL version of the game on the ARPAnet,
  1103. Xthe following is a list of the major incompatabilties:
  1104. X
  1105. X`09-The first six letters of a word are considered
  1106. X`09 significant, instead of the first five.
  1107. X`09-The syntax for TELL, ANSWER, and INCANT is different.
  1108. X`09-Compound objects are not recognized.
  1109. X`09-Compound commands can be delimited with comma as well
  1110. X`09 as period.
  1111. X
  1112. XAlso, the palantir, brochure, and dead man problems are not
  1113. Ximplemented.
  1114. X
  1115. X
  1116. X7.  Abstract of Informational Printouts
  1117. X
  1118. XSUMMARY
  1119. X-------
  1120. X
  1121. X`09`09    Welcome to Dungeon!
  1122. X
  1123. X   Dungeon is a game of adventure, danger, and low cunning.  In it
  1124. Xyou will explore some of the most amazing territory ever seen by mortal
  1125. Xman.  Hardened adventurers have run screaming from the terrors contained
  1126. Xwithin.
  1127. X
  1128. X   In Dungeon, the intrepid explorer delves into the forgotten secrets
  1129. Xof a lost labyrinth deep in the bowels of the earth, searching for
  1130. Xvast treasures long hidden from prying eyes, treasures guarded by
  1131. Xfearsome monsters and diabolical traps!
  1132. X
  1133. X   No DECsystem should be without one!
  1134. X
  1135. X   Dungeon was created at the Programming Technology Division of the MIT
  1136. XLaboratory for Computer Science by Tim Anderson, Marc Blank, Bruce
  1137. XDaniels, and Dave Lebling.  It was inspired by the Adventure game of
  1138. XCrowther and Woods, and the Dungeons and Dragons game of Gygax
  1139. Xand Arneson.  The original version was written in MDL (alias MUDDLE).
  1140. XThe current version was translated from MDL into FORTRAN IV by
  1141. Xa somewhat paranoid DEC engineer who prefers to remain anonymous.
  1142. X
  1143. X   On-line information may be obtained with the commands HELP and INFO.
  1144. X`0CINFO
  1145. X----
  1146. X
  1147. XWelcome to Dungeon!
  1148. X
  1149. X   You are near a large dungeon, which is reputed to contain vast
  1150. Xquantities of treasure.   Naturally, you wish to acquire some of it.
  1151. XIn order to do so, you must of course remove it from the dungeon.  To
  1152. Xreceive full credit for it, you must deposit it safely in the trophy
  1153. Xcase in the living room of the house.
  1154. X
  1155. X   In addition to valuables, the dungeon contains various objects
  1156. Xwhich may or may not be useful in your attempt to get rich.  You may
  1157. Xneed sources of light, since dungeons are often dark, and weapons,
  1158. Xsince dungeons often have unfriendly things wandering about.  Reading
  1159. Xmaterial is scattered around the dungeon as well;  some of it
  1160. Xis rumored to be useful.
  1161. X
  1162. X   To determine how successful you have been, a score is kept.
  1163. XWhen you find a valuable object and pick it up, you receive a
  1164. Xcertain number of points, which depends on the difficulty of finding
  1165. Xthe object.  You receive extra points for transporting the treasure
  1166. Xsafely to the living room and placing it in the trophy case.  In
  1167. Xaddition, some particularly interesting rooms have a value associated
  1168. Xwith visiting them.  The only penalty is for getting yourself killed,
  1169. Xwhich you may do only twice.
  1170. X
  1171. X   Of special note is a thief (always carrying a large bag) who
  1172. Xlikes to wander around in the dungeon (he has never been seen by the
  1173. Xlight of day).  He likes to take things.  Since he steals for pleasure
  1174. Xrather than profit and is somewhat sadistic, he only takes things which
  1175. Xyou have seen.  Although he prefers valuables, sometimes in his haste
  1176. Xhe may take something which is worthless.  From time to time, he examines
  1177. Xhis take and discards objects which he doesn't like.  He may occas-
  1178. Xionally stop in a room you are visiting, but more often he just wanders
  1179. Xthrough and rips you off (he is a skilled pickpocket).
  1180. X
  1181. XHELP
  1182. X----
  1183. X
  1184. XUseful commands:
  1185. X
  1186. +-+-+-+-+-+-+-+-  END  OF PART 20 +-+-+-+-+-+-+-+-
  1187.