4.4BSD/usr/src/contrib/dungeon/gdt.F

C GDT- GAME DEBUGGING TOOL
C
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
C DECLARATIONS
C
	SUBROUTINE GDT
	IMPLICIT INTEGER (A-Z)
#ifdef PDP
C
C	no debugging tool available in pdp version
C
	call nogdt
	return
#else
	CHARACTER*2 DBGCMD(38),CMD
	INTEGER ARGTYP(38)
	LOGICAL VALID1,VALID2,VALID3
	character*2 ldbgcm(38)
#include "parser.h"
#include "gamestate.h"
#include "state.h"
#include "screen.h"
#include "puzzle.h"
C
C MISCELLANEOUS VARIABLES
C
	COMMON /STAR/ MBASE,STRBIT
#include "io.h"
#include "mindex.h"
#include "debug.h"
#include "rooms.h"
#include "rindex.h"
#include "exits.h"
#include "objects.h"
#include "oindex.h"
#include "clock.h"
#include "villians.h"
#include "advers.h"
#include "flags.h"
C
C FUNCTIONS AND DATA
C
	VALID1(A1,L1)=(A1.GT.0).AND.(A1.LE.L1)
	VALID2(A1,A2,L1)=VALID1(A1,L1).AND.VALID1(A2,L1).AND.
&		(A1.LE.A2)
	VALID3(A1,L1,A2,L2)=VALID1(A1,L1).AND.VALID1(A2,L2)
	DATA CMDMAX/38/
	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 GDT, PAGE 2
C
C FIRST, VALIDATE THAT THE CALLER IS AN IMPLEMENTER.
C
	FMAX=46
C						!SET ARRAY LIMITS.
	SMAX=22
C
	IF(GDTFLG.NE.0) GO TO 2000
C						!IF OK, SKIP.
	WRITE(OUTCH,100)
C						!NOT AN IMPLEMENTER.
	RETURN
C						!BOOT HIM OFF
C
#ifdef NOCC
100	FORMAT('You are not an authorized user.')
#else NOCC
100	FORMAT(' You are not an authorized user.')
#endif NOCC
c GDT, PAGE 2A
C
C HERE TO GET NEXT COMMAND
C
2000	WRITE(OUTCH,200)
C						!OUTPUT PROMPT.
	READ(INPCH,210) CMD
C						!GET COMMAND.
	IF(CMD.EQ.'  ') GO TO 2000
C						!IGNORE BLANKS.
	DO 2100 I=1,CMDMAX
C						!LOOK IT UP.
	  IF(CMD.EQ.DBGCMD(I)) GO TO 2300
C						!FOUND?
C	  check for lower case command, as well
	  if(cmd .eq. ldbgcm(i)) go to 2300
2100	CONTINUE
2200	WRITE(OUTCH,220)
C						!NO, LOSE.
	GO TO 2000
C
#ifdef NOCC
200	FORMAT('GDT>',$)
#else NOCC
200	FORMAT(' GDT>',$)
#endif NOCC
210	FORMAT(A2)
#ifdef NOCC
220	FORMAT('?')
#else NOCC
220	FORMAT(' ?')
#endif NOCC
230	FORMAT(2I6)
240	FORMAT(I6)
#ifdef NOCC
225	FORMAT('Limits:   ',$)
235	FORMAT('Entry:    ',$)
245	FORMAT('Idx,Ary:  ',$)
#else NOCC
225	FORMAT(' Limits:   ',$)
235	FORMAT(' Entry:    ',$)
245	FORMAT(' Idx,Ary:  ',$)
#endif NOCC
c
2300	GO TO (2400,2500,2600,2700),ARGTYP(I)+1
C						!BRANCH ON ARG TYPE.
	GO TO 2200
C						!ILLEGAL TYPE.
C
2700	WRITE(OUTCH,245)
C						!TYPE 3, REQUEST ARRAY COORDS.
	READ(INPCH,230) J,K
	GO TO 2400
C
2600	WRITE(OUTCH,225)
C						!TYPE 2, READ BOUNDS.
	READ(INPCH,230) J,K
	IF(K.EQ.0) K=J
	GO TO 2400
C
2500	WRITE(OUTCH,235)
C						!TYPE 1, READ ENTRY NO.
	READ(INPCH,240) J
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
	GO TO 2200
