1: #include "files.h"
   2: 
   3: #ifndef INDXFILE
   4: #define INDXFILE '/usr/games/lib/dunlib/dindx.dat'
   5: #endif
   6: #ifndef TEXTFILE
   7: #define TEXTFILE '/usr/games/lib/dunlib/dtext.dat'
   8: #endif
   9: #ifndef WIZARDID
  10: #define WIZARDID 0
  11: #endif
  12: 
  13: C INIT-- DUNGEON INITIALIZATION SUBROUTINE
  14: C
  15: C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
  16: C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
  17: C WRITTEN BY R. M. SUPNIK
  18: C
  19: C DECLARATIONS
  20: C
  21:         LOGICAL FUNCTION INIT(X)
  22:         IMPLICIT INTEGER (A-Z)
  23: #ifndef PDP
  24:         LOGICAL PROTCT
  25:         INTEGER DATARR(3)
  26: #endif PDP
  27: #include "parser.h"
  28: #include "gamestate.h"
  29: #include "state.h"
  30: #include "screen.h"
  31: #include "mindex.h"
  32: C
  33: C MISCELLANEOUS VARIABLES
  34: C
  35:         COMMON /STAR/ MBASE,STRBIT
  36:         COMMON /VERS/ VMAJ,VMIN,VEDIT
  37:         COMMON /TIME/ PLTIME,SHOUR,SMIN,SSEC
  38: #include "io.h"
  39: #include "debug.h"
  40:         COMMON /HYPER/ HFACTR
  41: #include "rooms.h"
  42: #include "rflag.h"
  43: #include "rindex.h"
  44: #include "exits.h"
  45: #include "curxt.h"
  46: #include "xpars.h"
  47: #include "objects.h"
  48: #include "oindex.h"
  49: #include "clock.h"
  50: #include "villians.h"
  51: #include "advers.h"
  52: #include "flags.h"
  53: C INIT, PAGE 2
  54: C
  55: #ifndef PDP
  56: #ifdef SYSV
  57: C make output unbuffered
  58:         call unbuf
  59: C
  60: #endif
  61: C FIRST CHECK FOR PROTECTION VIOLATION
  62: C
  63:         IF(PROTCT(X)) GO TO 10000
  64: C						!PROTECTION VIOLATION?
  65:         PRINT 10100
  66: #ifdef NOCC
  67: 10100   FORMAT('There appears before you a threatening figure clad '
  68: &       'all over'/'in heavy black armor.  His legs seem like the '
  69: &       'massive trunk'/'of the oak tree.  His broad shoulders and '
  70: &       'helmeted head loom'/'high over your own puny frame, and '
  71: &       'you realize that his powerful'/'arms could easily crush the '
  72: &       'very life from your body.  There'/'hangs from his belt a '
  73: &       'veritable arsenal of deadly weapons:'/'sword, mace, ball '
  74: &       'and chain, dagger, lance, and trident.'/'He speaks with a '
  75: &       'commanding voice:'//20X,'"You shall not pass."'//'As '
  76: &       'he grabs you by the neck all grows dim about you.')
  77: #else NOCC
  78: 10100   FORMAT(' There appears before you a threatening figure clad '
  79: &       'all over'/' in heavy black armor.  His legs seem like the '
  80: &       'massive trunk'/' of the oak tree.  His broad shoulders and '
  81: &       'helmeted head loom'/' high over your own puny frame, and '
  82: &       'you realize that his powerful'/' arms could easily crush the '
  83: &       'very life from your body.  There'/' hangs from his belt a '
  84: &       'veritable arsenal of deadly weapons:'/' sword, mace, ball '
  85: &       'and chain, dagger, lance, and trident.'/' He speaks with a '
  86: &       'commanding voice:'//20X,'"You shall not pass."'//' As '
  87: &       'he grabs you by the neck all grows dim about you.')
  88: #endif NOCC
  89:         CALL EXIT
  90: #endif PDP
  91: C
  92: C NOW START INITIALIZATION PROPER
  93: C
  94: #ifdef PDP
  95: C
  96: C   Note: arrays FLAGS & SWITCH are initialized in the following
  97: C           DATA statements, instead of using DO loops and assignments
  98: C           as used before.  This saves some code space.
  99: C
 100:         DATA FLAGS/.FALSE.,.FALSE.,.FALSE.,.FALSE.,.FALSE.,.FALSE.,
 101: &                  .FALSE.,.FALSE.,.FALSE.,.FALSE.,.FALSE.,.FALSE.,
 102: &                  .FALSE.,.FALSE.,.FALSE.,.FALSE.,.FALSE.,.FALSE.,
 103: &                   .TRUE.,.FALSE.,.FALSE.,.FALSE.,.FALSE.,.TRUE.,
 104: &                  .FALSE.,.FALSE.,.FALSE.,.TRUE.,.FALSE.,.FALSE.,
 105: &                  .FALSE.,.FALSE.,.FALSE.,.FALSE.,.FALSE.,.FALSE.,
 106: &                  .FALSE.,.FALSE.,.FALSE.,.TRUE.,.TRUE.,.FALSE.,
 107: &                   .TRUE.,.FALSE.,.FALSE.,.FALSE./
 108: C
 109:         DATA SWITCH/0,0,0,0,0,0,0,0,0,
 110: &                   4,0,270,0,0,0,0,0,
 111: &                   1,1,0,0,10/
 112: C
 113: C   Note: SWITCH(13) or MLOC is initialized equal to MRB later.
 114: C
 115: C
 116:         DATA LTSHFT/10/
 117:         DATA EGSCOR/0/
 118:         DATA EGMXSC/0/
 119:         DATA MXLOAD/100/
 120:         DATA RWSCOR/0/
 121:         DATA DEATHS/0/
 122:         DATA MOVES/0/
 123:         DATA PLTIME/0/
 124:         DATA MUNGRM/0/
 125:         DATA HS/0/
 126:         DATA PRSA/0/
 127:         DATA PRSI/0/
 128:         DATA PRSO/0/
 129:         DATA PRSCON/1/
 130:         DATA OFLAG/0/
 131:         DATA OACT/0/
 132:         DATA OSLOT/0/
 133:         DATA OPREP/0/
 134:         DATA ONAME/0/
 135:         DATA THFFLG/.FALSE./
 136:         DATA THFACT/.TRUE./
 137:         DATA SWDACT/.FALSE./
 138:         DATA SWDSTA/0/
 139: C
 140:         DATA RECNO/1/
 141:         DATA MBASE/0/
 142:         DATA INPCH/5/
 143:         DATA OUTCH/5/
 144:         DATA DBCH/2/
 145: C
 146: C INIT, PAGE 3
 147: C
 148: C
 149:         DATA DBGFLG/0/
 150:         DATA PRSFLG/0/
 151:         DATA GDTFLG/0/
 152: C
 153:         FROMDR=0
 154:         SCOLRM=0
 155:         SCOLAC=0
 156:         INIT=.FALSE.
 157:         MLOC=MRB
 158: C
 159: C INIT, PAGE 4
 160: C
 161: C NOW RESTORE FROM EXISTING INDEX FILE.
 162: C
 163:         call intrd(i)
 164:         call intrd(j)
 165:         call intrd(k)
 166:         IF((I.NE.VMAJ).OR.(J.NE.VMIN))
 167: &               GO TO 1925
 168: C
 169:         call intrd(MXSCOR)
 170:         call intrd(STRBIT)
 171:         call intrd(EGMXSC)
 172: C
 173:         call intrd(RLNT)
 174:         call intrd(RDESC2)
 175:         call aryrd(200,RDESC1)
 176:         call aryrd(200,REXIT)
 177:         call aryrd(200,RACTIO)
 178:         call aryrd(200,RVAL)
 179:         call aryrd(200,RFLAG)
 180: C
 181:         call intrd(XLNT)
 182:         call aryrd(900,TRAVEL)
 183:         call intrd(OLNT)
 184:         call aryrd(220,ODESC1)
 185:         call aryrd(220,ODESC2)
 186:         call aryrd(220,ODESCO)
 187:         call aryrd(220,OACTIO)
 188:         call aryrd(220,OFLAG1)
 189:         call aryrd(220,OFLAG2)
 190:         call aryrd(220,OFVAL)
 191:         call aryrd(220,OTVAL)
 192:         call aryrd(220,OSIZE)
 193:         call aryrd(220,OCAPAC)
 194:         call aryrd(220,OROOM)
 195:         call aryrd(220,OADV)
 196:         call aryrd(220,OCAN)
 197:         call aryrd(220,OREAD)
 198: C
 199:         call intrd(R2LNT)
 200:         call aryrd(20,OROOM2)
 201:         call aryrd(20,RROOM2)
 202: C
 203:         call intrd(CLNT)
 204:         call aryrd(25,CTICK)
 205:         call aryrd(25,CACTIO)
 206: C
 207:         do 990 i=1,25
 208:         cflag(i)=.TRUE.
 209:         call logrd(j)
 210:         if(j.EQ.0) CFLAG(i)=.FALSE.
 211: 990     continue
 212: C
 213:         call intrd(VLNT)
 214:         call aryrd(4,VILLNS)
 215:         call aryrd(4,VPROB)
 216:         call aryrd(4,VOPPS)
 217:         call aryrd(4,VBEST)
 218:         call aryrd(4,VMELEE)
 219: C
 220:         call intrd(ALNT)
 221:         call aryrd(4,AROOM)
 222:         call aryrd(4,ASCORE)
 223:         call aryrd(4,AVEHIC)
 224:         call aryrd(4,AOBJ)
 225:         call aryrd(4,AACTIO)
 226:         call aryrd(4,ASTREN)
 227:         call aryrd(4,AFLAG)
 228: C
 229:         call intrd(MBASE)
 230:         call intrd(MLNT)
 231: C
 232: C   The RTEXT array is not used here, and isn't read (it's used
 233: C   in "speak.F")
 234: C
 235:         call initnd
 236: C
 237: C INIT, PAGE 5
 238: C
 239: C THE INTERNAL DATA BASE IS NOW ESTABLISHED.
 240: C SET UP TO PLAY THE GAME.
 241: C
 242: 1025    CALL ITIME(SHOUR,SMIN,SSEC)
 243:         CALL INIRND(or(SHOUR,or(SMIN,SSEC)))
 244: C
 245:         WINNER=PLAYER
 246:         LASTIT=AOBJ(PLAYER)
 247:         HERE=AROOM(WINNER)
 248:         THFPOS=OROOM(THIEF)
 249:         BLOC=OROOM(BALLO)
 250:         INIT=.TRUE.
 251: #ifdef debug
 252: C
 253: C	Normally, PRSFLG is setable in gdt to allow seeing various
 254: C	parse results.  Since the pdp version does not have gdt,
 255: C	PRSFLG is set to show full debugging info when debug is enabled.
 256: C
 257:         PRSFLG=65535
 258: #endif debug
 259: C
 260: C
 261:         RETURN
 262: C INIT, PAGE 6
 263: C
 264: C ERRORS-- INIT FAILS.
 265: C
 266: 1925    continue
 267:         END
 268: #else PDP
 269: 10000   INIT=.FALSE.
 270: C						!ASSUME INIT FAILS.
 271:         MMAX=1050
 272: C						!SET UP ARRAY LIMITS.
 273:         OMAX=220
 274:         RMAX=200
 275:         VMAX=4
 276:         AMAX=4
 277:         CMAX=25
 278:         FMAX=46
 279:         SMAX=22
 280:         XMAX=900
 281:         R2MAX=20
 282:         DIRMAX=15
 283: C
 284:         MLNT=0
 285: C						!INIT ARRAY COUNTERS.
 286:         OLNT=0
 287:         RLNT=0
 288:         VLNT=0
 289:         ALNT=0
 290:         CLNT=0
 291:         XLNT=1
 292:         R2LNT=0
 293: C
 294:         LTSHFT=10
 295: C						!SET UP STATE VARIABLES.
 296:         MXSCOR=LTSHFT
 297:         EGSCOR=0
 298:         EGMXSC=0
 299:         MXLOAD=100
 300:         RWSCOR=0
 301:         DEATHS=0
 302:         MOVES=0
 303:         PLTIME=0
 304:         MUNGRM=0
 305:         HS=0
 306:         PRSA=0
 307: C						!CLEAR PARSE VECTOR.
 308:         PRSI=0
 309:         PRSO=0
 310:         PRSCON=1
 311:         OFLAG=0
 312: C						!CLEAR ORPHANS.
 313:         OACT=0
 314:         OSLOT=0
 315:         OPREP=0
 316:         ONAME=0
 317:         THFFLG=.FALSE.
 318: C						!THIEF NOT INTRODUCED BUT
 319:         THFACT=.TRUE.
 320: C						!IS ACTIVE.
 321:         SWDACT=.FALSE.
 322: C						!SWORD IS INACTIVE.
 323:         SWDSTA=0
 324: C						!SWORD IS OFF.
 325: C
 326:         RECNO=1
 327: C						!INIT DB FILE POINTER.
 328:         MBASE=0
 329: C						!INIT MELEE BASE.
 330: C   LOGICAL UNIT NRS: 5=STDIN, 6=STDOUT
 331:         INPCH=5
 332: C						!TTY INPUT
 333:         OUTCH=6
 334:         DBCH=2
 335: C						!DATA BASE.
 336: C INIT, PAGE 3
 337: C
 338: C INIT ALL ARRAYS.
 339: C
 340:         DO 5 I=1,CMAX
 341: C						!CLEAR CLOCK EVENTS
 342:           CFLAG(I)=.FALSE.
 343:           CTICK(I)=0
 344:           CACTIO(I)=0
 345: 5       CONTINUE
 346: C
 347:         DO 10 I=1,FMAX
 348: C						!CLEAR FLAGS.
 349:           FLAGS(I)=.FALSE.
 350: 10      CONTINUE
 351:         BUOYF=.TRUE.
 352: C						!SOME START AS TRUE.
 353:         EGYPTF=.TRUE.
 354:         CAGETF=.TRUE.
 355:         MR1F=.TRUE.
 356:         MR2F=.TRUE.
 357:         FOLLWF=.TRUE.
 358:         DO 12 I=1,SMAX
 359: C						!CLEAR SWITCHES.
 360:           SWITCH(I)=0
 361: 12      CONTINUE
 362:         ORMTCH=4
 363: C						!NUMBER OF MATCHES.
 364:         LCELL=1
 365:         PNUMB=1
 366:         MDIR=270
 367:         MLOC=MRB
 368:         CPHERE=10
 369: C
 370:         DO 15 I=1,R2MAX
 371: C						!CLEAR ROOM 2 ARRAY.
 372:           RROOM2(I)=0
 373:           OROOM2(I)=0
 374: 15      CONTINUE
 375: C
 376:         DO 20 I=1,XMAX
 377: C						!CLEAR TRAVEL ARRAY.
 378:           TRAVEL(I)=0
 379: 20      CONTINUE
 380: C
 381:         DO 30 I=1,VMAX
 382: C						!CLEAR VILLAINS ARRAYS.
 383:           VOPPS(I)=0
 384:           VPROB(I)=0
 385:           VILLNS(I)=0
 386:           VBEST(I)=0
 387:           VMELEE(I)=0
 388: 30      CONTINUE
 389: C
 390:         DO 40 I=1,OMAX
 391: C						!CLEAR OBJECT ARRAYS.
 392:           ODESC1(I)=0
 393:           ODESC2(I)=0
 394:           ODESCO(I)=0
 395:           OREAD(I)=0
 396:           OACTIO(I)=0
 397:           OFLAG1(I)=0
 398:           OFLAG2(I)=0
 399:           OFVAL(I)=0
 400:           OTVAL(I)=0
 401:           OSIZE(I)=0
 402:           OCAPAC(I)=0
 403:           OCAN(I)=0
 404:           OADV(I)=0
 405:           OROOM(I)=0
 406: 40      CONTINUE
 407: C
 408:         RDESC2=0
 409: C						!CLEAR DESC BASE PTR.
 410:         DO 50 I=1,RMAX
 411: C						!CLEAR ROOM ARRAYS.
 412:           RDESC1(I)=0
 413:           RACTIO(I)=0
 414:           RFLAG(I)=0
 415:           RVAL(I)=0
 416:           REXIT(I)=0
 417: 50      CONTINUE
 418: C
 419:         DO 60 I=1,MMAX
 420: C						!CLEAR MESSAGE DIRECTORY.
 421:           RTEXT(I)=0
 422: 60      CONTINUE
 423: C
 424:         DO 70 I=1,AMAX
 425: C						!CLEAR ADVENTURER'S ARRAYS.
 426:           AROOM(I)=0
 427:           ASCORE(I)=0
 428:           AVEHIC(I)=0
 429:           AOBJ(I)=0
 430:           AACTIO(I)=0
 431:           ASTREN(I)=0
 432:           AFLAG(I)=0
 433: 70      CONTINUE
 434: C
 435:         DBGFLG=0
 436:         PRSFLG=0
 437:         GDTFLG=0
 438: C
 439: C allow setting gdtflg true if user id matches wizard id
 440: C this way, the wizard doesn't have to recompile to use gdt
 441: C
 442:         if (getuid() .eq. WIZARDID) gdtflg=1
 443: C
 444:         FROMDR=0
 445: C						!INIT SCOL GOODIES.
 446:         SCOLRM=0
 447:         SCOLAC=0
 448: C INIT, PAGE 4
 449: C
 450: C NOW RESTORE FROM EXISTING INDEX FILE.
 451: C
 452:         OPEN(UNIT=1,file=INDXFILE,status='OLD',
 453: #ifdef XELOS
 454: &               FORM='FORMATTED',ACCESS='SEQUENTIAL',ERR=1900,recl=1)
 455: #else
 456: &               FORM='FORMATTED',ACCESS='SEQUENTIAL',ERR=1900)
 457: #endif
 458:         rewind(unit=1, err=1900)
 459:         READ(1,130) I,J,K
 460: C						!GET VERSION.
 461:         IF((I.NE.VMAJ).OR.(J.NE.VMIN))
 462: &               GO TO 1925
 463: 
 464:         OPEN(UNIT=DBCH,file=TEXTFILE,status='OLD',
 465: &               FORM='UNFORMATTED',ACCESS='DIRECT',
 466: &               recl=76,ERR=1950)
 467:         rewind(unit=dbch, err=1950)
 468: 
 469: #ifdef debug
 470:         PRINT 150
 471: #ifdef NOCC
 472: 150     FORMAT('RESTORING FROM "dindx.dat"')
 473: #else NOCC
 474: 150     FORMAT(' RESTORING FROM "dindx.dat"')
 475: #endif NOCC
 476: #endif debug
 477:         READ(1,130) MXSCOR,STRBIT,EGMXSC
 478:         READ(1,130) RLNT,RDESC2,RDESC1,REXIT,RACTIO,RVAL,RFLAG
 479:         READ(1,130) XLNT,TRAVEL
 480:         READ(1,130) OLNT,ODESC1,ODESC2,ODESCO,OACTIO,OFLAG1,OFLAG2,
 481: &               OFVAL,OTVAL,OSIZE,OCAPAC,OROOM,OADV,OCAN,
 482: &               OREAD
 483:         READ(1,130) R2LNT,OROOM2,RROOM2
 484:         READ(1,130) CLNT,CTICK,CACTIO
 485:         READ(1,135) CFLAG
 486:         READ(1,130) VLNT,VILLNS,VPROB,VOPPS,VBEST,VMELEE
 487:         READ(1,130) ALNT,AROOM,ASCORE,AVEHIC,AOBJ,AACTIO,ASTREN,AFLAG
 488:         READ(1,130) MBASE,MLNT,RTEXT
 489: C
 490:         CLOSE(1)
 491:         GO TO 1025
 492: C						!INIT DONE.
 493: C
 494: C 130	FORMAT(I8)
 495: 130     FORMAT(I6)
 496: 135     FORMAT(L4)
 497: C INIT, PAGE 5
 498: C
 499: C THE INTERNAL DATA BASE IS NOW ESTABLISHED.
 500: C SET UP TO PLAY THE GAME.
 501: C
 502: 1025    CALL ITIME(SHOUR,SMIN,SSEC)
 503: C						!GET TIME AND DATE.
 504: C	CALL IDATE(I,J,K)
 505:         CALL IDATE(DATARR(1))
 506:         CALL INIRND(or(DATARR(1),or(DATARR(2),DATARR(3))),
 507: &               or(SHOUR,or(SMIN,SSEC)))
 508: C
 509:         WINNER=PLAYER
 510:         LASTIT=AOBJ(PLAYER)
 511:         HERE=AROOM(WINNER)
 512:         THFPOS=OROOM(THIEF)
 513:         BLOC=OROOM(BALLO)
 514:         INIT=.TRUE.
 515: C
 516: #ifdef debug
 517:         PRINT 1050,RLNT,RMAX,XLNT,XMAX,OLNT,OMAX,MLNT,MMAX,
 518: &         VLNT,VMAX,ALNT,AMAX,CLNT,CMAX,R2LNT,R2MAX
 519: #ifdef NOCC
 520: 1050    FORMAT('USED:'/I5,' OF',I5,' ROOMS'/
 521: &         I5,' OF',I5,' EXITS'/
 522: &         I5,' OF',I5,' OBJECTS'/
 523: &         I5,' OF',I5,' MESSAGES'/
 524: &         I5,' OF',I5,' VILLAINS'/
 525: &         I5,' OF',I5,' ADVENTURERS'/
 526: &         I5,' OF',I5,' CLOCK EVENTS'/
 527: &         I5,' OF',I5,' ROOM2 SLOTS')
 528: #else NOCC
 529: 1050    FORMAT(' USED:'/1X,I5,' OF',I5,' ROOMS'/
 530: &         1X,I5,' OF',I5,' EXITS'/
 531: &         1X,I5,' OF',I5,' OBJECTS'/
 532: &         1X,I5,' OF',I5,' MESSAGES'/
 533: &         1X,I5,' OF',I5,' VILLAINS'/
 534: &         1X,I5,' OF',I5,' ADVENTURERS'/
 535: &         1X,I5,' OF',I5,' CLOCK EVENTS'/
 536: &         1X,I5,' OF',I5,' ROOM2 SLOTS')
 537: #endif NOCC
 538:         PRINT 1150,MXSCOR,EGMXSC,RECNO,RDESC2,MBASE,STRBIT
 539: #ifdef NOCC
 540: 1150    FORMAT('MAX SCORE=',I5/'EG SCORE=',I5/
 541: &         'MAX RECNO=',I5/'RDESC2 BASE=',I5/
 542: &         'MELEE START=',I5/'STAR MASK=',I7)
 543: #else NOCC
 544: 1150    FORMAT(' MAX SCORE=',I5/' EG SCORE=',I5/
 545: &         ' MAX RECNO=',I5/' RDESC2 BASE=',I5/
 546: &         ' MELEE START=',I5/' STAR MASK=',I7)
 547: #endif NOCC
 548:         PAUSE 1
 549: #endif debug
 550: C
 551:         RETURN
 552: C INIT, PAGE 6
 553: C
 554: C ERRORS-- INIT FAILS.
 555: C
 556: 1900    PRINT 910
 557:         PRINT 980
 558:         RETURN
 559: 1925    PRINT 920,I,J,K,VMAJ,VMIN,VEDIT
 560:         PRINT 980
 561:         RETURN
 562: 1950    PRINT 960
 563:         PRINT 980
 564:         RETURN
 565: #ifdef NOCC
 566: 910     FORMAT('I can''t open ',INDXFILE,'.')
 567: 920     FORMAT('"dindx.dat" is version ',I1,'.',I1,A1,'.'/
 568: &               'I require version ',I1,'.',I1,A1,'.')
 569: 960     FORMAT('I can''t open ',TEXTFILE,'.')
 570: 980     FORMAT('Suddenly a sinister, wraithlike figure appears before '
 571: &       'you,'/'seeming to float in the air.  In a low, sorrowful voice'
 572: &       ' he says,'/'"Alas, the very nature of the world has changed, '
 573: &       'and the dungeon'/'cannot be found.  All must now pass away."'
 574: &       '  Raising his oaken staff'/'in farewell, he fades into the '
 575: &       'spreading darkness.  In his place'/'appears a tastefully '
 576: &       'lettered sign reading:'//23X,'INITIALIZATION FAILURE'//
 577: &       'The darkness becomes all encompassing, and your vision fails.')
 578: #else NOCC
 579: 910     FORMAT(' I can''t open ',INDXFILE,'.')
 580: 920     FORMAT(' "dindx.dat" is version ',I1,'.',I1,A1,'.'/
 581: &               ' I require version ',I1,'.',I1,A1,'.')
 582: 960     FORMAT(' I can''t open ',TEXTFILE,'.')
 583: 980     FORMAT(' Suddenly a sinister, wraithlike figure appears before '
 584: &       'you,'/' seeming to float in the air.  In a low, sorrowful voice'
 585: &       ' he says,'/' "Alas, the very nature of the world has changed, '
 586: &       'and the dungeon'/' cannot be found.  All must now pass away."'
 587: &       '  Raising his oaken staff'/' in farewell, he fades into the '
 588: &       'spreading darkness.  In his place'/' appears a tastefully '
 589: &       'lettered sign reading:'//23X,'INITIALIZATION FAILURE'//
 590: &       ' The darkness becomes all encompassing, and your vision fails.')
 591: #endif NOCC
 592: C
 593:         END
 594: C PROTCT-- CHECK FOR USER VIOLATION
 595: C
 596: C THIS ROUTINE SHOULD BE MODIFIED IF YOU WISH TO ADD SYSTEM
 597: C DEPENDANT PROTECTION AGAINST ABUSE.
 598: C
 599: C AT THE MOMENT, PLAY IS PERMITTED UNDER ALL CIRCUMSTANCES.
 600: C
 601:         LOGICAL FUNCTION PROTCT(X)
 602:         IMPLICIT INTEGER(A-Z)
 603: C
 604:         PROTCT=.TRUE.
 605:         RETURN
 606:         END
 607: #endif PDP

Defined macros

INDXFILE defined in line 4; never used
TEXTFILE defined in line 7; never used
WIZARDID defined in line 10; never used
Last modified: 1989-12-01
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 677
Valid CSS Valid XHTML 1.0 Strict