Annotation of researchv10no/cmd/pfort/prtsht, revision 1.1

1.1     ! root        1: C XXXXXBLOCKDATA0.f
        !             2:       BLOCK DATA
        !             3: C
        !             4: C
        !             5: C
        !             6: C
        !             7: C
        !             8: C
        !             9: C
        !            10: C
        !            11: C
        !            12: C
        !            13: C
        !            14: C
        !            15: C
        !            16: C
        !            17: C
        !            18: C
        !            19: C
        !            20: C
        !            21: C                            PFORT VERIFIER
        !            22: C
        !            23: C                              B. G. RYDER
        !            24: C                              A. D. HALL
        !            25: C
        !            26: C           BELL LABORATORIES, MURRAY HILL, NEW JERSEY 07974
        !            27: C
        !            28: C
        !            29: C       COPYRIGHT C 1978,  BELL  TELEPHONE  LABORATORIES,  INCOR-
        !            30: C       PORATED.   GENERAL  PERMISSION  IS  GRANTED  TO  MAKE AND
        !            31: C       DISTRIBUTE UNMODIFIED COMPLETE COPIES  OF  THIS  COMPUTER
        !            32: C       PROGRAM, BUT NOT FOR PROFIT, PROVIDED THAT THIS COPYRIGHT
        !            33: C       NOTICE AND STATEMENT ARE INCLUDED.
        !            34: C
        !            35: C
        !            36: C
        !            37: C
        !            38: C
        !            39: C
        !            40: C
        !            41: C
        !            42: C
        !            43: C
        !            44: C
        !            45: C
        !            46: C
        !            47: C
        !            48: C
        !            49: C
        !            50: C
        !            51: C
        !            52:       INTEGER Z
        !            53:       COMMON /INTS/ Z(346)
        !            54:       DATA Z(1) /3/
        !            55:       DATA Z(2) /1HA/
        !            56:       DATA Z(3) /1HB/
        !            57:       DATA Z(4) /1HS/
        !            58:       DATA Z(5) /201/
        !            59:       DATA Z(6) /4/
        !            60:       DATA Z(7) /1HI/
        !            61:       DATA Z(8) /1HA/
        !            62:       DATA Z(9) /1HB/
        !            63:       DATA Z(10) /1HS/
        !            64:       DATA Z(11) /210/
        !            65:       DATA Z(12) /4/
        !            66:       DATA Z(13) /1HD/
        !            67:       DATA Z(14) /1HA/
        !            68:       DATA Z(15) /1HB/
        !            69:       DATA Z(16) /1HS/
        !            70:       DATA Z(17) /192/
        !            71:       DATA Z(18) /4/
        !            72:       DATA Z(19) /1HA/
        !            73:       DATA Z(20) /1HI/
        !            74:       DATA Z(21) /1HN/
        !            75:       DATA Z(22) /1HT/
        !            76:       DATA Z(23) /201/
        !            77:       DATA Z(24) /3/
        !            78:       DATA Z(25) /1HI/
        !            79:       DATA Z(26) /1HN/
        !            80:       DATA Z(27) /1HT/
        !            81:       DATA Z(28) /202/
        !            82:       DATA Z(29) /5/
        !            83:       DATA Z(30) /1HI/
        !            84:       DATA Z(31) /1HD/
        !            85:       DATA Z(32) /1HI/
        !            86:       DATA Z(33) /1HN/
        !            87:       DATA Z(34) /1HT/
        !            88:       DATA Z(35) /194/
        !            89:       DATA Z(36) /4/
        !            90:       DATA Z(37) /1HA/
        !            91:       DATA Z(38) /1HM/
        !            92:       DATA Z(39) /1HO/
        !            93:       DATA Z(40) /1HD/
        !            94:       DATA Z(41) /329/
        !            95:       DATA Z(42) /3/
        !            96:       DATA Z(43) /1HM/
        !            97:       DATA Z(44) /1HO/
        !            98:       DATA Z(45) /1HD/
        !            99:       DATA Z(46) /338/
        !           100:       DATA Z(47) /5/
        !           101:       DATA Z(48) /1HA/
        !           102:       DATA Z(49) /1HM/
        !           103:       DATA Z(50) /1HA/
        !           104:       DATA Z(51) /1HX/
        !           105:       DATA Z(52) /1H0/
        !           106:       DATA Z(53) /273/
        !           107:       DATA Z(54) /5/
        !           108:       DATA Z(55) /1HA/
        !           109:       DATA Z(56) /1HM/
        !           110:       DATA Z(57) /1HA/
        !           111:       DATA Z(58) /1HX/
        !           112:       DATA Z(59) /1H1/
        !           113:       DATA Z(60) /265/
        !           114:       DATA Z(61) /4/
        !           115:       DATA Z(62) /1HM/
        !           116:       DATA Z(63) /1HA/
        !           117:       DATA Z(64) /1HX/
        !           118:       DATA Z(65) /1H0/
        !           119:       DATA Z(66) /274/
        !           120:       DATA Z(67) /4/
        !           121:       DATA Z(68) /1HM/
        !           122:       DATA Z(69) /1HA/
        !           123:       DATA Z(70) /1HX/
        !           124:       DATA Z(71) /1H1/
        !           125:       DATA Z(72) /266/
        !           126:       DATA Z(73) /5/
        !           127:       DATA Z(74) /1HD/
        !           128:       DATA Z(75) /1HM/
        !           129:       DATA Z(76) /1HA/
        !           130:       DATA Z(77) /1HX/
        !           131:       DATA Z(78) /1H1/
        !           132:       DATA Z(79) /256/
        !           133:       DATA Z(80) /5/
        !           134:       DATA Z(81) /1HA/
        !           135:       DATA Z(82) /1HM/
        !           136:       DATA Z(83) /1HI/
        !           137:       DATA Z(84) /1HN/
        !           138:       DATA Z(85) /1H0/
        !           139:       DATA Z(86) /273/
        !           140:       DATA Z(87) /5/
        !           141:       DATA Z(88) /1HA/
        !           142:       DATA Z(89) /1HM/
        !           143:       DATA Z(90) /1HI/
        !           144:       DATA Z(91) /1HN/
        !           145:       DATA Z(92) /1H1/
        !           146:       DATA Z(93) /265/
        !           147:       DATA Z(94) /4/
        !           148:       DATA Z(95) /1HM/
        !           149:       DATA Z(96) /1HI/
        !           150:       DATA Z(97) /1HN/
        !           151:       DATA Z(98) /1H0/
        !           152:       DATA Z(99) /274/
        !           153:       DATA Z(100) /4/
        !           154:       DATA Z(101) /1HM/
        !           155:       DATA Z(102) /1HI/
        !           156:       DATA Z(103) /1HN/
        !           157:       DATA Z(104) /1H1/
        !           158:       DATA Z(105) /266/
        !           159:       DATA Z(106) /5/
        !           160:       DATA Z(107) /1HD/
        !           161:       DATA Z(108) /1HM/
        !           162:       DATA Z(109) /1HI/
        !           163:       DATA Z(110) /1HN/
        !           164:       DATA Z(111) /1H1/
        !           165:       DATA Z(112) /256/
        !           166:       DATA Z(113) /5/
        !           167:       DATA Z(114) /1HF/
        !           168:       DATA Z(115) /1HL/
        !           169:       DATA Z(116) /1HO/
        !           170:       DATA Z(117) /1HA/
        !           171:       DATA Z(118) /1HT/
        !           172:       DATA Z(119) /209/
        !           173:       DATA Z(120) /4/
        !           174:       DATA Z(121) /1HI/
        !           175:       DATA Z(122) /1HF/
        !           176:       DATA Z(123) /1HI/
        !           177:       DATA Z(124) /1HX/
        !           178:       DATA Z(125) /202/
        !           179:       DATA Z(126) /4/
        !           180:       DATA Z(127) /1HS/
        !           181:       DATA Z(128) /1HI/
        !           182:       DATA Z(129) /1HG/
        !           183:       DATA Z(130) /1HN/
        !           184:       DATA Z(131) /329/
        !           185:       DATA Z(132) /5/
        !           186:       DATA Z(133) /1HI/
        !           187:       DATA Z(134) /1HS/
        !           188:       DATA Z(135) /1HI/
        !           189:       DATA Z(136) /1HG/
        !           190:       DATA Z(137) /1HN/
        !           191:       DATA Z(138) /338/
        !           192:       DATA Z(139) /5/
        !           193:       DATA Z(140) /1HD/
        !           194:       DATA Z(141) /1HS/
        !           195:       DATA Z(142) /1HI/
        !           196:       DATA Z(143) /1HG/
        !           197:       DATA Z(144) /1HN/
        !           198:       DATA Z(145) /320/
        !           199:       DATA Z(146) /3/
        !           200:       DATA Z(147) /1HD/
        !           201:       DATA Z(148) /1HI/
        !           202:       DATA Z(149) /1HM/
        !           203:       DATA Z(150) /329/
        !           204:       DATA Z(151) /4/
        !           205:       DATA Z(152) /1HI/
        !           206:       DATA Z(153) /1HD/
        !           207:       DATA Z(154) /1HI/
        !           208:       DATA Z(155) /1HM/
        !           209:       DATA Z(156) /338/
        !           210:       DATA Z(157) /4/
        !           211:       DATA Z(158) /1HS/
        !           212:       DATA Z(159) /1HN/
        !           213:       DATA Z(160) /1HG/
        !           214:       DATA Z(161) /1HL/
        !           215:       DATA Z(162) /193/
        !           216:       DATA Z(163) /4/
        !           217:       DATA Z(164) /1HR/
        !           218:       DATA Z(165) /1HE/
        !           219:       DATA Z(166) /1HA/
        !           220:       DATA Z(167) /1HL/
        !           221:       DATA Z(168) /217/
        !           222:       DATA Z(169) /5/
        !           223:       DATA Z(170) /1HA/
        !           224:       DATA Z(171) /1HI/
        !           225:       DATA Z(172) /1HM/
        !           226:       DATA Z(173) /1HA/
        !           227:       DATA Z(174) /1HG/
        !           228:       DATA Z(175) /217/
        !           229:       DATA Z(176) /4/
        !           230:       DATA Z(177) /1HD/
        !           231:       DATA Z(178) /1HB/
        !           232:       DATA Z(179) /1HL/
        !           233:       DATA Z(180) /1HE/
        !           234:       DATA Z(181) /200/
        !           235:       DATA Z(182) /5/
        !           236:       DATA Z(183) /1HC/
        !           237:       DATA Z(184) /1HM/
        !           238:       DATA Z(185) /1HP/
        !           239:       DATA Z(186) /1HL/
        !           240:       DATA Z(187) /1HX/
        !           241:       DATA Z(188) /331/
        !           242:       DATA Z(189) /5/
        !           243:       DATA Z(190) /1HC/
        !           244:       DATA Z(191) /1HO/
        !           245:       DATA Z(192) /1HN/
        !           246:       DATA Z(193) /1HJ/
        !           247:       DATA Z(194) /1HG/
        !           248:       DATA Z(195) /219/
        !           249:       DATA Z(196) /3/
        !           250:       DATA Z(197) /1HE/
        !           251:       DATA Z(198) /1HX/
        !           252:       DATA Z(199) /1HP/
        !           253:       DATA Z(200) /713/
        !           254:       DATA Z(201) /4/
        !           255:       DATA Z(202) /1HD/
        !           256:       DATA Z(203) /1HE/
        !           257:       DATA Z(204) /1HX/
        !           258:       DATA Z(205) /1HP/
        !           259:       DATA Z(206) /704/
        !           260:       DATA Z(207) /4/
        !           261:       DATA Z(208) /1HC/
        !           262:       DATA Z(209) /1HE/
        !           263:       DATA Z(210) /1HX/
        !           264:       DATA Z(211) /1HP/
        !           265:       DATA Z(212) /731/
        !           266:       DATA Z(213) /4/
        !           267:       DATA Z(214) /1HA/
        !           268:       DATA Z(215) /1HL/
        !           269:       DATA Z(216) /1HO/
        !           270:       DATA Z(217) /1HG/
        !           271:       DATA Z(218) /713/
        !           272:       DATA Z(219) /4/
        !           273:       DATA Z(220) /1HD/
        !           274:       DATA Z(221) /1HL/
        !           275:       DATA Z(222) /1HO/
        !           276:       DATA Z(223) /1HG/
        !           277:       DATA Z(224) /704/
        !           278:       DATA Z(225) /4/
        !           279:       DATA Z(226) /1HC/
        !           280:       DATA Z(227) /1HL/
        !           281:       DATA Z(228) /1HO/
        !           282:       DATA Z(229) /1HG/
        !           283:       DATA Z(230) /731/
        !           284:       DATA Z(231) /6/
        !           285:       DATA Z(232) /1HA/
        !           286:       DATA Z(233) /1HL/
        !           287:       DATA Z(234) /1HO/
        !           288:       DATA Z(235) /1HG/
        !           289:       DATA Z(236) /1H1/
        !           290:       DATA Z(237) /1H0/
        !           291:       DATA Z(238) /713/
        !           292:       DATA Z(239) /6/
        !           293:       DATA Z(240) /1HD/
        !           294:       DATA Z(241) /1HL/
        !           295:       DATA Z(242) /1HO/
        !           296:       DATA Z(243) /1HG/
        !           297:       DATA Z(244) /1H1/
        !           298:       DATA Z(245) /1H0/
        !           299:       DATA Z(246) /704/
        !           300:       DATA Z(247) /3/
        !           301:       DATA Z(248) /1HS/
        !           302:       DATA Z(249) /1HI/
        !           303:       DATA Z(250) /1HN/
        !           304:       DATA Z(251) /713/
        !           305:       DATA Z(252) /4/
        !           306:       DATA Z(253) /1HD/
        !           307:       DATA Z(254) /1HS/
        !           308:       DATA Z(255) /1HI/
        !           309:       DATA Z(256) /1HN/
        !           310:       DATA Z(257) /704/
        !           311:       DATA Z(258) /4/
        !           312:       DATA Z(259) /1HC/
        !           313:       DATA Z(260) /1HS/
        !           314:       DATA Z(261) /1HI/
        !           315:       DATA Z(262) /1HN/
        !           316:       DATA Z(263) /731/
        !           317:       DATA Z(264) /3/
        !           318:       DATA Z(265) /1HC/
        !           319:       DATA Z(266) /1HO/
        !           320:       DATA Z(267) /1HS/
        !           321:       DATA Z(268) /713/
        !           322:       DATA Z(269) /4/
        !           323:       DATA Z(270) /1HD/
        !           324:       DATA Z(271) /1HC/
        !           325:       DATA Z(272) /1HO/
        !           326:       DATA Z(273) /1HS/
        !           327:       DATA Z(274) /704/
        !           328:       DATA Z(275) /4/
        !           329:       DATA Z(276) /1HC/
        !           330:       DATA Z(277) /1HC/
        !           331:       DATA Z(278) /1HO/
        !           332:       DATA Z(279) /1HS/
        !           333:       DATA Z(280) /731/
        !           334:       DATA Z(281) /4/
        !           335:       DATA Z(282) /1HT/
        !           336:       DATA Z(283) /1HA/
        !           337:       DATA Z(284) /1HN/
        !           338:       DATA Z(285) /1HH/
        !           339:       DATA Z(286) /713/
        !           340:       DATA Z(287) /4/
        !           341:       DATA Z(288) /1HS/
        !           342:       DATA Z(289) /1HQ/
        !           343:       DATA Z(290) /1HR/
        !           344:       DATA Z(291) /1HT/
        !           345:       DATA Z(292) /713/
        !           346:       DATA Z(293) /5/
        !           347:       DATA Z(294) /1HD/
        !           348:       DATA Z(295) /1HS/
        !           349:       DATA Z(296) /1HQ/
        !           350:       DATA Z(297) /1HR/
        !           351:       DATA Z(298) /1HT/
        !           352:       DATA Z(299) /704/
        !           353:       DATA Z(300) /5/
        !           354:       DATA Z(301) /1HC/
        !           355:       DATA Z(302) /1HS/
        !           356:       DATA Z(303) /1HQ/
        !           357:       DATA Z(304) /1HR/
        !           358:       DATA Z(305) /1HT/
        !           359:       DATA Z(306) /731/
        !           360:       DATA Z(307) /4/
        !           361:       DATA Z(308) /1HA/
        !           362:       DATA Z(309) /1HT/
        !           363:       DATA Z(310) /1HA/
        !           364:       DATA Z(311) /1HN/
        !           365:       DATA Z(312) /713/
        !           366:       DATA Z(313) /5/
        !           367:       DATA Z(314) /1HD/
        !           368:       DATA Z(315) /1HA/
        !           369:       DATA Z(316) /1HT/
        !           370:       DATA Z(317) /1HA/
        !           371:       DATA Z(318) /1HN/
        !           372:       DATA Z(319) /704/
        !           373:       DATA Z(320) /5/
        !           374:       DATA Z(321) /1HA/
        !           375:       DATA Z(322) /1HT/
        !           376:       DATA Z(323) /1HA/
        !           377:       DATA Z(324) /1HN/
        !           378:       DATA Z(325) /1H2/
        !           379:       DATA Z(326) /841/
        !           380:       DATA Z(327) /6/
        !           381:       DATA Z(328) /1HD/
        !           382:       DATA Z(329) /1HA/
        !           383:       DATA Z(330) /1HT/
        !           384:       DATA Z(331) /1HA/
        !           385:       DATA Z(332) /1HN/
        !           386:       DATA Z(333) /1H2/
        !           387:       DATA Z(334) /832/
        !           388:       DATA Z(335) /4/
        !           389:       DATA Z(336) /1HD/
        !           390:       DATA Z(337) /1HM/
        !           391:       DATA Z(338) /1HO/
        !           392:       DATA Z(339) /1HD/
        !           393:       DATA Z(340) /832/
        !           394:       DATA Z(341) /4/
        !           395:       DATA Z(342) /1HC/
        !           396:       DATA Z(343) /1HA/
        !           397:       DATA Z(344) /1HB/
        !           398:       DATA Z(345) /1HS/
        !           399:       DATA Z(346) /729/
        !           400:       END
        !           401: C XXXXXBLOCKDATA1.f
        !           402:       BLOCK DATA
        !           403:       INTEGER EX(4,4), PT, PB, AO(4,4), RO(3,3)
        !           404:       COMMON /EXPRS/ PT, PB, AO, RO, EX
        !           405:       DATA AO(1,1), AO(1,2), AO(2,1) /3*0/, AO(1,3), AO(1,4), AO(3,1),
        !           406:      *    AO(3,2), AO(4,1), AO(4,3) /6*-1/, AO(2,2) /1/, AO(3,3) /2/,
        !           407:      *    AO(4,4), AO(2,4), AO(4,2) /3*3/, AO(3,4), AO(2,3) /2*-1/
        !           408:       DATA RO(1,1), RO(1,2), RO(2,1), RO(2,2), RO(3,3) /5*4/, RO(1,3),
        !           409:      *    RO(2,3), RO(3,1), RO(3,2) /4*-1/
        !           410:       DATA EX(1,1) /0/, EX(1,2) /0/, EX(1,3) /0/, EX(1,4) /-1/, EX(2,1)
        !           411:      *    /0/, EX(2,2) /1/, EX(2,3) /1/, EX(2,4) /-1/, EX(3,1) /-1/,
        !           412:      *    EX(3,2) /-1/, EX(3,3) /2/, EX(3,4) /-1/, EX(4,1) /-1/,
        !           413:      *    EX(4,2) /-1/, EX(4,3) /3/, EX(4,4) /-1/
        !           414:       END
        !           415: C XXXXXBLOCKDATA2.f
        !           416:       BLOCK DATA
        !           417: C
        !           418:       COMMON /TRANS/ Q(70)
        !           419:       INTEGER Q
        !           420: C
        !           421:       DATA Q(1) /1H0/, Q(2) /1H1/, Q(3) /1H2/, Q(4) /1H3/, Q(5) /1H4/
        !           422:       DATA Q(6) /1H5/, Q(7) /1H6/, Q(8) /1H7/, Q(9) /1H8/, Q(10) /1H9/
        !           423: C
        !           424:       DATA Q(31) /1HA/, Q(32) /1HB/, Q(33) /1HC/, Q(34) /1HD/, Q(35) /
        !           425:      *    1HE/
        !           426:       DATA Q(36) /1HF/, Q(37) /1HG/, Q(38) /1HH/, Q(39) /1HI/, Q(40) /
        !           427:      *    1HJ/
        !           428:       DATA Q(41) /1HK/, Q(42) /1HL/, Q(43) /1HM/, Q(44) /1HN/, Q(45) /
        !           429:      *    1HO/
        !           430:       DATA Q(46) /1HP/, Q(47) /1HQ/, Q(48) /1HR/, Q(49) /1HS/, Q(50) /
        !           431:      *    1HT/
        !           432:       DATA Q(51) /1HU/, Q(52) /1HV/, Q(53) /1HW/, Q(54) /1HX/, Q(55) /
        !           433:      *    1HY/
        !           434:       DATA Q(56) /1HZ/
        !           435: C
        !           436:       DATA Q(61) /1H+/, Q(62) /1H-/, Q(63) /1H)/, Q(64) /1H=/, Q(65) /
        !           437:      *    1H./
        !           438:       DATA Q(66) /1H(/, Q(67) /1H*/, Q(68) /1H//, Q(69) /1H,/, Q(70) /
        !           439:      *    1H /
        !           440:       END
        !           441: C XXXXXBLOCKDATA3.f
        !           442:       BLOCK DATA
        !           443:       INTEGER K(186), KI(30), KT(30)
        !           444:       COMMON /STS/ K, KI, KT
        !           445:       DATA K(1) /33/, K(2) /44/, K(3) /50/, K(4) /31/, K(5) /41/, K(6)
        !           446:      *    /34/, K(7) /45/, K(8) /47/, K(9) /34/, K(10) /32/, K(11)
        !           447:      *    /38/, K(12) /48/, K(13) /38/, K(14) /44/, K(15) /43/
        !           448:       DATA K(16) /47/, K(17) /34/, K(18) /30/, K(19) /41/
        !           449:       DATA K(20) /38/, K(21) /43/, K(22) /49/, K(23) /34/, K(24) /36/,
        !           450:      *    K(25) /34/, K(26) /47/
        !           451:       DATA K(27) /32/, K(28) /44/, K(29) /42/, K(30) /45/, K(31) /41/,
        !           452:      *    K(32) /34/, K(33) /53/, K(34) /41/, K(35) /44/, K(36) /36/,
        !           453:      *    K(37) /38/, K(38) /32/, K(39) /30/, K(40) /41/
        !           454:       DATA K(41) /34/, K(42) /53/, K(43) /49/, K(44) /34/, K(45) /47/,
        !           455:      *    K(46) /43/, K(47) /30/, K(48) /41/, K(49) /33/, K(50) /38/,
        !           456:      *    K(51) /42/, K(52) /34/, K(53) /43/, K(54) /48/, K(55) /38/,
        !           457:      *    K(56) /44/, K(57) /43/, K(58) /32/, K(59) /44/, K(60) /42/,
        !           458:      *    K(61) /42/, K(62) /44/, K(63) /43/, K(64) /48/, K(65) /50/,
        !           459:      *    K(66) /31/, K(67) /47/, K(68) /44/, K(69) /50/, K(70) /49/,
        !           460:      *    K(71) /38/, K(72) /43/, K(73) /34/
        !           461:       DATA K(74) /35/, K(75) /50/, K(76) /43/, K(77) /32/, K(78) /49/,
        !           462:      *    K(79) /38/, K(80) /44/, K(81) /43/, K(82) /31/, K(83) /41/,
        !           463:      *    K(84) /44/, K(85) /32/, K(86) /40/, K(87) /33/, K(88) /30/,
        !           464:      *    K(89) /49/, K(90) /30/, K(91) /34/, K(92) /46/, K(93) /50/,
        !           465:      *    K(94) /38/, K(95) /51/, K(96) /30/, K(97) /41/, K(98) /34/,
        !           466:      *    K(99) /43/, K(100) /32/, K(101) /34/, K(102) /33/, K(103)
        !           467:      *    /30/, K(104) /49/, K(105) /30/
        !           468:       DATA K(106) /30/, K(107) /48/, K(108) /48/, K(109) /38/, K(110)
        !           469:      *    /36/, K(111) /43/, K(112) /36/, K(113) /44/, K(114) /49/,
        !           470:      *    K(115) /44/, K(116) /47/, K(117) /34/, K(118) /49/, K(119)
        !           471:      *    /50/, K(120) /47/, K(121) /43/
        !           472:       DATA K(122) /32/, K(123) /44/, K(124) /43/, K(125) /49/, K(126)
        !           473:      *    /38/, K(127) /43/, K(128) /50/, K(129) /34/, K(130) /32/,
        !           474:      *    K(131) /30/, K(132) /41/, K(133) /41/, K(134) /48/, K(135)
        !           475:      *    /49/, K(136) /44/, K(137) /45/, K(138) /38/, K(139) /35/,
        !           476:      *    K(140) /33/, K(141) /44/, K(142) /45/, K(143) /30/, K(144)
        !           477:      *    /50/, K(145) /48/, K(146) /34/
        !           478:       DATA K(147) /47/, K(148) /34/, K(149) /30/, K(150) /33/, K(151)
        !           479:      *    /52/, K(152) /47/, K(153) /38/, K(154) /49/, K(155) /34/,
        !           480:      *    K(156) /47/, K(157) /34/, K(158) /52/, K(159) /38/, K(160)
        !           481:      *    /43/, K(161) /33/, K(162) /34/, K(163) /43/, K(164) /33/,
        !           482:      *    K(165) /35/, K(166) /38/, K(167) /41/, K(168) /34/, K(169)
        !           483:      *    /31/, K(170) /30/, K(171) /32/, K(172) /40/, K(173) /48/,
        !           484:      *    K(174) /45/, K(175) /30/, K(176) /32/, K(177) /34/, K(178)
        !           485:      *    /34/, K(179) /43/, K(180) /33/
        !           486:       DATA K(181) /35/, K(182) /44/, K(183) /47/, K(184) /42/, K(185)
        !           487:      *    /30/, K(186) /49/
        !           488:       DATA KI(1) /15/, KI(2) /4/, KI(3) /7/, KI(4) /7/, KI(5) /7/,
        !           489:      *    KI(6) /8/, KI(7) /9/, KI(8) /6/, KI(9) /10/, KI(10) /8/,
        !           490:      *    KI(11) /9/, KI(12) /11/, KI(13) /4/, KI(14) /6/, KI(15) /4/,
        !           491:      *    KI(16) /6/, KI(17) /8/, KI(18) /4/, KI(19) /4/, KI(20) /2/,
        !           492:      *    KI(21) /2/, KI(22) /5/, KI(23) /4/, KI(24) /5/, KI(25) /6/,
        !           493:      *    KI(26) /7/, KI(27) /9/, KI(28) /3/, KI(29) /6/, KI(30) /0/
        !           494:       DATA KT(1), KT(2), KT(3), KT(4), KT(5), KT(6), KT(7), KT(8)
        !           495:      *    /8*1/, KT(9), KT(10), KT(11) /3*0/, KT(12) /2/, KT(13) /3/,
        !           496:      *    KT(14), KT(15), KT(16), KT(17), KT(18), KT(19), KT(20),
        !           497:      *    KT(21), KT(22), KT(23), KT(24), KT(25), KT(26), KT(27)
        !           498:      *    /14*5/, KT(29), KT(30) /2*5/, KT(28) /6/
        !           499:       END
        !           500: C XXXXXMAIN0.f
        !           501:       INTEGER STMT, PSTMT, SYMLEN, OUTUT, SYMHD, BNEXT, HASH, DSA,
        !           502:      *    STACK, DOLIST, DOPT, OUTUT2, OUTUT3, PDSA, OUTUT4, REF, PREF,
        !           503:      *    PNODE, PLAT, PCOM, COM
        !           504:       LOGICAL ERR, SYSERR, OPT, P1ERR, ABORT, P2
        !           505:       LOGICAL SW, QBR
        !           506:       COMMON /SWS/ SW(10)
        !           507: C*****SWS
        !           508: C     SW(1) (LOG) IF TRUE, CAN USE END= OPTION IN READ STMTS
        !           509: C
        !           510:       COMMON /OPTNS/ OPT(5), P1ERR
        !           511: C
        !           512: C*****OPTNS
        !           513: C     OPT(1) (LOG) IF TRUE, SYMBOL TABLE PRINTED FOR EACH P. U.
        !           514: C     OPT(2) (LOG) IF TRUE, CROSS REFERENCES PRINTED FOR EACH SYMBOL
        !           515: C     OPT(3) (LOG) IF TRUE, PASS 2 IS EXECUTED
        !           516: C     OPT(4) (LOG) IF TRUE, LISTING PRINTED FOR EACH P. U.
        !           517: C     OPT(5) (LOG) IF TRUE, FORTRAN PGM COMPILED AFTER VERIFIER
        !           518: C     RUN;  IF ANY OF THESE ARE FALSE THE CORRESPONDING ACTION IS NOT TA
        !           519: C     P1ERR (LOG) SET TO TRUE IF INFO NORMALLY SAVED FOR PASS 2 IS
        !           520: C     SUPPRESSED FOR THIS P. U.
        !           521: C
        !           522:       COMMON /INPUT/ NSTMT, PSTMT, STMT(1327)
        !           523: C
        !           524: C*****INPUT
        !           525: C     NSTMT (INT) INDEX OF END-OF-INPUT-STMT CHARACTER IN STMT
        !           526: C     PSTMT (INT) POINTS TO CURRENT POSITION IN STMT (EXCEPT IN LEXICAL
        !           527: C     SUBPGMS WHERE IT IS UPDATED IN CALLING SUBPGM AFTER A TOKEN IS
        !           528: C     FOUND)
        !           529: C     STMT (INT) ENCODED FORM OF DEBLANKED INPUT STMT
        !           530: C
        !           531:       COMMON /CEXPRS/ LSTACK, STACK(620)
        !           532: C
        !           533: C*****CEXPRS
        !           534: C     LSTACK (INT) LENGTH OF STACK
        !           535: C     STACK(*), (INT) ARRAY USED IN EXPR AS A STACK; ALSO FOR AUXILLARY
        !           536: C     STORAGE AND OUTPUT
        !           537: C
        !           538:       COMMON /PARAMS/ INUT, OUTUT, NOCHAR, SYMLEN, OUTUT2, OUTUT3,
        !           539:      *    OUTUT4
        !           540: C
        !           541: C*****PARAMS
        !           542: C     INUT (INT) LOGICAL INPUT NUMBER FOR THE HOST MACHINE
        !           543: C     OUTUT (INT) LOGICAL OUTPUT NUMBER FOR THE HOST MACHINE
        !           544: C     NOCHAR (INT) NUMBER OF CHARACTERS PER MACHINE WORD IN HOST
        !           545: C     SYMLEN (INT) NUMBER OF WORDS NECESSARY ON HOST TO STORE 6
        !           546: C     CHARACTERS (I.E. A FORTRAN SYMBOL)
        !           547: C     OUTUT2 (INT), OUTUT3(INT), OUTUT4(INT) LOGICAL OUTPUT NUMBERS
        !           548: C     FOR THE HOST MACHINE TO BE USED BY THE VERIFIER FOR INTERPASS
        !           549: C     COMMUNICATION
        !           550: C
        !           551:       COMMON /FACTS/ NAME, NOST, ITYP, IASF
        !           552: C
        !           553: C*****FACTS
        !           554: C     NAME (INT) INDEX IN SYMBOL TABLE OF ENTRY FOR CURRENT P.U.
        !           555: C     NOST (INT) STMT NUMBER OF CURRENT STMT BEING PROCESSED
        !           556: C     ITYP (INT) TYPE OF STMT CURRENTLY BEING PROCESSED (SEE PU
        !           557: C     FOR FURTHER DOC)
        !           558: C
        !           559:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !           560: C
        !           561: C*****DETECT
        !           562: C     ERROR (LOG) SET TO TRUE IN VARIOUS SUBPGMS USUALLY TO CEASE PROCES
        !           563: C     OF CURRENT STMT
        !           564: C     SYSERR (LOG) IRRECOVERABLE ERROR IN SYSTEM; (E.G., TABLE OVERFLOW)
        !           565: C     IN PASS 1 CAUSES CURRENT P.U. TO HAVE AN END STMT SIMULATED AND
        !           566: C     EXECUTION PROCEDES TO NEXT P.U.;  IN PASS 2 CAUSES PROCESSING
        !           567: C     OF PROGRAM TO CEASE.
        !           568: C
        !           569:       COMMON /TABL/ NEXT, LABHD, SYMHD, BNEXT
        !           570: C
        !           571: C*****TABL
        !           572: C     NEXT (INT) POINTS TO NEXT FREE WORD IN DSA (COUNTING FROM DSA(1))
        !           573: C     LABHD (INT) POINTS TO HEAD OF LINEAR LINKED LIST IN DSA OF ALL
        !           574: C     LABELS IN P.U.
        !           575: C     SYMHD (INT) POINTS TO HEAD OF LINEAR LINKED LIST IN DSA OF ALL
        !           576: C     SYMBOLS IN P.U.
        !           577: C     BNEXT (INT) POINTS TO NEXT FREE WORD IN DSA (COUNTING FROM
        !           578: C     DSA(LDSA))
        !           579: C
        !           580:       COMMON /CHASH/ LHASH, HASH(401)
        !           581: C
        !           582: C*****CHASH
        !           583: C     LHASH (INT) LENGTH OF HASH ARRAY
        !           584: C     HASH (*) (INT) HASH TABLE USED TO INDEX INTO DSA
        !           585: C
        !           586:       COMMON /CTABL/ LDSA, PDSA, DSA(5000)
        !           587: C
        !           588: C*****CTABL
        !           589: C     LDSA (INT) LENGTH OF DSA
        !           590: C     DSA(*) (INT) SYMBOL TABLE (SEE LOOKUP FOR MORE EXPLICIT DOC)
        !           591: C
        !           592:       COMMON /DOS/ DOPT, LDO, DOLIST(192)
        !           593: C
        !           594: C*****DOS
        !           595: C     DOPT (INT) POINTER TO FIRST FREE WORD IN DOLIST
        !           596: C     LDO (INT) LENGTH OF DOLIST
        !           597: C     DOLIST (*) (INT) ARRAY USED AS STACK FOR NESTING OF DOS (USED
        !           598: C     TO TEST FOR LEGAL BRANCHING WITHIN P.U. (SEE DOSPEC FOR FURTHER
        !           599: C     DOC)
        !           600: C
        !           601:       COMMON /LISTDO/ LPT, LEN, LS(64)
        !           602: C
        !           603: C*****LISTDO
        !           604: C     LPT (INT) POINTER TO FIRST FREE WORD IN LS
        !           605: C     LEN (INT) LENGTH OF LS
        !           606: C     LS (*) (INT) ARRAY USED AS STACK FOR NESTING OF IMPLIED
        !           607: C     DO'S IN INPUT/OUTPUT STMTS (SEE DOSPEC FOR FURTHER DOC)
        !           608: C
        !           609:       COMMON /PASS/ P2, QBR
        !           610: C
        !           611: C*****PASS
        !           612: C     P2 (LOG) IF TRUE, VERIFIER IS IN PASS 2; ELSE VERIFIER IS IN PASS
        !           613: C     QBR (LOG) IF TRUE, VERIFIER IS TO PRINT ERROR MESSAGES
        !           614: C     ELSE IS NOT
        !           615: C
        !           616:       COMMON /CREF/ LREF, PREF, REF(100)
        !           617: C
        !           618: C*****CREF
        !           619: C     LREF (INT) TOTAL LENGTH OF ARRAY REF
        !           620: C     PREF (INT) CURRENT LENGTH OF REF
        !           621: C     REF (*) (INT) ARRAY CONTAINING INFORMATION CONCERNING A SUBR/FCN
        !           622: C     REF (SEE SETREF FOR FURTHER DOC)
        !           623: C
        !           624:       COMMON /HEAD/ LNODE, PNODE, NODE(500)
        !           625: C
        !           626: C*****HEAD
        !           627: C     LNODE (INT) LENGTH OF NODE
        !           628: C     PNODE (INT) POINTER TO NEXT FREE WORD IN NODE
        !           629: C     NODE (*) (INT) ARRAY OF INDICES OF P.U. ENTRIES IN LAT
        !           630: C
        !           631:       COMMON /GRAPH/ LLAT, PLAT, LAT(6000)
        !           632: C
        !           633: C*****GRAPH
        !           634: C     LLAT (INT) LENGTH OF LAT
        !           635: C     PLAT (INT)  POINTER TO NEXT FREE WORD IN LAT
        !           636: C     LAT (*) (INT) ARRAY WHOSE ENTRIES DESCRIBE EACH P.U. IN PGM
        !           637: C     AND THEIR INTER-RELNS (SEE SETNOD FOR FURTHER DOC)
        !           638: C
        !           639:       COMMON /COMS/ LCOM, PCOM, COM(300)
        !           640: C
        !           641: C*****COMS
        !           642: C     LCOM (INT) LENGTH OF COM
        !           643: C     PCOM (INT) POINTER TO NEXT FREE WORD IN COM
        !           644: C     COM (*) (INT) ARRAY WHOSE ENTRIES DESCRIBE EACH COMMON BLOCK
        !           645: C     IN PGM (SEE  SETCOM FOR FURTHER DOC)
        !           646:       COMMON /SCR1/ LINODE, INODE(500)
        !           647:       COMMON /SCR2/ LNNODE, NNODE(500)
        !           648: C
        !           649: C***SCR1,SCR2,SCR3
        !           650: C     INODE(INT), NNODE(INT) SCRATCH ARRAYS KEYED ON LENGTH NODE(*)
        !           651: C     LINNODE = LNNODE .GE. MAX( LNODE, LCOM/(SYMLEN+5) )
        !           652: C
        !           653: C     THREE MORE BLOCK COMMON REGIONS ARE USED : STS -SEE TYPST
        !           654: C     TRANS - SEE MAPCHR EXPRS - SEE EXPR FOR FURTHER DOC
        !           655: C
        !           656:       QBR = .FALSE.
        !           657:       NOCHAR = 4
        !           658:       INUT = 5
        !           659:       OUTUT = 6
        !           660:       OUTUT2 = 7
        !           661:       OUTUT3 = 8
        !           662:       OUTUT4 = 9
        !           663: C      NOCHAR WAS &, OUT2-4 was 12,13,14 in distribution tape
        !           664:       REWIND INUT
        !           665:       REWIND OUTUT2
        !           666:       REWIND OUTUT3
        !           667:       REWIND OUTUT4
        !           668:       LEN = 64
        !           669:       SYMLEN = (5/NOCHAR) + 1
        !           670:       P2 = .FALSE.
        !           671:       ERR = .FALSE.
        !           672:       ABORT = .FALSE.
        !           673:       SYSERR = .FALSE.
        !           674:       SW(1) = .FALSE.
        !           675:       PDSA = 1
        !           676:       LDSA = 5000
        !           677:       LHASH = 401
        !           678:       DO 10 I=1,LHASH
        !           679:         HASH(I) = 0
        !           680:    10 CONTINUE
        !           681:       OPT(1) = .TRUE.
        !           682:       OPT(2) = .TRUE.
        !           683:       OPT(3) = .TRUE.
        !           684:       OPT(4) = .TRUE.
        !           685:       OPT(5) = .FALSE.
        !           686:       LSTACK = 620
        !           687:       LREF = 100
        !           688:       PREF = 1
        !           689:       LDO = 192
        !           690:       CALL OVRLAY(1)
        !           691:       CALL PU
        !           692:       IF (.NOT.OPT(3) .OR. SYSERR) GO TO 30
        !           693:       P2 = .TRUE.
        !           694:       IF (.NOT.OPT(4)) WRITE (OUTUT,99999)
        !           695: 99999 FORMAT (1H1)
        !           696:       CALL OVRLAY(2)
        !           697:       LLAT = 6000
        !           698:       PLAT = 1
        !           699:       BNEXT = LDSA
        !           700:       NEXT = 1
        !           701:       LNODE = 500
        !           702:       PNODE = 1
        !           703:       LCOM = 300
        !           704:       PCOM = 1
        !           705:       LINODE = LNODE
        !           706:       LNNODE = LNODE
        !           707: C
        !           708: C     PASS 1 CAN SUPPRESS PASS 2 PROCESSING FOR SPECIFIC P.U.
        !           709: C     BUT NEVER SHUTS OFF PASS 2 COMPLETELY;  PASS 2 CAN CEASE
        !           710: C     PROCESSING FOR VARIOUS REASONS:
        !           711: C      1. 2 SUBPRGMS WITH SAME NAME(IN SETNOD)
        !           712: C      2. NO PROGRAM UNIT SUCCESSFULLY PASSED TO PASS 2
        !           713: C       (IN CONSTR)
        !           714: C      3. RECURSION (IN ASLEV AND INVOKE)
        !           715: C     IF MISSING SUBPRGMS ARE DISCOVERED, PASS 2 CAN
        !           716: C     PROCEDE WITH INCOMPLETE PROCESSING, A MESSAGE
        !           717: C     IS PRINTED TO INFORM THE USER
        !           718: C
        !           719:       REWIND OUTUT2
        !           720:       REWIND OUTUT3
        !           721:       REWIND OUTUT4
        !           722:       CALL CONSTR(IROOT)
        !           723: C     CAN RETURN FROM CONSTR IN ERROR CONDITION WITH FILES LACKING
        !           724: C     VERIFIER SOFTWARE END OF FILE
        !           725:       IF (ABORT .OR. SYSERR) GO TO 30
        !           726:       REWIND OUTUT4
        !           727:       REWIND OUTUT3
        !           728:       REWIND OUTUT2
        !           729:       CALL CHECKS(IROOT)
        !           730:    20 REWIND INUT
        !           731:       CALL OVRLAY(3)
        !           732:       CALL COMPIL(.NOT.(ABORT.OR.SYSERR).AND.OPT(5))
        !           733:       STOP
        !           734:    30 WRITE (OUTUT,99998)
        !           735: 99998 FORMAT (47H1INTER-PROGRAM-UNIT COMMUNICATIONS NOT VERIFIED)
        !           736:       GO TO 20
        !           737:       END
        !           738: C XXXXXCOMPIL.f
        !           739:       SUBROUTINE COMPIL(FLAG)
        !           740: C
        !           741:       LOGICAL FLAG
        !           742: C
        !           743:       RETURN
        !           744: C
        !           745:       END
        !           746: C XXXXXOVRLAY.f
        !           747:       SUBROUTINE OVRLAY(N)
        !           748: C
        !           749:       RETURN
        !           750: C
        !           751:       END
        !           752: C XXXXXSATT1.f
        !           753:       SUBROUTINE SATT1(INDEX, FIELD, ATT)
        !           754: C
        !           755:       COMMON /CTABL/ LDSA, PDSA, DSA(5000)
        !           756: C
        !           757:       INTEGER INDEX, FIELD, ATT
        !           758:       INTEGER LDSA, PDSA, DSA
        !           759:       INTEGER FWTH(8), FPOS(8)
        !           760: C
        !           761:       DATA FWTH(1) /16/, FPOS(1) /1/
        !           762:       DATA FWTH(2) /2/, FPOS(2) /16/
        !           763:       DATA FWTH(3) /2/, FPOS(3) /32/
        !           764:       DATA FWTH(4) /2/, FPOS(4) /64/
        !           765:       DATA FWTH(5) /2/, FPOS(5) /128/
        !           766:       DATA FWTH(6) /2/, FPOS(6) /256/
        !           767:       DATA FWTH(7) /4/, FPOS(7) /512/
        !           768:       DATA FWTH(8) /32/, FPOS(8) /2048/
        !           769: C
        !           770:       DSA(INDEX) = DSA(INDEX) + (ATT-MOD(DSA(INDEX)/FPOS(FIELD),
        !           771:      *    FWTH(FIELD)))*FPOS(FIELD)
        !           772: C
        !           773:       RETURN
        !           774: C
        !           775:       END
        !           776: C XXXXXIGATT1.f
        !           777:       INTEGER FUNCTION IGATT1(INDEX, FIELD)
        !           778: C
        !           779:       COMMON /CTABL/ LDSA, PDSA, DSA(5000)
        !           780: C
        !           781:       INTEGER INDEX, FIELD
        !           782:       INTEGER LDSA, PDSA, DSA
        !           783:       INTEGER FWTH(8), FPOS(8)
        !           784: C
        !           785:       DATA FWTH(1) /16/, FPOS(1) /1/
        !           786:       DATA FWTH(2) /2/, FPOS(2) /16/
        !           787:       DATA FWTH(3) /2/, FPOS(3) /32/
        !           788:       DATA FWTH(4) /2/, FPOS(4) /64/
        !           789:       DATA FWTH(5) /2/, FPOS(5) /128/
        !           790:       DATA FWTH(6) /2/, FPOS(6) /256/
        !           791:       DATA FWTH(7) /4/, FPOS(7) /512/
        !           792:       DATA FWTH(8) /32/, FPOS(8) /2048/
        !           793: C
        !           794:       IGATT1 = MOD(DSA(INDEX)/FPOS(FIELD),FWTH(FIELD))
        !           795: C
        !           796:       RETURN
        !           797: C
        !           798:       END
        !           799: C XXXXXEXCH.f
        !           800:       INTEGER FUNCTION EXCH(J1, J2, DSA, LDSA, HASH, LHASH, OFFSET)
        !           801:       INTEGER DSA(LDSA), HASH(LHASH), OFFSET
        !           802:       INTEGER OUTUT, SYMLEN, OUTUT2, OUTUT3, OUTUT4
        !           803:       COMMON /PARAMS/ INUT, OUTUT, NOCHAR, SYMLEN, OUTUT2, OUTUT3,
        !           804:      *    OUTUT4
        !           805: C
        !           806: C     DSA(HASH(J1)+OFFSET) CONTAINS ELE TO BE COMPARED
        !           807: C      DSA(HASH(J2)+OFFSET) CONTAINS ELE TO BE COMPARED
        !           808: C
        !           809:       JJ1 = HASH(J1) + OFFSET
        !           810:       JJ2 = HASH(J2) + OFFSET
        !           811:       DO 40 I=1,SYMLEN
        !           812:         K1 = JJ1 + I - 1
        !           813:         K2 = JJ2 + I - 1
        !           814:         IF (DSA(K1)) 10, 20, 20
        !           815:    10   IF (DSA(K2)) 30, 50, 50
        !           816:    20   IF (DSA(K2)) 70, 30, 30
        !           817:    30   IF (DSA(K1)-DSA(K2)) 70, 40, 50
        !           818:    40 CONTINUE
        !           819: C
        !           820: C     COMPARISON SHOWS ELEMENTS IN PROPER ORDER
        !           821: C
        !           822:    50 EXCH = 0
        !           823:    60 RETURN
        !           824: C
        !           825: C     COMPARISON SHOWS NEED FOR EXCHANGE
        !           826: C
        !           827:    70 I = HASH(J1)
        !           828:       HASH(J1) = HASH(J2)
        !           829:       HASH(J2) = I
        !           830:       EXCH = -1
        !           831:       GO TO 60
        !           832:       END
        !           833: C XXXXXSSORT.f
        !           834:       SUBROUTINE SSORT(EX, X, LX, Q, L, OFFSET)
        !           835:       INTEGER EX, X(LX), Q(L), OFFSET
        !           836:       EXTERNAL EX
        !           837: C
        !           838: C     ENTRIES SPACED 1 APART IN HASH TABLE
        !           839: C     EX IS EXCHANGE ROUTINE--RETURNS<0 IF EXCHANGES ITEMS
        !           840: C     RETURNS >=0 IF DOESN'T
        !           841: C     L  IS NUMBER OF THINGS TO BE SORTED,  SPACING IS 1 HERE
        !           842: C     START SHELL SORT
        !           843: C
        !           844:       M = 1
        !           845:    10 IF (M.GE.L) GO TO 20
        !           846:       M = M*2
        !           847:       GO TO 10
        !           848:    20 M = M/2
        !           849:       IF (M.LT.1) RETURN
        !           850:       K = L - M
        !           851: C
        !           852: C      IN PASS1 ARE SORTING SYMBOL TABLE
        !           853: C      IN PASS 2 ARE SORTING LATTICE
        !           854: C     OR COMMON BLOCK DEFS
        !           855: C
        !           856:       DO 50 J=1,K
        !           857:         I = J
        !           858:    30   IF (EX(I+M,I,X,LX,Q,L,OFFSET)) 40, 50, 50
        !           859: C
        !           860: C     BUBBLE SORT W/I SUBLIST
        !           861: C
        !           862:    40   I = I - M
        !           863:         IF (I.GE.1) GO TO 30
        !           864:    50 CONTINUE
        !           865:       GO TO 20
        !           866:       END
        !           867: C XXXXXERROR1.f
        !           868:       SUBROUTINE ERROR1(MESS, LMESS)
        !           869: C
        !           870:       INTEGER MESS(20), LMESS
        !           871:       INTEGER ZERO(1)
        !           872: C
        !           873:       DATA ZERO(1) /0/
        !           874: C
        !           875:       CALL ERROR2(MESS, LMESS, ZERO(1), ZERO(1), 1, 1)
        !           876: C
        !           877:       RETURN
        !           878: C
        !           879:       END
        !           880: C XXXXXERROR2.f
        !           881:       SUBROUTINE ERROR2( I,  JJ, K, NN, SPBEF, SPAFT )
        !           882: C
        !           883: C     PRINTS ERROR MESSAGES AND SYMBOLIC NAME
        !           884: C     I IS PACKED HOLLERITH STRING
        !           885: C     JJ IS NUMBER OF CHARACTERS TO BE PRINTED ( N = JJ)
        !           886: C     K CONTAINS INTEGER OR HOLLERITH INFO TO FOLLOW MESSAGE
        !           887: C     NN CONTROLS TYPE OF LINE TO BE PRINTED
        !           888: C
        !           889: C     NN = 0 MEANS PRINT MESSAGE
        !           890: C
        !           891: C     NN < 0 MEANS IF JJ=0 NO MESSAGE, ELSE PRINT MESSAGE
        !           892: C     ON NEXT LINE IF NN = -1 PRINT PGM UNIT AND/OR STMT NO
        !           893: C     (CONTROLLED BY CONTENTS OF K).
        !           894: C     ON NEXT LINE IF NN = -2 PRINT PARAMETER NUMBER IN K
        !           895: C     NN = -3 USED FOR SPACING CONTROL IN LONG MESSAGES
        !           896: C
        !           897: C     NN > 0 MEANS PRINT MESSAGE FOLLOWED BY IDENTIFIER IN K
        !           898: C     SPBEF, SPAFT CONTROL LINE SPACING BEFORE AND AFTER MESSAGE
        !           899: C     IF = 1, BLANK LINE EMMITTED
        !           900: C
        !           901:       INTEGER I(1), J(80), OUTUT, PDSA, DSA, M(6), K(6), W
        !           902:       INTEGER SPBEF, SPAFT
        !           903:       LOGICAL OPT, P1ERR, P2, QBR
        !           904:       COMMON /CTABL/ LDSA, PDSA, DSA(5000)
        !           905:       COMMON /PARAMS/ INUT, OUTUT, NOCHAR, I1, I2, I3, I4
        !           906:       COMMON /FACTS/ NAME, NOST, ITYP, IASF
        !           907:       COMMON /OPTNS/ OPT(5), P1ERR
        !           908:       COMMON /PASS/ P2, QBR
        !           909:       DATA W /1HW/, KK /1H-/
        !           910: C
        !           911: C     ERROR IN P.U. DURING PROCESSING OF A HEADING STMT, SPECIFI STMT,
        !           912: C     EQUIV STMT, OR DATA STMT CAUSES PASS 2 TO BE SUPPRESSED FOR THAT
        !           913: C     P.U.
        !           914: C
        !           915:       IF (QBR) GOTO 45
        !           916:       IF(SPBEF.EQ.1) WRITE(OUTUT, 99998)
        !           917:       N = JJ
        !           918:       IF (N.GT.72) N = 72
        !           919:       J(2) = KK
        !           920:       IF (N.GE.1) CALL S5UNPK(I, J, N)
        !           921:       IF (ITYP.LT.14 .AND. J(2).NE.W) P1ERR = .TRUE.
        !           922:       IF (NN) 50, 10, 30
        !           923: C
        !           924: C     NN=0
        !           925: C
        !           926:    10 CONTINUE
        !           927:       WRITE (OUTUT,99997) (J(L),L=1,N)
        !           928:       IF(P2 .OR. OPT(4)) GOTO 40
        !           929:       CALL S5UNPK(DSA(NAME+4), J(1), 6)
        !           930:       WRITE (OUTUT,99999) NOST, (J(L),L=1,6)
        !           931: 99999 FORMAT (16H *** AT STMT NO , I6, 13H IN PGM UNIT , 6A1)
        !           932: 99998 FORMAT(1H )
        !           933:       GO TO 40
        !           934: C
        !           935: C     NN>0
        !           936: C
        !           937:    30 CONTINUE
        !           938:       IF (N.GT.68) N = 68
        !           939:       CALL S5UNPK(K, J(73), 6)
        !           940:       WRITE (OUTUT,99997) (J(L),L=1,N), KK, KK, (J(L),L=73,78)
        !           941: 99997 FORMAT (4H ***, 76A1)
        !           942:  40   IF(SPAFT.EQ.1) WRITE(OUTUT, 99998)
        !           943:  45   RETURN
        !           944: C
        !           945: C     NN<0
        !           946: C
        !           947:    50 CONTINUE
        !           948:       IF (N.GE.1) WRITE (OUTUT,99997) (J(L),L=1,N)
        !           949:       IF( -2.EQ.NN ) GOTO 70
        !           950:       IF( -3.EQ.NN ) GOTO 40
        !           951:       CALL S5UNPK(DSA(NAME+4), M(1), 6)
        !           952: C     WRITE OUT STMT NO AND/OR PGM UNIT
        !           953:       IF (K(1).EQ.0) GO TO 60
        !           954:       WRITE (OUTUT,99996) K(1), (M(L),L=1,6)
        !           955: 99996 FORMAT (16H *** AT STMT NO , I6, 1X, 13H IN PGM UNIT , 6A1)
        !           956:       GO TO 40
        !           957:    60 WRITE (OUTUT,99995) (M(L),L=1,6)
        !           958: 99995 FORMAT (17H *** IN PGM UNIT , 6A1)
        !           959:       GO TO 40
        !           960: C     WRITE OUT PARAMETER NO FOR PARAMETERLIST ERRORS
        !           961:  70   WRITE(OUTUT,99994) K(1)
        !           962: 99994 FORMAT(22H *** PARAMETER NUMBER ,I6)
        !           963:       GOTO 40
        !           964:       END
        !           965: C XXXXXARDECL.f
        !           966:       LOGICAL FUNCTION ARDECL(K2, KK)
        !           967: C
        !           968: C     K2 IS INDEX OF END OF ARRAY DECLARATOR IN STMT
        !           969: C     KK IS SYMBOL TABLE INDEX FOR THIS ARRAY
        !           970: C     PROCESSES ARRAY DECLARATOR AND DECLARATOR CONSTRUCTS.
        !           971: C     CAN EXPECT ARRAY DECLARATOR, ARRAY ELEMENT; ARRAY, VARIABLE.
        !           972: C     ENTERS INTO SYMBOL TABLE AND TYPES ID;  SETS USAGE ON ARRAY
        !           973: C     DECLARATOR
        !           974: C     CHECKS SYNTAX OF BOUNDS; IF VARIABLY DIMENSIONED, BOUNDS
        !           975: C     VARIABLE AND ARRAY ITSELF MUST BE DUMMY ARGUMENTS.
        !           976: C     ACCUMULATES TOTAL LENGTH OF ARRAY WITH CONSTANT BOUNDS AND STORES
        !           977: C     IT OFF ARRAY SYMBOL TABLE ENTRY.  -1 LENGTH INDICATES VARIABLE
        !           978: C     DIMENSION
        !           979: C     CALLED BY DIMENSION, TYPE, COMMON, EQUIVALENCE, DATA STMT.
        !           980: C
        !           981: C     ARRY IS TRUE FOR ARRAY ELEMENTS/ARRAY DECLARATORS
        !           982: C     FALSE FOR ARRAYS AND VARIABLES
        !           983: C     CORNER IS TRUE FOR ARRAY ELEMENTS WITH (1,1,1)--NEEDED IN EQUIV.
        !           984: C     STMT ;  IF SUCH AN ELEMENT IS RECOGNIZED KK IS SENT AS ITS
        !           985: C     NEGATIVE.
        !           986: C
        !           987:       LOGICAL ERR, SYSERR, ABORT, TOKPNO, VAR, CORNER, ARRY, FLUSH
        !           988:       INTEGER STMT, PSTMT, PDSA, BNEXT, SYMHD, DSA
        !           989:       COMMON /INPUT/ NSTMT, PSTMT, STMT(1327)
        !           990:       COMMON /TABL/ NEXT, LABHD, SYMHD, BNEXT
        !           991:       COMMON /CTABL/ LDSA, PDSA, DSA(5000)
        !           992:       COMMON /FACTS/ NAME, NOST, ITYP, IASF
        !           993:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !           994:       ERR = .FALSE.
        !           995:       FLUSH = .FALSE.
        !           996:       ARRY = .FALSE.
        !           997:       CORNER = .TRUE.
        !           998:       ARDECL = .FALSE.
        !           999: C
        !          1000: C     CHECK NAME; CAN'T HAVE BEEN USED PREVIOUSLY AS A NONVAR;
        !          1001: C     CHECK TO SEE IF HAVE ARRAY ELEMENT/ARRAY DECLARATOR. IF SO
        !          1002: C     ARRY=.TRUE.
        !          1003: C
        !          1004:       ICNT = 0
        !          1005:       CALL NEXTOK(PSTMT, K2, I1)
        !          1006:       IF (I1.EQ.0) GO TO 10
        !          1007:       CALL ERROR1(20H ILLEGAL PUNCTUATION, 20)
        !          1008:       ERR = .TRUE.
        !          1009:       GO TO 280
        !          1010:    10 IF (STMT(K2).EQ.65) ARRY = .TRUE.
        !          1011:       KK = LOOKUP(K2,.FALSE.)
        !          1012:       IF (SYSERR) GO TO 70
        !          1013:       ARDECL = .TRUE.
        !          1014:       L = IGATT1(KK,8)
        !          1015:       IF (L.EQ.0 .OR. L.EQ.10) GO TO 30
        !          1016:       IF (ITYP.LT.6 .AND. L.EQ.13) GO TO 30
        !          1017:    20 CALL ERROR1(45H ILLEGAL USE OF PREVIOUSLY DEFINED IDENTIFIER, 45)
        !          1018:       ERR = .TRUE.
        !          1019:       GO TO 280
        !          1020: C
        !          1021: C     SET TYPE (EXPLICITLY FOR TYPE STMTS)
        !          1022: C
        !          1023:    30 I1 = IGATT1(KK,1)
        !          1024:       IF (ITYP.GE.6) GO TO 50
        !          1025: C
        !          1026: C     TYPE EXPLICITLY
        !          1027: C
        !          1028:       IF (I1.GE.8) GO TO 40
        !          1029:       CALL SATT1(KK, 1, ITYP+7)
        !          1030:       GO TO 60
        !          1031:    40 CALL ERROR1(34H IDENTIFIER TYPED EXPLICITLY TWICE, 34)
        !          1032:       GO TO 60
        !          1033: C
        !          1034: C     TYPE IMPLICITLY
        !          1035: C
        !          1036:    50 IF (I1.GT.0) GO TO 60
        !          1037:       I1 = 1
        !          1038:       IF (STMT(PSTMT).GE.38 .AND. STMT(PSTMT).LE.43) I1 = 2
        !          1039:       CALL SATT1(KK, 1, I1)
        !          1040: C
        !          1041: C     IF NOT ARRAY ELEMENT/ARAY DECLARATOR--RECOGNITION COMPLETE
        !          1042: C
        !          1043: C     CHECK NOT A DUMMY ARG IN COMMON, DATA, EQUIV STMT
        !          1044: C
        !          1045:    60 IF (ARRY) GO TO 80
        !          1046:       IF (IGATT1(KK,7).EQ.0) GO TO 65
        !          1047:       IF (ITYP.EQ.12)
        !          1048:      1 CALL ERROR1(46H WARNING - ILLEGAL USE OF ARRAY IN EQUIVALENCE
        !          1049:      2  , 46)
        !          1050:       IF (ITYP.EQ.13)
        !          1051:      1 CALL ERROR1(39H WARNING - ILLEGAL USE OF ARRAY IN DATA, 39)
        !          1052:    65 CONTINUE
        !          1053:       I1 = IGATT1(KK,4)
        !          1054:       IF (.NOT.(I1.EQ.1 .AND. (ITYP.EQ.8 .OR. ITYP.EQ.12 .OR.
        !          1055:      *    ITYP.EQ.13))) GO TO 70
        !          1056:       ERR = .TRUE.
        !          1057:       CALL ERROR1(32H ILLEGAL USAGE OF DUMMY ARGUMENT, 32)
        !          1058:    70 RETURN
        !          1059:    80 ISIZ = 1
        !          1060:       VAR = .FALSE.
        !          1061:       IF (L.EQ.0) CALL SATT1(KK, 8, 10)
        !          1062: C
        !          1063: C     LOOP TO FIND BOUNDS;  CHECK THAT VARIABLE BOUNDS ARE DUMMY ARGS
        !          1064: C     SET ADJUSTIBLE DIMENSION VARIABLE BIT; SET TYPE IMPLICITLY IF NOT
        !          1065: C     ALREADY SET
        !          1066: C     ACCUMULATE LENGTH IF IN DIMENSION, COMMON, OR TYPE STMT.
        !          1067: C     CHECK FOR REPEAT DIMENSIONING IN THOSE STMTS
        !          1068: C
        !          1069:       L = IGATT1(KK,7)
        !          1070:       IF (ITYP.EQ.13 .OR. ITYP.EQ.12) GO TO 90
        !          1071:       IF (L.EQ.0) GO TO 100
        !          1072:       CALL ERROR1(44H ILLEGAL USE OF PREVIOUSLY DIMENSIONED ARRAY, 44)
        !          1073:       ERR = .TRUE.
        !          1074:       GO TO 270
        !          1075:    90 IF (L.EQ.0) CALL ERROR1(
        !          1076:      *    44H ILLEGAL USE OF ARRAY NOT PREVIOUSLY DEFINED, 44)
        !          1077:   100 IF (K2+1.LT.NSTMT) GO TO 120
        !          1078:   110 CALL ERROR1(28H ILLEGAL ARRAY BOUNDS SYNTAX, 28)
        !          1079:       GO TO 270
        !          1080: C
        !          1081: C     CHECK FOR POSITIVE INTEGER BOUND
        !          1082: C
        !          1083:   120 PSTMT = K2 + 1
        !          1084:       IF (.NOT.TOKPNO(PSTMT,I1,LL)) GO TO 130
        !          1085:       IF (ITYP.EQ.7 .OR. ITYP.EQ.8 .OR. ITYP.LT.6) ISIZ = ISIZ*LL
        !          1086:       IF (ITYP.NE.12) GO TO 170
        !          1087:       IF (I1-K2.NE.2 .OR. STMT(PSTMT).NE.1) CORNER = .FALSE.
        !          1088:       GO TO 170
        !          1089: C
        !          1090: C     SEEK A VARIABLE BOUND
        !          1091: C
        !          1092:   130 CALL NEXTOK(PSTMT, I1, L)
        !          1093:       IF (L.NE.0) GO TO 110
        !          1094:       IF (ITYP.LT.6 .OR. ITYP.EQ.7) GO TO 140
        !          1095:       CALL ERROR1(32H VARIABLE DIMENSION ILLEGAL HERE, 32)
        !          1096:       ERR = .TRUE.
        !          1097:       GO TO 270
        !          1098:   140 VAR = .TRUE.
        !          1099:       L = LOOKUP(I1,.FALSE.)
        !          1100:       IF (SYSERR) GO TO 70
        !          1101:       N = IGATT1(L,8)
        !          1102:       IF (N.NE.0 .AND. N.NE.10) GO TO 20
        !          1103:       I2 = IGATT1(L,4)
        !          1104:       IF (I2.EQ.1) GO TO 150
        !          1105:       CALL ERROR1(42H ILLEGAL USAGE OF VARIABLE IN ARRAY BOUNDS, 42)
        !          1106:       ERR = .TRUE.
        !          1107:       GO TO 270
        !          1108:   150 I2 = IGATT1(KK,4)
        !          1109:       IF (I2.EQ.1) GO TO 160
        !          1110:       CALL ERROR1(50H VARIABLY DIMENSIONED ARRAY MUST BE DUMMY ARGUMENT,
        !          1111:      *    50)
        !          1112:       ERR = .TRUE.
        !          1113:       GO TO 270
        !          1114:   160 CALL SATT1(L, 6, 1)
        !          1115:       CALL SATT1(L, 8, 10)
        !          1116:       N = IGATT1(L,1)
        !          1117:       IF (N.GT.0) GO TO 170
        !          1118:       N = 1
        !          1119:       IF (STMT(K2+1).GE.38 .AND. STMT(K2+1).LE.43) N = 2
        !          1120:       CALL SATT1(L, 1, N)
        !          1121:       GO TO 170
        !          1122: C
        !          1123: C     FIND "," AND ACCUMULATE LENGTH
        !          1124: C
        !          1125:   170 ICNT = ICNT + 1
        !          1126:       IF (ICNT.LE.3) GO TO 180
        !          1127:       ISIZ = ISIZ/LL
        !          1128:       CALL ERROR1(30H WARNING - TOO MANY SUBSCRIPTS, 30)
        !          1129:       ICNT = 3
        !          1130:       FLUSH = .TRUE.
        !          1131:       GO TO 190
        !          1132:   180 K2 = I1
        !          1133:       IF (STMT(K2).EQ.68) GO TO 100
        !          1134: C
        !          1135: C     FIND ")" STORE LENGTH OR -1 INTO ARRAY SYMBOL TABLE ELEMENT
        !          1136: C
        !          1137:       IF (STMT(K2).NE.62) GO TO 110
        !          1138:   190 IF (ITYP.EQ.13 .OR. ITYP.EQ.12) GO TO 260
        !          1139:       CALL SATT1(KK, 7, ICNT)
        !          1140: C
        !          1141: C     STORE LENGTH OF ARRAY
        !          1142: C
        !          1143:       IF (VAR) GO TO 240
        !          1144:       IF (DSA(KK+2).EQ.0) GO TO 200
        !          1145:       N = DSA(KK+2)
        !          1146:       DSA(N) = ISIZ
        !          1147:       GO TO 220
        !          1148:   200 IF (NEXT+2.GE.BNEXT) GO TO 210
        !          1149:       DSA(KK+2) = NEXT
        !          1150:       DSA(NEXT) = ISIZ
        !          1151:       DSA(NEXT+1) = 0
        !          1152:       NEXT = NEXT + 2
        !          1153:       GO TO 220
        !          1154:   210 SYSERR = .TRUE.
        !          1155:       CALL ERROR1(33H IN ARDECL, TABLE OVERFLOW OF DSA,33)
        !          1156:   220 IF (FLUSH) GO TO 270
        !          1157:   230 K2 = K2 + 1
        !          1158:       GO TO 70
        !          1159: C
        !          1160: C     FIXUP FOR VARIABLY DIMENSIONED ARRAYS
        !          1161: C
        !          1162:   240 IF (DSA(KK+2).EQ.0) GO TO 250
        !          1163:       N = DSA(KK+2)
        !          1164:       DSA(N) = -1
        !          1165:       GO TO 220
        !          1166:   250 IF (NEXT+2.GE.BNEXT) GO TO 210
        !          1167:       DSA(KK+2) = NEXT
        !          1168:       DSA(NEXT) = -1
        !          1169:       DSA(NEXT+1) = 0
        !          1170:       NEXT = NEXT + 2
        !          1171:       GO TO 220
        !          1172: C
        !          1173: C     CHECK FORCORNER ELEMENT IN EQUIVALENCE STMT
        !          1174: C
        !          1175:   260 IF (ITYP.NE.12) GO TO 220
        !          1176:       IF (CORNER) KK = -KK
        !          1177:       GO TO 220
        !          1178: C
        !          1179: C     CODE TO FLUSH CONSTRUCT--TO NEXT ")"
        !          1180: C
        !          1181:   270 IF (K2.EQ.NSTMT) GO TO 70
        !          1182:       IF (STMT(K2).EQ.62) GO TO 230
        !          1183:       K2 = K2 + 1
        !          1184:       GO TO 270
        !          1185: C
        !          1186: C     CODE TO FLUSH TO NEXT CONSTRUCT ")",",", "/"
        !          1187: C
        !          1188:   280 K = 90
        !          1189:       IF (ITYP.EQ.8 .OR. ITYP.EQ.13) K = 67
        !          1190:   290 IF (K2.EQ.NSTMT) GO TO 70
        !          1191:       L = STMT(K2)
        !          1192:       IF (L.EQ.65) GO TO 270
        !          1193:       IF (L.EQ.68 .OR. L.EQ.K) GO TO 70
        !          1194:       K2 = K2 + 1
        !          1195:       GO TO 290
        !          1196:       END
        !          1197: C XXXXXASSASF.f
        !          1198:       SUBROUTINE ASSASF(IGP)
        !          1199:       INTEGER STMT, PSTMT, PDSA, EXPR, DSA, BNEXT, SYMHD
        !          1200:       LOGICAL ERR, SYSERR, ABORT, ASF, DOVAR
        !          1201:       COMMON /INPUT/ NSTMT, PSTMT, STMT(1327)
        !          1202:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !          1203:       COMMON /FACTS/ NAME, NOST, ITYP, IASF
        !          1204:       COMMON /CTABL/ LDSA, PDSA, DSA(5000)
        !          1205:       COMMON /TABL/ NEXT, LABHD, SYMHD, BNEXT
        !          1206: C
        !          1207: C     PROCESSES ARITHMETIC STMT FCNS AND ASSIGNMENT STMTS
        !          1208: C     FIRST LOOKS FOR ELEMENT ON RHS. AND TYPES IT
        !          1209: C
        !          1210:       CALL NEXTOK(PSTMT, K2, K)
        !          1211:       ASF = .FALSE.
        !          1212:       IF (K.NE.0) GO TO 180
        !          1213:       K = LOOKUP(K2,.FALSE.)
        !          1214:       IF (SYSERR) GO TO 190
        !          1215:       I1 = IGATT1(K,1)
        !          1216:       IF (I1.NE.0) GO TO 10
        !          1217:       I1 = 1
        !          1218:       IF (STMT(PSTMT).LE.43 .AND. STMT(PSTMT).GE.38) I1 = 2
        !          1219:       CALL SATT1(K, 1, I1)
        !          1220: C
        !          1221: C     LOOK FOR A "("  ; FIND ARRAY = CASE AND SEND IT TO ERROR
        !          1222: C     FIND ARRAY ELEMENT = , ID = CASES AND SEND THEM TO
        !          1223: C     ASSIGNMENT CODE
        !          1224: C
        !          1225:    10 I2 = IGATT1(K,7)
        !          1226:       I1 = MOD(I1,8)
        !          1227:       IF (STMT(K2).NE.65 .AND. I2.NE.0) GO TO 180
        !          1228:       IF (STMT(K2).NE.65 .OR. I2.NE.0) GO TO 240
        !          1229: C
        !          1230: C     ASF DEFN
        !          1231: C
        !          1232:       ITYP = 31
        !          1233:       ASF = .TRUE.
        !          1234:       IGP = 4
        !          1235:       NUM = 0
        !          1236:       IASF = K
        !          1237:    20 PSTMT = K2 + 1
        !          1238:       IF (PSTMT.GE.NSTMT) GO TO 180
        !          1239: C
        !          1240: C     ASF HAS LIST OF SCALAR VARIABLES; THEY ARE TYPED AND USAGE SET
        !          1241: C
        !          1242:       CALL NEXTOK(PSTMT, K2, I)
        !          1243:       IF (I.EQ.0) GO TO 30
        !          1244:       CALL ERROR1(17H ILLEGAL ASF DEFN, 17)
        !          1245:       GO TO 190
        !          1246:    30 I = LOOKUP(K2,.FALSE.)
        !          1247:       IF (SYSERR) GO TO 190
        !          1248:       NUM = NUM + 1
        !          1249:       I2 = IGATT1(I,1)
        !          1250:       IF (I2.GT.0) GO TO 40
        !          1251:       I2 = 1
        !          1252:       IF (STMT(PSTMT).LE.43 .AND. STMT(PSTMT).GE.38) I2 = 2
        !          1253:       CALL SATT1(I, 1, I2)
        !          1254:    40 I2 = IGATT1(I,8)
        !          1255:       IF (I2.EQ.0) GO TO 50
        !          1256:       IF (I2.EQ.1) GO TO 60
        !          1257:       CALL ERROR1(29H ILLEGAL VARIABLE IN ASF DEFN, 29)
        !          1258:       GO TO 210
        !          1259:    50 CALL SATT1(I, 8, 1)
        !          1260: C     STORE PTR TO CURRENT ASF-FCN ENTRY IN SYMBOL
        !          1261: C     TABLE IN 3D WORD OF ASF-DUMMY ENTRY IN SYM TABLE
        !          1262:    60 DSA(I+2) = K
        !          1263: C
        !          1264: C     LIST OF INDICES OF ASF ARGS IS HUNG OFF OF ASF DEF IN DSA
        !          1265: C
        !          1266:       IF (DSA(K+2).EQ.0) GO TO 120
        !          1267:       L = DSA(K+2)
        !          1268:    70 IF (DSA(L+1).EQ.0) GO TO 80
        !          1269:       L = DSA(L+1)
        !          1270:       GO TO 70
        !          1271:    80 IF (NEXT+2.LT.BNEXT) GO TO 100
        !          1272:    90 CALL ERROR1(33H IN ASSASF, TABLE OVERFLOW OF DSA, 33)
        !          1273:       SYSERR = .TRUE.
        !          1274:       GO TO 190
        !          1275:   100 DSA(L+1) = NEXT
        !          1276:   110 DSA(NEXT) = I
        !          1277:       DSA(NEXT+1) = 0
        !          1278:       NEXT = NEXT + 2
        !          1279:       GO TO 130
        !          1280:   120 IF (NEXT+2.GE.BNEXT) GO TO 90
        !          1281:       DSA(K+2) = NEXT
        !          1282:       GO TO 110
        !          1283:   130 IF (STMT(K2).NE.62) GO TO 170
        !          1284: C
        !          1285: C     CHECK FOR TWO ELEMENTS ONLIST BEING THE SAME ID
        !          1286: C
        !          1287:       I2 = DSA(K+2)
        !          1288:       DO 160 I=1,NUM
        !          1289:         L = DSA(K+2)
        !          1290:         DO 150 J=1,NUM
        !          1291:           IF (I.EQ.J) GO TO 140
        !          1292:           IF (DSA(L).NE.DSA(I2)) GO TO 140
        !          1293:           CALL ERROR1(18H ILLEGAL ASF-DUMMY, 18)
        !          1294:           CALL SATT1(K, 8, 0)
        !          1295:           GO TO 190
        !          1296:   140     L = DSA(L+1)
        !          1297:   150   CONTINUE
        !          1298:         I2 = DSA(I2+1)
        !          1299:   160 CONTINUE
        !          1300:       GO TO 200
        !          1301:   170 IF (STMT(K2).EQ.68) GO TO 20
        !          1302:   180 CALL ERROR1(15H ILLEGAL SYNTAX, 15)
        !          1303:   190 RETURN
        !          1304: C
        !          1305: C     = AND EXPR CHECK
        !          1306: C
        !          1307:   200 PSTMT = K2 + 1
        !          1308:   210 IF (PSTMT.GE.NSTMT) GO TO 180
        !          1309:       IF (STMT(PSTMT).NE.63) GO TO 180
        !          1310:       PSTMT = PSTMT + 1
        !          1311:       IF (PSTMT.GE.NSTMT) GO TO 180
        !          1312:       L = EXPR(I)
        !          1313:       IF (SYSERR) GO TO 190
        !          1314: C
        !          1315: C     CHECK THAT ASF WAS NOT DEFINED RECURSIVELY, SET USAGE
        !          1316: C
        !          1317:       IF (.NOT.ASF) GO TO 230
        !          1318:       I2 = IGATT1(K,8)
        !          1319:       IF (I2.EQ.0) GO TO 220
        !          1320:       CALL ERROR1(17H ILLEGAL ASF NAME, 17)
        !          1321:       GO TO 190
        !          1322:   220 CALL SATT1(K, 8, 2)
        !          1323:   230 IF (L/8.EQ.1) GO TO 280
        !          1324:       L = MOD(L,8)
        !          1325: C
        !          1326: C     COMPARE TYPES OF RHS AND LHS
        !          1327: C
        !          1328:       IF ((L.EQ.3 .AND. I1.EQ.3) .OR. (L.EQ.4 .AND. I1.EQ.4) .OR.
        !          1329:      *    (L.LE.2 .AND. I1.LE.2) .OR. (L.EQ.5 .AND. I1.EQ.5)) GO TO 190
        !          1330:       IF (.NOT.(L.EQ.2 .AND. I1.EQ.5 .OR. L.EQ.5 .AND. I1.EQ.2)) CALL
        !          1331:      *    ERROR1(38H INCOMPATIBLE DATA TYPES IN ASSIGNMENT, 38)
        !          1332:       GO TO 190
        !          1333: C
        !          1334: C     PROCESSING  FOR ASSIGNMENT STMT
        !          1335: C
        !          1336:   240 I = IGATT1(K,8)
        !          1337:       IF (I.NE.0) GO TO 250
        !          1338:       I = 10
        !          1339:       CALL SATT1(K, 8, 10)
        !          1340:   250 IF (I.EQ.10 .OR. (I.EQ.4 .AND. K.EQ.NAME)) GO TO 260
        !          1341:       CALL ERROR1(31H CANNOT ASSIGN VALUE TO THIS ID, 31)
        !          1342:       GO TO 190
        !          1343:   260 CALL SATT1(K, 5, 1)
        !          1344:       IF (STMT(K2).EQ.65) GO TO 270
        !          1345:       IF (DOVAR(K)) CALL ERROR1(
        !          1346:      *    57H ILLEGAL TO CHANGE VALUE OF CONTROL VARIABLE OR DO LIMITS,
        !          1347:      *    57)
        !          1348:       PSTMT = K2
        !          1349:       GO TO 210
        !          1350:   270 PSTMT = K2 + 1
        !          1351:       IF (PSTMT.GE.NSTMT) GO TO 180
        !          1352:       CALL SUBS(I, I2)
        !          1353: C
        !          1354: C     PEEL SUBSCRIPTS OFF
        !          1355: C
        !          1356:       IF (SYSERR .OR. ERR) GO TO 190
        !          1357:       PSTMT = I
        !          1358:       GO TO 210
        !          1359:   280 CALL ERROR1(30H ILLEGAL USE OF ARRAY VARIABLE, 30)
        !          1360:       GO TO 190
        !          1361:       END
        !          1362: C XXXXXASSIGN.f
        !          1363:       SUBROUTINE ASSIGN
        !          1364:       INTEGER PSTMT, STMT
        !          1365:       LOGICAL TOKLAB, ERR, SYSERR, ABORT
        !          1366:       COMMON /INPUT/ NSTMT, PSTMT, STMT(1327)
        !          1367:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !          1368: C
        !          1369: C      PROCESSES AN ASSIGN STMT: ASSIGN <LABEL> TO <VAR>
        !          1370: C
        !          1371:       IF (PSTMT.GE.NSTMT) GO TO 10
        !          1372:       IF (.NOT.TOKLAB(1,K2,KK,.FALSE.)) GO TO 80
        !          1373:       IF (SYSERR) GO TO 20
        !          1374:       PSTMT = K2
        !          1375:       IF (PSTMT+2.GE.NSTMT) GO TO 10
        !          1376:       IF (STMT(PSTMT).EQ.49 .AND. STMT(PSTMT+1).EQ.44) GO TO 30
        !          1377:    10 CALL ERROR1(15H ILLEGAL SYNTAX, 15)
        !          1378:    20 RETURN
        !          1379:    30 PSTMT = PSTMT + 2
        !          1380:       IF (PSTMT.GE.NSTMT) GO TO 10
        !          1381:       CALL NEXTOK(PSTMT, K2, K)
        !          1382:       IF (K.NE.0) GO TO 10
        !          1383:       K = LOOKUP(K2,.FALSE.)
        !          1384:       IF (SYSERR) GO TO 20
        !          1385:       I1 = IGATT1(K,1)
        !          1386:       I2 = IGATT1(K,7)
        !          1387:       I3 = IGATT1(K,8)
        !          1388:       IF (I3.EQ.0) GO TO 40
        !          1389:       IF (I3.NE.8) GO TO 90
        !          1390:       GO TO 50
        !          1391:    40 CALL SATT1(K, 8, 8)
        !          1392:    50 IF (I1.NE.0) GO TO 60
        !          1393:       I1 = 1
        !          1394:       IF (STMT(PSTMT).GE.38 .AND. STMT(PSTMT).LE.43) I1 = 2
        !          1395:       CALL SATT1(K, 1, I1)
        !          1396:    60 IF (MOD(I1,8).EQ.2 .AND. I2.EQ.0) GO TO 70
        !          1397:       CALL ERROR1(35H ASSIGN VARIABLE NOT INTEGER SCALAR, 35)
        !          1398:       GO TO 20
        !          1399:    70 IF (K2.NE.NSTMT) GO TO 10
        !          1400:       GO TO 20
        !          1401:    80 CALL ERROR1(14H MISSING LABEL, 14)
        !          1402:       GO TO 20
        !          1403:    90 CALL ERROR1(23H ILLEGAL VARIABLE USAGE, 23)
        !          1404:       GO TO 20
        !          1405:       END
        !          1406: C XXXXXCOMMON.f
        !          1407:       SUBROUTINE COMMON
        !          1408:       INTEGER PSTMT, PDSA, STMT, DSA, BNEXT, SYMHD, S(4)
        !          1409:       LOGICAL ERR, SYSERR, ABORT, ARDECL
        !          1410:       COMMON /INPUT/ NSTMT, PSTMT, STMT(1327)
        !          1411:       COMMON /CTABL/ LDSA, PDSA, DSA(5000)
        !          1412:       COMMON /TABL/ NEXT, LABHD, SYMHD, BNEXT
        !          1413:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !          1414:       COMMON /FACTS/ NAME, NOST, ITYP, IASF
        !          1415:       DATA S(1) /66/, S(2) /32/, S(3) /44/, S(4) /42/
        !          1416: C
        !          1417: C     PROCESSES A COMMON STMT
        !          1418: C     FIRST, PEEL OFF NAME OF COMMON AND SET SYMBOL TABLE ENTRY USAGE
        !          1419: C     CHECK NAME HAS NOT APPEARED BEFORE IN PGM UNIT
        !          1420: C
        !          1421:       IF (STMT(PSTMT).EQ.67) GO TO 30
        !          1422: C
        !          1423: C     SET SYMBOL TABLE ENTRY FOR BLANK COMMON
        !          1424: C
        !          1425:    10 I1 = IGATT1(NAME,8)
        !          1426:       IF (I1.EQ.11) GO TO 170
        !          1427:       IF (PSTMT.GE.NSTMT) GO TO 200
        !          1428:       L = PSTMT
        !          1429:       DO 20 I1=1,4
        !          1430:         STMT(I1) = S(I1)
        !          1431:    20 CONTINUE
        !          1432:       PSTMT = 1
        !          1433:       KK = LOOKUP(5,.FALSE.)
        !          1434:       IF (SYSERR) GO TO 190
        !          1435:       PSTMT = L
        !          1436:       CALL SATT1(KK, 8, 7)
        !          1437:       GO TO 60
        !          1438:    30 PSTMT = PSTMT + 1
        !          1439:       IF (STMT(PSTMT).NE.67) GO TO 40
        !          1440:       PSTMT = PSTMT + 1
        !          1441:       GO TO 10
        !          1442:    40 IF (PSTMT.GE.NSTMT) GO TO 200
        !          1443:       CALL NEXTOK(PSTMT, K2, L)
        !          1444:       IF (L.NE.0) GO TO 200
        !          1445:       KK = LOOKUP(K2,.FALSE.)
        !          1446:       IF (SYSERR) GO TO 190
        !          1447:       I1 = IGATT1(KK,1)
        !          1448:       N = IGATT1(KK,8)
        !          1449:       IF (I1.EQ.0 .AND. (N.EQ.0 .OR. N.EQ.7)) GO TO 50
        !          1450:       CALL ERROR1(20H ILLEGAL COMMON NAME, 20)
        !          1451:       GO TO 190
        !          1452:    50 CALL SATT1(KK, 8, 7)
        !          1453:       I1 = IGATT1(NAME,8)
        !          1454:       IF (I1.EQ.11) CALL SATT1(KK, 2, 1)
        !          1455:       PSTMT = K2 + 1
        !          1456:       IF (PSTMT.GE.NSTMT .OR. STMT(K2).NE.67) GO TO 200
        !          1457: C
        !          1458: C     ELEMENTS IN COMMON: ARRAYS,VARIABLES,DECLARATIONS OF ARRAYS( NOT
        !          1459: C     VARIABLY DIMENSIONED). IMPLICITLY TYPE THEM
        !          1460: C
        !          1461:    60 IF (ARDECL(K2,N)) GO TO 70
        !          1462:       CALL ERROR1(47H COMMON ELEMENT NOT VARIABLE, ARRAY, DECLARATOR,
        !          1463:      *    47)
        !          1464:       GO TO 190
        !          1465:    70 IF (SYSERR .OR. ERR) GO TO 190
        !          1466: C
        !          1467: C     SET SYMBOL TABLE ENTRY OF ELEMENT TO SHOW ITS IN COMMON
        !          1468: C     PUT POINTER TO COMMON NAME INTO 3D WORD OF ENTRY (OR OFF 3D
        !          1469: C     WORD--FOR ARRAYS
        !          1470: C
        !          1471:       I1 = IGATT1(N,2)
        !          1472:       IF (I1.NE.0) GO TO 160
        !          1473:       CALL SATT1(N, 2, 1)
        !          1474:       I1 = IGATT1(N,7)
        !          1475:       IF (I1.EQ.0) GO TO 80
        !          1476:       L = DSA(N+2)
        !          1477:       DSA(L+1) = KK
        !          1478:       GO TO 90
        !          1479:    80 CALL SATT1(N, 8, 10)
        !          1480:       IF (NEXT+2.GE.BNEXT) GO TO 180
        !          1481:       DSA(N+2) = NEXT
        !          1482:       DSA(NEXT) = 0
        !          1483:       DSA(NEXT+1) = KK
        !          1484:       NEXT = NEXT + 2
        !          1485: C
        !          1486: C     SETUP CHAIN OF ELEMENTS OF COMMON HANGING OFF SYMBOL TABLE
        !          1487: C     ENTRY OF COMMON NAME
        !          1488: C
        !          1489:    90 IF (DSA(KK+2).EQ.0) GO TO 130
        !          1490:       L = DSA(KK+2)
        !          1491:   100 IF (DSA(L+1).EQ.0) GO TO 110
        !          1492:       L = DSA(L+1)
        !          1493:       GO TO 100
        !          1494:   110 IF (NEXT+2.GE.BNEXT) GO TO 180
        !          1495:       DSA(L+1) = NEXT
        !          1496:   120 DSA(NEXT) = N
        !          1497:       DSA(NEXT+1) = 0
        !          1498:       NEXT = NEXT + 2
        !          1499:       GO TO 140
        !          1500:   130 IF (NEXT+2.GE.BNEXT) GO TO 180
        !          1501:       DSA(KK+2) = NEXT
        !          1502:       GO TO 120
        !          1503: C
        !          1504: C     CHECK FOR END OF STMT
        !          1505: C
        !          1506:   140 IF (K2.EQ.NSTMT) GO TO 190
        !          1507:       IF (STMT(K2).NE.68) GO TO 150
        !          1508:       PSTMT = K2 + 1
        !          1509:       GO TO 60
        !          1510:   150 IF (STMT(K2).NE.67) GO TO 200
        !          1511:       PSTMT = K2
        !          1512:       GO TO 30
        !          1513:   160 CALL ERROR1(23H ELEMENT IN TWO COMMONS, 23)
        !          1514:       GO TO 140
        !          1515:   170 CALL ERROR1(
        !          1516:      *    51H BLANK COMMON NOT ALLOWED IN BLOCK DATA SUBPROGRAMS, 51)
        !          1517:       GO TO 190
        !          1518:   180 SYSERR = .TRUE.
        !          1519:       CALL ERROR1(33H IN COMMON, TABLE OVERFLOW OF DSA,33)
        !          1520:   190 RETURN
        !          1521:   200 CALL ERROR1(15H ILLEGAL SYNTAX, 15)
        !          1522:       GO TO 190
        !          1523:       END
        !          1524: C XXXXXDIMENS.f
        !          1525:       SUBROUTINE DIMENS
        !          1526: C
        !          1527: C     PROCESSES DIMENSION STMT, RECORDING OF ARRAY BOUNDS, LENGTH
        !          1528: C     ETC. DONE IN ORDER
        !          1529: C
        !          1530:       INTEGER STMT, PSTMT
        !          1531:       LOGICAL ERR, SYSERR, ABORT, ARDECL
        !          1532:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !          1533:       COMMON /INPUT/ NSTMT, PSTMT, STMT(1327)
        !          1534:    10 IF (ARDECL(K2,K3)) GO TO 20
        !          1535:       CALL ERROR1(35H ILLEGAL SYNTAX OF ARRAY DECLARATOR, 35)
        !          1536:       GO TO 40
        !          1537:    20 IF (SYSERR) RETURN
        !          1538:       IF (K2.EQ.NSTMT) GO TO 40
        !          1539:       IF (STMT(K2).EQ.68 .AND. K2+1.NE.NSTMT) GO TO 30
        !          1540:       CALL ERROR1(20H ILLEGAL PUNCTUATION, 20)
        !          1541:       GO TO 40
        !          1542:    30 PSTMT = K2 + 1
        !          1543:       GO TO 10
        !          1544:    40 RETURN
        !          1545:       END
        !          1546: C XXXXXDOCHK.f
        !          1547:       SUBROUTINE DOCHK(KK)
        !          1548:       INTEGER DOLIST, DOPT, OUTUT, SYMLEN, OUTUT2, DSA, PDSA, OUTUT3,
        !          1549:      *    STACK, OUTUT4
        !          1550:       COMMON /DOS/ DOPT, LDO, DOLIST(192)
        !          1551:       COMMON /CEXPRS/ LSTACK, STACK(620)
        !          1552:       COMMON /PARAMS/ INUT, OUTUT, NOCHAR, SYMLEN, OUTUT2, OUTUT3,
        !          1553:      *    OUTUT4
        !          1554:       COMMON /FACTS/ NAME, NOST, ITYP, IASF
        !          1555:       COMMON /CTABL/ LDSA, PDSA, DSA(5000)
        !          1556: C
        !          1557: C     KK IS SYMBOL TABLE ENTRY OF LABEL
        !          1558: C     ROUTINE CHECKS ALL LABELS FOR BEING END OF DO-STMTS; IF LABEL IS
        !          1559: C     END-OF-DO, ALL LABELS WITHIN THAT DO, HAVE END-OF-DEFN STMT NO
        !          1560: C     RECORDED IN THEM; DOPT IS DECREMENTED, A MOCK END-OF-DO IS
        !          1561: C     CREATED BY THE END STMT IN THE PGM UNIT; DOLIST MUST BE EMPTY
        !          1562: C     AFTER THIS PROCESSING OF AN END,
        !          1563: C     PERFORMS FIXUP ON SCOPE OF LABELS ENDING MULTIPLE NESTED DO'S
        !          1564: C
        !          1565:       IF (ITYP.EQ.28) GO TO 50
        !          1566:       IF (DOLIST(DOPT+1).NE.KK) GO TO 40
        !          1567:    10 CALL FIXLAB(.FALSE.)
        !          1568:       DOPT = DOPT - 6
        !          1569:       IF (ITYP.EQ.15 .OR. ITYP.EQ.16 .OR. (ITYP.GE.19 .AND.
        !          1570:      *    ITYP.LE.22)) CALL ERROR1(26H ILLEGAL ENDING STMT ON DO, 26)
        !          1571:       IF (DOLIST(DOPT+1).NE.KK) GO TO 40
        !          1572: C
        !          1573: C     GET REFERENCE TO NESTED DO ENDING AND MAKE REFERENCE
        !          1574: C     TO DO STATEMENT  A NEGATIVE  NUMBER
        !          1575: C     SO IT WON'T BE AN ILLEGAL BRANCH
        !          1576: C
        !          1577:       K = DSA(KK+1)
        !          1578:       L = DOLIST(DOPT)
        !          1579:    20 IF (DSA(K).EQ.L) GO TO 30
        !          1580:       K = DSA(K+1)
        !          1581:       GO TO 20
        !          1582:    30 DSA(K) = -DSA(K)
        !          1583:       GO TO 10
        !          1584:    40 RETURN
        !          1585:    50 CALL FIXLAB(.TRUE.)
        !          1586:       IF (DOPT-6.LE.0) GO TO 40
        !          1587:       LL = 1
        !          1588:       L = DOPT/6
        !          1589:       DO 60 I=1,L
        !          1590:         J = DOPT + 7 - 6*I
        !          1591:         K = DOLIST(J)
        !          1592:         CALL S5UNPK(DSA(K+4), STACK(LL), 6)
        !          1593:         LL = LL + 6
        !          1594:    60 CONTINUE
        !          1595:       LL = LL - 1
        !          1596:       IF (LL.LE.55) GO TO 70
        !          1597: 99999 FORMAT (/25H MISSING DO ENDING LABEL , 55A1)
        !          1598:       WRITE (OUTUT,99999) (STACK(L),L=1,55)
        !          1599:       WRITE (OUTUT,99998) (STACK(L),L=56,LL)
        !          1600:       GO TO 40
        !          1601: 99998 FORMAT (25X, 55A1)
        !          1602:    70 WRITE (OUTUT,99999) (STACK(L),L=1,LL)
        !          1603:       GO TO 40
        !          1604:       END
        !          1605: C XXXXXDOSPEC.f
        !          1606:       SUBROUTINE DOSPEC(KK, K2, LOG)
        !          1607:       INTEGER STMT, PSTMT, DOPT, DOLIST, LOOKUP
        !          1608:       LOGICAL SYSERR, ABORT, DOVAR, ERR, TOKPNO, LOG
        !          1609:       COMMON /INPUT/ NSTMT, PSTMT, STMT(1327)
        !          1610:       COMMON /LISTDO/ LPT, LEN, LS(64)
        !          1611:       COMMON /DOS/ DOPT, LDO, DOLIST(192)
        !          1612:       COMMON /FACTS/ NAME, NOST, ITYP, IASF
        !          1613:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !          1614: C
        !          1615: C     ROUTINE RECOGNIZES DO-SPECIFICATION CONSTRUCT
        !          1616: C     DOLIST ARRAY IS DO STACK USED TO CHECK NESTING; 6 WORD ENTRY
        !          1617: C     WORD 1-CURRENT STMT NO
        !          1618: C     WORD 2-INDEX OF LABEL IN DSA
        !          1619: C     WORD 3-INDEX OF DO CONTROL VARIABLE IN DSA
        !          1620: C     WORD 4-6,-INDICES OF LIMITS IN DSA OR 0 FOR CONSTANT LIMITS
        !          1621: C     LS ARRAY IS IMPLICIT  DO STACK- IN EACH ENTRY IS SAME DATA
        !          1622: C     AS WORDS 3-6 OF DOLIST ENTRIES.
        !          1623: C
        !          1624:       IF (.NOT.LOG) GO TO 10
        !          1625:       IF (LPT.LE.1) GO TO 20
        !          1626:       LPT = LPT - 4
        !          1627:       LS(LPT) = 0
        !          1628:       LS(LPT+1) = 0
        !          1629:       LS(LPT+2) = 0
        !          1630:       LS(LPT+3) = 0
        !          1631:       GO TO 40
        !          1632:    10 IF (DOPT.LE.LDO-11) GO TO 30
        !          1633:    20 CALL ERROR1(20H DO NESTING TOO DEEP, 20)
        !          1634:       GO TO 190
        !          1635:    30 DOPT = DOPT + 6
        !          1636:       DOLIST(DOPT) = NOST
        !          1637:       DOLIST(DOPT+1) = KK
        !          1638:       DOLIST(DOPT+2) = 0
        !          1639:       DOLIST(DOPT+3) = 0
        !          1640:       DOLIST(DOPT+4) = 0
        !          1641:       DOLIST(DOPT+5) = 0
        !          1642: C
        !          1643: C     DO CONTROL VARIABLE MUST BE INTEGER, SCALAR VARIABLE
        !          1644: C
        !          1645:    40 IF (PSTMT.LT.NSTMT) GO TO 60
        !          1646:    50 CALL ERROR1(35H ILLEGAL SYNTAX IN DO SPECIFICATION, 35)
        !          1647:       GO TO 190
        !          1648:    60 CALL NEXTOK(PSTMT, K2, K)
        !          1649:       IF (K.NE.0) GO TO 50
        !          1650:       K = LOOKUP(K2,.FALSE.)
        !          1651:       IF (SYSERR) GO TO 180
        !          1652:       I1 = IGATT1(K,1)
        !          1653:       IF (I1.GT.0) GO TO 70
        !          1654:       I1 = 1
        !          1655:       IF (STMT(PSTMT).GE.38 .AND. STMT(PSTMT).LE.43) I1 = 2
        !          1656:       CALL SATT1(K, 1, I1)
        !          1657:    70 I2 = IGATT1(K,7)
        !          1658:       I3 = IGATT1(K,8)
        !          1659:       IF (MOD(I1,8).NE.2 .OR. I2.NE.0) GO TO 220
        !          1660:       IF (I3.NE.0) GO TO 80
        !          1661:       I3 = 10
        !          1662:       CALL SATT1(K, 8, 10)
        !          1663:    80 IF (I3.NE.10) GO TO 220
        !          1664:       CALL SATT1(K, 5, 1)
        !          1665:       IF (DOVAR(K)) CALL ERROR1(
        !          1666:      *    57H ILLEGAL TO CHANGE VALUE OF CONTROL VARIABLE OR DO LIMITS,
        !          1667:      *    57)
        !          1668:       I3 = IGATT1(K,2)
        !          1669:       IF (I3.EQ.1) CALL ERROR1(37H WARNING - CONTROL VARIABLE IN COMMON,
        !          1670:      *    37)
        !          1671:       IF (K.EQ.NAME) CALL ERROR1(
        !          1672:      *    49H WARNING - FUNCTION NAME USED AS CONTROL VARIABLE, 49)
        !          1673:       IF (.NOT.LOG) GO TO 90
        !          1674:       LS(LPT) = K
        !          1675:       GO TO 100
        !          1676:    90 DOLIST(DOPT+2) = K
        !          1677: C
        !          1678: C     FIND AN =
        !          1679: C
        !          1680:   100 IF (STMT(K2).NE.63) GO TO 50
        !          1681: C
        !          1682: C     DO-LIMITS  LIMS COUNTS NUMBER OF  LIMITS; THESE MUST BE INTEGER
        !          1683: C     SCALAR VARIABLES OR POSITIVE INTEGER CONSTANTS
        !          1684: C
        !          1685:       LIMS = 0
        !          1686:   110 PSTMT = K2 + 1
        !          1687:       IF (PSTMT.GE.NSTMT) GO TO 50
        !          1688:       IF (.NOT.TOKPNO(PSTMT,K2,K)) GO TO 120
        !          1689:       LIMS = LIMS + 1
        !          1690:       GO TO 170
        !          1691:   120 CALL NEXTOK(PSTMT, K2, K)
        !          1692:       IF (K.NE.0) GO TO 210
        !          1693:       K = LOOKUP(K2,.FALSE.)
        !          1694:       IF (SYSERR) GO TO 180
        !          1695:       LIMS = LIMS + 1
        !          1696:       IF (.NOT.LOG) GO TO 130
        !          1697:       IF (LS(LPT).EQ.K) CALL ERROR1(17H ILLEGAL DO LIMIT, 17)
        !          1698:       I1 = LPT + LIMS
        !          1699:       LS(I1) = K
        !          1700:       GO TO 140
        !          1701:   130 IF (DOLIST(DOPT+2).EQ.K) CALL ERROR1(17H ILLEGAL DO LIMIT, 17)
        !          1702:       I1 = DOPT + 2 + LIMS
        !          1703:       DOLIST(I1) = K
        !          1704:   140 I1 = IGATT1(K,1)
        !          1705:       I2 = IGATT1(K,7)
        !          1706:       I3 = IGATT1(K,8)
        !          1707:       IF (I3.NE.0) GO TO 150
        !          1708:       CALL SATT1(K, 8, 10)
        !          1709:       I3 = 10
        !          1710:   150 IF (I3.NE.10) GO TO 50
        !          1711:       IF (I1.GT.0) GO TO 160
        !          1712:       I1 = 1
        !          1713:       IF (STMT(PSTMT).GE.38 .AND. STMT(PSTMT).LE.43) I1 = 2
        !          1714:       CALL SATT1(K, 1, I1)
        !          1715:   160 IF (MOD(I1,8).NE.2 .OR. I2.NE.0) GO TO 210
        !          1716: C
        !          1717: C     CHECK FOR END OF STMT
        !          1718: C
        !          1719:   170 IF (K2.LT.NSTMT .AND. STMT(K2).NE.62) GO TO 200
        !          1720: C
        !          1721: C     IF THERE ARE NO MORE CHARS, WE ARE DONE WITH THIS STMT;
        !          1722: C     THERE MUST BE AT LEAST 2 AND NO MORE THAN 3 LIMITS IN DO
        !          1723: C
        !          1724:       IF (LIMS.LE.1) GO TO 230
        !          1725:   180 RETURN
        !          1726:   190 ERR = .TRUE.
        !          1727:       GO TO 180
        !          1728: C
        !          1729: C     CHECK FOR A "," MUST FIND HERE
        !          1730: C
        !          1731:   200 IF (STMT(K2).NE.68) GO TO 50
        !          1732:       IF (LIMS.GE.3) GO TO 230
        !          1733:       GO TO 110
        !          1734:   210 CALL ERROR1(47H DO LIMIT NOT INTEGER SCALAR VAR OR POS INTEGER,
        !          1735:      *    47)
        !          1736:       GO TO 190
        !          1737:   220 CALL ERROR1(36H CONTROL VARIABLE NOT INTEGER SCALAR, 36)
        !          1738:       GO TO 190
        !          1739:   230 CALL ERROR1(18H ILLEGAL DO LIMITS, 18)
        !          1740:       GO TO 190
        !          1741:       END
        !          1742: C XXXXXDOVAR.f
        !          1743:       LOGICAL FUNCTION DOVAR(INDX)
        !          1744:       INTEGER DOPT, DOLIST
        !          1745:       COMMON /DOS/ DOPT, LDO, DOLIST(192)
        !          1746: C
        !          1747: C     CHECKS VAR AT DSA(INDX) NOT IN DOSTACK ALREADY
        !          1748: C     AS A LIMIT OR INDEX OF PREVIOUSLY DEFINED AND CURRENTLY
        !          1749: C     DEFINED DO
        !          1750: C
        !          1751:       DOVAR = .FALSE.
        !          1752:       IF (DOPT) 40, 40, 10
        !          1753:    10 DO 30 I=1,DOPT,6
        !          1754:         L1 = I + 2
        !          1755:         L2 = L1 + 3
        !          1756:         DO 20 K=L1,L2
        !          1757:           IF (DOLIST(K).EQ.INDX) GO TO 50
        !          1758:    20   CONTINUE
        !          1759:    30 CONTINUE
        !          1760:    40 RETURN
        !          1761:    50 DOVAR = .TRUE.
        !          1762:       GO TO 40
        !          1763:       END
        !          1764: C XXXXXEQUIV.f
        !          1765:       SUBROUTINE EQUIV
        !          1766:       INTEGER STMT, PSTMT, PDSA, DSA, TYPE, STACK, BNEXT, SYMHD
        !          1767:       LOGICAL ARDECL, CORNR, SAME, ERR, SYSERR, ABORT
        !          1768:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !          1769:       COMMON /INPUT/ NSTMT, PSTMT, STMT(1327)
        !          1770:       COMMON /TABL/ NEXT, LABHD, SYMHD, BNEXT
        !          1771:       COMMON /CTABL/ LDSA, PDSA, DSA(5000)
        !          1772:       COMMON /CEXPRS/ LSTACK, STACK(620)
        !          1773: C
        !          1774: C     PROCESSES AN EQUIVALENCE STMT-FINDS DECLARATORS SEPARATED BY ,
        !          1775: C     IF DIFFERENT TYPE VARIABLES INVOLVED, CHECKS FOR USE OF CORNER
        !          1776: C     ELEMENTS;  ARDECL CALLED TO PROCESS DECLARATORS
        !          1777: C     SAME IS .TRUE. IF ALL ITEMS EQUIVALENCED IN ONE (--) ARE SAME TYPE
        !          1778: C     CORNR IS .TRUE. IF ALL ITEMS EQUIV. IN ONE (--) ARE CORNER ELES.
        !          1779: C     E.G. A(1,1,1)
        !          1780: C
        !          1781:    10 IF (STMT(PSTMT).EQ.65) GO TO 30
        !          1782:    20 CALL ERROR1(20H ILLEGAL PUNCTUATION, 20)
        !          1783:       GO TO 150
        !          1784:    30 TYPE = -1
        !          1785:       IPT = 1
        !          1786:       CORNR = .TRUE.
        !          1787:       SAME = .TRUE.
        !          1788:    40 PSTMT = PSTMT + 1
        !          1789:       IF (PSTMT.GE.NSTMT) GO TO 20
        !          1790:       IF (.NOT.ARDECL(K2,KK)) GO TO 150
        !          1791:       IF (SYSERR .OR. ERR) GO TO 150
        !          1792: C
        !          1793: C     KK>= 0 FOR AN ARRAY ELEMENT MEANS IT WASN'T A CORNER ELEMENT
        !          1794: C
        !          1795:       L = IGATT1(IABS(KK),7)
        !          1796:       IF (KK.GT.0 .AND. L.GT.0) CORNR = .FALSE.
        !          1797:       KK = IABS(KK)
        !          1798: C
        !          1799: C     SET USAGE, IF UNSET
        !          1800: C
        !          1801:       L = IGATT1(KK,8)
        !          1802:       IF (L.EQ.0) CALL SATT1(KK, 8, 10)
        !          1803: C
        !          1804: C     STORE VARIABLE IN STACK, CHECK VARIABLE TYPE
        !          1805: C
        !          1806:       STACK(IPT) = KK
        !          1807:       IPT = IPT + 1
        !          1808:       CALL SATT1(KK, 3, 1)
        !          1809:       I = IGATT1(KK,1)
        !          1810:       I = MOD(I,8)
        !          1811:       IF (-1.EQ.TYPE) TYPE = I
        !          1812:       IF (TYPE.EQ.I) GO TO 50
        !          1813:       SAME = .FALSE.
        !          1814: C
        !          1815: C     END OF DELARATOR CHECKS; NEED , OR )
        !          1816: C
        !          1817:    50 IF (STMT(K2).NE.68) GO TO 60
        !          1818:       PSTMT = K2
        !          1819:       GO TO 40
        !          1820:    60 IF (STMT(K2).NE.62) GO TO 20
        !          1821: C
        !          1822: C     CHECK FOR CORNER ELEMENTS IF ARRAY ELEMENTS WERE USED
        !          1823: C
        !          1824:       IF (.NOT.SAME .AND. .NOT.CORNR) CALL ERROR1(
        !          1825:      *    53H WARNING - USE CORNER ELEMENTS WHEN MIXING DATA TYPES, 53)
        !          1826: C
        !          1827: C     CHECK FOR ELEMENTS IN COMMON; MAKE SURE ONLY ONE COMMON
        !          1828: C     REGION APPEARS
        !          1829: C
        !          1830:       KK = IPT - 1
        !          1831: C
        !          1832: C     PUT COMMON REGIONS OF EACH DECLARATOR (IF ANY) ON STACK
        !          1833: C
        !          1834:       DO 80 I=1,KK
        !          1835:         L = IGATT1(STACK(I),2)
        !          1836:         IF (L) 80, 80, 70
        !          1837:  70   IF(IPT+1.GT.LSTACK) GOTO 160
        !          1838:         L = STACK(I)
        !          1839:         L = DSA(L+2)
        !          1840:         STACK(IPT) = DSA(L+1)
        !          1841:         IPT = IPT + 1
        !          1842:    80 CONTINUE
        !          1843:       IF (KK+2.GE.IPT) GO TO 90
        !          1844:       CALL ERROR1(40H EQUIVALENCE CONFLICTS WITH COMMON DEFNS, 40)
        !          1845:       GO TO 130
        !          1846:    90 IF (KK+1.EQ.IPT) GO TO 130
        !          1847: C
        !          1848: C     MARK ALL DECLARATORS IN EQUIV (--) AS IF IN COMMON BLOCK
        !          1849: C     THAT ANY ONE OF THEM IS ACTUALLY  IN
        !          1850: C
        !          1851:       DO 120 I=1,KK
        !          1852:         L = IGATT1(STACK(I),2)
        !          1853:         IF (L.EQ.1) GO TO 120
        !          1854:         CALL SATT1(STACK(I), 2, 1)
        !          1855:         L = STACK(I)
        !          1856:         IF (DSA(L+2)) 100, 100, 110
        !          1857:  100  IF(NEXT+2.GE.BNEXT) GOTO 170
        !          1858:         DSA(L+2) = NEXT
        !          1859:         DSA(NEXT) = 0
        !          1860:         DSA(NEXT+1) = STACK(IPT-1)
        !          1861:         NEXT = NEXT + 2
        !          1862:         GO TO 120
        !          1863:   110   L = DSA(L+2)
        !          1864:         DSA(L+1) = STACK(IPT-1)
        !          1865:   120 CONTINUE
        !          1866:   130 IF (K2+1.EQ.NSTMT) GO TO 150
        !          1867:       IF (STMT(K2+1).NE.68) GO TO 20
        !          1868:       PSTMT = K2 + 2
        !          1869:       GO TO 10
        !          1870:   150 RETURN
        !          1871:  160  CALL ERROR1(34H IN EQUIV, TABLE OVERFLOW OF STACK,34)
        !          1872:  180  SYSERR = .TRUE.
        !          1873:       GOTO 150
        !          1874:  170  CALL ERROR1(32H IN EQUIV, TABLE OVERFLOW OF DSA, 32)
        !          1875:       GOTO 180
        !          1876:       END
        !          1877: C XXXXXEXTERN.f
        !          1878:       SUBROUTINE EXTERN
        !          1879:       LOGICAL ERR, SYSERR, ABORT
        !          1880:       LOGICAL BR, INTEXT
        !          1881:       INTEGER STMT, PSTMT
        !          1882:       COMMON /FACTS/ NAME, NOST, ITYP, IASF
        !          1883:       COMMON /INPUT/ NSTMT, PSTMT, STMT(1327)
        !          1884:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !          1885: C
        !          1886: C     PROCESS AN EXTERNAL STMT. CAUSES IDS TO BE MARKED AS EXTERNAL
        !          1887: C     PROCEDURES. ERROR OCCURS IF ID HAS PREVIOUSLY DEFINED INCONSISTANT
        !          1888: C     USAGE. EXTERNAL CAN'T APPEAR IN BLOCK DATA PGM UNIT.
        !          1889: C
        !          1890:       L = IGATT1(NAME,8)
        !          1891:       IF (L.EQ.11) GO TO 60
        !          1892:    10 CALL NEXTOK(PSTMT, K2, KK)
        !          1893:       IF (KK.EQ.0) GO TO 20
        !          1894:       CALL ERROR1(19H ILLEGAL IDENTIFIER, 19)
        !          1895:       GO TO 70
        !          1896:    20 KK = LOOKUP(K2,.FALSE.)
        !          1897:       IF (SYSERR) RETURN
        !          1898:       L = IGATT1(KK,8)
        !          1899:       IF (L.EQ.0) GO TO 30
        !          1900:       CALL ERROR1(26H ILLEGAL USE OF IDENTIFIER, 26)
        !          1901:       GO TO 40
        !          1902:    30 CALL SATT1(KK, 8, 13)
        !          1903: C
        !          1904: C     CAUSE EXTERNAL BIT TO BE SET IF POSSIBLE BASIC EXTERNAL
        !          1905: C
        !          1906:    40 BR = INTEXT(KK,0,0,.FALSE.)
        !          1907:       IF (K2.EQ.NSTMT) GO TO 70
        !          1908:       IF (STMT(K2).NE.68) GO TO 50
        !          1909:       PSTMT = K2 + 1
        !          1910:       GO TO 10
        !          1911:    50 CALL ERROR1(20H ILLEGAL PUNCTUATION, 20)
        !          1912:       GO TO 70
        !          1913:    60 CALL ERROR1(
        !          1914:      *60H ILLEGAL USAGE OF EXTERNAL STMT WITHIN BLOCK DATA SUBPROGRAM,
        !          1915:      *    60)
        !          1916:    70 RETURN
        !          1917:       END
        !          1918: C XXXXXFIXLAB.f
        !          1919:       SUBROUTINE FIXLAB(ND)
        !          1920: C
        !          1921: C     ROUTINE SETS END-OF-DEF-STMT NO FOR LABELS
        !          1922: C     WHEN CALLED BY END STMT, FIXES ALL LABEL DEFS YET UNBOUND
        !          1923: C     TO THE END OF PGM STMT NO.  WHEN CALLED BY DO STMT
        !          1924: C     FIXES UP ALL LABELS AT THE LEVEL OF THE CURRENT
        !          1925: C     DO TO END-OF-DO STMT NO;  ND TRUE MEANS AN END STMT CALLED FIXLAB
        !          1926: C
        !          1927:       LOGICAL ND
        !          1928:       INTEGER DOLIST, DOPT, BNEXT, SYMHD, DSA, PDSA
        !          1929:       COMMON /CTABL/ LDSA, PDSA, DSA(5000)
        !          1930:       COMMON /DOS/ DOPT, LDO, DOLIST(192)
        !          1931:       COMMON /FACTS/ NAME, NOST, ITYP, IASF
        !          1932:       COMMON /TABL/ NEXT, LABHD, SYMHD, BNEXT
        !          1933:       LEV = -DOPT/6
        !          1934:       I = LABHD
        !          1935:    10 IF (I.EQ.0) RETURN
        !          1936:       K = IGATT1(I,2)
        !          1937:       IF (K.NE.1) GO TO 30
        !          1938:       K = IGATT1(I,1)
        !          1939:       IF (K.NE.1) GO TO 30
        !          1940:       K = DSA(I+2)
        !          1941:       IF (ND) GO TO 20
        !          1942:       IF (DSA(K+1).EQ.LEV) DSA(K+1) = NOST
        !          1943:       GO TO 30
        !          1944:    20 IF (DSA(K+1).LE.0) DSA(K+1) = NOST
        !          1945:    30 I = DSA(I+3)
        !          1946:       GO TO 10
        !          1947:       END
        !          1948: C XXXXXFORMAT.f
        !          1949:       SUBROUTINE FORMAT
        !          1950:       INTEGER STMT, PSTMT
        !          1951:       LOGICAL TOKPNO, SIGN, ERROR
        !          1952:       COMMON /INPUT/ NSTMT, PSTMT, STMT(1327)
        !          1953: C
        !          1954: C     ROUTINE PROCESSES FORMAT STMT
        !          1955: C     FORMAT (Q1 T1 Z1 T2 Z2 ... TN Q2)
        !          1956: C     Q1,Q2 ARE EMPTY OR ARE SEPARARTERS
        !          1957: C     T1,T2 ETC. ARE FORMAT-ITEMS
        !          1958: C     Z1,Z2, ETC. ARE SEPARATERS
        !          1959: C     CHECKS FOR <= 2 LEVELS OF PARENTHESES
        !          1960: C
        !          1961:       ERROR = .FALSE.
        !          1962:       ICNT = 0
        !          1963: C
        !          1964: C     "("
        !          1965: C
        !          1966:       IF (STMT(PSTMT).EQ.65) GO TO 30
        !          1967:    10 CALL ERROR1(20H ILLEGAL PUNCTUATION, 20)
        !          1968: C
        !          1969: C     SEARCH FOR FORMAT ITEMS
        !          1970: C
        !          1971:    20 RETURN
        !          1972:    30 ICNT = ICNT + 1
        !          1973:       IF (ICNT.GT.2) CALL ERROR1(28H TOO MANY PARENTHESES LEVELS, 28)
        !          1974:       PSTMT = PSTMT + 1
        !          1975: C
        !          1976: C     LOOK FOR Q1
        !          1977: C
        !          1978:       CALL SEPAR(I)
        !          1979: C     TAKES CARE OF FORMAT()
        !          1980:       IF (STMT(PSTMT).EQ.62) GO TO 180
        !          1981:       IF (STMT(PSTMT-1).EQ.68) CALL ERROR1(25H ILLEGAL PUNCTUATION  (, ,
        !          1982:      *    25)
        !          1983:    40 IF (STMT(PSTMT).EQ.65) GO TO 30
        !          1984:       IF (PSTMT.GE.NSTMT) GO TO 10
        !          1985:       SIGN = .FALSE.
        !          1986: C
        !          1987: C     SEARCH FOR REPEAT FACTER (POSITIVE INTEGER)
        !          1988: C
        !          1989:       IF (TOKPNO(PSTMT,K2,N)) GO TO 70
        !          1990: C
        !          1991: C     HOLLERITH STRINGS
        !          1992: C
        !          1993:       IF (STMT(PSTMT).LT.0) GO TO 120
        !          1994: C
        !          1995: C     "-"       IN P SCALING FORMAT-ITEM
        !          1996: C
        !          1997:       IF (STMT(PSTMT).NE.61) GO TO 50
        !          1998:       SIGN = .TRUE.
        !          1999:       PSTMT = PSTMT + 1
        !          2000:    50 IF (PSTMT.GE.NSTMT) GO TO 10
        !          2001: C
        !          2002: C     LOOK FOR <INT> IN PSCALING FORMAT-ITEM
        !          2003: C     P SCALING FORMAT-ITEM
        !          2004: C     ( -       ) <INTEGER> P REPEAT (A,I,L) <WIDTH> . <INT>
        !          2005: C
        !          2006:       CALL NEXTOK(PSTMT, K2, K)
        !          2007: C
        !          2008: C     CHECK FOR USE OF "-" WITH NON P-SCALING CONSTRUCTS
        !          2009: C
        !          2010:       IF (K.NE.1 .AND. SIGN) GO TO 100
        !          2011:       IF (K.EQ.1) GO TO 60
        !          2012:       N = STMT(PSTMT)
        !          2013:       GO TO 90
        !          2014:    60 SIGN = .TRUE.
        !          2015:       PSTMT = K2
        !          2016:       N = STMT(PSTMT)
        !          2017:       GO TO 80
        !          2018: C
        !          2019: C     LOOK FOR PART OF FORMAT-ITEM AFTER REPEAT FACTOR
        !          2020: C
        !          2021:    70 PSTMT = K2
        !          2022:       N = STMT(PSTMT)
        !          2023: C
        !          2024: C     "("
        !          2025: C
        !          2026:       IF (N.EQ.65) GO TO 30
        !          2027: C
        !          2028: C     "X"
        !          2029: C
        !          2030:       IF (N.EQ.53) GO TO 120
        !          2031: C
        !          2032: C     "P"
        !          2033: C
        !          2034:    80 IF (N.EQ.45) GO TO 130
        !          2035:       IF (SIGN) GO TO 100
        !          2036: C
        !          2037: C     A,I,L
        !          2038: C
        !          2039:    90 IF (N.EQ.30 .OR. N.EQ.38 .OR. N.EQ.41) GO TO 110
        !          2040: C
        !          2041: C     D,E,F,G
        !          2042: C
        !          2043:       IF (N.GE.33 .AND. N.LE.36) GO TO 150
        !          2044:   100 CALL ERROR1(20H ILLEGAL FORMAT ITEM, 20)
        !          2045:       GO TO 20
        !          2046: C
        !          2047: C     A,I,L FOUND. LOOK FOR <WIDTH>
        !          2048: C
        !          2049:   110 IF (PSTMT+1.GE.NSTMT) GO TO 10
        !          2050:       PSTMT = PSTMT + 1
        !          2051:       IF (.NOT.TOKPNO(PSTMT,K2,I)) GO TO 100
        !          2052:       IF (N.NE.30 .OR. I.EQ.1 .OR. ERROR) GO TO 160
        !          2053:       CALL ERROR1(48H WARNING - A FORMAT ITEM NOT PORTABLE FOR N.GT.1,
        !          2054:      *    48)
        !          2055:       ERROR = .TRUE.
        !          2056:       GO TO 160
        !          2057: C
        !          2058: C     SKIP TO NEXT CHAR IN X OR HOLLERITH
        !          2059: C
        !          2060:   120 PSTMT = PSTMT + 1
        !          2061:       GO TO 170
        !          2062: C
        !          2063: C     LOOK FOR CONSTRUCT FOLLOWING THE P. CAN BE A REPEAT
        !          2064: C
        !          2065:   130 IF (PSTMT+1.GE.NSTMT) GO TO 10
        !          2066:       PSTMT = PSTMT + 1
        !          2067:       IF (STMT(PSTMT).GT.9 .OR. STMT(PSTMT).LT.0) GO TO 140
        !          2068:       CALL NEXTOK(PSTMT, K2, K)
        !          2069:       IF (K.NE.1) GO TO 10
        !          2070:       PSTMT = K2
        !          2071: C
        !          2072: C     AFTER D,E,F,G FIND <WIDTH> . <INT>
        !          2073: C
        !          2074:   140 IF (STMT(PSTMT).LT.33 .OR. STMT(PSTMT).GT.36) GO TO 10
        !          2075:   150 IF (PSTMT+1.GE.NSTMT) GO TO 10
        !          2076:       PSTMT = PSTMT + 1
        !          2077:       IF (.NOT.TOKPNO(PSTMT,K2,N)) GO TO 100
        !          2078:       IF (STMT(K2).NE.64) GO TO 100
        !          2079:       IF (K2+1.GE.NSTMT) GO TO 10
        !          2080:       PSTMT = K2 + 1
        !          2081:       CALL NEXTOK(PSTMT, K2, K)
        !          2082:       IF (K.NE.1) GO TO 100
        !          2083:   160 PSTMT = K2
        !          2084: C
        !          2085: C     FINISHED A FORMAT-ITEM
        !          2086: C     LOOK FOR SEPARATER OR ")"
        !          2087: C
        !          2088:   170 IF (STMT(PSTMT).NE.62) GO TO 210
        !          2089:   180 ICNT = ICNT - 1
        !          2090:       IF (ICNT.LT.0) GO TO 190
        !          2091:       IF (PSTMT+1.LT.NSTMT) GO TO 200
        !          2092:       IF (ICNT.EQ.0) GO TO 20
        !          2093:   190 CALL ERROR1(28H ILLEGAL PARENTHESES NESTING, 28)
        !          2094:       GO TO 20
        !          2095:   200 PSTMT = PSTMT + 1
        !          2096:       GO TO 170
        !          2097:   210 CALL SEPAR(I)
        !          2098:       IF (I.EQ.0) CALL ERROR1(24H MISSING FIELD SEPARATOR, 24)
        !          2099:       IF (STMT(PSTMT).NE.62) GO TO 40
        !          2100:       IF (STMT(PSTMT-1).EQ.68) CALL ERROR1(25H ILLEGAL PUNCTUATION  ,) ,
        !          2101:      *    25)
        !          2102:       GO TO 180
        !          2103:       END
        !          2104: C XXXXXGETTOK.f
        !          2105:       INTEGER FUNCTION GETTOK(K1, K2)
        !          2106: C
        !          2107: C     GETTOK FINDS NEXT TOKEN IN STMT(K1)-STMT(K2-1)
        !          2108: C     AND RETURNS A VALUE:
        !          2109: C     0= DOUBLE PRECISION CONSTANT-
        !          2110: C     2= INTEGER CONSTANT
        !          2111: C     1= REAL CONSTANT-
        !          2112: C     3= COMPLEX CONSTANT
        !          2113: C     4= LOGICAL CONSTANT
        !          2114: C     5= HOLLERITH CONSTANT
        !          2115: C     6= ID
        !          2116: C    >10=OPERATOR   (10+CODE FOR OPERATOR;HERE ARRAY AND FCN REFS ARE 16
        !          2117: C
        !          2118:       INTEGER PSTMT, STMT
        !          2119:       LOGICAL ERR, SYSERR, ABORT, TOKLOP, TOKRL, TOKCOM, TOKLOG
        !          2120:       COMMON /INPUT/ NSTMT, PSTMT, STMT(1327)
        !          2121:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !          2122:    10 GETTOK = -1
        !          2123:       IF (.NOT.TOKRL(K1,K2,K)) GO TO 20
        !          2124:       GETTOK = 1
        !          2125:       IF (K.EQ.0) GETTOK = 0
        !          2126:       GO TO 40
        !          2127:    20 CALL NEXTOK(K1, K2, K)
        !          2128:       K = K + 1
        !          2129:       GO TO (50, 30, 60, 70), K
        !          2130:    30 GETTOK = 2
        !          2131:    40 RETURN
        !          2132: C
        !          2133: C     PROCESS ID, SEE IF ITS A FCN  CALL OR ARRAY NAME
        !          2134: C
        !          2135:    50 GETTOK = 6
        !          2136:       IF (STMT(K2).NE.65) GO TO 40
        !          2137:       GETTOK = 16
        !          2138:       K2 = K2 + 1
        !          2139:       GO TO 40
        !          2140:    60 GETTOK = 5
        !          2141:       GO TO 40
        !          2142:    70 K = STMT(K1)
        !          2143:       IF (K.EQ.64) GO TO 100
        !          2144:       IF (K.EQ.65) GO TO 80
        !          2145:       IF (K.EQ.62) GETTOK = 12
        !          2146:       IF (K.EQ.68) GETTOK = 18
        !          2147:       IF (K.EQ.60 .OR. K.EQ.61) GETTOK = 11
        !          2148:       IF (K.EQ.66 .OR. K.EQ.67) GETTOK = 17
        !          2149:       IF (K2.EQ.K1+2) GETTOK = 13
        !          2150:       IF (GETTOK+1) 40, 120, 40
        !          2151:    80 GETTOK = 15
        !          2152:       IF (TOKCOM(K1,K)) GO TO 90
        !          2153:       GO TO 40
        !          2154:    90 GETTOK = 3
        !          2155:       K2 = K
        !          2156:       GO TO 40
        !          2157: C
        !          2158: C     CHECK FOR LOGICAL CONSTANTS,OPERATORS
        !          2159: C
        !          2160:   100 IF (.NOT.TOKLOG(K1,K2)) GO TO 110
        !          2161:       GETTOK = 4
        !          2162:       GO TO 40
        !          2163:   110 IF (.NOT.TOKLOP(K1,K2,K)) GO TO 120
        !          2164:       GETTOK = K
        !          2165:       GO TO 40
        !          2166:   120 CALL ERROR1(26H ILLEGAL CHARACTER IGNORED, 26)
        !          2167:       IF (K1+1.GE.NSTMT) GO TO 130
        !          2168:       K1 = K1 + 1
        !          2169:       GO TO 10
        !          2170:   130 ERR = .TRUE.
        !          2171:       RETURN
        !          2172:       END
        !          2173: C XXXXXGOTO.f
        !          2174:       SUBROUTINE GOTO
        !          2175:       INTEGER STMT, PSTMT
        !          2176:       LOGICAL TOKLAB, DONE, ERR, SYSERR, ABORT
        !          2177:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !          2178:       COMMON /INPUT/ NSTMT, PSTMT, STMT(1327)
        !          2179: C
        !          2180: C     PROCESSES UNCONDITIONAL, ASSIGNED, AND COMPUTED GOTO  STMTS
        !          2181: C
        !          2182:       IF (PSTMT.GE.NSTMT) GO TO 100
        !          2183:       DONE = .FALSE.
        !          2184: C
        !          2185: C     UNCONDITIONAL GOTO
        !          2186: C
        !          2187:       IF (TOKLAB(1,K2,K,.FALSE.)) GO TO 110
        !          2188: C
        !          2189: C     COMPUTED GOTO
        !          2190: C
        !          2191:       IF (SYSERR) GO TO 110
        !          2192:       IF (STMT(PSTMT).EQ.65) GO TO 70
        !          2193: C
        !          2194: C     ASSIGNED GOTO:  GOTO <VAR> , ( <LAB> , ETC. )
        !          2195: C
        !          2196:    10 CALL NEXTOK(PSTMT, K2, K)
        !          2197:       IF (K.NE.0) GO TO 100
        !          2198:       K = LOOKUP(K2,.FALSE.)
        !          2199:       IF (SYSERR) GO TO 110
        !          2200:       I1 = IGATT1(K,1)
        !          2201:       IF (I1.NE.0) GO TO 20
        !          2202:       I1 = 1
        !          2203:       IF (STMT(PSTMT).GE.38 .AND. STMT(PSTMT).LE.43) I1 = 2
        !          2204:       CALL SATT1(K, 1, I1)
        !          2205:    20 I2 = IGATT1(K,7)
        !          2206:       IF (MOD(I1,8).NE.2 .OR. I2.NE.0) CALL ERROR1(
        !          2207:      *    31H NOT AN INTEGER SCALAR VARIABLE, 31)
        !          2208:       I1 = IGATT1(K,8)
        !          2209:       IF (DONE) GO TO 40
        !          2210: C
        !          2211: C     CHECK FOR ASSIGN VARIABLE IN USAGE
        !          2212: C
        !          2213:       IF (I1.EQ.0) GO TO 30
        !          2214:       IF (I1.NE.8) CALL ERROR1(26H ID NOT AN ASSIGN VARIABLE, 26)
        !          2215:       GO TO 60
        !          2216:    30 CALL SATT1(K, 8, 8)
        !          2217:       GO TO 60
        !          2218: C
        !          2219: C     CHECK FOR VARIABLE IN USAGE
        !          2220: C
        !          2221:    40 IF (I1.EQ.0) GO TO 50
        !          2222:       IF (I1.NE.10) CALL ERROR1(19H ILLEGAL ID IN GOTO, 19)
        !          2223:       GO TO 130
        !          2224:    50 CALL SATT1(K, 8, 10)
        !          2225:       GO TO 130
        !          2226: C
        !          2227: C     LOOK FOR ","
        !          2228: C
        !          2229:    60 IF (STMT(K2).NE.68) GO TO 100
        !          2230:       K2 = K2 + 1
        !          2231:       DONE = .TRUE.
        !          2232:       IF (STMT(K2).NE.65) GO TO 100
        !          2233:       GO TO 80
        !          2234:    70 PSTMT = PSTMT + 1
        !          2235:       GO TO 90
        !          2236:    80 PSTMT = K2 + 1
        !          2237: C
        !          2238: C     LOOK FOR  ( <LAB> , ETC.)
        !          2239: C
        !          2240:    90 IF (PSTMT.GE.NSTMT) GO TO 100
        !          2241:       IF (.NOT.TOKLAB(1,K2,K,.FALSE.)) GO TO 100
        !          2242:       IF(SYSERR) GOTO 110
        !          2243:       IF (STMT(K2).EQ.68) GO TO 80
        !          2244:       IF (STMT(K2).NE.62) GO TO 100
        !          2245:       IF (DONE) GO TO 120
        !          2246:       DONE = .TRUE.
        !          2247:       IF (STMT(K2+1).NE.68) GO TO 100
        !          2248:       PSTMT = K2 + 2
        !          2249:       IF (PSTMT.LT.NSTMT) GO TO 10
        !          2250:   100 CALL ERROR1(15H ILLEGAL SYNTAX, 15)
        !          2251:   110 RETURN
        !          2252: C
        !          2253: C     CHECK END OF STMT IS REACHED
        !          2254: C
        !          2255:   120 K2 = K2 + 1
        !          2256:   130 IF (K2.NE.NSTMT) CALL ERROR1(
        !          2257:      *    34H EXTRANEOUS INFO AFTER END OF STMT, 34)
        !          2258:       GO TO 110
        !          2259:       END
        !          2260: C XXXXXID.f
        !          2261:       SUBROUTINE ID(K2)
        !          2262:       INTEGER STMT, PSTMT
        !          2263:       LOGICAL ERR, SYSERR, ABORT, DOVAR
        !          2264:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !          2265:       COMMON /INPUT/ NSTMT, PSTMT, STMT(1327)
        !          2266:       COMMON /FACTS/ NAME, NOST, ITYP, IASF
        !          2267: C
        !          2268: C     ROUTINE CHECKS IDENTIFIERS IN <LIST> FOR BEING ARRAY,ARRAY ELEMENT
        !          2269: C      OR VARIABLE.- RETURNS ERR=.TRUE. IF MUST CEASE PROCESSING
        !          2270: C     FIRST CHECK USAGE
        !          2271: C
        !          2272:       K = LOOKUP(K2,.FALSE.)
        !          2273:       IF (SYSERR) GO TO 50
        !          2274: C
        !          2275: C     CHECK USAGE
        !          2276: C
        !          2277:       I3 = IGATT1(K,8)
        !          2278:       IF (I3.NE.0) GO TO 10
        !          2279:       CALL SATT1(K, 8, 10)
        !          2280:       GO TO 20
        !          2281:    10 IF (I3.NE.10) CALL ERROR1(27H ILLEGAL IDENTIFIER IN LIST, 27)
        !          2282: C
        !          2283: C     SET TYPE
        !          2284: C
        !          2285:    20 I3 = IGATT1(K,1)
        !          2286:       IF (I3.NE.0) GO TO 30
        !          2287:       I3 = 1
        !          2288:       IF (STMT(PSTMT).LE.43 .AND. STMT(PSTMT).GE.38) I3 = 2
        !          2289:       CALL SATT1(K, 1, I3)
        !          2290: C
        !          2291: C     CHECK FOR READING INTO DO CONTROL VARIABLE OR LIMIT
        !          2292: C
        !          2293:    30 IF (ITYP.NE.23) GO TO 40
        !          2294:       IF (DOVAR(K)) CALL ERROR1(
        !          2295:      *    57H ILLEGAL TO CHANGE VALUE OF CONTROL VARIABLE OR DO LIMITS,
        !          2296:      *    57)
        !          2297: C
        !          2298: C     MARK VARIABLES AS SET IF VALUES READ IN
        !          2299: C
        !          2300:       CALL SATT1(K, 5, 1)
        !          2301: C
        !          2302: C     SEPARATE OUT ARRAY ELEMENTS AND CHECK SUBSCRIPTS
        !          2303: C
        !          2304:    40 IF (STMT(K2).NE.65) GO TO 50
        !          2305:       I3 = IGATT1(K,7)
        !          2306:       IF (I3.EQ.0) GO TO 60
        !          2307:       PSTMT = K2 + 1
        !          2308:       IF (PSTMT.GE.NSTMT) GO TO 80
        !          2309:       CALL SUBS(K2, I3)
        !          2310:       ERR = .FALSE.
        !          2311:    50 RETURN
        !          2312:    60 CALL ERROR1(40H ILLEGAL SUBSCRIPTING OF SCALAR VARIABLE, 40)
        !          2313:    70 ERR = .TRUE.
        !          2314:       GO TO 50
        !          2315:    80 CALL ERROR1(19H SUBSCRIPTING ERROR, 19)
        !          2316:       GO TO 70
        !          2317:       END
        !          2318: C XXXXXIDLIST.f
        !          2319:       LOGICAL FUNCTION IDLIST(IDO)
        !          2320:       INTEGER PSTMT, STMT
        !          2321:       LOGICAL ERR, SYSERR, ABORT, IDO
        !          2322:       COMMON /INPUT/ NSTMT, PSTMT, STMT(1327)
        !          2323:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !          2324: C
        !          2325: C     RECOGNIZES  IDLIST=<ID>  ï¿½, <ID>! ;LAST <ID> CANNOT BE FOLLOWED BY
        !          2326: C     A '='; IDLIST MUST CONTAIN AT LEAST ONE ID.  IDLIST=.FALSE. WILL
        !          2327: C     BE RETURNED FOR AN IRRECOVERABLE SYNTAX ERROR.
        !          2328: C     IDO SET TO .TRUE. WHEN <IDLIST> IS FOLLOWED BY <DOSPEC>
        !          2329: C
        !          2330:       IDO = .FALSE.
        !          2331:       IDLIST = .TRUE.
        !          2332:       IF (PSTMT.GE.NSTMT) GO TO 60
        !          2333:       CALL NEXTOK(PSTMT, K2, K)
        !          2334:       IF (K.NE.0) GO TO 60
        !          2335:       IF (STMT(K2).EQ.63) GO TO 20
        !          2336:       CALL ID(K2)
        !          2337:       IF (ERR .OR. SYSERR) GO TO 20
        !          2338:    10 PSTMT = K2
        !          2339:       IF (STMT(PSTMT).EQ.68 .AND. STMT(PSTMT+1).EQ.65 .OR.
        !          2340:      *    STMT(PSTMT).EQ.62 .OR. PSTMT.EQ.NSTMT) GO TO 30
        !          2341:       IF (STMT(PSTMT).EQ.68) GO TO 50
        !          2342:       CALL ERROR1(35H ILLEGAL TOKEN FOLLOWING IDENTIFIER, 35)
        !          2343:    20 IDLIST = .FALSE.
        !          2344:       ERR = .FALSE.
        !          2345:    30 RETURN
        !          2346:    40 IDO = .TRUE.
        !          2347:       GO TO 30
        !          2348: C
        !          2349: C     MAKE SURE <ID> =  ISN'T NEXT CONSTRUCT
        !          2350: C
        !          2351:    50 K2 = K2 + 1
        !          2352:       IF (K2.GE.NSTMT) GO TO 60
        !          2353:       CALL NEXTOK(K2, K3, K)
        !          2354:       IF (STMT(K3).EQ.63) GO TO 40
        !          2355:       PSTMT = K2
        !          2356:       K2 = K3
        !          2357:       CALL ID(K2)
        !          2358:       IF (ERR .OR. SYSERR) GO TO 20
        !          2359:       GO TO 10
        !          2360:    60 CALL ERROR1(23H ILLEGAL SYNTAX IN LIST, 23)
        !          2361:       GO TO 20
        !          2362:       END
        !          2363: C XXXXXIFS.f
        !          2364:       SUBROUTINE IFS(LOG)
        !          2365:       LOGICAL TOKLAB, ERR, SYSERR, ABORT, LOG
        !          2366:       INTEGER STMT, PSTMT, EXPR
        !          2367:       COMMON /INPUT/ NSTMT, PSTMT, STMT(1327)
        !          2368:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !          2369: C
        !          2370: C     ROUTINE PROCESSES ARITHMETIC AND LOGICAL IF STMTS
        !          2371: C     LOG RETURNED AS TRUE IF LOGICAL-IF IS ENCOUNTERED;PU CHECKS FOR
        !          2372: C     ACCEPTIBLE EXECUTABLE STMT AFTER LOGICAL EXPRESSION
        !          2373: C
        !          2374:       LOG = .FALSE.
        !          2375:       L = MOD(EXPR(I),8)
        !          2376:       IF (-1.EQ.L .OR. SYSERR) GO TO 30
        !          2377:       LOG = L.EQ.4
        !          2378:       IF (LOG) GO TO 30
        !          2379: C
        !          2380: C     ARITHMETIC IF--SEARCH FOR  <LAB>,<LAB>,<LAB>
        !          2381: C
        !          2382:       IF (L.GT.2) GO TO 50
        !          2383:       I = 0
        !          2384:       IF (PSTMT.GE.NSTMT) GO TO 20
        !          2385:    10 IF (.NOT.TOKLAB(1,K2,L,.FALSE.)) GO TO 40
        !          2386:       IF (SYSERR) GO TO 30
        !          2387:       I = I + 1
        !          2388:       IF (I.EQ.3) GO TO 60
        !          2389:       IF (STMT(K2).NE.68) GO TO 20
        !          2390:       PSTMT = K2 + 1
        !          2391:       IF (PSTMT.LT.NSTMT) GO TO 10
        !          2392:    20 CALL ERROR1(15H ILLEGAL SYNTAX, 15)
        !          2393:    30 RETURN
        !          2394:    40 CALL ERROR1(14H MISSING LABEL, 14)
        !          2395:       GO TO 30
        !          2396:    50 CALL ERROR1(39H COMPLEX EXPRESSION ILLEGAL IN ARITH-IF, 39)
        !          2397:       GO TO 30
        !          2398:    60 IF (K2.EQ.NSTMT) GO TO 30
        !          2399:       CALL ERROR1(34H EXTRANEOUS INFO AFTER END OF STMT, 34)
        !          2400:       GO TO 30
        !          2401:       END
        !          2402: C XXXXXINTEXT.f
        !          2403:       LOGICAL FUNCTION INTEXT(LL, L1, L2, BR)
        !          2404: C
        !          2405: C     LL POINTS TO DSA ENTRY OF FCN NAME
        !          2406: C     L1 POINTS INTO STACK TO BEGINNING OF ARGS
        !          2407: C     L2 POINTS INTO STACK TO LAST ARG ENTRY
        !          2408: C      BR .TRUE. MEANS LOOK FOR BOTH EXTERNALS ND INTRINS
        !          2409: C     BR FALSE MEANS JUST LOOK FOR EXTERNALS
        !          2410: C      ROUTINE CHECKS FOR REFERENCES TO INTRINSIC OR BASIC EXTERNAL
        !          2411: C     FCNS;  RETURNS TRUE IF FINDS INTRINSIC FCN.  CHECKS INTRINSICS
        !          2412: C      ARGS FOR USAGE, TYPE AND NUMBER.  MARKS POSSIBLE BASIC EXTDRNAL
        !          2413: C     FCNS SENT DOWN TO IT
        !          2414: C
        !          2415:       INTEGER STACK, BL, PDSA, DSA, FCN(6), Z
        !          2416:       LOGICAL BR
        !          2417:       COMMON /CEXPRS/ LSTACK, STACK(620)
        !          2418:       COMMON /CTABL/ LDSA, PDSA, DSA(5000)
        !          2419:       COMMON /INTS/ Z(346)
        !          2420:       COMMON /FACTS/ NAME, NOST, ITYP, IASF
        !          2421:       DATA BL /1H /
        !          2422:       INTEXT = .FALSE.
        !          2423:       CALL S5UNPK(DSA(LL+4), FCN(1), 6)
        !          2424:       K = 1
        !          2425:       DO 40 I=1,55
        !          2426:         K1 = K + 1
        !          2427:         K2 = K1 + Z(K) - 1
        !          2428:         L = 0
        !          2429:         DO 10 J=K1,K2
        !          2430:           L = L + 1
        !          2431:           IF (FCN(L).NE.Z(J)) GO TO 30
        !          2432:    10   CONTINUE
        !          2433:         IF (L.EQ.6) GO TO 60
        !          2434:         L = L + 1
        !          2435:         DO 20 J=L,6
        !          2436:           IF (FCN(J).NE.BL) GO TO 30
        !          2437:    20   CONTINUE
        !          2438:         GO TO 60
        !          2439:    30   K = K2 + 2
        !          2440:    40 CONTINUE
        !          2441:    50 RETURN
        !          2442: C
        !          2443: C     DIFFERENTIATES BETWEEN A POSSIBLE BASIC EXTERNAL AND POSSIBLE
        !          2444: C      INTRINSIC FCN
        !          2445: C
        !          2446:    60 L = MOD(Z(K2+1),1024)/512
        !          2447: C
        !          2448: C     IF POSSIBLE BASIC EXTERNAL CHECK TYPE AND SET IT IF NOT ALREADY
        !          2449: C     EXPLICITLY SET
        !          2450: C
        !          2451:       IF (L.NE.1) GO TO 70
        !          2452:       L = IGATT1(LL,1)
        !          2453:       IF (L/8.GE.1) GO TO 190
        !          2454:       L = MOD(Z(K2+1),8)
        !          2455:       IF (BR) L = L + 8
        !          2456:       CALL SATT1(LL, 1, L)
        !          2457: C
        !          2458: C       MARK AS USED IN PASS 1
        !          2459: C
        !          2460:       GO TO 190
        !          2461: C
        !          2462: C      CHEKC IF IN EXTERNAL STMT  IF SO NOT AN INTRINSIC
        !          2463: C
        !          2464:    70 IF (.NOT.BR) GO TO 50
        !          2465:       L = IGATT1(LL,8)
        !          2466:       IF (L.EQ.13) GO TO 50
        !          2467: C
        !          2468: C     CHECK IF EXPLICITLY TYPES DIFFERENTLY THAN EXPECTED
        !          2469: C
        !          2470:       L = IGATT1(LL,1)
        !          2471:       J = MOD(Z(K2+1),8)
        !          2472:       IF (L.GE.8) GO TO 80
        !          2473:       CALL SATT1(LL, 1, J+8)
        !          2474:       GO TO 90
        !          2475:    80 IF (J.NE.MOD(L,8)) GO TO 50
        !          2476: C
        !          2477: C     K POINTS TO THE FUNCTION ENTRY IN Z
        !          2478: C     K1 POINTS TO FIRST LETTER IN FCN-NAME; K2 TO LAST LETTER
        !          2479: C     FIELDS IN ATTRIBUTE WORD ARE AS FOLLOWS:
        !          2480: C     BITS 0-2 TYPE FCN
        !          2481: C     BITS 3-5 TYPE ARGS
        !          2482: C     BIT 6 IF 1, FIXED NO ARGS; IF 0 VARIABLE NO OF ARGS
        !          2483: C      BITS 7-8 MINIMUM NUMBER OF ARGS
        !          2484: C      BITS 9 IF 0, INTRINSIC; IF 1 BASIC EXTERNAL
        !          2485: C      BITS 10 IF 1 USED IN PASS 1; ELSE NOT REFERENCED
        !          2486: C
        !          2487: C     FCN IS INTRINSIC
        !          2488: C     CHECK NUMBER OF ARGS
        !          2489: C
        !          2490:    90 I = MOD(Z(K2+1),128)/64
        !          2491:       J = MOD(Z(K2+1),512)/128
        !          2492:       IF (I) 100, 100, 120
        !          2493: C
        !          2494: C     VARIABLE NUMBER OF ARGS ALLOWED
        !          2495: C     MUST BE AT LEAST J
        !          2496: C
        !          2497:   100 IF ((L2-L1+1)/2.GE.J) GO TO 130
        !          2498:  110  CALL ERROR2(29H INCORRECT NUMBER OF ARGS IN , 29, DSA(LL+4),
        !          2499:      * 1, 1,  1)
        !          2500:       GO TO 180
        !          2501: C
        !          2502: C     FIXED NUMBER OF ARGS
        !          2503: C
        !          2504:   120 IF ((L2-L1+1)/2.NE.J) GO TO 110
        !          2505: C
        !          2506: C     CHECK THRU ARG LIST OR PROPER TYPE ID AS AN ARG;
        !          2507: C     CHECK TYPE AND THAT ARGS ARE SCALARS
        !          2508: C
        !          2509:   130 L = MOD(Z(K2+1),64)/8
        !          2510:       DO 170 N=L1,L2,2
        !          2511: C
        !          2512: C     CHECK FOR EXPRESSION AS ARG
        !          2513: C
        !          2514:         IF (STACK(N).EQ.0) GO TO 160
        !          2515: C
        !          2516: C     CHECK USAGE
        !          2517: C
        !          2518:         I = IGATT1(STACK(N),8)
        !          2519:         IF (I.EQ.10 .OR. ((I.EQ.2 .OR. I.EQ.5 .OR. I.EQ.14) .AND.
        !          2520:      *      STACK(N+1).NE.6)) GO TO 160
        !          2521:         IF (I.NE.0) GO TO 140
        !          2522:         CALL SATT1(STACK(N), 8, 10)
        !          2523:         GO TO 160
        !          2524:   140   IF (I.EQ.1 .AND. ITYP.NE.31) GO TO 150
        !          2525:         I = STACK(N)
        !          2526:         IF (DSA(I+2).EQ.IASF) GO TO 160
        !          2527:   150   CALL ERROR2(40H ILLEGAL ARGUMENT IN INTRINSIC REFERENCE, 40,
        !          2528:      *  DSA(LL+4), 1, 1, 1)
        !          2529:         GO TO 170
        !          2530: C
        !          2531: C     CHECK STRUCTURE
        !          2532: C
        !          2533:   160   IF (STACK(N+1)/8.EQ.1) CALL ERROR2(
        !          2534:      *      48H ILLEGAL STRUCTURE OF ARG IN INTRINSIC REFERENCE, 48,
        !          2535:      *  DSA(LL+4), 1, 1, 1)
        !          2536: C
        !          2537: C     CHECK TYPE
        !          2538: C
        !          2539:         IF (MOD(STACK(N+1),8).NE.L) CALL ERROR2(
        !          2540:      *      43H ILLEGAL TYPE OF ARG IN INTRINSIC REFERENCE, 43,
        !          2541:      *  DSA(LL+4), 1, 1, 1)
        !          2542:   170 CONTINUE
        !          2543:   180 INTEXT = .TRUE.
        !          2544:       I = IGATT1(LL,8)
        !          2545:       IF (I.NE.0) GO TO 190
        !          2546:       CALL SATT1(LL, 8, 14)
        !          2547: C
        !          2548: C     MARK FCN AS USED
        !          2549: C
        !          2550:   190 K = Z(K2+1)/1024
        !          2551:       IF (K.EQ.0) Z(K2+1) = Z(K2+1) + 1024
        !          2552:       GO TO 50
        !          2553:       END
        !          2554: C XXXXXIO.f
        !          2555:       SUBROUTINE IO
        !          2556:       LOGICAL ERR, SYSERR, TOKPNO, OK, ABORT, TOKLAB
        !          2557:       INTEGER STMT, PSTMT
        !          2558:       INTEGER EN(4)
        !          2559:       LOGICAL SW
        !          2560:       COMMON /FACTS/ NAME, NOST, ITYP, IASF
        !          2561:       COMMON /INPUT/ NSTMT, PSTMT, STMT(1327)
        !          2562:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !          2563:       COMMON /SWS/ SW(10)
        !          2564:       DATA EN(1), EN(2), EN(3), EN(4) /34,43,33,63/
        !          2565: C
        !          2566: C     ROUTINE RECOGNIZES READ,WRITE,REWIND,BACKSPACE,ENDFILE,PAUSE STMTS
        !          2567: C
        !          2568:       OK = .TRUE.
        !          2569:       ASSIGN 160 TO IFORM
        !          2570:       IF (ITYP.NE.23 .AND. ITYP.NE.24) GO TO 240
        !          2571: C
        !          2572: C     SYNTAX OF READ, WRITE STMTS IS THE SAME EXCEPT A BINARY WRITE
        !          2573: C     NEEDS A <LIST>. (SEE USE OF OK)
        !          2574: C        "READ" (�<UNIT> / <UNIT> , <FORM>!)   �<LIST>!
        !          2575: C         <UNIT> IS INTEGER SCALAR VARIABLE OR POSITIVE INTEGER CONST
        !          2576: C         <FORM> IS <LABEL> OR  <ARRAY NAME>.
        !          2577: C
        !          2578:       IF (STMT(PSTMT).NE.65) GO TO 230
        !          2579:       PSTMT = PSTMT + 1
        !          2580:       IF (PSTMT.GE.NSTMT) GO TO 120
        !          2581:    10 IF (TOKPNO(PSTMT,K2,K)) GO TO 60
        !          2582:       CALL NEXTOK(PSTMT, K2, K)
        !          2583:       IF (K.EQ.0) GO TO 20
        !          2584:       CALL ERROR1(13H ILLEGAL UNIT, 13)
        !          2585:       GO TO 110
        !          2586:    20 K = LOOKUP(K2,.FALSE.)
        !          2587:       IF (SYSERR) GO TO 110
        !          2588:       I1 = IGATT1(K,1)
        !          2589:       I2 = IGATT1(K,7)
        !          2590:       I3 = IGATT1(K,8)
        !          2591:       IF (I3.NE.0) GO TO 30
        !          2592:       CALL SATT1(K, 8, 10)
        !          2593:       GO TO 40
        !          2594:    30 IF (I3.EQ.10) GO TO 40
        !          2595:       CALL ERROR1(13H ILLEGAL UNIT, 13)
        !          2596:    40 IF (I1.NE.0) GO TO 50
        !          2597:       I1 = 1
        !          2598:       IF (STMT(PSTMT).GE.38 .AND. STMT(PSTMT).LE.43) I1 = 2
        !          2599:       CALL SATT1(K, 1, I1)
        !          2600:    50 IF (MOD(I1,8).NE.2 .OR. I2.NE.0) CALL ERROR1(13H ILLEGAL UNIT, 13)
        !          2601:    60 PSTMT = K2
        !          2602: C
        !          2603: C     DISTINGUISH ( <UNIT> )  FROM  ( <UNIT>,<FORM> )
        !          2604: C
        !          2605:       IF (ITYP.NE.23 .AND. ITYP.NE.24) GO TO 100
        !          2606:       IF (STMT(PSTMT).EQ.68) GO TO 130
        !          2607:       IF (STMT(PSTMT).EQ.62 .AND. ITYP.EQ.24) OK = .FALSE.
        !          2608: C
        !          2609: C     CODE FINDS ")" AND TRIES TO FIND LIST
        !          2610: C
        !          2611:    70 IF (STMT(PSTMT).NE.62) GO TO 230
        !          2612:       PSTMT = PSTMT + 1
        !          2613:       IF (PSTMT.GE.NSTMT) GO TO 90
        !          2614:       CALL LIST
        !          2615:       GO TO 110
        !          2616:    80 CALL ERROR1(20H ILLEGAL PUNCTUATION, 20)
        !          2617:       PSTMT = PSTMT + 1
        !          2618:       GO TO 70
        !          2619:    90 IF (OK) GO TO 110
        !          2620:       CALL ERROR1(13H MISSING LIST, 13)
        !          2621:   100 IF (PSTMT.LT.NSTMT) CALL ERROR1(
        !          2622:      *    34H EXTRANEOUS INFO AFTER END OF STMT, 34)
        !          2623:   110 RETURN
        !          2624:   120 CALL ERROR1(15H ILLEGAL SYNTAX, 15)
        !          2625:       GO TO 110
        !          2626: C
        !          2627: C     IDENTIFY END= IF THERE
        !          2628: C
        !          2629:   130 IF (ITYP.NE.23) GO TO IFORM, (160, 80)
        !          2630:       I1 = PSTMT + 1
        !          2631:       DO 140 K=1,4
        !          2632:         IF (STMT(I1).NE.EN(K)) GO TO IFORM, (160, 80)
        !          2633:         I1 = I1 + 1
        !          2634:   140 CONTINUE
        !          2635:       IF (.NOT.SW(1)) CALL ERROR1(
        !          2636:      *    37H WARNING - NON-PORTABLE EOF CONSTRUCT, 37)
        !          2637: C
        !          2638: C     HAVE FOUND END=, TRY FOR LABEL
        !          2639: C
        !          2640:       PSTMT = I1
        !          2641:       IF(.NOT.TOKLAB(1,K2,K,.FALSE.))
        !          2642:      1CALL ERROR1(44H MISSING LABEL IN NON-PORTABLE EOF CONSTRUCT ,44)
        !          2643:       IF(SYSERR) GOTO 110
        !          2644:   150 PSTMT = K2
        !          2645:       GO TO 70
        !          2646: C
        !          2647: C     SEARCH FOR FORM
        !          2648: C
        !          2649:   160 PSTMT = PSTMT + 1
        !          2650:       IF (PSTMT.GE.NSTMT) GO TO 230
        !          2651:       IF (TOKLAB(3,K2,K,.FALSE.)) GO TO 220
        !          2652:       IF(SYSERR) GOTO 110
        !          2653:       CALL NEXTOK(PSTMT, K2, K)
        !          2654:       IF (K.EQ.0) GO TO 180
        !          2655:   170 CALL ERROR1(13H ILLEGAL FORM, 13)
        !          2656:       GO TO 110
        !          2657:   180 K = LOOKUP(K2,.FALSE.)
        !          2658:       IF (SYSERR) GO TO 110
        !          2659:       I1 = IGATT1(K,1)
        !          2660:       I2 = IGATT1(K,7)
        !          2661:       I3 = IGATT1(K,8)
        !          2662:       IF (I3.NE.0) GO TO 190
        !          2663:       CALL SATT1(K, 8, 10)
        !          2664:       GO TO 200
        !          2665:   190 IF (I3.EQ.10) GO TO 200
        !          2666:       CALL ERROR1(13H ILLEGAL FORM, 13)
        !          2667:   200 IF (I1.NE.0) GO TO 210
        !          2668:       I1 = 2
        !          2669:       IF (STMT(PSTMT).GE.38 .AND. STMT(PSTMT).LE.43) I1 = 2
        !          2670:       CALL SATT1(K, 1, I1)
        !          2671:  210  IF((MOD(I1,8).NE.2.AND.MOD(I1,8).NE.5).OR.I2.EQ.0) GOTO 170
        !          2672: C
        !          2673: C     HAVE SUCCESSFULLY FOUND A FORM
        !          2674: C
        !          2675:   220 IF (SYSERR) GO TO 110
        !          2676:       PSTMT = K2
        !          2677:       ASSIGN 80 TO IFORM
        !          2678:       IF (STMT(PSTMT).EQ.68) GO TO 130
        !          2679:       GO TO 70
        !          2680:   230 CALL ERROR1(20H ILLEGAL PUNCTUATION, 20)
        !          2681:       GO TO 110
        !          2682: C
        !          2683: C     LAST 4 I-O  STMTS
        !          2684: C
        !          2685:   240 IF (ITYP.EQ.27 .OR. ITYP.EQ.22) CALL ERROR1(
        !          2686:      *    39H WARNING - USE OF NON-PORTABLE I/O STMT, 39)
        !          2687:       IF (ITYP.EQ.22) GO TO 100
        !          2688:       IF (PSTMT.LT.NSTMT) GO TO 10
        !          2689:       CALL ERROR1(13H MISSING UNIT, 13)
        !          2690:       GO TO 110
        !          2691:       END
        !          2692: C XXXXXLDOVAR.f
        !          2693:       SUBROUTINE LDOVAR
        !          2694:       COMMON /LISTDO/ LPT, LEN, LS(64)
        !          2695: C
        !          2696: C     CHECKS PROPER NESTING OF DOS WITHIN LIST CONSTRUCT
        !          2697: C
        !          2698:       IF (LPT.GE.61) GO TO 50
        !          2699:       DO 40 KQ=LPT,60,4
        !          2700:         KK = KQ + 4
        !          2701:         DO 30 L=1,4
        !          2702:           LL = L + KQ - 1
        !          2703:           IF (LS(LL)) 10, 30, 10
        !          2704:    10     DO 20 K=KK,61,4
        !          2705:       IF (LS(K).EQ.LS(LL)) CALL ERROR1(
        !          2706:      *57H ILLEGAL TO CHANGE VALUE OF CONTROL VARIABLE OR DO LIMITS, 57)
        !          2707:    20     CONTINUE
        !          2708:    30   CONTINUE
        !          2709:    40 CONTINUE
        !          2710:    50 RETURN
        !          2711:       END
        !          2712: C XXXXXNEXTOK.f
        !          2713:       SUBROUTINE NEXTOK(K1, K2, CODE)
        !          2714:       INTEGER STMT, CODE, PSTMT
        !          2715:       COMMON /INPUT/ NSTMT, PSTMT, STMT(1327)
        !          2716: C
        !          2717: C     NEXT TOKEN IN STMT(K1)-STMT(K2-1). CODES ARE:
        !          2718: C     DIGIT STRING(1)
        !          2719: C     HOLLERITH(2)
        !          2720: C     IDENTIFIER(0)
        !          2721: C     SPECIAL CHARACTER(3)
        !          2722: C
        !          2723:       IF (STMT(K1).LT.0) GO TO 50
        !          2724:       IF (STMT(K1).GT.9) GO TO 20
        !          2725: C
        !          2726: C     DIGIT STRING
        !          2727: C
        !          2728:       CODE = 1
        !          2729:       K2 = K1 + 1
        !          2730:    10 IF (K2.EQ.NSTMT) GO TO 60
        !          2731:       IF ((STMT(K2).GT.9) .OR. (STMT(K2).LT.0)) GO TO 60
        !          2732:       K2 = K2 + 1
        !          2733:       GO TO 10
        !          2734:    20 IF (STMT(K1).GT.55) GO TO 40
        !          2735: C
        !          2736: C     IDENTIFIER
        !          2737: C
        !          2738:       CODE = 0
        !          2739:       K4 = K1 + 1
        !          2740:       K2 = K4
        !          2741:       DO 30 I=K4,NSTMT
        !          2742:         IF (STMT(I).GT.55 .OR. STMT(I).LT.0) GO TO 60
        !          2743:         K2 = K2 + 1
        !          2744:    30 CONTINUE
        !          2745: C
        !          2746: C
        !          2747: C     SPECIAL CHARACTER
        !          2748: C
        !          2749:    40 K2 = K1 + 1
        !          2750:       CODE = 3
        !          2751:       IF (STMT(K1).NE.66) GO TO 60
        !          2752:       IF (STMT(K2).EQ.66) K2 = K2 + 1
        !          2753:       GO TO 60
        !          2754: C
        !          2755: C     HOLLERITH
        !          2756: C
        !          2757:    50 CODE = 2
        !          2758:       K2 = K1 + 1
        !          2759:    60 RETURN
        !          2760:       END
        !          2761: C XXXXXOUTSYM.f
        !          2762:       SUBROUTINE OUTSYM
        !          2763:       INTEGER HASH, STACK, BL, DSA, OUTUT, SYMHD, BNEXT, SYMLEN, ATT(8)
        !          2764:       INTEGER CODE(11), CC(30), C(4), Q(70), SYM, PDSA
        !          2765:       INTEGER OUTUT2, OUTUT3, OUTUT4
        !          2766:       LOGICAL OK
        !          2767:       LOGICAL OPT, P1ERR, COMM
        !          2768:       COMMON /CHASH/ LHASH, HASH(401)
        !          2769:       COMMON /OPTNS/ OPT(5), P1ERR
        !          2770:       COMMON /CTABL/ LDSA, PDSA, DSA(5000)
        !          2771:       COMMON /PARAMS/ INUT, OUTUT, NOCHAR, SYMLEN, OUTUT2, OUTUT3,
        !          2772:      *    OUTUT4
        !          2773:       COMMON /TABL/ NEXT, LAB, SYM, BNEXT
        !          2774:       COMMON /FACTS/ NAME, NOST, ITYP, IASF
        !          2775:       COMMON /CEXPRS/ LSTACK, STACK(620)
        !          2776:       COMMON /TRANS/ Q
        !          2777:       DATA BL /1H /
        !          2778:       DATA CODE(1) /1HD/, CODE(2) /1HR/, CODE(3) /1HI/, CODE(4) /1HC/,
        !          2779:      *    CODE(5) /1HL/, CODE(11) /1HE/, CODE(7) /1HA/, CODE(8) /1HS/,
        !          2780:      *    CODE(9) /1HF/, CODE(10) /1HN/, CODE(6) /1HH/, C(1) /4/, C(2)
        !          2781:      *    /11/, C(3) /7/, C(4) /8/
        !          2782:       DATA CC(2), CC(16), CC(20), CC(22), CC(26), CC(28) /6*1H /,
        !          2783:      *    CC(3), CC(5), CC(9), CC(11) /1HF,1HS,1HF,1HF/, CC(1), CC(4) /
        !          2784:      *    1HU,1HA/, CC(6), CC(8), CC(10), CC(12), CC(14) /1HF,4*1HN/,
        !          2785:      *    CC(7), CC(13) /2*1HS/, CC(15) /1HC/, CC(17) /1HG/, CC(18) /
        !          2786:      *    1HT/, CC(19) /1HL/, CC(21) /1HV/, CC(25) /1HM/, CC(23) /1HB/,
        !          2787:      *    CC(24) /1HD/, CC(27) /1HE/
        !          2788:       DATA CC(29) /1HI/, CC(30) /1HF/
        !          2789: C
        !          2790: C     ROUTINE PRINTS OUT SYMBOL TABLE FOR A PROGRAM UNIT
        !          2791: C
        !          2792:       IF (NAME.EQ.0 .OR. .NOT.OPT(1)) RETURN
        !          2793:       II = IGATT1(NAME,8)
        !          2794:       CALL S5UNPK(DSA(NAME+4), STACK(1), 6)
        !          2795:       WRITE (OUTUT,99999) (STACK(I),I=1,6)
        !          2796: 99999 FORMAT (14H1PROGRAM UNIT , 5X, 6A1)
        !          2797:       IF (II.EQ.11 .OR. II.EQ.12 .OR. DSA(NAME+2).EQ.0) GO TO 60
        !          2798: C
        !          2799: C     PRINT FCN/SUBROUTINE ARGS
        !          2800: C
        !          2801:       KK = DSA(NAME+2)
        !          2802:       I = 0
        !          2803:    10 L = 20
        !          2804:       CALL RDLIST(KK, 9, M, 0)
        !          2805:       IF (M) 20, 60, 20
        !          2806:    20 DO 30 I1=1,M
        !          2807:         J = STACK(I1) + 4
        !          2808:         CALL S5UNPK(DSA(J), STACK(L), 6)
        !          2809:         L = L + 7
        !          2810:         STACK(L-1) = BL
        !          2811:    30 CONTINUE
        !          2812:       MM = M*7 + 19
        !          2813:       IF (I) 40, 40, 50
        !          2814:    40 WRITE (OUTUT,99998) (STACK(L),L=20,MM)
        !          2815: 99998 FORMAT (//10H ARGUMENTS, 9X, 63A1)
        !          2816:       I = 1
        !          2817:       GO TO 10
        !          2818:    50 WRITE (OUTUT,99997) (STACK(L),L=20,MM)
        !          2819: 99997 FORMAT (19X, 63A1)
        !          2820:       GO TO 10
        !          2821: C
        !          2822: C     PRINT SYMBOLS FOR PROGRAM UNIT
        !          2823: C
        !          2824:    60 CALL SORT(SYM, LBR)
        !          2825:       COMM = .FALSE.
        !          2826:       WRITE (OUTUT,99996)
        !          2827: 99996 FORMAT (//1X, 4HNAME, 5X, 4HTYPE, 2X, 3HUSE, 1X, 10HATTRIBUTES,
        !          2828:      *    1X, 10HREFERENCES//)
        !          2829:       DO 230 JBR=1,LBR
        !          2830:         SYMHD = HASH(JBR)
        !          2831:         DO 70 I=20,35
        !          2832:           STACK(I) = BL
        !          2833:    70   CONTINUE
        !          2834:         DO 80 I=1,8
        !          2835:           ATT(I) = IGATT1(SYMHD,I)
        !          2836:    80   CONTINUE
        !          2837: C     SKIPS OVER SYMBOL TABLE ENTRY FOR MAIN, BLOCK DATA,
        !          2838: C     AND CURRENT SUBROUTINE NAME
        !          2839:         IF (SYMHD.EQ.NAME .AND. ATT(8).NE.4) GO TO 230
        !          2840:         IF (ATT(8).NE.7) GO TO 90
        !          2841:         COMM = .TRUE.
        !          2842:         GO TO 230
        !          2843:    90   CALL S5UNPK(DSA(SYMHD+4), STACK(20), 6)
        !          2844:         I1 = ATT(8)
        !          2845:         L = 2*(I1+1) - 1
        !          2846:         STACK(28) = CC(L)
        !          2847:         STACK(29) = CC(L+1)
        !          2848: C     LEAVE BLANK IRRELEVANT TYPE INFO FOR EXT SUBR, COMMON, EXT ENTS
        !          2849:       IF(ATT(8).EQ.6 .OR. ATT(8).EQ.7 .OR. ATT(8).EQ.13)
        !          2850:      1 GOTO 100
        !          2851:       I1 = MOD(ATT(1),8)
        !          2852:       IF (ATT(1).GE.8) STACK(26)=CODE(11)
        !          2853:       STACK(27) = CODE(I1 + 1)
        !          2854:   100   DO 110 I=1,4
        !          2855:           L = I + 29
        !          2856:           J = C(I)
        !          2857:           IF (ATT(I+1).EQ.1) STACK(L) = CODE(J)
        !          2858:   110   CONTINUE
        !          2859:         IF (ATT(8).EQ.7) STACK(30) = BL
        !          2860:         IF (ATT(8).NE.10 .AND. ATT(8).NE.8) GO TO 140
        !          2861:         IF (ATT(7)) 120, 130, 120
        !          2862:   120   STACK(34) = CODE(7)
        !          2863:         J = ATT(7) + 1
        !          2864:         STACK(35) = Q(J)
        !          2865:         GO TO 140
        !          2866:   130   STACK(34) = CODE(8)
        !          2867: C
        !          2868: C     XREF LIST
        !          2869: C
        !          2870:   140   IF (OPT(2)) GO TO 160
        !          2871:   150   WRITE (OUTUT,99995) (STACK(L),L=20,35)
        !          2872:         GO TO 230
        !          2873:   160   OK = .FALSE.
        !          2874:         N = DSA(SYMHD+1)
        !          2875:         IF (N.LE.0) GO TO 150
        !          2876:       N = DSA( N+1 )
        !          2877:  170  CALL RFLIST( N, M, J, DSA(SYMHD+1) )
        !          2878: C
        !          2879: C     FIRST TIME PRINT WHOLE LINE
        !          2880: C
        !          2881:         K = M
        !          2882:         IF (M.GE.57) K = 57
        !          2883:         WRITE (OUTUT,99995) (STACK(L),L=20,35), (STACK(L),L=50,K)
        !          2884: 99995   FORMAT (1X, 6A1, 5X, 2A1, 3X, 2A1, 3X, 6A1, 2X, 8(I5, 1X))
        !          2885:         IF (M-57) 220, 220, 180
        !          2886:   180   L = (M-57)/8
        !          2887:         LL = 58
        !          2888:         IF (L) 220, 210, 190
        !          2889:   190   DO 200 K=1,L
        !          2890:           LK = LL + 7
        !          2891:           WRITE (OUTUT,99994) (STACK(I),I=LL,LK)
        !          2892:           LL = LK + 1
        !          2893:   200   CONTINUE
        !          2894:         IF (LK.EQ.M) GO TO 220
        !          2895:   210   WRITE (OUTUT,99994) (STACK(I),I=LL,M)
        !          2896: 99994   FORMAT (30X, 8(I5, 1X))
        !          2897: C
        !          2898: C     MAY HAVE TO CALL REFLIST AGAIN
        !          2899: C
        !          2900:   220   IF (J) 230, 230, 170
        !          2901:   230 CONTINUE
        !          2902: C
        !          2903: C     PRINT LABELS
        !          2904: C
        !          2905:       IF (LAB.EQ.0) GO TO 320
        !          2906:       CALL SORT(LAB, LBR)
        !          2907:       DO 310 JBR=1,LBR
        !          2908:         LABHD = HASH(JBR)
        !          2909:         CALL S5UNPK(DSA(LABHD+4), STACK(20), 6)
        !          2910:         OK = .FALSE.
        !          2911:         IF (OPT(2)) GO TO 240
        !          2912:         WRITE (OUTUT,99993) (STACK(L),L=20,25)
        !          2913:         GO TO 310
        !          2914:   240   II = DSA(LABHD+1)
        !          2915:       II = DSA(II+1)
        !          2916:  250  CALL RFLIST(II, M, J, DSA(LABHD+1) )
        !          2917:         K = M
        !          2918:         IF (M.GE.57) K = 57
        !          2919:         WRITE (OUTUT,99993) (STACK(I),I=20,25), (STACK(I),I=50,K)
        !          2920: 99993   FORMAT (1X, 6A1, 23X, 8(I5, 1X))
        !          2921:         IF (M-57) 300, 300, 260
        !          2922:   260   L = (M-57)/8
        !          2923:         LL = 58
        !          2924:         IF (L) 300, 290, 270
        !          2925:   270   DO 280 K=1,L
        !          2926:           LK = LL + 7
        !          2927:           WRITE (OUTUT,99992) (STACK(I),I=LL,LK)
        !          2928:           LL = LK + 1
        !          2929:   280   CONTINUE
        !          2930:         IF (LK.EQ.M) GO TO 300
        !          2931:   290   WRITE (OUTUT,99992) (STACK(I),I=LL,M)
        !          2932: 99992   FORMAT (30X, 8(I5, 1X))
        !          2933:   300   IF (J) 310, 310, 250
        !          2934:   310 CONTINUE
        !          2935:   320 IF (.NOT.COMM) GO TO 390
        !          2936:       CALL SORT(SYM, LBR)
        !          2937:       WRITE (OUTUT,99991)
        !          2938: 99991 FORMAT (//14H COMMON BLOCKS//)
        !          2939:       DO 380 JBR=1,LBR
        !          2940:         SYMHD = HASH(JBR)
        !          2941:         I = IGATT1(SYMHD,8)
        !          2942:         IF (I.NE.7) GO TO 380
        !          2943:         CALL S5UNPK(DSA(SYMHD+4), STACK(100), 6)
        !          2944:         N = 0
        !          2945:         II = DSA(SYMHD+2)
        !          2946:   330   L = 11
        !          2947:         CALL RDLIST(II, 10, M, 0)
        !          2948:         IF (M) 340, 380, 340
        !          2949:   340   DO 350 I=1,M
        !          2950:           J = STACK(I) + 4
        !          2951:           CALL S5UNPK(DSA(J), STACK(L), 6)
        !          2952:           L = L + 7
        !          2953:           STACK(L-1) = BL
        !          2954:   350   CONTINUE
        !          2955:         L = L - 1
        !          2956:         IF (N) 360, 360, 370
        !          2957:   360   WRITE (OUTUT,99990) (STACK(I),I=100,105), (STACK(I),I=11,L)
        !          2958: 99990   FORMAT (1X, 6A1, 3X, 70A1)
        !          2959:         N = 1
        !          2960:         GO TO 330
        !          2961:   370   WRITE (OUTUT,99989) (STACK(K),K=11,L)
        !          2962: 99989   FORMAT (10X, 70A1)
        !          2963:         GO TO 330
        !          2964:   380 CONTINUE
        !          2965:   390 RETURN
        !          2966:       END
        !          2967: C XXXXXPOP.f
        !          2968:       SUBROUTINE POP
        !          2969:       LOGICAL ERR, SYSERR, ABORT
        !          2970:       INTEGER PB, PT, STACK, OP(12), EX(4,4), AO(4,4), RO(3,3)
        !          2971:       COMMON /CEXPRS/ LSTACK, STACK(620)
        !          2972:       COMMON /EXPRS/ PT, PB, AO, RO, EX
        !          2973:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !          2974:       DATA OP(1), OP(3), OP(7), OP(9), OP(10), OP(11) /6*2/, OP(4) /1/,
        !          2975:      *    OP(5) /0/, OP(6), OP(8), OP(2) /3*-1/, OP(12) /1/
        !          2976: C
        !          2977: C     JOB OF SUBROUTINE IS TO POP THE STACK;  DOES ALL POPS
        !          2978: C     EXCEPT REMOVAL OF "FCN(" CONSTRUCTION
        !          2979: C     OP(I) CONTAINS NUM OF ARGS OF OPERATER I  PB CHECKED BEFORE
        !          2980: C     CALLING POP; POP CHECKS PT; ERROR RETURNS FROM THIS ROUTINE STOP
        !          2981: C     EXPRESSION PROCESSING (I.E. ERR=.TRUE.)
        !          2982: C
        !          2983:       ERR = .FALSE.
        !          2984:       I = STACK(PB+1)
        !          2985:       K = OP(I-10)
        !          2986:       IF (K) 190, 180, 10
        !          2987:    10 L = PT - 1
        !          2988:       KQ = K
        !          2989:    20 IF (K) 80, 80, 30
        !          2990:    30 IF (STACK(L)/8.EQ.1) GO TO 220
        !          2991:       IF (STACK(L).GE.8 .OR. STACK(L-1).EQ.0) GO TO 40
        !          2992:       J = IGATT1(STACK(L-1),8)
        !          2993:       IF (J.EQ.0) CALL SATT1(STACK(L-1), 8, 10)
        !          2994:    40 GO TO (60, 50), K
        !          2995:    50 K1 = MOD(STACK(L),8) + 1
        !          2996:       GO TO 70
        !          2997:    60 K2 = MOD(STACK(L),8) + 1
        !          2998:    70 L = L - 2
        !          2999:       K = K - 1
        !          3000:       GO TO 20
        !          3001: C
        !          3002: C     11 +,- 12 ) 13 ** 14 .NOT. 15 ( 16 FCN( 17 *,/ 18 ,
        !          3003: C     19 .AND. 20 .OR. 21 .EQ.  22 UNARY +,-
        !          3004: C
        !          3005:    80 L = I - 10
        !          3006:       GO TO (90, 190, 120, 150, 190, 190, 90, 190, 130, 130, 100, 140),
        !          3007:      *    L
        !          3008:    90 IF (K1.GT.4 .OR. K2.GT.4) GO TO 210
        !          3009:       KK = AO(K1,K2)
        !          3010:       GO TO 160
        !          3011:   100 IF (K1.GT.3 .OR. K2.GT.3) GO TO 110
        !          3012:       KK = RO(K1,K2)
        !          3013:       GO TO 160
        !          3014:   110 IF ((K1.NE.6 .OR. K2.NE.6) .AND. (K1.NE.6 .OR. K2.NE.3) .AND.
        !          3015:      *    (K1.NE.3 .OR. K2.NE.6) ) GO TO 210
        !          3016:       KK = 4
        !          3017:       GO TO 160
        !          3018:   120 IF (K1.GT.4 .OR. K2.GT.4) GO TO 210
        !          3019:       KK = EX(K2,K1)
        !          3020:       GO TO 160
        !          3021:   130 KK = 4
        !          3022:       IF (K1.NE.5 .OR. K2.NE.5) GO TO 210
        !          3023:       GO TO 160
        !          3024:   140 KK = K2 - 1
        !          3025:       IF (KK.LT.0 .OR. KK.GT.3) GO TO 210
        !          3026:       GO TO 160
        !          3027:   150 IF (K2.NE.5) GO TO 210
        !          3028:       KK = 4
        !          3029:   160 IF (-1.EQ.KK) GO TO 210
        !          3030: C
        !          3031: C     STORE ON STACK 0 TO SHOW EXPRESSION RESULT(NO DSA INDEX)
        !          3032: C     ALSO STORE TYPE OF RESULTING OPERAND
        !          3033: C
        !          3034:       PT = PT - 2*KQ
        !          3035:       STACK(PT) = 0
        !          3036:       STACK(PT+1) = KK
        !          3037:       PT = PT + 2
        !          3038:       PB = PB + 1
        !          3039:   170 RETURN
        !          3040: C
        !          3041: C     POPPING "("
        !          3042: C
        !          3043:   180 PB = PB + 1
        !          3044:       GO TO 170
        !          3045:   190 CALL ERROR1(25H ILLEGAL ELEMENT ON STACK, 25)
        !          3046:   200 ERR = .TRUE.
        !          3047:       RETURN
        !          3048:   210 CALL ERROR1(34H ILLEGAL COMBINATION OF DATA TYPES, 34)
        !          3049:       GO TO 200
        !          3050:   220 CALL ERROR1(21H ILLEGAL USE OF ARRAY, 21)
        !          3051:       GO TO 200
        !          3052:       END
        !          3053: C XXXXXRDLIST.f
        !          3054:       SUBROUTINE RDLIST(HEAD, L, N, M)
        !          3055: C
        !          3056: C     HEAD IS THE HEAD OF A LINEAR LINKED LIST IN DSA
        !          3057: C     L IS  MAX NUMBER OF ITEMS DESIRED
        !          3058: C     N IS NUMBER OF ITEMS RETURNED
        !          3059: C     M IS END OF LIST MARKER
        !          3060: C
        !          3061:       INTEGER HEAD, STACK, DSA, PDSA
        !          3062:       COMMON /CTABL/ LDSA, PDSA, DSA(5000)
        !          3063:       COMMON /CEXPRS/ LSTACK, STACK(620)
        !          3064:       N = 0
        !          3065:    10 IF (HEAD.EQ.M .OR. N.GE.L) GO TO 20
        !          3066:       N = N + 1
        !          3067:       STACK(N) = DSA(HEAD)
        !          3068:       HEAD = DSA(HEAD+1)
        !          3069:       GO TO 10
        !          3070:    20 RETURN
        !          3071:       END
        !          3072: C XXXXXRFLIST.f
        !          3073:       SUBROUTINE RFLIST( I1, I2, I4, I3 )
        !          3074: C
        !          3075: C     I1 IS POINTER TO FIRST ELEMENT ON XREF LIST IN DSA
        !          3076: C     I2 IS COUNT OF HOW MANY REFS ARE RETURNED IN STACK
        !          3077: C     I4 IS 1 IF RFLIST MUST BE CALLED AGAIN; ELSE IS 0
        !          3078: C     I3 IS LAST OF LIST ELEMENTS
        !          3079: C
        !          3080:       INTEGER DSA, PDSA, STACK
        !          3081:       COMMON /CTABL/ LDSA, PDSA, DSA(5000)
        !          3082:       COMMON /CEXPRS/ LSTACK, STACK(620)
        !          3083:       I4 = 0
        !          3084:       I2 = 49
        !          3085:  10   IF ( I2+1.GE.LSTACK ) GOTO 30
        !          3086:       I2 = I2 + 1
        !          3087:       STACK(I2) = DSA(I1)
        !          3088:       IF( I1.EQ.I3 ) GOTO 20
        !          3089:       I1 = DSA(I1+1)
        !          3090:       GOTO 10
        !          3091:    20 RETURN
        !          3092:    30 I4 = 1
        !          3093:       GO TO 20
        !          3094:       END
        !          3095: C XXXXXSEPAR.f
        !          3096:       SUBROUTINE SEPAR(ICHAR)
        !          3097: C
        !          3098: C      FINDS SEPARATER CONSTRUCT IN FORMAT STMTS
        !          3099: C     SEPARATER IS A  COMBINATION OF "/" AND ","
        !          3100: C     ",," IS ALWAYS ILLEGAL IN A SEPARATER
        !          3101: C     MIXING OF "/" AND "," IS WARNED AGAINST
        !          3102: C
        !          3103: C     ICHAR CONTAINS LENGTH OF SEPARATOR FOUND
        !          3104:       INTEGER PSTMT, STMT
        !          3105:       COMMON /INPUT/ NSTMT, PSTMT, STMT(1327)
        !          3106:       ICHAR = PSTMT
        !          3107:       ICOM = 0
        !          3108: C
        !          3109: C     " , "
        !          3110: C
        !          3111:    10 IF (STMT(PSTMT).NE.68) GO TO 20
        !          3112:       ICOM = ICOM + 1
        !          3113: C
        !          3114: C      CHECK FOR ",,"
        !          3115: C
        !          3116:       PSTMT = PSTMT + 1
        !          3117:       IF (STMT(PSTMT).EQ.68) GO TO 30
        !          3118:    20 IF (STMT(PSTMT).NE.67) GO TO 50
        !          3119:       PSTMT = PSTMT + 1
        !          3120:       GO TO 10
        !          3121:    30 CALL ERROR1(19H ILLEGAL ADJACENT ,, 19)
        !          3122: C
        !          3123: C      FLUSH TO NEXT NON-SEPARATER
        !          3124: C
        !          3125:    40 PSTMT = PSTMT + 1
        !          3126:       IF (STMT(PSTMT).EQ.67 .OR. STMT(PSTMT).EQ.68) GO TO 40
        !          3127:    50 ICHAR = PSTMT - ICHAR
        !          3128:       IF (ICOM.GT.0 .AND. ICHAR.GT.1) CALL ERROR1(
        !          3129:      *    36H ILLEGAL MIXING OF / AND , IN FORMAT, 36)
        !          3130:       RETURN
        !          3131:       END
        !          3132: C XXXXXSETNAM.f
        !          3133:       SUBROUTINE SETNAM(KK)
        !          3134:       LOGICAL ERR, SYSERR, ABORT
        !          3135:       INTEGER STMT, PSTMT, S(5)
        !          3136:       COMMON /FACTS/ NAME, NOST, ITYP, IASF
        !          3137:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !          3138:       COMMON /INPUT/ NSTMT, PSTMT, STMT(1327)
        !          3139:       DATA S(1) /66/, S(2) /42/, S(3) /30/, S(4) /38/, S(5) /43/
        !          3140: C
        !          3141: C     KK=11 FOR BLOCK DATA PGM;  KK=12 FOR MAIN PGM
        !          3142: C     NAME POINTS TO SYMBOL TABLE ENTRY FOR NEW PGM
        !          3143: C
        !          3144:       IF (KK.EQ.11) GO TO 30
        !          3145:       PSTMT = 1
        !          3146:       DO 10 I=1,5
        !          3147:         STMT(I) = S(I)
        !          3148:    10 CONTINUE
        !          3149:       NAME = LOOKUP(6,.FALSE.)
        !          3150:       IF (SYSERR) RETURN
        !          3151:       CALL SATT1(NAME, 8, 12)
        !          3152:    20 RETURN
        !          3153:    30 PSTMT = 5
        !          3154:       STMT(PSTMT) = S(1)
        !          3155:       NAME = LOOKUP(11,.FALSE.)
        !          3156:       IF (SYSERR) RETURN
        !          3157:       CALL SATT1(NAME, 8, 11)
        !          3158:       GO TO 20
        !          3159:       END
        !          3160: C XXXXXSORT.f
        !          3161:       SUBROUTINE SORT(IPT, L)
        !          3162:       EXTERNAL EXCH
        !          3163:       INTEGER HASH, PDSA, DSA
        !          3164:       COMMON /CHASH/ LHASH, HASH(401)
        !          3165:       COMMON /CTABL/ LDSA, PDSA, DSA(5000)
        !          3166: C
        !          3167: C     PUT ALL SUMBOL INDICES IN HASH TABLE TO SORT THEM
        !          3168: C
        !          3169:       L = 0
        !          3170:       I = IPT
        !          3171:    10 IF (I.EQ.0) GO TO 20
        !          3172:       L = L + 1
        !          3173:       HASH(L) = I
        !          3174:       I = DSA(I+3)
        !          3175:       GO TO 10
        !          3176: C
        !          3177: C     CALL SORT ROUTINE
        !          3178: C     UPON RETURN HASH CONTAINS INDICES OF ALL SYMBOLS OR LABELS IN
        !          3179: C     DSA IN LEXICOGRAPHIC ORDER
        !          3180: C
        !          3181:    20 CALL SSORT(EXCH, DSA, LDSA, HASH, L, 4)
        !          3182:       RETURN
        !          3183:       END
        !          3184: C XXXXXSUBS.f
        !          3185:       SUBROUTINE SUBS(K2, NO)
        !          3186:       INTEGER STMT, PSTMT
        !          3187:       LOGICAL ERR, SYSERR, ABORT, TOKPNO
        !          3188:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !          3189:       COMMON /INPUT/ NSTMT, PSTMT, STMT(1327)
        !          3190: C
        !          3191: C     STMT(PSTMT)-STMT(K2-1) CONTAIN SUBSCRIPT CONSTRUCT
        !          3192: C     NO IS NUMBER OF SUBSCRIPTS EXPECTED
        !          3193: C     ROUTINE CHECKS SYNTAX AND NUMBER OF SUBSCRIPTS
        !          3194: C     IF FLUSH OF CONSTRUCT IS NECESSARY, AND NSTMT IS REACHED
        !          3195: C     ERR=.TRUE.
        !          3196: C
        !          3197:       ICNT = 0
        !          3198:    10 CALL NEXTOK(PSTMT, K2, K)
        !          3199:       IF (K.EQ.0) GO TO 70
        !          3200:       IF (TOKPNO(PSTMT,K2,LL)) GO TO 60
        !          3201:    20 CALL ERROR1(28H ILLEGAL SYNTAX OF SUBSCRIPT, 28)
        !          3202: C
        !          3203: C     FLUSH TO END OF SUBSCRIPT CONSTRUCTION
        !          3204: C
        !          3205:    30 IF (STMT(K2).EQ.62) GO TO 40
        !          3206:       K2 = K2 + 1
        !          3207:       IF (K2.LT.NSTMT) GO TO 30
        !          3208:       ERR = .TRUE.
        !          3209:       GO TO 50
        !          3210:    40 K2 = K2 + 1
        !          3211:    50 RETURN
        !          3212:    60 IF (STMT(K2).NE.66) GO TO 130
        !          3213:       PSTMT = K2 + 1
        !          3214:       IF (PSTMT.GE.NSTMT) GO TO 20
        !          3215:       CALL NEXTOK(PSTMT, K2, K)
        !          3216:       IF (K.NE.0) GO TO 20
        !          3217: C
        !          3218: C     ACESS SYMBOL TABLE ENTRY FOR VARIABLE TO DETERMINE
        !          3219: C     USAGE AND TYPE
        !          3220: C
        !          3221:    70 KQ = LOOKUP(K2,.FALSE.)
        !          3222:       IF (SYSERR) GO TO 30
        !          3223:       I1 = IGATT1(KQ,1)
        !          3224:       I1 = MOD(I1,8)
        !          3225:       I2 = IGATT1(KQ,7)
        !          3226:       I3 = IGATT1(KQ,8)
        !          3227:       IF (I3.EQ.0) GO TO 90
        !          3228:       IF (I3.EQ.10) GO TO 100
        !          3229:    80 CALL ERROR1(43H ILLEGAL VARIABLE IN SUBSCRIPT CONSTRUCTION, 43)
        !          3230:       GO TO 120
        !          3231:    90 CALL SATT1(KQ, 8, 10)
        !          3232: C
        !          3233: C     IMPLICITLY TYPE VARIABLES FIRST ENCOUNTERED IN SUBSCRIPT
        !          3234: C     CONSTRUCT
        !          3235: C
        !          3236:   100 IF (I1.GT.0) GO TO 110
        !          3237:       I1 = 1
        !          3238:       IF (STMT(PSTMT).GE.38 .AND. STMT(PSTMT).LE.43) I1 = 2
        !          3239:       CALL SATT1(KQ, 1, I1)
        !          3240:   110 IF (I2.NE.0 .OR. I1.NE.2) GO TO 80
        !          3241:   120 IF (STMT(K2).NE.60 .AND. STMT(K2).NE.61) GO TO 130
        !          3242:       CALL NEXTOK(K2+1, K3, K)
        !          3243:       IF (K.NE.1) GO TO 20
        !          3244:       K2 = K3
        !          3245:   130 ICNT = ICNT + 1
        !          3246:       IF (STMT(K2).EQ.68) GO TO 140
        !          3247:       IF (STMT(K2).NE.62) GO TO 20
        !          3248:       IF (NO.NE.ICNT) CALL ERROR1(34H INCOMPATIBLE NUMBER OF SUBSCRIPTS,
        !          3249:      *    34)
        !          3250:       IF (ICNT.GT.3) CALL ERROR1(20H TOO MANY SUBSCRIPTS, 20)
        !          3251:       GO TO 40
        !          3252:   140 PSTMT = K2 + 1
        !          3253:       IF (PSTMT.GE.NSTMT) GO TO 20
        !          3254:       GO TO 10
        !          3255:       END
        !          3256: C XXXXXSUBFCN.f
        !          3257:       SUBROUTINE SUBFCN(TYPE)
        !          3258: C
        !          3259: C     TYPE IS EXPLICIT TYPE OF FUNCTION, ELSE IS -1
        !          3260: C     ALL FCNS GIVEN EXPLICIT TYPE SINCE FCN NAME CANNOT APPEAR IN
        !          3261: C     NONEXECUTABLE STMT WITHIN FCN SUBPRGM EXCEPT HEAD STMT
        !          3262: C     ROUTINES DEFINES SUBROUTINE AND FUNCTION NAMES AND CREATES
        !          3263: C     LINKED LISTS OF POINTERS TO THEIR ARGUMENTS IN DSA.
        !          3264: C     SETS NAME TO POINT TO CURRENT FUNCN OR SUBRTNE.  IN CASE
        !          3265: C     OF BAD SYNTAX IN NAME CONSTRUCT OR FCN WITHOUT PARAMS.,
        !          3266: C     PROGRAM UNIT BECOMES MAIN PGM BY DEFAULT
        !          3267: C
        !          3268:       INTEGER STMT, PSTMT, DSA, SYMHD, TYPE, BNEXT, S(5), PDSA
        !          3269:       LOGICAL ERR, SYSERR, ABORT
        !          3270:       COMMON /INPUT/ NSTMT, PSTMT, STMT(1327)
        !          3271:       COMMON /FACTS/ NAME, NOST, ITYP, IASF
        !          3272:       COMMON /TABL/ NEXT, LABHD, SYMHD, BNEXT
        !          3273:       COMMON /CTABL/ LDSA, PDSA, DSA(5000)
        !          3274:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !          3275:       DATA S(1) /66/, S(2) /42/, S(3) /30/, S(4) /38/, S(5) /43/
        !          3276:       KCELL = 0
        !          3277:       CALL NEXTOK(PSTMT, K2, I1)
        !          3278:       IF (I1.NE.0) GO TO 120
        !          3279: C
        !          3280: C     SET FCN OR SUBR USE IN SYMBOL TABLE. TYPE FCN AND RECORD EXPLICIT
        !          3281: C     OR IMPLICIT TYPE
        !          3282: C
        !          3283:       K = LOOKUP(K2,.FALSE.)
        !          3284:       IF (SYSERR) GO TO 90
        !          3285:       NAME = K
        !          3286:       L = ITYP - 8
        !          3287:       GO TO (10, 20), L
        !          3288:    10 CALL SATT1(K, 8, 3)
        !          3289:       GO TO 40
        !          3290:    20 CALL SATT1(K, 8, 4)
        !          3291:       IF (TYPE.LT.0) GO TO 30
        !          3292:       CALL SATT1(K, 1, TYPE+8)
        !          3293:       GO TO 40
        !          3294:    30 L = 1
        !          3295:       IF (STMT(PSTMT).GE.38 .AND. STMT(PSTMT).LE.43) L = 2
        !          3296:       CALL SATT1(K, 1, L)
        !          3297:    40 IF (STMT(K2).NE.65) GO TO 140
        !          3298:    50 PSTMT = K2 + 1
        !          3299:       IF (PSTMT.GE.NSTMT) GO TO 120
        !          3300:       CALL NEXTOK(PSTMT, K2, L)
        !          3301:       IF (L.NE.0) GO TO 80
        !          3302: C
        !          3303: C     ENTER PARAMETER IN SYMBOL TABLE; TYPE IMPLICITLY; ADD ONTO PARAM
        !          3304: C     LIST HANGING OFF SUBR/FCN NAME; SET DUMMYARG BIT ON; DO NOT SET
        !          3305: C     USAGE
        !          3306: C
        !          3307:       N = LOOKUP(K2,.FALSE.)
        !          3308:       IF (SYSERR) GO TO 90
        !          3309:       I2 = IGATT1(N,4)
        !          3310:       I1 = IGATT1(N,8)
        !          3311:       IF (I1.NE.0 .OR. I2.NE.0) GO TO 80
        !          3312:       L = 1
        !          3313:       IF (STMT(PSTMT).GE.38 .AND. STMT(PSTMT).LE.43) L = 2
        !          3314:       CALL SATT1(N, 1, L)
        !          3315:       L = IGATT1(N,4)
        !          3316:       IF (L.EQ.1) GO TO 80
        !          3317:       CALL SATT1(N, 4, 1)
        !          3318:       IF (NEXT+2.GE.BNEXT) GO TO 150
        !          3319:       IF (KCELL.EQ.0) GO TO 60
        !          3320:       DSA(KCELL+1) = NEXT
        !          3321:       GO TO 70
        !          3322: C
        !          3323: C     START PARAM LIST
        !          3324: C
        !          3325:    60 DSA(K+2) = NEXT
        !          3326:    70 KCELL = NEXT
        !          3327:       DSA(NEXT) = N
        !          3328:       DSA(NEXT+1) = 0
        !          3329:       NEXT = NEXT + 2
        !          3330: C
        !          3331: C     SEARCH FOR  ")" OR ","
        !          3332: C
        !          3333:       IF (STMT(K2).EQ.62) GO TO 100
        !          3334:       IF (STMT(K2).EQ.68) GO TO 50
        !          3335:    80 CALL ERROR1(33H ILLEGAL SYNTAX IN PARAMETER LIST, 33)
        !          3336:    90 RETURN
        !          3337:   100 K2 = K2 + 1
        !          3338:   110 IF (K2.EQ.NSTMT) GO TO 90
        !          3339:       CALL ERROR1(39H ILLEGAL CHARACTERS AFTER SUBR/FCN HEAD, 39)
        !          3340:       GO TO 90
        !          3341:   120 CALL ERROR1(15H ILLEGAL SYNTAX, 15)
        !          3342:       PSTMT = 6
        !          3343:       DO 130 I1=1,5
        !          3344:         STMT(I1+5) = S(I1)
        !          3345:   130 CONTINUE
        !          3346:       NAME = LOOKUP(11,.FALSE.)
        !          3347:       IF (SYSERR) GO TO 90
        !          3348:       CALL SATT1(NAME, 8, 11)
        !          3349:       GO TO 90
        !          3350:   140 IF (ITYP.EQ.9) GO TO 110
        !          3351:       CALL ERROR1(20H NO PARAMS SPECIFIED, 20)
        !          3352:       GO TO 120
        !          3353:   150 SYSERR = .TRUE.
        !          3354:       CALL ERROR1(33H IN SUBFCN, TABLE OVERFLOW OF DSA,33)
        !          3355:       GO TO 90
        !          3356:       END
        !          3357: C XXXXXTOKCOM.f
        !          3358:       LOGICAL FUNCTION TOKCOM(K1, K2)
        !          3359: C
        !          3360: C     TOKCOM RETURNS TRUE IS FINDS CONST IN STMT(K1)-STMT(K2-1)
        !          3361: C     ( (OPTIONAL SIGN) REAL CONST, (OPTIONAL SIGN) REAL CONST )  IS
        !          3362: C     COMPLEX CONSTRUCT; TOKCOM RESETS K2
        !          3363: C
        !          3364:       LOGICAL TOKRL
        !          3365:       INTEGER STMT, PSTMT
        !          3366:       COMMON /INPUT/ NSTMT, PSTMT, STMT(1327)
        !          3367:       TOKCOM = .FALSE.
        !          3368:       IF (STMT(K1).NE.65) GO TO 10
        !          3369:       K3 = K1 + 1
        !          3370:       IF (STMT(K3).EQ.60 .OR. STMT(K3).EQ.61) K3 = K3 + 1
        !          3371:       IF (TOKRL(K3,K2,K)) IF (K-1) 10, 20, 10
        !          3372:    10 RETURN
        !          3373:    20 IF (STMT(K2).NE.68) GO TO 10
        !          3374:       K3 = K2 + 1
        !          3375:       IF (STMT(K3).EQ.60 .OR. STMT(K3).EQ.61) K3 = K3 + 1
        !          3376:       IF (TOKRL(K3,K2,K)) IF (K-1) 10, 30, 10
        !          3377:       GO TO 10
        !          3378:    30 IF (STMT(K2).NE.62) GO TO 10
        !          3379:       K2 = K2 + 1
        !          3380:       TOKCOM = .TRUE.
        !          3381:       GO TO 10
        !          3382:       END
        !          3383: C XXXXXTOKLAB.f
        !          3384:       LOGICAL FUNCTION TOKLAB(K1, K2, KK, DEF)
        !          3385:       INTEGER STMT, PSTMT, SYMHD, DSA, PDSA, BNEXT, DOPT, DOLIST
        !          3386:       LOGICAL DEF, NON0, SYSERR, ABORT, ERR
        !          3387:       COMMON /INPUT/ NSTMT, PSTMT, STMT(1327)
        !          3388:       COMMON /TABL/ NEXT, LABHD, SYMHD, BNEXT
        !          3389:       COMMON /CTABL/ LDSA, PDSA, DSA(5000)
        !          3390:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !          3391:       COMMON /DOS/ DOPT, LDO, DOLIST(192)
        !          3392:       COMMON /FACTS/ NAME, NOST, ITYPE, IASF
        !          3393: C
        !          3394: C     LOOKS FOR DEFNS OF LABEL IF DEF = .TRUE., ELSE LOOKS FOR
        !          3395: C     REFS. IF IT FINDS A LABEL TOKLAB=.TRUE.
        !          3396: C     IN REFERENCE LABEL IS IN STMT(PSTMT)-STMT(K2-1)
        !          3397: C     IN DEFN LABEL IS IN STMT(1)-STMT(K2-1)
        !          3398: C     KK IS SYMBOL TABLE INDEX OF LABEL
        !          3399: C     K1 IS TYPE OF LABEL EXPECTED OR DEFINED--1-EXECUTABLE
        !          3400: C     2-NONEXECUTABLE, 3-FORMAT
        !          3401: C     IN REF, ROUTINE SETS USAGE OF SYMBOL AND CHECKS FOR
        !          3402: C     COMPATIBLE REFERENCES(I.E. GOTO 5 AND WRITE(6,5) ARE INCOMPAT.)
        !          3403: C     IN DEF, ROUTINE SETS USAGE OF SYMBOL, CHECKS FOR DUPLICATE
        !          3404: C     DEFNS, CHECKS FOR COMPATIBLITY BETWEEN DEFN AND PREVIOUS
        !          3405: C     REFS, CREATES SCOPE AREA FOR LABEL INITIALIZING WORD1 TO
        !          3406: C     CURRENT HEADING STMT NO ON DOLIST AND WORD2 TO CURRENT LEVEL
        !          3407: C     IN REFS AND DEFS LABELS MUST BE POSITIVE NUMBERS
        !          3408: C
        !          3409:       TOKLAB = .FALSE.
        !          3410:       IF (DEF) GO TO 80
        !          3411:       NON0 = .FALSE.
        !          3412:       J = PSTMT + 4
        !          3413:       IF (J.GT.NSTMT) J = NSTMT
        !          3414:       K3 = PSTMT
        !          3415:       DO 10 K2 = PSTMT,J
        !          3416:         IF(STMT(K2).GT.9 .OR. STMT(K2).LT.0) GOTO 60
        !          3417:         IF(STMT(K2) .GT. 0) NON0 = .TRUE.
        !          3418:         IF(.NOT.NON0) K3 = K3+1
        !          3419:  10   CONTINUE
        !          3420:       K2 = J+1
        !          3421:       IF(.NOT.NON0) GOTO 70
        !          3422: C     NOTE CAN CHANGE PSTMT HERE BECAUSE WE KNOW WE HAVE A LAB
        !          3423:  20   PSTMT = K3
        !          3424:       KK = LOOKUP(K2,.TRUE.)
        !          3425:       IF (SYSERR) GO TO 50
        !          3426:       IF (ITYPE.EQ.14) DSA(BNEXT+1) = -DSA(BNEXT+1)
        !          3427:       I = IGATT1(KK,8)
        !          3428:       IF (I.EQ.0) CALL SATT1(KK, 8, 9)
        !          3429:       I1 = IGATT1(KK,1)
        !          3430:       IF (I1.NE.0) GO TO 30
        !          3431:       CALL SATT1(KK, 1, K1)
        !          3432:       GO TO 40
        !          3433:    30 IF (K1.NE.I1) CALL ERROR1(30H INCOMPATIBLE LABEL REFERENCES, 30)
        !          3434:    40 TOKLAB = .TRUE.
        !          3435:    50 RETURN
        !          3436:    60 IF (K2.EQ.PSTMT) GO TO 50
        !          3437:       IF (NON0) GO TO 20
        !          3438:    70 CALL ERROR1(30H LABEL MUST BE POSITIVE NUMBER, 30)
        !          3439:       GO TO 50
        !          3440: C
        !          3441: C     TAKES DEF OF LABEL; CHECKS FOR DUPLICATE DEFS.; SETS DEFINED
        !          3442: C     BIT IN SYMBOL TABLE;  STORES BEGINNING BINDING STMT NO
        !          3443: C
        !          3444:    80 K2 = 0
        !          3445:       NON0 = .FALSE.
        !          3446:       DO 90 I=1,5
        !          3447:         IF (STMT(I).EQ.69) GO TO 90
        !          3448:         IF ((STMT(I).GT.9) .OR. (STMT(I).LT.0)) GO TO 140
        !          3449:         IF (STMT(I).GT.0) NON0 = .TRUE.
        !          3450:         IF (.NOT.NON0) GO TO 90
        !          3451:         K2 = K2 + 1
        !          3452:         STMT(K2) = STMT(I)
        !          3453:    90 CONTINUE
        !          3454:       IF (K2.EQ.0) GO TO 50
        !          3455:       IF (.NOT.NON0) GO TO 70
        !          3456:       K2 = K2 + 1
        !          3457:       KK = LOOKUP(K2,.TRUE.)
        !          3458:       IF (SYSERR) GO TO 50
        !          3459:       I = IGATT1(KK,2)
        !          3460:       IF (I.EQ.1) GO TO 120
        !          3461:       CALL SATT1(KK, 2, 1)
        !          3462:       CALL SATT1(KK, 8, 9)
        !          3463:       I1 = IGATT1(KK,1)
        !          3464:       IF (I1.EQ.0) GO TO 100
        !          3465:       IF (I1.EQ.K1) GO TO 110
        !          3466:       CALL ERROR1(44H ILLEGAL REFERENCE TO LABEL IN PREVIOUS CODE, 44)
        !          3467:   100 CALL SATT1(KK, 1, K1)
        !          3468:   110 IF (K1.NE.1) GO TO 40
        !          3469:       IF (NEXT+2.GE.BNEXT) GO TO 130
        !          3470:       DSA(KK+2) = NEXT
        !          3471:       DSA(NEXT) = DOLIST(DOPT)
        !          3472:       DSA(NEXT+1) = -DOPT/6
        !          3473:       NEXT = NEXT + 2
        !          3474:       GO TO 40
        !          3475:   120 CALL ERROR1(16H DUPLICATE LABEL, 16)
        !          3476:       GO TO 50
        !          3477:   130 CALL ERROR1(33H IN TOKLAB, TABLE OVERFLOW OF DSA, 33)
        !          3478:       SYSERR = .TRUE.
        !          3479:       GO TO 50
        !          3480:   140 CALL ERROR1(24H ILLEGAL SYMBOL IN LABEL, 24)
        !          3481:       GO TO 50
        !          3482:       END
        !          3483: C XXXXXTOKLOG.f
        !          3484:       LOGICAL FUNCTION TOKLOG(K1, K2)
        !          3485: C
        !          3486: C     ROUTINE RETURNS TRUE IF FINDS .TRUE. OR .FALSE.
        !          3487: C     IN STMT(K1)-STMT(K2-1)
        !          3488: C
        !          3489:       INTEGER STMT, CONS(13), PSTMT
        !          3490:       COMMON /INPUT/ NSTMT, PSTMT, STMT(1327)
        !          3491:       DATA CONS(1) /64/, CONS(2) /35/, CONS(3) /30/, CONS(4) /41/,
        !          3492:      *    CONS(5) /48/, CONS(6) /34/, CONS(7) /64/, CONS(8) /64/,
        !          3493:      *    CONS(9) /49/, CONS(10) /47/, CONS(11) /50/, CONS(12) /34/,
        !          3494:      *    CONS(13) /64/
        !          3495:       TOKLOG = .FALSE.
        !          3496:       KCNT = 1
        !          3497:       L1 = 1
        !          3498:       L2 = 7
        !          3499:       K2 = K1
        !          3500:    10 DO 20 I=L1,L2
        !          3501:         IF (STMT(K2).NE.CONS(I)) GO TO 30
        !          3502:         K2 = K2 + 1
        !          3503:    20 CONTINUE
        !          3504:       TOKLOG = .TRUE.
        !          3505:       RETURN
        !          3506:    30 KCNT = KCNT + 1
        !          3507:       IF (KCNT.GE.3) RETURN
        !          3508:       K2 = K1
        !          3509:       L1 = 8
        !          3510:       L2 = 13
        !          3511:       GO TO 10
        !          3512:       END
        !          3513: C XXXXXTOKLOP.f
        !          3514:       LOGICAL FUNCTION TOKLOP(K1, K2, KCODE)
        !          3515: C
        !          3516: C     ROUTINE RETURNS TRUE IF FINDS LOGICAL OR RELATIONAL
        !          3517: C     OPERATORS IN STMT(K1)-STMT(K2-1);  RETURNS OPERATOR CODE
        !          3518: C     IN KCODE (SEE EXPR FOR CODES)
        !          3519: C
        !          3520:       INTEGER C(20), CC(9), CODE(9), PSTMT, STMT
        !          3521:       COMMON /INPUT/ NSTMT, PSTMT, STMT(1327)
        !          3522:       DATA C(1) /30/, C(2) /43/, C(3) /33/, C(4) /43/, C(5) /44/, C(6)
        !          3523:      *    /49/, C(7) /44/, C(8) /47/, C(9) /34/, C(10) /46/, C(11)
        !          3524:      *    /43/, C(12) /34/, C(13) /36/, C(14) /49/, C(15) /36/, C(16)
        !          3525:      *    /34/, C(17) /41/, C(18) /49/, C(19) /41/, C(20) /34/
        !          3526:       DATA CC(1), CC(2) /2*3/, CC(3), CC(4), CC(5), CC(6), CC(7),
        !          3527:      *    CC(8), CC(9) /7*2/, CODE(1) /19/, CODE(2) /14/, CODE(3) /20/,
        !          3528:      *    CODE(4), CODE(5), CODE(6), CODE(7), CODE(8), CODE(9) /6*21/
        !          3529:       TOKLOP = .FALSE.
        !          3530:       IF (STMT(K1).NE.64) RETURN
        !          3531:       J = 1
        !          3532:       DO 30 I=1,9
        !          3533:         KK = J + CC(I) - 1
        !          3534:         K2 = K1 + 1
        !          3535:         DO 10 L=J,KK
        !          3536:           IF (STMT(K2).NE.C(L)) GO TO 20
        !          3537:           K2 = K2 + 1
        !          3538:    10   CONTINUE
        !          3539:         KCODE = CODE(I)
        !          3540:         IF (STMT(K2).NE.64) RETURN
        !          3541:         K2 = K2 + 1
        !          3542:         TOKLOP = .TRUE.
        !          3543:         RETURN
        !          3544:    20   J = J + CC(I)
        !          3545:    30 CONTINUE
        !          3546:       RETURN
        !          3547:       END
        !          3548: C XXXXXTOKPNO.f
        !          3549:       LOGICAL FUNCTION TOKPNO(K1, K2, LL)
        !          3550: C
        !          3551: C     ROUTINE RECOGNIZES A POSITIVE INTEGER CONSTANT
        !          3552: C     IN STMT(K1)-STMT(K2-1), AND RETURNS ITS VALUE IN LL
        !          3553: C
        !          3554:       INTEGER STMT, PSTMT
        !          3555:       COMMON /INPUT/ NSTMT, PSTMT, STMT(1327)
        !          3556:       TOKPNO = .FALSE.
        !          3557:       CALL NEXTOK(K1, K2, K)
        !          3558:       IF (K.NE.1) RETURN
        !          3559:       K=K2-1
        !          3560:       LL = 0
        !          3561:       DO 10 KK=K1,K
        !          3562:         LL = 10 * LL + STMT(KK)
        !          3563:    10 CONTINUE
        !          3564:       IF (LL.GT.0) TOKPNO = .TRUE.
        !          3565:       RETURN
        !          3566:       END
        !          3567: C XXXXXTOKRL.f
        !          3568:       LOGICAL FUNCTION TOKRL(K1, K2, CODE)
        !          3569:       INTEGER STMT, CODE, PSTMT
        !          3570:       LOGICAL TOKLOP
        !          3571:       COMMON /INPUT/ NSTMT, PSTMT, STMT(1327)
        !          3572: C
        !          3573: C     ROUTINE RETURNS TRUE IF FINDS A REAL CONSTANT IN
        !          3574: C     STMT(K1)-STMT(K2-1) . ELSE IT RETURNS FALSE.
        !          3575: C     BASIC CONSTRUCT IS: <INT> . <INT>
        !          3576: C     <INT> .
        !          3577: C     . <INT>
        !          3578: C     EACH OF THESE MAY BE FOLLOWED BY <D,E> <+,-> <INT>
        !          3579: C     ALSO LEGAL IS IN-CONST FOLLOWED BY EXPONENT CONSTRUCT
        !          3580: C
        !          3581:       TOKRL = .FALSE.
        !          3582:       CALL NEXTOK(K1, K2, K)
        !          3583:       IF (K.EQ.3 .AND. STMT(K1).EQ.64) GO TO 10
        !          3584:       IF (K.EQ.1 .AND. STMT(K2).EQ.64) GO TO 40
        !          3585: C     IF HAVE INT-CONST NEED EXPONENT FOR THIS TO BE A REAL-CONST
        !          3586:       IF (K-1) 80, 50, 80
        !          3587: C
        !          3588: C     FIND BASIC REAL CONSTANT
        !          3589: C
        !          3590: C     (. INT-CONST) CONSTRUCT
        !          3591:    10 CALL NEXTOK(K2, K3, K)
        !          3592:       IF (K.NE.1) GO TO 80
        !          3593:    20 K2 = K3
        !          3594:    30 TOKRL = .TRUE.
        !          3595:       CODE = 1
        !          3596:       GO TO 50
        !          3597: C     (INT-CONST .) CONSTRUCT; CHECK FOR (INT . INT )
        !          3598:    40 K2 = K2 + 1
        !          3599:       CALL NEXTOK(K2, K3, K)
        !          3600:       IF (K.EQ.1) GO TO 20
        !          3601:       IF (TOKLOP(K2-1,K4,K)) GO TO 80
        !          3602:       GO TO 30
        !          3603: C
        !          3604: C     CHECK FOR EXPONENT
        !          3605: C
        !          3606:    50 IF (STMT(K2).NE.33) GO TO 60
        !          3607:       CODE = 0
        !          3608:       GO TO 70
        !          3609:    60 IF (STMT(K2).NE.34) GO TO 80
        !          3610:       CODE = 1
        !          3611:    70 K3 = K2 + 1
        !          3612:       IF (K3.EQ.NSTMT) GO TO 80
        !          3613:       IF ((STMT(K3).EQ.60) .OR. (STMT(K3).EQ.61)) K3 = K3 + 1
        !          3614:       CALL NEXTOK(K3, K4, K)
        !          3615:       IF (K.NE.1) GO TO 80
        !          3616:       K2 = K4
        !          3617:       TOKRL = .TRUE.
        !          3618:    80 RETURN
        !          3619:       END
        !          3620: C XXXXXTYPE.f
        !          3621:       SUBROUTINE TYPE
        !          3622:       LOGICAL ERR, SYSERR, ARDECL, ABORT
        !          3623:       INTEGER STMT, PSTMT, DSA, PDSA
        !          3624:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !          3625:       COMMON /INPUT/ NSTMT, PSTMT, STMT(1327)
        !          3626:       COMMON /CTABL/ LDSA, PDSA, DSA(5000)
        !          3627: C
        !          3628: C     PROCESSES TYPE STMT BY FINDING IDS OR ARRAY DECLS
        !          3629: C     THEY ARE ENTERED INTO SYMBOL TABLE AND TYPED EXPLICITLY
        !          3630: C     NO USAGE IS SET.
        !          3631: C
        !          3632:    10 IF (.NOT.ARDECL(K2,INDX)) GO TO 20
        !          3633:       IF (SYSERR) GO TO 30
        !          3634:       L = IGATT1(INDX,6)
        !          3635:       IF(L.EQ.1) CALL ERROR1(63
        !          3636:      1H WARNING - SHOULD TYPE ADJUSTABLE DIMENSION VARIABLE BEFORE USE
        !          3637:      2, 63)
        !          3638:       IF (K2.EQ.NSTMT) GO TO 30
        !          3639:       IF (STMT(K2).EQ.68 .AND. K2+1.NE.NSTMT) GO TO 40
        !          3640:    20 CALL ERROR1(15H ILLEGAL SYNTAX, 15)
        !          3641:    30 RETURN
        !          3642:    40 PSTMT = K2 + 1
        !          3643:       GO TO 10
        !          3644:       END
        !          3645: C XXXXXTYPST.f
        !          3646:       SUBROUTINE TYPST(ITYP, KK, KL)
        !          3647:       INTEGER PSTMT, K(186), KI(30), STMT, CODE, KT(30)
        !          3648:       LOGICAL ERR, SYSERR, ASSMT, ABORT
        !          3649:       COMMON /INPUT/ NSTMT, PSTMT, STMT(1327)
        !          3650:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !          3651:       COMMON /STS/ K, KI, KT
        !          3652: C
        !          3653: C*****STS
        !          3654: C     K(*) (INT) ARRAY CONTAINS A TABLE OF INTERNAL CODES FOR EACH
        !          3655: C     "KEYWORD" IN FORTRAN STMTS
        !          3656: C     KI(*) (INT) ARRAY CONTAINING NUMBER OF CHARACTERS IN EACH
        !          3657: C     KEYWORD IN K
        !          3658: C     KT(*)  (INT) ARRAY CONTAINING CLASS OF EACH STMT IN K
        !          3659: C     (SEE PU FOR FURTHER DOC OF IGP -CLASS)
        !          3660: C     TEST IF ITS AN ASSIGNMENT; IF SO ITYP = 30
        !          3661: C     ELSE SEARCH K ARRAY FOR STMT;  ITYP CONTAINS CODED
        !          3662: C     TYPE OF STMT; KK CONTAINS GENERAL CLASS OF STMTS IT FALLS IN
        !          3663: C     KL IS COUNT OF NUMBER OF LETTERS IN FIRST WORD OF STMT
        !          3664: C
        !          3665:       CALL TYPST2(ASSMT)
        !          3666:       IF (ASSMT) GO TO 40
        !          3667:       J = 1
        !          3668:       CODE = 0
        !          3669:    10 I = PSTMT
        !          3670:       CODE = CODE + 1
        !          3671:       L = J + KI(CODE) - 1
        !          3672:       DO 20 LL=J,L
        !          3673:         IF (STMT(I).NE.K(LL)) GO TO 30
        !          3674:         I = I + 1
        !          3675:    20 CONTINUE
        !          3676:       ITYP = CODE
        !          3677:       KK = KT(CODE)
        !          3678:       KL = KI(CODE)
        !          3679:       RETURN
        !          3680:    30 J = L + 1
        !          3681:       IF (CODE.LT.29) GO TO 10
        !          3682:       ERR = .TRUE.
        !          3683:       RETURN
        !          3684:    40 ITYP = 30
        !          3685:       KK = KT(30)
        !          3686:       KL = 0
        !          3687:       RETURN
        !          3688:       END
        !          3689: C XXXXXTYPST2.f
        !          3690:       SUBROUTINE TYPST2(ASSMT)
        !          3691:       INTEGER PSTMT, STMT
        !          3692:       LOGICAL EQUALS, ASSMT
        !          3693:       COMMON /INPUT/ NSTMT, PSTMT, STMT(1327)
        !          3694: C
        !          3695: C     ALGORITHM FOR IDENTIFYING ASSIGNMENT STMTS:
        !          3696: C
        !          3697:       EQUALS = .FALSE.
        !          3698:       LEVEL = 0
        !          3699:       IGP = 0
        !          3700: C
        !          3701: C     62.....)     63.....=     65.....(     68.....,
        !          3702: C
        !          3703:       DO 40 I=PSTMT,NSTMT
        !          3704:         IF (STMT(I).EQ.65) LEVEL = LEVEL + 1
        !          3705:         IF (STMT(I).NE.62) GO TO 10
        !          3706:         LEVEL = LEVEL - 1
        !          3707:         IF (EQUALS) GO TO 40
        !          3708:         IF (LEVEL.EQ.0) IGP = IGP + 1
        !          3709:         IF (IGP.EQ.1 .AND. LEVEL.EQ.0 .AND. STMT(I+1).NE.63) GO TO 60
        !          3710:         GO TO 40
        !          3711:    10   IF (LEVEL) 50, 20, 30
        !          3712:    20   IF (STMT(I).EQ.68) GO TO 60
        !          3713:         IF (STMT(I).EQ.63) EQUALS = .TRUE.
        !          3714:         GO TO 40
        !          3715:    30   IF (STMT(I).EQ.63) GO TO 60
        !          3716:    40 CONTINUE
        !          3717:       IF (.NOT.EQUALS) GO TO 60
        !          3718:       ASSMT = .TRUE.
        !          3719:    50 RETURN
        !          3720:    60 ASSMT = .FALSE.
        !          3721:       GO TO 50
        !          3722:       END
        !          3723: C XXXXXSATT2.f
        !          3724:       SUBROUTINE SATT2(INDEX, FIELD, ATT)
        !          3725: C
        !          3726:       COMMON /GRAPH/ LLAT, PLAT, LAT(6000)
        !          3727: C
        !          3728:       INTEGER INDEX, FIELD, ATT
        !          3729:       INTEGER LLAT, PLAT, LAT
        !          3730:       INTEGER FWTH(8), FPOS(8)
        !          3731: C
        !          3732:       DATA FWTH(1) /16/, FPOS(1) /1/
        !          3733:       DATA FWTH(2) /2/, FPOS(2) /16/
        !          3734:       DATA FWTH(3) /2/, FPOS(3) /32/
        !          3735:       DATA FWTH(4) /2/, FPOS(4) /64/
        !          3736:       DATA FWTH(5) /2/, FPOS(5) /128/
        !          3737:       DATA FWTH(6) /2/, FPOS(6) /256/
        !          3738:       DATA FWTH(7) /4/, FPOS(7) /512/
        !          3739:       DATA FWTH(8) /32/, FPOS(8) /2048/
        !          3740: C
        !          3741:       LAT(INDEX) = LAT(INDEX) + (ATT-MOD(LAT(INDEX)/FPOS(FIELD),
        !          3742:      *    FWTH(FIELD)))*FPOS(FIELD)
        !          3743: C
        !          3744:       RETURN
        !          3745: C
        !          3746:       END
        !          3747: C XXXXXIGATT2.f
        !          3748:       INTEGER FUNCTION IGATT2(INDEX, FIELD)
        !          3749: C
        !          3750:       COMMON /GRAPH/ LLAT, PLAT, LAT(6000)
        !          3751: C
        !          3752:       INTEGER INDEX, FIELD
        !          3753:       INTEGER LLAT, PLAT, LAT
        !          3754:       INTEGER FWTH(8), FPOS(8)
        !          3755: C
        !          3756:       DATA FWTH(1) /16/, FPOS(1) /1/
        !          3757:       DATA FWTH(2) /2/, FPOS(2) /16/
        !          3758:       DATA FWTH(3) /2/, FPOS(3) /32/
        !          3759:       DATA FWTH(4) /2/, FPOS(4) /64/
        !          3760:       DATA FWTH(5) /2/, FPOS(5) /128/
        !          3761:       DATA FWTH(6) /2/, FPOS(6) /256/
        !          3762:       DATA FWTH(7) /4/, FPOS(7) /512/
        !          3763:       DATA FWTH(8) /32/, FPOS(8) /2048/
        !          3764: C
        !          3765:       IGATT2 = MOD(LAT(INDEX)/FPOS(FIELD),FWTH(FIELD))
        !          3766: C
        !          3767:       RETURN
        !          3768: C
        !          3769:       END
        !          3770: C XXXXXCALLS.f
        !          3771:       SUBROUTINE CALLS
        !          3772:       INTEGER STMT, PSTMT, EXPR, M(3), OUTUT3, OUTUT4
        !          3773:       LOGICAL ERR, SYSERR, ABORT
        !          3774:       LOGICAL OPT, P1ERR
        !          3775:       COMMON /INPUT/ NSTMT, PSTMT, STMT(1327)
        !          3776:       COMMON /PARAMS/ I1, I2, I6, I4, I5, OUTUT3, OUTUT4
        !          3777:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !          3778:       COMMON /FACTS/ NAME, NOST, ITYP, IASF
        !          3779:       COMMON /OPTNS/ OPT(5), P1ERR
        !          3780:       DATA M(1) /4/, M(2) /2/, M(3) /0/
        !          3781: C
        !          3782: C      CHECK FOR LEGAL SUBROUTINE NAME BEFORE CALLING EXPR
        !          3783: C      TO PROCESS ARGUMENTS
        !          3784: C     IF NO ARGS, CALLS SAVES PASS 2 DATA ITSELF WITHOUT
        !          3785: C     CALLING EXPR
        !          3786: C
        !          3787:       IF (PSTMT.GE.NSTMT) GO TO 10
        !          3788:       CALL NEXTOK(PSTMT, K2, K)
        !          3789:       IF (K.NE.0) GO TO 10
        !          3790:       IF (K2.EQ.NSTMT) GO TO 40
        !          3791:       IF (STMT(K2).EQ.65) GO TO 30
        !          3792:    10 CALL ERROR1(26H MISSING ROUTINE NAME OR (, 26)
        !          3793:    20 RETURN
        !          3794: C
        !          3795: C     BY A CALL TO EXPR
        !          3796: C
        !          3797:    30 I3 = EXPR(K)
        !          3798:       IF (SYSERR) GO TO 20
        !          3799:       IF (PSTMT.NE.NSTMT) CALL ERROR1(18H ILLEGAL CALL STMT, 18)
        !          3800:       GO TO 20
        !          3801: C
        !          3802: C     SAVE SUBROUTINE CALL W/O ARGS
        !          3803: C
        !          3804:    40 K = LOOKUP(K2,.FALSE.)
        !          3805:       IF (SYSERR) GO TO 20
        !          3806:       I3 = IGATT1(K,8)
        !          3807:       IF (I3.NE.13 .AND. I3.NE.0) GO TO 50
        !          3808:       CALL SATT1(K, 8, 6)
        !          3809:       GO TO 60
        !          3810: C
        !          3811: C     MAKE SURE EXTERNAL REFERENCED ID IS NOT USED AS ANYTHING
        !          3812: C     OTHER AS A SUBROUTINE ELSEWHERE IN THIS P-U
        !          3813: C
        !          3814:    50 IF (I3.EQ.6) GO TO 60
        !          3815:       CALL ERROR1(24H ILLEGAL SUBROUTINE NAME, 24)
        !          3816:       GO TO 20
        !          3817:    60 IF (OPT(3) .AND. .NOT.P1ERR) WRITE (OUTUT3) M, K, NOST, M(3)
        !          3818:       GO TO 20
        !          3819:       END
        !          3820: C XXXXXDATA.f
        !          3821:       SUBROUTINE DATA
        !          3822:       LOGICAL ERR, SYSERR, ABORT, REPL, ARDECL, SIGN, TOKPNO, ERROR
        !          3823:       INTEGER DECNT, DATCNT, STMT, PSTMT, GETTOK, STACK, S(10), DSA,
        !          3824:      *    PDSA
        !          3825:       COMMON /CTABL/ LDSA, PDSA, DSA(5000)
        !          3826:       COMMON /INPUT/ NSTMT, PSTMT, STMT(1327)
        !          3827:       COMMON /FACTS/ NAME, NOST, ITYP, IASF
        !          3828:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !          3829:       COMMON /CEXPRS/ LSTACK, STACK(620)
        !          3830:       DATA IS /1H*/
        !          3831: C
        !          3832: C     ROUTINE PROCESSES A DATA STMT
        !          3833: C
        !          3834:    10 DECNT = 0
        !          3835:    20 IF (ARDECL(K2,KK)) GO TO 30
        !          3836:       IF (.NOT.ERR) GO TO 30
        !          3837:       CALL ERROR1(19H ILLEGAL DECLARATOR, 19)
        !          3838:       IF(.NOT.SYSERR)  GOTO 260
        !          3839:    30 IF (SYSERR) RETURN
        !          3840: C
        !          3841: C     SET DECLARATOR USAGE AS VARIABLE;  CHECK ITS NOT IN BLANK COMMON
        !          3842: C     CANNOT BE INLABELLED COMMON IF THIS STMT NOT IN BLOCK DATA PGM
        !          3843: C     FOUND A DECLARATOR ADD IT TO LIST OF ALL DECLS SO CAN CHECK
        !          3844: C     TYPE OF ITS CORRESPONDING DATA-ITEM;  ADD IN COUNT SO CAN
        !          3845: C     CHECK NUMBER OF DECLS VS. NUMBER OF DATA-ITEMS
        !          3846: C     KEEP TYPE INFO ON STACK; DECNT IS LENGTH OF STACK
        !          3847: C
        !          3848:       I = IGATT1(KK,8)
        !          3849:       IF (I.EQ.0) CALL SATT1(KK, 8, 10)
        !          3850:       I = IGATT1(KK,2)
        !          3851:       NN = IGATT1(NAME,8)
        !          3852:       IF (I) 60, 60, 40
        !          3853: C
        !          3854: C     IF VARIABLE IN COMMON, CHECK TO SEE IF CAN LEGALLY APPEAR
        !          3855: C     IN DATA STMT
        !          3856: C
        !          3857:    40 I = DSA(KK+2)
        !          3858:       I = DSA(I+1)
        !          3859:       CALL S5UNPK(DSA(I+4), S(1), 6)
        !          3860:       IF (S(1).EQ.IS) GO TO 50
        !          3861: C
        !          3862: C     FOUND NO "*" SO ARE IN LABELLED COMMON
        !          3863: C
        !          3864:       IF (NN.EQ.11) GO TO 70
        !          3865:       CALL ERROR1(
        !          3866:      *    55H ILLEGAL TO INITIALIZE VARIABLE IN LABELLED COMMON HERE,
        !          3867:      *    55)
        !          3868:       GO TO 260
        !          3869: C
        !          3870: C     FOUND BLANK COMMON
        !          3871: C
        !          3872:    50 CALL ERROR1(48H ILLEGAL TO INITIALIZE VARIABLES IN BLANK COMMON,
        !          3873:      *    48)
        !          3874:       GO TO 260
        !          3875:    60 IF (NN.NE.11) GO TO 70
        !          3876:       CALL ERROR1(33H DATA-ITEM NOT IN LABELLED COMMON, 33)
        !          3877:       GO TO 260
        !          3878:    70 I = IGATT1(KK,1)
        !          3879:       CALL SATT1(KK, 5, 1)
        !          3880:       NN = 1
        !          3881:       IF (IGATT1(KK,7).EQ.0) GO TO 75
        !          3882:       IF (STMT(K2-1).EQ.62) GO TO 75
        !          3883:       N = DSA(KK+2)
        !          3884:       NN = DSA(N)
        !          3885:    75 CONTINUE
        !          3886:       IF (DECNT+3.LE.LSTACK) GO TO 76
        !          3887:       CALL ERROR1(33H IN DATA, TABLE OVERFLOW OF STACK , 33 )
        !          3888:       GO TO 260
        !          3889:    76 CONTINUE
        !          3890:       STACK(DECNT+1) = MOD(I,8)
        !          3891:       STACK(DECNT+2) = KK
        !          3892:       STACK(DECNT+3) = NN
        !          3893:       DECNT = DECNT + 3
        !          3894:       IF (STMT(K2).EQ.67) GO TO 100
        !          3895:       IF (STMT(K2).NE.68) GO TO 90
        !          3896:       PSTMT = K2 + 1
        !          3897:       IF (PSTMT.LT.NSTMT) GO TO 20
        !          3898:    80 CALL ERROR1(15H ILLEGAL SYNTAX, 15)
        !          3899:       RETURN
        !          3900:    90 CALL ERROR1(33H ILLEGAL PUNCTUATION IN DATA STMT, 33)
        !          3901:       GO TO 260
        !          3902: C
        !          3903: C     FIND DATA-ITEMS; CHECK ITS TYPE VS. CORRESPONDING DECLARATOR
        !          3904: C     SIGN .TRUE. IF DATA-ITEM PRECEEDED BY A SIGN
        !          3905: C     REPL .TRUE. IF A REPLICATION FACTOR HAS ALREADY BEEN FOUND
        !          3906: C
        !          3907:   100 DATCNT = 0
        !          3908:       ERROR = .FALSE.
        !          3909:       PSTMT = K2 + 1
        !          3910:   110 IF (PSTMT.EQ.NSTMT) GO TO 80
        !          3911:       SIGN = .FALSE.
        !          3912:       REPL = .FALSE.
        !          3913:       NN = 1
        !          3914:   120 IF (STMT(PSTMT).NE.60 .AND. STMT(PSTMT).NE.61) GO TO 130
        !          3915:       PSTMT = PSTMT + 1
        !          3916:       SIGN = .TRUE.
        !          3917:   130 IF (PSTMT.EQ.NSTMT) GO TO 80
        !          3918:       KK = GETTOK(PSTMT,K2)
        !          3919:       IF (ERR) GO TO 80
        !          3920:       IF (KK.LT.6) GO TO 150
        !          3921:   140 CALL ERROR1(18H ILLEGAL DATA-ITEM, 18)
        !          3922:       GO TO 260
        !          3923:   150 KK = KK + 1
        !          3924:       GO TO (200, 200, 160, 190, 190, 180), KK
        !          3925: C
        !          3926: C     MUST MAKE SURE THAN AN INTEGER DATA-ITEM ISN'T A REPLICATION FACTO
        !          3927: C
        !          3928:   160 IF (REPL) GO TO 200
        !          3929:       IF(SIGN .OR. STMT(K2).NE.66) GOTO 200
        !          3930:       IF(TOKPNO(PSTMT,K2,NN)) GOTO 170
        !          3931:       CALL ERROR1(27H ILLEGAL REPLICATION FACTOR ,27)
        !          3932:       NN = 1
        !          3933:   170 REPL = .TRUE.
        !          3934:       PSTMT = K2 + 1
        !          3935:       GO TO 120
        !          3936: C
        !          3937: C     CHECK LENGTH OF HOLLERITH DATA-ITEM; MUST FIT INTO INTEGER WORD
        !          3938: C
        !          3939:   180 IF (STMT(PSTMT)+2048.EQ.1 .OR. ERROR) GO TO 190
        !          3940:       CALL ERROR1(
        !          3941:      *    53H WARNING - NH WITH N.GT.1 IS NOT A PORTABLE CONSTRUCT, 53)
        !          3942:       ERROR = .TRUE.
        !          3943: C
        !          3944: C     CHECK COMPLEX, HOLLERITH, AND LOGICAL DATA-ITEMS ARE UNSIGNED
        !          3945: C
        !          3946:   190 IF (SIGN) GO TO 140
        !          3947: C
        !          3948: C     CHECK COMPATIBLITY OF DATA-ITEMS WITH DECLARATORS
        !          3949: C     NN IS REPLICATION FACTOR;
        !          3950: C
        !          3951: 200   IBR=0
        !          3952:       DO 220 I = 1,NN
        !          3953:         IF (STACK(DATCNT+3).EQ.0) DATCNT = DATCNT + 3
        !          3954:         IF (DATCNT .GE. DECNT) GO TO 240
        !          3955:         STACK(DATCNT+3) = STACK(DATCNT+3) - 1
        !          3956:         IF (STACK(DATCNT+1).EQ.KK-1) GO TO 220
        !          3957:         IF ((STACK(DATCNT+1).NE.2 .OR. KK.NE.6) .AND.
        !          3958:      *      (STACK(DATCNT+1).NE.5 .OR. KK.NE.3)) GO TO 210
        !          3959:         CALL SATT1(STACK(DATCNT+2), 1, 5)
        !          3960:         GO TO 220
        !          3961:  210  IBR = 1
        !          3962:   220 CONTINUE
        !          3963:       IF(IBR .EQ. 1) CALL ERROR1(52
        !          3964:      1H WARNING - DATA-ITEM IS INCOMPATIBLE WITH DECLARATOR ,52)
        !          3965: C
        !          3966: C     CHECK FOR "," BETWEEN DATA-ITEMS
        !          3967: C
        !          3968:       IF (STMT(K2).NE.68) GO TO 230
        !          3969:       PSTMT = K2 + 1
        !          3970:       GO TO 110
        !          3971: C
        !          3972: C     CHECK FOR ANOTHER SET OF DECLARATORS/DATA-ITEMS
        !          3973: C
        !          3974:   230 IF (STMT(K2).NE.67) GO TO 90
        !          3975:       IF (STACK(DATCNT+3).EQ.0) DATCNT = DATCNT + 3
        !          3976:       IF (DATCNT.EQ.DECNT) GO TO 250
        !          3977:   240 CALL ERROR1(34H MISSING DECLARATORS OR DATA-ITEMS, 34)
        !          3978:       IF (DATCNT.GE.DECNT) GO TO 260
        !          3979:   250 PSTMT = K2 + 1
        !          3980:       IF (PSTMT.EQ.NSTMT) RETURN
        !          3981:       IF (STMT(PSTMT).NE.68) GO TO 90
        !          3982:       PSTMT = PSTMT + 1
        !          3983:       IF (PSTMT.NE.NSTMT) GO TO 10
        !          3984:       GO TO 80
        !          3985: C
        !          3986: C     FLUSH TO "/," CONSTRUCT OR END OF STATEMEMT
        !          3987: C
        !          3988:   260 IF (PSTMT+1.GE.NSTMT) RETURN
        !          3989:       IF (STMT(PSTMT).EQ.67 .AND. STMT(PSTMT+1).EQ.68) GO TO 270
        !          3990:       PSTMT = PSTMT + 1
        !          3991:       GO TO 260
        !          3992:   270 PSTMT = PSTMT + 2
        !          3993:       IF (PSTMT.GE.NSTMT) RETURN
        !          3994:       GO TO 10
        !          3995:       END
        !          3996: C XXXXXDOSTMT.f
        !          3997:       SUBROUTINE DOSTMT
        !          3998:       LOGICAL TOKLAB, ERR, SYSERR, ABORT
        !          3999:       INTEGER STMT, PSTMT
        !          4000:       COMMON /INPUT/ NSTMT, PSTMT, STMT(1327)
        !          4001:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !          4002: C
        !          4003: C     ROUTINE PROCESSES A DO STMT. DOSTMT PEELS OFF THE
        !          4004: C     LABEL. CALLS DOSPEC TO GET THE <DO-SPECIFICATION>
        !          4005: C
        !          4006:       IF (TOKLAB(1,K2,KK,.FALSE.)) GO TO 10
        !          4007:       CALL ERROR1(23H MISSING LABEL AFTER DO, 23)
        !          4008:       GO TO 20
        !          4009:    10 IF (SYSERR) GO TO 20
        !          4010:       PSTMT = K2
        !          4011:       CALL DOSPEC(KK, K2, .FALSE.)
        !          4012:    20 RETURN
        !          4013:       END
        !          4014: C XXXXXEND.f
        !          4015:       SUBROUTINE END
        !          4016: C
        !          4017: C     ROUTINE SAVES SYMBOL TABLE FOR 2ND PASS
        !          4018: C     CHECKS VARIABLE DIMENSIONING IN FCN/SUBR PU'S
        !          4019: C     CANNOT RESET DUMMY ARGS USED IN VARIABLE DIMENSIONING;
        !          4020: C     CHECKS SUCH BOUNDS FOR TYPE INTEGER
        !          4021: C     CALLS OUTSYM TO PRINT SYMBOL TABLE
        !          4022: C     CHECKS FOR UNDEFINED LABELS,MISSING DO ENDINGS,
        !          4023: C     PROPER BRANCHING THROUGHOUT PGM,
        !          4024: C     FIXES UP ALL LABELS WHOSE SCOPE IS NOT YET LIMITED
        !          4025: C     SETS USAGE OF ALL IDS TO VARIABLE IF USAGE NOT YET SET
        !          4026: C     RESETS FCN USAGE IN FCN  SUBPROGRAM
        !          4027: C
        !          4028:       INTEGER OUTUT, OUTUT2, OUTUT3, OUTUT4
        !          4029:       INTEGER PDSA, SYMLEN, BNEXT, SYMHD, STACK, DSA
        !          4030:       LOGICAL OPT, P1ERR
        !          4031:       COMMON /PARAMS/ INUT, OUTUT, NOCHAR, SYMLEN, OUTUT2, OUTUT3,
        !          4032:      *    OUTUT4
        !          4033:       COMMON /OPTNS/ OPT(5), P1ERR
        !          4034:       COMMON /FACTS/ NAME, NOST, ITYP, IASF
        !          4035:       COMMON /TABL/ NEXT, LABHD, SYMHD, BNEXT
        !          4036:       COMMON /CTABL/ LDSA, PDSA, DSA(5000)
        !          4037:       COMMON /CEXPRS/ LSTACK, STACK(620)
        !          4038:       I = IGATT1(NAME,8)
        !          4039:       IF((I.NE.3 .AND. I.NE.10) .OR. DSA(NAME+2).EQ.0) GOTO 40
        !          4040: C
        !          4041: C     ARGUMENT CHECKING- FOR USE IN VARIABLE DIMENSIONING OF ARRAYS
        !          4042: C
        !          4043:       LL = 1
        !          4044:       L = DSA(NAME+2)
        !          4045:       NPAR = 0
        !          4046:    10 IF (L.EQ.0) GO TO 40
        !          4047:       NPAR = NPAR + 1
        !          4048: C     CHECK FOR PROC ARGS TO ENTER THEIR RELATIVE POSIT
        !          4049: C     IN ARGLIST IN WD 3 OF THEIR SYMBOL TABLE ENTRY
        !          4050:       I = IGATT1(DSA(L),8)
        !          4051:       IF (I.NE.5 .AND. I.NE.6 .AND. I.NE.13) GO TO 20
        !          4052:       I = DSA(L)
        !          4053:       DSA(I+2) = NPAR
        !          4054:       GO TO 30
        !          4055:    20 I = IGATT1(DSA(L),6)
        !          4056:       IF (I.EQ.0) GO TO 30
        !          4057:       I = IGATT1(DSA(L),7)
        !          4058:       IF (I.NE.0) GO TO 30
        !          4059:       I = IGATT1(DSA(L),5)
        !          4060:       K = DSA(L)
        !          4061:       IF (I.GT.0) CALL ERROR2(
        !          4062:      *    57H ILLEGALLY RESET DUMMY ARG USED IN VARIABLE DIMENSIONING ,
        !          4063:      *  57, DSA(K+4), 1, 1, 1)
        !          4064:       I = IGATT1(K,1)
        !          4065:       IF (MOD(I,8).NE.2) CALL ERROR2(
        !          4066:      *  47H ILLEGAL DATA TYPE USED IN ADJUSTIBLE DIMENSION, 47
        !          4067:      *  , DSA(K+4), 1, 1, 1)
        !          4068:    30 L = DSA(L+1)
        !          4069:       GO TO 10
        !          4070: C
        !          4071: C     OUTPUT TABLE
        !          4072: C
        !          4073:    40 CALL DOCHK(1)
        !          4074: C
        !          4075: C     CHECK LABELS DEFINED AND WITHIN SCOPE
        !          4076: C
        !          4077:       I = LABHD
        !          4078:    50 IF (I.EQ.0) GO TO 110
        !          4079:       L = IGATT1(I,2)
        !          4080:       IF (L.EQ.1) GO TO 60
        !          4081:       CALL ERROR2(17H UNDEFINED LABEL , 17, DSA(I+4), 1, 1, 1)
        !          4082:       GO TO 100
        !          4083:    60 L = IGATT1(I,1)
        !          4084:       IF (L.NE.1) GO TO 100
        !          4085:       L = DSA(I+2)
        !          4086:       L1 = DSA(L)
        !          4087:       KK = DSA(L+1)
        !          4088:       L2 = DSA(I+1)
        !          4089: C
        !          4090: C     L3 POINTS TO LAST ELEMENT ON CIRCULAR LIST
        !          4091: C
        !          4092:       L3 = L2
        !          4093:    70 IF (DSA(L2).LE.KK .AND. DSA(L2).GE.L1) GO TO 90
        !          4094:       IF (DSA(L2).LT.0) GO TO 80
        !          4095:       CALL ERROR2(15H ILLEGAL BRANCH, 15, DSA(L2), -1, 1, 1)
        !          4096:       GO TO 90
        !          4097:    80 DSA(L2) = IABS(DSA(L2))
        !          4098:    90 L2 = DSA(L2+1)
        !          4099:       IF (L2.NE.L3) GO TO 70
        !          4100:   100 I = DSA(I+3)
        !          4101:       GO TO 50
        !          4102: C
        !          4103: C     SET <ID> USAGE IF NOT YET SET
        !          4104: C
        !          4105:   110 I = SYMHD
        !          4106:   120 IF (I.EQ.0) GO TO 150
        !          4107:       K = IGATT1(I,8)
        !          4108:       IF (K.NE.0) GO TO 130
        !          4109:       CALL SATT1(I, 8, 10)
        !          4110:       GO TO 140
        !          4111:   130 IF (K.NE.6) GO TO 140
        !          4112:       IF (IGATT1(I,1)/8.NE.1) GO TO 140
        !          4113:       CALL ERROR2(33H SUBROUTINE NAME CANNOT BE TYPED , 33, DSA(I+4),
        !          4114:      *  1, 1, 1)
        !          4115:   140 I = DSA(I+3)
        !          4116:       GO TO 120
        !          4117: C
        !          4118: C     RESET FCN USAGE IN FCN PROGRAM UNIT
        !          4119: C
        !          4120:   150 I = IGATT1(NAME,8)
        !          4121:       IF (I.NE.10) GO TO 160
        !          4122:       CALL SATT1(NAME, 8, 4)
        !          4123:       I = IGATT1(NAME,5)
        !          4124:       IF (I.EQ.0) CALL ERROR1(23H FUNCTION VALUE NOT SET, 23)
        !          4125: C
        !          4126: C     SAVE BINARY COPY OF SYMBOL TABLE
        !          4127: C
        !          4128:   160 IF (OPT(3) .AND. .NOT.P1ERR) GO TO 170
        !          4129:       CALL ERROR1(36H P-U NOT SAVED FOR PASS2 PROCESSING , 36)
        !          4130:       K = 3
        !          4131:       L = 1
        !          4132:       WRITE(OUTUT2) L,K,L
        !          4133:       WRITE(OUTUT3) L,K,L
        !          4134:       GOTO 180
        !          4135:  170  K = 1
        !          4136:       L = NEXT - 1
        !          4137:       I = L + 3
        !          4138:       WRITE (OUTUT2) I, K, (DSA(I),I=1,L), NAME, SYMHD, LABHD
        !          4139:       L = 3
        !          4140:       WRITE (OUTUT3) K, L, K
        !          4141:   180 CALL OUTSYM
        !          4142:       RETURN
        !          4143:       END
        !          4144: C XXXXXEXPR.f
        !          4145:       INTEGER FUNCTION EXPR(LOGEX)
        !          4146: C
        !          4147: C     LOGEX IS A DUMMY ARG , NEVER USED
        !          4148: C     FALSE IF AN ARITHMETIC EXPRESSION WAS FOUND
        !          4149: C     PRE IS PRECEDENCE TABLE,  PRE(I,J) GIVES ACTION TAKEN WHEN OP I
        !          4150: C     IS ON THE STACK, OP J IN THE INPUT
        !          4151: C     CUROP IS CURRENT TOKEN TYPE
        !          4152: C     PREVOP IS PREVIOUS TOKEN TYPE (LAST ONE PROCESSED BEFORE CUROP)
        !          4153: C     STACK IS OPERAND STACK GROWING FROM TOP (1,2 ETC)
        !          4154: C     OPERATER STACK GROWING FROM BOTTOM UP(100,99 ETC)
        !          4155: C     PARENS COUNTS NESTING LEVEL OF PARENTHESES AND FUNCTION CALLS
        !          4156: C
        !          4157: C*****EXPRS
        !          4158: C     PT (INT) POINTER TO NEXT FREE WORD ON OPERAND STACK (GROWS
        !          4159: C     FROM STACK(1))
        !          4160: C     PB (INT) POINTER TO NEXT FREE WORD ON OPERATOR STACK (GROWS
        !          4161: C     FROM STACK(LSTACK))
        !          4162: C     AO(*,*) (INT) ARRAY GIVES TYPES OF ARITH OPERATIONS
        !          4163: C     AO(I,J) = TYPE OF (TYPE I <ARITH-OP> TYPE J)
        !          4164: C     RO(*,*) (INT) ARRAY TELLS LEGALITY OF RELATIONAL OPERATIONS
        !          4165: C     RO(I,J) = 1 IF TYPE I <RELOP> TYPEJ IS LEGAL; ELSE IS 0
        !          4166: C     EX(*,*) (INT) ARRAY GIVES TYPES OF ** OPERATION
        !          4167: C     EX(I,J) = TYPE OF (TYPE I <**> TYPE J)
        !          4168: C
        !          4169:       INTEGER PRE(12,12), EX(4,4), AO(4,4), CUROP, PREVOP, RO(3,3),
        !          4170:      *    STACK, PARENS, STMT, PSTMT, PT, PB, SYMLEN, PDSA, OUTUT,
        !          4171:      *    GETTOK, IBR(14), JBR(13), ADJ(5,4), OUTUT2, DSA, OUTUT3,
        !          4172:      *    OUTUT4, PREF, REF
        !          4173:       LOGICAL FLUSH, ERR, SYSERR, CALLST, DOVAR, OPT, ABORT, P1ERR
        !          4174:       LOGICAL INTEXT
        !          4175:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !          4176:       COMMON /CTABL/ LDSA, PDSA, DSA(5000)
        !          4177:       COMMON /EXPRS/ PT, PB, AO, RO, EX
        !          4178:       COMMON /CEXPRS/ LSTACK, STACK(620)
        !          4179:       COMMON /CREF/ LREF, PREF, REF(100)
        !          4180:       COMMON /PARAMS/ INUT, OUTUT, NOCHAR, SYMLEN, OUTUT2, OUTUT3,
        !          4181:      *    OUTUT4
        !          4182:       COMMON /INPUT/ NSTMT, PSTMT, STMT(1327)
        !          4183:       COMMON /OPTNS/ OPT(5), P1ERR
        !          4184:       COMMON /FACTS/ NAME, NOST, ITYP, IASF
        !          4185:       DATA K /0/
        !          4186:       DATA PRE(1,1) /6/, PRE(1,2) /6/, PRE(1,3) /4/, PRE(1,5) /4/,
        !          4187:      *    PRE(1,6) /2/, PRE(1,7) /4/, PRE(1,8) /6/, PRE(1,9) /6/,
        !          4188:      *    PRE(1,10) /6/, PRE(1,4) /-1/, PRE(1,11) /6/, PRE(2,1) /-1/,
        !          4189:      *    PRE(2,2) /-1/, PRE(2,3) /-1/, PRE(2,5) /-1/, PRE(2,6) /-1/,
        !          4190:      *    PRE(2,7) /-1/, PRE(2,8) /-1/, PRE(2,9) /-1/, PRE(2,10) /-1/,
        !          4191:      *    PRE(2,4) /-1/, PRE(2,11) /-1/, PRE(3,1) /6/, PRE(3,2) /6/,
        !          4192:      *    PRE(3,3) /-1/, PRE(3,5) /4/, PRE(3,6) /2/, PRE(3,7) /6/,
        !          4193:      *    PRE(3,8) /6/, PRE(3,9) /6/, PRE(3,10) /6/, PRE(3,4) /-1/,
        !          4194:      *    PRE(3,11) /6/, PRE(5,1) /5/, PRE(5,2) /7/, PRE(5,3) /4/,
        !          4195:      *    PRE(5,5) /4/, PRE(5,6) /2/, PRE(5,7) /4/, PRE(5,8) /-1/,
        !          4196:      *    PRE(5,9) /4/, PRE(5,10) /4/, PRE(5,4) /4/, PRE(5,11) /4/,
        !          4197:      *    PRE(6,1) /5/, PRE(6,2) /1/, PRE(6,3) /4/, PRE(6,5) /4/,
        !          4198:      *    PRE(6,6) /2/, PRE(6,7) /4/, PRE(6,8) /3/, PRE(6,9) /4/,
        !          4199:      *    PRE(6,10) /4/, PRE(6,4) /4/, PRE(6,11) /4/
        !          4200:       DATA PRE(7,1) /6/, PRE(7,2) /6/, PRE(7,3) /4/, PRE(7,5) /4/,
        !          4201:      *    PRE(7,6) /2/, PRE(7,7) /6/, PRE(7,8) /6/, PRE(7,9) /6/,
        !          4202:      *    PRE(7,10) /6/, PRE(7,4) /-1/, PRE(7,11) /6/, PRE(8,1) /-1/,
        !          4203:      *    PRE(8,2) /-1/, PRE(8,3) /-1/, PRE(8,5) /-1/, PRE(8,6) /-1/,
        !          4204:      *    PRE(8,7) /-1/, PRE(8,8) /-1/, PRE(8,9) /-1/, PRE(8,10) /-1/,
        !          4205:      *    PRE(8,4) /-1/, PRE(8,11) /-1/, PRE(9,1) /5/, PRE(9,2) /6/,
        !          4206:      *    PRE(9,3) /4/, PRE(9,5) /4/, PRE(9,6) /2/, PRE(9,7) /4/,
        !          4207:      *    PRE(9,8) /6/, PRE(9,9) /6/, PRE(9,10) /6/, PRE(9,4) /4/,
        !          4208:      *    PRE(9,11) /4/, PRE(10,1) /5/, PRE(10,2) /6/, PRE(10,3) /4/,
        !          4209:      *    PRE(10,5) /4/, PRE(10,6) /2/, PRE(10,7) /4/, PRE(10,8) /6/,
        !          4210:      *    PRE(10,9) /4/, PRE(10,10) /6/, PRE(10,4) /4/, PRE(10,11) /4/,
        !          4211:      *    PRE(4,1) /5/, PRE(4,2) /6/, PRE(4,3) /4/, PRE(4,5) /4/,
        !          4212:      *    PRE(4,6) /2/, PRE(4,7) /4/, PRE(4,8) /6/, PRE(4,9) /6/,
        !          4213:      *    PRE(4,10) /6/, PRE(4,4) /-1/, PRE(4,11) /4/, PRE(11,1) /5/,
        !          4214:      *    PRE(11,2) /6/, PRE(11,3) /4/, PRE(11,5) /4/, PRE(11,6) /2/,
        !          4215:      *    PRE(11,7) /4/, PRE(11,8) /6/, PRE(11,9) /6/, PRE(11,10) /6/,
        !          4216:      *    PRE(11,4) /-1/, PRE(11,11) /6/
        !          4217:       DATA PRE(12,1), PRE(12,3), PRE(12,7), PRE(12,11) /4*6/, PRE(12,2)
        !          4218:      *    /6/, PRE(12,5) /4/, PRE(12,6) /2/, PRE(12,8) /6/, PRE(12,4),
        !          4219:      *    PRE(12,9), PRE(12,10) /3*6/, PRE(1,12), PRE(2,12), PRE(3,12),
        !          4220:      *    PRE(7,12), PRE(12,12) /5*-1/, PRE(5,12), PRE(6,12),
        !          4221:      *    PRE(8,12), PRE(9,12), PRE(10,12), PRE(4,12), PRE(11,12) /7*4/
        !          4222:       DATA IBR(1), IBR(3), IBR(7), IBR(12) /4*1/, IBR(2) /2/, IBR(4),
        !          4223:      *    IBR(11) /2*3/, IBR(9), IBR(10) /2*5/, IBR(8), IBR(5), IBR(6)
        !          4224:      *    /3*4/, IBR(13) /2/, IBR(14) /4/, JBR(1), JBR(12) /2*1/,
        !          4225:      *    JBR(2), JBR(3), JBR(7), JBR(9), JBR(10), JBR(11), JBR(8)
        !          4226:      *    /7*2/, JBR(4) /3/, JBR(5), JBR(6) /2*4/, JBR(13) /4/
        !          4227:       DATA ADJ(1,1), ADJ(1,2), ADJ(1,3) /3*-1/, ADJ(1,4) /0/, ADJ(2,1),
        !          4228:      *    ADJ(2,2) /2*0/, ADJ(2,3), ADJ(2,4) /2*-1/, ADJ(3,1) /1/,
        !          4229:      *    ADJ(3,4) /0/, ADJ(3,2), ADJ(3,3) /2*-1/, ADJ(5,1) /1/,
        !          4230:      *    ADJ(5,3), ADJ(5,4) /2*0/, ADJ(5,2) /-1/, ADJ(4,1), ADJ(4,3),
        !          4231:      *    ADJ(4,4) /3*0/, ADJ(4,2) /-1/
        !          4232: C
        !          4233: C     CODES IN OPERAND STACK
        !          4234: C     0....DOUBLE PRECISION       1....REAL   2....INTEGER
        !          4235: C     3....COMPLEX      4....LOGICAL   5....HOLLERITH
        !          4236: C     6....PROCEDURE NAME
        !          4237: C     CODES FOR OPERATORS
        !          4238: C     11 +,-    12 )   13 **  14 .NOT.  15 (  16  FCN(
        !          4239: C     17 /,*  18 ,  19 .AND.  20 .OR.  21 .EQ.  22 UNARY -,+
        !          4240: C
        !          4241:       PB = LSTACK
        !          4242:       PT = 1
        !          4243:       CALLST = .FALSE.
        !          4244:       PREVOP = -1
        !          4245:       CUROP = 0
        !          4246:       PARENS = 0
        !          4247:       FLUSH = .FALSE.
        !          4248:       EXPR = -1
        !          4249:    10 IF (PSTMT.LT.NSTMT .AND. .NOT.CALLST) GO TO 110
        !          4250: C
        !          4251: C     FINISH RECOGNITION OF EXPRESSION; POP OPERAND STACK AND RETURN
        !          4252: C     TYPE OF EXPRESSION
        !          4253: C
        !          4254:    20 IF (PARENS.EQ.0) GO TO 40
        !          4255:    30 CALL ERROR1(37H UNBALANCED PARENTHESES IN EXPRESSION, 37)
        !          4256:       IF (FLUSH) GO TO 530
        !          4257:       GO TO 80
        !          4258:    40 IF (PB.EQ.LSTACK .OR. CALLST) GO TO 60
        !          4259:    50 CALL POP
        !          4260:       IF (ERR) GO TO 530
        !          4261:       IF (PB.LT.LSTACK) GO TO 50
        !          4262:    60 IF (PT.NE.3) GO TO 90
        !          4263:       IF (STACK(1).EQ.0) GO TO 70
        !          4264:       I = IGATT1(STACK(1),8)
        !          4265:       IF (I.EQ.0) CALL SATT1(STACK(1), 8, 10)
        !          4266:    70 EXPR = STACK(2)
        !          4267:    80 PSTMT = K2
        !          4268:       ERR = .FALSE.
        !          4269:       RETURN
        !          4270:    90 CALL ERROR1(29H INVALID SYNTAX IN EXPRESSION, 29)
        !          4271:       IF (FLUSH) GO TO 530
        !          4272:       GO TO 80
        !          4273:   100 CALL ERROR1(31H EXPRESSION TOO LONG TO PROCESS, 31)
        !          4274:       GO TO 530
        !          4275: C
        !          4276: C     CONTINUING PROCESSING THE EXPRESSION, IDENTIFY NEXT TOKEN,
        !          4277: C
        !          4278:   110 CUROP = GETTOK(PSTMT,K2)
        !          4279:       IF (ERR) GO TO 80
        !          4280: C
        !          4281: C     SEE END OF EXPRESSION:  ")" <ID> OR <LABEL>; GETTOK RETURNS
        !          4282: C     SAME CODES AS THOSE ABOVE EXCEPT 6 IS ID, 16 IS FCN( OR ARRAY ELE
        !          4283: C
        !          4284:       IF (CUROP.NE.6 .AND. CUROP.NE.2 .AND. CUROP.NE.16 .OR.
        !          4285:      *    PREVOP.NE.12) GO TO 120
        !          4286:       K2 = PSTMT
        !          4287:       GO TO 20
        !          4288: C
        !          4289: C     CHECK FOR ADJACENT OPERATORS OR OPERANDS.
        !          4290: C
        !          4291:   120 IF (PREVOP.LE.6) GO TO 130
        !          4292:       I = IBR(PREVOP-10)
        !          4293:       GO TO 140
        !          4294:   130 I = IBR(13)
        !          4295:       IF(PREVOP.EQ.(-1)) I = IBR(14)
        !          4296:   140 IF (CUROP.LE.6) GO TO 150
        !          4297:       I2 = JBR(CUROP-10)
        !          4298:       GO TO 160
        !          4299:   150 I2 = JBR(13)
        !          4300:   160 IF (I.GE.3 .AND. I2.EQ.1) CUROP = 22
        !          4301:       IF (ADJ(I,I2)) 170, 190, 180
        !          4302:   170 CALL ERROR1(44H ADJACENT PLACEMENT OF OPERATORS OR OPERANDS, 44)
        !          4303:       GO TO 530
        !          4304:   180 CALL ERROR1(
        !          4305:      *    54H WARNING - ADJACENT PLACEMENT OF OPERATOR AND UNARY -+, 54)
        !          4306:   190 IF (CUROP.GT.6 .AND. CUROP.NE.16) GO TO 290
        !          4307:       IF (CUROP.LT.6) GO TO 280
        !          4308: C
        !          4309: C     PROCESS ID OR FCN( OR ARRAY ELEMENT OR ARRAY
        !          4310: C     LOOKUP SYMBOL TABLE ENTRY TO IDENTIFY ARRAYS AND TO IMPLICITLY
        !          4311: C     TYPE IDENTIFIERS IF NECESSARY.
        !          4312: C
        !          4313:       IF (CUROP.EQ.6) GO TO 200
        !          4314:       K = LOOKUP(K2-1,.FALSE.)
        !          4315:       GO TO 210
        !          4316:   200 K = LOOKUP(K2,.FALSE.)
        !          4317:   210 IF (SYSERR) GO TO 530
        !          4318:       I1 = IGATT1(K,1)
        !          4319:       I2 = IGATT1(K,7)
        !          4320:       I3 = IGATT1(K,8)
        !          4321: C
        !          4322: C     IMPLICITLY TYPE IDENTIFIERS AND FCNS
        !          4323: C
        !          4324:       IF (I1.GT.0) GO TO 220
        !          4325:       I1 = 1
        !          4326:       IF (STMT(PSTMT).GE.38 .AND. STMT(PSTMT).LE.43) I1 = 2
        !          4327:       CALL SATT1(K, 1, I1)
        !          4328: C
        !          4329: C     SEPARATE ARRAY ELEMENT, FCN REFERENCE,ASF REF.
        !          4330: C
        !          4331:   220 I1 = MOD(I1,8)
        !          4332:       IF (CUROP.NE.16) GO TO 250
        !          4333:       IF (I2.EQ.0) GO TO 240
        !          4334: C
        !          4335: C     ARRAY ELEMENT--CHECK FOR BEING IN ASF DEF AND  PEEL  OFF
        !          4336: C     SUBSCRIPTS, CHECKING THEIR NUMBER
        !          4337: C
        !          4338:       IF (ITYP.NE.31) GO TO 230
        !          4339:       CALL ERROR1(39H ILLEGAL USE OF ARRAY IN ASF DEFINITION, 39)
        !          4340:   230 CUROP = I1
        !          4341:       I1 = CUROP + 16
        !          4342:       PSTMT = K2
        !          4343:       CALL SUBS(K2, I2)
        !          4344:       IF (ERR .OR. SYSERR) GO TO 80
        !          4345:       GO TO 270
        !          4346: C
        !          4347: C     PROCESS FCN( OR ASF( REFERENCE; CHECK USAGE TO SEE
        !          4348: C     IF IS A LEGAL FCN OR ASF NAME I.E. IF WAS USED
        !          4349: C     AS A FCN, SUBR, ASF, OR WAS IN AN EXTERNAL STMT.
        !          4350: C
        !          4351:   240 IF (I3.EQ.0 .OR. I3.EQ.2 .OR. I3.EQ.5 .OR. I3.EQ.6 .OR. I3.EQ.13
        !          4352:      *    .OR. I3.EQ.14) GO TO 290
        !          4353: C
        !          4354: C     ACTUAL USAGE WILL BE DETERMINED BY CODE WHICH
        !          4355: C     STORES CALL TEMPLATE
        !          4356: C
        !          4357:       CALL ERROR1(18H ILLEGAL USE OF ID, 18)
        !          4358:       GO TO 530
        !          4359: C
        !          4360: C     VARIABLE, ARRAY, PROCEDURE NAME
        !          4361: C
        !          4362:   250 IF (I2.EQ.0) GO TO 260
        !          4363: C
        !          4364: C     ARRAY
        !          4365: C
        !          4366:       CUROP = I1
        !          4367:       I1 = CUROP + 8
        !          4368:       IF (I3.EQ.0) CALL SATT1(K, 8, 10)
        !          4369:       GO TO 270
        !          4370: C
        !          4371: C     VARIABLE OR PROCEDURE
        !          4372: C     LEAVE IDS USAGE UNSET
        !          4373: C     THEY WILL BE SET LATER BY APPEARING AS OPERANDS OR BY BEING
        !          4374: C     DEFINED AS FCN  OR SUBROUTINE REFS BY FOLLOWING PGMS
        !          4375: C
        !          4376:   260 IF (I3.EQ.0) GO TO 270
        !          4377:       IF (I3.EQ.5 .OR. I3.EQ.6 .OR. I3.EQ.13) I1 = 6
        !          4378:       IF (I3.EQ.10 .OR. I1.EQ.6) GO TO 270
        !          4379:       IF (ITYP.EQ.31 .AND. I3.EQ.1 .AND. DSA(K+2).EQ.IASF) GO TO 270
        !          4380:       CALL ERROR1(36H ILLEGAL VARIABLE USED IN EXPRESSION, 36)
        !          4381:       GO TO 530
        !          4382: C
        !          4383: C     ENTER ARRAY,ID, PROCEDURE NAME, ARRAY ELEMENT INTO OPERAND STACK
        !          4384: C     UPDATE PREVOP,PSTMT.  ALSO ENTER SYMBOL TABLE INDEX FOR THESE
        !          4385: C     PREVOP = 0,1,...6 FOR OPERANDS
        !          4386: C     11,12,...22 FOR OPERATORS
        !          4387: C
        !          4388:   270 IF (PT+2.GE.PB) GO TO 100
        !          4389:       STACK(PT) = K
        !          4390:       STACK(PT+1) = I1
        !          4391:       PT = PT + 2
        !          4392:       PREVOP = CUROP
        !          4393:       PSTMT = K2
        !          4394:       GO TO 10
        !          4395: C
        !          4396: C     ARE PROCESSING A CONSTANT
        !          4397: C
        !          4398:   280 I1 = CUROP
        !          4399:       K = 0
        !          4400:       GO TO 270
        !          4401: C
        !          4402: C     ARE PROCESSING AN OPERATER
        !          4403: C     PRE(I,J) CONTAINS ACTION TAKEN GIVEN OPERATOR I ON STACK
        !          4404: C     AND OPERATOR J IN INPUT
        !          4405: C
        !          4406:   290 KNAME = K
        !          4407:       IF (CUROP.EQ.15 .OR. CUROP.EQ.16) PARENS = PARENS + 1
        !          4408:       IF (CUROP.EQ.12) PARENS = PARENS - 1
        !          4409:       IF (PARENS.GE.0) GO TO 300
        !          4410:       FLUSH = .TRUE.
        !          4411:       GO TO 30
        !          4412: C
        !          4413: C     CHECKS FOR LEADING UNARY +,- IN EXPRESSIONS
        !          4414: C
        !          4415:   300 IF (PB.EQ.LSTACK) GO TO 460
        !          4416:       I = STACK(PB+1) - 10
        !          4417:       I2 = CUROP - 10
        !          4418:       K = PRE(I,I2)
        !          4419:   310 IF (-1.NE.K) GO TO 320
        !          4420:       FLUSH = .TRUE.
        !          4421:       GO TO 90
        !          4422:   320 GO TO (330, 470, 520, 480, 480, 490, 510), K
        !          4423: C
        !          4424: C     CREATE TEMPLATE FROM FCN CALL
        !          4425: C
        !          4426:   330 IF (ITYP.EQ.18 .AND. PARENS.EQ.0) CALLST = .TRUE.
        !          4427:       L1 = STACK(PB+2)
        !          4428:       L2 = PT - 1
        !          4429: C
        !          4430: C     CHECK FOR NO ARGS
        !          4431: C
        !          4432:       IF (L2.GT.L1) GO TO 340
        !          4433:       CALL ERROR1(18H MISSING ARGUMENTS, 18)
        !          4434:       GO TO 450
        !          4435: C
        !          4436: C     CHECK FOR NOT CHANGING THROUGH SUBROUTINE CALL THE DO CONTROL
        !          4437: C     VARIABLE OF A CURRENT LOOP OR ANY ADJUSTIBLE DIMENSION DUMMY ARG
        !          4438: C
        !          4439:   340 DO 380 I=L1,L2,2
        !          4440:         IF (STACK(I)) 350, 380, 350
        !          4441:   350   IF (DOVAR(STACK(I))) STACK(I+1) = STACK(I+1) + 32
        !          4442:         I1 = IGATT1(STACK(I),4)
        !          4443:         IF (I1) 380, 380, 360
        !          4444:   360   I1 = IGATT1(STACK(I),6)
        !          4445:         IF (I1) 380, 380, 370
        !          4446:   370   STACK(I+1) = STACK(I+1) + 64
        !          4447:   380 CONTINUE
        !          4448: C
        !          4449: C     CHECK FOR USE OF ID AS FCN ONCE AND AS SUBROUTINE LATER
        !          4450: C     OR VICE VERSA
        !          4451: C
        !          4452:       I = STACK(PB+3)
        !          4453:       L = IGATT1(I,8)
        !          4454:       IF (L.EQ.2 .OR. L.EQ.5 .OR. L.EQ.6) GO TO 410
        !          4455:       IF (.NOT.INTEXT(I,L1,L2,.TRUE.)) GO TO 390
        !          4456: C
        !          4457: C     FOUND AN INTRINSIC FCN
        !          4458: C      CHECK NOT IN A CALL STMT USED AS A SUBROUTINE
        !          4459: C
        !          4460:       IF (CALLST) GO TO 420
        !          4461:       GO TO 450
        !          4462: C
        !          4463: C     DEFINE FCN( USAGE IF UNSET
        !          4464: C     SET USAGE OF ID USED AS A PROC
        !          4465: C
        !          4466:   390 IF (CALLST) GO TO 400
        !          4467:       CALL SATT1(I, 8, 5)
        !          4468:       GO TO 430
        !          4469:   400 CALL SATT1(I, 8, 6)
        !          4470:       GO TO 430
        !          4471: C
        !          4472: C     CHECK USAGE OF PROC ALREADY USED IN PROGRAM UNIT
        !          4473: C
        !          4474:   410 IF (CALLST .AND. L.EQ.6 .OR. .NOT.CALLST .AND. (L.EQ.5 .OR.
        !          4475:      *    L.EQ.2)) GO TO 430
        !          4476:   420 CALL ERROR1(18H ILLEGAL REFERENCE, 18)
        !          4477:       GO TO 450
        !          4478:   430 IF (.NOT.OPT(3) .OR. P1ERR) GO TO 450
        !          4479: C
        !          4480: C     LOAD INTO STACK COUNT OF WORDS IN  DESCRIPTOR, INDEX OF FCN
        !          4481: C     IN SYMBOL TABLE,  STMT NO  OF  REFERENCE
        !          4482: C
        !          4483:       IF (PT+3.GE.PB) GO TO 100
        !          4484:       STACK(PT) = PT - STACK(PB+2)
        !          4485:       STACK(PT+1) = STACK(PB+3)
        !          4486:       STACK(PT+2) = NOST
        !          4487:       STACK(PT+3) = 6 - IGATT1(STACK(PB+3),8)
        !          4488:       L3 = PT + 3
        !          4489:       ICOD = 2
        !          4490:       L = L2 - L1 + 5
        !          4491:       IF (L.LE.LREF) GO TO 440
        !          4492:       CALL ERROR1(44H IN EXPR, TABLE OVERFLOW OF REF, REF IGNORED, 44)
        !          4493:       GO TO 450
        !          4494:   440 WRITE (OUTUT3) L, ICOD, (STACK(I),I=PT,L3), (STACK(I),I=L1,L2)
        !          4495: C
        !          4496: C     FCN REF POPPED AND PROPER TYPE PUT ON OPERAND STACK
        !          4497: C
        !          4498:   450 PT = STACK(PB+2)
        !          4499:       I1 = IGATT1(STACK(PB+3),1)
        !          4500:       STACK(PT) = 0
        !          4501:       STACK(PT+1) = MOD(I1,8)
        !          4502:       PT = PT + 2
        !          4503:       PB = PB + 3
        !          4504:       GO TO 520
        !          4505: C
        !          4506: C     HANDLES FIRST OPERATOR IN EXPRESSION--WILL ALWAYS BE PUSHED ONTO
        !          4507: C     OPERATOR STACK.  FCN( HAS SPECIAL PUSH.
        !          4508: C
        !          4509:   460 IF (CUROP.NE.16) GO TO 480
        !          4510: C
        !          4511: C     FOUND "FCN(" CONSTRUCT  ; STORE 3 THINGS IN STACK
        !          4512: C     PTR TO FCN NAME IN SYMBOL TABLE; PTR TO 1ST ARGE IN STACK   ;
        !          4513: C     OPERAND CODE FOR FCN(
        !          4514: C
        !          4515:   470 IF (PB-3.LE.PT) GO TO 100
        !          4516:       STACK(PB) = KNAME
        !          4517:       STACK(PB-1) = PT
        !          4518:       STACK(PB-2) = CUROP
        !          4519:       PB = PB - 3
        !          4520:       GO TO 520
        !          4521: C
        !          4522: C     SIMPLE PUSH ONTO OPERATOR STACK
        !          4523: C
        !          4524:   480 IF (PB-1.EQ.PT) GO TO 100
        !          4525:       STACK(PB) = CUROP
        !          4526:       PB = PB - 1
        !          4527:       GO TO 520
        !          4528: C
        !          4529: C     POP OPERATOR FROM STACK.  IF STACK EMPTY, PUSH CUROP ONTO
        !          4530: C     STACK.  ELSE TAKE ACTION SPECIFIED BY PRE(TOP OPERATOR,CUROP).
        !          4531: C
        !          4532:   490 CALL POP
        !          4533:       IF (ERR) GO TO 530
        !          4534:       IF (PB.LT.LSTACK) GO TO 500
        !          4535:       GO TO 480
        !          4536:   500 I = STACK(PB+1) - 10
        !          4537:       K = PRE(I,CUROP-10)
        !          4538:       GO TO 310
        !          4539: C
        !          4540: C     POP "(" WHEN HAVE FINISHED A PARENTHESIZED EXPRESSION
        !          4541: C
        !          4542:   510 CALL POP
        !          4543:       IF (ERR) GO TO 530
        !          4544: C
        !          4545: C     UPDATE PREVOP,PSTMT AFTER FINISHING PROCESSING AN OPERATOR
        !          4546: C
        !          4547:   520 PREVOP = CUROP
        !          4548:       PSTMT = K2
        !          4549:       GO TO 10
        !          4550: C
        !          4551: C     JOB OF THIS CODE IS TO FLISH TO END OF UNRECOGNIZABLE
        !          4552: C     EXPRESSION
        !          4553: C
        !          4554:   530 K2 = PSTMT
        !          4555:       ERR = .FALSE.
        !          4556:   540 IF (K2.GE.NSTMT) GO TO 80
        !          4557:       IF (STMT(K2).EQ.65) PARENS = PARENS + 1
        !          4558:       IF (STMT(K2).NE.62) GO TO 550
        !          4559:       PARENS = PARENS - 1
        !          4560:       IF (PARENS.EQ.0) GO TO 560
        !          4561:   550 K2 = K2 + 1
        !          4562:       GO TO 540
        !          4563:   560 I = GETTOK(K2,I2)
        !          4564:       K2 = I2
        !          4565:       IF ((I.EQ.1 .OR. I.EQ.6) .OR. ERR) GO TO 80
        !          4566:       GO TO 540
        !          4567:       END
        !          4568: C XXXXXINSTMT.f
        !          4569:       SUBROUTINE INSTMT(EOF, NCARD)
        !          4570:       LOGICAL ILLEG, ILHOL, ILCONT
        !          4571:       LOGICAL NEWRD, EOF, CONT, OPT, P1ERR
        !          4572:       INTEGER PSTMT, CARD(80), OUTUT, BLK, STATE, HCOUNT, STMT
        !          4573:       INTEGER SYMLEN, OUTUT2, OUTUT3, OUTUT4
        !          4574:       DIMENSION IBR(5)
        !          4575:       COMMON /INPUT/ NSTMT, PSTMT, STMT(1327)
        !          4576:       COMMON /OPTNS/ OPT(5), P1ERR
        !          4577:       COMMON /PARAMS/ INUT, OUTUT, NOCHAR, SYMLEN, OUTUT2, OUTUT3,
        !          4578:      *    OUTUT4
        !          4579:       COMMON /FACTS/ NAME, NOST, ITYP, IASF
        !          4580:       DATA NEWRD /.TRUE./
        !          4581:       DATA IBR(1), IBR(2), IBR(3), IBR(4), IBR(5) /1H*,1HC,1H.,1H0,1H /
        !          4582:       DATA CARD(1) /1H /
        !          4583: C
        !          4584: C     ROUTINE INPUTS AN ENTIRE FORTRAN STATEMENT. IT IS PASSED 1 CHAR
        !          4585: C     PER ELEMENT IN THE ARRAY STMT.
        !          4586: C     IN SHOULD BE CALLED AGAIN IF ERR IS TRUE.
        !          4587: C     EACH CARD IS WRITTEN OUT BEFORE BEING PARSED.
        !          4588: C     IN DEBLANKS CARDS USES THE VARIABLE STATE TO FIND
        !          4589: C     HOLLERITHS:
        !          4590: C     STATE = 0.....LOOK FOR BREAK CHAR
        !          4591: C     1.....HAVE BREAK CHAR AND NEED DIGIT
        !          4592: C     2.....HAVE DIGIT AND NEED DIGIT OR "H"
        !          4593: C     3....NEED TO SKIP OVER THESE CHARS, PART OF HOLLERITH
        !          4594: C     NOTE: USE "90" AS AN END OF STMT MARKER
        !          4595: C
        !          4596: C     NEWRD IS TRUE IF A NEW CARD IS NECESSARY; ELSE CARD IN BUFFER
        !          4597: C     IS USED.  EOF IS TRUE WHEN END-OF-FILE CARD ("." IN COL 1)
        !          4598: C     IS READ     NCARD GIVES # OF CARDS READ FOR THIS STMT
        !          4599: C
        !          4600:    10 NOST = NOST + 1
        !          4601:       STATE = 0
        !          4602:       NSTMT = 0
        !          4603:       ILLEG = .FALSE.
        !          4604:       ILCONT = .FALSE.
        !          4605:       ILHOL = .FALSE.
        !          4606:       NCARD = 0
        !          4607:       CONT = .FALSE.
        !          4608:    20 IF (NEWRD) CALL IN(CARD, INUT)
        !          4609:       IF (CARD(1).NE.IBR(2) .OR. CARD(2).NE.IBR(1)) GO TO 40
        !          4610: C
        !          4611: C     DEAL WITH OPTIONS CARD
        !          4612: C
        !          4613:       IF (CONT) GO TO 50
        !          4614:       CALL INOPT(CARD)
        !          4615:    30 IF (OPT(4)) WRITE (OUTUT,99999) CARD
        !          4616: 99999 FORMAT (11X, 80A1)
        !          4617:       NEWRD = .TRUE.
        !          4618:       GO TO 20
        !          4619:    40 IF (CARD(1).NE.IBR(2)) GO TO 70
        !          4620: C
        !          4621: C     DEAL WITH COMMENT CARD
        !          4622: C
        !          4623:       IF (.NOT.CONT) GO TO 30
        !          4624: C
        !          4625: C     HAVE COMPLETED STMT
        !          4626: C
        !          4627:    50 NEWRD = .FALSE.
        !          4628:       NSTMT = NSTMT + 1
        !          4629:       STMT(NSTMT) = 90
        !          4630:    60 IF (ILLEG) CALL ERROR1(
        !          4631:      *    40H WARNING - NON-FORTRAN CHARACTER IGNORED, 40)
        !          4632:       IF (ILHOL) CALL ERROR1(
        !          4633:      *    46H WARNING - NON-FORTRAN CHARACTER IN HOLLERITH , 46)
        !          4634:       IF (ILCONT) CALL ERROR1(
        !          4635:      *    45H WARNING - NON-FORTRAN CONTINUATION CHARACTER, 45)
        !          4636:       RETURN
        !          4637:    70 IF (CARD(1).NE.IBR(3)) GO TO 80
        !          4638: C
        !          4639: C     HAVE EOF
        !          4640: C
        !          4641:       IF (CONT) GO TO 50
        !          4642:       EOF = .TRUE.
        !          4643:       GO TO 60
        !          4644:    80 IF (CARD(6).EQ.IBR(4) .OR. CARD(6).EQ.IBR(5)) GO TO 100
        !          4645: C
        !          4646: C     DEAL WITH CONTINUATION CARD
        !          4647: C
        !          4648:       II = MAPCHR(CARD(6),ILCONT)
        !          4649:       IF (CONT) GO TO 110
        !          4650:       CALL ERROR1(40H WARNING - CONTINUATION NOT ALLOWED HERE, 40)
        !          4651: C
        !          4652: C     FLUSH TO NEXT NONCONTINUATION CARD
        !          4653: C
        !          4654:    90 IF (OPT(4)) WRITE (OUTUT,99998) NOST, CARD
        !          4655: 99998 FORMAT (1H , I5, 5X, 80A1)
        !          4656:       CALL IN(CARD, INUT)
        !          4657:       IF (CARD(1).NE.IBR(1) .AND. CARD(1).NE.IBR(2) .AND.
        !          4658:      *    CARD(1).NE.IBR(3) .AND. CARD(6).NE.IBR(4) .AND.
        !          4659:      *    CARD(6).NE.IBR(5)) GO TO 90
        !          4660:       NEWRD = .FALSE.
        !          4661:       GO TO 10
        !          4662: C
        !          4663: C     DEAL WITH A NON-CONTINUATION CARD
        !          4664: C
        !          4665:   100 IF (CONT) GO TO 50
        !          4666: C     DEAL WITH A LEGAL CONTIN OR NONCONTIN CARD
        !          4667:   110 NCARD = NCARD + 1
        !          4668:       IF (NCARD.LT.21) GO TO 120
        !          4669:       CALL ERROR1(33H WARNING - TOO MANY CONTINUATIONS, 33)
        !          4670:       GO TO 90
        !          4671:   120 IF (OPT(4)) WRITE (OUTUT,99998) NOST, CARD
        !          4672:       NEWRD = .TRUE.
        !          4673:       BLK = 0
        !          4674:       IF (NSTMT.NE.0) GO TO 150
        !          4675:       DO 130 I=1,5
        !          4676:         NSTMT = NSTMT + 1
        !          4677:         STMT(NSTMT) = MAPCHR(CARD(I),ILLEG)
        !          4678:   130 CONTINUE
        !          4679:   140 I = 7
        !          4680:       GO TO 180
        !          4681:   150 DO 160 I=1,5
        !          4682:         IF (MAPCHR(CARD(I),ILLEG).NE.69) GO TO 170
        !          4683:   160 CONTINUE
        !          4684:       GO TO 140
        !          4685:   170 CALL ERROR1(40H WARNING - ILLEGAL LABEL WILL BE IGNORED, 40)
        !          4686:       GO TO 140
        !          4687:   180 IF (I.LE.72) GO TO 200
        !          4688: C
        !          4689: C     AFTER TRANSLATE CARD CHECK FOR BLANK CARD
        !          4690: C     AND GO BACK FOR A CONTINUATION CARD
        !          4691: C
        !          4692:       IF (BLK.NE.66) GO TO 190
        !          4693:       CALL ERROR1(33H WARNING - BLANK CARD ENCOUNTERED, 33)
        !          4694:       GO TO 90
        !          4695:   190 CONT = .TRUE.
        !          4696:       GO TO 20
        !          4697:   200 IF (STATE.NE.3) GO TO 210
        !          4698: C
        !          4699: C     STATE 3 --ARE PROCESSING A HOLLERITH
        !          4700: C
        !          4701:       HCOUNT = HCOUNT - 1
        !          4702:       KK = MAPCHR(CARD(I),ILHOL)
        !          4703:       IF (HCOUNT.EQ.0) STATE = 0
        !          4704:       GO TO 290
        !          4705:   210 NSTMT = NSTMT + 1
        !          4706:       STMT(NSTMT) = MAPCHR(CARD(I),ILLEG)
        !          4707:       IF (STMT(NSTMT).NE.69) GO TO 220
        !          4708: C
        !          4709: C     BLANK ENCOUNTERED AND DELETED
        !          4710: C
        !          4711:       BLK = BLK + 1
        !          4712:       NSTMT = NSTMT - 1
        !          4713:       GO TO 290
        !          4714:   220 KK = STATE + 1
        !          4715:       GO TO (280, 260, 230), KK
        !          4716: C
        !          4717: C     STATE 2--SKIP OVER LEADING DIGIT STRING; LOOK FOR H
        !          4718: C
        !          4719:   230 IF (STMT(NSTMT).LE.9) GO TO 290
        !          4720:       IF (STMT(NSTMT).NE.37) GO TO 270
        !          4721: C
        !          4722: C     PROCESS HOLLERITH COUNT
        !          4723: C
        !          4724:       STMT(NSTMT) = -STMT(NSTMT)
        !          4725:       STATE = 3
        !          4726:       KK = NSTMT - KST
        !          4727:       I10 = 1
        !          4728:       HCOUNT = 0
        !          4729:       DO 240 K=1,KK
        !          4730:         JJ = NSTMT - K
        !          4731:         HCOUNT = HCOUNT + I10*STMT(JJ)
        !          4732:         I10 = I10*10
        !          4733:   240 CONTINUE
        !          4734:       STMT(KST) = HCOUNT - 2048
        !          4735:       NSTMT = KST
        !          4736:       IF (HCOUNT.LE.0) GO TO 250
        !          4737:       GO TO 290
        !          4738: C
        !          4739: C     AVOID THE 0H CONSTRUCTION
        !          4740: C
        !          4741:   250 CALL ERROR1(44H WARNING - 0H ILLEGAL HOLLERITH CONSTRUCTION, 44)
        !          4742:       STATE = 0
        !          4743:       GO TO 290
        !          4744: C
        !          4745: C     STATE 1--LOOK FOR START OF DIGIT STRING BEFORE H
        !          4746: C
        !          4747:   260 IF (STMT(NSTMT).GT.9) GO TO 270
        !          4748:       STATE = 2
        !          4749:       KST = NSTMT
        !          4750:       GO TO 290
        !          4751: C
        !          4752: C     CHECK FOR NESTED SPECIAL HEADING CHARS
        !          4753: C
        !          4754:   270 STATE = 0
        !          4755:   280 IF ((STMT(NSTMT).LT.65) .OR. (STMT(NSTMT).GT.68)) GO TO 290
        !          4756:       STATE = 1
        !          4757:   290 I = I + 1
        !          4758:       GO TO 180
        !          4759:       END
        !          4760: C XXXXXIN.f
        !          4761:       SUBROUTINE IN(CARD, INUT)
        !          4762: C
        !          4763:       INTEGER CARD(80)
        !          4764:       LOGICAL EOF
        !          4765: C
        !          4766:       DATA EOF /.FALSE./
        !          4767:       DATA IDOT /1H./
        !          4768: C
        !          4769:       IF (EOF) RETURN
        !          4770: C
        !          4771: C     READ A CARD. PHYSICAL EOF SHOULD TRANSFER TO 100
        !          4772: C
        !          4773:       READ (INUT,99999) CARD
        !          4774: 99999 FORMAT (80A1)
        !          4775:       IF (CARD(1).NE.IDOT) RETURN
        !          4776: C
        !          4777: C     HERE FOR EOF
        !          4778: C
        !          4779:  100  CARD(1) = IDOT
        !          4780:       EOF = .TRUE.
        !          4781: C
        !          4782:       RETURN
        !          4783:       END
        !          4784: C XXXXXINOPT.f
        !          4785:       SUBROUTINE INOPT(CARD)
        !          4786:       INTEGER S(8), CARD(80), J(5)
        !          4787:       LOGICAL OPT, P1ERR
        !          4788:       COMMON /OPTNS/ OPT(5), P1ERR
        !          4789:       DATA S(1), S(2), S(3), S(4), S(5), S(6), S(7) /1HS,1HR,1HP,1HL,
        !          4790:      *    1HC,1H,,1HN/, S(8) /1H /
        !          4791: C
        !          4792: C     OPT(1) IF TRUE, PRINT SYMBOL TABLE
        !          4793: C      IF FALSE, NOSYMBOL TABLE PRINTED
        !          4794: C     OPT(2) IF TRUE, PRINT CROSS REFERENCES
        !          4795: C      IF FALSE, NO REFS PRINTED
        !          4796: C     OPT(3) IF TRUE, DO PASS 2; ELSE DO NOT
        !          4797: C     OPT(4) IF TRUE GET LISTING OF PGM; ELSE DO NOT
        !          4798: C      OPT(5) IF TRUE, COMPILE PGM AFTER PROCESSING; ELSE DO NOT
        !          4799: C     SET OPTIONS FROM CARD READ IN BY "IN"
        !          4800: C     P2 IS TURNED OFF ONLY ONCE A RUN;  IT CANNOT BE TURNED ON AGAIN
        !          4801: C     OPTIONS CARD IS ONLY ACCEPTED IF SYNTAX ON CARD IS OK
        !          4802: C     SYNTAX IS C* FOLLOWED BY AT LEAST ONE OPTION OF THEFORM
        !          4803: C     OPT BLANKS, OPT N, AT LEAST ONE OF (S,R,P,L,C), OPT BLANKS
        !          4804: C     WHERE OPTIONS ARE SEPARATEDBY COMMAS
        !          4805: C
        !          4806:       DO 10 I=1,5
        !          4807:         J(I) = 0
        !          4808:    10 CONTINUE
        !          4809:       IP = 2
        !          4810:    20 IP = IP + 1
        !          4811:       IF (IP.GE.73) GO TO 60
        !          4812: C      DEBLANK LEADING BLANKS
        !          4813:       IF (CARD(IP).EQ.S(8)) GO TO 20
        !          4814:       L = 1
        !          4815: C
        !          4816: C     CHECK FOR NEGATIVE
        !          4817: C
        !          4818:       IF (CARD(IP).NE.S(7)) GO TO 30
        !          4819:       L = -1
        !          4820:       IP = IP + 1
        !          4821:       IF (IP.GE.73) GO TO 60
        !          4822:    30 DO 40 I=1,5
        !          4823:         IF (S(I).NE.CARD(IP)) GO TO 40
        !          4824:         J(I) = J(I) + L
        !          4825:         GO TO 50
        !          4826:    40 CONTINUE
        !          4827:       GOTO 100
        !          4828: C
        !          4829: C     FLUSH BLANKS TO NEXT COMMA
        !          4830: C
        !          4831:    50 IP = IP + 1
        !          4832:       IF (IP.GE.73) GO TO 60
        !          4833:       IF (CARD(IP).EQ.S(6)) GO TO 20
        !          4834:       IF(CARD(IP).NE.S(8)) GOTO 100
        !          4835:       GO TO 50
        !          4836:    60 DO 90 K=1,5
        !          4837:         IF (J(K)) 70, 90, 80
        !          4838:    70   OPT(K) = .FALSE.
        !          4839:         GO TO 90
        !          4840: C     DO NOT LET USER TURN ON PASS2 AFTER WE TURN IT OFF
        !          4841:    80   IF (K.EQ.3 .AND. .NOT.OPT(3)) GO TO 90
        !          4842:         OPT(K) = .TRUE.
        !          4843:    90 CONTINUE
        !          4844:  100  RETURN
        !          4845:       END
        !          4846: C XXXXXLIST.f
        !          4847:       SUBROUTINE LIST
        !          4848:       INTEGER STMT, PSTMT
        !          4849:       LOGICAL ERR, SYSERR, ABORT, IDLIST, IDO, FINDO
        !          4850:       LOGICAL SIO
        !          4851:       COMMON /INPUT/ NSTMT, PSTMT, STMT(1327)
        !          4852:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !          4853:       COMMON /LISTDO/ LPT, LEN, LS(64)
        !          4854: C
        !          4855: C     ROUTINE PROCESSES THE LIST CONSTRUCT, USED IN I-O STMTS
        !          4856: C     LEV USED TO COUNT PARENTHESES LEVELS
        !          4857: C
        !          4858:       SIO = .FALSE.
        !          4859:       LPT = LEN + 1
        !          4860:       FINDO = .FALSE.
        !          4861:       ICNT = 0
        !          4862:       LEV = 0
        !          4863:    10 IF (STMT(PSTMT).NE.65) GO TO 20
        !          4864:       LEV = LEV + 1
        !          4865:       IF (LEV.GT.ICNT) ICNT = ICNT + 1
        !          4866:       PSTMT = PSTMT + 1
        !          4867:       GO TO 10
        !          4868:    20 IF (PSTMT.GE.NSTMT) GO TO 120
        !          4869: C
        !          4870: C     ALLOW <ID>=ARRAY,ARRAY ELE., VARIABLE
        !          4871: C
        !          4872:       IF (.NOT.IDLIST(IDO)) GO TO 130
        !          4873: C
        !          4874: C     FALSE RETURN SIGNIFIES ERROR IN IDLIST
        !          4875: C     TRUE RETURN SIGNIFIES NO ERROR IN IDLIST
        !          4876: C     IDO = .TRUE. MEANS , <DOSPEC> IS NEXT
        !          4877: C     IDO = .FALSE. MEANS AT END-OF-STMT, ", (" , OR ")"
        !          4878: C
        !          4879: C      FOUND <DOSPEC> )
        !          4880: C
        !          4881:       IF (SYSERR) GO TO 130
        !          4882:       IF (.NOT.IDO) GO TO 30
        !          4883:       PSTMT = PSTMT + 1
        !          4884:       GO TO 100
        !          4885: C
        !          4886: C      FOUND END OF SIMPLE LIST "( <IDLIST> )"
        !          4887: C
        !          4888:    30 IF (STMT(PSTMT).EQ.62) GO TO 60
        !          4889:    40 IF (PSTMT.NE.NSTMT) GO TO 50
        !          4890: C
        !          4891: C     AT END OF STMT
        !          4892: C
        !          4893:       IF (FINDO) CALL LDOVAR
        !          4894:       IF (LEV.NE.0) GO TO 120
        !          4895:       GO TO 130
        !          4896: C
        !          4897: C      NEED "," AND NEW <LIST> CONSTRUCT
        !          4898: C
        !          4899:    50 IF (STMT(PSTMT).NE.68) GO TO 120
        !          4900:       PSTMT = PSTMT + 1
        !          4901:       GO TO 10
        !          4902: C
        !          4903: C     MUST CHECK FOR ILLEGALLY NESTED SIMPLE LISTS
        !          4904: C     SIMPLE LIST= ( <IDLIST> )
        !          4905: C     ICNT COUNTAINS LEVEL OF LAST SIMPLE LIST WITHIN A
        !          4906: C      PARENTHESIZED EXPRESSION
        !          4907: C
        !          4908:    60 SIO = .TRUE.
        !          4909:       IF (LEV.EQ.0) GO TO 120
        !          4910:       PSTMT = PSTMT + 1
        !          4911:       IF (ICNT.LE.LEV) GO TO 80
        !          4912:    70 CALL ERROR1(28H ILLEGAL PARENTHESES NESTING, 28)
        !          4913:       GO TO 130
        !          4914:    80 LEV = LEV - 1
        !          4915:       IF (LEV) 120, 110, 90
        !          4916: C
        !          4917: C     CHECK FOR CONSTRUCT FOLLOWING <DOSPEC>
        !          4918: C
        !          4919:    90 IF (STMT(PSTMT).EQ.62) GO TO 70
        !          4920:       IF (STMT(PSTMT).NE.68) GO TO 120
        !          4921:       CALL NEXTOK(PSTMT+1, K2, K)
        !          4922:       IF (K.NE.0 .OR. STMT(K2).NE.63) GO TO 40
        !          4923:       PSTMT = PSTMT + 1
        !          4924: C
        !          4925: C     LOOK FOR DOSPEC
        !          4926: C
        !          4927:   100 CALL DOSPEC(0, K2, .TRUE.)
        !          4928:       IF (SYSERR .OR. ERR) GO TO 130
        !          4929:       FINDO = .TRUE.
        !          4930:       IF (STMT(K2).NE.62) GO TO 120
        !          4931:       PSTMT = K2 + 1
        !          4932:       IF (ICNT.GT.LEV) ICNT = ICNT - 1
        !          4933:       GO TO 80
        !          4934: C
        !          4935: C     CHECK NESTED DOSPECS IN LIST
        !          4936: C
        !          4937:   110 IF (LEV.NE.0 .OR. .NOT.FINDO) GO TO 40
        !          4938:       FINDO = .FALSE.
        !          4939:       CALL LDOVAR
        !          4940:       LPT = LEN + 1
        !          4941:       GO TO 40
        !          4942:   120 CALL ERROR1(20H ILLEGAL PUNCTUATION, 20)
        !          4943:       IF (FINDO) CALL LDOVAR
        !          4944:   130 IF (SIO) CALL ERROR1(34H REDUNDANT PARENTHESES ARE ILLEGAL, 34)
        !          4945:       RETURN
        !          4946:       END
        !          4947: C XXXXXLOOKUP.f
        !          4948:       INTEGER FUNCTION LOOKUP(K1, LABEL)
        !          4949: C
        !          4950: C     STMT(PSTMT)-STMT(K2-1) TO BE ENTERED IN DSA
        !          4951: C     LABEL IS TRUE IF SYMBOL IS A LABEL.  ROUTINE
        !          4952: C     RETURNS VALUE OF INDEX OF SYMBOL IN DSA, CREATING
        !          4953: C     A NEW ENTRY ID NESESSARY.  IT ENTERS SYMBOL INTO
        !          4954: C     SYMBOL OR LABEL CHAIN AND CREATES A CROSSREFERENCE
        !          4955: C     ENTRY FOR THE CURRENT STATMT NUMBER
        !          4956: C
        !          4957:       INTEGER PSTMT, SYMLEN, DSA, HASH, L(6), LL(6)
        !          4958:       INTEGER BLANK, SYMHD, STMT, OUTUT, BNEXT, Q(70)
        !          4959:       INTEGER PDSA, OUTUT2, OUTUT3, OUTUT4
        !          4960:       LOGICAL LABEL, ERR, P1ERR, OPT, SYSERR, ABORT
        !          4961:       COMMON /PARAMS/ INUT, OUTUT, NOCHAR, SYMLEN, OUTUT2, OUTUT3,
        !          4962:      *    OUTUT4
        !          4963:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !          4964:       COMMON /FACTS/ NAME, NOST, ITYP, IASF
        !          4965:       COMMON /INPUT/ NSTMT, PSTMT, STMT(1327)
        !          4966:       COMMON /TABL/ NEXT, LABHD, SYMHD, BNEXT
        !          4967:       COMMON /CTABL/ LDSA, PDSA, DSA(5000)
        !          4968:       COMMON /CHASH/ LHASH, HASH(401)
        !          4969:       COMMON /TRANS/ Q
        !          4970:       COMMON /OPTNS/ OPT(5), P1ERR
        !          4971:       DATA BLANK /1H /
        !          4972:       K = K1 - PSTMT
        !          4973:       IF (K.LE.6) GO TO 10
        !          4974:       CALL ERROR1(39H IDENTIFIER TOO LONG, WILL BE TRUNCATED, 39)
        !          4975:       K = 6
        !          4976:    10 KK = K
        !          4977:       DO 20 I=1,K
        !          4978:         II = PSTMT + I - 1
        !          4979:         J = STMT(II) + 1
        !          4980:         LL(I) = Q(J)
        !          4981:    20 CONTINUE
        !          4982:       DO 30 I=1,SYMLEN
        !          4983:         L(I) = BLANK
        !          4984:    30 CONTINUE
        !          4985:       CALL S5PACK(LL, L, K)
        !          4986: C
        !          4987: C     HAVE PACKED SYMBOL;NOW CALCULATE HASH
        !          4988: C     HASH IS(PRODUCT OF FIRST AND THIRD LETTERS PLUS SECOND) MOD 257
        !          4989: C
        !          4990:       IF (KK.LT.3) GO TO 50
        !          4991:       IHASHS = STMT(PSTMT)*STMT(PSTMT+2) + STMT(PSTMT+1)
        !          4992:    40 IHASHS = MOD(IHASHS,LHASH)
        !          4993:       ISAVE = IHASHS
        !          4994:       IHASH = IHASHS + 1
        !          4995:       GO TO 80
        !          4996:    50 IHASHS = STMT(PSTMT)
        !          4997:       GO TO (60, 70), KK
        !          4998:    60 IHASHS = IHASHS*69 + 69
        !          4999:       GO TO 40
        !          5000:    70 IHASHS = IHASHS*69 + STMT(PSTMT+1)
        !          5001:       GO TO 40
        !          5002:    80 IF (HASH(IHASH).EQ.0) GO TO 140
        !          5003: C
        !          5004: C     IF TABLE EMPTY, CREATE ENTRY, SEND BACK INDEX OF FIRST WORD IN DSA
        !          5005: C     ELSE COMPARE SYMBOL TO ID AND RETURN INDEX OF PROPER ENTRY IN HASH
        !          5006: C     TABLE  AFTER RESOLVING COLLISION
        !          5007: C
        !          5008:       DO 90 J=1,SYMLEN
        !          5009:         II = HASH(IHASH) + 3 + J
        !          5010:         IF (L(J).NE.DSA(II)) GO TO 100
        !          5011:    90 CONTINUE
        !          5012:       LOOKUP = HASH(IHASH)
        !          5013:       IF (DSA(LOOKUP+1)) 190, 190, 200
        !          5014: C
        !          5015: C     RESOLVE CONFLICTS BY LINEAR CONGRUENCE
        !          5016: C
        !          5017:   100 IHASHS = MOD(IHASHS+1,LHASH)
        !          5018:       IF (IHASHS.EQ.ISAVE) GO TO 110
        !          5019:       IHASH = IHASHS + 1
        !          5020:       GO TO 80
        !          5021:   110 CALL ERROR1(34H IN LOOKUP, TABLE OVERFLOW OF HASH, 34)
        !          5022:   120 SYSERR = .TRUE.
        !          5023:       RETURN
        !          5024:   130 CALL ERROR1(33H IN LOOKUP, TABLE OVERFLOW OF DSA, 33)
        !          5025:       GO TO 120
        !          5026: C
        !          5027: C     CREATE NEW SYMBOL TABLE ENTRY; ZERO ITS CROSSREF TAIL PTR
        !          5028: C
        !          5029:   140 HASH(IHASH) = NEXT
        !          5030:       IF (NEXT+6+SYMLEN.GE.BNEXT) GO TO 130
        !          5031:       LOOKUP = NEXT
        !          5032: C
        !          5033: C*****DSA
        !          5034: C     1ST WORD..... ATTRIBUTE WORD
        !          5035: C     FIELD 1
        !          5036: C
        !          5037: C     BITS 0-2*TYPE (FOR SYMBOL) 0 DOUBLE PRECISION, 1 REAL, 2 INT,
        !          5038: C      3 COMPLEX,4 LOGICAL, 5 HOLLERITH
        !          5039: C      TYPE (FOR LABEL) 1 EXECUTABLE STMT, 2 NONEXEC. STMT,
        !          5040: C      3 FORMAT STMT
        !          5041: C     BIT 3****EXPLICITLY TYPED 1, IMPLICITLY 0
        !          5042: C     FIELD 2
        !          5043: C     BIT 4****(FOR SYMBOL) IN COMMON 1, NOT IN COMMON 0
        !          5044: C      (FOR LABEL) DEFINED 1, REFERENCED 0
        !          5045: C      (FOR COMMON-NAME) INITIALIZED IN BLOCK DATA SUBPGM
        !          5046: C     FIELD 3
        !          5047: C     BIT 5****EQUIVALENCED 1
        !          5048: C     FIELD 4
        !          5049: C     BIT 6****DUMMY SUBROUTINE/FUNCTION ARGUMENT 1
        !          5050: C     FIELD 5
        !          5051: C     BIT 7****VALUE SET BY P.U. 1
        !          5052: C     FIELD 6
        !          5053: C     BIT 8****VARIABLE USED AS DIMENSION IN VARIABLY DIMENSIONED ARRAY
        !          5054: C     FIELD 7
        !          5055: C     BIT 9-10*SCALAR 0, NUMBER OF ARRAY BOUNDS 1,2,3
        !          5056: C     FIELD 8
        !          5057: C     BITS 11-15**USAGE--UNSET 0, ASF ARG 1, ASF FCN 2, CURRENT P. U.=
        !          5058: C     SUBR 3, CURRENT P.U.=FCN 4, EXTERNAL FCN 5, EXTERNAL SUBR 6,
        !          5059: C     COMMON-NAME 7, ASSIGN/GOTO VARIABLE 8,LABEL 9, VARIABLE 10,
        !          5060: C     CURRENT P.U.=BLOCK DATA 11, CURRENT P.U.=MAIN 12, EXTERNAL ENTITY
        !          5061: C     13, INTRINSIC FCN 14
        !          5062: C     BITS 5-8 ARE 0 IF ENTRY CORRESPONDS TO ENTITY WITHOUT THE
        !          5063: C     ATTRIBUTE MENTIONED
        !          5064: C
        !          5065: C     2ND WD..... XREF LIST TAIL POINTER
        !          5066: C     3D WORD.....EXTRA INFO POINTER
        !          5067: C
        !          5068: C     FOR A VARIABLE, 3D WORD POINTS TO A 2 WORD BLOCK, FIRST WORD
        !          5069: C     CONTAINING STORAGE UNIT LENGTH OF THE VARIABLE (-1 IF VARIABLY
        !          5070: C     DIMENSIONED ARRAY);  SECOND WORD CONTAINING INDEX OF COMMON
        !          5071: C     ENTRY IN DSA;
        !          5072: C     FOR A LABEL, 3D WORD CONTAINS POINTER TO 2 WORD BLOCK ; AFTER
        !          5073: C     LABEL DEFINED, FIRST WORD CONTAINS STMT NUMBER OF FIRST STMT
        !          5074: C     IN CURRENT DO NESTING LEVEL; SECOND WORD CONTAINS NEGATIVE THE
        !          5075: C     NESTING LEVEL;  WHEN END OF THIS NESTING LEVEL IS ENCOUNTERED
        !          5076: C     ALL 2ND WORDS FOR THAT LEVEL ARE UPDATED TO CONTAIN STMT NUMBER
        !          5077: C     OF LAST STMT AT THAT NESTING LEVEL;
        !          5078: C     FOR A COMMON-NAME, 3D WORD POINTS TO HEAD OF LINEAR LINKED LIST
        !          5079: C     OF INDICES OF DSA ENTRIES FOR ORDERED ELEMENTS IN THAT COMMON;
        !          5080: C     FOR THE CURRENT P.U. IF ITS A SUBR OR FCN, 3D WORD CONTAINS
        !          5081: C     A LINEAR LINKED LIST OF INDICES IN DSA OF ENTRIES FOR ORDERED
        !          5082: C     DUMMIES OF THAT SUBPGM;
        !          5083: C
        !          5084: C     4TH WORD..... CHAIN POINTER TO ENTRY IN DSA FOR LAST SYMBOL
        !          5085: C     OR LABEL FOR WHICH A NEW ENTRY WAS CREATED
        !          5086: C     5-7TH WORD.....PACKED CHARACTERS OF SYMBOL OR LABEL
        !          5087: C
        !          5088:       J = NEXT + 2
        !          5089:       DO 150 I=NEXT,J
        !          5090:         DSA(I) = 0
        !          5091:   150 CONTINUE
        !          5092:       J = J + 1
        !          5093:       DO 160 I=1,SYMLEN
        !          5094:         II = I + J
        !          5095:         DSA(II) = L(I)
        !          5096:   160 CONTINUE
        !          5097: C
        !          5098: C     SETONE OF THE CHAIN POINTERS TO PUT THIS SYMBOL ON CHAIN
        !          5099: C
        !          5100:       IF (LABEL) GO TO 170
        !          5101:       DSA(J) = SYMHD
        !          5102:       SYMHD = NEXT
        !          5103:       GO TO 180
        !          5104:   170 DSA(J) = LABHD
        !          5105:       LABHD = NEXT
        !          5106:   180 NEXT = 4 + SYMLEN + NEXT
        !          5107: C
        !          5108: C     BEGINNEW XREF LIST
        !          5109: C
        !          5110:   190 IF (.NOT.LABEL .AND. .NOT.OPT(2)) GO TO 210
        !          5111:       IF (NEXT+2.GE.BNEXT) GO TO 130
        !          5112:       DSA(BNEXT-1) = NOST
        !          5113:       DSA(LOOKUP+1) = BNEXT - 1
        !          5114:       DSA(BNEXT) = BNEXT - 1
        !          5115:       BNEXT = BNEXT - 2
        !          5116:       GO TO 210
        !          5117: C
        !          5118: C     XREF LIST UPDATE; CHECK TO SEE IF STATEMENT NUMBER IS ALREADY
        !          5119: C     THERE
        !          5120: C
        !          5121:   200 IF (.NOT.LABEL .AND. .NOT.OPT(2)) GO TO 210
        !          5122:       IF (NEXT+2.GE.BNEXT) GO TO 130
        !          5123:       J = DSA(LOOKUP+1)
        !          5124:       IF (DSA(J).EQ.NOST) GO TO 210
        !          5125:       DSA(BNEXT) = DSA(J+1)
        !          5126:       DSA(J+1) = BNEXT - 1
        !          5127:       DSA(LOOKUP+1) = BNEXT - 1
        !          5128:       DSA(BNEXT-1) = NOST
        !          5129:       BNEXT = BNEXT - 2
        !          5130:   210 RETURN
        !          5131:       END
        !          5132: C XXXXXMAPCHR.f
        !          5133:       INTEGER FUNCTION MAPCHR(CHAR, ERR)
        !          5134: C
        !          5135: C     MAPCHR RETURNS THE INTERNAL CODE OF THE CHARACTER CHAR
        !          5136: C
        !          5137:       INTEGER CHAR
        !          5138:       INTEGER LET(46), ICODE(46)
        !          5139:       LOGICAL ERR
        !          5140: C
        !          5141:       DATA LET(7), ICODE(7) /1H0,0/
        !          5142:       DATA LET(16), ICODE(16) /1H1,1/
        !          5143:       DATA LET(22), ICODE(22) /1H2,2/
        !          5144:       DATA LET(24), ICODE(24) /1H3,3/
        !          5145:       DATA LET(26), ICODE(26) /1H4,4/
        !          5146:       DATA LET(28), ICODE(28) /1H5,5/
        !          5147:       DATA LET(25), ICODE(25) /1H6,6/
        !          5148:       DATA LET(38), ICODE(38) /1H7,7/
        !          5149:       DATA LET(34), ICODE(34) /1H8,8/
        !          5150:       DATA LET(32), ICODE(32) /1H9,9/
        !          5151:       DATA LET(3), ICODE(3) /1HA,30/
        !          5152:       DATA LET(36), ICODE(36) /1HB,31/
        !          5153:       DATA LET(14), ICODE(14) /1HC,32/
        !          5154:       DATA LET(6), ICODE(6) /1HD,33/
        !          5155:       DATA LET(5), ICODE(5) /1HE,34/
        !          5156:       DATA LET(33), ICODE(33) /1HF,35/
        !          5157:       DATA LET(27), ICODE(27) /1HG,36/
        !          5158:       DATA LET(37), ICODE(37) /1HH,37/
        !          5159:       DATA LET(8), ICODE(8) /1HI,38/
        !          5160:       DATA LET(44), ICODE(44) /1HJ,39/
        !          5161:       DATA LET(46), ICODE(46) /1HK,40/
        !          5162:       DATA LET(13), ICODE(13) /1HL,41/
        !          5163:       DATA LET(12), ICODE(12) /1HM,42/
        !          5164:       DATA LET(4), ICODE(4) /1HN,43/
        !          5165:       DATA LET(2), ICODE(2) /1HO,44/
        !          5166:       DATA LET(18), ICODE(18) /1HP,45/
        !          5167:       DATA LET(43), ICODE(43) /1HQ,46/
        !          5168:       DATA LET(11), ICODE(11) /1HR,47/
        !          5169:       DATA LET(15), ICODE(15) /1HS,48/
        !          5170:       DATA LET(10), ICODE(10) /1HT,49/
        !          5171:       DATA LET(30), ICODE(30) /1HU,50/
        !          5172:       DATA LET(42), ICODE(42) /1HV,51/
        !          5173:       DATA LET(45), ICODE(45) /1HW,52/
        !          5174:       DATA LET(39), ICODE(39) /1HX,53/
        !          5175:       DATA LET(35), ICODE(35) /1HY,54/
        !          5176:       DATA LET(41), ICODE(41) /1HZ,55/
        !          5177:       DATA LET(31), ICODE(31) /1H+,60/
        !          5178:       DATA LET(29), ICODE(29) /1H-,61/
        !          5179:       DATA LET(19), ICODE(19) /1H),62/
        !          5180:       DATA LET(23), ICODE(23) /1H=,63/
        !          5181:       DATA LET(17), ICODE(17) /1H.,64/
        !          5182:       DATA LET(20), ICODE(20) /1H(,65/
        !          5183:       DATA LET(21), ICODE(21) /1H*,66/
        !          5184:       DATA LET(40), ICODE(40) /1H/,67/
        !          5185:       DATA LET(9), ICODE(9) /1H,,68/
        !          5186:       DATA LET(1), ICODE(1) /1H ,69/
        !          5187: C
        !          5188:       DO 10 I=1,46
        !          5189:         IF (CHAR.EQ.LET(I)) GO TO 20
        !          5190:    10 CONTINUE
        !          5191: C
        !          5192: C     UNKNOWN, RETURN BLANK AND SET ERR = .TRUE.
        !          5193: C
        !          5194:       MAPCHR = 69
        !          5195:       ERR = .TRUE.
        !          5196:       RETURN
        !          5197: C
        !          5198: C     KNOWN, RETURN INTERNAL CODE, LEAVE ERR ALONE
        !          5199: C
        !          5200:    20 MAPCHR = ICODE(I)
        !          5201:       RETURN
        !          5202:       END
        !          5203: C XXXXXPU.f
        !          5204:       SUBROUTINE PU
        !          5205:       INTEGER STMT, PSTMT, SYMLEN, OUTUT, SYMHD, BNEXT, HASH, DSA
        !          5206:       INTEGER STACK, DOPT, DOLIST, PDSA, OUTUT2, OUTUT3, OUTUT4
        !          5207:       INTEGER Q(70)
        !          5208:       LOGICAL ERR, BLKD, SYSERR, LOGIF1, LOGIF2, LAB, EOF
        !          5209:       LOGICAL NEW, TOKLAB, EXECUT, P1ERR, OPT, RET, ABORT
        !          5210:       LOGICAL P2, QBR
        !          5211:       COMMON /OPTNS/ OPT(5), P1ERR
        !          5212:       COMMON /INPUT/ NSTMT, PSTMT, STMT(1327)
        !          5213:       COMMON /PARAMS/ INUT, OUTUT, NOCHAR, SYMLEN, OUTUT2, OUTUT3,
        !          5214:      *    OUTUT4
        !          5215:       COMMON /CEXPRS/ LSTACK, STACK(620)
        !          5216:       COMMON /FACTS/ NAME, NOST, ITYP, IASF
        !          5217:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !          5218:       COMMON /TABL/ NEXT, LABHD, SYMHD, BNEXT
        !          5219:       COMMON /CHASH/ LHASH, HASH(401)
        !          5220:       COMMON /CTABL/ LDSA, PDSA, DSA(5000)
        !          5221:       COMMON /DOS/ DOPT, LDO, DOLIST(192)
        !          5222:       COMMON /TRANS/ Q
        !          5223:       COMMON /PASS/ P2, QBR
        !          5224: C
        !          5225: C     ROUTINE HANDLES CYCLING THROUGH STMTS OF A PGM UNIT.  NEW IS
        !          5226: C     USED TO HANDLE P.U.'S WITHOUT END STMTS.  FLUSHING OF STMTS
        !          5227: C     TO NEXT END OR HEADING STMT IS PROVIDED FOR ILLEGAL SEQUENCING
        !          5228: C     LOGIF1,LOGIF2 ARE USED TO CYCLE THROUGH LOGICAL IF STMTS
        !          5229: C     EOF OF INPUT FILE
        !          5230: C     ERR USED AS ERROR DIAGNOSTIC INDICATOR
        !          5231: C     NEWRD, NEW USED TO CONTROL INPUT
        !          5232: C
        !          5233:       EOF = .FALSE.
        !          5234:       NEW = .FALSE.
        !          5235: C
        !          5236: C     INTER-PROGRAM INITIALIZATION
        !          5237: C     NOST CONTAINS CURRENT STATEMENT NUMBER
        !          5238: C     ITYP CONTAINS TYPE OF STMT
        !          5239: C     BLKD IS TRUE FOR BLOCK DATA PGM UNIT, ELSE FALSE
        !          5240: C     EXECUT IS TRUE FOR AT LEAST ONE EXECUTABLE STMT IN
        !          5241: C      PROGRAM UNIT EXISTING
        !          5242: C     NAME CONTAINS INDEX IN DSA OF PGM UNIT NAME
        !          5243: C     P1ERR USED TO CONTROL WRITING OF SYMBOL TABLE FOR
        !          5244: C      PASS 2
        !          5245: C     RET IS TRUE IF RETURN STMT OCCURS IN P.U. ELSE FALSE
        !          5246: C     NEXT, BNEXT POINT INTO DSA
        !          5247: C     LABHD POINTS TO HEAD OF LABELS LIST IN DSA
        !          5248: C     SYMHD POINTS TO HEAD OF SYMBOLS LIST IN DSA
        !          5249: C     KGP, IGP USED TO CHECK STMT SEQUENCING
        !          5250: C     DOPT,DOLIST USED TO CHECK DO LOOP NESTING
        !          5251: C
        !          5252:    10 NOST = 0
        !          5253:       ITYP = 0
        !          5254:       LTYP = 0
        !          5255:       BLKD = .FALSE.
        !          5256:       EXECUT = .FALSE.
        !          5257:       NAME = 0
        !          5258:       P1ERR = .FALSE.
        !          5259:       RET = .FALSE.
        !          5260:       NEXT = 1
        !          5261:       BNEXT = LDSA
        !          5262:       LABHD = 0
        !          5263:       SYMHD = 0
        !          5264:       KGP = 0
        !          5265:       DOPT = 1
        !          5266:       DOLIST(1) = 1
        !          5267:       DO 20 I=2,6
        !          5268:         DOLIST(I) = 0
        !          5269:    20 CONTINUE
        !          5270:       DO 30 I=1,LHASH
        !          5271:         HASH(I) = 0
        !          5272:    30 CONTINUE
        !          5273: C
        !          5274: C     DONT GOTO NEW PAGE IF NOT PRODUCING LISTING
        !          5275: C
        !          5276:       IF (.NOT.OPT(4)) GO TO 40
        !          5277:       WRITE (OUTUT,99999)
        !          5278: 99999 FORMAT (32H1PFORT VERIFIER 1/12/79 VERSION //)
        !          5279: C
        !          5280: C     INPUT NEW STMT; RETURN WHEN HIT EOF STMT
        !          5281: C     FIND LABELS
        !          5282: C
        !          5283: C     HEADING STMT INADVERTENTLY READ BECAUSE OF MISSING END
        !          5284: C
        !          5285:    40 IF (.NOT.NEW) GO TO 70
        !          5286:       NEW = .FALSE.
        !          5287:       NOST = 1
        !          5288:       IF (.NOT.OPT(4)) GO TO 80
        !          5289:       K = NSTMT - 1
        !          5290:       DO 50 I=1,K
        !          5291:         II = STMT(I) + 1
        !          5292:         STACK(I) = Q(II)
        !          5293:    50 CONTINUE
        !          5294:       WRITE (OUTUT,99998) NOST, (STACK(I),I=1,K)
        !          5295: 99998 FORMAT (1H , I5, 5X, 80A1)
        !          5296:       GO TO 80
        !          5297:    60 CALL ERROR1(20H UNRECOGNIZABLE STMT, 20)
        !          5298:       ERR = .FALSE.
        !          5299:    70 CALL INSTMT(EOF, NCARD)
        !          5300:       IF (EOF) GO TO 400
        !          5301:    80 LAB = .FALSE.
        !          5302: C
        !          5303: C     TYPST TYPES THE CURRENT STAMT
        !          5304: C     ITYP IS NO 1-30 TELLING STMT WE HAVE
        !          5305: C      KGP IS LEVEL NO 0-6 OF STMT.
        !          5306: C     ICNT IS NO OF CHARACTERS IN STMT IE KI(ITYP)
        !          5307: C
        !          5308:       PSTMT = 6
        !          5309:       CALL TYPST(ITYP, IGP, ICNT)
        !          5310:       IF (ERR) GO TO 60
        !          5311:       PSTMT = 6 + ICNT
        !          5312:       IF (ITYP.GE.6) GO TO 100
        !          5313:       I = ITYP - 1
        !          5314:       CALL TYPST(ITYP, II, K2)
        !          5315:       IF (ITYP.NE.10) GO TO 90
        !          5316:       PSTMT = PSTMT + K2
        !          5317:       IGP = II
        !          5318:       GO TO 110
        !          5319:    90 ITYP = I + 1
        !          5320:   100 I = -1
        !          5321:   110 II = 1
        !          5322:       IF (ITYP.LT.14 .OR. ITYP.EQ.28 .OR. ITYP.EQ.31) II = 2
        !          5323:       IF (ITYP.EQ.29) II = 3
        !          5324:       KEEP = PSTMT
        !          5325:       PSTMT = 1
        !          5326:       IF (TOKLAB(II,K2,KK,.TRUE.)) LAB = .TRUE.
        !          5327:       IF (SYSERR) GO TO 450
        !          5328: C
        !          5329: C     CHECK FOR MAIN PROGRAM OR OTHER HEADING STMTS
        !          5330: C
        !          5331:       IF (NAME) 140, 120, 140
        !          5332:   120 IF (IGP) 130, 150, 130
        !          5333:   130 CALL SETNAM(12)
        !          5334:       GO TO 150
        !          5335:   140 IF (IGP.EQ.0) GO TO 490
        !          5336: C
        !          5337: C     CHECK SEQUENCING OF STMTS
        !          5338: C
        !          5339:   150 IF (BLKD .AND. IGP.GT.3 .AND. ITYP.NE.28) GO TO 160
        !          5340:       IF (IGP.GE.KGP) GO TO 170
        !          5341:       CALL ERROR1(24H ILLEGAL STMT SEQUENCING, 24)
        !          5342:       GO TO 450
        !          5343:   160 CALL ERROR1(32H ILLEGAL STMTS IN BLOCK DATA PGM, 32)
        !          5344:       GO TO 450
        !          5345: C
        !          5346: C     CHECK FOR FIRST ASF DEFN OR EXECUTABLE STMT.
        !          5347: C     TO RESET USAGE OF FCN SUBPGM NAME IN SYMBOL TABLE
        !          5348: C
        !          5349:   170 IF (EXECUT .OR. IGP.LT.4) GO TO 180
        !          5350:       EXECUT = .TRUE.
        !          5351:       K = IGATT1(NAME,8)
        !          5352:       IF (K.EQ.4) CALL SATT1(NAME, 8, 10)
        !          5353:   180 PSTMT = KEEP
        !          5354:       LOGIF2 = .FALSE.
        !          5355: C
        !          5356: C     VALUES OF ITYP
        !          5357: C     1-5 TYPE STMTS: 1 DP, 2 REAL, 3 INT, 4 COMP, 5 LOG
        !          5358: C     6-8 OTHER SPECIFICATION STMTS: 6 EXTERNAL, 7 DIMENSION
        !          5359: C     8 COMMON
        !          5360: C     9-11 HEADING STMTS: 9 SUBROUTINE, 10 FUNCTION, 11 BLOCK DATA
        !          5361: C     12 EQUIVALENCE
        !          5362: C     13 DATA
        !          5363: C     14-27,30,32 EXECUTABLE STMTS: 14 ASSIGN, 15 GOTO, 16 RETURN,
        !          5364: C     17 CONTINUE, 18 CALL, 19 STOP, 20 IF, 21 DO, 22 PAUSE,
        !          5365: C     23 READ, 24 WRITE, 25 REWIND, 26 ENDFILE, 27 BACKSPACE, 30
        !          5366: C     ASSIGNMENT, 32 LOGICAL IF
        !          5367: C     28 END
        !          5368: C     29 FORMAT
        !          5369: C     31 ASF DEFN
        !          5370: C     CLASS CODES
        !          5371: C     0-HEADING STMTS
        !          5372: C     1-SPECIFICATION STMTS (INCLUDING TYPE STMTS)
        !          5373: C     2-EQUIVALENCE
        !          5374: C     3-DATA
        !          5375: C     4-ASF DEF
        !          5376: C     5-EXECUTABLE STMTS AND FORMAT STMTS
        !          5377: C     6-END STMT
        !          5378: C
        !          5379:   190 GO TO (200, 200, 200, 200, 200, 210, 220, 250, 230, 230, 240,
        !          5380:      *    270, 260, 350, 330, 360, 380, 370, 380, 300, 280, 340, 340,
        !          5381:      *    340, 340, 340, 340, 410, 390, 290), ITYP
        !          5382: C
        !          5383: C     TYPE STMTS (SYSERR)
        !          5384: C
        !          5385:   200 CALL TYPE
        !          5386:       GO TO 430
        !          5387: C
        !          5388: C     EXTERNAL STMT (SYSERR)
        !          5389: C
        !          5390:   210 CALL EXTERN
        !          5391:       GO TO 430
        !          5392: C
        !          5393: C     DIMENSION STMT(SYSERR)
        !          5394: C
        !          5395:   220 CALL DIMENS
        !          5396:       GO TO 430
        !          5397: C
        !          5398: C     SUBR/FCN DEFNS (SYSERR)
        !          5399: C
        !          5400:   230 CALL SUBFCN(I)
        !          5401:       GO TO 430
        !          5402: C
        !          5403: C     BLOCK DATA STMT (SYSERR)
        !          5404: C
        !          5405:   240 CALL SETNAM(11)
        !          5406:       BLKD = .TRUE.
        !          5407:       GO TO 430
        !          5408: C
        !          5409: C     COMMON STMT
        !          5410: C
        !          5411:   250 CALL COMMON
        !          5412:       GO TO 430
        !          5413:   260 CALL DATA
        !          5414:       GO TO 430
        !          5415:   270 CALL EQUIV
        !          5416:       GO TO 430
        !          5417:   280 CALL DOSTMT
        !          5418:       GO TO 430
        !          5419:   290 CALL ASSASF(IGP)
        !          5420:       IF (IGP.EQ.4 .AND. LOGIF2) GO TO 320
        !          5421:       GO TO 430
        !          5422: C
        !          5423: C     IF STMTS
        !          5424: C
        !          5425:   300 CALL IFS(LOGIF1)
        !          5426: C
        !          5427: C     FOUND AN ARITH. IF
        !          5428: C
        !          5429:       IF (.NOT.LOGIF1) GO TO 430
        !          5430: C
        !          5431: C     FOUND LOGICAL IF WITHIN LOGICAL IF
        !          5432: C
        !          5433:       IF (LOGIF1 .AND. LOGIF2) GO TO 320
        !          5434: C
        !          5435: C     FOUND A LOGICAL IF; MUS PROCESS REST OFSTMT
        !          5436: C
        !          5437:       LOGIF2 = .TRUE.
        !          5438:       CALL TYPST(ITYP, K, K2)
        !          5439:       IF (.NOT.ERR) GO TO 310
        !          5440:       CALL ERROR1(20H UNRECOGNIZABLE STMT, 20)
        !          5441:       GO TO 430
        !          5442:   310 IF (K.NE.4 .AND. K.NE.5 .OR. ITYP.EQ.21 .OR. ITYP.EQ.29) GO TO 320
        !          5443:       PSTMT = PSTMT + K2
        !          5444:       GO TO 190
        !          5445:   320 CALL ERROR1(27H ILLEGAL STMT IN LOGICAL IF, 27)
        !          5446:       GO TO 430
        !          5447: C
        !          5448: C     GOTO STMTS
        !          5449: C
        !          5450:   330 CALL GOTO
        !          5451:       GO TO 430
        !          5452: C
        !          5453: C      I-O STMTS
        !          5454: C
        !          5455:   340 CALL IO
        !          5456:       GO TO 430
        !          5457: C
        !          5458: C     ASSIGN  STMT
        !          5459: C
        !          5460:   350 CALL ASSIGN
        !          5461:       GO TO 430
        !          5462: C
        !          5463: C     RETURN  CANNOT  APPEAR IN MAIN PGM
        !          5464: C
        !          5465:   360 I = IGATT1(NAME,8)
        !          5466:       IF (I.EQ.12) CALL ERROR1(
        !          5467:      *    44H RETURN STATEMENT MAY NOT APPEAR IN MAIN PGM, 44)
        !          5468:       RET = .TRUE.
        !          5469:       GO TO 380
        !          5470: C
        !          5471: C     CALL STMT
        !          5472: C
        !          5473:   370 CALL CALLS
        !          5474:       GO TO 430
        !          5475: C
        !          5476: C     CHECK FOR EXTRANEOUS INFO AFTER STOP AND CONTINUE STMTS
        !          5477: C
        !          5478:   380 IF (PSTMT.NE.NSTMT) CALL ERROR1(
        !          5479:      *    34H EXTRANEOUS INFO AFTER END OF STMT, 34)
        !          5480:       GO TO 430
        !          5481: C
        !          5482: C     FORMAT
        !          5483: C
        !          5484:   390 IF (.NOT.LAB) CALL ERROR1(26H MISSING FORMAT STMT LABEL, 26)
        !          5485:       CALL FORMAT
        !          5486:       GO TO 430
        !          5487: C
        !          5488: C     CODE TO HANDLE END-OF-FILE WITHOUT AN END STMT
        !          5489: C
        !          5490:   400 IF (ITYP.EQ.28 .OR. ITYP.EQ.0) GO TO 500
        !          5491:       CALL ERROR1(37H WARNING - MISSING END STMT SIMULATED, 37)
        !          5492:       LAB = .FALSE.
        !          5493:       ITYP = 28
        !          5494:   410 CALL END
        !          5495: C
        !          5496: C     CHECK FOR NO CONTINUATION
        !          5497: C
        !          5498:       IF (NCARD.GT.1) CALL ERROR1(34H END LINE CANNOT HAVE CONTINUATION,
        !          5499:      *    34)
        !          5500: C
        !          5501: C     CHECK FOR ENDING ON A GOTO,ARITH IF, STOP OR RETURN
        !          5502: C
        !          5503:       IF ((LTYP.EQ.16 .OR. LTYP.EQ.15 .OR. LTYP.EQ.19 .OR. LTYP.EQ.20)
        !          5504:      *    .OR. BLKD) GO TO 420
        !          5505:       CALL ERROR1(29H ILLEGAL LAST EXECUTABLE STMT, 29)
        !          5506: C
        !          5507: C     CHECK THERE HAVE BEEN EXECUTABLE STMTS
        !          5508: C     CHECK FOR A RETURN STMT IF NECESSARY
        !          5509: C
        !          5510:   420 IF (KGP.NE.5 .AND. .NOT.BLKD) CALL ERROR1(
        !          5511:      *    42H ILLEGAL PROGRAM UNIT, NO EXECUTABLE STMTS, 42)
        !          5512:       I = IGATT1(NAME,8)
        !          5513:       IF (I.EQ.11 .OR. I.EQ.12 .OR. RET) GO TO 430
        !          5514:       CALL ERROR1(36H MISSING RETURN STMT IN PROGRAM UNIT, 36)
        !          5515: C
        !          5516: C     CHECK STMT LABELS FOR DOENDINGS, UPDATE KGP, CHECK TABLE SIZE
        !          5517: C     CHECK FOR CANCELLING SAVING OF SYMBOL TABLE FOR PASS2
        !          5518: C     DUE TO ERRORS IN THIS PGM UNIT
        !          5519: C
        !          5520:   430 KGP = IGP
        !          5521:       IF (ITYP.NE.29) LTYP = ITYP
        !          5522:       IF (LOGIF2) LTYP = 32
        !          5523:       IF (SYSERR) GO TO 450
        !          5524:       IF (.NOT.LAB) GO TO 440
        !          5525:       CALL DOCHK(KK)
        !          5526:       IF (ITYP.LT.14 .OR. ITYP.EQ.28 .OR. ITYP.EQ.31) CALL ERROR1(
        !          5527:      *    37H WARNING - LABELED NONEXECUTABLE STMT, 37)
        !          5528:   440 IF (EOF) GO TO 500
        !          5529:       ERR = .FALSE.
        !          5530:       IF (ITYP.EQ.28) GO TO 10
        !          5531:       GO TO 70
        !          5532: C
        !          5533: C     FLUSH CODE TO NEXT HEADR OR END SMT
        !          5534: C
        !          5535:   450 CALL ERROR1(44H CODE FLUSHED UNTIL NEXT END OR HEADING STMT, 44)
        !          5536:       P1ERR = .TRUE.
        !          5537:       IF (SYSERR) SYSERR = .FALSE.
        !          5538:       LAB = .FALSE.
        !          5539:   460 CALL INSTMT(EOF, NCARD)
        !          5540:       IF (EOF) GO TO 500
        !          5541:       PSTMT = 6
        !          5542:       CALL TYPST(ITYP, IGP, ICNT)
        !          5543:       IF (.NOT.ERR) GO TO 470
        !          5544:       ERR = .FALSE.
        !          5545:       GO TO 460
        !          5546:   470 IF (ITYP.EQ.28) GO TO 410
        !          5547:       IF (ITYP.GT.5) GO TO 480
        !          5548:       PSTMT = PSTMT + ICNT
        !          5549:       CALL TYPST(ITYP, IGP, ICNT)
        !          5550:       IF (ERR) ERR = .FALSE.
        !          5551:       IF (ITYP.EQ.10) GO TO 490
        !          5552:       GO TO 460
        !          5553:   480 IF (ITYP.LT.9 .OR. ITYP.GT.11) GO TO 460
        !          5554: C
        !          5555: C     HAVE FOUND A HEADER STMT; SIMULATE AN END STMT
        !          5556: C
        !          5557:   490 NEW = .TRUE.
        !          5558:       CALL ERROR1(37H WARNING - MISSING END STMT SIMULATED, 37)
        !          5559:       ITYP = 28
        !          5560:       LAB = .FALSE.
        !          5561:       GO TO 410
        !          5562: C
        !          5563: C     PUT ENDING MARKER ON THE DATA FOR PASS2
        !          5564: C
        !          5565:   500 I = 1
        !          5566:       II = 4
        !          5567:       WRITE (OUTUT3) I, II, I
        !          5568:       WRITE (OUTUT2) I, II, I
        !          5569:       RETURN
        !          5570:       END
        !          5571: C XXXXXCOMCHK.f
        !          5572:       SUBROUTINE COMCHK(MAIN)
        !          5573:       INTEGER TEMP(1), PLAT, STAR, PCOM, COM, PNODE, SYMLEN
        !          5574:       INTEGER ZERO(1)
        !          5575:       COMMON /COMS/ LCOM, PCOM, COM(300)
        !          5576:       COMMON /GRAPH/ LLAT, PLAT, LAT(6000)
        !          5577:       COMMON /PARAMS/ I1, I2, I3, SYMLEN, I4, I5, I6
        !          5578:       COMMON /HEAD/ LNODE, PNODE, NODE(500)
        !          5579:       COMMON /SCR2/ LNN, NN(500)
        !          5580:       DATA STAR /1H*/
        !          5581:       DATA ZERO(1) /0/
        !          5582: C
        !          5583: C     ALGORITHM TO CHECK FOR LEGAL USE OF COMMON IN PGM UNITS
        !          5584: C     NODE(MAIN) POINTS TO SUPEROOT ENTRY IN LAT
        !          5585: C
        !          5586:       IF (PCOM.LE.0) GO TO 130
        !          5587:       LK = 1
        !          5588:    10 IF (LK.GE.PCOM-1) GO TO 130
        !          5589: C
        !          5590: C     CHECK COMMON ISNT BLANK COMMON
        !          5591: C
        !          5592:       CALL S5UNPK(COM(LK), TEMP, 1)
        !          5593:       IF (TEMP(1).EQ.STAR) GO TO 120
        !          5594: C
        !          5595: C     CHECK THAT COMMON BLOCK NOT IN BLOCK DATA PGM
        !          5596: C     NEED NOT CHECK THE COMMON
        !          5597: C
        !          5598:       K = LK + SYMLEN + 1
        !          5599:       IF (COM(K).EQ.1) GO TO 120
        !          5600: C
        !          5601: C     NEED ALGORITHM TO CHECK OUT THIS COMMON
        !          5602: C
        !          5603:       L = PNODE - 1
        !          5604:       DO 20 K=1,L
        !          5605:         NN(K) = 0
        !          5606:         IF (NODE(K).LT.0) NN(K) = 1
        !          5607:    20 CONTINUE
        !          5608:       ICNT = 0
        !          5609:       NN(MAIN) = 2
        !          5610: C
        !          5611: C     SEARCH FOR A 2 NODE
        !          5612: C
        !          5613:    30 L = PNODE - 1
        !          5614:       DO 40 K=1,L
        !          5615:         IF (NN(K).EQ.2) GO TO 50
        !          5616:    40 CONTINUE
        !          5617:       GO TO 120
        !          5618: C
        !          5619: C     FOUND A 2 NODE; CHANGE TO 1 TO SHOW HAVE VISITED IT;
        !          5620: C     IF SUBPGM CONTAINS COMMON IN QUESTION INCREMENT COUNT;
        !          5621: C     IF COUNT> 1 ERROR IN USAGE
        !          5622: C     IF SUBPGM DOESN'T CONTAIN COMMON, MARK HIS DESC 2 IF THEY ARE 0.
        !          5623: C
        !          5624:    50 NN(K) = 1
        !          5625:       LBR = NODE(K)
        !          5626:       L = NODE(K) + SYMLEN + 2
        !          5627:       L = LAT(L)
        !          5628:    60 IF (L.EQ.0) GO TO 90
        !          5629:       IF (LAT(L).NE.LK) GO TO 80
        !          5630: C
        !          5631: C     FOUND COMMON LK AT THIS NODE
        !          5632: C     MARK NODE TO A 3
        !          5633: C
        !          5634:       NN(K) = 3
        !          5635:       ICNT = ICNT + 1
        !          5636:       IF (ICNT.LE.1) GO TO 30
        !          5637:       CALL ERROR2(31H ILLEGAL USAGE OF COMMON BLOCK , 31, COM(LK),
        !          5638:      *  1, 1, 0)
        !          5639:       K = PNODE - 1
        !          5640:       DO 70 I=1,K
        !          5641:         L = NODE(I)
        !          5642:         IF (NN(I).EQ.3) CALL ERROR2(19H WHICH APPEARED IN , 19, LAT(L),
        !          5643:      *  1, 0, 0)
        !          5644:    70 CONTINUE
        !          5645:       CALL ERROR2( 1H1, 0, ZERO(1), -3, 0, 1)
        !          5646:       GO TO 120
        !          5647:    80 L = LAT(L+2)
        !          5648:       GO TO 60
        !          5649: C
        !          5650: C     ARE DONE SEARCHING FOR COMMON LK AT THIS NODE
        !          5651: C     ADD DESCENDENTS ONTO LIST TO BE VISITED
        !          5652: C
        !          5653:    90 L = NODE(K) + SYMLEN + 4
        !          5654:       L = LAT(L)
        !          5655:   100 IF (L.EQ.0) GO TO 30
        !          5656:       K = PNODE - 1
        !          5657: C
        !          5658: C     FIND DESC OF NODE AND IF NOT VISITED SET TO 2
        !          5659: C
        !          5660:       DO 110 I=1,K
        !          5661:         IF (NODE(I).NE.LAT(L)) GO TO 110
        !          5662:         IF (NN(I).EQ.0) NN(I) = 2
        !          5663:   110 CONTINUE
        !          5664:       L = LAT(L+1)
        !          5665:       GO TO 100
        !          5666:   120 LK = LK + SYMLEN + 5
        !          5667:       GO TO 10
        !          5668:   130 RETURN
        !          5669:       END
        !          5670: C XXXXXCOMPAR.f
        !          5671:       LOGICAL FUNCTION COMPAR(A, B)
        !          5672:       INTEGER SYMLEN, A(2), B(2)
        !          5673:       COMMON /PARAMS/ INUT, I1, NOCHAR, SYMLEN, I2, I3, I4
        !          5674: C
        !          5675: C     ROUTINE TESTS TWO IDENTIFIERS FOR SAMENESS; RETURNS TRUE IF
        !          5676: C     SAME, ELSE FALSE
        !          5677: C
        !          5678:       DO 10 I=1,SYMLEN
        !          5679:         IF (A(I).NE.B(I)) GO TO 30
        !          5680:    10 CONTINUE
        !          5681:       COMPAR = .TRUE.
        !          5682:    20 RETURN
        !          5683:    30 COMPAR = .FALSE.
        !          5684:       GO TO 20
        !          5685:       END
        !          5686: C XXXXXFINDND.f
        !          5687:       INTEGER FUNCTION FINDND(K1, K2)
        !          5688:       INTEGER K1(2)
        !          5689:       INTEGER PLAT, PNODE
        !          5690:       LOGICAL COMPAR
        !          5691:       COMMON /HEAD/ LNODE, PNODE, NODE(500)
        !          5692:       COMMON /GRAPH/ LLAT, PLAT, LAT(6000)
        !          5693: C
        !          5694: C     FINDS SUBPROGRAM WHOSE PACKED NAME IS IN K1(2) AND
        !          5695: C     RETURNS INDEX OF ITS LAT ENTRY AS VALUE OF FINFND
        !          5696: C     RETURNS IN K2 INDEX IN NODE OF LAT INDEX
        !          5697: C     IGNORES ASF NODES IN LAT BY IGNORING NEGATIVE NODE
        !          5698: C     ENTRIES
        !          5699: C
        !          5700:       IF (PNODE-1) 40, 40, 10
        !          5701:    10 K = PNODE - 1
        !          5702:       DO 30 I=1,K
        !          5703:         IF (NODE(I)) 30, 30, 20
        !          5704:    20   FINDND = NODE(I)
        !          5705:         K2 = I
        !          5706:         IF (COMPAR(LAT(FINDND),K1)) GO TO 50
        !          5707:    30 CONTINUE
        !          5708:    40 FINDND = 0
        !          5709:    50 RETURN
        !          5710:       END
        !          5711: C XXXXXFINDCM.f
        !          5712:       INTEGER FUNCTION FINDCM(K1)
        !          5713:       INTEGER K1(2)
        !          5714:       INTEGER PCOM, COM, SYMLEN
        !          5715:       LOGICAL COMPAR
        !          5716:       COMMON /COMS/ LCOM, PCOM, COM(300)
        !          5717:       COMMON /PARAMS/ INUT, I1, NOCHAR, SYMLEN, I2, I3, I4
        !          5718: C
        !          5719: C     ROUTINE FINDS COMMON BLOCK WHOSE NAME IS AT K1 IN COM
        !          5720: C     RETURNS INDEX IN COM OR 0 IF CANNOT FIND IT
        !          5721: C
        !          5722:       IF (PCOM-1) 30, 30, 10
        !          5723:    10 K = PCOM - 1
        !          5724:       KK = SYMLEN + 5
        !          5725:       DO 20 I=1,K,KK
        !          5726:         FINDCM = I
        !          5727:         IF (COMPAR(COM(I),K1)) GO TO 40
        !          5728:    20 CONTINUE
        !          5729:    30 FINDCM = 0
        !          5730:    40 RETURN
        !          5731:       END
        !          5732: C XXXXXINREF.f
        !          5733:       INTEGER FUNCTION INREF(IDUM)
        !          5734:       INTEGER REF, PREF
        !          5735:       COMMON /CREF/ LREF, PREF, REF(100)
        !          5736: C
        !          5737: C     ROUTINE TO INPUT CALL TEMPLATES, RETURNS -1 FOR EOF,  0 FOR END
        !          5738: C     OF REFS FOR THIS PGM UNIT, AND 1 FOR REF RETRIEVED
        !          5739: C
        !          5740:       READ (IDUM) PREF, K, (REF(L),L=1,PREF)
        !          5741:       IF (K-3) 10, 30, 40
        !          5742:    10 INREF = 1
        !          5743:    20 RETURN
        !          5744:    30 INREF = 0
        !          5745:       GO TO 20
        !          5746:    40 INREF = -1
        !          5747:       GO TO 20
        !          5748:       END
        !          5749: C XXXXXINSYM.f
        !          5750:       LOGICAL FUNCTION INSYM(IDUM,II)
        !          5751:       INTEGER OUTUT, OUTUT2, OUTUT3, SYMHD, PDSA, SYMLEN, DSA, BNEXT
        !          5752:       COMMON /PARAMS/ INUT, OUTUT, NOCHAR, SYMLEN, OUTUT2, OUTUT3, I1
        !          5753:       COMMON /TABL/ NEXT, LABHD, SYMHD, BNEXT
        !          5754:       COMMON /FACTS/ NAME, NOST, ITYP, IASF
        !          5755:       COMMON /CTABL/ LDSA, PDSA, DSA(5000)
        !          5756: C
        !          5757: C     ROUTINE TO INPUT SYMBOL TABLE; RETURNS TRUE FOR SUCCESSFUL, ELSE
        !          5758: C     FALSE. KCODE=1 FOR TABLE, 3 FOR DUMMY TABLE, 4 FOR EOF
        !          5759: C     DUMMY TABLE CAUSES REFS FOR THIS PU TO BE FLUSHED IF
        !          5760: C     IDUM NE 0
        !          5761: C
        !          5762:  5    READ(OUTUT2) PDSA, KCODE, (DSA(I),I=1,PDSA)
        !          5763:       IF (KCODE-3) 10, 40, 30
        !          5764:    10 NAME = DSA(PDSA-2)
        !          5765:       SYMHD = DSA(PDSA-1)
        !          5766:       LABHD = DSA(PDSA)
        !          5767:       PDSA = PDSA - 3
        !          5768:       INSYM = .TRUE.
        !          5769:    20 RETURN
        !          5770:    30 INSYM = .FALSE.
        !          5771:       GO TO 20
        !          5772: C     FLUSH REFS FOR DUMMY TABLE IF IDUM NONZERO
        !          5773:  40   IF(IDUM.EQ.0) GOTO 5
        !          5774:  50   IF(INREF(IDUM)) 60, 60, 50
        !          5775: C     WRITE END OF REFS FOR DUMMY REFS IF II NE 0; ELSE GOT TO
        !          5776: C     NEXT SYMBOL TABLE
        !          5777:  60   IF(II.EQ.0) GOTO 5
        !          5778:       L = 1
        !          5779:       K = 3
        !          5780:       WRITE(II) L,K,L
        !          5781:       GOTO 5
        !          5782:       END
        !          5783: C XXXXXMATCH.f
        !          5784:       INTEGER FUNCTION MATCH(HEAD, INCR, N)
        !          5785:       INTEGER PLAT, HEAD
        !          5786:       COMMON /GRAPH/ LLAT, PLAT, LAT(6000)
        !          5787: C
        !          5788: C     ROUTINE READS DOEN A LINEAR LINKED LIST IN LAT TO FIND ENTRY
        !          5789: C     WHOSE FIRST WORD CONTAINS N;  EACH LIST ELEMENT IS INCR+1 LONG;
        !          5790: C     HEAD IS POINTER TO FIRST LIST ELEMENT
        !          5791: C     RETURNS 0 FOR NO MATCH ON LIST OR THE EMPTY LIST
        !          5792: C
        !          5793:       IF (HEAD) 40, 40, 10
        !          5794:    10 MATCH = HEAD
        !          5795:    20 IF (LAT(MATCH).EQ.N) GO TO 50
        !          5796:       MATCH = MATCH + INCR
        !          5797:       IF (LAT(MATCH)) 40, 40, 30
        !          5798:    30 MATCH = LAT(MATCH)
        !          5799:       GO TO 20
        !          5800:    40 MATCH = 0
        !          5801:    50 RETURN
        !          5802:       END
        !          5803: C XXXXXMKCOM.f
        !          5804:       SUBROUTINE MKCOM(PP, K)
        !          5805:       INTEGER PLAT, PDSA, FINDCM, DSA, SYMLEN, PP, PCOM, COM
        !          5806:       LOGICAL SYSERR, ERR, ABORT
        !          5807:       COMMON /GRAPH/ LLAT, PLAT, LAT(6000)
        !          5808:       COMMON /COMS/ LCOM, PCOM, COM(300)
        !          5809:       COMMON /CTABL/ LDSA, PDSA, DSA(5000)
        !          5810:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !          5811:       COMMON /PARAMS/ INUT, I1, NOCHAR, SYMLEN, I2, I3, I4
        !          5812: C
        !          5813: C     WANT TO MARK COMMONLIST ENTRY SET FOR SUBPGM PP; MAY HAVE TO
        !          5814: C     CREATE ENTRY
        !          5815: C
        !          5816:       N = FINDCM(DSA(K+4))
        !          5817:       L = SYMLEN + 2 + PP
        !          5818:       KK = -K
        !          5819:       IF (N.NE.0) KK = N
        !          5820: C
        !          5821: C     LOOK FOR DSA ENTRY ON LIST
        !          5822: C
        !          5823:       I = MATCH(LAT(L),2,KK)
        !          5824:       IF (I) 30, 30, 10
        !          5825:    10 LAT(I+1) = 1
        !          5826:    20 RETURN
        !          5827: C
        !          5828: C     CREATE NEW ENTRY
        !          5829: C
        !          5830:    30 IF (PLAT+3.GT.LLAT) GO TO 40
        !          5831:       LAT(PLAT+1) = 1
        !          5832:       LAT(PLAT+2) = LAT(L)
        !          5833:       LAT(L) = PLAT
        !          5834:       LAT(PLAT) = KK
        !          5835:       PLAT = PLAT + 3
        !          5836:       GO TO 20
        !          5837:    40 SYSERR = .TRUE.
        !          5838:       CALL ERROR1(32H IN MKCOM, TABLE OVERFLOW OF LAT, 32)
        !          5839:       GO TO 20
        !          5840:       END
        !          5841: C XXXXXOUTCOM.f
        !          5842:       INTEGER FUNCTION OUTCOM(IH, L)
        !          5843:       INTEGER STACK,PLAT
        !          5844:       LOGICAL ERR, SYSERR, ABORT
        !          5845:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !          5846:       COMMON /CEXPRS/ LSTACK, STACK(620)
        !          5847:       COMMON /GRAPH/ LLAT, PLAT, LAT(6000)
        !          5848: C
        !          5849: C     READS DOWN COM LIST OF PU NODE, PUTS INDICES OF ENTRIES
        !          5850: C     IN STACK. IH IS HEAD OF LIST, L RETURNS NO OF ENTRIES
        !          5851: C
        !          5852:       OUTCOM = 0
        !          5853:       IF (IH) 40, 40, 10
        !          5854:    10 L = 1
        !          5855:       K = IH
        !          5856:  20   IF (L+1.GT.LSTACK) GOTO 50
        !          5857:       STACK(L) = LAT(K)
        !          5858:       IF (LAT(K+1).EQ.1) STACK(L) = -STACK(L)
        !          5859:       L = L + 1
        !          5860:       K = LAT(K+2)
        !          5861:       IF (K) 30, 30, 20
        !          5862:  30   L = L - 1
        !          5863:       IF(L.GT.0)  OUTCOM=1
        !          5864:    40 RETURN
        !          5865:    50 SYSERR = .TRUE.
        !          5866:       CALL ERROR1(35H IN OUTCOM, TABLE OVERFLOW OF STACK, 35)
        !          5867:       GO TO 40
        !          5868:       END
        !          5869: C XXXXXOUTLAT.f
        !          5870:       INTEGER FUNCTION OUTLAT(IH, L, ISR)
        !          5871:       INTEGER STACK, PLAT
        !          5872:       LOGICAL ERR, SYSERR, ABORT
        !          5873:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !          5874:       COMMON /GRAPH/ LLAT, PLAT, LAT(6000)
        !          5875:       COMMON /CEXPRS/ LSTACK, STACK(620)
        !          5876:       INTEGER SYMLEN
        !          5877:       COMMON /PARAMS/ I1, I2, I3, SYMLEN, I4, I5, I6
        !          5878: C
        !          5879: C     IH POINTS TO A PARENTS OR DESCS LIST IN LAT; L IS NUM
        !          5880: C     OF ELEMENTS FOUND ON LIST; ISR IS ENTRY IN LAT OF
        !          5881: C     SUPERROOT
        !          5882: C
        !          5883: C
        !          5884:       OUTLAT = 0
        !          5885:       IF (IH) 50, 50, 10
        !          5886:    10 K = IH
        !          5887:       L = 1
        !          5888:    20 M = LAT(K)
        !          5889: C     SKIP OVER CALLS TO ASFS AND OVER SUPEROOT
        !          5890:       IF(MOD(IGATT2(M+SYMLEN+6,1),8).EQ.4 .OR. M.EQ.ISR) GOTO 30
        !          5891:       IF(L+1.GT.LSTACK) GOTO 60
        !          5892:       STACK(L) = M
        !          5893:       L = L + 1
        !          5894:    30 K = LAT(K+1)
        !          5895:       IF (K) 40, 40, 20
        !          5896:    40 L = L - 1
        !          5897:       IF (L.GT.0) OUTLAT = 1
        !          5898:    50 RETURN
        !          5899:    60 CALL ERROR1(35H IN OUTLAT, TABLE OVERFLOW OF STACK, 35)
        !          5900:       SYSERR = .TRUE.
        !          5901:       GO TO 50
        !          5902:       END
        !          5903: C XXXXXOUT2A.f
        !          5904:       SUBROUTINE OUT2A( IT, JJ, N, ISW )
        !          5905: C
        !          5906: C     IT CONTINAS TITLE FOR FIRST LINE OF OUTPUT
        !          5907: C     JJ CONTAINS NUMBER OF CHARS IN TITLE, J<=25
        !          5908: C     N CONTAINS NUMBER OF ELEMENTS TO BE PRINTED
        !          5909: C     ISW TELLS IF THESE ARE COMMON NAMES OR PROC NAMES
        !          5910: C
        !          5911:       INTEGER IT(25), II(25), BL, PLAT, PCOM, COM, STACK, OUTUT, S
        !          5912:       INTEGER BUF(54)
        !          5913:       COMMON /GRAPH/ LLAT, PLAT, LAT(6000)
        !          5914:       COMMON /PARAMS/ II1, OUTUT, II2, II3, II4, II5, II6
        !          5915:       COMMON /CEXPRS/ LSTACK, STACK(620)
        !          5916:       COMMON /COMS/ LCOM, PCOM, COM(300)
        !          5917:       DATA BL/1H /,S/1HS/
        !          5918: C
        !          5919: C     UNPACK TITLE
        !          5920: C
        !          5921:       NN = JJ
        !          5922:       IF(JJ.GT.25) NN=25
        !          5923:       CALL S5UNPK( IT(1), II(1), NN)
        !          5924:       K1 = NN + 1
        !          5925:       IF(K1.GT.25) GOTO 15
        !          5926:       DO 10 K =K1, 25
        !          5927:         II(K) = BL
        !          5928:  10   CONTINUE
        !          5929: C
        !          5930: C     SETUP FIRST LINE OF ELEMENTS
        !          5931: C
        !          5932:  15   K = 6
        !          5933:       IF (K.GT.N) K = N
        !          5934:       IB = 1
        !          5935:       DO 50 I = 1, K
        !          5936:         IL = STACK(I)
        !          5937:         GOTO (20, 30),ISW
        !          5938: C       FOR PARE OR DESC LISTS
        !          5939:  20     CALL S5UNPK( LAT(IL), BUF(IB), 6 )
        !          5940:         BUF(IB + 7) = BL
        !          5941:         GOTO 40
        !          5942: C       FOR COMMON LISTS- INDEX TO ELEMENTS IS NEGATIVE
        !          5943: C       IF COMMON IS SET BY PGM UNIT
        !          5944:  30     BUF(IB + 7) = BL
        !          5945:         IF(IL.LT.0) BUF(IB + 7) = S
        !          5946:         IL = IABS(IL)
        !          5947:         CALL S5UNPK( COM(IL), BUF(IB), 6 )
        !          5948:  40     BUF(IB + 6) = BL
        !          5949:         BUF(IB + 8) = BL
        !          5950:         IB = IB + 9
        !          5951:  50   CONTINUE
        !          5952:       IB = IB - 1
        !          5953:       WRITE(OUTUT,99999) (II(L),L=1,25), (BUF(I),I=1,IB)
        !          5954: 99999 FORMAT(80A1)
        !          5955:       IF(K.EQ.N) GOTO 110
        !          5956: C       WRITE SUBSEQUENT LINES
        !          5957:  60   IB = 1
        !          5958:       K1 = K + 1
        !          5959:       K = K + 6
        !          5960:       IF (K.GT.N) K = N
        !          5961:       DO 100 I = K1, K
        !          5962:         IL = STACK(I)
        !          5963:         GOTO (70, 80), ISW
        !          5964: C       FOR PAR OR DESC LISTS
        !          5965:  70     CALL S5UNPK( LAT(IL), BUF(IB), 6 )
        !          5966:         BUF(IB + 7) = BL
        !          5967:         GOTO 90
        !          5968: C     FOR   COMMON LISTS
        !          5969:  80     BUF(IB + 7) = BL
        !          5970:         IF(IL.LT.0) BUF(IB + 7) = S
        !          5971:         IL = IABS(IL)
        !          5972:         CALL S5UNPK( COM(IL), BUF(IB), 6 )
        !          5973:  90     BUF(IB + 6) = BL
        !          5974:         BUF(IB +8) = BL
        !          5975:         IB = IB + 9
        !          5976:  100  CONTINUE
        !          5977:       IB = IB - 1
        !          5978:       WRITE(OUTUT,99998) (BUF(I),I =1,IB)
        !          5979: 99998 FORMAT(25X,55A1)
        !          5980:       IF(K.LT.N) GOTO 60
        !          5981:  110  RETURN
        !          5982:       END
        !          5983: C XXXXXOUT2C.f
        !          5984:       SUBROUTINE OUT2C
        !          5985:       INTEGER COM, PCOM, STACK, BL, SYMLEN, OUTUT, S, PLAT
        !          5986:       EXTERNAL EXCH
        !          5987:       COMMON /PARAMS/ INUT, OUTUT, NOCHAR, SYMLEN, I1, I2, I3
        !          5988:       COMMON /COMS/ LCOM, PCOM, COM(300)
        !          5989:       COMMON /CEXPRS/ LSTACK, STACK(620)
        !          5990:       COMMON /GRAPH/ LLAT, PLAT, LAT(6000)
        !          5991:       COMMON /SCR2/ LICOM, ICOM(500)
        !          5992:       DATA BL /1H /, S /1HS/
        !          5993: C
        !          5994: C     PRINTS COM ARRAY
        !          5995: C
        !          5996:       IF (PCOM-1) 80, 80, 10
        !          5997:    10 K1 = SYMLEN + 5
        !          5998:       K = 1
        !          5999:       LCOMS = (PCOM-1)/(SYMLEN+5)
        !          6000:       DO 20 I=1,LCOMS
        !          6001:         ICOM(I) = K
        !          6002:         K = K + K1
        !          6003:    20 CONTINUE
        !          6004:       CALL SSORT(EXCH, COM, LCOM, ICOM, LCOMS, 0)
        !          6005:       WRITE (OUTUT,99999)
        !          6006: 99999 FORMAT (///14H1COMMON BLOCKS///1X, 4HNAME, 3X, 3HSET, 1X,
        !          6007:      *    18H DP,COM INT,RL,LOG//)
        !          6008:       DO 70 IBR=1,LCOMS
        !          6009:         I = ICOM(IBR)
        !          6010:         CALL S5UNPK(COM(I), STACK(1), 6)
        !          6011:         DO 30 L=1,3
        !          6012:           II = I + SYMLEN + L
        !          6013:           KK = 7 + L
        !          6014:           STACK(KK) = COM(II)
        !          6015:    30   CONTINUE
        !          6016:         IF (STACK(8)) 40, 40, 50
        !          6017:    40   STACK(8) = BL
        !          6018:         GO TO 60
        !          6019:    50   STACK(8) = S
        !          6020:    60   WRITE (OUTUT,99998) (STACK(II),II=1,6), STACK(8),
        !          6021:      *      (STACK(II),II=9,10)
        !          6022: 99998   FORMAT (1X, 6A1, 3X, A1, I8, 3X, I8)
        !          6023:    70 CONTINUE
        !          6024:    80 RETURN
        !          6025:       END
        !          6026: C XXXXXSCAN.f
        !          6027:       SUBROUTINE SCAN(MAINND)
        !          6028:       INTEGER PLAT, SYMLEN, PNODE, STACK
        !          6029:       LOGICAL ERR, SYSERR, ABORT
        !          6030:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !          6031:       COMMON /GRAPH/ LLAT, PLAT, LAT(6000)
        !          6032:       COMMON /PARAMS/ I1, I2, I3, SYMLEN, I4, I5, I6
        !          6033:       COMMON /CEXPRS/ LSTACK, STACK(620)
        !          6034:       COMMON /HEAD/ LNODE, PNODE, NODE(500)
        !          6035:       COMMON/ SCR1/ LINODE, INODE(500)
        !          6036:       COMMON /SCR2/ LICOM, ICOM(500)
        !          6037: C
        !          6038: C     SUBROUTINE PERCOLATES SETTING INFO ABOUT ARGUMENTS AND COMMON
        !          6039: C     UP THE LATTICE---IN ORDER THAT UNSAFE REFS CAN BE CHECKED
        !          6040: C
        !          6041: C
        !          6042: C     STACK(1)-(LSTACK) KEEPS TRACK OF PATH FROM CURRENT TERMINAL NODE
        !          6043: C     TO SUPEROOT NODE
        !          6044: C     INODE(J) IS 0 IF A NODE IS UNVISITED SO FAR ON ALL PATHS
        !          6045: C               1 IF A NODE HAS BEEN VISITED ON AT LEAST ONE PATH
        !          6046: C     SYSERR IS SET BY SCAN
        !          6047: C
        !          6048:       DO 10 I=1,PNODE
        !          6049:         INODE(I) = 0
        !          6050:    10 CONTINUE
        !          6051:       INODE(MAINND) = 1
        !          6052:       MAIN = NODE(MAINND)
        !          6053:       NUM = 0
        !          6054: C
        !          6055: C     CYCLE THROUGH ALL TERMINAL NODES
        !          6056: C
        !          6057:    20 NUM = NUM + 1
        !          6058:       IF (NUM.GT.PNODE-1) GO TO 240
        !          6059: C
        !          6060: C      CHECK IF AN NODE IS ASF OR IF IT HAS DESC
        !          6061: C     OR IF IT HAS NO PARENTS
        !          6062: C
        !          6063:       IF (NODE(NUM).LE.0) GO TO 20
        !          6064:       I = NODE(NUM) + SYMLEN + 4
        !          6065: C
        !          6066: C     NO PARENTS
        !          6067: C
        !          6068:       IF (LAT(I-1).EQ.0) GO TO 20
        !          6069: C
        !          6070: C     TEST DESC FOR BEING ALL ASFS
        !          6071: C
        !          6072:       IF (LAT(I).EQ.0) GO TO 40
        !          6073:       L = LAT(I)
        !          6074:    30 K = LAT(L) + SYMLEN + 6
        !          6075:       IF (MOD(LAT(K),8).NE.4) GO TO 20
        !          6076:       L = LAT(I+1)
        !          6077:       IF (L) 40, 40, 30
        !          6078: C
        !          6079: C     HAVE A TERMINAL NODE;NOW CAN START RECURSIVE TRAVERSE OF ALL
        !          6080: C     PATHS UPWARDS FROM IT  TO ROOT
        !          6081: C     ILEN--POINTER TO TOP OF CURRENT PATH
        !          6082: C     JNODE--CURRENT NODE
        !          6083: C
        !          6084:    40 INODE(NUM) = 1
        !          6085:       ILEN = 2
        !          6086:       STACK(2) = NODE(NUM)
        !          6087:       STACK(1) = 0
        !          6088: C
        !          6089: C     STACK ENTRY IS 1ST WORD-POINTER TO NODE ON LIST OF PARS OFPREV
        !          6090: C     NODE; 2ND WORD-NODE INDEX
        !          6091: C     PROCESS NODE
        !          6092: C     1. CHECK EACH ARG. IF NOT SET OR IF PARENTS ARGLINKS NONEXISTANT
        !          6093: C      SKIP TO NEXT ARG (IF NO ARGS GOTO 2); ELSE MARK EACH PARENT
        !          6094: C      ARGLIST ENTRY AS SET FOR A SET ARG.
        !          6095: C     2. ADD EACH COMMON REGION TO PARENTS' LIST OF COMMON REGIONS
        !          6096: C     3. GET NEW NODE
        !          6097: C
        !          6098:    50 J = STACK(ILEN) + SYMLEN + 1
        !          6099: C
        !          6100: C     ARG PROCESSING
        !          6101: C
        !          6102:       J = LAT(J)
        !          6103:    60 IF (J.EQ.0) GO TO 90
        !          6104:       I = IGATT2(J,5)
        !          6105:       IF (I.NE.1 .OR. LAT(J+2).EQ.0) GO TO 80
        !          6106:       L = LAT(J+2)
        !          6107:    70 IF (L.EQ.0) GO TO 80
        !          6108: C
        !          6109: C     SET PARENT ARGS
        !          6110: C
        !          6111:       CALL SATT2(LAT(L), 5, 1)
        !          6112:       L = LAT(L+1)
        !          6113:       GO TO 70
        !          6114: C
        !          6115: C     GO ON TO NEXT ARG
        !          6116: C
        !          6117:    80 J = LAT(J+3)
        !          6118:       GO TO 60
        !          6119: C
        !          6120: C     COMMON PROCESSING
        !          6121: C
        !          6122:    90 J = STACK(ILEN) + SYMLEN + 2
        !          6123:       II = 0
        !          6124:       J = LAT(J)
        !          6125: C
        !          6126: C     ACCUMULATE COMMON REGIONS
        !          6127: C
        !          6128:   100 IF (J.EQ.0) GO TO 110
        !          6129:       ICOM(II+1) = LAT(J)
        !          6130:       IF (LAT(J+1).NE.0) ICOM(II+1) = -ICOM(II+1)
        !          6131:       II = II + 1
        !          6132:       J = LAT(J+2)
        !          6133:       GO TO 100
        !          6134:   110 IF (II.EQ.0) GO TO 150
        !          6135: C
        !          6136: C     GET PARENT NODE AND ADD COMMON REGIONS TO IT
        !          6137: C
        !          6138:       K = STACK(ILEN) + SYMLEN + 3
        !          6139:       K = LAT(K)
        !          6140:   120 L = LAT(K) + SYMLEN + 2
        !          6141:       DO 140 I=1,II
        !          6142:         LL = MATCH(LAT(L),2,IABS(ICOM(I)))
        !          6143:         IF (LL.EQ.0) GO TO 130
        !          6144:         IF (ICOM(I).LT.0) LAT(LL+1) = 1
        !          6145:         GO TO 140
        !          6146: C
        !          6147: C     COPY COMMONNODE ENTRIES ONTO PARENTS LIST
        !          6148: C
        !          6149:   130   IF (PLAT+3.GT.LLAT) GO TO 270
        !          6150:         LAT(PLAT+2) = LAT(L)
        !          6151:         LAT(PLAT+1) = 0
        !          6152:         LAT(PLAT) = IABS(ICOM(I))
        !          6153:         IF (ICOM(I).LT.0) LAT(PLAT+1) = 1
        !          6154:         LAT(L) = PLAT
        !          6155:         PLAT = PLAT + 3
        !          6156:   140 CONTINUE
        !          6157: C
        !          6158: C     GOONTO NEW PARENT
        !          6159: C
        !          6160:       K = LAT(K+1)
        !          6161:       IF (K.NE.0) GO TO 120
        !          6162: C
        !          6163: C     FIND A PARENT OF THIS NODE AND TRY TO VISIT IT NEXT
        !          6164: C     I CONTAINS POINTER TO PARENT LIST POSITION OF THE PARENT;
        !          6165: C     J CONTAINS PARENTS INDEX IN LAT
        !          6166: C     IF NO MORE PARENTS, MUST BACKUP A LEVEL
        !          6167: C
        !          6168:   150 I = STACK(ILEN) + SYMLEN + 3
        !          6169:   160 IF (LAT(I).EQ.0) GO TO 200
        !          6170:       I = LAT(I)
        !          6171:   170 J = LAT(I)
        !          6172: C
        !          6173: C     CHECK THAT NEW ENTRY HAS PARENTS
        !          6174: C     AND THAT IT IS NOT THE SUPEROOT
        !          6175: C
        !          6176:       K = J + SYMLEN + 3
        !          6177:       IF (LAT(K).GT.0) GO TO 210
        !          6178: C
        !          6179: C     IF THIS PARENT UNACCEPTIBLE GO ONTO NEXT PARENT
        !          6180: C     MARK UNACCEPTIBLE AS VISITED SO WONT BE RECURSIVE
        !          6181: C
        !          6182:       LL = PNODE - 1
        !          6183:       DO 180 L=1,LL
        !          6184:         IF (J.NE.NODE(L)) GO TO 180
        !          6185:         INODE(L) = 1
        !          6186:         GO TO 190
        !          6187:   180 CONTINUE
        !          6188:   190 I = I + 1
        !          6189:       GO TO 160
        !          6190: C
        !          6191: C     MUST BACK DOWN THE PATH TO THE NEXT JUNCTURE WITH
        !          6192: C     AN UNTRIED PATH;  CHECK FIRST FOR DONE WITH ENTIRE PATH
        !          6193: C
        !          6194:   200 IF (STACK(ILEN-1).EQ.0) GO TO 20
        !          6195:       ILEN = ILEN - 2
        !          6196:       J = STACK(ILEN+1)
        !          6197:       IF (LAT(J+1).EQ.0) GO TO 200
        !          6198: C
        !          6199: C     FOUND AN UNTRIED PATH ON THE STACK
        !          6200: C
        !          6201:       I = LAT(J+1)
        !          6202:       GO TO 170
        !          6203: C
        !          6204: C     MARK ENTRY AS VISITED
        !          6205: C
        !          6206:   210 LL = PNODE - 1
        !          6207:       DO 220 L=1,LL
        !          6208:         IF (J.NE.NODE(L)) GO TO 220
        !          6209:         INODE(L) = 1
        !          6210:         GO TO 230
        !          6211:   220 CONTINUE
        !          6212: C
        !          6213: C     ENTER ON STACK
        !          6214: C
        !          6215:   230 IF (ILEN+2.GT.LSTACK) GO TO 260
        !          6216:       STACK(ILEN+1) = I
        !          6217:       STACK(ILEN+2) = J
        !          6218:       ILEN = ILEN + 2
        !          6219:       GO TO 50
        !          6220:   240 RETURN
        !          6221:   250 SYSERR = .TRUE.
        !          6222:       GO TO 240
        !          6223:   260 CALL ERROR1(33H IN SCAN, TABLE OVERFLOW OF STACK, 33)
        !          6224:       GO TO 250
        !          6225:   270 CALL ERROR1(31H IN SCAN, TABLE OVERFLOW OF LAT, 31)
        !          6226:       GO TO 250
        !          6227:       END
        !          6228: C XXXXXSETARG.f
        !          6229:       INTEGER FUNCTION SETARG(PP, N)
        !          6230:       INTEGER PLAT, DSA, PP, SYMLEN, PDSA
        !          6231:       LOGICAL ERR, SYSERR, ABORT
        !          6232:       COMMON /CTABL/ LDSA, PDSA, DSA(5000)
        !          6233:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !          6234:       COMMON /GRAPH/ LLAT, PLAT, LAT(6000)
        !          6235:       COMMON /PARAMS/ INUT, I1, NOCHAR, SYMLEN, I2, I3, I4
        !          6236: C
        !          6237: C     SETS UP LIST OF ARGUMENTS , HANGING OFF NODE AT LAT(PP)
        !          6238: C     ARGES ARE KEPT IN ORDERED LINEAR LINKED LIST
        !          6239: C     ORDERING CORRESPONDS TO LEFT TO RIGHT APPEARENCE IN DEFN
        !          6240: C     N-SUBPRGM ENTRY IN DSA
        !          6241: C     PP- CURRENT RTNE NODE IN LAT
        !          6242: C     ARGUMENT NODE
        !          6243: C     WD 1      ATTRIBUTES
        !          6244: C     WD2       LENGTH WITH -1 FOR VARIABLEY DIMENSIONED ARRAYS
        !          6245: C     WD3       HEAD OF PARENT REFS LIST
        !          6246: C     WD4       HEAD OF DESCENDENTS REFS LIST
        !          6247: C     WD5       PTR TO NEXT ARG
        !          6248: C
        !          6249: C     FIND FIRST ARGUMENT & ZERO COUNT
        !          6250: C
        !          6251:       J = DSA(N+2)
        !          6252:       SETARG = 0
        !          6253:       IPROC = 0
        !          6254: C
        !          6255: C     FIND FIRST ENTRY ON DSA ARGLIST;
        !          6256: C     KK HEAD OF TO BE CREATED ARGLIST IN LAT
        !          6257: C
        !          6258:       I = DSA(J)
        !          6259:       KK = PP + SYMLEN + 1
        !          6260: C
        !          6261: C     SETUP STORAGE FOR ARG ENTRY
        !          6262: C
        !          6263:    10 IF (PLAT+4.GE.LLAT) GO TO 80
        !          6264: C
        !          6265: C     ENTER ATTRIBUTE WORD AND ZERO REST OF ENTRY
        !          6266: C
        !          6267:       LAT(PLAT) = DSA(I)
        !          6268:       LAT(KK) = PLAT
        !          6269:       KK = PLAT + 3
        !          6270:       DO 20 IA=1,3
        !          6271:         L = IA + PLAT
        !          6272:         LAT(L) = 0
        !          6273:    20 CONTINUE
        !          6274:       K = IGATT1(I,8)
        !          6275:       IF (K.NE.10) GO TO 50
        !          6276: C
        !          6277: C     GET STRUCTURE  OF ARG
        !          6278: C
        !          6279:       K = IGATT1(I,7)
        !          6280:       IF (K) 40, 40, 30
        !          6281: C
        !          6282: C     ARRAY
        !          6283: C
        !          6284:    30 K = DSA(I+2)
        !          6285:       LAT(PLAT+1) = DSA(K)
        !          6286:       GO TO 60
        !          6287: C
        !          6288: C     SCALAR
        !          6289: C
        !          6290:    40 LAT(PLAT+1) = 1
        !          6291:       GO TO 60
        !          6292: C     SET RELATIVE ORDER OF PROC ARGS IN ITS 2ND WORD
        !          6293:    50 IPROC = IPROC + 1
        !          6294:       LAT(PLAT+1) = IPROC
        !          6295: C
        !          6296: C     CHECK FOR MORE ARGS; ADVANCE  PLAT
        !          6297: C
        !          6298:    60 PLAT = PLAT + 4
        !          6299:       SETARG = SETARG + 1
        !          6300:       IF (DSA(J+1)) 90, 90, 70
        !          6301:    70 J = DSA(J+1)
        !          6302:       I = DSA(J)
        !          6303:       GO TO 10
        !          6304:    80 SYSERR = .TRUE.
        !          6305:       CALL ERROR1(33H IN SETARG, TABLE OVERFLOW OF LAT, 33)
        !          6306:    90 RETURN
        !          6307:       END
        !          6308: C XXXXXSETASF.f
        !          6309:       SUBROUTINE SETASF(PP, K)
        !          6310:       INTEGER PP, SYMLEN, PLAT, PDSA, SETARG, PNODE, DSA
        !          6311:       LOGICAL ERR, SYSERR, ABORT
        !          6312:       COMMON /GRAPH/ LLAT, PLAT, LAT(6000)
        !          6313:       COMMON /HEAD/ LNODE, PNODE, NODE(500)
        !          6314:       COMMON /CTABL/ LDSA, PDSA, DSA(5000)
        !          6315:       COMMON /PARAMS/ INUT, I1, NOCHAR, SYMLEN, I2, I3, I4
        !          6316:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !          6317: C
        !          6318: C     SETUP ASF NODE;  IT HAS A NODE JUST LIKE A RTNE
        !          6319: C     EXCEPT ITS INDEX IN NODE IS NEGATIVE
        !          6320: C     PP-COM ADDRESS OF PARENT SUBPGM
        !          6321: C     K-DSA ADDRESS OF ASF ENTRY
        !          6322: C
        !          6323:       IF (PNODE+1.GT.LNODE) GO TO 40
        !          6324:       IF (PLAT+SYMLEN+11.GT.LLAT) GO TO 60
        !          6325: C
        !          6326: C     CREATE NEW NODE ENTRY
        !          6327: C
        !          6328:       NODE(PNODE) = -PLAT
        !          6329:       PNODE = PNODE + 1
        !          6330: C
        !          6331: C     ENTER NAME AND ZERO REST OF NODE
        !          6332: C
        !          6333:       DO 10 I=1,SYMLEN
        !          6334:         L = K + 3 + I
        !          6335:         LL = PLAT + I - 1
        !          6336:         LAT(LL) = DSA(L)
        !          6337:    10 CONTINUE
        !          6338:       DO 20 I=1,6
        !          6339:         L = LL + I
        !          6340:         LAT(L) = 0
        !          6341:    20 CONTINUE
        !          6342: C
        !          6343: C     SET LAST ELEMENT TO TYPE OF PGM UNIT
        !          6344: C     STORE IN SAME WORD ASF TYPE
        !          6345: C
        !          6346:       I = IGATT1(K,1)
        !          6347:       LAT(L+1) = 4 + 8*MOD(I,8)
        !          6348: C
        !          6349: C     SETUP PARENT'S LIST TO POINT TO PP IN ASF NODE
        !          6350: C
        !          6351:       L = PLAT + SYMLEN + 3
        !          6352:       LAT(L) = L + 4
        !          6353:       LAT(L+4) = PP
        !          6354:       LAT(L+5) = 0
        !          6355:       KQ = PLAT
        !          6356:       PLAT = L + 6
        !          6357: C
        !          6358: C     SETUP REFERENCE IN PP'S DESCENDENTS LIST
        !          6359: C
        !          6360:       II = PP + SYMLEN + 4
        !          6361:       LAT(PLAT) = KQ
        !          6362:       LAT(PLAT+1) = LAT(II)
        !          6363:       LAT(II) = PLAT
        !          6364:       PLAT = PLAT + 2
        !          6365: C
        !          6366: C     SETUP ARGUMENTS
        !          6367: C
        !          6368:       L = KQ + SYMLEN
        !          6369:       LAT(L) = SETARG(KQ,K)
        !          6370:    30 RETURN
        !          6371:    40 CALL ERROR1(34H IN SETASF, TABLE OVERFLOW OF NODE, 34)
        !          6372:    50 SYSERR = .TRUE.
        !          6373:       GO TO 30
        !          6374:    60 CALL ERROR1(33H IN SETASF, TABLE OVERFLOW OF LAT, 33)
        !          6375:       GO TO 50
        !          6376:       END
        !          6377: C XXXXXSETCOM.f
        !          6378:       SUBROUTINE SETCOM(PP, K)
        !          6379:       LOGICAL SYSERR, ERR, ABORT, BLANK
        !          6380:       INTEGER PLAT, DSA, SYMLEN, PP, PDSA, COM, PCOM, R(5), S(3),
        !          6381:      *    FINDND, ST, SS(1), FINDCM
        !          6382:       INTEGER ZERO(1)
        !          6383:       COMMON /FACTS/ NAME, NOST, ITYP, IASF
        !          6384:       COMMON /GRAPH/ LLAT, PLAT, LAT(6000)
        !          6385:       COMMON /CTABL/ LDSA, PDSA, DSA(5000)
        !          6386:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !          6387:       COMMON /PARAMS/ INUT, I1, NOCHAR, SYMLEN, I2, I3, I4
        !          6388:       COMMON /COMS/ LCOM, PCOM, COM(300)
        !          6389: C
        !          6390: C     COM ENTRY
        !          6391: C     WORD 1.....PACKED CHARACTERS OF COMMON-NAME
        !          6392: C     WORD 2....TOTAL LENGTH OF COMMON BLOCK
        !          6393: C     WORD 3.....1 IF COMMON INITIALIZED BY BLOCK DATA SUBPGM
        !          6394: C      0 IF NOT
        !          6395: C     WORDS 4-8...TOTAL LENGTHS OF COMPLEX, DOUBLE PRECIS,
        !          6396: C     REAL, INTEGER, LOGICAL DATA TYPES RESPECTIVELY
        !          6397: C     WORD 9.....INDEX IN LAT OF ENTRY OF P.U. WHICH CONTAINS
        !          6398: C     THIS DEFN OF THE COMMON BLOCK
        !          6399: C
        !          6400: C     FINDS COMMON BLOCK ENTRY IN COM- ELSE CREATES AND INITIALIZES NEW
        !          6401: C     ENTRY. CHECKS NEW ENTRY BLOCK NOT ALREADY A SUBPGM NAME.
        !          6402: C     GATHERS INFO ON ORDER, TYPE, LENGTH OF ENTRIES IN THE COMMON-
        !          6403: C     CHECKS FOR VARIABLY DIMENSIONED ARRAYS.
        !          6404: C     FORMS COMMONLIST ENTRY FOR BLOCK OFF SUBPGM AT LAT(PP)
        !          6405: C     IF FOUND COMMON IN COM, COMPARES OLD DEFN TO NEW FOR ORDER, LEN,
        !          6406: C     TYPE OF ENTRIES; FLAGS INCONSISTENCIES; NOTES IF COMMON IN
        !          6407: C     TWO BLOCK DATA PGMS.  COMMON IS AT DSA(K)
        !          6408: C
        !          6409:       DATA R(1), R(4) /2*1/, R(2), R(3), R(5) /3*2/, ST /1H*/
        !          6410:       DATA ZERO(1) /0/
        !          6411: C
        !          6412: C     CHECK ISNT IN NODE AS PROCEDURE NAME
        !          6413: C
        !          6414:       IF (FINDND(DSA(K+4),KK)) 20, 20, 10
        !          6415:    10 CALL ERROR2(41H COMMON BLOCK HAS SAME NAME AS SUBPROGRAM, 41,
        !          6416:      *  DSA(K+4), 1, 1, 1)
        !          6417: C
        !          6418: C     CHECK IF IN COM ALREADY
        !          6419: C
        !          6420:    20 KK = FINDCM(DSA(K+4))
        !          6421:       IF (KK) 30, 30, 60
        !          6422: C
        !          6423: C     CREATE NEW ENTRY
        !          6424: C
        !          6425:    30 IF (PCOM+SYMLEN+5.GT.LCOM) GO TO 260
        !          6426:       DO 40 I=1,SYMLEN
        !          6427:         L = PCOM + I - 1
        !          6428:         LL = K + I + 3
        !          6429:         COM(L) = DSA(LL)
        !          6430:    40 CONTINUE
        !          6431: C
        !          6432: C     MARK COMMON SET WHEN IT IS CREATED BY A BLOCK-DATA
        !          6433: C     SUBPROGRAM WHICH SET IT
        !          6434: C
        !          6435:       DO 50 I=1,4
        !          6436:         LL = L + I
        !          6437:         COM(LL) = 0
        !          6438:    50 CONTINUE
        !          6439:       COM(LL+1) = PP
        !          6440:       IF (IGATT1(NAME,8).EQ.11 .AND. IGATT1(K,2).EQ.1) COM(L+2) = 1
        !          6441:       KK = PCOM
        !          6442:       PCOM = PCOM + SYMLEN + 5
        !          6443: C
        !          6444: C     GATHER INFO ABT LENGTH,TYPE,ORDER OF ELEMENTS
        !          6445: C
        !          6446:    60 L = 0
        !          6447:       S(1) = 0
        !          6448:       S(2) = 0
        !          6449:       S(3) = 0
        !          6450:       I = DSA(K+2)
        !          6451:    70 IF (I) 130, 130, 80
        !          6452: C
        !          6453: C     READING LIST OF ELEMENTS IN COMMON-CHECK TYPE,STRUCTURE
        !          6454: C
        !          6455:    80 K1 = IGATT1(DSA(I),1)
        !          6456:       K2 = IGATT1(DSA(I),7)
        !          6457:       K1 = MOD(K1,8)
        !          6458:       IF (K1.EQ.5) K1 = 2
        !          6459: C
        !          6460: C     R(I) CONTAINS PROPER ORDER OF TYPE I IN DEFN OF COMMON
        !          6461: C
        !          6462:       LL = R(K1+1)
        !          6463:       IF (LL.LT.L) GO TO 120
        !          6464:       IF (K2) 90, 90, 100
        !          6465:    90 S(LL) = S(LL) + 1
        !          6466:       GO TO 110
        !          6467:   100 K2 = DSA(I)
        !          6468:       K2 = DSA(K2+2)
        !          6469:       S(LL) = S(LL) + DSA(K2)
        !          6470:   110 I = DSA(I+1)
        !          6471:       L = LL
        !          6472:       GO TO 70
        !          6473: C
        !          6474: C     ACCUMULATE COUNTS OF TYPES-NOTE TYPES OUT OF ORDER CAUSES
        !          6475: C     TRUNCATION OF THE DEFINITION
        !          6476: C
        !          6477:   120 CALL ERROR2(41H ILLEGAL ORDERING OF DATA-TYPES IN COMMON, 41,
        !          6478:      *  COM(KK), 1, 1, 0)
        !          6479:       CALL ERROR2(1H1, 0, ZERO(1), -1, 0, 1)
        !          6480:   130 S(3) = S(1) + S(2)
        !          6481: C
        !          6482: C     HANG COMMONLIST ENTRY OFF PP NODE, IF NOT ALREADY THERE FROM SET
        !          6483: C
        !          6484:       L = PP + SYMLEN + 2
        !          6485:       I = MATCH(LAT(L),2,-K)
        !          6486:       IF (I.GT.0) GO TO 140
        !          6487:       I = MATCH(LAT(L),2,KK)
        !          6488:       IF (I.LE.0) GO TO 150
        !          6489:   140 LAT(I) = KK
        !          6490:       GO TO 160
        !          6491: C
        !          6492: C     CREATE NEW ENTRY
        !          6493: C
        !          6494:   150 IF (PLAT+3.GT.LLAT) GO TO 280
        !          6495:       LAT(PLAT) = KK
        !          6496:       LAT(PLAT+1) = 0
        !          6497:       LAT(PLAT+2) = LAT(L)
        !          6498:       LAT(L) = PLAT
        !          6499:       PLAT = PLAT + 3
        !          6500:   160 I = KK + SYMLEN
        !          6501:       IF (COM(I)) 170, 170, 190
        !          6502: C
        !          6503: C     NEW DEFN
        !          6504: C
        !          6505:   170 COM(I) = S(3)
        !          6506:       COM(I+2) = S(1)
        !          6507:       COM(I+3) = S(2)
        !          6508:   180 RETURN
        !          6509: C
        !          6510: C     COMPARE LENGTHS OF EACH TYPE
        !          6511: C
        !          6512:   190 L = KK + SYMLEN + 2
        !          6513:       BLANK = .FALSE.
        !          6514:       CALL S5UNPK(COM(KK), SS(1), 1)
        !          6515:       IF (SS(1).EQ.ST) BLANK = .TRUE.
        !          6516:       IBR = 0
        !          6517:       IF (COM(L+1).NE.S(2)) IBR = 1
        !          6518:       IF (COM(L).NE.S(1)) IBR = -1
        !          6519: C     BLANK COMMON DEFNS MATCH
        !          6520:       IF (IBR.EQ.0 .AND. BLANK) GO TO 180
        !          6521: C     NAMED COMMON DEFNS MATCH
        !          6522:       IF (IBR.EQ.0 .AND. .NOT.BLANK) GO TO 210
        !          6523: C     BLANK COMMON DONT MATCH
        !          6524:       IF (IBR.NE.0 .AND. BLANK) GO TO 230
        !          6525: C     NAMED COMMONS DONT MATCH -- ERROR
        !          6526:  200  CALL ERROR2(25H INCOMPATIBLE COMMON DEFN, 25, COM(KK), 1, 1,
        !          6527:      *  0)
        !          6528:       K1 = KK + SYMLEN + 4
        !          6529:       K1 = COM(K1)
        !          6530:       CALL ERROR2(3H IN, 3, LAT(K1), 1, 0, 0)
        !          6531:       CALL ERROR2(4H AND, 4, LAT(PP), 1, 0, 1)
        !          6532:       IF (BLANK) GO TO 180
        !          6533: C
        !          6534: C     CHECK DOUBLE SETTING OF BLOCK
        !          6535: C
        !          6536:   210 IF (IGATT1(K,2).NE.1 .OR. IGATT1(NAME,8).NE.11) GO TO 180
        !          6537:       IF (COM(L-1).NE.1) GO TO 220
        !          6538:       CALL ERROR2(
        !          6539:      *    53H COMMON BLOCK INITIALIZED IN TWO BLOCK DATA SUBPGMS  , 53,
        !          6540:      *  COM(KK), 1, 1, 1)
        !          6541:       GO TO 180
        !          6542:   220 COM(L-1) = 1
        !          6543:       GO TO 180
        !          6544: C
        !          6545: C     CHECK ARE LENGTHENING BLANK COMMON OFF THE END
        !          6546: C
        !          6547:  230  IF(IBR.EQ.(-1)) GOTO 250
        !          6548: C     ARE LENGTHENING OFF END
        !          6549: C     KEEP LONGEST DEFN
        !          6550:       IF (COM(L+1).GT.S(2)) GO TO 180
        !          6551:   240 COM(L+1) = S(2)
        !          6552:       LL = SYMLEN + KK
        !          6553:       COM(LL) = S(3)
        !          6554:       COM(LL+4) = PP
        !          6555:       GO TO 180
        !          6556: C     SEE ARE REALLY LENGTHENING OFF END IF
        !          6557: C     DEFNS DIFFER IN FIRST DATA TYPE AREAS
        !          6558:   250 IF (S(1).LT.COM(L) .AND. S(2).EQ.0) GO TO 180
        !          6559:       IF (.NOT.(S(1).GT.COM(L) .AND. COM(L+1).EQ.0)) GO TO 200
        !          6560:       COM(L) = S(1)
        !          6561:       GO TO 240
        !          6562:   260 CALL ERROR1(33H IN SETCOM, TABLE OVERFLOW OF COM, 33)
        !          6563:   270 SYSERR = .TRUE.
        !          6564:       GO TO 180
        !          6565:   280 CALL ERROR1(33H IN SETCOM, TABLE OVERFLOW OF LAT, 33)
        !          6566:       GO TO 270
        !          6567:       END
        !          6568: C XXXXXSETEXT.f
        !          6569:       SUBROUTINE SETEXT
        !          6570:       INTEGER Z, FINDND, PLAT, PNODE, PP, SS(3), SYMLEN
        !          6571:       INTEGER BLANK
        !          6572:       LOGICAL ERR, SYSERR, ABORT
        !          6573:       COMMON /SCR1/ LINODE, INODE(500)
        !          6574:       COMMON /GRAPH/ LLAT, PLAT, LAT(6000)
        !          6575:       COMMON /INTS/ Z(346)
        !          6576:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !          6577:       COMMON /HEAD/ LNODE, PNODE, NODE(500)
        !          6578:       COMMON /PARAMS/ I1, I2, I3, SYMLEN, I4, I5, I6
        !          6579:       DATA BLANK /1H /
        !          6580: C
        !          6581: C     SUBROUTINE SETS UP DEFNS FOR BASIC EXTERNAL FCNS USED IN PASS 1
        !          6582: C     FLUSH PAST INTRINSICS IN TABLE
        !          6583: C
        !          6584:       K = 1
        !          6585:       DO 10 I=1,31
        !          6586:         K = K + Z(K) + 2
        !          6587:    10 CONTINUE
        !          6588: C
        !          6589: C     SEARCH EXTERNAL ENTRIES IN TABLE TO SEE WHICH HAVE BEEN USED
        !          6590: C
        !          6591:       DO 90 I=1,24
        !          6592:         N = K + Z(K) + 1
        !          6593:         L = Z(N)/1024
        !          6594:         IF (L) 80, 80, 20
        !          6595: C
        !          6596: C     SEE IF THIS EXTERNAL FCN HAS BEEN USER DEFINED
        !          6597: C
        !          6598:    20   L = Z(K)
        !          6599:         DO 30 J=1,SYMLEN
        !          6600:           SS(J) = BLANK
        !          6601:    30   CONTINUE
        !          6602:         CALL S5PACK(Z(K+1), SS, L)
        !          6603:         LL = FINDND(SS(1),J)
        !          6604:         IF (LL.NE.0) GO TO 80
        !          6605: C
        !          6606: C     SETUP LATTICE ENTRY FOR THIS EXERNAL FCN
        !          6607: C
        !          6608:         IF (PNODE+1.GE.LNODE) GO TO 120
        !          6609:         IF (PLAT+SYMLEN+8.GE.LLAT) GO TO 110
        !          6610: C     SET LEVEL OF BASIC EXTERNAL FUNCTION TO -2
        !          6611:         INODE(PNODE) = -2
        !          6612:         NODE(PNODE) = PLAT
        !          6613:         PNODE = PNODE + 1
        !          6614:         DO 40 J=1,SYMLEN
        !          6615:           L = PLAT + J - 1
        !          6616:           LAT(L) = SS(J)
        !          6617:    40   CONTINUE
        !          6618:         PP = PLAT
        !          6619:         PLAT = PLAT + SYMLEN
        !          6620:         LAT(PLAT) = MOD(Z(N),512)/128
        !          6621:         L = PLAT + 1
        !          6622:         LL = PLAT + 5
        !          6623:         DO 50 NN=L,LL
        !          6624:           LAT(NN) = 0
        !          6625:    50   CONTINUE
        !          6626:         LAT(PLAT+6) = 6 + 8*MOD(Z(N),8)
        !          6627:         NO = LAT(PLAT)
        !          6628:         PLAT = PLAT + 7
        !          6629: C
        !          6630: C     FILL IN ARG ENTRIES
        !          6631: C     NO CONTAINS NUMBER OF ARGS
        !          6632: C
        !          6633:         IF ((PLAT+4)*NO.GE.LLAT) GO TO 110
        !          6634:         L = PP + SYMLEN + 1
        !          6635:    60   LL = PLAT + 3
        !          6636:         DO 70 NN=PLAT,LL
        !          6637:           LAT(NN) = 0
        !          6638:    70   CONTINUE
        !          6639:         CALL SATT2(PLAT, 1, MOD(Z(N),64)/8)
        !          6640:         CALL SATT2(PLAT, 4, 1)
        !          6641:         CALL SATT2(PLAT, 8, 10)
        !          6642:         LAT(L) = PLAT
        !          6643:         LAT(PLAT+1) = 1
        !          6644:         L = PLAT + 3
        !          6645:         PLAT = PLAT + 4
        !          6646:         IF (NO.EQ.1) GO TO 80
        !          6647:         NO = NO - 1
        !          6648:         GO TO 60
        !          6649:    80   K = N + 1
        !          6650:    90 CONTINUE
        !          6651:   100 RETURN
        !          6652:   110 CALL ERROR1(33H IN SETEXT, TABLE OVERFLOW OF LAT, 33)
        !          6653:       GO TO 130
        !          6654:   120 CALL ERROR1(34H IN SETEXT, TABLE OVERFLOW OF NODE, 34)
        !          6655:   130 SYSERR = .TRUE.
        !          6656:       GO TO 100
        !          6657:       END
        !          6658: C XXXXXSETPD.f
        !          6659:       SUBROUTINE SETPD(I, K2)
        !          6660:       INTEGER PDSA, DSA, PLAT, SYMLEN
        !          6661:       LOGICAL ERR, SYSERR, ABORT
        !          6662:       COMMON /PARAMS/ I1, I2, I3, SYMLEN, I4, I5, I6
        !          6663:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !          6664:       COMMON /GRAPH/ LLAT, PLAT, LAT(6000)
        !          6665:       COMMON /CTABL/ LDSA, PDSA, DSA(5000)
        !          6666: C
        !          6667: C     SUBROUTINE ADDS PGM UNIT AT LAT(I) ONTO K2 DESC-LIST
        !          6668: C     ADDS K2 ONTO I PARENTS  LIST
        !          6669: C
        !          6670:       IF (PLAT+4.GT.LLAT) GO TO 20
        !          6671: C
        !          6672: C     SEE THAT K2 IS NOT ALREADY ON I PARENTS LIST
        !          6673: C     0 RETURN INDICATES EMPTY LIST OR NO MATCH
        !          6674: C
        !          6675:       J = I + SYMLEN + 3
        !          6676:       IF (MATCH(LAT(J),1,K2).NE.0) GO TO 10
        !          6677:       LAT(PLAT+1) = LAT(J)
        !          6678:       LAT(PLAT) = K2
        !          6679:       LAT(J) = PLAT
        !          6680:       J = K2 + SYMLEN + 4
        !          6681:       LAT(PLAT+3) = LAT(J)
        !          6682:       LAT(PLAT+2) = I
        !          6683:       LAT(J) = PLAT + 2
        !          6684:       PLAT = PLAT + 4
        !          6685:    10 RETURN
        !          6686: C
        !          6687: C     ERROR RETURNS
        !          6688: C
        !          6689:    20 SYSERR = .TRUE.
        !          6690:       CALL ERROR1(32H IN SETPD, TABLE OVERFLOW OF LAT, 32)
        !          6691:       GO TO 10
        !          6692:       END
        !          6693: C XXXXXSETREF.f
        !          6694:       SUBROUTINE SETREF(GREEN,INDIR)
        !          6695:       INTEGER CHK1, KBR(1)
        !          6696:       INTEGER REF, PREF, PDSA, DSA, PLAT, PNODE, FINDND, SYMLEN
        !          6697:       LOGICAL ERR, SYSERR, ABORT, COMPAR, GREEN, INDIR
        !          6698:       COMMON /HEAD/ LNODE, PNODE, NODE(500)
        !          6699:       COMMON/ SCR1/ LINODE, INODE(500)
        !          6700:       COMMON /FACTS/ NAME, NOST, ITYP, IASF
        !          6701:       COMMON /CREF/ LREF, PREF, REF(100)
        !          6702:       COMMON /CTABL/ LDSA, PDSA, DSA(5000)
        !          6703:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !          6704:       COMMON /GRAPH/ LLAT, PLAT, LAT(6000)
        !          6705:       COMMON /PARAMS/ I1, I2, I3, SYMLEN, I4, I5, I6
        !          6706:       COMMON /TABL/ NEXT, LABHD, ISYM, IBNEXT
        !          6707:       DATA IBR /1/, JBR /3/, KBR(1) /0/
        !          6708: C
        !          6709: C     GREEN = T IF ENCOUNTER EXTERNAL ENTITIES AT ALL
        !          6710: C     INDIR = T IF ENCOUNTER ANY INDIRECT REFS
        !          6711: C      READS IN ALL REFS FOR A PROGRAM UNIT; FINDS MISSING
        !          6712: C      SUBPROGRAM REFS AND DISCARDS THEM; CHECKS ASF REFS AND
        !          6713: C      DISCARDS THEM; WRITES INDIRECT REFS OUT ON I6 WITHOUT
        !          6714: C      PROCESSING; DOES MINIMAL CHECKING OF DIRECT REFS
        !          6715: C      CREATING PAR/DESC LINKS AND WRITING GOOD
        !          6716: C      REFS OUT ON I6, AFTER DONE WITH REFS, SEARCHES
        !          6717: C      FOR EXTERNAL ENTITIES (USAGE 13) TO FIX UP LEVELS
        !          6718: C
        !          6719:       IJK = FINDND(DSA(NAME+4),IIJK)
        !          6720: C      READ IN A NEW REF; IF HIT END OF REFS RECORD
        !          6721: C      END OF REFS ON I6 AND RETURN
        !          6722:    10 IF (INREF(I5)) 20, 20, 80
        !          6723: C      WRITE END OF REFS
        !          6724:    20 WRITE (I6) IBR, JBR, IBR
        !          6725: C      CHECK FOR NON DUMMY EXTERNALS IN SYMBOL TABLE WHICH
        !          6726: C      C AUSE CHANGES IN LEVEL CALCS
        !          6727:       K = ISYM
        !          6728:    30 IF (K) 40, 40, 50
        !          6729:  150  SYSERR=.TRUE.
        !          6730:       CALL ERROR1(33H IN SETREF, TABLE OVERFLOW OF LAT,33)
        !          6731:    40 RETURN
        !          6732:    50 IF (IGATT1(K,8).NE.13 .OR. IGATT1(K,4).EQ.1) GO TO 70
        !          6733:       L = FINDND(DSA(K+4),IL)
        !          6734:       IF (L.NE.0) GO TO 60
        !          6735:       CALL ERROR2(18H MISSING EXTERNAL , 18, DSA(K+4), 1, 1, 0)
        !          6736:       CALL ERROR2(1H1,0,KBR(1),-1, 0, 1)
        !          6737:       GO TO 70
        !          6738: C     FOUND AN EXTERNAL ENTITY
        !          6739:  60   GREEN = .TRUE.
        !          6740: C     ENTER ONTO GREEN LINKS LIST AT NODE
        !          6741:       N = IJK + SYMLEN + 3
        !          6742: C     J IS HEAD OF GREEN LINKS LIST (SEE SETPD)
        !          6743:  160  IF(LAT(N+1).LE.0) GOTO 170
        !          6744:       N = LAT(N+1)
        !          6745:       GOTO 160
        !          6746:  170  J = N+1
        !          6747:       IF(PLAT+2.GT.LLAT) GOTO 150
        !          6748:       LAT(PLAT) = -L
        !          6749:       LAT(PLAT+1) = LAT(J)
        !          6750:       LAT(J) = -PLAT
        !          6751:       PLAT = PLAT+2
        !          6752:       IF(-2.EQ.INODE(IL).OR.INODE(IL).GT.INODE(IIJK)) GOTO 70
        !          6753:       INODE(IL) = INODE(IIJK) + 1
        !          6754:       CALL ASLEV(-IL)
        !          6755:       IF (ABORT .OR. SYSERR) GO TO 40
        !          6756:    70 K = DSA(K+3)
        !          6757:       GO TO 30
        !          6758: C
        !          6759: C      REF IS  WD1--NUMBER OF ARGS(2 WD ENTRIES)
        !          6760: C            WD2--PTR TO PGM UNIT CALLED IN DSA
        !          6761: C            WD3--STMT NO OF  CALL
        !          6762: C            WD4--CODE, 0 FOR SUBR REFS; 1 FOR FCN REFS
        !          6763: C             WD5+-ARG ENTRIES (WD1-SYMBOL TABLE INDEX OR 0
        !          6764: C                             WD2-TYPE/STRUCTURE INFO)
        !          6765: C
        !          6766:    80 IF (REF(4).LT.4) GO TO 100
        !          6767: C
        !          6768: C      ASF REFERENCE; CHECKED AND THEN DISCARDED
        !          6769: C
        !          6770:       K1 = PNODE - 1
        !          6771:       DO 90 I=1,K1
        !          6772:         IF (NODE(I).GE.0) GO TO 90
        !          6773:         IJR = IABS(NODE(I))
        !          6774:         L = IJR + SYMLEN + 3
        !          6775:         L = LAT(L)
        !          6776:         K = REF(2)
        !          6777: C
        !          6778: C      IF HAVE ASF REF, FIND ASF BY NAME AND PAR CHECKS
        !          6779: C
        !          6780:         IF (COMPAR(DSA(K+4),LAT(IJR)) .AND. LAT(L).EQ.IJK) GO TO 110
        !          6781:    90 CONTINUE
        !          6782:       L = REF(2) + 4
        !          6783:       CALL ERROR2(18H MISSING ASF DEFN , 18, DSA(L), 1, 1, 0)
        !          6784:       CALL ERROR2(1H1, 0, REF(3), -1, 0, 1)
        !          6785:       GO TO 10
        !          6786: C
        !          6787: C      WRITE INDIRECT REF OUT ON I6
        !          6788: C
        !          6789:   100 K2 = IGATT1(REF(2),4)
        !          6790:       IF(K2.EQ.0) GOTO 140
        !          6791:       INDIR = .TRUE.
        !          6792:       GOTO 130
        !          6793: C      CHECK FOR MISSING SUBPROGRAM
        !          6794:  140  K1 = REF(2)
        !          6795:       IJR = FINDND(DSA(K1+4),IIJR)
        !          6796:       IF (IJR.NE.0) GO TO 110
        !          6797:       CALL ERROR2(20H MISSING SUBPROGRAM , 20, DSA(K1+4), 1
        !          6798:      *  ,1, 0)
        !          6799:       CALL ERROR2(1H1, 0, REF(3), -1, 0, 1)
        !          6800:       GO TO 10
        !          6801: C      CHECK DIRECT REFS AND ASF REFS
        !          6802: C      1 MEANS OK 0 MEANS N.G.
        !          6803:   110 IF (CHK1(IJK,IJR)) 10, 10, 120
        !          6804:   120 IF (REF(4).EQ.4) GO TO 10
        !          6805: C      GOOD DIRECT REF; CREATE PAR/DES LINKS
        !          6806:       CALL SETPD(IJR, IJK)
        !          6807:       IF (SYSERR) GO TO 40
        !          6808:       IF (-2.EQ.INODE(IIJR) .OR. INODE(IIJR).GT.INODE(IIJK)) GO TO 130
        !          6809: C      FIX UP LEVELS
        !          6810:       INODE(IIJR) = INODE(IIJK) + 1
        !          6811:       CALL ASLEV(IIJR)
        !          6812:       IF (SYSERR .OR. ABORT) GO TO 40
        !          6813:   130 WRITE (I6) PREF, IBR, (REF(L),L=1,PREF)
        !          6814:       GO TO 10
        !          6815:       END
        !          6816: C XXXXXUNSAFE.f
        !          6817:       SUBROUTINE UNSAFE
        !          6818: C
        !          6819: C     ROUTINE READS IN ALL DIRECT AND INDIRECT REFS FOR THE CURRENT
        !          6820: C     PGM-UNIT; CHECKS FOR THE 3 UNSAFE REFS
        !          6821: C
        !          6822:       LOGICAL IBR
        !          6823:       INTEGER PLAT, PDSA, DSA, SYMLEN, PREF, REF, INREF, FINDCM
        !          6824:       COMMON /CREF/ LREF, PREF, REF(100)
        !          6825:       COMMON /GRAPH/ LLAT, PLAT, LAT(6000)
        !          6826:       COMMON /FACTS/ NAME, I1, I2, IASF
        !          6827:       COMMON /PARAMS/ I3, I4, I5, SYMLEN, I6, I7, I8
        !          6828:       COMMON /CTABL/ LDSA, PDSA, DSA(5000)
        !          6829:    10 IF (INREF(I7).LE.0) RETURN
        !          6830: C     CHECK FOR REF WITHOUT ARGS
        !          6831:       I = REF(1)
        !          6832:       IF (I.EQ.0) GO TO 10
        !          6833:       LL = REF(2)
        !          6834:       L = LL + SYMLEN + 1
        !          6835:       L = LAT(L)
        !          6836: C
        !          6837: C     LPOINTS TO DUMMY ARGUMENT IN LAT
        !          6838: C
        !          6839:       DO 70 K=1,I,2
        !          6840:         J = 4 + K
        !          6841:         IF (REF(J).EQ.0) GO TO 20
        !          6842:         N = IGATT1(REF(J),8)
        !          6843:         IF (N.EQ.10 .OR. N.EQ.4) GO TO 30
        !          6844:         GO TO 60
        !          6845: C
        !          6846: C     LOOK FOR EXPRESSION BEING MATCHED TO AN ARG WHICH
        !          6847: C     IS SET; TYPE 1 UNSAFE REF
        !          6848: C
        !          6849:    20   IF (IGATT2(L,5).EQ.0) GO TO 60
        !          6850:         CALL ERROR2(
        !          6851:      *      56H EXPRESSION MATCHED TO POSSIBLY SET ARG IN REFERENCE TO ,
        !          6852:      *  56, LAT(LL), 1, 1, 0)
        !          6853:       CALL ERROR2(24H TYPE 1 UNSAFE REFERENCE, 24, REF(3), -1, 0, 1)
        !          6854:         GO TO 60
        !          6855: C
        !          6856: C     CHECK FOR ACTUAL ARG IN COMMON BEING SENT DOWN WHERE RTNE
        !          6857: C     BENEATH CHANGES ARG OR COMMON REGION
        !          6858: C     TYPE 3 UNSAFE REFERENCE
        !          6859: C
        !          6860:    30   N = IGATT1(REF(J),2)
        !          6861:         IF (N.NE.1) GO TO 40
        !          6862: C
        !          6863: C     SEE IF  ACTUAL IS AN ARRAY
        !          6864: C
        !          6865:         N = IGATT2(L,7)
        !          6866:         IF (N.NE.0) GO TO 40
        !          6867:         N = REF(J) + 2
        !          6868:         N = DSA(N)
        !          6869:         N = DSA(N+1) + 4
        !          6870:         N = FINDCM(DSA(N))
        !          6871:         NN = LL + SYMLEN + 2
        !          6872:         NN = MATCH(LAT(NN),2,N)
        !          6873:         IF (NN.EQ.0) GO TO 40
        !          6874:         N = IGATT2(L,5)
        !          6875:         IF (N.EQ.0 .AND. LAT(NN+1).EQ.0) GO TO 40
        !          6876:         CALL ERROR2(42H ARG OR COMMON MAY BE SET BY REFERENCE TO , 42,
        !          6877:      *  LAT(LL), 1, 1, 0)
        !          6878:       CALL ERROR2(24H TYPE 3 UNSAFE REFERENCE, 24, REF(3), -1, 0, 1)
        !          6879: C
        !          6880: C     CHECK FOR DO CONTROL VAR OR LIMIT MATCHED
        !          6881: C     TO DUMMY ARG POSSIBLY SET
        !          6882: C
        !          6883:    40   NN = IGATT2(L,5)
        !          6884:         IF (NN.EQ.0) GO TO 60
        !          6885:         NN = REF(J+1)/32
        !          6886:         IF (NN.NE.1) GO TO 50
        !          6887:         CALL ERROR2(
        !          6888:      *      51H DO CONTROL VARIABLE OR LIMIT CAN BE SET IN REF TO , 51,
        !          6889:      *  LAT(LL), 1, 1, 0)
        !          6890:       CALL ERROR2(1H1, 0, REF(3), -1, 0, 1)
        !          6891: C
        !          6892: C     CHECK FOR ADJUSTIBLE DIMENSION VARIABLE MATCHED TO DUMMY
        !          6893: C     ARG POSSIBLY SET
        !          6894: C
        !          6895:    50   NN = REF(J+1)/64
        !          6896:         IF (NN.NE.1) GO TO 60
        !          6897:         CALL ERROR2(
        !          6898:      *      52H ADJUSTIBLE DIMENSION VARIABLE CAN BE SET IN REF TO ,
        !          6899:      *  52, LAT(LL), 1, 1, 0)
        !          6900:       CALL ERROR2(1H1, 0, REF(3), -1, 0, 1)
        !          6901:    60   L = LAT(L+3)
        !          6902:    70 CONTINUE
        !          6903: C
        !          6904: C     CHECK FOR SAME ACTUAL ARG SENT DOWN FOR DIFFERENT DUMMY-ARGS
        !          6905: C     AND ONE OF DUMMIES MAY BE SET
        !          6906: C
        !          6907: C     TYPE 2 UNSAFE REFERENCE
        !          6908:       IF (REF(1).LE.2) GO TO 130
        !          6909:       LR = LL + SYMLEN + 1
        !          6910:       LR = LAT(LR)
        !          6911: C
        !          6912: C     OUTER LOOP GOES TO NEXT TO LAST ARG
        !          6913: C
        !          6914:       I = REF(1) + 3
        !          6915:       II = I - 2
        !          6916:       DO 120 K=5,II,2
        !          6917:         J = REF(K)
        !          6918:         IF (J.EQ.0) GO TO 110
        !          6919:         JBR = IGATT1(J,8)
        !          6920:         IF (JBR.NE.10 .AND. JBR.NE.4) GO TO 110
        !          6921:         L = LAT(LR+3)
        !          6922:         MM = K + 2
        !          6923:         DO 100 M=MM,I,2
        !          6924:           IF (REF(M).NE.J) GO TO 90
        !          6925: C
        !          6926: C     HAVE TWO ACTUALS MAPPED ONTO DIFFERENT DUMMIES
        !          6927: C
        !          6928: C     IF BOTH DUMMIES ARE ARRAYS OR BOTH ARE UNSET, NO UNSAFE
        !          6929:       IF( IGATT2(L,7).NE.0 .AND. IGATT2(LR,7).NE.0 ) GOTO 90
        !          6930:       IF( IGATT2(L,5).EQ.0 .AND. IGATT2(LR,5).EQ.0 ) GOTO 90
        !          6931:  80   CALL ERROR2(64
        !          6932:      *H ACTUAL ARG ASSOCIATED WITH 2 DUMMY ARGS POSSIBLY SET IN REF TO
        !          6933:      *, 64, LAT(LL), 1, 1, 0)
        !          6934:       CALL ERROR2(24H TYPE 2 UNSAFE REFERENCE, 24, REF(3), -1, 0, 1)
        !          6935:    90     L = LAT(L+3)
        !          6936:   100   CONTINUE
        !          6937:   110   LR = LAT(LR+3)
        !          6938:   120 CONTINUE
        !          6939: C
        !          6940: C     CHECK FOR EXTERNAL FCNS WITHIN ASF-DEFS WHICH CONTAIN
        !          6941: C     ASF-DUMMIES AND WHICH SET THEIR ARGS
        !          6942: C
        !          6943:   130 IF (REF(4).NE.1) GO TO 10
        !          6944:       II = REF(1) + 3
        !          6945:       IBR = .FALSE.
        !          6946:       DO 140 K=5,II,2
        !          6947:         J = REF(K)
        !          6948:         IF (J.EQ.0) GO TO 140
        !          6949:         IF (IGATT1(J,8).EQ.1) IBR = .TRUE.
        !          6950:   140 CONTINUE
        !          6951:       IF (.NOT.IBR) GO TO 10
        !          6952: C
        !          6953: C     SEE IF EXTERNAL FCN SETS ANY OF ITS ARGS
        !          6954: C
        !          6955:       K = LL + SYMLEN + 1
        !          6956:       K = LAT(K)
        !          6957:       II = REF(1)/2
        !          6958:       DO 150 L=1,II
        !          6959:         IF (IGATT2(K,8).EQ.10 .AND. IGATT2(K,5).EQ.1) IBR = .FALSE.
        !          6960:   150 CONTINUE
        !          6961:       IF (IBR) GO TO 10
        !          6962:       CALL ERROR2(37H ILLEGAL USAGE OF ASF-DUMMY IN REF TO, 37,
        !          6963:      *  LAT(LL), 1, 1, 0)
        !          6964:       CALL ERROR2(1H , 0, REF(3), -1 ,0, 1)
        !          6965:       GO TO 10
        !          6966:       END
        !          6967: C XXXXXCHECKS.f
        !          6968:       SUBROUTINE CHECKS(IROOT)
        !          6969: C
        !          6970: C     MAIN IS INDEX IN NODE OF SUPEROOT IN LAT
        !          6971: C
        !          6972:       LOGICAL ERR, SYSERR, ABORT, INSYM
        !          6973:       COMMON /PARAMS/ I1, I2, I3, I4, I5, I6, I7
        !          6974:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !          6975:       CALL COMCHK(IROOT)
        !          6976:       CALL SCAN(IROOT)
        !          6977:       IF (SYSERR) GO TO 20
        !          6978:  10   IF(.NOT.INSYM(I6,0)) GOTO 30
        !          6979:       CALL UNSAFE
        !          6980:       GO TO 10
        !          6981:    20 WRITE (I2,99999)
        !          6982: 99999 FORMAT (31H1UNSAFE REFERENCES NOT VERIFIED)
        !          6983:    30 RETURN
        !          6984:       END
        !          6985: C XXXXXCONSTR.f
        !          6986:       SUBROUTINE CONSTR(MAINND)
        !          6987:       LOGICAL SYSERR, ERR, ABORT, INSYM, GREEN, INDIR
        !          6988:       LOGICAL OVER
        !          6989: C      NOTE SETNOD SETS ABORT FOR 2 P.U. WITH SAME NAME
        !          6990: C      CONSTR SETS ABORT IF IT FINDS NO SYMBOL TABLES FROM PASS1
        !          6991: C      ASLEV SETS ABORT IF IT FINDS RECURSION IN CALLING GRAPH
        !          6992:       INTEGER OUTUT2, OUTUT3, OUTUT4, SYMLEN
        !          6993:       INTEGER PNODE, PLAT, LS(2)
        !          6994:       COMMON /HEAD/ LNODE, PNODE, NODE(500)
        !          6995:       COMMON /SCR1/ LINODE, INODE(500)
        !          6996:       COMMON /PARAMS/ I1, I2, I3, SYMLEN, OUTUT2, OUTUT3, OUTUT4
        !          6997:       COMMON /GRAPH/ LLAT, PLAT, LAT(6000)
        !          6998:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !          6999:       DATA IBR /1/, JBR /4/
        !          7000:       DATA LS(1) /1H,/, LS(2) /1H /
        !          7001: C
        !          7002: C      CONSTR DIRECTS THE FIRST PORTION OF PASS2
        !          7003: C      CALLS SETNOD TO CONSTRUCT THE LAT NODES FOR EACH P.U..
        !          7004: C      CALLS SETEXT TO SETUP BASIC EXERNALS NODES
        !          7005: C      AS NEEDED.
        !          7006: C      CALLS SETREF TO MAKE CONNECTS BETWEEN THE NODES
        !          7007: C      CALLS INVOKE TO CALCULATE LEVELS AND ASSIMILATE
        !          7008: C      ALL PROC INFO NECESSARY
        !          7009: C     CALLS ERASE TO GET RID OF NON-REFERENCE LINKS IN
        !          7010: C     CALLING GRAPH
        !          7011: C      CALLS CHKALL TO DO FINAL CHECKS OF ALL REFS AND TO
        !          7012: C      WRITE ALL GOOD REFS OUT FOR FUTURE PROCESSING
        !          7013: C     FORMS SUPERROOT IN GRAPH
        !          7014: C      CALLS OUTPUT ROUTINES WHENEVER CAN, TO GIVE PARTIAL
        !          7015: C      LISTINGS OF CURRENT DATA STRUCTURE
        !          7016: C
        !          7017: C     USE INSYM TO POSSIBLY SKIP OVER BAD REFS WITH DUMMY SYM TBL
        !          7018: C     SETREF READS REFS FROM OUTUT3, WRITES ON OUTUT4
        !          7019: C     INVOKE READS FROM OUTUT4
        !          7020: C     CHKALL READS FROM OUTUT4, WRITES OUTUT3
        !          7021: C     UNSAFE READS FROM OUTUT3
        !          7022: C      INITIALIZE LEVEL ARRAY AND ISR
        !          7023:       ISR = 0
        !          7024:       DO 10 I=1,LNODE
        !          7025:         INODE(I) = 0
        !          7026:    10 CONTINUE
        !          7027: C     INITIALIZE LOGICAL FLAGS FOR DETECTION OF PRESENCE OF
        !          7028: C     EXTERNAL ENTITIES (GREEN) AND INDIRECT REFS(INDIR)
        !          7029:       GREEN = .FALSE.
        !          7030:       INDIR = .FALSE.
        !          7031:  20   IF(.NOT.INSYM(0,0)) GOTO 30
        !          7032: C
        !          7033: C      SUCCESSFULLY READ SYMBOL TABLE
        !          7034: C
        !          7035:       CALL SETNOD
        !          7036:       IF (SYSERR .OR. ABORT) GO TO 130
        !          7037:       GO TO 20
        !          7038:    30 REWIND OUTUT2
        !          7039:       IF (PNODE.EQ.1) GO TO 150
        !          7040: C      CHANGE LEVEL ON ASFS SO DONT PROCESS THEM
        !          7041:       L = PNODE - 1
        !          7042:       DO 40 I=1,L
        !          7043:         IF (NODE(I).LT.0) INODE(I) = -2
        !          7044:    40 CONTINUE
        !          7045: C
        !          7046: C      SETUP BASIC EXTERNAL DEFNS AS NEEDED
        !          7047: C
        !          7048:       CALL SETEXT
        !          7049:       IF (SYSERR) GO TO 130
        !          7050: C
        !          7051: C      READ IN SYMBOL TABLES
        !          7052: C      SETREF WILL READ IN REFS
        !          7053: C
        !          7054:  50   IF(.NOT.INSYM(OUTUT3, OUTUT4)) GOTO 60
        !          7055:       CALL SETREF ( GREEN, INDIR  )
        !          7056:       IF (SYSERR .OR. ABORT) GO TO 130
        !          7057:       GO TO 50
        !          7058:    60 REWIND OUTUT2
        !          7059:       REWIND OUTUT3
        !          7060:       WRITE (OUTUT4) IBR, JBR, IBR
        !          7061:       REWIND OUTUT4
        !          7062:       IF(.NOT.INDIR) GOTO 70
        !          7063: C
        !          7064: C       CALL LEVEL ALG
        !          7065: C
        !          7066:       CALL INVOKE
        !          7067:       IF (ABORT .OR. SYSERR) GO TO 130
        !          7068:       REWIND OUTUT2
        !          7069:       REWIND OUTUT4
        !          7070: C
        !          7071: C      CHECK AND EXPAND REFS AND SAVE ALL GOOD ONES FOR LATER
        !          7072: C
        !          7073:  70   IF(.NOT.INSYM(OUTUT4,OUTUT3)) GOTO 80
        !          7074:       CALL CHKALL
        !          7075:       IF (SYSERR) GO TO 130
        !          7076:       GO TO 70
        !          7077:    80 WRITE (OUTUT3) IBR, JBR, IBR
        !          7078: C
        !          7079: C      CONSTRUCT SUPEROOT IN LAT
        !          7080: C
        !          7081:       IF (PNODE+1.GT.LNODE) GO TO 180
        !          7082:       IF (PLAT+SYMLEN+7.GT.LLAT) GO TO 160
        !          7083:       NODE(PNODE) = PLAT
        !          7084: C      MAINND IS SUPEROOT INDEX IN NODE
        !          7085: C      ISR IS SUPEROOT INDEX IN LAT
        !          7086:       MAINND = PNODE
        !          7087:       ISR = PLAT
        !          7088:       PNODE = PNODE + 1
        !          7089:       LAT(PLAT) = LS(1)
        !          7090:       PLAT = PLAT + 1
        !          7091:       IF (SYMLEN.EQ.1) GO TO 100
        !          7092:       DO 90 I=2,SYMLEN
        !          7093:         L = PLAT + I - 2
        !          7094:         LAT(L) = LS(2)
        !          7095:    90 CONTINUE
        !          7096:       PLAT = L + 1
        !          7097:   100 L = PLAT + 5
        !          7098:       DO 110 I=PLAT,L
        !          7099:         LAT(I) = 0
        !          7100:   110 CONTINUE
        !          7101:       LAT(L+1) = 5
        !          7102:       PLAT = L + 2
        !          7103: C
        !          7104: C      LOOK FOR CALLABLE PGM UNITS WITHOUT PARENTS
        !          7105: C
        !          7106:       L = PNODE - 2
        !          7107:       DO 120 I=1,L
        !          7108:         K = SYMLEN + 3 + IABS(NODE(I))
        !          7109:         IF (LAT(K).EQ.0) CALL SETPD(IABS(NODE(I)), ISR)
        !          7110:         IF (SYSERR) GO TO 130
        !          7111:  120  CONTINUE
        !          7112:  130  IF(.NOT.GREEN) GOTO 190
        !          7113: C     ERASE GREEN LINKS
        !          7114:       L = PNODE - 2
        !          7115:       DO 210 I = 1,L
        !          7116: C     SKIP ASF NODES
        !          7117:       IF(NODE(I) .LT. 0) GOTO 210
        !          7118: C     FIND HEAD OF GREEN LINKS
        !          7119:       N = NODE(I) + SYMLEN + 3
        !          7120:  220  IF(LAT(N+1) .LE. 0) GOTO 230
        !          7121:       N = LAT(N+1)
        !          7122:       GOTO 220
        !          7123:  230  LAT(N+1) = 0
        !          7124:  210  CONTINUE
        !          7125:  190  OVER = SYSERR
        !          7126:       SYSERR = .FALSE.
        !          7127:       CALL OUT2 (ISR)
        !          7128:       SYSERR = SYSERR.OR.OVER
        !          7129:       IF(SYSERR) CALL ERROR1(
        !          7130:      *    56H ILLEGAL COMMON USAGE AND UNSAFE REFERENCES NOT VERIFIED,
        !          7131:      *    56)
        !          7132:       CALL OUT2C
        !          7133:   140 RETURN
        !          7134:   150 ABORT = .TRUE.
        !          7135:       GO TO 140
        !          7136:   160 CALL ERROR1(33H IN CONSTR, TABLE OVERFLOW OF LAT, 33)
        !          7137:   170 SYSERR = .TRUE.
        !          7138:       GO TO 130
        !          7139:   180 CALL ERROR1(34H IN CONSTR, TABLE OVERFLOW OF NODE, 34)
        !          7140:       GO TO 170
        !          7141:       END
        !          7142: C XXXXXOUT2.f
        !          7143:       SUBROUTINE OUT2(ISR)
        !          7144:       INTEGER SYMLEN, PNODE, BL, PLAT, STACK, Q(3), C(12),
        !          7145:      *    OUTLAT, OUTCOM, OUTUT
        !          7146:       LOGICAL ERR, SYSERR, ABORT
        !          7147:       EXTERNAL EXCH
        !          7148:       COMMON /PARAMS/ INUT, OUTUT, NOCHAR, SYMLEN, I1, I2, II1
        !          7149:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !          7150:       COMMON /GRAPH/ LLAT, PLAT, LAT(6000)
        !          7151:       COMMON /CEXPRS/ LSTACK, STACK(620)
        !          7152:       COMMON /HEAD/ LNODE, PNODE, NODE(500)
        !          7153:       COMMON /SCR1/ LINODE, INODE(500)
        !          7154:       DATA C(1) /1HE/, C(2) /1HD/, C(3) /1HR/, C(4) /1HI/, C(5) /1HC/,
        !          7155:      *    C(6) /1HL/, C(7) /1HS/, C(8) /1HA/, C(9) /1HF/, IP /1HP/, IBL
        !          7156:      *    /1H-/, C(12) /1HU/, C(10) /1HB/, C(11) /1HN/
        !          7157:       DATA BL /1H /
        !          7158: C
        !          7159: C     ROUTINE PRINTS CALLING GRAPH
        !          7160: C
        !          7161:       IF (PNODE.LE.2) GO TO 110
        !          7162: C
        !          7163: C     GRAPH
        !          7164: C
        !          7165:       I3 = PNODE - 1
        !          7166:       IF (ISR.NE.0) I3 = I3 - 1
        !          7167: C
        !          7168: C     SORT LATTICE
        !          7169: C
        !          7170:       DO 10 I=1,I3
        !          7171:         INODE(I) = IABS(NODE(I))
        !          7172:    10 CONTINUE
        !          7173:       CALL SSORT(EXCH, LAT, LLAT, INODE, I3, 0)
        !          7174:       DO 100 IA=1,I3
        !          7175:         I = INODE(IA)
        !          7176:         L = I + SYMLEN + 6
        !          7177:         IF (MOD(LAT(L),8).EQ.4) GO TO 100
        !          7178:         CALL S5UNPK(LAT(I), STACK(1), 6)
        !          7179:         WRITE (OUTUT,99999) (STACK(L),L=1,6)
        !          7180: 99999   FORMAT (///1X, 6A1//)
        !          7181: C
        !          7182: C     GET ARGS IF ANY
        !          7183: C
        !          7184:         IS = 1
        !          7185:         K = SYMLEN + I
        !          7186:         L = LAT(K)
        !          7187:         IF (L) 70, 70, 20
        !          7188:    20   K = K + 1
        !          7189:         K = LAT(K)
        !          7190:         IF (L*8.GT.LSTACK) GO TO 120
        !          7191:         DO 60 LL=1,L
        !          7192:           Q(1) = IGATT2(K,8)
        !          7193:           IF (Q(1).EQ.5 .OR. Q(1).EQ.6 .OR. Q(1).EQ.13) GO TO 30
        !          7194:           Q(1) = IGATT2(K,1)
        !          7195:           Q(2) = IGATT2(K,5)
        !          7196:           Q(3) = IGATT2(K,7)
        !          7197:           STACK(IS) = IBL
        !          7198:           STACK(IS+2) = IBL
        !          7199:           IF (Q(1).GE.8) STACK(IS) = C(1)
        !          7200:           L1 = MOD(Q(1),8) + 2
        !          7201:           STACK(IS+1) = C(L1)
        !          7202:           IF (Q(2).EQ.1) STACK(IS+2) = C(7)
        !          7203:           STACK(IS+3) = C(7)
        !          7204:           IF (Q(3).NE.0) STACK(IS+3) = C(8)
        !          7205:           GO TO 40
        !          7206:    30     STACK(IS) = IP
        !          7207:           STACK(IS+1) = IBL
        !          7208:           STACK(IS+2) = IBL
        !          7209:           STACK(IS+3) = IBL
        !          7210:    40     DO 50 LK=4,7
        !          7211:             L1 = LK + IS
        !          7212:             STACK(L1) = BL
        !          7213:    50     CONTINUE
        !          7214:           IS = IS + 8
        !          7215:           K = LAT(K+3)
        !          7216:    60   CONTINUE
        !          7217:       IS = IS - 1
        !          7218: C     PRINT ARGUMENTS
        !          7219:       K = 48
        !          7220:       IF (K.GT.IS) K = IS
        !          7221:       WRITE(OUTUT,99998)(STACK(LK), LK=1,K)
        !          7222: 99998 FORMAT(20H ARGUMENT ATTRIBUTES ,5X,6(8A1,1X))
        !          7223:       IF( K.EQ.IS ) GOTO 70
        !          7224:  65   LK = K + 1
        !          7225:       K = LK + 47
        !          7226:       IF(K.GT.IS) K = IS
        !          7227:       WRITE(OUTUT,99997) (STACK(L1),L1=LK,K)
        !          7228: 99997 FORMAT(25X,6(8A1,1X))
        !          7229:       IF(K.LT.IS) GOTO 65
        !          7230: C
        !          7231: C     GET COMMON NAMES
        !          7232: C
        !          7233:    70   K = I + SYMLEN + 2
        !          7234:         K = OUTCOM(LAT(K),IS)
        !          7235:         IF (SYSERR) GO TO 110
        !          7236:         IF (K.EQ.0) GO TO 80
        !          7237:       CALL OUT2A(14H COMMON BLOCKS, 14, IS, 2)
        !          7238: C
        !          7239: C     FIND PARENTS
        !          7240: C
        !          7241:    80   K = I + SYMLEN + 3
        !          7242:         K = OUTLAT(LAT(K),IS,ISR)
        !          7243:         IF (SYSERR) GO TO 110
        !          7244:         IF (K.EQ.0) GO TO 90
        !          7245:       CALL OUT2A(22H CALLED BY SUBPROGRAMS, 22, IS, 1)
        !          7246: C
        !          7247: C     FIND DESCENDENTS
        !          7248: C
        !          7249:    90   K = I + SYMLEN + 4
        !          7250:         K = OUTLAT(LAT(K),IS,ISR)
        !          7251:         IF (SYSERR) GO TO 110
        !          7252:         IF (K.EQ.0) GO TO 100
        !          7253:       CALL OUT2A(18H CALLS SUBPROGRAMS, 18, IS, 1)
        !          7254:   100 CONTINUE
        !          7255:   110 RETURN
        !          7256:   120 SYSERR = .TRUE.
        !          7257:       CALL ERROR1(33H IN OUT2, TABLE OVERFLOW OF STACK, 33)
        !          7258:       GO TO 110
        !          7259:       END
        !          7260: C XXXXXSETNOD.f
        !          7261:       SUBROUTINE SETNOD
        !          7262:       INTEGER PLAT, COM, PNODE, PDSA, DSA, SYMLEN, PP, SYMHD, PCOM,
        !          7263:      *    SETARG, FINDND, FINDCM
        !          7264:       LOGICAL ERR, SYSERR, ABORT
        !          7265:       COMMON /COMS/ LCOM, PCOM, COM(300)
        !          7266:       COMMON /GRAPH/ LLAT, PLAT, LAT(6000)
        !          7267:       COMMON /HEAD/ LNODE, PNODE, NODE(500)
        !          7268:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !          7269:       COMMON /CTABL/ LDSA, PDSA, DSA(5000)
        !          7270:       COMMON /PARAMS/ INUT, I1, NOCHAR, SYMLEN, I2, I3, I4
        !          7271:       COMMON /FACTS/ NAME, NOST, ITYP, IASF
        !          7272:       COMMON /TABL/ NEXT, LABHD, SYMHD, IBNEXT
        !          7273:       COMMON /SCR1/ LINODE, INODE(500)
        !          7274: C
        !          7275: C     LAT-IS THE CALLING GRAPH PLUS AUXILIARY NODES
        !          7276: C     PLAT-IS NEXT FREE WORD IN LAT
        !          7277: C     LLAT-IS LENGTH OF LAT
        !          7278: C     NODE-IS LIST OF ALL CALLING NODES INDICES IN LAT
        !          7279: C        (WILL BE IN ALPHABETIC ORDER BEFORE CHECKING COMMENCES)
        !          7280: C     PNODE-IS NEXT FREE WORD IN NODE
        !          7281: C     LNODE-IS LENGTH OF NODE
        !          7282: C
        !          7283: C     P.U. NODE IN LAT
        !          7284: C     WD 1.....PACKED CHARACTERS OF NAME OF SUBPGM
        !          7285: C     WD2.....NUMBER OF ARGS
        !          7286: C     WD3.....PTR TO HEAD OF LINEAR LINKED ORDERED LIST OF
        !          7287: C     ARGUMENT NODES IN LAT
        !          7288: C     WD4.....PTR TO HEAD OF LINEAR LINKED LIST OF COMMON NODES
        !          7289: C     IN LAT
        !          7290: C     WD5.....PTR TO HEAD OF LINEAR LINKED LIST OF INDICES IN
        !          7291: C     LAT OF ENTRIES FOR PARENT NODES
        !          7292: C     WD6.....PTR TO HEAD OF LINEAR LINKED LIST OF INDICES IN
        !          7293: C     LAT OF ENTRIES FOR DESCENDENT NODES
        !          7294: C     WD7.....PTR TO HEAD OF LINEAR LINKED LIST OF SEQUENCE NOS OF
        !          7295: C     BAD REFERENCES;  INCONSISTANT TYPE OF FCN/SUBR REFERENCE, INCORR
        !          7296: C     NUMBER OF ARGS, AND RECURSIVE CALL OF SELF ARE THE THREE
        !          7297: C     TYPES OF BAD REFS
        !          7298: C     WD8.....BITS 0-2 TYPE OF SUBPGM:  0 SUBR, 1 FCN, 2 BLOCK DATA,
        !          7299: C      3 MAIN, 4 ASF, 5 SUPEROOT
        !          7300: C     BITS 3-5 (IF FCN OR ASF) CONTAIN TYPE OF FCN: 0 DP, 1 RL,
        !          7301: C     2 INT, 3 COMP, 4 LOG
        !          7302: C
        !          7303: C     ARGUMENT NODE IN LAT
        !          7304: C     WD1.....ATTRIBUTES (SAME AS IN DSA, SEE LOOKUP)
        !          7305: C     WD2.....LENGTH (IN PROCEDURE ARGS THIS WORD POINTS TO
        !          7306: C     HEAD OF LINEAR LINKED LIST OF ACTUAL SUBPGM NAMES ASSOCIATED
        !          7307: C     WITH THIS ARG IN THE PROGRAM; ALSO HAVE INDEX IN LAT OF
        !          7308: C     SUBPRGM IN WHICH THE ASSOC OCCURS
        !          7309: C     WD 3.....PTR TO HEAD OF LINEAR LINKED LIST OF PARENT ARGS
        !          7310: C     (ARGS FROM PARENT RTNES SENT DOWN TO BE ASSOC. WITH THIS ARG)
        !          7311: C     WD 4.....PTR TO HEAD OF LINEAR LINKED LIST OF DESC. ARGS
        !          7312: C     (ARGS FROM DESC RTNES WHICH THIS ARG IS ASSOC. WITH)
        !          7313: C     WD 5.....PTR TO NEXT ARG NODE OR 0
        !          7314: C
        !          7315: C     COMMON NODE IN LAT
        !          7316: C     WD 1.....INDEX OF ENTRY FOR THIS COMMON IN COM
        !          7317: C     WD 2.....1 IF COMMON STORED INTO BY THIS P.U. ELSE 0
        !          7318: C     WD 3.....PTR TO NEXT COMMON NODE
        !          7319: C     CREATE NODE PTR TO NEW NODE IN LAT
        !          7320: C
        !          7321:       IF (PNODE.GT.LNODE) GO TO 170
        !          7322:       IF (PLAT+SYMLEN+7.GT.LLAT) GO TO 190
        !          7323: C
        !          7324: C     CHECK IF SUBPROGRAM HAS NAME SAME AS ANOTHER SUBPROGRAM
        !          7325: C     OR A COMMON BLOCK
        !          7326: C
        !          7327:       II = IGATT1(NAME,8)
        !          7328:       IF (II.EQ.11) GO TO 10
        !          7329:       IF (FINDND(DSA(NAME+4),IROOT)) 10, 10, 20
        !          7330:    10 IF (FINDCM(DSA(NAME+4))) 40, 40, 30
        !          7331:    20 ERR = .TRUE.
        !          7332:    30 CALL ERROR2(45H SUBPROGRAM AND/OR COMMON BLOCK NAME CONFLICT, 45,
        !          7333:      *  DSA(NAME+4), 1, 1, 1)
        !          7334:       IF (.NOT.ERR) GO TO 40
        !          7335:       ERR = .FALSE.
        !          7336:       ABORT = .TRUE.
        !          7337:       GO TO 160
        !          7338:    40 NODE(PNODE) = PLAT
        !          7339:       IROOT = PNODE
        !          7340:       PNODE = PNODE + 1
        !          7341: C
        !          7342: C     ENTER NAME INTO NODE
        !          7343: C
        !          7344:       DO 50 I=1,SYMLEN
        !          7345:         L = NAME + 3 + I
        !          7346:         LL = PLAT - 1 + I
        !          7347:         LAT(LL) = DSA(L)
        !          7348:    50 CONTINUE
        !          7349: C
        !          7350: C     PP POINTS TO CURRENT RTNE NODE IN LAT
        !          7351: C
        !          7352:       PP = PLAT
        !          7353:       PLAT = LL + 6
        !          7354:       LL = LL + 1
        !          7355:       DO 60 I=LL,PLAT
        !          7356:         LAT(I) = 0
        !          7357:    60 CONTINUE
        !          7358: C
        !          7359: C     0 SUBR, 1 FCN, 2 BLOCK DATA, 3 MAIN, 4 ASF, 5 SUPEROOT
        !          7360: C
        !          7361:       LAT(PLAT+1) = II/4
        !          7362: C     INITIALIZE LEVEL OF BLOCK DATA TO -2
        !          7363:       IF (LAT(PLAT+1).EQ.2) INODE(IROOT) = -2
        !          7364:       IF (LAT(PLAT+1).NE.1) GO TO 70
        !          7365:       L = IGATT1(NAME,1)
        !          7366:       LAT(PLAT+1) = LAT(PLAT+1) + 8*MOD(L,8)
        !          7367:    70 PLAT = PLAT + 2
        !          7368: C
        !          7369: C     HAVING INITIALIZED NODE TO 0, LOOK FOR ARGS
        !          7370: C
        !          7371:       IF (DSA(NAME+2)) 80, 90, 80
        !          7372:    80 L = PP + SYMLEN
        !          7373:       LAT(L) = SETARG(PP,NAME)
        !          7374:       IF (SYSERR) GO TO 160
        !          7375: C
        !          7376: C     READ THROUGH SYMBOL TABLE FOR COMMON BLOCK DEFNS AND ASF DEFS
        !          7377: C     AND SETTING OF COMMON REGION
        !          7378: C
        !          7379:    90 K = SYMHD
        !          7380:   100 IF (K) 110, 160, 110
        !          7381:   110 LL = IGATT1(K,8)
        !          7382: C
        !          7383: C     CHECK FOR ASF AND COMMON DEFNS OR COMMON
        !          7384: C     SETTING INFO
        !          7385: C
        !          7386:       GO TO (140, 120, 140, 140, 140, 140, 130, 150, 140, 150, 140,
        !          7387:      *    140, 140, 140), LL
        !          7388: C
        !          7389: C     CREATE ASF NODE
        !          7390: C
        !          7391:   120 CALL SETASF(PP, K)
        !          7392:       IF (SYSERR) GO TO 160
        !          7393:       GO TO 140
        !          7394: C
        !          7395: C     CREATE COM ENTRY
        !          7396: C
        !          7397:   130 CALL SETCOM(PP, K)
        !          7398:       IF (SYSERR) GO TO 160
        !          7399:   140 K = DSA(K+3)
        !          7400:       GO TO 100
        !          7401: C
        !          7402: C     CHECK IF ELEMENT IN COMMON
        !          7403: C
        !          7404:   150 LL = IGATT1(K,2)
        !          7405:       L = IGATT1(K,5)
        !          7406:       IF (L.NE.1 .OR. LL.NE.1) GO TO 140
        !          7407:       L = DSA(K+2)
        !          7408:       L = DSA(L+1)
        !          7409:       CALL MKCOM(PP, L)
        !          7410:       IF (SYSERR) GO TO 160
        !          7411:       GO TO 140
        !          7412:   160 RETURN
        !          7413:   170 CALL ERROR1(34H IN SETNOD, TABLE OVERFLOW OF NODE, 34)
        !          7414:   180 SYSERR = .TRUE.
        !          7415:       GO TO 160
        !          7416:   190 CALL ERROR1(33H IN SETNOD, TABLE OVERFLOW OF LAT, 33)
        !          7417:       GO TO 180
        !          7418:       END
        !          7419: C XXXXXCHK1.f
        !          7420:       INTEGER FUNCTION CHK1(IR, IE)
        !          7421: C
        !          7422: C      PROGRAM UNIT AT LAT(IR) CALLS PROGRAM UNIT AT LAT(IE)
        !          7423: C      CHK1 RETURNS 1 IF REF OK ELSE 0
        !          7424: C      CHECKS FOR INCONSISTENT SYBPGM USAGE, CORRECT NO. OF
        !          7425: C      ARGS, CORRECT USAGE MATCH UP OF ARGS
        !          7426: C
        !          7427:       INTEGER PREF, REF, PDSA, DSA, PLAT, SYMLEN, IBR(1)
        !          7428:       COMMON /CREF/ LREF, PREF, REF(100)
        !          7429:       COMMON /CTABL/ LDSA, PDSA, DSA(5000)
        !          7430:       COMMON /GRAPH/ LLAT, PLAT, LAT(6000)
        !          7431:       COMMON /PARAMS/ I1, I2, I3, SYMLEN, I4, I5, I6
        !          7432:       CHK1 = 0
        !          7433: C      CHECKS FOR SELF RECURSION
        !          7434:       IF (IE.NE.IR) GO TO 10
        !          7435:       CALL ERROR2(24H RECURSIVE CALL OF SELF , 24, REF(3), -1, 1, 1)
        !          7436:       GO TO 100
        !          7437: C      CHECKS FOR USAGE OF SUBPGM CONSISTENT WITH DEF
        !          7438:    10 I = IE + SYMLEN + 6
        !          7439:       N = MOD(LAT(I),8)
        !          7440:       IF (N.EQ.REF(4) .OR. N.EQ.6 .AND. REF(4).EQ.1) GO TO 20
        !          7441:       CALL ERROR2(38H INCONSISTENT REFERENCE TO SUBPROGRAM , 38,
        !          7442:      *  LAT(IE), 1, 1, 0)
        !          7443:       CALL ERROR2(1H1, 0, REF(3), -1, 0, 1)
        !          7444:       GO TO 100
        !          7445: C      CHECKS FOR CORRECT NO. ARGS
        !          7446:    20 I = IE + SYMLEN
        !          7447:       IF (LAT(I).EQ.REF(1)/2) GO TO 30
        !          7448:       CALL ERROR2(42H INCORRECT NUMBER OF ARGS IN REFERENCE TO , 42,
        !          7449:      *  LAT(IE), 1, 1, 0)
        !          7450:       CALL ERROR2(1H1, 0, REF(3), -1, 0, 1)
        !          7451:       GO TO 100
        !          7452: C      ARE DONE WITH REF IF IT HAS NO ARGS
        !          7453:  30   CHK1 = 1
        !          7454:       IF(LAT(I)) 100, 100, 40
        !          7455: C      CHECK USAGES OF ARGS IN CALL VS USAGES OF ARGS IN DEF
        !          7456: C      N POINTS TO DUMMY ARG ENTRY
        !          7457:    40 I = LAT(I)
        !          7458:       N = IE + SYMLEN + 1
        !          7459:       L = 5
        !          7460:       DO 80 K=1,I
        !          7461:         MD = IGATT2(LAT(N),8)
        !          7462:         IF (MD.NE.13 .AND. MD.NE.5 .AND. MD.NE.6) GO TO 60
        !          7463: C      HAVE A PROC ARG IN DEF
        !          7464: C      NEED A PROC ARG IN REF
        !          7465:         IF (REF(L).EQ.0) GO TO 50
        !          7466:         MR = IGATT1(REF(L),8)
        !          7467:         IF (MR.EQ.13 .OR. MR.EQ.6 .OR. MR.EQ.5) GO TO 70
        !          7468:  50   IBR(1) = K
        !          7469:       CALL ERROR2(36H INCOMPATIBLE USAGE ASSOCIATED WITH ,36,IBR,-2,1,0)
        !          7470:       CALL ERROR2(17H IN REFERENCE TO ,17,LAT(IE), 1, 0, 0)
        !          7471:       CALL ERROR2(1H1, 0, REF(3), -1, 0, 1)
        !          7472:       CHK1 = 0
        !          7473:       GOTO 70
        !          7474: C      HAVE VARIABLE OR ARRAY AS ARG IN DEF
        !          7475: C      NEED SAME IN REF
        !          7476:    60   IF (REF(L).EQ.0) GO TO 70
        !          7477:         MR = IGATT1(REF(L),8)
        !          7478:         IF (MR.EQ.13 .OR. MR.EQ.5 .OR. MR.EQ.6) GO TO 50
        !          7479:    70   N = LAT(N) + 3
        !          7480:         L = L + 2
        !          7481:    80 CONTINUE
        !          7482:   100 RETURN
        !          7483:       END
        !          7484: C XXXXXCHK2.f
        !          7485:       INTEGER FUNCTION CHK2(IR, IE)
        !          7486: C
        !          7487: C     PROGRAM UNIT AT LAT(IR) CALLS PROGRAM UNIT AT LAT(IE)
        !          7488: C     CHK2 RETURNS 1 IF REF IS OK, ELSE 0
        !          7489: C     CHECKS TYPE OF FCN IF FCN IS REFERENCED,
        !          7490: C      CHECKS PROC PARAMETERF FOR COMPATIBLE USAGE AND TYPE
        !          7491: C     TYPE AND STRUCTURE OF VARIABLE
        !          7492: C     AND ARRAY ARGS, BUILDS UPWARD LINKS BETWEEN
        !          7493: C     DUMMIES FOR SETTING INFO TRANSFER IN SCAN
        !          7494: C     BAD STRUCTURE MATCHING MAKES REF BAD
        !          7495: C     NO DUMMY LINKS CREATED IN THIS CASE
        !          7496: C
        !          7497:       INTEGER REF, PREF, PDSA, DSA, PLAT, SYMLEN, FINDND, AER(1)
        !          7498:       LOGICAL ERR, SYSERR, ABORT
        !          7499:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !          7500:       COMMON /CREF/ LREF, PREF, REF(100)
        !          7501:       COMMON /CTABL/ LDSA, PDSA, DSA(5000)
        !          7502:       COMMON /GRAPH/ LLAT, PLAT, LAT(6000)
        !          7503:       COMMON /PARAMS/ I1, I2, I3, SYMLEN, I4, I5, I6
        !          7504:       COMMON /FACTS/ NAME, NOST, ITYP, IASF
        !          7505:       CHK2 = 1
        !          7506: C     CHECK TYPE OF FCN CALLED IF A FCN
        !          7507:       IF (REF(4).NE.1) GO TO 10
        !          7508:       I = IE + SYMLEN + 6
        !          7509:       IF (MOD(IGATT1(REF(2),1),8).EQ.LAT(I)/8) GO TO 10
        !          7510:       IF (MOD(LAT(I),8).EQ.6 .AND. IGATT1(REF(2),1)/8.NE.1) GO TO 10
        !          7511:       CALL ERROR2(39H INCOMPATIBLE FCN TYPE IN REFERENCE TO , 39,
        !          7512:      *  LAT(IE), 1, 1, 0)
        !          7513:       CALL ERROR2(1H1, 0, REF(3), -1, 0, 1)
        !          7514: C     CYCLE THROUGH ARGS IF ANY
        !          7515:    10 I = IE + SYMLEN
        !          7516:       IF (LAT(I).EQ.0) GO TO 170
        !          7517:       I = LAT(I)
        !          7518:       N = IE + SYMLEN + 1
        !          7519:       L = 5
        !          7520:       DO 160 K=1,I
        !          7521:         AER(1) = K
        !          7522:         L1 = IGATT2(LAT(N),8)
        !          7523:         IF (L1.EQ.13 .OR. L1.EQ.6 .OR. L1.EQ.5) GO TO 90
        !          7524: C     CHECK STRUCTURE AND TYPE OF VARIABLES
        !          7525: C     AND ARRAY ARGUMENTS
        !          7526:         K1 = MOD(IGATT2(LAT(N),1),8)
        !          7527:         K2 = IGATT2(LAT(N),7)
        !          7528:         IF (K2.GT.1) K2 = 1
        !          7529:         L1 = MOD(REF(L+1),8)
        !          7530:         L2 = MOD(REF(L+1),32)/8
        !          7531: C
        !          7532: C     CHECK TYPE, CHECK HOLLERITH CONSTANTS MATCHED
        !          7533: C     ALWAYS TO INTEGER ARRAYS
        !          7534: C
        !          7535:         IF (L1.NE.5 .OR. REF(L).NE.0) GO TO 20
        !          7536:         IF (REF(4).EQ.0 .AND. K2.NE.0 .AND. K1.EQ.2) GO TO 40
        !          7537:       CALL ERROR2(33H HOLLERITH CONST ASSOCIATED WITH ,33,AER,-2,1,0)
        !          7538:       CALL ERROR2(17H IN REFERENCE TO , 17,LAT(IE),1, 0, 0)
        !          7539:       CALL ERROR2(1H1, 0, REF(3), -1, 0, 1)
        !          7540:         CHK2 = 0
        !          7541:         GO TO 150
        !          7542:    20   IF (K1.EQ.L1 .OR. K1.EQ.2 .AND. L1.EQ.5) GO TO 30
        !          7543:       CALL ERROR2(33H MISMATCHED TYPE ASSOCIATED WITH ,33,AER,-2,1,0)
        !          7544:       CALL ERROR2(17H IN REFERENCE TO ,17,LAT(IE),1, 0, 0)
        !          7545:       CALL ERROR2(1H1, 0, REF(3), -1, 0, 1)
        !          7546: C
        !          7547: C     CHECK STRUCTURE L2 = 0 SCALAR, 1 ARRAY, 2 ARRAY ELE
        !          7548: C
        !          7549:    30   IF (K2.EQ.1 .AND. L2.GT.0 .OR. K2.EQ.0 .AND. (L2.EQ.2 .OR.
        !          7550:      *      L2.EQ.0)) GO TO 40
        !          7551:       CALL ERROR2(38H MISMATCHED STRUCTURE ASSOCIATED WITH ,38,AER,-2,
        !          7552:      *  1, 0)
        !          7553:       CALL ERROR2(17H IN REFERENCE TO , 17, LAT(IE),1, 0, 0)
        !          7554:       CALL ERROR2(1H1, 0, REF(3), -1,0,1)
        !          7555:         CHK2 = 0
        !          7556:         GO TO 150
        !          7557: C
        !          7558: C     CHECK IF ACTUAL ARG IS NON-PROC DUMMY ARG IN CURRENT PGM UNIT
        !          7559: C     IF SO CREATE ARGLINK.
        !          7560: C     NO ARGLINK CREATED IF FCN CALLED IS AN ASF
        !          7561: C
        !          7562:    40   IF (REF(L).LE.0 .OR. REF(4).EQ.4) GO TO 150
        !          7563:         K1 = IGATT1(REF(L),4)
        !          7564:         IF (K1.EQ.0) GO TO 150
        !          7565: C
        !          7566: C     FIND REL. POSITION OF CALLING PGM
        !          7567: C     DUMMY , L1 PTS TO IT IN LAT
        !          7568:         L3 = DSA(NAME+2)
        !          7569:         KK = 0
        !          7570:    50   KK = KK + 1
        !          7571:         IF (DSA(L3).EQ.REF(L)) GO TO 60
        !          7572:         L3 = DSA(L3+1)
        !          7573:         GO TO 50
        !          7574:    60   K2 = 0
        !          7575:         L1 = IR + SYMLEN - 2
        !          7576:    70   L1 = LAT(L1+3)
        !          7577:         K2 = K2 + 1
        !          7578:         IF (K2.LT.KK) GO TO 70
        !          7579: C     FIND REL POSITION OF CALLED DUMMY ARG
        !          7580: C     L2 PTS TO IT IN LAT
        !          7581:         K1 = 0
        !          7582:         L2 = IE + SYMLEN - 2
        !          7583:    80   L2 = LAT(L2+3)
        !          7584:         K1 = K1 + 1
        !          7585:         IF (K1.LT.K) GO TO 80
        !          7586:         IF (MATCH(LAT(L2+2),1,L1).NE.0) GO TO 150
        !          7587:         IF (PLAT+2.GT.LLAT) GO TO 180
        !          7588:         LAT(PLAT) = L1
        !          7589:         LAT(PLAT+1) = LAT(L2+2)
        !          7590:         LAT(L2+2) = PLAT
        !          7591:         PLAT = PLAT + 2
        !          7592:         GO TO 150
        !          7593: C     CHECK PROC ARGUMENTS TO SEE THEY ARE CORRECT USAGE AND TYPE
        !          7594: C     LAT(N) PTS TO DUMMY ARG ENTRY IN LAT
        !          7595: C     REF(L) PTS TO CORRESP REF ARG IN DSA
        !          7596:    90   IF (IGATT1(REF(L),4).EQ.1) GO TO 110
        !          7597: C     REFERENCE CONTAINS AN AACTUAL PROC NAME
        !          7598: C     CHECK FOR MISSING SUBPROGRAM
        !          7599:         L3 = REF(L)
        !          7600:         L2 = FINDND(DSA(L3+4),L3)
        !          7601:         IF (L2.NE.0) GO TO 100
        !          7602:         L3 = REF(L) + 4
        !          7603:       CALL ERROR2(20H MISSING SUBPROGRAM , 20, DSA(L3), 1, 1, 0)
        !          7604:       CALL ERROR2(17H IN REFERENCE TO , 17, LAT(IE), 1, 0, 0)
        !          7605:       CALL ERROR2(1H1, 0, REF(3), -1, 0, 1)
        !          7606:         GO TO 150
        !          7607: C     CALL CHK3 TO PREFORM CHECKS
        !          7608:   100   L5 = L2 + SYMLEN + 6
        !          7609:       CALL CHK3(LAT(N), L2, L1, MOD(LAT(L5),8), IE, REF(3), AER)
        !          7610:         GO TO 150
        !          7611: C     REFERENCE CONTAINS A DUMMY ARGUMENT MUST CHECK ALL ACTUALS
        !          7612: C     WHICH CAN CORRESPOND TO THAT DUMMY
        !          7613: C     FIRST FIND ITS CORRESP ACTUAL, IF ANY
        !          7614:   110   L2 = REF(L)
        !          7615:         L2 = DSA(L2+2)
        !          7616: C      L2 IS OFFSET AMONG ALL DUMMIES OF LAT(IR)
        !          7617: C      OF THE DUMMY ARG AT REF(L)
        !          7618:         L3 = IR + SYMLEN + 1
        !          7619:         L3 = LAT(L3)
        !          7620:         IF (L2.EQ.1) GO TO 130
        !          7621:         DO 120 L4=2,L2
        !          7622:           L3 = LAT(L3+3)
        !          7623:   120   CONTINUE
        !          7624: C     L3 PTS TO DUMMY ARG IN CALLING RTNE
        !          7625:   130   L3 = LAT(L3+1)
        !          7626: C     L3 CONTAINS OFFSET FOR PROC ACTUALS
        !          7627: C     MATCHED TO THIS DUMMY ARG
        !          7628: C     IN TEMPLATED OFF LAT(IR)
        !          7629:         L2 = IR + SYMLEN + 5
        !          7630:         IF (LAT(L2).NE.0) GO TO 140
        !          7631:         L3 = REF(L) + 4
        !          7632:         CALL ERROR2(35H NO ACTUAL PROCS SUBSTITUTABLE FOR , 35,
        !          7633:      *  DSA(L3), 1, 1, 0)
        !          7634:       CALL ERROR2(17H IN REFERENCE TO , 17, LAT(IE), 1, 0, 0)
        !          7635:       CALL ERROR2(1H1, 0, REF(3), -1, 0, 1)
        !          7636:         GO TO 150
        !          7637: C      L2 PTS TO ACTUALS TEMPLATE
        !          7638:   140   L2 = LAT(L2)
        !          7639:         L4 = L2 + L3
        !          7640: C      LAT(L4) IS ACTUAL PAIRED TO REF(L)
        !          7641:         L5 = LAT(L4) + SYMLEN + 6
        !          7642:       CALL CHK3(LAT(N), LAT(L4), L1, MOD(LAT(L5),8), IE, REF(3), AER)
        !          7643: C     CYCLE TO NEXT ACTUAL
        !          7644:         L2 = LAT(L2) + L2
        !          7645:         IF (LAT(L2)) 150, 150, 140
        !          7646:   150   L = L + 2
        !          7647:         N = LAT(N) + 3
        !          7648:   160 CONTINUE
        !          7649:   170 RETURN
        !          7650:   180 SYSERR = .TRUE.
        !          7651:       CHK2 = 0
        !          7652:       CALL ERROR1(31H IN CHK2, TABLE OVERFLOW OF LAT, 31)
        !          7653:       GO TO 170
        !          7654:       END
        !          7655: C XXXXXFIND.f
        !          7656:       INTEGER FUNCTION FIND(K)
        !          7657: C
        !          7658: C      FIND HAS TO FIND THE INDEX IN NODE
        !          7659: C      OF THE LATTICE ENTRY AT K, DOES A
        !          7660: C     LINEAR SEARCH ON NODE ARRAY
        !          7661: C      P.U. ASSUMES NODE ARRAY SET UP PROPERLY
        !          7662: C      AND THAT NODES ITS ASKED TO FIND ARE ALWAYS IN THE
        !          7663: C      ARRAY SOMEWHERE. CAN BE ASKED TO FIND INDEX OF
        !          7664: C      ANY NODE IN LATTICE, EVEN ASFS
        !          7665: C
        !          7666:       INTEGER PNODE
        !          7667:       COMMON /HEAD/ LNODE, PNODE, NODE(500)
        !          7668:       L = PNODE - 1
        !          7669:       DO 10 I=1,L
        !          7670:         IF (K.NE.IABS(NODE(I))) GO TO 10
        !          7671:         FIND = I
        !          7672:         GO TO 20
        !          7673:    10 CONTINUE
        !          7674:    20 RETURN
        !          7675:       END
        !          7676: C XXXXXASLEV.f
        !          7677:       SUBROUTINE ASLEV(IPT)
        !          7678: C
        !          7679: C      ASLEV TAKES A SUBLATTICE WITH ITS ROOT AT NODE(IABS(IPT)))
        !          7680: C      AND READJUSTS THE LEVELS IN THE SUBLATTICE
        !          7681: C      IN ACCORDANCE WITH NEW LEVEL AT ROOT
        !          7682: C     NOTE, IPT LT 0 FROM CALL IN SETREF  (EXT) AND FROM ACTUALS
        !          7683: C     PASSED DOWN IN PROC
        !          7684: C
        !          7685:       INTEGER PNODE, STACK, PLAT, FIND, SYMLEN
        !          7686:       INTEGER ZERO(1)
        !          7687:       LOGICAL SYSERR, ERR, ABORT, GR
        !          7688:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !          7689:       COMMON /HEAD/ LNODE, PNODE, NODE(500)
        !          7690:       COMMON /SCR1/ LINODE, INODE(500)
        !          7691:       COMMON /SCR2/ LSTACK, STACK(500)
        !          7692:       COMMON /GRAPH/ LLAT, PLAT, LAT(6000)
        !          7693:       COMMON /PARAMS/ I1, I2, I3, SYMLEN, I4, I5, I6
        !          7694:       DATA ZERO(1) /0/
        !          7695: C
        !          7696: C     STACK (IS) IS SIGNED NODE INDEX OF SUBPGM
        !          7697: C     IF GT 0, NODE IS ALONG A RED LINK TO PARENT
        !          7698: C     IF LT 0, NODE IS ALONG  A GREEN LINK TO PARENT
        !          7699: C
        !          7700: C     STACK(IS+1) IS PTR TO TWO WORD DESC ENTRY FOR THIS
        !          7701: C     SUBPGM, OR 0 FOR END OF DESC LIST
        !          7702: C
        !          7703:       K = IABS (IPT )
        !          7704:       K = SYMLEN + NODE(K) + 4
        !          7705:       STACK(2) = IPT
        !          7706:       STACK (1) = IABS ( LAT(K) )
        !          7707:       IS = 2
        !          7708: C      DOES TOP OF STACK ENTRY HAVE UNVISITED DESC
        !          7709:    10 IF (STACK(IS-1).NE.0) GO TO 20
        !          7710: C      TEST IF ARE DONE WITH SUBLATTICE
        !          7711:       IF (IS.EQ.2) RETURN
        !          7712: C      POP UP A LEVEL IN PATH
        !          7713:       IS = IS - 2
        !          7714:       GO TO 10
        !          7715: C      UPDATE ENTRY OF NEXT DESCENDENT TO BE CHECKED ON STACK
        !          7716:    20 K = STACK(IS-1)
        !          7717:       STACK(IS-1) = IABS (LAT(K+1))
        !          7718: C     LAT(K) CONTAINS SIGNED INDEX OF DESC BEING PROCESSED
        !          7719: C     SIGN INDICATES COLOR OF LINK TO PARENT, (I.E.
        !          7720: C     NODE AT TOP OF STACK)
        !          7721: C     LT 0 IS GREEN LINK, GT 0 IS RED LINK
        !          7722: C     L IS INDEX IN NODE(*) OF DESC BEING PROCESSED
        !          7723: C     KK IS INDEX IN LAT(*) OF DESC BEING PROCESSED
        !          7724:       LL = 1
        !          7725:       IF( LAT(K) .LT. 0) LL = -1
        !          7726:       KK = IABS(LAT(K))
        !          7727:       L = FIND(KK)
        !          7728: C     SKIP ALL DESC WITH NEGATIVE LEVELS
        !          7729:       IF (INODE(L).LT.0) GO TO 10
        !          7730: C     SEE IF STACK TOO SHORT FOR LOOPS
        !          7731:       IF( IS.LE.2) GOTO 40
        !          7732: C     CHECK FOR LOOPS IN PATH STACK DESC
        !          7733:       LOOP = 0
        !          7734:       GR = .FALSE.
        !          7735:       IF(LL.EQ.(-1)) GR = .TRUE.
        !          7736:       DO 60 I = 2,IS,2
        !          7737:       IF(LOOP) 70,70,90
        !          7738:    90 IF(STACK(I).LT.0) GR = .TRUE.
        !          7739:       GOTO 60
        !          7740:  70   IF(L.EQ.IABS(STACK(I))) LOOP = I
        !          7741:  60   CONTINUE
        !          7742: C      NO LOOPS
        !          7743:       IF(LOOP.EQ.0) GOTO 40
        !          7744: C     LOOP OF MIXED COLORED LINKS
        !          7745: C     DO NOT STACK DESC
        !          7746:       IF(GR) GOTO 10
        !          7747: C     RECURSION
        !          7748:       ABORT = .TRUE.
        !          7749:       CALL ERROR2(19H RECURSIVE CALL OF ,19,LAT(KK), 1, 1, 0)
        !          7750:       DO 80 K=LOOP,IS,2
        !          7751:       KK = IABS(STACK(K))
        !          7752:       KK = NODE(KK)
        !          7753:  80   CALL ERROR2(11H INVOLVING ,11,LAT(KK),1, 0, 0)
        !          7754:       CALL ERROR2(1H1, 0, ZERO, -3, 0, 1)
        !          7755:    30 RETURN
        !          7756: C      TEST IF DESC LEVEL IS ALREADY GT LEVEL OF PAR
        !          7757: C      THEN NEEDNT CHECK PART OF SUBLATTICE UNDER THIS DESC
        !          7758:    40 K = IABS (STACK(IS))
        !          7759:       IF (INODE(L).GT.INODE(K)) GO TO 10
        !          7760: C      PUSH DESC ONTO STACK AFTER FIXING HIS LEVEL
        !          7761:       INODE(L) = INODE(K) + 1
        !          7762: C      TEST AGAINST LNODE BECAUSE  SCRATCH ARRAY
        !          7763: C      IS AS LONG AS NODE ARRAY
        !          7764:       IF (IS+2.GT.LNODE) GO TO 50
        !          7765:       STACK(IS+2) = LL * L
        !          7766:       K = NODE(L) + SYMLEN + 4
        !          7767:       STACK(IS+1) = IABS( LAT(K))
        !          7768:       IS = IS + 2
        !          7769:       GO TO 10
        !          7770:    50 SYSERR = .TRUE.
        !          7771:       CALL ERROR1(43H IN ASLEV, PATH LONGER THAN NUMBER OF NODES, 43)
        !          7772:       GO TO 30
        !          7773:       END
        !          7774: C XXXXXINVOKE.f
        !          7775:       SUBROUTINE INVOKE
        !          7776: C
        !          7777: C      PGM UNIT STEPS THROUGH NODES IN INVOCATION ORDER
        !          7778: C      PUSHING ACTUAL PROC ARGS DOWN LATTICE WHERE NECESSARY
        !          7779: C      AND READJUSTING LEVEL IF NECESSARY
        !          7780: C
        !          7781:       INTEGER PNODE, PLAT, PDSA, DSA, SYMLEN, PREF, REF, FIND, CHK1,
        !          7782:      *  ZERO(1), FINDND
        !          7783:       LOGICAL ERR, SYSERR, ABORT, OK, AOK
        !          7784:       COMMON /PARAMS/ I1, I2, I3, SYMLEN, I4, I5, I6
        !          7785:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !          7786:       COMMON /HEAD/ LNODE, PNODE, NODE(500)
        !          7787:       COMMON /SCR1/ LINODE, INODE(500)
        !          7788:       COMMON /GRAPH/ LLAT, PLAT, LAT(6000)
        !          7789:       COMMON /CTABL/ LDSA, PDSA, DSA(5000)
        !          7790:       COMMON /CREF/ LREF, PREF, REF(100)
        !          7791:       COMMON /FACTS/ NAME, NOST, ITYPE, IASF
        !          7792:       DATA ZERO(1)/0/
        !          7793: C      NC IS CURRENT NODE, NP IS PREVIOUS NODE PROCESSED
        !          7794:       NC = 0
        !          7795:    10 NP = NC
        !          7796:       OK = .TRUE.
        !          7797:       AOK = .TRUE.
        !          7798: C
        !          7799: C      SEARCH FOR NEXT NODE TO DO, NODE WITH LOWEST POSIT LEVEL IN INODE
        !          7800: C      UPON ENTRY TO INVOKE, SUPEROOT IS -1, ASFS AND BLOCK DATA
        !          7801: C      ARE -2. IF CANT FIND A POSITIVE LEVEL ARE DONE
        !          7802: C
        !          7803:       L = PNODE - 1
        !          7804:       DO 20 I=1,L
        !          7805:         IF (INODE(I).LT.0) GO TO 20
        !          7806:         NC = I
        !          7807:         GO TO 40
        !          7808:    20 CONTINUE
        !          7809:    30 RETURN
        !          7810:    40 J = NC
        !          7811:       DO 50 I=J,L
        !          7812:         IF (INODE(I).GE.0 .AND. INODE(I).LT.INODE(NC)) NC = I
        !          7813:    50 CONTINUE
        !          7814: C      READ IN SYMBOL TABLE FOR NODE(NC) AND POSITION REFS CORRECTLY
        !          7815:       CALL RDSYM(NC, NP)
        !          7816:    60 IF (INREF(I6)) 140, 140, 70
        !          7817: C      HAVE A REFERENCE TO PROCESS
        !          7818:    70 IF (IGATT1(REF(2),4).EQ.1) GO TO 80
        !          7819: C      PROCESSING A DIRECT REFERENCE
        !          7820: C      NEED ONLY PROCESS REF TEMPLATE IF ANY PROC ACTUAL ARGS IN REF
        !          7821:       L = REF(2)
        !          7822:       L = FINDND(DSA(L+4),K)
        !          7823:       CALL PROC(NODE(NC), L, K, AOK)
        !          7824:       IF (SYSERR .OR. ABORT) GO TO 30
        !          7825:       GO TO 60
        !          7826: C      PROCESSING AN INDIRECT REF
        !          7827:    80 K = NODE(NC) + SYMLEN + 5
        !          7828:       K = LAT(K)
        !          7829:       IF (K.EQ.0) GO TO 150
        !          7830: C      K PTS TO A TEMPLATE OF ACTUALS AT LAT(NODE(NC))
        !          7831: C      L GIVES REL POSIT AMONG PROC DUMMIES IN LAT(NODE(NC))
        !          7832: C      OF PROC DUMMY BEING CALLED
        !          7833:       L = REF(2)
        !          7834:       L = DSA(L+2)
        !          7835:       I = NODE(NC) + SYMLEN + 1
        !          7836:       I = LAT(I)
        !          7837:       IF (L.EQ.1) GO TO 100
        !          7838:       DO 90 M=2,L
        !          7839:         I = LAT(I+3)
        !          7840:    90 CONTINUE
        !          7841: C
        !          7842: C      I PTS TO DUMMY PROC ARG ENTRY IN LAT
        !          7843: C
        !          7844:   100 M = LAT(I+1) + K
        !          7845:       M = LAT(M)
        !          7846: C      M PTS TO ACTUAL SUBSTITUTABLE FOR I
        !          7847:       L = FIND(M)
        !          7848: C      RECURSION DUE TO INDIRECT REF COMPLETING THE LOOP
        !          7849:       IF (-1.NE.INODE(L)) GO TO 110
        !          7850:       ABORT = .TRUE.
        !          7851:       CALL ERROR2(26H RECURSIVE LOOP INVOLVING , 26, DSA(NAME+4), 1,1,0)
        !          7852:       CALL ERROR2(14H AND POSSIBLY , 14, LAT(M), 1, 0, 1)
        !          7853:       GO TO 30
        !          7854: C      NOTE NEED NOT WORRY ABOUT MISSING SUBPGM SINCE
        !          7855: C      THEN ITS LAT INDEX COULDNOT BE IN TEMPLATE
        !          7856:   110 IF (CHK1(NODE(NC),M).EQ.0) GO TO 130
        !          7857: C      PROCESSED A LEGAL INDIRET REF
        !          7858:       CALL SETPD(M, NODE(NC))
        !          7859:       IF (SYSERR) GO TO 30
        !          7860:       IF (-2.EQ.INODE(L) .OR. INODE(NC).LT.INODE(L)) GO TO 120
        !          7861:       INODE(L) = INODE(NC) + 1
        !          7862:       CALL ASLEV(L)
        !          7863:       IF (ABORT .OR. SYSERR) GO TO 30
        !          7864: C      LOOK FOR MORE ACTUALS
        !          7865:  120  CALL PROC(NODE(NC), M, L, AOK)
        !          7866:       IF (SYSERR .OR. ABORT) GO TO 30
        !          7867:   130 K = LAT(K) + K
        !          7868:       K = LAT(K)
        !          7869:       IF (K) 60, 60, 100
        !          7870: C      MARK CURRENT NODE DONE
        !          7871:   140 INODE(NC) = -1
        !          7872:       GO TO 10
        !          7873:   150 IF (.NOT.OK) GO TO 60
        !          7874:       K = NODE(NC)
        !          7875:       CALL ERROR2(20H NO ACTUAL PROCS IN ,20, LAT(K), 1, 1, 0)
        !          7876:       CALL ERROR2(28H CANNOT PROCESS FORMAL REFS , 28,
        !          7877:      *  ZERO, -3, 0, 1)
        !          7878:       OK = .FALSE.
        !          7879:       GO TO 60
        !          7880:       END
        !          7881: C XXXXXRDSYM.f
        !          7882:       SUBROUTINE RDSYM(IC, IP)
        !          7883: C
        !          7884: C      PGM UNIT RDSYM POSITIONS I4,I6 CORRECTLY AND INPUTS SYMBOL
        !          7885: C      TABLE OF PGM UNIT AT NODE(IC) WHEN LAST ONE READ WAS THAT OF NODE
        !          7886: C
        !          7887:       INTEGER SYMLEN, PDSA, PLAT, FINDND, PNODE, DSA
        !          7888:       LOGICAL INSYM, L
        !          7889:       COMMON /PARAMS/ I1, I2, I3, SYMLEN, I4, I5, I6
        !          7890:       COMMON /FACTS/ NAME, NOST, ITYP, IASF
        !          7891:       COMMON /CTABL/ LDSA, PDSA, DSA(5000)
        !          7892:       COMMON /GRAPH/ LLAT, PLAT, LAT(6000)
        !          7893:       COMMON /HEAD/ LNODE, PNODE, NODE(500)
        !          7894:       IF (IP.LT.IC) GO TO 10
        !          7895:       REWIND I4
        !          7896:       REWIND I6
        !          7897:  10   L = INSYM(I6,0)
        !          7898:       IF (FINDND(DSA(NAME+4),I).EQ.NODE(IC)) RETURN
        !          7899:    20 IF (INREF(I6).EQ.1) GO TO 20
        !          7900:       GO TO 10
        !          7901:       END
        !          7902: C XXXXXPROC.f
        !          7903:       SUBROUTINE PROC(IP, IM, IIM, OK)
        !          7904: C
        !          7905: C      P.U. AT LAT(IP) CALLS P.U. AT LAT(IM) (NODE(IIM))
        !          7906: C      PROC COLLECTS ACTUAL PROC TEMPLATE(S) FROM THE CALL IF IT CAN
        !          7907: C      CHECKS FOR MISSING SUBPGMS AND STORES TEMPLATES OFF PGM UNIT
        !          7908: C      AT LAT(IM), THEM PROC CALLS ASLEV TO READJUST LEVELS OF ACTUALS
        !          7909: C      SENT TO LAT(IM) VS LEVEL (IM)
        !          7910: C
        !          7911:       LOGICAL ERR, SYSERR, ABORT, OK
        !          7912:       INTEGER STACK, SYMLEN, PDSA, DSA, REF, PREF, PNODE, PLAT, FINDND,
        !          7913:      *    FIND, SS(120), KBR(1)
        !          7914:       COMMON /CEXPRS/ LSTACK, STACK(620)
        !          7915:       COMMON /PARAMS/ I1, I2, I3, SYMLEN, I4, I5, I6
        !          7916:       COMMON /CTABL/ LDSA, PDSA, DSA(5000)
        !          7917:       COMMON /CREF/ LREF, PREF, REF(100)
        !          7918:       COMMON /HEAD/ LNODE, PNODE, NODE(500)
        !          7919:       COMMON /SCR1/ LINODE, INODE(500)
        !          7920:       COMMON /GRAPH/ LLAT, PLAT, LAT(6000)
        !          7921:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !          7922:       EQUIVALENCE (SS(1),STACK(501))
        !          7923:       DATA KBR(1) /0/
        !          7924:       LSS = 501
        !          7925: C      ARE THERE ARGS IN THIS REF
        !          7926:       IF (REF(1).NE.0) GO TO 20
        !          7927:    10 RETURN
        !          7928: C      CYCLE THROUGH REF ARGS
        !          7929: C      JJ IS LAST ENTRY IN REF FOR ARGS
        !          7930: C      IS PTS TO FIRST FREE WD IN STACK
        !          7931: C      MAX IS 1 IF NO DUMMY PROCS IN REF, ELSE IS EQUAL TO THE
        !          7932: C      NUMBER OF ACTUAL PROCS SUBSTITUTABLE FOR THE DUMMY PROCS
        !          7933:    20 JJ = REF(1) + 4
        !          7934:       IS = 1
        !          7935:       MAX = 0
        !          7936:       DO 90 I=5,JJ,2
        !          7937: C      SKIP OVER EXPR AS ACTUAL ARGS AND ALL ACTUALS BUT PROC ARGS
        !          7938:         IF (REF(I).EQ.0) GO TO 90
        !          7939:         IF (REF(I+1).NE.6) GO TO 90
        !          7940: C      SEE IF ACTUAL ARG IS DUMMY PROC ARG AT LAT(IP)
        !          7941: C      OR ACTUAL PROCEDURE
        !          7942:         IF (IGATT1(REF(I),4).EQ.1) GO TO 40
        !          7943: C      HAVE AN ACTUAL PROCEDURE
        !          7944:         L = REF(I)
        !          7945:         L = FINDND(DSA(L+4),K)
        !          7946:         IF (L.NE.0) GO TO 30
        !          7947: C      IF, AS GATHERING ACTUAL PROCS MATCHED TO DUMMY PROC ARGS
        !          7948: C      PROC FINDS A MISSING SUBPROGM, PROCESSING OF THIS REF CEASES
        !          7949:       L = REF(I)
        !          7950:       CALL ERROR2(20H MISSING SUBPROGRAM , 20, DSA(L+4), 1, 1, 0)
        !          7951:       CALL ERROR2(1H1, 0, REF(3), -1, 0, 1)
        !          7952:         GO TO 10
        !          7953:    30   IF (IS+2.GT.LSS) GO TO 200
        !          7954: C      2 WD STACK ENTRY FOR AN ACTUAL PROC AS AN ACTUAL ARG
        !          7955: C      IS FIRST WD - 1, 2ND WD - LAT INDEX OF ACTUAL PROC
        !          7956:         STACK(IS) = 1
        !          7957:         STACK(IS+1) = L
        !          7958:         IF (MAX.EQ.0) MAX = 1
        !          7959:         IS = IS + 2
        !          7960:         GO TO 90
        !          7961: C      HAVE A DUMMY PROC CHECK OUT NO OF ACTUALS
        !          7962: C      MATCHED TO IT AND STACK THOSE WITH COUNTER ON TOP
        !          7963:    40   L = IP + SYMLEN + 5
        !          7964:         L = LAT(L)
        !          7965:         IF (L.NE.0) GO TO 50
        !          7966:       IF (.NOT.OK) GOTO 10
        !          7967:       CALL ERROR2(26H MISSING ACTUAL PROCEDURES ,26, KBR(1), -1,1,1)
        !          7968:       OK = .FALSE.
        !          7969:         GO TO 10
        !          7970: C      COLLECT ACTUALS CORRESPONDING TO THIS PROC ARG
        !          7971: C      K IS REL POSIT OF PROC ARG AMONG ALL ARGS AT LAT(IP)
        !          7972: C      L PTS TO TEMPLATE AT LAT(IP)
        !          7973:    50   K = REF(I)
        !          7974:         K = DSA(K+2)
        !          7975: C     J POINTS TO FIRST ELEMENT ON ARGLIST
        !          7976:         J = IP + SYMLEN + 1
        !          7977:         J = LAT(J)
        !          7978:         IF (K.LE.1) GO TO 70
        !          7979:         DO 60 LL=2,K
        !          7980:           J = LAT(J+3)
        !          7981:    60   CONTINUE
        !          7982: C      K IS REL POSIT OF PROC ARG AMONG PROC ARGS IN LAT(IP)
        !          7983: C      THAT IS IT IS OFFSET NECESS TO READ CORRESP ACTUAL
        !          7984: C      PROCS OFF TEMPLATES AT LAT(IP)
        !          7985: C     J POINTS TO DUMMY PROC ARG ENTRY IN LAT (IP)
        !          7986:    70   K = LAT(J+1)
        !          7987:         IF (IS+1.GE.LSS) GO TO 200
        !          7988: C      J POINTS TO POSITION IN STACK OF COUNT OF HOW MANY
        !          7989: C      ACTUALS ARE MATCHED TO THIS DUMMY
        !          7990:         J = IS
        !          7991:         STACK(IS) = 0
        !          7992:         IS = IS + 1
        !          7993:    80   IF (IS+1.GE.LSS) GO TO 200
        !          7994: C      N WD STACK ENTRY FOR DUMMY PROC ARGS USED AS ACTUAL ARGS IN REF
        !          7995: C      WD 1 CONTAINS NO OF ACTUAL PROCS MATCHED TO THE DUMMY
        !          7996: C      WDS 2 - N CONTAIN THE LAT INDICES OF EACH ACTUAL PROC
        !          7997:         STACK(J) = STACK(J) + 1
        !          7998:         LL = K + L
        !          7999:         STACK(IS) = LAT(LL)
        !          8000:         IS = IS + 1
        !          8001:         L = LAT(L) + L
        !          8002:         L = LAT(L)
        !          8003:         IF (L.NE.0) GO TO 80
        !          8004:         IF (STACK(J).GT.MAX) MAX = STACK(J)
        !          8005:    90 CONTINUE
        !          8006: C      HAVE COLLECTED ALL PROC ACTUALS CORRESP TO THE PROC
        !          8007: C      ARGS IN THE REF, NOTE MAX IS NO OF TEMPLATES RESULTING FROM
        !          8008: C      THIS REF TO BE PASSED TO LAT(IM) AS LONG AS THEIR DUPS
        !          8009: C      ARE NOT THERE ALREADY
        !          8010: C      BUILD EACH TEMPLATE IN LOOP AND CHECK FOR DUPLICATION
        !          8011: C      IF NOT THERE COPY INTO LAT OFF LAT(IM) AND CHECK LEVEL OF ACTUALS
        !          8012: C      PASSED DOWN VS LEVEL OF LAT(IM)
        !          8013:       IF (MAX.EQ.0) GO TO 10
        !          8014:       DO 190 I=1,MAX
        !          8015: C      CREATE PROC INDICES PORTION OF TEMPLATE IN SS
        !          8016:         K = 1
        !          8017:         ISS = 1
        !          8018:   100   IF (K.GE.IS) GO TO 110
        !          8019:         L = 1
        !          8020:         IF (STACK(K).GT.1) L = I
        !          8021:         IF (ISS+1.GE.120) GO TO 200
        !          8022:         J = K + L
        !          8023:         SS(ISS) = STACK(J)
        !          8024:         K = K + STACK(K) + 1
        !          8025:         ISS = ISS + 1
        !          8026:         GO TO 100
        !          8027: C      HAVE TEMPLATE IN SS(1) THROUGH SS(ISS-1)
        !          8028: C      SEE IF IT HAS A DUPLICATE AT LAT(IM)
        !          8029:   110   K = IM + SYMLEN + 5
        !          8030:         K = LAT(K)
        !          8031:         IST = ISS - 1
        !          8032:   120   IF (K.EQ.0) GO TO 150
        !          8033:         DO 130 L=1,IST
        !          8034:           J = K + L
        !          8035:           IF (LAT(J).NE.SS(L)) GO TO 140
        !          8036:   130   CONTINUE
        !          8037: C      FOUND DUPLICATE
        !          8038:         GO TO 190
        !          8039: C      HAVENT FOUND A DUPLICATE YET
        !          8040: C      SEE IF THERE ARE MORE TEMPLATES TO COMPARE
        !          8041:   140   K = LAT(K) + K
        !          8042:         K = LAT(K)
        !          8043:         GO TO 120
        !          8044: C      NOT A DUPLICATE WILL ADD IT ON
        !          8045:   150   IF (PLAT+IST+2.LE.LLAT) GO TO 160
        !          8046:         CALL ERROR1(32H IN PROC, TABLE OVERFLOW OF LAT , 32)
        !          8047:         SYSERR = .TRUE.
        !          8048:         GO TO 10
        !          8049: C      MAKE AN ENTRY CONSISTING OF 1ST WORD - NO OF PROCS+1, SUBSEQUENT
        !          8050: C      WORDS - PROCS LAT INDICES, LAST WORD - PTR
        !          8051: C      TO NEXT SUCH TEMPLATE
        !          8052:   160   DO 170 L=1,IST
        !          8053:           J = PLAT + L
        !          8054:           LAT(J) = SS(L)
        !          8055:   170   CONTINUE
        !          8056:         LAT(PLAT) = IST + 1
        !          8057:         L = PLAT
        !          8058:         PLAT = PLAT + IST + 2
        !          8059:         J = IM + SYMLEN + 5
        !          8060:         LAT(PLAT-1) = LAT(J)
        !          8061:         LAT(J) = L
        !          8062: C      CHECK LEVELS
        !          8063:         DO 180 L=1,IST
        !          8064:           J = FIND(SS(L))
        !          8065: C     FIND HEAD OF GREEN LINKS LIST AT LAT(IM)
        !          8066:       JR = IM + SYMLEN + 3
        !          8067:       JLR = -SS(L)
        !          8068:  210  IF(LAT(JR+1) .LE. 0) GOTO 220
        !          8069:       JR = LAT(JR+1)
        !          8070:       GOTO 210
        !          8071: C     HAVE TOP OF GREEN LINKS LIST AT LAT(JR)
        !          8072:  220  IF(LAT(JR+1) .EQ. 0) GOTO 230
        !          8073:       JR = IABS( LAT(JR+1) )
        !          8074: C     LOOK FOR DUPLICATE ENTRY ON GREEN LINKS LIST
        !          8075:       IF(LAT(JR) .EQ. JLR) GOTO 240
        !          8076:       GOTO 220
        !          8077: C     ADD ON ENTRY TO GREEN LINKS LIST
        !          8078:  230  IF(PLAT + 2 .GT. LLAT) GOTO 250
        !          8079:       LAT(PLAT) = JLR
        !          8080:       LAT(PLAT+1) = 0
        !          8081:       LAT(JR+1) = -PLAT
        !          8082:       PLAT = PLAT+2
        !          8083:  240  IF((-1).EQ.INODE(J) .OR. (-2).EQ.INODE(J) .OR.
        !          8084:      *  INODE(J).GT.INODE(IIM)) GOTO 180
        !          8085:           INODE(J) = INODE(IIM) + 1
        !          8086:       CALL ASLEV (-J)
        !          8087:           IF (SYSERR .OR. ABORT) GO TO 10
        !          8088:   180   CONTINUE
        !          8089:   190 CONTINUE
        !          8090:       GO TO 10
        !          8091:   200 SYSERR = .TRUE.
        !          8092:       CALL ERROR1(33H IN PROC, TABLE OVERFLOW OF STACK, 33)
        !          8093:       GO TO 10
        !          8094:  250  SYSERR = .TRUE.
        !          8095:       CALL ERROR1(31H IN PROC, TABLE OVERFLOW OF LAT,31)
        !          8096:       GOTO 10
        !          8097:       END
        !          8098: C XXXXXCHKALL.f
        !          8099:       SUBROUTINE CHKALL
        !          8100: C
        !          8101: C      CHKALL READS IN REFS FROM OUTUT4 AND CHECKS THEM
        !          8102: C      EXPANDS ALL INDIRECTS AND CHECKS THEM, IF ALL OK
        !          8103: C      WRITES THE EXPANDED VERSION OUT ON OUTUT3
        !          8104: C     TEMPLATE WRITTEN OUT CONSISTS OF
        !          8105: C     PREF - NO OF WORDS TO FOLLOW
        !          8106: C     IBR - CODE .LT.3 TO SHOW OK REF
        !          8107: C     REF(1) - 2*NO OF ARGS
        !          8108: C     IJR - LAT INDEX OF CALLED P.U.
        !          8109: C     REF(3) - STMT NO OF REF
        !          8110: C     REF(4) - CODE 0-SUBR, 1-FCN
        !          8111: C     REF(5 -) - ARG ENTRIES
        !          8112: C      FOR DIRECT REFS  IF OK WRITES THE DIRECT REF OUT ON OUTUT3
        !          8113: C      CHKALL WRITES END OF REFS ON OUTUT3 BEFORE RETURNING
        !          8114: C
        !          8115:       INTEGER OUTUT3, OUTUT4, DSA, PDSA, REF, PREF, PLAT, SYMLEN, FINDND
        !          8116:       INTEGER CHK1, CHK2
        !          8117:       LOGICAL ERR, SYSERR, ABORT, QP2, QBR
        !          8118:       COMMON /PARAMS/ I1, I2, I3, SYMLEN, I4, OUTUT3, OUTUT4
        !          8119:       COMMON /CTABL/ LDSA, PDSA, DSA(5000)
        !          8120:       COMMON /CREF/ LREF, PREF, REF(100)
        !          8121:       COMMON /GRAPH/ LLAT, PLAT, LAT(6000)
        !          8122:       COMMON /DETECT/ ERR, SYSERR, ABORT
        !          8123:       COMMON /FACTS/ NAME, NOST, ITYP, IASF
        !          8124:       COMMON /PASS/ QP2, QBR
        !          8125:       DATA IBR /1/, JBR /3/
        !          8126: C      IJK IS CALLING PGM UNIT; IJR IS PGM UNIT CALLED
        !          8127:       IJK = FINDND(DSA(NAME+4),L1)
        !          8128:    10 IF (INREF(OUTUT4)) 20, 20, 30
        !          8129: C      WRITE END OF REFS AND RETURN
        !          8130:    20 WRITE (OUTUT3) IBR, JBR, IBR
        !          8131:       QBR = .FALSE.
        !          8132:       RETURN
        !          8133: C      CHECK IF REF INDIRECT OR DIRECT
        !          8134:    30 IF (IGATT1(REF(2),4).EQ.1) GO TO 40
        !          8135: C      HAVE A DIRECT REF
        !          8136:       IJR = REF(2)
        !          8137:       IJR = FINDND(DSA(IJR+4),L1)
        !          8138:       IBAR = CHK2(IJK,IJR)
        !          8139:       IF (SYSERR) GO TO 20
        !          8140:       IF (IBAR.EQ.1) WRITE (OUTUT3) PREF, IBR, REF(1), IJR,
        !          8141:      *    (REF(L),L=3,PREF)
        !          8142:       GO TO 10
        !          8143: C      HAVE AN INDIRECT REF
        !          8144:    40 K = IJK + SYMLEN + 5
        !          8145:       K = LAT(K)
        !          8146: C      NOTE HAVE FLAGGED THIS ERROR OF NO ACTUALS AT LAT(IM)
        !          8147: C      BEFORE IN PROC SO NOW SKIP OVER REF
        !          8148:       IF (K.EQ.0) GO TO 10
        !          8149: C      K POINTS TO ACTUALS TEMPLATE AT CALLING PGM
        !          8150:       L = REF(2)
        !          8151:       L = DSA(L+2)
        !          8152:       J = IJK + SYMLEN + 1
        !          8153:       J = LAT(J)
        !          8154:       IF (L.LE.1) GO TO 60
        !          8155:       DO 50 LL=2,L
        !          8156:         J = LAT(J+3)
        !          8157:    50 CONTINUE
        !          8158:    60 L = LAT(J+1)
        !          8159: C      L IS OFFSET IN ACTUALS TEMPLATE OF ACTUALS
        !          8160: C      CORRESP TO THIS DUMMY
        !          8161:    70 J = K + L
        !          8162:       IJR = LAT(J)
        !          8163:       QBR = .TRUE.
        !          8164:       IF (CHK1(IJK,IJR).NE.1) GO TO 80
        !          8165:       IBAR = CHK2(IJK,IJR)
        !          8166:       IF (SYSERR) GO TO 20
        !          8167:       IF (IBAR.EQ.1) WRITE (OUTUT3) PREF, IBR, REF(1), IJR,
        !          8168:      *    (REF(L),L=3,PREF)
        !          8169:    80 QBR = .FALSE.
        !          8170:       K = LAT(K) + K
        !          8171:       K = LAT(K)
        !          8172:       IF (K) 10, 10, 70
        !          8173:       END
        !          8174: C XXXXXCHK3.f
        !          8175:       SUBROUTINE CHK3(IDUM, IACT, IDUM8, IACT8, IE, R, NO)
        !          8176: C
        !          8177: C     CHECKS PROC ARGUMENTS FOR PROPER USAGE AND TYPE
        !          8178: C     IDUM LAT INDEX DUMY PROC ARG
        !          8179: C     IACT LAT INDEX ACTUAL PROC
        !          8180: C     IDUM8 USAGE DUMMY FROM DSA ATTRIBUTES
        !          8181: C     IACT8 USAGE ACTUAL FROM LAT ENTRY
        !          8182: C     IE CALLED RTNE
        !          8183: C     R STMT NO OF CALL
        !          8184: C     NO CONTAINS THE NUMBER OF PARAMETER BEING CHECKED BY THIS CALL
        !          8185: C
        !          8186:       INTEGER PLAT, R(1), SYMLEN, NO(1)
        !          8187:       COMMON /PARAMS/ I1, I2, I3, SYMLEN, I4, I5, I6
        !          8188:       COMMON /GRAPH/ LLAT, PLAT, LAT(6000)
        !          8189: C     SEPARATE OUT EXTERNAL ENTITIES
        !          8190:       IF (IDUM8.NE.13) GO TO 20
        !          8191:       L = IGATT2(IDUM,1)/8
        !          8192:       IF (L.NE.1) GO TO 50
        !          8193: C     FURTHER CHECK THAT EPLICITLY TYPED EXTERNAL ENTITIES
        !          8194: C     MATCH FCNS
        !          8195:       IF (IACT8.NE.1 .AND. IACT8.NE.6) GO TO 30
        !          8196: C     CHECK FCN HAS SAME TYPE ACROSS REF BNDRY
        !          8197:    10 L = IACT + SYMLEN + 6
        !          8198:       IF (MOD(IGATT2(IDUM,1),8).EQ.LAT(L)/8) GO TO 50
        !          8199:       CALL ERROR2(40H INCONSISTENT FCN TYPES IN REFERENCE TO , 40,
        !          8200:      *  LAT(IE), 1, 1, 0)
        !          8201:       CALL ERROR2(1H1, 0, R(1), -1, 0, 1)
        !          8202:       GO TO 50
        !          8203: C     CHECK SUBROUTINES
        !          8204:    20 IF (IDUM8.EQ.6 .AND. IACT8.EQ.0) GO TO 50
        !          8205: C     CHECK OUT FCNS
        !          8206:       IF (IDUM8.EQ.5 .AND. IACT8.EQ.1) GO TO 10
        !          8207: C     SEPARATE OUT BASIC EXTERNALS BECAUSE THEY ARE CONSIDERED
        !          8208: C     TYPED BY THE FORTRAN.
        !          8209:       IF (IDUM8.EQ.5 .AND. IACT8.EQ.6) GO TO 40
        !          8210:    30 CALL ERROR2(
        !          8211:      *  50H INCOMPATIBLE PROCEDURE PARAMETER ASSOCIATED WITH ,50,
        !          8212:      *  NO, -2, 1, 0)
        !          8213:       CALL ERROR2(17H IN REFERENCE TO ,17, LAT(IE), 1, 0, 0)
        !          8214:       CALL ERROR2(1H1, 0, R(1), -1, 0, 1)
        !          8215:       GO TO 50
        !          8216: C     CHECK BASIC EXTER HAS NOT BEEN EXPLICITLY TYPED
        !          8217: C     OR ELSE IT HAS TO AGREE WITH THE ACTUAL TYPE
        !          8218:    40 L = IACT + SYMLEN + 6
        !          8219:       IF (LAT(L)/8.EQ.1) GO TO 10
        !          8220:    50 RETURN
        !          8221:       END
        !          8222: combine done

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.