C						!WHAT???
C GDT, PAGE 3
C
C DR-- DISPLAY ROOMS
C
10000	IF(.NOT.VALID2(J,K,RLNT)) GO TO 2200
C						!ARGS VALID?
	WRITE(OUTCH,300)
C						!COL HDRS.
	DO 10100 I=J,K
	  WRITE(OUTCH,310) I,(EQR(I,L),L=1,5)
10100	CONTINUE
	GO TO 2000
C
#ifdef NOCC
300	FORMAT('RM#  DESC1  EXITS ACTION  VALUE  FLAGS')
310	FORMAT(I3,4(1X,I6),1X,I6)
#else NOCC
300	FORMAT(' RM#  DESC1  EXITS ACTION  VALUE  FLAGS')
310	FORMAT(1X,I3,4(1X,I6),1X,I6)
#endif NOCC
C
C DO-- DISPLAY OBJECTS
C
11000	IF(.NOT.VALID2(J,K,OLNT)) GO TO 2200
C						!ARGS VALID?
	WRITE(OUTCH,320)
C						!COL HDRS
	DO 11100 I=J,K
	  WRITE(OUTCH,330) I,(EQO(I,L),L=1,14)
11100	CONTINUE
	GO TO 2000
C
#ifdef NOCC
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)
#else NOCC
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)
#endif NOCC
C
C DA-- DISPLAY ADVENTURERS
C
12000	IF(.NOT.VALID2(J,K,ALNT)) GO TO 2200
C						!ARGS VALID?
	WRITE(OUTCH,340)
	DO 12100 I=J,K
	  WRITE(OUTCH,350) I,(EQA(I,L),L=1,7)
12100	CONTINUE
	GO TO 2000
C
#ifdef NOCC
340	FORMAT('AD#   ROOM  SCORE  VEHIC OBJECT ACTION  STREN  FLAGS')
350	FORMAT(I3,6(1X,I6),1X,I6)
#else NOCC
340	FORMAT(' AD#   ROOM  SCORE  VEHIC OBJECT ACTION  STREN  FLAGS')
350	FORMAT(1X,I3,6(1X,I6),1X,I6)
#endif NOCC
C
C DC-- DISPLAY CLOCK EVENTS
C
13000	IF(.NOT.VALID2(J,K,CLNT)) GO TO 2200
C						!ARGS VALID?
	WRITE(OUTCH,360)
	DO 13100 I=J,K
	  WRITE(OUTCH,370) I,(EQC(I,L),L=1,2),CFLAG(I)
13100	CONTINUE
	GO TO 2000
C
#ifdef NOCC
360	FORMAT('CL#   TICK ACTION  FLAG')
370	FORMAT(I3,1X,I6,1X,I6,5X,L1)
#else NOCC
360	FORMAT(' CL#   TICK ACTION  FLAG')
370	FORMAT(1X,I3,1X,I6,1X,I6,5X,L1)
#endif NOCC
C
C DX-- DISPLAY EXITS
C
14000	IF(.NOT.VALID2(J,K,XLNT)) GO TO 2200
C						!ARGS VALID?
	WRITE(OUTCH,380)
C						!COL HDRS.
	DO 14100 I=J,K,10
C						!TEN PER LINE.
	  L=MIN0(I+9,K)
C						!COMPUTE END OF LINE.
	  WRITE(OUTCH,390) I,L,(TRAVEL(L1),L1=I,L)
14100	CONTINUE
	GO TO 2000
C
#ifdef NOCC
380	FORMAT('  RANGE   CONTENTS')
390	FORMAT(I3,'-',I3,3X,10I7)
#else NOCC
380	FORMAT('   RANGE   CONTENTS')
390	FORMAT(1X,I3,'-',I3,3X,10I7)
#endif NOCC
C
C DH-- DISPLAY HACKS
C
15000	WRITE(OUTCH,400) THFPOS,THFFLG,THFACT,SWDACT,SWDSTA
	GO TO 2000
C
#ifdef NOCC
400	FORMAT('THFPOS=',I6,', THFFLG=',L2,',THFACT=',L2/
&	' SWDACT=',L2,', SWDSTA=',I2)
#else NOCC
400	FORMAT(' THFPOS=',I6,', THFFLG=',L2,',THFACT=',L2/
&	' SWDACT=',L2,', SWDSTA=',I2)
#endif NOCC
C
C DL-- DISPLAY LENGTHS
C
16000	WRITE(OUTCH,410) RLNT,XLNT,OLNT,CLNT,VLNT,ALNT,MLNT,R2LNT,
&		MBASE,STRBIT
	GO TO 2000
