gdt.for 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535
  1. C GDT- GAME DEBUGGING TOOL
  2. C
  3. C COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142
  4. C ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED
  5. C WRITTEN BY R. M. SUPNIK
  6. C
  7. C DECLARATIONS
  8. C
  9. SUBROUTINE GDT
  10. IMPLICIT INTEGER (A-Z)
  11. CHARACTER*2 DBGCMD(38),CMD
  12. INTEGER ARGTYP(38)
  13. LOGICAL VALID1,VALID2,VALID3
  14. character*2 ldbgcmd(38)
  15. include 'parser.h'
  16. include 'gamestat.h'
  17. include 'state.h'
  18. include 'screen.h'
  19. include 'puzzle.h'
  20. C
  21. C MISCELLANEOUS VARIABLES
  22. C
  23. COMMON /STAR/ MBASE,STRBIT
  24. include 'io.h'
  25. include 'mindex.h'
  26. include 'debug.h'
  27. include 'rooms.h'
  28. include 'rindex.h'
  29. include 'exits.h'
  30. include 'objects.h'
  31. include 'oindex.h'
  32. include 'clock.h'
  33. include 'villians.h'
  34. include 'advers.h'
  35. include 'flags.h'
  36. C
  37. C FUNCTIONS AND DATA
  38. C
  39. VALID1(A1,L1)=(A1.GT.0).AND.(A1.LE.L1)
  40. VALID2(A1,A2,L1)=VALID1(A1,L1).AND.VALID1(A2,L1).AND.
  41. & (A1.LE.A2)
  42. VALID3(A1,L1,A2,L2)=VALID1(A1,L1).AND.VALID1(A2,L2)
  43. DATA CMDMAX/38/
  44. DATA DBGCMD/'DR','DO','DA','DC','DX','DH','DL','DV','DF','DS',
  45. & 'AF','HE','NR','NT','NC','ND','RR','RT','RC','RD',
  46. & 'TK','EX','AR','AO','AA','AC','AX','AV','D2','DN',
  47. & 'AN','DM','DT','AH','DP','PD','DZ','AZ'/
  48. DATA ldbgcmd/'dr','do','da','dc','dx','dh','dl','dv','df','ds',
  49. & 'af','he','nr','nt','nc','nd','rr','rt','rc','rd',
  50. & 'tk','ex','ar','ao','aa','ac','ax','av','d2','dn',
  51. & 'an','dm','dt','ah','dp','pd','dz','az'/
  52. DATA ARGTYP/ 2 , 2 , 2 , 2 , 2 , 0 , 0 , 2 , 2 , 0 ,
  53. & 1 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
  54. & 1 , 0 , 3 , 3 , 3 , 3 , 1 , 3 , 2 , 2 ,
  55. & 1 , 2 , 1 , 0 , 0 , 0 , 0 , 1 /
  56. C GDT, PAGE 2
  57. C
  58. C FIRST, VALIDATE THAT THE CALLER IS AN IMPLEMENTER.
  59. C
  60. FMAX=46
  61. C !SET ARRAY LIMITS.
  62. SMAX=22
  63. C
  64. IF(GDTFLG.NE.0) GO TO 2000
  65. C !IF OK, SKIP.
  66. WRITE(OUTCH,100)
  67. C !NOT AN IMPLEMENTER.
  68. RETURN
  69. C !BOOT HIM OFF
  70. C
  71. 100 FORMAT(' You are not an authorized user.')
  72. c GDT, PAGE 2A
  73. C
  74. C HERE TO GET NEXT COMMAND
  75. C
  76. 2000 WRITE(OUTCH,200)
  77. C !OUTPUT PROMPT.
  78. READ(INPCH,210) CMD
  79. C !GET COMMAND.
  80. IF(CMD.EQ.' ') GO TO 2000
  81. C !IGNORE BLANKS.
  82. DO 2100 I=1,CMDMAX
  83. C !LOOK IT UP.
  84. IF(CMD.EQ.DBGCMD(I)) GO TO 2300
  85. C !FOUND?
  86. C check for lower case command, as well
  87. if(cmd .eq. ldbgcmd(i)) go to 2300
  88. 2100 CONTINUE
  89. 2200 WRITE(OUTCH,220)
  90. C !NO, LOSE.
  91. GO TO 2000
  92. C
  93. 200 FORMAT(' GDT>',$)
  94. 210 FORMAT(A2)
  95. 220 FORMAT(' ?')
  96. 230 FORMAT(2I6)
  97. 240 FORMAT(I6)
  98. 225 FORMAT(' Limits: ',$)
  99. 235 FORMAT(' Entry: ',$)
  100. 245 FORMAT(' Idx,Ary: ',$)
  101. c
  102. 2300 GO TO (2400,2500,2600,2700),ARGTYP(I)+1
  103. C !BRANCH ON ARG TYPE.
  104. GO TO 2200
  105. C !ILLEGAL TYPE.
  106. C
  107. 2700 WRITE(OUTCH,245)
  108. C !TYPE 3, REQUEST ARRAY COORDS.
  109. READ(INPCH,230) J,K
  110. GO TO 2400
  111. C
  112. 2600 WRITE(OUTCH,225)
  113. C !TYPE 2, READ BOUNDS.
  114. READ(INPCH,230) J,K
  115. IF(K.EQ.0) K=J
  116. GO TO 2400
  117. C
  118. 2500 WRITE(OUTCH,235)
  119. C !TYPE 1, READ ENTRY NO.
  120. READ(INPCH,240) J
  121. 2400 GO TO (10000,11000,12000,13000,14000,15000,16000,17000,18000,
  122. & 19000,20000,21000,22000,23000,24000,25000,26000,27000,28000,
  123. & 29000,30000,31000,32000,33000,34000,35000,36000,37000,38000,
  124. & 39000,40000,41000,42000,43000,44000,45000,46000,47000),I
  125. GO TO 2200
  126. C !WHAT???
  127. C GDT, PAGE 3
  128. C
  129. C DR-- DISPLAY ROOMS
  130. C
  131. 10000 IF(.NOT.VALID2(J,K,RLNT)) GO TO 2200
  132. C !ARGS VALID?
  133. WRITE(OUTCH,300)
  134. C !COL HDRS.
  135. DO 10100 I=J,K
  136. WRITE(OUTCH,310) I,(EQR(I,L),L=1,5)
  137. 10100 CONTINUE
  138. GO TO 2000
  139. C
  140. 300 FORMAT(' RM# DESC1 EXITS ACTION VALUE FLAGS')
  141. 310 FORMAT(1X,I3,4(1X,I6),1X,I6)
  142. C
  143. C DO-- DISPLAY OBJECTS
  144. C
  145. 11000 IF(.NOT.VALID2(J,K,OLNT)) GO TO 2200
  146. C !ARGS VALID?
  147. WRITE(OUTCH,320)
  148. C !COL HDRS
  149. DO 11100 I=J,K
  150. WRITE(OUTCH,330) I,(EQO(I,L),L=1,14)
  151. 11100 CONTINUE
  152. GO TO 2000
  153. C
  154. 320 FORMAT(' OB# DESC1 DESC2 DESCO ACT FLAGS1 FLAGS2 FVL TVL
  155. & SIZE CAPAC ROOM ADV CON READ')
  156. 330 FORMAT(1X,I3,3I6,I4,2I7,2I4,2I6,1X,3I4,I6)
  157. C
  158. C DA-- DISPLAY ADVENTURERS
  159. C
  160. 12000 IF(.NOT.VALID2(J,K,ALNT)) GO TO 2200
  161. C !ARGS VALID?
  162. WRITE(OUTCH,340)
  163. DO 12100 I=J,K
  164. WRITE(OUTCH,350) I,(EQA(I,L),L=1,7)
  165. 12100 CONTINUE
  166. GO TO 2000
  167. C
  168. 340 FORMAT(' AD# ROOM SCORE VEHIC OBJECT ACTION STREN FLAGS')
  169. 350 FORMAT(1X,I3,6(1X,I6),1X,I6)
  170. C
  171. C DC-- DISPLAY CLOCK EVENTS
  172. C
  173. 13000 IF(.NOT.VALID2(J,K,CLNT)) GO TO 2200
  174. C !ARGS VALID?
  175. WRITE(OUTCH,360)
  176. DO 13100 I=J,K
  177. WRITE(OUTCH,370) I,(EQC(I,L),L=1,2),CFLAG(I)
  178. 13100 CONTINUE
  179. GO TO 2000
  180. C
  181. 360 FORMAT(' CL# TICK ACTION FLAG')
  182. 370 FORMAT(1X,I3,1X,I6,1X,I6,5X,L1)
  183. C
  184. C DX-- DISPLAY EXITS
  185. C
  186. 14000 IF(.NOT.VALID2(J,K,XLNT)) GO TO 2200
  187. C !ARGS VALID?
  188. WRITE(OUTCH,380)
  189. C !COL HDRS.
  190. DO 14100 I=J,K,10
  191. C !TEN PER LINE.
  192. L=MIN0(I+9,K)
  193. C !COMPUTE END OF LINE.
  194. WRITE(OUTCH,390) I,L,(TRAVEL(L1),L1=I,L)
  195. 14100 CONTINUE
  196. GO TO 2000
  197. C
  198. 380 FORMAT(' RANGE CONTENTS')
  199. 390 FORMAT(1X,I3,'-',I3,3X,10I7)
  200. C
  201. C DH-- DISPLAY HACKS
  202. C
  203. 15000 WRITE(OUTCH,400) THFPOS,THFFLG,THFACT,SWDACT,SWDSTA
  204. GO TO 2000
  205. C
  206. 400 FORMAT(' THFPOS=',I6,', THFFLG=',L2,',THFACT=',L2/
  207. &' SWDACT=',L2,', SWDSTA=',I2)
  208. C
  209. C DL-- DISPLAY LENGTHS
  210. C
  211. 16000 WRITE(OUTCH,410) RLNT,XLNT,OLNT,CLNT,VLNT,ALNT,MLNT,R2LNT,
  212. & MBASE,STRBIT
  213. GO TO 2000
  214. C
  215. 410 FORMAT(' R=',I6,', X=',I6,', O=',I6,', C=',I6/
  216. &' V=',I6,', A=',I6,', M=',I6,', R2=',I5/
  217. &' MBASE=',I6,', STRBIT=',I6)
  218. C
  219. C DV-- DISPLAY VILLAINS
  220. C
  221. 17000 IF(.NOT.VALID2(J,K,VLNT)) GO TO 2200
  222. C !ARGS VALID?
  223. WRITE(OUTCH,420)
  224. C !COL HDRS
  225. DO 17100 I=J,K
  226. WRITE(OUTCH,430) I,(EQV(I,L),L=1,5)
  227. 17100 CONTINUE
  228. GO TO 2000
  229. C
  230. 420 FORMAT(' VL# OBJECT PROB OPPS BEST MELEE')
  231. 430 FORMAT(1X,I3,5(1X,I6))
  232. C
  233. C DF-- DISPLAY FLAGS
  234. C
  235. 18000 IF(.NOT.VALID2(J,K,FMAX)) GO TO 2200
  236. C !ARGS VALID?
  237. DO 18100 I=J,K
  238. WRITE(OUTCH,440) I,FLAGS(I)
  239. 18100 CONTINUE
  240. GO TO 2000
  241. C
  242. 440 FORMAT(' Flag #',I2,' = ',L1)
  243. C
  244. C DS-- DISPLAY STATE
  245. C
  246. 19000 WRITE(OUTCH,450) PRSA,PRSO,PRSI,PRSWON,PRSCON
  247. WRITE(OUTCH,460) WINNER,HERE,TELFLG
  248. WRITE(OUTCH,470) MOVES,DEATHS,RWSCOR,MXSCOR,MXLOAD,LTSHFT,BLOC,
  249. & MUNGRM,HS,EGSCOR,EGMXSC
  250. WRITE(OUTCH,475) FROMDR,SCOLRM,SCOLAC
  251. GO TO 2000
  252. C
  253. 450 FORMAT(' Parse vector=',3(1X,I6),1X,L6,1X,I6)
  254. 460 FORMAT(' Play vector= ',2(1X,I6),1X,L6)
  255. 470 FORMAT(' State vector=',9(1X,I6)/14X,2(1X,I6))
  256. 475 FORMAT(' Scol vector= ',1X,I6,2(1X,I6))
  257. C GDT, PAGE 4
  258. C
  259. C AF-- ALTER FLAGS
  260. C
  261. 20000 IF(.NOT.VALID1(J,FMAX)) GO TO 2200
  262. C !ENTRY NO VALID?
  263. WRITE(OUTCH,480) FLAGS(J)
  264. C !TYPE OLD, GET NEW.
  265. READ(INPCH,490) FLAGS(J)
  266. GO TO 2000
  267. C
  268. 480 FORMAT(' Old=',L2,6X,'New= ',$)
  269. 490 FORMAT(L1)
  270. C
  271. C 21000-- HELP
  272. C
  273. 21000 WRITE(OUTCH,900)
  274. GO TO 2000
  275. C
  276. 900 FORMAT(' Valid commands are:'/' AA- Alter ADVS'/
  277. &' AC- Alter CEVENT'/' AF- Alter FINDEX'/' AH- Alter HERE'/
  278. &' AN- Alter switches'/' AO- Alter OBJCTS'/' AR- Alter ROOMS'/
  279. &' AV- Alter VILLS'/' AX- Alter EXITS'/
  280. &' AZ- Alter PUZZLE'/' DA- Display ADVS'/
  281. &' DC- Display CEVENT'/' DF- Display FINDEX'/' DH- Display HACKS'/
  282. &' DL- Display lengths'/' DM- Display RTEXT'/
  283. &' DN- Display switches'/
  284. &' DO- Display OBJCTS'/' DP- Display parser'/
  285. &' DR- Display ROOMS'/' DS- Display state'/' DT- Display text'/
  286. &' DV- Display VILLS'/' DX- Display EXITS'/' DZ- Display PUZZLE'/
  287. &' D2- Display ROOM2'/' EX- Exit'/' HE- Type this message'/
  288. &' NC- No cyclops'/' ND- No deaths'/' NR- No robber'/
  289. &' NT- No troll'/' PD- Program detail'/
  290. &' RC- Restore cyclops'/' RD- Restore deaths'/
  291. &' RR- Restore robber'/' RT- Restore troll'/' TK- Take.')
  292. C
  293. C NR-- NO ROBBER
  294. C
  295. 22000 THFFLG=.FALSE.
  296. C !DISABLE ROBBER.
  297. THFACT=.FALSE.
  298. CALL NEWSTA(THIEF,0,0,0,0)
  299. C !VANISH THIEF.
  300. WRITE(OUTCH,500)
  301. GO TO 2000
  302. C
  303. 500 FORMAT(' No robber.')
  304. C
  305. C NT-- NO TROLL
  306. C
  307. 23000 TROLLF=.TRUE.
  308. CALL NEWSTA(TROLL,0,0,0,0)
  309. WRITE(OUTCH,510)
  310. GO TO 2000
  311. C
  312. 510 FORMAT(' No troll.')
  313. C
  314. C NC-- NO CYCLOPS
  315. C
  316. 24000 CYCLOF=.TRUE.
  317. CALL NEWSTA(CYCLO,0,0,0,0)
  318. WRITE(OUTCH,520)
  319. GO TO 2000
  320. C
  321. 520 FORMAT(' No cyclops.')
  322. C
  323. C ND-- IMMORTALITY MODE
  324. C
  325. 25000 DBGFLG=1
  326. WRITE(OUTCH,530)
  327. GO TO 2000
  328. C
  329. 530 FORMAT(' No deaths.')
  330. C
  331. C RR-- RESTORE ROBBER
  332. C
  333. 26000 THFACT=.TRUE.
  334. WRITE(OUTCH,540)
  335. GO TO 2000
  336. C
  337. 540 FORMAT(' Restored robber.')
  338. C
  339. C RT-- RESTORE TROLL
  340. C
  341. 27000 TROLLF=.FALSE.
  342. CALL NEWSTA(TROLL,0,MTROL,0,0)
  343. WRITE(OUTCH,550)
  344. GO TO 2000
  345. C
  346. 550 FORMAT(' Restored troll.')
  347. C
  348. C RC-- RESTORE CYCLOPS
  349. C
  350. 28000 CYCLOF=.FALSE.
  351. MAGICF=.FALSE.
  352. CALL NEWSTA(CYCLO,0,MCYCL,0,0)
  353. WRITE(OUTCH,560)
  354. GO TO 2000
  355. C
  356. 560 FORMAT(' Restored cyclops.')
  357. C
  358. C RD-- MORTAL MODE
  359. C
  360. 29000 DBGFLG=0
  361. WRITE(OUTCH,570)
  362. GO TO 2000
  363. C
  364. 570 FORMAT(' Restored deaths.')
  365. C GDT, PAGE 5
  366. C
  367. C TK-- TAKE
  368. C
  369. 30000 IF(.NOT.VALID1(J,OLNT)) GO TO 2200
  370. C !VALID OBJECT?
  371. CALL NEWSTA(J,0,0,0,WINNER)
  372. C !YES, TAKE OBJECT.
  373. WRITE(OUTCH,580)
  374. C !TELL.
  375. GO TO 2000
  376. C
  377. 580 FORMAT(' Taken.')
  378. C
  379. C EX-- GOODBYE
  380. C
  381. 31000 PRSCON=1
  382. RETURN
  383. C
  384. C AR-- ALTER ROOM ENTRY
  385. C
  386. 32000 IF(.NOT.VALID3(J,RLNT,K,5)) GO TO 2200
  387. C !INDICES VALID?
  388. WRITE(OUTCH,590) EQR(J,K)
  389. C !TYPE OLD, GET NEW.
  390. READ(INPCH,600) EQR(J,K)
  391. GO TO 2000
  392. C
  393. 590 FORMAT(' Old= ',I6,6X,'New= ',$)
  394. 600 FORMAT(I6)
  395. C
  396. C AO-- ALTER OBJECT ENTRY
  397. C
  398. 33000 IF(.NOT.VALID3(J,OLNT,K,14)) GO TO 2200
  399. C !INDICES VALID?
  400. WRITE(OUTCH,590) EQO(J,K)
  401. READ(INPCH,600) EQO(J,K)
  402. GO TO 2000
  403. C
  404. C AA-- ALTER ADVS ENTRY
  405. C
  406. 34000 IF(.NOT.VALID3(J,ALNT,K,7)) GO TO 2200
  407. C !INDICES VALID?
  408. WRITE(OUTCH,590) EQA(J,K)
  409. READ(INPCH,600) EQA(J,K)
  410. GO TO 2000
  411. C
  412. C AC-- ALTER CLOCK EVENTS
  413. C
  414. 35000 IF(.NOT.VALID3(J,CLNT,K,3)) GO TO 2200
  415. C !INDICES VALID?
  416. IF(K.EQ.3) GO TO 35500
  417. C !FLAGS ENTRY?
  418. WRITE(OUTCH,590) EQC(J,K)
  419. READ(INPCH,600) EQC(J,K)
  420. GO TO 2000
  421. C
  422. 35500 WRITE(OUTCH,480) CFLAG(J)
  423. READ(INPCH,490) CFLAG(J)
  424. GO TO 2000
  425. C GDT, PAGE 6
  426. C
  427. C AX-- ALTER EXITS
  428. C
  429. 36000 IF(.NOT.VALID1(J,XLNT)) GO TO 2200
  430. C !ENTRY NO VALID?
  431. WRITE(OUTCH,610) TRAVEL(J)
  432. READ(INPCH,620) TRAVEL(J)
  433. GO TO 2000
  434. C
  435. 610 FORMAT(' Old= ',I6,6X,'New= ',$)
  436. 620 FORMAT(I6)
  437. C
  438. C AV-- ALTER VILLAINS
  439. C
  440. 37000 IF(.NOT.VALID3(J,VLNT,K,5)) GO TO 2200
  441. C !INDICES VALID?
  442. WRITE(OUTCH,590) EQV(J,K)
  443. READ(INPCH,600) EQV(J,K)
  444. GO TO 2000
  445. C
  446. C D2-- DISPLAY ROOM2 LIST
  447. C
  448. 38000 IF(.NOT.VALID2(J,K,R2LNT)) GO TO 2200
  449. DO 38100 I=J,K
  450. WRITE(OUTCH,630) I,RROOM2(I),OROOM2(I)
  451. 38100 CONTINUE
  452. GO TO 2000
  453. C
  454. 630 FORMAT(' #',I2,' Room=',I6,' Obj=',I6)
  455. C
  456. C DN-- DISPLAY SWITCHES
  457. C
  458. 39000 IF(.NOT.VALID2(J,K,SMAX)) GO TO 2200
  459. C !VALID?
  460. DO 39100 I=J,K
  461. WRITE(OUTCH,640) I,SWITCH(I)
  462. 39100 CONTINUE
  463. GO TO 2000
  464. C
  465. 640 FORMAT(' Switch #',I2,' = ',I6)
  466. C
  467. C AN-- ALTER SWITCHES
  468. C
  469. 40000 IF(.NOT.VALID1(J,SMAX)) GO TO 2200
  470. C !VALID ENTRY?
  471. WRITE(OUTCH,590) SWITCH(J)
  472. READ(INPCH,600) SWITCH(J)
  473. GO TO 2000
  474. C
  475. C DM-- DISPLAY MESSAGES
  476. C
  477. 41000 IF(.NOT.VALID2(J,K,MLNT)) GO TO 2200
  478. C !VALID LIMITS?
  479. WRITE(OUTCH,380)
  480. DO 41100 I=J,K,10
  481. L=MIN0(I+9,K)
  482. WRITE(OUTCH,650) I,L,(RTEXT(L1),L1=I,L)
  483. 41100 CONTINUE
  484. GO TO 2000
  485. C
  486. 650 FORMAT(1X,I3,'-',I3,3X,10(1X,I6))
  487. C
  488. C DT-- DISPLAY TEXT
  489. C
  490. 42000 CALL RSPEAK(J)
  491. GO TO 2000
  492. C
  493. C AH-- ALTER HERE
  494. C
  495. 43000 WRITE(OUTCH,590) HERE
  496. READ(INPCH,600) HERE
  497. EQA(1,1)=HERE
  498. GO TO 2000
  499. C
  500. C DP-- DISPLAY PARSER STATE
  501. C
  502. 44000 WRITE(OUTCH,660) ORP,LASTIT,PVEC,SYN
  503. GO TO 2000
  504. C
  505. 660 FORMAT(' ORPHS= ',I7,I7,4I7/
  506. &' PV= ',I7,4I7/' SYN= ',6I7/15X,5I7)
  507. C
  508. C PD-- PROGRAM DETAIL DEBUG
  509. C
  510. 45000 WRITE(OUTCH,610) PRSFLG
  511. C !TYPE OLD, GET NEW.
  512. READ(INPCH,620) PRSFLG
  513. GO TO 2000
  514. C
  515. C DZ-- DISPLAY PUZZLE ROOM
  516. C
  517. 46000 DO 46100 I=1,64,8
  518. C !DISPLAY PUZZLE
  519. WRITE(OUTCH,670) (CPVEC(J),J=I,I+7)
  520. 46100 CONTINUE
  521. GO TO 2000
  522. C
  523. 670 FORMAT(2X,8I3)
  524. C
  525. C AZ-- ALTER PUZZLE ROOM
  526. C
  527. 47000 IF(.NOT.VALID1(J,64)) GO TO 2200
  528. C !VALID ENTRY?
  529. WRITE(OUTCH,590) CPVEC(J)
  530. C !OUTPUT OLD,
  531. READ(INPCH,600) CPVEC(J)
  532. GO TO 2000
  533. C
  534. END