xref: /original-bsd/contrib/dungeon/gdt.F (revision e59fb703)
1C GDT- GAME DEBUGGING TOOL
2C
3C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
4C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
5C WRITTEN BY R. M. SUPNIK
6C
7C DECLARATIONS
8C
9	SUBROUTINE GDT
10	IMPLICIT INTEGER (A-Z)
11#ifdef PDP
12C
13C	no debugging tool available in pdp version
14C
15	call nogdt
16	return
17#else
18	CHARACTER*2 DBGCMD(38),CMD
19	INTEGER ARGTYP(38)
20	LOGICAL VALID1,VALID2,VALID3
21	character*2 ldbgcm(38)
22#include "parser.h"
23#include "gamestate.h"
24#include "state.h"
25#include "screen.h"
26#include "puzzle.h"
27C
28C MISCELLANEOUS VARIABLES
29C
30	COMMON /STAR/ MBASE,STRBIT
31#include "io.h"
32#include "mindex.h"
33#include "debug.h"
34#include "rooms.h"
35#include "rindex.h"
36#include "exits.h"
37#include "objects.h"
38#include "oindex.h"
39#include "clock.h"
40#include "villians.h"
41#include "advers.h"
42#include "flags.h"
43C
44C FUNCTIONS AND DATA
45C
46	VALID1(A1,L1)=(A1.GT.0).AND.(A1.LE.L1)
47	VALID2(A1,A2,L1)=VALID1(A1,L1).AND.VALID1(A2,L1).AND.
48&		(A1.LE.A2)
49	VALID3(A1,L1,A2,L2)=VALID1(A1,L1).AND.VALID1(A2,L2)
50	DATA CMDMAX/38/
51	DATA DBGCMD/'DR','DO','DA','DC','DX','DH','DL','DV','DF','DS',
52&		'AF','HE','NR','NT','NC','ND','RR','RT','RC','RD',
53&		'TK','EX','AR','AO','AA','AC','AX','AV','D2','DN',
54&		'AN','DM','DT','AH','DP','PD','DZ','AZ'/
55	DATA ldbgcm/'dr','do','da','dc','dx','dh','dl','dv','df','ds',
56&		'af','he','nr','nt','nc','nd','rr','rt','rc','rd',
57&		'tk','ex','ar','ao','aa','ac','ax','av','d2','dn',
58&		'an','dm','dt','ah','dp','pd','dz','az'/
59	DATA ARGTYP/  2 ,  2 ,  2 ,  2 ,  2 ,  0 ,  0 ,  2 ,  2 ,  0 ,
60&		  1 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,  0 ,
61&		  1 ,  0 ,  3 ,  3 ,  3 ,  3 ,  1 ,  3 ,  2 ,  2 ,
62&		  1 ,  2 ,  1 ,  0 ,  0 ,  0 ,  0 ,  1 /
63C GDT, PAGE 2
64C
65C FIRST, VALIDATE THAT THE CALLER IS AN IMPLEMENTER.
66C
67	FMAX=46
68C						!SET ARRAY LIMITS.
69	SMAX=22
70C
71	IF(GDTFLG.NE.0) GO TO 2000
72C						!IF OK, SKIP.
73	WRITE(OUTCH,100)
74C						!NOT AN IMPLEMENTER.
75	RETURN
76C						!BOOT HIM OFF
77C
78#ifdef NOCC
79100	FORMAT('You are not an authorized user.')
80#else NOCC
81100	FORMAT(' You are not an authorized user.')
82#endif NOCC
83c GDT, PAGE 2A
84C
85C HERE TO GET NEXT COMMAND
86C
872000	WRITE(OUTCH,200)
88C						!OUTPUT PROMPT.
89	READ(INPCH,210) CMD
90C						!GET COMMAND.
91	IF(CMD.EQ.'  ') GO TO 2000
92C						!IGNORE BLANKS.
93	DO 2100 I=1,CMDMAX
94C						!LOOK IT UP.
95	  IF(CMD.EQ.DBGCMD(I)) GO TO 2300
96C						!FOUND?
97C	  check for lower case command, as well
98	  if(cmd .eq. ldbgcm(i)) go to 2300
992100	CONTINUE
1002200	WRITE(OUTCH,220)
101C						!NO, LOSE.
102	GO TO 2000
103C
104#ifdef NOCC
105200	FORMAT('GDT>',$)
106#else NOCC
107200	FORMAT(' GDT>',$)
108#endif NOCC
109210	FORMAT(A2)
110#ifdef NOCC
111220	FORMAT('?')
112#else NOCC
113220	FORMAT(' ?')
114#endif NOCC
115230	FORMAT(2I6)
116240	FORMAT(I6)
117#ifdef NOCC
118225	FORMAT('Limits:   ',$)
119235	FORMAT('Entry:    ',$)
120245	FORMAT('Idx,Ary:  ',$)
121#else NOCC
122225	FORMAT(' Limits:   ',$)
123235	FORMAT(' Entry:    ',$)
124245	FORMAT(' Idx,Ary:  ',$)
125#endif NOCC
126c
1272300	GO TO (2400,2500,2600,2700),ARGTYP(I)+1
128C						!BRANCH ON ARG TYPE.
129	GO TO 2200
130C						!ILLEGAL TYPE.
131C
1322700	WRITE(OUTCH,245)
133C						!TYPE 3, REQUEST ARRAY COORDS.
134	READ(INPCH,230) J,K
135	GO TO 2400
136C
1372600	WRITE(OUTCH,225)
138C						!TYPE 2, READ BOUNDS.
139	READ(INPCH,230) J,K
140	IF(K.EQ.0) K=J
141	GO TO 2400
142C
1432500	WRITE(OUTCH,235)
144C						!TYPE 1, READ ENTRY NO.
145	READ(INPCH,240) J
1462400	GO TO (10000,11000,12000,13000,14000,15000,16000,17000,18000,
147&	 19000,20000,21000,22000,23000,24000,25000,26000,27000,28000,
148&	 29000,30000,31000,32000,33000,34000,35000,36000,37000,38000,
149&	 39000,40000,41000,42000,43000,44000,45000,46000,47000),I
150	GO TO 2200
151C						!WHAT???
152C GDT, PAGE 3
153C
154C DR-- DISPLAY ROOMS
155C
15610000	IF(.NOT.VALID2(J,K,RLNT)) GO TO 2200
157C						!ARGS VALID?
158	WRITE(OUTCH,300)
159C						!COL HDRS.
160	DO 10100 I=J,K
161	  WRITE(OUTCH,310) I,(EQR(I,L),L=1,5)
16210100	CONTINUE
163	GO TO 2000
164C
165#ifdef NOCC
166300	FORMAT('RM#  DESC1  EXITS ACTION  VALUE  FLAGS')
167310	FORMAT(I3,4(1X,I6),1X,I6)
168#else NOCC
169300	FORMAT(' RM#  DESC1  EXITS ACTION  VALUE  FLAGS')
170310	FORMAT(1X,I3,4(1X,I6),1X,I6)
171#endif NOCC
172C
173C DO-- DISPLAY OBJECTS
174C
17511000	IF(.NOT.VALID2(J,K,OLNT)) GO TO 2200
176C						!ARGS VALID?
177	WRITE(OUTCH,320)
178C						!COL HDRS
179	DO 11100 I=J,K
180	  WRITE(OUTCH,330) I,(EQO(I,L),L=1,14)
18111100	CONTINUE
182	GO TO 2000
183C
184#ifdef NOCC
185320	FORMAT('OB# DESC1 DESC2 DESCO ACT FLAGS1 FLAGS2 FVL TVL
186&	  SIZE CAPAC ROOM ADV CON  READ')
187330	FORMAT(I3,3I6,I4,2I7,2I4,2I6,1X,3I4,I6)
188#else NOCC
189320	FORMAT(' OB# DESC1 DESC2 DESCO ACT FLAGS1 FLAGS2 FVL TVL
190&	  SIZE CAPAC ROOM ADV CON  READ')
191330	FORMAT(1X,I3,3I6,I4,2I7,2I4,2I6,1X,3I4,I6)
192#endif NOCC
193C
194C DA-- DISPLAY ADVENTURERS
195C
19612000	IF(.NOT.VALID2(J,K,ALNT)) GO TO 2200
197C						!ARGS VALID?
198	WRITE(OUTCH,340)
199	DO 12100 I=J,K
200	  WRITE(OUTCH,350) I,(EQA(I,L),L=1,7)
20112100	CONTINUE
202	GO TO 2000
203C
204#ifdef NOCC
205340	FORMAT('AD#   ROOM  SCORE  VEHIC OBJECT ACTION  STREN  FLAGS')
206350	FORMAT(I3,6(1X,I6),1X,I6)
207#else NOCC
208340	FORMAT(' AD#   ROOM  SCORE  VEHIC OBJECT ACTION  STREN  FLAGS')
209350	FORMAT(1X,I3,6(1X,I6),1X,I6)
210#endif NOCC
211C
212C DC-- DISPLAY CLOCK EVENTS
213C
21413000	IF(.NOT.VALID2(J,K,CLNT)) GO TO 2200
215C						!ARGS VALID?
216	WRITE(OUTCH,360)
217	DO 13100 I=J,K
218	  WRITE(OUTCH,370) I,(EQC(I,L),L=1,2),CFLAG(I)
21913100	CONTINUE
220	GO TO 2000
221C
222#ifdef NOCC
223360	FORMAT('CL#   TICK ACTION  FLAG')
224370	FORMAT(I3,1X,I6,1X,I6,5X,L1)
225#else NOCC
226360	FORMAT(' CL#   TICK ACTION  FLAG')
227370	FORMAT(1X,I3,1X,I6,1X,I6,5X,L1)
228#endif NOCC
229C
230C DX-- DISPLAY EXITS
231C
23214000	IF(.NOT.VALID2(J,K,XLNT)) GO TO 2200
233C						!ARGS VALID?
234	WRITE(OUTCH,380)
235C						!COL HDRS.
236	DO 14100 I=J,K,10
237C						!TEN PER LINE.
238	  L=MIN0(I+9,K)
239C						!COMPUTE END OF LINE.
240	  WRITE(OUTCH,390) I,L,(TRAVEL(L1),L1=I,L)
24114100	CONTINUE
242	GO TO 2000
243C
244#ifdef NOCC
245380	FORMAT('  RANGE   CONTENTS')
246390	FORMAT(I3,'-',I3,3X,10I7)
247#else NOCC
248380	FORMAT('   RANGE   CONTENTS')
249390	FORMAT(1X,I3,'-',I3,3X,10I7)
250#endif NOCC
251C
252C DH-- DISPLAY HACKS
253C
25415000	WRITE(OUTCH,400) THFPOS,THFFLG,THFACT,SWDACT,SWDSTA
255	GO TO 2000
256C
257#ifdef NOCC
258400	FORMAT('THFPOS=',I6,', THFFLG=',L2,',THFACT=',L2/
259&	' SWDACT=',L2,', SWDSTA=',I2)
260#else NOCC
261400	FORMAT(' THFPOS=',I6,', THFFLG=',L2,',THFACT=',L2/
262&	' SWDACT=',L2,', SWDSTA=',I2)
263#endif NOCC
264C
265C DL-- DISPLAY LENGTHS
266C
26716000	WRITE(OUTCH,410) RLNT,XLNT,OLNT,CLNT,VLNT,ALNT,MLNT,R2LNT,
268&		MBASE,STRBIT
269	GO TO 2000
270C
271#ifdef NOCC
272410	FORMAT('R=',I6,', X=',I6,', O=',I6,', C=',I6/
273&	'V=',I6,', A=',I6,', M=',I6,', R2=',I5/
274&	'MBASE=',I6,', STRBIT=',I6)
275#else NOCC
276410	FORMAT(' R=',I6,', X=',I6,', O=',I6,', C=',I6/
277&	' V=',I6,', A=',I6,', M=',I6,', R2=',I5/
278&	' MBASE=',I6,', STRBIT=',I6)
279#endif NOCC
280C
281C DV-- DISPLAY VILLAINS
282C
28317000	IF(.NOT.VALID2(J,K,VLNT)) GO TO 2200
284C						!ARGS VALID?
285	WRITE(OUTCH,420)
286C						!COL HDRS
287	DO 17100 I=J,K
288	  WRITE(OUTCH,430) I,(EQV(I,L),L=1,5)
28917100	CONTINUE
290	GO TO 2000
291C
292#ifdef NOCC
293420	FORMAT('VL# OBJECT   PROB   OPPS   BEST  MELEE')
294430	FORMAT(I3,5(1X,I6))
295#else NOCC
296420	FORMAT(' VL# OBJECT   PROB   OPPS   BEST  MELEE')
297430	FORMAT(1X,I3,5(1X,I6))
298#endif NOCC
299C
300C DF-- DISPLAY FLAGS
301C
30218000	IF(.NOT.VALID2(J,K,FMAX)) GO TO 2200
303C						!ARGS VALID?
304	DO 18100 I=J,K
305	  WRITE(OUTCH,440) I,FLAGS(I)
30618100	CONTINUE
307	GO TO 2000
308C
309#ifdef NOCC
310440	FORMAT('Flag #',I2,' = ',L1)
311#else NOCC
312440	FORMAT(' Flag #',I2,' = ',L1)
313#endif NOCC
314C
315C DS-- DISPLAY STATE
316C
31719000	WRITE(OUTCH,450) PRSA,PRSO,PRSI,PRSWON,PRSCON
318	WRITE(OUTCH,460) WINNER,HERE,TELFLG
319	WRITE(OUTCH,470) MOVES,DEATHS,RWSCOR,MXSCOR,MXLOAD,LTSHFT,BLOC,
320&		MUNGRM,HS,EGSCOR,EGMXSC
321	WRITE(OUTCH,475) FROMDR,SCOLRM,SCOLAC
322	GO TO 2000
323C
324#ifdef NOCC
325450	FORMAT('Parse vector=',3(1X,I6),1X,L6,1X,I6)
326460	FORMAT('Play vector= ',2(1X,I6),1X,L6)
327470	FORMAT('State vector=',9(1X,I6)/14X,2(1X,I6))
328475	FORMAT('Scol vector= ',1X,I6,2(1X,I6))
329#else NOCC
330450	FORMAT(' Parse vector=',3(1X,I6),1X,L6,1X,I6)
331460	FORMAT(' Play vector= ',2(1X,I6),1X,L6)
332470	FORMAT(' State vector=',9(1X,I6)/14X,2(1X,I6))
333475	FORMAT(' Scol vector= ',1X,I6,2(1X,I6))
334#endif NOCC
335C GDT, PAGE 4
336C
337C AF-- ALTER FLAGS
338C
33920000	IF(.NOT.VALID1(J,FMAX)) GO TO 2200
340C						!ENTRY NO VALID?
341	WRITE(OUTCH,480) FLAGS(J)
342C						!TYPE OLD, GET NEW.
343	READ(INPCH,490) FLAGS(J)
344	GO TO 2000
345C
346#ifdef NOCC
347480	FORMAT('Old=',L2,6X,'New= ',$)
348#else NOCC
349480	FORMAT(' Old=',L2,6X,'New= ',$)
350#endif NOCC
351490	FORMAT(L1)
352C
353C 21000-- HELP
354C
35521000	WRITE(OUTCH,900)
356	GO TO 2000
357C
358#ifdef NOCC
359900	FORMAT('Valid commands are:'/'AA- Alter ADVS'/
360&	'AC- Alter CEVENT'/'AF- Alter FINDEX'/'AH- Alter HERE'/
361&	'AN- Alter switches'/'AO- Alter OBJCTS'/'AR- Alter ROOMS'/
362&	'AV- Alter VILLS'/'AX- Alter EXITS'/
363&	'AZ- Alter PUZZLE'/'DA- Display ADVS'/
364&	'DC- Display CEVENT'/'DF- Display FINDEX'/'DH- Display HACKS'/
365&	'DL- Display lengths'/'DM- Display RTEXT'/
366&	'DN- Display switches'/
367&	'DO- Display OBJCTS'/'DP- Display parser'/
368&	'DR- Display ROOMS'/'DS- Display state'/'DT- Display text'/
369&	'DV- Display VILLS'/'DX- Display EXITS'/'DZ- Display PUZZLE'/
370&	'D2- Display ROOM2'/'EX- Exit'/'HE- Type this message'/
371&	'NC- No cyclops'/'ND- No deaths'/'NR- No robber'/
372&	'NT- No troll'/'PD- Program detail'/
373&	'RC- Restore cyclops'/'RD- Restore deaths'/
374&	'RR- Restore robber'/'RT- Restore troll'/'TK- Take.')
375#else NOCC
376900	FORMAT(' Valid commands are:'/' AA- Alter ADVS'/
377&	' AC- Alter CEVENT'/' AF- Alter FINDEX'/' AH- Alter HERE'/
378&	' AN- Alter switches'/' AO- Alter OBJCTS'/' AR- Alter ROOMS'/
379&	' AV- Alter VILLS'/' AX- Alter EXITS'/
380&	' AZ- Alter PUZZLE'/' DA- Display ADVS'/
381&	' DC- Display CEVENT'/' DF- Display FINDEX'/' DH- Display HACKS'/
382&	' DL- Display lengths'/' DM- Display RTEXT'/
383&	' DN- Display switches'/
384&	' DO- Display OBJCTS'/' DP- Display parser'/
385&	' DR- Display ROOMS'/' DS- Display state'/' DT- Display text'/
386&	' DV- Display VILLS'/' DX- Display EXITS'/' DZ- Display PUZZLE'/
387&	' D2- Display ROOM2'/' EX- Exit'/' HE- Type this message'/
388&	' NC- No cyclops'/' ND- No deaths'/' NR- No robber'/
389&	' NT- No troll'/' PD- Program detail'/
390&	' RC- Restore cyclops'/' RD- Restore deaths'/
391&	' RR- Restore robber'/' RT- Restore troll'/' TK- Take.')
392#endif NOCC
393C
394C NR-- NO ROBBER
395C
39622000	THFFLG=.FALSE.
397C						!DISABLE ROBBER.
398	THFACT=.FALSE.
399	CALL NEWSTA(THIEF,0,0,0,0)
400C						!VANISH THIEF.
401	WRITE(OUTCH,500)
402	GO TO 2000
403C
404#ifdef NOCC
405500	FORMAT('No robber.')
406#else NOCC
407500	FORMAT(' No robber.')
408#endif NOCC
409C
410C NT-- NO TROLL
411C
41223000	TROLLF=.TRUE.
413	CALL NEWSTA(TROLL,0,0,0,0)
414	WRITE(OUTCH,510)
415	GO TO 2000
416C
417#ifdef NOCC
418510	FORMAT('No troll.')
419#else NOCC
420510	FORMAT(' No troll.')
421#endif NOCC
422C
423C NC-- NO CYCLOPS
424C
42524000	CYCLOF=.TRUE.
426	CALL NEWSTA(CYCLO,0,0,0,0)
427	WRITE(OUTCH,520)
428	GO TO 2000
429C
430#ifdef NOCC
431520	FORMAT('No cyclops.')
432#else NOCC
433520	FORMAT(' No cyclops.')
434#endif NOCC
435C
436C ND-- IMMORTALITY MODE
437C
43825000	DBGFLG=1
439	WRITE(OUTCH,530)
440	GO TO 2000
441C
442#ifdef NOCC
443530	FORMAT('No deaths.')
444#else NOCC
445530	FORMAT(' No deaths.')
446#endif NOCC
447C
448C RR-- RESTORE ROBBER
449C
45026000	THFACT=.TRUE.
451	WRITE(OUTCH,540)
452	GO TO 2000
453C
454#ifdef NOCC
455540	FORMAT('Restored robber.')
456#else NOCC
457540	FORMAT(' Restored robber.')
458#endif NOCC
459C
460C RT-- RESTORE TROLL
461C
46227000	TROLLF=.FALSE.
463	CALL NEWSTA(TROLL,0,MTROL,0,0)
464	WRITE(OUTCH,550)
465	GO TO 2000
466C
467#ifdef NOCC
468550	FORMAT('Restored troll.')
469#else NOCC
470550	FORMAT(' Restored troll.')
471#endif NOCC
472C
473C RC-- RESTORE CYCLOPS
474C
47528000	CYCLOF=.FALSE.
476	MAGICF=.FALSE.
477	CALL NEWSTA(CYCLO,0,MCYCL,0,0)
478	WRITE(OUTCH,560)
479	GO TO 2000
480C
481#ifdef NOCC
482560	FORMAT('Restored cyclops.')
483#else NOCC
484560	FORMAT(' Restored cyclops.')
485#endif NOCC
486C
487C RD-- MORTAL MODE
488C
48929000	DBGFLG=0
490	WRITE(OUTCH,570)
491	GO TO 2000
492C
493#ifdef NOCC
494570	FORMAT('Restored deaths.')
495#else NOCC
496570	FORMAT(' Restored deaths.')
497#endif NOCC
498C GDT, PAGE 5
499C
500C TK-- TAKE
501C
50230000	IF(.NOT.VALID1(J,OLNT)) GO TO 2200
503C						!VALID OBJECT?
504	CALL NEWSTA(J,0,0,0,WINNER)
505C						!YES, TAKE OBJECT.
506	WRITE(OUTCH,580)
507C						!TELL.
508	GO TO 2000
509C
510#ifdef NOCC
511580	FORMAT('Taken.')
512#else NOCC
513580	FORMAT(' Taken.')
514#endif NOCC
515C
516C EX-- GOODBYE
517C
51831000	PRSCON=1
519	RETURN
520C
521C AR--	ALTER ROOM ENTRY
522C
52332000	IF(.NOT.VALID3(J,RLNT,K,5)) GO TO 2200
524C						!INDICES VALID?
525	WRITE(OUTCH,590) EQR(J,K)
526C						!TYPE OLD, GET NEW.
527	READ(INPCH,600) EQR(J,K)
528	GO TO 2000
529C
530#ifdef NOCC
531590	FORMAT('Old= ',I6,6X,'New= ',$)
532#else NOCC
533590	FORMAT(' Old= ',I6,6X,'New= ',$)
534#endif NOCC
535600	FORMAT(I6)
536C
537C AO-- ALTER OBJECT ENTRY
538C
53933000	IF(.NOT.VALID3(J,OLNT,K,14)) GO TO 2200
540C						!INDICES VALID?
541	WRITE(OUTCH,590) EQO(J,K)
542	READ(INPCH,600) EQO(J,K)
543	GO TO 2000
544C
545C AA-- ALTER ADVS ENTRY
546C
54734000	IF(.NOT.VALID3(J,ALNT,K,7)) GO TO 2200
548C						!INDICES VALID?
549	WRITE(OUTCH,590) EQA(J,K)
550	READ(INPCH,600) EQA(J,K)
551	GO TO 2000
552C
553C AC-- ALTER CLOCK EVENTS
554C
55535000	IF(.NOT.VALID3(J,CLNT,K,3)) GO TO 2200
556C						!INDICES VALID?
557	IF(K.EQ.3) GO TO 35500
558C						!FLAGS ENTRY?
559	WRITE(OUTCH,590) EQC(J,K)
560	READ(INPCH,600) EQC(J,K)
561	GO TO 2000
562C
56335500	WRITE(OUTCH,480) CFLAG(J)
564	READ(INPCH,490) CFLAG(J)
565	GO TO 2000
566C GDT, PAGE 6
567C
568C AX-- ALTER EXITS
569C
57036000	IF(.NOT.VALID1(J,XLNT)) GO TO 2200
571C						!ENTRY NO VALID?
572	WRITE(OUTCH,610) TRAVEL(J)
573	READ(INPCH,620) TRAVEL(J)
574	GO TO 2000
575C
576#ifdef NOCC
577610	FORMAT('Old= ',I6,6X,'New= ',$)
578#else NOCC
579610	FORMAT(' Old= ',I6,6X,'New= ',$)
580#endif NOCC
581620	FORMAT(I6)
582C
583C AV-- ALTER VILLAINS
584C
58537000	IF(.NOT.VALID3(J,VLNT,K,5)) GO TO 2200
586C						!INDICES VALID?
587	WRITE(OUTCH,590) EQV(J,K)
588	READ(INPCH,600) EQV(J,K)
589	GO TO 2000
590C
591C D2-- DISPLAY ROOM2 LIST
592C
59338000	IF(.NOT.VALID2(J,K,R2LNT)) GO TO 2200
594	DO 38100 I=J,K
595	  WRITE(OUTCH,630) I,RROOM2(I),OROOM2(I)
59638100	CONTINUE
597	GO TO 2000
598C
599#ifdef NOCC
600630	FORMAT('#',I2,'   Room=',I6,'   Obj=',I6)
601#else NOCC
602630	FORMAT(' #',I2,'   Room=',I6,'   Obj=',I6)
603#endif NOCC
604C
605C DN-- DISPLAY SWITCHES
606C
60739000	IF(.NOT.VALID2(J,K,SMAX)) GO TO 2200
608C						!VALID?
609	DO 39100 I=J,K
610	  WRITE(OUTCH,640) I,SWITCH(I)
61139100	CONTINUE
612	GO TO 2000
613C
614#ifdef NOCC
615640	FORMAT('Switch #',I2,' = ',I6)
616#else NOCC
617640	FORMAT(' Switch #',I2,' = ',I6)
618#endif NOCC
619C
620C AN-- ALTER SWITCHES
621C
62240000	IF(.NOT.VALID1(J,SMAX)) GO TO 2200
623C						!VALID ENTRY?
624	WRITE(OUTCH,590) SWITCH(J)
625	READ(INPCH,600) SWITCH(J)
626	GO TO 2000
627C
628C DM-- DISPLAY MESSAGES
629C
63041000	IF(.NOT.VALID2(J,K,MLNT)) GO TO 2200
631C						!VALID LIMITS?
632	WRITE(OUTCH,380)
633	DO 41100 I=J,K,10
634	  L=MIN0(I+9,K)
635	  WRITE(OUTCH,650) I,L,(RTEXT(L1),L1=I,L)
63641100	CONTINUE
637	GO TO 2000
638C
639#ifdef NOCC
640650	FORMAT(I3,'-',I3,3X,10(1X,I6))
641#else NOCC
642650	FORMAT(1X,I3,'-',I3,3X,10(1X,I6))
643#endif NOCC
644C
645C DT-- DISPLAY TEXT
646C
64742000	CALL RSPEAK(J)
648	GO TO 2000
649C
650C AH--	ALTER HERE
651C
65243000	WRITE(OUTCH,590) HERE
653	READ(INPCH,600) HERE
654	EQA(1,1)=HERE
655	GO TO 2000
656C
657C DP--	DISPLAY PARSER STATE
658C
65944000	WRITE(OUTCH,660) ORP,LASTIT,PVEC,SYN
660	GO TO 2000
661C
662#ifdef NOCC
663660	FORMAT('ORPHS= ',I7,I7,4I7/
664&	'PV=    ',I7,4I7/'SYN=   ',6I7/15X,5I7)
665#else NOCC
666660	FORMAT(' ORPHS= ',I7,I7,4I7/
667&	' PV=    ',I7,4I7/' SYN=   ',6I7/15X,5I7)
668#endif NOCC
669C
670C PD--	PROGRAM DETAIL DEBUG
671C
67245000	WRITE(OUTCH,610) PRSFLG
673C						!TYPE OLD, GET NEW.
674	READ(INPCH,620) PRSFLG
675	GO TO 2000
676C
677C DZ--	DISPLAY PUZZLE ROOM
678C
67946000	DO 46100 I=1,64,8
680C						!DISPLAY PUZZLE
681	  WRITE(OUTCH,670) (CPVEC(J),J=I,I+7)
68246100	CONTINUE
683	GO TO 2000
684C
685#ifdef NOCC
686670	FORMAT(1X,8I3)
687#else NOCC
688670	FORMAT(2X,8I3)
689#endif NOCC
690C
691C AZ--	ALTER PUZZLE ROOM
692C
69347000	IF(.NOT.VALID1(J,64)) GO TO 2200
694C						!VALID ENTRY?
695	WRITE(OUTCH,590) CPVEC(J)
696C						!OUTPUT OLD,
697	READ(INPCH,600) CPVEC(J)
698	GO TO 2000
699C
700#endif PDP
701	END
702