C
#ifdef NOCC
410	FORMAT('R=',I6,', X=',I6,', O=',I6,', C=',I6/
&	'V=',I6,', A=',I6,', M=',I6,', R2=',I5/
&	'MBASE=',I6,', STRBIT=',I6)
#else NOCC
410	FORMAT(' R=',I6,', X=',I6,', O=',I6,', C=',I6/
&	' V=',I6,', A=',I6,', M=',I6,', R2=',I5/
&	' MBASE=',I6,', STRBIT=',I6)
#endif NOCC
C
C DV-- DISPLAY VILLAINS
C
17000	IF(.NOT.VALID2(J,K,VLNT)) GO TO 2200
C						!ARGS VALID?
	WRITE(OUTCH,420)
C						!COL HDRS
	DO 17100 I=J,K
	  WRITE(OUTCH,430) I,(EQV(I,L),L=1,5)
17100	CONTINUE
	GO TO 2000
C
#ifdef NOCC
420	FORMAT('VL# OBJECT   PROB   OPPS   BEST  MELEE')
430	FORMAT(I3,5(1X,I6))
#else NOCC
420	FORMAT(' VL# OBJECT   PROB   OPPS   BEST  MELEE')
430	FORMAT(1X,I3,5(1X,I6))
#endif NOCC
C
C DF-- DISPLAY FLAGS
C
18000	IF(.NOT.VALID2(J,K,FMAX)) GO TO 2200
C						!ARGS VALID?
	DO 18100 I=J,K
	  WRITE(OUTCH,440) I,FLAGS(I)
18100	CONTINUE
	GO TO 2000
C
#ifdef NOCC
440	FORMAT('Flag #',I2,' = ',L1)
#else NOCC
440	FORMAT(' Flag #',I2,' = ',L1)
#endif NOCC
C
C DS-- DISPLAY STATE
C
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
	GO TO 2000
C
#ifdef NOCC
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))
#else NOCC
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))
#endif NOCC
C GDT, PAGE 4
C
C AF-- ALTER FLAGS
C
20000	IF(.NOT.VALID1(J,FMAX)) GO TO 2200
C						!ENTRY NO VALID?
	WRITE(OUTCH,480) FLAGS(J)
C						!TYPE OLD, GET NEW.
	READ(INPCH,490) FLAGS(J)
	GO TO 2000
C
#ifdef NOCC
480	FORMAT('Old=',L2,6X,'New= ',$)
#else NOCC
480	FORMAT(' Old=',L2,6X,'New= ',$)
#endif NOCC
490	FORMAT(L1)
C
C 21000-- HELP
C
21000	WRITE(OUTCH,900)
	GO TO 2000
C
#ifdef NOCC
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.')
#else NOCC
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.')
#endif NOCC
C
C NR-- NO ROBBER
C
22000	THFFLG=.FALSE.
C						!DISABLE ROBBER.
	THFACT=.FALSE.
	CALL NEWSTA(THIEF,0,0,0,0)
C						!VANISH THIEF.
	WRITE(OUTCH,500)
	GO TO 2000
C
#ifdef NOCC
500	FORMAT('No robber.')
#else NOCC
500	FORMAT(' No robber.')
#endif NOCC
C
C NT-- NO TROLL
C
23000	TROLLF=.TRUE.
	CALL NEWSTA(TROLL,0,0,0,0)
	WRITE(OUTCH,510)
	GO TO 2000
C
#ifdef NOCC
510	FORMAT('No troll.')
#else NOCC
510	FORMAT(' No troll.')
#endif NOCC
C
C NC-- NO CYCLOPS
C
24000	CYCLOF=.TRUE.
	CALL NEWSTA(CYCLO,0,0,0,0)
	WRITE(OUTCH,520)
	GO TO 2000
C
#ifdef NOCC
520	FORMAT('No cyclops.')
#else NOCC
520	FORMAT(' No cyclops.')
#endif NOCC
C
C ND-- IMMORTALITY MODE
C
25000	DBGFLG=1
	WRITE(OUTCH,530)
	GO TO 2000
