C GDT- GAME DEBUGGING TOOL
C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
C WRITTEN BY R. M. SUPNIK
C no debugging tool available in pdp version
CHARACTER*2 DBGCMD(38),CMD
LOGICAL VALID1,VALID2,VALID3
C MISCELLANEOUS VARIABLES
COMMON /STAR/ MBASE,STRBIT
VALID1(A1,L1)=(A1.GT.0).AND.(A1.LE.L1)
VALID2(A1,A2,L1)=VALID1(A1,L1).AND.VALID1(A2,L1).AND.
VALID3(A1,L1,A2,L2)=VALID1(A1,L1).AND.VALID1(A2,L2)
DATA DBGCMD/'DR','DO','DA','DC','DX','DH','DL','DV','DF','DS',
& 'AF','HE','NR','NT','NC','ND','RR','RT','RC','RD',
& 'TK','EX','AR','AO','AA','AC','AX','AV','D2','DN',
& 'AN','DM','DT','AH','DP','PD','DZ','AZ'/
DATA ldbgcm/'dr','do','da','dc','dx','dh','dl','dv','df','ds',
& 'af','he','nr','nt','nc','nd','rr','rt','rc','rd',
& 'tk','ex','ar','ao','aa','ac','ax','av','d2','dn',
& 'an','dm','dt','ah','dp','pd','dz','az'/
DATA ARGTYP/ 2 , 2 , 2 , 2 , 2 , 0 , 0 , 2 , 2 , 0 ,
& 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
& 1 , 0 , 3 , 3 , 3 , 3 , 1 , 3 , 2 , 2 ,
& 1 , 2 , 1 , 0 , 0 , 0 , 0 , 1 /
C FIRST, VALIDATE THAT THE CALLER IS AN IMPLEMENTER.
IF(GDTFLG.NE.0) GO TO 2000
100 FORMAT('You are not an authorized user.')
100 FORMAT(' You are not an authorized user.')
C HERE TO GET NEXT COMMAND
IF(CMD.EQ.' ') GO TO 2000
IF(CMD.EQ.DBGCMD(I)) GO TO 2300
C check for lower case command, as well
if(cmd .eq. ldbgcm(i)) go to 2300
245 FORMAT('Idx,Ary: ',$)
225 FORMAT(' Limits: ',$)
245 FORMAT(' Idx,Ary: ',$)
2300 GO TO (2400,2500,2600,2700),ARGTYP(I)+1
C !TYPE 3, REQUEST ARRAY COORDS.
C !TYPE 1, READ ENTRY NO.
2400 GO TO (10000,11000,12000,13000,14000,15000,16000,17000,18000,
& 19000,20000,21000,22000,23000,24000,25000,26000,27000,28000,
& 29000,30000,31000,32000,33000,34000,35000,36000,37000,38000,
& 39000,40000,41000,42000,43000,44000,45000,46000,47000),I
10000 IF(.NOT.VALID2(J,K,RLNT)) GO TO 2200
WRITE(OUTCH,310) I,(EQR(I,L),L=1,5)
300 FORMAT('RM# DESC1 EXITS ACTION VALUE FLAGS')
310 FORMAT(I3,4(1X,I6),1X,I6)
300 FORMAT(' RM# DESC1 EXITS ACTION VALUE FLAGS')
310 FORMAT(1X,I3,4(1X,I6),1X,I6)
11000 IF(.NOT.VALID2(J,K,OLNT)) GO TO 2200
WRITE(OUTCH,330) I,(EQO(I,L),L=1,14)
320 FORMAT('OB# DESC1 DESC2 DESCO ACT FLAGS1 FLAGS2 FVL TVL
& SIZE CAPAC ROOM ADV CON READ')
330 FORMAT(I3,3I6,I4,2I7,2I4,2I6,1X,3I4,I6)
320 FORMAT(' OB# DESC1 DESC2 DESCO ACT FLAGS1 FLAGS2 FVL TVL
& SIZE CAPAC ROOM ADV CON READ')
330 FORMAT(1X,I3,3I6,I4,2I7,2I4,2I6,1X,3I4,I6)
C DA-- DISPLAY ADVENTURERS
12000 IF(.NOT.VALID2(J,K,ALNT)) GO TO 2200
WRITE(OUTCH,350) I,(EQA(I,L),L=1,7)
340 FORMAT('AD# ROOM SCORE VEHIC OBJECT ACTION STREN FLAGS')
350 FORMAT(I3,6(1X,I6),1X,I6)
340 FORMAT(' AD# ROOM SCORE VEHIC OBJECT ACTION STREN FLAGS')
350 FORMAT(1X,I3,6(1X,I6),1X,I6)
C DC-- DISPLAY CLOCK EVENTS
13000 IF(.NOT.VALID2(J,K,CLNT)) GO TO 2200
WRITE(OUTCH,370) I,(EQC(I,L),L=1,2),CFLAG(I)
360 FORMAT('CL# TICK ACTION FLAG')
370 FORMAT(I3,1X,I6,1X,I6,5X,L1)
360 FORMAT(' CL# TICK ACTION FLAG')
370 FORMAT(1X,I3,1X,I6,1X,I6,5X,L1)
14000 IF(.NOT.VALID2(J,K,XLNT)) GO TO 2200
WRITE(OUTCH,390) I,L,(TRAVEL(L1),L1=I,L)
380 FORMAT(' RANGE CONTENTS')
390 FORMAT(I3,'-',I3,3X,10I7)
380 FORMAT(' RANGE CONTENTS')
390 FORMAT(1X,I3,'-',I3,3X,10I7)
15000 WRITE(OUTCH,400) THFPOS,THFFLG,THFACT,SWDACT,SWDSTA
400 FORMAT('THFPOS=',I6,', THFFLG=',L2,',THFACT=',L2/
& ' SWDACT=',L2,', SWDSTA=',I2)
400 FORMAT(' THFPOS=',I6,', THFFLG=',L2,',THFACT=',L2/
& ' SWDACT=',L2,', SWDSTA=',I2)
16000 WRITE(OUTCH,410) RLNT,XLNT,OLNT,CLNT,VLNT,ALNT,MLNT,R2LNT,
410 FORMAT('R=',I6,', X=',I6,', O=',I6,', C=',I6/
& 'V=',I6,', A=',I6,', M=',I6,', R2=',I5/
& 'MBASE=',I6,', STRBIT=',I6)
410 FORMAT(' R=',I6,', X=',I6,', O=',I6,', C=',I6/
& ' V=',I6,', A=',I6,', M=',I6,', R2=',I5/
& ' MBASE=',I6,', STRBIT=',I6)
17000 IF(.NOT.VALID2(J,K,VLNT)) GO TO 2200
WRITE(OUTCH,430) I,(EQV(I,L),L=1,5)
420 FORMAT('VL# OBJECT PROB OPPS BEST MELEE')
420 FORMAT(' VL# OBJECT PROB OPPS BEST MELEE')
430 FORMAT(1X,I3,5(1X,I6))
18000 IF(.NOT.VALID2(J,K,FMAX)) GO TO 2200
WRITE(OUTCH,440) I,FLAGS(I)
440 FORMAT('Flag #',I2,' = ',L1)
440 FORMAT(' Flag #',I2,' = ',L1)
19000 WRITE(OUTCH,450) PRSA,PRSO,PRSI,PRSWON,PRSCON
WRITE(OUTCH,460) WINNER,HERE,TELFLG
WRITE(OUTCH,470) MOVES,DEATHS,RWSCOR,MXSCOR,MXLOAD,LTSHFT,BLOC,
& MUNGRM,HS,EGSCOR,EGMXSC
WRITE(OUTCH,475) FROMDR,SCOLRM,SCOLAC
450 FORMAT('Parse vector=',3(1X,I6),1X,L6,1X,I6)
460 FORMAT('Play vector= ',2(1X,I6),1X,L6)
470 FORMAT('State vector=',9(1X,I6)/14X,2(1X,I6))
475 FORMAT('Scol vector= ',1X,I6,2(1X,I6))
450 FORMAT(' Parse vector=',3(1X,I6),1X,L6,1X,I6)
460 FORMAT(' Play vector= ',2(1X,I6),1X,L6)
470 FORMAT(' State vector=',9(1X,I6)/14X,2(1X,I6))
475 FORMAT(' Scol vector= ',1X,I6,2(1X,I6))
20000 IF(.NOT.VALID1(J,FMAX)) GO TO 2200
WRITE(OUTCH,480) FLAGS(J)
480 FORMAT('Old=',L2,6X,'New= ',$)
480 FORMAT(' Old=',L2,6X,'New= ',$)
900 FORMAT('Valid commands are:'/'AA- Alter ADVS'/
& 'AC- Alter CEVENT'/'AF- Alter FINDEX'/'AH- Alter HERE'/
& 'AN- Alter switches'/'AO- Alter OBJCTS'/'AR- Alter ROOMS'/
& 'AV- Alter VILLS'/'AX- Alter EXITS'/
& 'AZ- Alter PUZZLE'/'DA- Display ADVS'/
& 'DC- Display CEVENT'/'DF- Display FINDEX'/'DH- Display HACKS'/
& 'DL- Display lengths'/'DM- Display RTEXT'/
& 'DN- Display switches'/
& 'DO- Display OBJCTS'/'DP- Display parser'/
& 'DR- Display ROOMS'/'DS- Display state'/'DT- Display text'/
& 'DV- Display VILLS'/'DX- Display EXITS'/'DZ- Display PUZZLE'/
& 'D2- Display ROOM2'/'EX- Exit'/'HE- Type this message'/
& 'NC- No cyclops'/'ND- No deaths'/'NR- No robber'/
& 'NT- No troll'/'PD- Program detail'/
& 'RC- Restore cyclops'/'RD- Restore deaths'/
& 'RR- Restore robber'/'RT- Restore troll'/'TK- Take.')
900 FORMAT(' Valid commands are:'/' AA- Alter ADVS'/
& ' AC- Alter CEVENT'/' AF- Alter FINDEX'/' AH- Alter HERE'/
& ' AN- Alter switches'/' AO- Alter OBJCTS'/' AR- Alter ROOMS'/
& ' AV- Alter VILLS'/' AX- Alter EXITS'/
& ' AZ- Alter PUZZLE'/' DA- Display ADVS'/
& ' DC- Display CEVENT'/' DF- Display FINDEX'/' DH- Display HACKS'/
& ' DL- Display lengths'/' DM- Display RTEXT'/
& ' DN- Display switches'/
& ' DO- Display OBJCTS'/' DP- Display parser'/
& ' DR- Display ROOMS'/' DS- Display state'/' DT- Display text'/
& ' DV- Display VILLS'/' DX- Display EXITS'/' DZ- Display PUZZLE'/
& ' D2- Display ROOM2'/' EX- Exit'/' HE- Type this message'/
& ' NC- No cyclops'/' ND- No deaths'/' NR- No robber'/
& ' NT- No troll'/' PD- Program detail'/
& ' RC- Restore cyclops'/' RD- Restore deaths'/
& ' RR- Restore robber'/' RT- Restore troll'/' TK- Take.')
CALL NEWSTA(THIEF,0,0,0,0)
500 FORMAT(' No robber.')
CALL NEWSTA(TROLL,0,0,0,0)
CALL NEWSTA(CYCLO,0,0,0,0)
520 FORMAT('No cyclops.')
520 FORMAT(' No cyclops.')
530 FORMAT(' No deaths.')
540 FORMAT('Restored robber.')
540 FORMAT(' Restored robber.')
CALL NEWSTA(TROLL,0,MTROL,0,0)
550 FORMAT('Restored troll.')
550 FORMAT(' Restored troll.')
CALL NEWSTA(CYCLO,0,MCYCL,0,0)
560 FORMAT('Restored cyclops.')
560 FORMAT(' Restored cyclops.')
570 FORMAT('Restored deaths.')
570 FORMAT(' Restored deaths.')
30000 IF(.NOT.VALID1(J,OLNT)) GO TO 2200
CALL NEWSTA(J,0,0,0,WINNER)
32000 IF(.NOT.VALID3(J,RLNT,K,5)) GO TO 2200
WRITE(OUTCH,590) EQR(J,K)
590 FORMAT('Old= ',I6,6X,'New= ',$)
590 FORMAT(' Old= ',I6,6X,'New= ',$)
C AO-- ALTER OBJECT ENTRY
33000 IF(.NOT.VALID3(J,OLNT,K,14)) GO TO 2200
WRITE(OUTCH,590) EQO(J,K)
34000 IF(.NOT.VALID3(J,ALNT,K,7)) GO TO 2200
WRITE(OUTCH,590) EQA(J,K)
C AC-- ALTER CLOCK EVENTS
35000 IF(.NOT.VALID3(J,CLNT,K,3)) GO TO 2200
WRITE(OUTCH,590) EQC(J,K)
35500 WRITE(OUTCH,480) CFLAG(J)
36000 IF(.NOT.VALID1(J,XLNT)) GO TO 2200
WRITE(OUTCH,610) TRAVEL(J)
READ(INPCH,620) TRAVEL(J)
610 FORMAT('Old= ',I6,6X,'New= ',$)
610 FORMAT(' Old= ',I6,6X,'New= ',$)
37000 IF(.NOT.VALID3(J,VLNT,K,5)) GO TO 2200
WRITE(OUTCH,590) EQV(J,K)
C D2-- DISPLAY ROOM2 LIST
38000 IF(.NOT.VALID2(J,K,R2LNT)) GO TO 2200
WRITE(OUTCH,630) I,RROOM2(I),OROOM2(I)
630 FORMAT('#',I2,' Room=',I6,' Obj=',I6)
630 FORMAT(' #',I2,' Room=',I6,' Obj=',I6)
39000 IF(.NOT.VALID2(J,K,SMAX)) GO TO 2200
WRITE(OUTCH,640) I,SWITCH(I)
640 FORMAT('Switch #',I2,' = ',I6)
640 FORMAT(' Switch #',I2,' = ',I6)
40000 IF(.NOT.VALID1(J,SMAX)) GO TO 2200
WRITE(OUTCH,590) SWITCH(J)
READ(INPCH,600) SWITCH(J)
41000 IF(.NOT.VALID2(J,K,MLNT)) GO TO 2200
WRITE(OUTCH,650) I,L,(RTEXT(L1),L1=I,L)
650 FORMAT(I3,'-',I3,3X,10(1X,I6))
650 FORMAT(1X,I3,'-',I3,3X,10(1X,I6))
43000 WRITE(OUTCH,590) HERE
C DP-- DISPLAY PARSER STATE
44000 WRITE(OUTCH,660) ORP,LASTIT,PVEC,SYN
660 FORMAT('ORPHS= ',I7,I7,4I7/
& 'PV= ',I7,4I7/'SYN= ',6I7/15X,5I7)
660 FORMAT(' ORPHS= ',I7,I7,4I7/
& ' PV= ',I7,4I7/' SYN= ',6I7/15X,5I7)
C PD-- PROGRAM DETAIL DEBUG
45000 WRITE(OUTCH,610) PRSFLG
C DZ-- DISPLAY PUZZLE ROOM
WRITE(OUTCH,670) (CPVEC(J),J=I,I+7)
47000 IF(.NOT.VALID1(J,64)) GO TO 2200
WRITE(OUTCH,590) CPVEC(J)