C
#ifdef NOCC
530	FORMAT('No deaths.')
#else NOCC
530	FORMAT(' No deaths.')
#endif NOCC
C
C RR-- RESTORE ROBBER
C
26000	THFACT=.TRUE.
	WRITE(OUTCH,540)
	GO TO 2000
C
#ifdef NOCC
540	FORMAT('Restored robber.')
#else NOCC
540	FORMAT(' Restored robber.')
#endif NOCC
C
C RT-- RESTORE TROLL
C
27000	TROLLF=.FALSE.
	CALL NEWSTA(TROLL,0,MTROL,0,0)
	WRITE(OUTCH,550)
	GO TO 2000
C
#ifdef NOCC
550	FORMAT('Restored troll.')
#else NOCC
550	FORMAT(' Restored troll.')
#endif NOCC
C
C RC-- RESTORE CYCLOPS
C
28000	CYCLOF=.FALSE.
	MAGICF=.FALSE.
	CALL NEWSTA(CYCLO,0,MCYCL,0,0)
	WRITE(OUTCH,560)
	GO TO 2000
C
#ifdef NOCC
560	FORMAT('Restored cyclops.')
#else NOCC
560	FORMAT(' Restored cyclops.')
#endif NOCC
C
C RD-- MORTAL MODE
C
29000	DBGFLG=0
	WRITE(OUTCH,570)
	GO TO 2000
C
#ifdef NOCC
570	FORMAT('Restored deaths.')
#else NOCC
570	FORMAT(' Restored deaths.')
#endif NOCC
C GDT, PAGE 5
C
C TK-- TAKE
C
30000	IF(.NOT.VALID1(J,OLNT)) GO TO 2200
C						!VALID OBJECT?
	CALL NEWSTA(J,0,0,0,WINNER)
C						!YES, TAKE OBJECT.
	WRITE(OUTCH,580)
C						!TELL.
	GO TO 2000
C
#ifdef NOCC
580	FORMAT('Taken.')
#else NOCC
580	FORMAT(' Taken.')
#endif NOCC
C
C EX-- GOODBYE
C
31000	PRSCON=1
	RETURN
C
C AR--	ALTER ROOM ENTRY
C
32000	IF(.NOT.VALID3(J,RLNT,K,5)) GO TO 2200
C						!INDICES VALID?
	WRITE(OUTCH,590) EQR(J,K)
C						!TYPE OLD, GET NEW.
	READ(INPCH,600) EQR(J,K)
	GO TO 2000
C
#ifdef NOCC
590	FORMAT('Old= ',I6,6X,'New= ',$)
#else NOCC
590	FORMAT(' Old= ',I6,6X,'New= ',$)
#endif NOCC
600	FORMAT(I6)
C
C AO-- ALTER OBJECT ENTRY
C
33000	IF(.NOT.VALID3(J,OLNT,K,14)) GO TO 2200
C						!INDICES VALID?
	WRITE(OUTCH,590) EQO(J,K)
	READ(INPCH,600) EQO(J,K)
	GO TO 2000
C
C AA-- ALTER ADVS ENTRY
C
34000	IF(.NOT.VALID3(J,ALNT,K,7)) GO TO 2200
C						!INDICES VALID?
	WRITE(OUTCH,590) EQA(J,K)
	READ(INPCH,600) EQA(J,K)
	GO TO 2000
C
C AC-- ALTER CLOCK EVENTS
C
35000	IF(.NOT.VALID3(J,CLNT,K,3)) GO TO 2200
C						!INDICES VALID?
	IF(K.EQ.3) GO TO 35500
C						!FLAGS ENTRY?
	WRITE(OUTCH,590) EQC(J,K)
	READ(INPCH,600) EQC(J,K)
	GO TO 2000
C
35500	WRITE(OUTCH,480) CFLAG(J)
	READ(INPCH,490) CFLAG(J)
	GO TO 2000
C GDT, PAGE 6
C
C AX-- ALTER EXITS
C
36000	IF(.NOT.VALID1(J,XLNT)) GO TO 2200
C						!ENTRY NO VALID?
	WRITE(OUTCH,610) TRAVEL(J)
	READ(INPCH,620) TRAVEL(J)
	GO TO 2000
C
#ifdef NOCC
610	FORMAT('Old= ',I6,6X,'New= ',$)
#else NOCC
610	FORMAT(' Old= ',I6,6X,'New= ',$)
#endif NOCC
620	FORMAT(I6)
C
C AV-- ALTER VILLAINS
C
37000	IF(.NOT.VALID3(J,VLNT,K,5)) GO TO 2200
C						!INDICES VALID?
	WRITE(OUTCH,590) EQV(J,K)
	READ(INPCH,600) EQV(J,K)
	GO TO 2000
C
C D2-- DISPLAY ROOM2 LIST
C
38000	IF(.NOT.VALID2(J,K,R2LNT)) GO TO 2200
	DO 38100 I=J,K
	  WRITE(OUTCH,630) I,RROOM2(I),OROOM2(I)
38100	CONTINUE
	GO TO 2000
C
#ifdef NOCC
630	FORMAT('#',I2,'   Room=',I6,'   Obj=',I6)
#else NOCC
630	FORMAT(' #',I2,'   Room=',I6,'   Obj=',I6)
#endif NOCC
C
C DN-- DISPLAY SWITCHES
C
39000	IF(.NOT.VALID2(J,K,SMAX)) GO TO 2200
C						!VALID?
	DO 39100 I=J,K
	  WRITE(OUTCH,640) I,SWITCH(I)
39100	CONTINUE
	GO TO 2000
C
#ifdef NOCC
640	FORMAT('Switch #',I2,' = ',I6)
#else NOCC
640	FORMAT(' Switch #',I2,' = ',I6)
#endif NOCC
C
C AN-- ALTER SWITCHES
C
40000	IF(.NOT.VALID1(J,SMAX)) GO TO 2200
C						!VALID ENTRY?
	WRITE(OUTCH,590) SWITCH(J)
	READ(INPCH,600) SWITCH(J)
	GO TO 2000
C
C DM-- DISPLAY MESSAGES
C
41000	IF(.NOT.VALID2(J,K,MLNT)) GO TO 2200
C						!VALID LIMITS?
	WRITE(OUTCH,380)
	DO 41100 I=J,K,10
	  L=MIN0(I+9,K)
	  WRITE(OUTCH,650) I,L,(RTEXT(L1),L1=I,L)
41100	CONTINUE
	GO TO 2000
C
#ifdef NOCC
650	FORMAT(I3,'-',I3,3X,10(1X,I6))
#else NOCC
650	FORMAT(1X,I3,'-',I3,3X,10(1X,I6))
#endif NOCC
C
C DT-- DISPLAY TEXT
C
42000	CALL RSPEAK(J)
	GO TO 2000
C
C AH--	ALTER HERE
C
43000	WRITE(OUTCH,590) HERE
	READ(INPCH,600) HERE
	EQA(1,1)=HERE
	GO TO 2000
C
C DP--	DISPLAY PARSER STATE
C
44000	WRITE(OUTCH,660) ORP,LASTIT,PVEC,SYN
	GO TO 2000
C
#ifdef NOCC
660	FORMAT('ORPHS= ',I7,I7,4I7/
&	'PV=    ',I7,4I7/'SYN=   ',6I7/15X,5I7)
#else NOCC
660	FORMAT(' ORPHS= ',I7,I7,4I7/
&	' PV=    ',I7,4I7/' SYN=   ',6I7/15X,5I7)
#endif NOCC
C
C PD--	PROGRAM DETAIL DEBUG
C
45000	WRITE(OUTCH,610) PRSFLG
C						!TYPE OLD, GET NEW.
	READ(INPCH,620) PRSFLG
	GO TO 2000
C
C DZ--	DISPLAY PUZZLE ROOM
C
46000	DO 46100 I=1,64,8
C						!DISPLAY PUZZLE
	  WRITE(OUTCH,670) (CPVEC(J),J=I,I+7)
46100	CONTINUE
	GO TO 2000
C
#ifdef NOCC
670	FORMAT(1X,8I3)
#else NOCC
670	FORMAT(2X,8I3)
#endif NOCC
C
C AZ--	ALTER PUZZLE ROOM
C
47000	IF(.NOT.VALID1(J,64)) GO TO 2200
C						!VALID ENTRY?
	WRITE(OUTCH,590) CPVEC(J)
C						!OUTPUT OLD,
	READ(INPCH,600) CPVEC(J)
	GO TO 2000
C
#endif PDP
	END