home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / CPM / MISC / PLM80.ARK / PLM81.FOR < prev    next >
Text File  |  1989-04-05  |  130KB  |  3,656 lines

  1. C***********************************************************************
  2. C
  3. C         8 0 8 0   P L / M   C O M P I L E R ,   P A S S - 1
  4. C                                 PLM81
  5. C                              VERSION 2.0
  6. C                             JANUARY, 1975
  7. C
  8. C                          COPYRIGHT (C) 1975
  9. C                          INTEL CORPORATION
  10. C                          3065 BOWERS AVENUE
  11. C                          SANTA CLARA, CALIFORNIA 95051
  12. C
  13. C  MODIFIED BY JEFF OGDEN (UM), DECEMBER 1977
  14. C
  15. C***********************************************************************
  16. C
  17. C
  18. C
  19. C            P A S S - 1    E R R O R   M E S S A G E S
  20. C
  21. C  ERROR                           MESSAGE
  22. C  NUMBER
  23. C  ------  -------------------------------------------------------------
  24. C     1    THE SYMBOLS PRINTED BELOW HAVE BEEN USED IN THE CURRENT BLOCK
  25. C          BUT DO NOT APPEAR IN A DECLARE STATEMENT, OR LABEL APPEARS IN
  26. C          A GO TO STATEMENT BUT DOES NOT APPEAR IN THE BLOCK.
  27. C
  28. C     2    PASS-1 COMPILER SYMBOL TABLE OVERFLOW.  TOO MANY SYMBOLS IN
  29. C          THE SOURCE PROGRAM.  EITHER REDUCE THE NUMBER OF VARIABLES IN
  30. C          THE PROGRAM, OR RE-COMPILE PASS-1 WITH A LARGER SYMBOL TABLE.
  31. C
  32. C     3    INVALID PL/M STATEMENT.  THE PAIR OF SYMBOLS PRINTED BELOW
  33. C          CANNOT APPEAR TOGETHER IN A VALID PL/M STATEMENT (THIS ERROR
  34. C          MAY HAVE BEEN CAUSED BE A PREVIOUS ERROR IN THE PROGRAM).
  35. C
  36. C     4    INVALID PL/M STATEMENT.  THE STATEMENT IS IMPROPERLY FORMED--
  37. C          THE PARSE TO THIS POINT FOLLOWS (THIS MAY HAVE OCCURRED BE-
  38. C          CAUSE OF A PREVIOUS PROGRAM ERROR).
  39. C
  40. C     5    PASS-1 PARSE STACK OVERFLOW.  THE PROGRAM STATEMENTS ARE
  41. C          RECURSIVELY NESTED TOO DEEPLY.  EITHER SIMPLIFY THE PROGRAM
  42. C          STRUCTURE, OR RE-COMPILE PASS-1 WITH A LARGER PARSE STACK.
  43. C
  44. C     6    NUMBER CONVERSION ERROR.  THE NUMBER EITHER EXCEEDS 65535 OR
  45. C          CONTAINS DIGITS WHICH CONFLICT WITH THE RADIX INDICATOR.
  46. C
  47. C     7    PASS-1 TABLE OVERFLOW.  PROBABLE CAUSE IS A CONSTANT STRING
  48. C          WHICH IS TOO LONG.  IF SO, THE STRING SHOULD BE WRITTEN AS A
  49. C          SEQUENCE OF SHORTER STRINGS, SEPARATED BY COMMAS.  OTHERWISE,
  50. C          RE-COMPILE PASS-1 WITH A LARGER VARC TABLE.
  51. C
  52. C     8    MACRO TABLE OVERFLOW.  TOO MANY LITERALLY DECLARATIONS.
  53. C          EITHER REDUCE THE NUMBER OF LITERALLY DECLARATIONS, OR RE-
  54. C          COMPILE PASS-1 WITH A LARGER 'MACROS' TABLE.
  55. C
  56. C     9    INVALID CONSTANT IN INITIAL, DATA, OR IN-LINE CONSTANT.
  57. C          PRECISION OF CONSTANT EXCEEDS TWO BYTES (MAY BE INTERNAL
  58. C          PASS-1 COMPILER ERROR).
  59. C
  60. C    10    INVALID PROGRAM.  PROGRAM SYNTAX INCORRECT FOR TERMINATION
  61. C          OF PROGRAM.  MAY BE DUE TO PREVIOUS ERRORS WHICH OCCURRED
  62. C          WITHIN THE PROGRAM.
  63. C
  64. C    11    INVALID PLACEMENT OF A PROCEDURE DECLARATION WITHIN THE PL/M
  65. C          PROGRAM.  PROCEDURES MAY ONLY BE DECLARED IN THE OUTER BLOCK
  66. C          (MAIN PART OF THE PROGRAM) OR WITHIN DO-END GROUPS (NOT
  67. C          ITERATIVE DO'S, DO-WHILE'S, OR DO-CASE'S).
  68. C
  69. C    12    IMPROPER USE OF IDENTIFIER FOLLOWING AN END STATEMENT.
  70. C          IDENTIFIERS CAN ONLY BE USED IN THIS WAY TO CLOSE A PROCEDURE
  71. C          DEFINITION.
  72. C
  73. C    13    IDENTIFIER FOLLOWING AN END STATEMENT DOES NOT MATCH THE NAME
  74. C          OF THE PROCEDURE WHICH IT CLOSES.
  75. C
  76. C    14    DUPLICATE FORMAL PARAMETER NAME IN A PROCEDURE HEADING.
  77. C
  78. C    15    IDENTIFIER FOLLOWING AN END STATEMENT CANNOT BE FOUND IN THE
  79. C          PROGRAM.
  80. C
  81. C    16    DUPLICATE LABEL DEFINITION AT THE SAME BLOCK LEVEL.
  82. C
  83. C    17    NUMERIC LABEL EXCEEDS CPU ADDRESSING SPACE.
  84. C
  85. C    18    INVALID CALL STATEMENT.  THE NAME FOLLOWING THE CALL IS NOT
  86. C          A PROCEDURE.
  87. C
  88. C    19    INVALID DESTINATION IN A GO TO.  THE VALUE MUST BE A LABEL
  89. C          OR SIMPLE VARIABLE.
  90. C
  91. C    20    MACRO TABLE OVERFLOW (SEE ERROR 8 ABOVE).
  92. C
  93. C    21    DUPLICATE VARIABLE OR LABEL DEFINITION.
  94. C
  95. C    22    VARIABLE WHICH APPEARS IN A DATA DECLARATION HAS BEEN PRE-
  96. C          VIOUSLY DECLARED IN THIS BLOCK
  97. C
  98. C    23    PASS-1 SYMBOL TABLE OVERFLOW (SEE ERROR 2 ABOVE).
  99. C
  100. C    24    INVALID USE OF AN IDENTIFIER AS A VARIABLE NAME.
  101. C
  102. C    25    PASS-1 SYMBOL TABLE OVERFLOW (SEE ERROR 2 ABOVE).
  103. C
  104. C    26    IMPROPERLY FORMED BASED VARIABLE DECLARATION.  THE FORM IS
  105. C          I BASED J, WHERE I IS AN IDENTIFIER NOT PREVIOUSLY DECLARED
  106. C          IN THIS BLOCK, AND J IS AN ADDRESS VARIABLE.
  107. C
  108. C    27    SYMBOL TABLE OVERFLOW IN PASS-1 (SEE ERROR 2 ABOVE).
  109. C
  110. C    28    INVALID ADDRESS REFERENCE.  THE DOT OPERATOR MAY ONLY
  111. C          PRECEDE SIMPLE AND SUBSCRIPTED VARIABLES IN THIS CONTEXT.
  112. C
  113. C    29    UNDECLARED VARIABLE.  THE VARIABLE MUST APPEAR IN A DECLARE
  114. C          STATEMENT BEFORE ITS USE.
  115. C
  116. C    30    SUBSCRIPTED VARIABLE OR PROCEDURE CALL REFERENCES AN UN-
  117. C          DECLARED IDENTIFIER.  THE VARIABLE OR PROCEDURE MUST BE
  118. C          DECLARED BEFORE IT IS USED.
  119. C
  120. C    31    THE IDENTIFIER IS IMPROPERLY USED AS A PROCEDURE OR SUB-
  121. C          SCRIPTED VARIABLE.
  122. C
  123. C    32    TOO MANY SUBSCRIPTS IN A SUBSCRIPTED VARIABLE REFERENCE.
  124. C          PL/M ALLOWS ONLY ONE SUBSCRIPT.
  125. C
  126. C    33    ITERATIVE DO INDEX IS INVALID. IN THE FORM 'DO I = E1 TO E2'
  127. C          THE VARIABLE I MUST BE SIMPLE (UNSUBSCRIPTED).
  128. C
  129. C    34    ATTEMPT TO COMPLEMENT A $ CONTROL TOGGLE WHERE THE TOGGLE
  130. C          CURRENTLY HAS A VALUE OTHER THAN 0 OR 1.  USE THE '= N'
  131. C          OPTION FOLLOWING THE TOGGLE TO AVOID THIS ERROR.
  132. C
  133. C    35    INPUT FILE NUMBER STACK OVERFLOW.  RE-COMPILE PASS-1 WITH
  134. C          A LARGER INSTK TABLE.
  135. C
  136. C    36    TOO MANY BLOCK LEVELS IN THE PL/M PROGRAM.  EITHER SIMPLIFY
  137. C          YOUR PROGRAM (30 BLOCK LEVELS ARE CURRENTLY ALLOWED) OR
  138. C          RE-COMPILE PASS-1 WITH A LARGER BLOCK TABLE.
  139. C
  140. C     37   THE NUMBER OF ACTUAL PARAMETERS IN THE CALLING SEQUENCE
  141. C          IS GREATER THAN THE NUMBER OF FORMAL PARAMETERS DECLARED
  142. C          FOR THIS PROCEDURE.
  143. C
  144. C     38   THE NUMBER OF ACTUAL PARAMETERS IN THE CALLING SEQUENCE
  145. C          IS LESS THAN THE NUMBER OF FORMAL PARAMETERS DECLARED
  146. C          FOR THIS PROCEDURE.
  147. C
  148. C     39   INVALID INTERRUPT NUMBER (MUST BE BETWEEN 0 AND 7)
  149. C
  150. C     40   DUPLICATE INTERRUPT PROCEDURE NUMBER.  A PROCEDURE
  151. C          HAS BEEN PREVIOUSLY SPECIFIED WITH AN IDENTICAL
  152. C          INTERRUPT ATTRIBUTE.
  153. C
  154. C
  155. C     41   PROCEDURE APPEARS ON LEFT-HAND-SIDE OF AN ASSIGNMENT.
  156. C
  157. C     42   ATTEMPTED 'CALL' OF A TYPED PROCEDURE.
  158. C
  159. C     43   ATTEMPTED USE OF AN UNTYPED PROCEDURE AS A FUNCTION
  160. C          OR A VARIABLE.
  161. C
  162. C
  163. C     44   THIS PROCEDURE IS UNTYPED AND SHOULD NOT RETURN A VALUE.
  164. C
  165. C     45   THIS PROCEDURE IS TYPED AND SHOULD RETURN A VALUE.
  166. C
  167. C     46   'RETURN' IS INVALID OUTSIDE A PROCEDURE DEFINITION.
  168. C
  169. C     47   ILLEGAL USE OF A LABEL AS AN IDENTIFIER.
  170. C
  171. C  ------  -------------------------------------------------------------
  172. C              I M P L E M E N T A T I O N    N O T E S
  173. C              - - - - - - - - - - - - - -    - - - - -
  174. C    THE PL/M COMPILER IS INTENDED TO BE WRITTEN IN ANSI STANDARD
  175. C    FORTRAN - IV, AND THUS IT SHOULD BE POSSIBLE TO COMPILE AND
  176. C    EXECUTE THIS PROGRAM ON ANY MACHINE WHICH SUPPORTS THIS FORTRAN
  177. C    STANDARD.  BOTH PASS-1 AND PASS-2, HOWEVER, ASSUME THE HOST
  178. C    MACHINE WORD SIZE IS AT LEAST 31 BITS, EXCLUDING THE SIGN BIT
  179. C    (I.E., 32 BITS IF THE SIGN IS INCLUDED).
  180. C
  181. C    THE IMPLEMENTOR MAY FIND IT NECESSARY TO CHANGE THE SOURCE PROGRAM
  182. C    IN ORDER TO ACCOUNT FOR SYSTEM DEPENDENCIES.  THESE CHANGES ARE
  183. C    AS FOLLOWS
  184. C
  185. C    1)   THE FORTRAN LOGICAL UNIT NUMBERS FOR VARIOUS DEVICES
  186. C         MAY HAVE TO BE CHANGED IN THE 'GNC' AND 'WRITEL' SUBROU-
  187. C         TINES (SEE THE FILE DEFINITIONS BELOW).
  188. C
  189. C     2)   THE HOST MACHINE MAY NOT HAVE THE PL/M 52 CHARACTER SET
  190. C           0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ$=./()+-'*,<>:;
  191. C         (THE LAST 15 SPECIAL CHARACTERS ARE
  192. C         DOLLAR,  EQUAL,  PERIOD,  SLASH, LEFT PAREN,
  193. C         RIGHT PAREN, PLUS,   MINUS,  QUOTE, ASTERISK,
  194. C         COMMA, LESS-THAN, GREATER-THAN, COLON, SEMI-COLON)
  195. C         IN THIS CASE, IT IS NECESSARY TO CHANGE THE 'OTRAN' VECTOR IN
  196. C         BLOCK DATA TO A CHARACTER SET WHICH THE HOST MACHINE SUPPORTS
  197. C
  198. C     3)   THE COMPUTED GO TO IN 'SYNTH' MAY BE TOO LONG FOR SOME
  199. C         COMPILERS.  IF YOU GET A COMPILATION ERROR, BREAK THE
  200. C         'GO TO' INTO TWO SECTIONS.
  201. C
  202. C     4)  THE HOST FORTRAN SYSTEM MAY HAVE A LIMITATION ON THE NUMBER
  203. C         OF CONTIGUOUS COMMENT RECORDS (E.G. S/360 LEVEL G). IF SO,
  204. C         INTERSPERSE THE DECLARATION STATEMENTS INTEGER I1000, INTEGER
  205. C         I1001, ETC., AS NECESSARY TO BREAK UP THE LENGTH OF COMMENTS.
  206. C         THE SYMBOLS I1XXX ARE RESERVED FOR THIS PURPOSE.
  207. C
  208. C    THERE ARE A NUMBER OF COMPILER PARAMETERS WHICH MAY HAVE TO
  209. C    BE CHANGED FOR YOUR INSTALLATION.  THESE PARAMETERS ARE DEFINED
  210. C    BELOW (SEE 'SCANNER COMMANDS'), AND THE CORRESPONDING DEFAULT
  211. C    VALUES ARE SET FOLLOWING THEIR DEFINITION.  FOR EXAMPLE, THE
  212. C                  $RIGHTMARGIN = I
  213. C    PARAMETER DETERMINES THE RIGHT MARGIN OF THE INPUT SOURCE LINE.
  214. C    THE PARAMETER IS SET EXTERNALLY BY A SINGLE LINE STARTING WITH
  215. C    '$R' IN COLUMNS ONE AND TWO (THE REMAINING CHARACTERS UP TO
  216. C    THE '=' ARE IGNORED).  THE INTERNAL COMPILER REPRESENTATION
  217. C    OF THE CHARACTER 'R' IS 29 (SEE CHARACTER CODES BELOW), AND THUS
  218. C    THE VALUE OF THE $RIGHTMARGIN PARAMETER CORRESPONDS TO ELEMENT 29
  219. C    OF THE 'CONTRL' VECTOR.
  220. C
  221. C     1)  THE PARAMETERS $T, $P, $W, $I, $O, AND $R
  222. C        CONTROL THE OPERATING MODE OF PL/M.  FOR BATCH PROCESSING,
  223. C        ASSUMING 120 CHARACTER (OR LARGER) PRINT LINE AND 80 CHARAC-
  224. C        TER CARD IMAGE, THE PARAMETERS SHOULD DEFAULT AS FOLLOWS
  225. C                $TERMINAL   =  0
  226. C                $PRINT      =  1
  227. C                $WIDTH      = 120
  228. C                $INPUT      =  2
  229. C                $OUTPUT     =  2
  230. C                $RIGHTMARGIN= 80
  231. C        NOTE THAT IT MAY BE DESIRABLE TO LEAVE $R=72 TO ALLOW ROOM
  232. C        FOR AN 8-DIGIT SEQUENCE NUMBER IN COLUMNS 73-80 OF THE PL/M
  233. C        SOURCE CARD.
  234. C
  235. C    2)  FOR INTERACTIVE PROCESSING, ASSUMING A CONSOLE WITH WIDTH
  236. C        OF 72 CHARACTERS (E.G., A TTY), THESE PARAMETERS SHOULD
  237. C        DEFAULT AS FOLLOWS
  238. C                $TERMINAL   =  1
  239. C                $PRINT      =  1
  240. C                $WIDTH      = 72
  241. C                $INPUT      =  1
  242. C                $OUTPUT     =  1
  243. C                $RIGHTMARGIN= 72
  244. C
  245. C    3)  THE CHARACTERISTICS OF THE INTERMEDIATE LANGUAGE FILES
  246. C        PRODUCED BY PASS-1 ARE GOVERNED BY THE $J, $K, $U, $V, AND
  247. C        $Y PARAMETERS.  THESE PARAMETERS CORRESPOND TO THE DESTINATION
  248. C        AND WIDTH OF THE INTERMEDIATE CODE FILE ($J AND $K), AND
  249. C        DESTINATION AND WIDTH OF THE INTERMEDIATE SYMBOL TABLE ($U
  250. C        AND $V).  SOME FORTRAN SYSTEMS DELETE THE LEADING CHARACTER
  251. C        OF THE FILES PRODUCED BY OTHER FORTRAN PROGRAMS.  THE $Y
  252. C        PARAMETER CAN BE USED TO PAD EXTRA BLANKS AT THE BEGINNING OF
  253. C        THE INTERMEDIATE FILES IF THIS BECOMES A PROBLEM ON THE HOST
  254. C        SYSTEM.
  255. C
  256. C        UNDER NORMAL CIRCUMSTANCES, THESE PARAMETERS WILL NOT
  257. C        HAVE TO BE CHANGED.  IN ANY CASE, EXPERIMENT WITH VARIOUS
  258. C        VALUES OF THE $ PARAMETERS BY SETTING THEM EXTERNALLY BE-
  259. C        FORE ACTUALLY CHANGING THE DEFAULTS.
  260. C
  261. C    THE IMPLEMENTOR MAY ALSO WISH TO INCREASE OR DECREASE THE SIZE
  262. C    OF PASS-1 OR PASS-2 TABLES.  THE TABLES IN PASS-1 WHICH MAY BE
  263. C    CHANGED IN SIZE ARE 'MACROS' AND 'SYMBOL' WHICH CORRESPOND TO
  264. C    THE AREAS WHICH HOLD 'LITERALLY' DEFINITIONS AND PROGRAM SYMBOLS
  265. C    AND ATTRIBUTES, RESPECTIVELY.  IT IS IMPOSSIBLE TO PROVIDE AN
  266. C    EXACT FORMULA WHICH RELATES THE NUMBER OF SYMBOLS HELD BY EITHER
  267. C    OF THESE TABLES TO THE TABLE LENGTH, SINCE TABLE SPACE IS DY-
  268. C    NAMICALLY ALLOCATED ACCORDING TO SYMBOL NAME LENGTH AND NUMBER
  269. C    OF ATTRIBUTES REQUIRED FOR THE PARTICULAR SYMBOL.
  270. C
  271. C    1)  IN THE CASE OF THE MACROS TABLE, THE LENGTH IS RELATED TO THE
  272. C        TOTAL NUMBER OF CHARACTERS IN THE MACRO NAMES PLUS THE TOTAL
  273. C        NUMBER OF CHARACTERS IN THE MACRO DEFINITIONS - AT THE DEEP-
  274. C        EST BLOCK LEVEL DURING COMPILATION.  TO CHANGE THE MACRO
  275. C        TABLE SIZE, ALTER ALL OCCURRENCES OF
  276. C
  277. C                         MACROS(500)
  278. C
  279. C        IN EACH SUBROUTINE TO MACROS(N), WHERE N REPRESENTS THE NEW
  280. C        INTEGER CONSTANT SIZE.  IN ADDITION, THE 'DATA' STATEMENT
  281. C        BLOCK DATA (LAST PROGRAM SEGMENT) MUST BE CHANGED FOR THE
  282. C        MACRO PARAMETERS BASED UPON THE CONSTANT VALUE N TO
  283. C
  284. C           DATA MACROS /N*0/, CURMAC /N+1/, MAXMAC /N/,
  285. C          1    MACTOP /1/
  286. C
  287. C    2)  IF THE IMPLEMENTOR WISHES TO INCREASE OR DECREASE THE SIZE
  288. C        OF THE SYMBOL TABLE, THEN ALL OCCURRENCES OF
  289. C
  290. C                          SYMBOL(4000)
  291. C
  292. C        MUST BE CHANGED TO SYMBOL(M), WHERE M IS THE DESIRED INTEGER
  293. C        CONSTANT SIZE.  THE 'DATA' STATEMENTS FOR SYMBOL TABLE PARA-
  294. C        METERS MUST ALSO BE ALTERED AS DESCRIBED IN THE CORRESPONDING
  295. C        COMMENT IN BLOCK DATA.  IN PARTICULAR, THE LAST ITEM  OF
  296. C        THE DATA STATEMENT FOR 'SYMBOL' FILLS THE UNINITIALIZED POR-
  297. C        TION OF THE TABLE WITH ZEROES, AND HENCE MUST BE THE EVALUATION
  298. C        OF THE ELEMENT
  299. C                           (M-120)*0
  300. C
  301. C        (IT IS CURRENTLY (4000-120)*0 = 3880*0).  THE DATA STATEMENT
  302. C        FOR MAXSYM AND SYMABS MUST BE CHANGED TO INITIALIZE THESE
  303. C        VARIABLES TO THE VALUE M.
  304. C
  305. C    GOOD LUCK...
  306. C
  307. C
  308. C     F  I  L  E     D  E  F  I  N  I  T  I  O  N  S
  309. C            INPUT                        OUTPUT
  310. C
  311. C     FILE   FORTRAN  MTS      DEFAULT    FORTRAN  MTS      DEFAULT
  312. C     NUM    I/O UNIT I/O UNIT FDNAME     I/O UNIT I/O UNIT FDNAME
  313. C
  314. C      1        1     GUSER    *MSOURCE*    11     SERCOM   *MSINK*
  315. C      2        2     SCARDS   *SOURCE*     12     SPRINT   *SINK*
  316. C      3        3     3                     13     13
  317. C      4        4     4                     14     14
  318. C      5        5     5                     15     15
  319. C      6        6     6                     16     16       -PLM16##
  320. C      7        7     7                     17     17       -PLM17##
  321. C
  322. C   ALL INPUT RECORDS ARE 80 CHARACTERS OR LESS.  ALL
  323. C   OUTPUT RECORDS ARE 120 CHARACTERS OR LESS.
  324. C   THE FORTRAN UNIT NUMBERS CAN BE CHANGED IN THE
  325. C   SUBROUTINES GNC AND WRITEL (THESE ARE THE ONLY OC-
  326. C   CURRENCES OF REFERENCES TO THESE UNITS).
  327. C
  328. C
  329. C
  330. C    0 1 2 3 4 5 6 7 8 9
  331. C    0 0 0 0 0 0 0 0 1 1
  332. C    2 3 4 5 6 7 8 9 0 1
  333. C
  334. C
  335. C    $ = . / ( ) + - ' * , < > : ;
  336. C    3 3 4 4 4 4 4 4 4 4 4 4 5 5 5
  337. C    8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
  338. C
  339. C
  340. C    A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
  341. C    1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3
  342. C    2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7
  343. C
  344. C
  345. C  SEQNO              SUB/FUNC NAME
  346. C  15410000      SUBROUTINE EXITB
  347. C  16300000      INTEGER FUNCTION LOOKUP(IV)
  348. C  17270000      INTEGER FUNCTION ENTER(INFOV)
  349. C  18050000      SUBROUTINE DUMPSY
  350. C  20030000      SUBROUTINE RECOV
  351. C  20420000      LOGICAL FUNCTION STACK(Q)
  352. C  20930000      LOGICAL FUNCTION PROK(PRD)
  353. C  21550000      SUBROUTINE REDUCE
  354. C  22100000      SUBROUTINE CLOOP
  355. C  22740000      SUBROUTINE PRSYM(CC,SYM)
  356. C  23120000      INTEGER FUNCTION GETC1(I,J)
  357. C  23330000      SUBROUTINE SCAN
  358. C  25280000      INTEGER FUNCTION WRDATA(SY)
  359. C  26460000      SUBROUTINE DUMPCH
  360. C  26960000      SUBROUTINE SYNTH(PROD,SYM)
  361. C  36310000      INTEGER FUNCTION GNC(Q)
  362. C  37980000      SUBROUTINE WRITEL(NSPACE)
  363. C  38520000      FUNCTION ICON(I)
  364. C  38710000      SUBROUTINE DECIBP
  365. C  38850000      SUBROUTINE CONV(PREC)
  366. C  39090000      SUBROUTINE FORM(CC,CHARS,START,FINISH,LENGTH)
  367. C  39370000      SUBROUTINE CONOUT(CC,K,N,BASE)
  368. C  39690000      SUBROUTINE PAD(CC,CHR,I)
  369. C  39800000      SUBROUTINE STACKC(I)
  370. C  39950000      SUBROUTINE ENTERB
  371. C  40180000      SUBROUTINE DUMPIN
  372. C  40880000      SUBROUTINE ERROR(I,LEVEL)
  373. C  41320000      INTEGER FUNCTION SHR(I,J)
  374. C  41360000      INTEGER FUNCTION SHL(I,J)
  375. C  41400000      INTEGER FUNCTION RIGHT(I,J)
  376. C  41440000      SUBROUTINE SDUMP
  377. C  41670000      SUBROUTINE REDPR(PROD,SYM)
  378. C  41900000      SUBROUTINE EMIT(VAL,TYP)
  379. C
  380. C***********************************************************************
  381. C
  382.       INTEGER I
  383.       INTEGER TITLE(10),VERS
  384.       COMMON /TITL/TITLE,VERS
  385. C
  386. C     SYNTAX ANALYZER TABLES
  387.       INTEGER SHL,SHR,RIGHT,CONV,GETC1
  388.       INTEGER SP,MP,MPP1,MSTACK,MVAR,VARTOP,PSTACK(75),VAR(75),
  389.      1    VARC(256),FIXV(75),FIXC(75),PRMASK(5)
  390.       LOGICAL FAILSF,COMPIL
  391.       COMMON /STACKS/SP,MP,MPP1,MSTACK,MVAR,VARTOP,PSTACK,VAR,
  392.      1    VARC,FIXV,FIXC,PRMASK,FAILSF,COMPIL
  393. C      GLOBAL TABLES
  394.       INTEGER V(446),VLOC(107),VINDX(13),C1(364),C1TRI(243),PRTB(129),
  395.      1PRDTB(129),HDTB(129),PRLEN(129),CONTC(129),LEFTC(5),LEFTI(57),
  396.      2CONTT(1),TRIPI(57),PRIND(107),NSY,NT,VLEN,VIL,C1W,C1L,NC1TRI,
  397.      3PRTBL,PRDTBL,HDTBL,PRLENL,CONCL,LEFTCL,LEFTIL,CONTL,TRIPL,PRIL,
  398.      4PACK,TOKEN,IDENTV,NUMBV,STRV,DIVIDE,EOFILE,PROCV,SEMIV,
  399.      *DECL,DOV,ENDV,GROUPV,STMTV,SLISTV
  400.       COMMON /SYNTAX/V,VLOC,VINDX,C1,C1TRI,PRTB,PRDTB,HDTB,PRLEN,CONTC,
  401.      1LEFTC,LEFTI,CONTT,TRIPI,PRIND,NSY,NT,VLEN,VIL,C1W,C1L,NC1TRI,
  402.      2PRTBL,PRDTBL,HDTBL,PRLENL,CONCL,LEFTCL,LEFTIL,CONTL,TRIPL,PRIL,
  403.      3PACK,TOKEN,IDENTV,NUMBV,STRV,DIVIDE,EOFILE,PROCV,SEMIV,
  404.      *DECL,DOV,ENDV,GROUPV,STMTV,SLISTV
  405. C     GLOBAL VARIABLES
  406.       INTEGER IBUFF(80),OBUFF(120),IBP,OBP,INPTR,
  407.      1    INSTK(7),ITRAN(256),OTRAN(64)
  408.       COMMON /FILES/IBUFF,OBUFF,IBP,OBP,INPTR,
  409.      1    INSTK,ITRAN,OTRAN
  410.       INTEGER CONTRL(64)
  411.       COMMON /CNTRL/CONTRL
  412.       INTEGER MSSG(77)
  413.       COMMON /MESSAG/MSSG
  414.       INTEGER ACCLEN,ACCUM(32),TYPE,STYPE,EOFLAG,
  415.      1    IDENT,NUMB,SPECL,STR,CONT,VALUE
  416.       COMMON /SCANC/ACCLEN,ACCUM,TYPE,STYPE,EOFLAG,
  417.      1    IDENT,NUMB,SPECL,STR,CONT,VALUE
  418.       INTEGER MACROS(500),MAXMAC,CURMAC,MACTOP
  419.       COMMON /MACRO/MACROS,MAXMAC,CURMAC,MACTOP
  420.       INTEGER VARB,INTR,PROC,LABEL,LITER
  421.       COMMON /TYPES/VARB,INTR,PROC,LABEL,LITER
  422.       INTEGER BLOCK(30),DOPAR(30),MACBLK(30),CURBLK,MAXBLK,BLKSYM
  423.       INTEGER PROCTP(30)
  424.       COMMON /BLK/BLOCK,DOPAR,MACBLK,CURBLK,MAXBLK,BLKSYM
  425.      1,PROCTP
  426.       INTEGER SYMBOL(4000),SYMTOP,MAXSYM,SYMLOC,SYMLEN,SYMCNT,SYMABS,
  427.      1    ACNT
  428.       COMMON /SYM/SYMBOL,SYMTOP,MAXSYM,SYMLOC,SYMLEN,SYMCNT,SYMABS,
  429.      1    ACNT
  430.       INTEGER POLISH(30),MAXPOL,POLTOP,POLCNT,POLCHR(18)
  431.       COMMON /POLE/POLISH,MAXPOL,POLTOP,POLCNT,POLCHR
  432.       INTEGER OPCVAL(51),OPR,ADR,VLU,DEF,LIT,LIN,
  433.      *NOP,ADD,ADC,SUB,SBC,MUL,DIV,REM,NEG,AND,IOR,XOR,NOT,EQL,LSS,GTR,
  434.      *NEQ,LEQ,GEQ,INX,TRA,TRC,PRO,RET,STO,STD,XCH,DEL,DAT,LOD,BIF,INC,
  435.      *CSE,END,ENB,ENP,HAL,RTL,RTR,SFL,SFR,HIV,LOV,CVA,ORG,DRT,ENA,DIS,
  436.      *AX1,AX2,AX3
  437.       COMMON /OPCOD/ OPCVAL,OPR,ADR,VLU,DEF,LIT,LIN,
  438.      *NOP,ADD,ADC,SUB,SBC,MUL,DIV,REM,NEG,AND,IOR,XOR,NOT,EQL,LSS,GTR,
  439.      *NEQ,LEQ,GEQ,INX,TRA,TRC,PRO,RET,STO,STD,XCH,DEL,DAT,LOD,BIF,INC,
  440.      *CSE,END,ENB,ENP,HAL,RTL,RTR,SFL,SFR,HIV,LOV,CVA,ORG,DRT,ENA,DIS,
  441.      *AX1,AX2,AX3
  442. C     THE FOLLOWING SCANNER COMMANDS ARE DEFINED
  443. C     ANALYZE = I      (12)  PRINT SYNTAX ANALYSIS TRACE
  444. C     BYPASS           (13)  BYPASS STACK DUMP ON ERROR
  445. C     COUNT = I        (14)  BEGIN LINE COUNT AT I
  446. C     DELETE = I       (15)
  447. C     EOF              (16)
  448. C     GENERATE         (18)
  449. C     INPUT = I        (20)
  450. C     JFILE (CODE)= I  (21)
  451. C     KWIDTH (CD)= I   (22)
  452. C     LEFTMARGIN = I   (23)
  453. C     MEMORY = I       (24)
  454. C     OUTPUT = I       (26)
  455. C     PRINT (T OR F)   (27)
  456. C     RIGHTMARG = I    (29)
  457. C     SYMBOLS          (30)
  458. C     TERMINAL         (31) (0=BATCH, 1=TERM, 2=INTERLIST)
  459. C     USYMBOL = I      (32)
  460. C     VWIDTH (SYM) = I (33)
  461. C     WIDTH = I        (34)
  462. C     YPAD = N         (36)  BLANK PAD ON OUTPUT
  463. C     CONTRL(1) IS THE ERROR COUNT
  464.       DO 2 I=1,64
  465. 2     CONTRL(I) = -1
  466.       CONTRL(1) = 0
  467.       CONTRL(12) = 0
  468.       CONTRL(13) = 1
  469.       CONTRL(14) = 0
  470.       CONTRL(15) = 120
  471.       CONTRL(16) = 0
  472.       CONTRL(18) = 0
  473.       CONTRL(20) = 2
  474.       CONTRL(21) = 6
  475.       CONTRL(22) = 72
  476.       CONTRL(23) = 1
  477.       CONTRL(24) = 1
  478.       CONTRL(26) = 2
  479.       CONTRL(27) = 1
  480.       CONTRL(29) = 80
  481.       CONTRL(30) = 0
  482.       CONTRL(31) = 1
  483.       CONTRL(32) = 7
  484.       CONTRL(33) = 72
  485.       CONTRL(34) = 120
  486.       CONTRL(36) = 1
  487. C
  488.           DO 4 I=1,5
  489. 4         PRMASK(I)=2**(I*8-8)-1
  490.           DO 8 I=1,256
  491.           ITRAN(I) = 1
  492. 8         CONTINUE
  493. C
  494.           DO 5 I=53,64
  495.           OTRAN(I) = OTRAN(1)
  496. 5         CONTINUE
  497. C
  498.           DO 10 I=1,52
  499.           J = OTRAN(I)
  500.           J = ICON(J)
  501. 10        ITRAN(J) = I
  502.       CALL CONOUT(0,4,8080,10)
  503.       CALL PAD(1,1,1)
  504.       CALL FORM(1,TITLE,1,10,10)
  505.       CALL CONOUT(1,1,VERS/10,10)
  506.       CALL PAD(1,40,1)
  507.       CALL CONOUT(1,1,MOD(VERS,10),10)
  508.       CALL WRITEL(1)
  509.           DO 20 I=1,3
  510. 20        PSTACK(I)=0
  511.       PSTACK(4)=EOFILE
  512.       SP = 4
  513.       CALL SCAN
  514.       CALL CLOOP
  515.       CALL EMIT(NOP,OPR)
  516. 100   IF (POLTOP.EQ.0) GO TO 200
  517.       CALL EMIT(NOP,OPR)
  518.       GO TO 100
  519. 200   CONTINUE
  520. C     PRINT ERROR COUNT
  521.       I = CONTRL(1)
  522.       J = CONTRL(26)
  523.       K = J
  524. 300   CONTINUE
  525.       CALL WRITEL(0)
  526.       CONTRL(26) = J
  527.       IF (I.EQ.0) CALL FORM(0,MSSG,6,7,41)
  528.       IF (I.NE.0) CALL CONOUT(2,-5,I,10)
  529.       CALL PAD(1,1,1)
  530.       CALL FORM(1,MSSG,8,20,41)
  531.       IF (I.NE.1) CALL PAD(1,30,1)
  532.       CALL PAD(0,1,1)
  533.       CALL WRITEL(0)
  534. C     CHECK FOR TERMINAL CONTROL OF A BATCH RUN
  535.       IF ((J.EQ.1).OR.(CONTRL(31).EQ.0)) GO TO 400
  536. C     ARRIVE HERE IF TERMINAL TOGGLE GT 0, AND OUTPUT NOT CONSOLE
  537.       J = 1
  538.       GO TO 300
  539. 400   CONTINUE
  540.       CONTRL(26) = K
  541.       CALL DUMPSY
  542. C     MAY WANT A SYMBOL TABLE FOR THE SIMULATOR
  543.       IF(CONTRL(24).EQ.0) SYMBOL(2) = 0
  544.       CALL DUMPCH
  545.       CALL DUMPIN
  546.       STOP
  547.       END
  548.       SUBROUTINE EXITB
  549. C     GOES THROUGH HERE UPON BLOCK EXIT
  550. C      GLOBAL TABLES
  551.       INTEGER V(446),VLOC(107),VINDX(13),C1(364),C1TRI(243),PRTB(129),
  552.      1PRDTB(129),HDTB(129),PRLEN(129),CONTC(129),LEFTC(5),LEFTI(57),
  553.      2CONTT(1),TRIPI(57),PRIND(107),NSY,NT,VLEN,VIL,C1W,C1L,NC1TRI,
  554.      3PRTBL,PRDTBL,HDTBL,PRLENL,CONCL,LEFTCL,LEFTIL,CONTL,TRIPL,PRIL,
  555.      4PACK,TOKEN,IDENTV,NUMBV,STRV,DIVIDE,EOFILE,PROCV,SEMIV,
  556.      *DECL,DOV,ENDV,GROUPV,STMTV,SLISTV
  557.       COMMON /SYNTAX/V,VLOC,VINDX,C1,C1TRI,PRTB,PRDTB,HDTB,PRLEN,CONTC,
  558.      1LEFTC,LEFTI,CONTT,TRIPI,PRIND,NSY,NT,VLEN,VIL,C1W,C1L,NC1TRI,
  559.      2PRTBL,PRDTBL,HDTBL,PRLENL,CONCL,LEFTCL,LEFTIL,CONTL,TRIPL,PRIL,
  560.      3PACK,TOKEN,IDENTV,NUMBV,STRV,DIVIDE,EOFILE,PROCV,SEMIV,
  561.      *DECL,DOV,ENDV,GROUPV,STMTV,SLISTV
  562.       INTEGER VARB,INTR,PROC,LABEL,LITER
  563.       COMMON /TYPES/VARB,INTR,PROC,LABEL,LITER
  564.       INTEGER BLOCK(30),DOPAR(30),MACBLK(30),CURBLK,MAXBLK,BLKSYM
  565.       INTEGER PROCTP(30)
  566.       COMMON /BLK/BLOCK,DOPAR,MACBLK,CURBLK,MAXBLK,BLKSYM
  567.      1,PROCTP
  568.       INTEGER SYMBOL(4000),SYMTOP,MAXSYM,SYMLOC,SYMLEN,SYMCNT,SYMABS,
  569.      1    ACNT
  570.       COMMON /SYM/SYMBOL,SYMTOP,MAXSYM,SYMLOC,SYMLEN,SYMCNT,SYMABS,
  571.      1    ACNT
  572.       INTEGER HENTRY(127),HCODE
  573.       COMMON /HASH/HENTRY,HCODE
  574.       INTEGER RIGHT,SHR,SHL
  575.       INTEGER MACROS(500),MAXMAC,CURMAC,MACTOP
  576.       COMMON /MACRO/MACROS,MAXMAC,CURMAC,MACTOP
  577.       LOGICAL ERRED
  578.       ERRED = .FALSE.
  579.       IF (CURBLK .LE. 0) GO TO 9999
  580.       I = BLOCK(CURBLK)
  581.       N = MACBLK(CURBLK)
  582.       CURMAC = RIGHT(N,12)
  583.       MACTOP = SHR(N,12)
  584.       CURBLK = CURBLK - 1
  585.           J = SYMBOL(SYMTOP)
  586. 100       IF (J.LT.I) GO TO 300
  587.           IF (SYMBOL(J+1).LT.0) GO TO 200
  588.           K = IABS(SYMBOL(J+2))
  589.           KP = RIGHT(K,4)
  590.           LP = SHR(KP,8)
  591.           IF(KP.GE.LITER) GO TO 200
  592.           IF ((KP.NE.VARB).AND.(KP.NE.LABEL))GO TO 150
  593.           K = RIGHT(SHR(K,4),4)
  594.           IF (K.NE.0) GO TO 150
  595.           IF ((KP.EQ.LABEL).AND.(CURBLK.GT.1)) GO TO 200
  596.           IF (ERRED) GO TO 130
  597.               CALL ERROR(1,1)
  598.               ERRED=.TRUE.
  599. 130       CALL PAD(0,1,5)
  600.           N = SYMBOL(J+1)
  601.           N = SHR(N,12)
  602.           IF (N.EQ.0) GO TO 150
  603.               DO 120 KP=1,N
  604.           LTEMP=J+2+KP
  605.           L=SYMBOL(LTEMP)
  606.                   DO 120 LP=1,PACK
  607.                   JP = 30-LP*6
  608.                   JP = RIGHT(SHR(L,JP),6)+1
  609.                   CALL PAD(1,JP,1)
  610. 120           CONTINUE
  611.           CALL WRITEL(0)
  612. 150       SYMBOL(J+1) = -SYMBOL(J+1)
  613. C         MAY WANT TO FIX THE HASH CODE CHAIN
  614.           IF (LP.LE.0) GO TO 200
  615. C         FIND MATCH ON THE ENTRY
  616.           K = J - 1
  617.           KP = SYMBOL(K)
  618.           HCODE = SHR(KP,16)
  619.           KP = RIGHT(KP,16)
  620.           N = HENTRY(HCODE)
  621.           IF (N.NE.K) GO TO 160
  622. C
  623. C         THIS ENTRY IS DIRECTLY CONNECTED
  624.           HENTRY(HCODE) = KP
  625.           GO TO 200
  626. C
  627. C         LOOK THROUGH SOME LITERALS IN THE SYMBOL TABLE ABOVE
  628. 160       NP = RIGHT(SYMBOL(N),16)
  629.           IF (NP.EQ.K) GO TO 170
  630.           N = NP
  631.           GO TO 160
  632. C
  633. 170       SYMBOL(N) = SHR(HCODE,16) + KP
  634. C
  635. 200       J = RIGHT(SYMBOL(J),16)
  636.           GO TO 100
  637. 300    BLKSYM = BLOCK(CURBLK)
  638. 9999   RETURN
  639.        END
  640.       INTEGER FUNCTION LOOKUP(IV)
  641. C     SYNTAX ANALYZER TABLES
  642.       INTEGER SHL,SHR,RIGHT,CONV,GETC1
  643.       INTEGER SP,MP,MPP1,MSTACK,MVAR,VARTOP,PSTACK(75),VAR(75),
  644.      1    VARC(256),FIXV(75),FIXC(75),PRMASK(5)
  645.       LOGICAL FAILSF,COMPIL
  646.       COMMON /STACKS/SP,MP,MPP1,MSTACK,MVAR,VARTOP,PSTACK,VAR,
  647.      1    VARC,FIXV,FIXC,PRMASK,FAILSF,COMPIL
  648. C      GLOBAL TABLES
  649.       INTEGER V(446),VLOC(107),VINDX(13),C1(364),C1TRI(243),PRTB(129),
  650.      1PRDTB(129),HDTB(129),PRLEN(129),CONTC(129),LEFTC(5),LEFTI(57),
  651.      2CONTT(1),TRIPI(57),PRIND(107),NSY,NT,VLEN,VIL,C1W,C1L,NC1TRI,
  652.      3PRTBL,PRDTBL,HDTBL,PRLENL,CONCL,LEFTCL,LEFTIL,CONTL,TRIPL,PRIL,
  653.      4PACK,TOKEN,IDENTV,NUMBV,STRV,DIVIDE,EOFILE,PROCV,SEMIV,
  654.      *DECL,DOV,ENDV,GROUPV,STMTV,SLISTV
  655.       COMMON /SYNTAX/V,VLOC,VINDX,C1,C1TRI,PRTB,PRDTB,HDTB,PRLEN,CONTC,
  656.      1LEFTC,LEFTI,CONTT,TRIPI,PRIND,NSY,NT,VLEN,VIL,C1W,C1L,NC1TRI,
  657.      2PRTBL,PRDTBL,HDTBL,PRLENL,CONCL,LEFTCL,LEFTIL,CONTL,TRIPL,PRIL,
  658.      3PACK,TOKEN,IDENTV,NUMBV,STRV,DIVIDE,EOFILE,PROCV,SEMIV,
  659.      *DECL,DOV,ENDV,GROUPV,STMTV,SLISTV
  660.       INTEGER VARB,INTR,PROC,LABEL,LITER
  661.       COMMON /TYPES/VARB,INTR,PROC,LABEL,LITER
  662.       INTEGER BLOCK(30),DOPAR(30),MACBLK(30),CURBLK,MAXBLK,BLKSYM
  663.       INTEGER PROCTP(30)
  664.       COMMON /BLK/BLOCK,DOPAR,MACBLK,CURBLK,MAXBLK,BLKSYM
  665.      1,PROCTP
  666.       INTEGER SYMBOL(4000),SYMTOP,MAXSYM,SYMLOC,SYMLEN,SYMCNT,SYMABS,
  667.      1    ACNT
  668.       COMMON /SYM/SYMBOL,SYMTOP,MAXSYM,SYMLOC,SYMLEN,SYMCNT,SYMABS,
  669.      1    ACNT
  670.       INTEGER HENTRY(127),HCODE
  671.       COMMON /HASH/HENTRY,HCODE
  672.       INTEGER ENTER
  673.       LOGICAL SFLAG
  674.       EQUIVALENCE (L,SYMLEN),(I,SYMLOC)
  675.       NVAL = FIXV(IV)
  676.       SFLAG = PSTACK(IV) .NE. NUMBV
  677.       I = VAR(IV)
  678.       L = SHR(I,12)
  679.       I = RIGHT(I,12)
  680.       J = I
  681.       KP = PACK*6
  682.       K = KP
  683.       JP = 0
  684.       M = 0
  685. 100   IF (JP .GE. L) GO TO 300
  686.       K = K - 6
  687.       IF (K .GE. 0) GO TO 200
  688.       VARC(J) = M
  689.       J = J + 1
  690.       M = 0
  691.       K = KP - 6
  692. 200   LTEMP=JP+I
  693.       M=SHL(VARC(LTEMP)-1,K)+M
  694.       JP = JP + 1
  695.       GO TO 100
  696. 300   VARC(J) = M
  697. C     VARC IS NOW IN PACKED FORM READY FOR LOOKUP
  698. C     COMPUTE HASH CODE (REDUCE NUMBERS MOD 127, USE FIRST 5 CHARS OF
  699. C     IDENTIFIERS AND STRINGS )
  700.       HCODE = NVAL
  701.       IF (SFLAG) HCODE = VARC(I)
  702.       HCODE = MOD(HCODE,127) + 1
  703. C     HCODE IS IN THE RANGE 1 TO 127
  704.       LP = (L-1)/PACK + 1
  705.       K = HENTRY(HCODE)
  706. 400   IF (K .LE. 0) GO TO 9990
  707.       IF (SFLAG) GO TO 450
  708. C     COMPARE NUMBERS IN INTERNAL FORM RATHER THAN CHARACTERS
  709.           J = SYMBOL(K+3)
  710.           IF (RIGHT(J,4).LE.LITER) GO TO 600
  711.           J = SHR(J,8)
  712.           IF (J.EQ.NVAL) GO TO 510
  713.           GO TO 600
  714. 450   J = SYMBOL(K+2)
  715.       JP = RIGHT(J,12)
  716.       IF (JP .NE. L) GO TO 600
  717.           J = K + 3
  718.           JP = I
  719.           DO 500 M=1,LP
  720.           LTEMP=J+M
  721.           IF(VARC(JP).NE.SYMBOL(LTEMP)) GO TO 600
  722. 500       JP = JP + 1
  723. C     SYMBOL FOUND
  724. C
  725. C     MAKE SURE THE TYPES MATCH.
  726.       JP = PSTACK(IV)
  727.       M = SYMBOL(K+3)
  728.       M = RIGHT(M,4)
  729.       IF ((JP.EQ.STRV).AND.(M.EQ.LITER)) GO TO 510
  730.       IF ((JP.NE.IDENTV).OR.(M.GE.LITER)) GO TO 600
  731. C     JP IS IDENTIFIER, M IS VARIABLE, LABEL, OR PROCEDURE.
  732. 510   LOOKUP = K+2
  733.       RETURN
  734. 600   K = SYMBOL(K)
  735.       K = RIGHT(K,16)
  736.       GO TO 400
  737. 9990  LOOKUP = 0
  738.       RETURN
  739.       END
  740.       INTEGER FUNCTION ENTER(INFOV)
  741.       INTEGER Q,TYP,INFO,INFOV,SHR,SHL,RIGHT
  742. C     SYNTAX ANALYZER TABLES
  743.       INTEGER CONV,GETC1
  744.       INTEGER SP,MP,MPP1,MSTACK,MVAR,VARTOP,PSTACK(75),VAR(75),
  745.      1    VARC(256),FIXV(75),FIXC(75),PRMASK(5)
  746.       LOGICAL FAILSF,COMPIL
  747. C
  748.       COMMON /STACKS/SP,MP,MPP1,MSTACK,MVAR,VARTOP,PSTACK,VAR,
  749.      1    VARC,FIXV,FIXC,PRMASK,FAILSF,COMPIL
  750. C      GLOBAL TABLES
  751.       INTEGER V(446),VLOC(107),VINDX(13),C1(364),C1TRI(243),PRTB(129),
  752.      1PRDTB(129),HDTB(129),PRLEN(129),CONTC(129),LEFTC(5),LEFTI(57),
  753.      2CONTT(1),TRIPI(57),PRIND(107),NSY,NT,VLEN,VIL,C1W,C1L,NC1TRI,
  754.      3PRTBL,PRDTBL,HDTBL,PRLENL,CONCL,LEFTCL,LEFTIL,CONTL,TRIPL,PRIL,
  755.      4PACK,TOKEN,IDENTV,NUMBV,STRV,DIVIDE,EOFILE,PROCV,SEMIV,
  756.      *DECL,DOV,ENDV,GROUPV,STMTV,SLISTV
  757.       COMMON /SYNTAX/V,VLOC,VINDX,C1,C1TRI,PRTB,PRDTB,HDTB,PRLEN,CONTC,
  758.      1LEFTC,LEFTI,CONTT,TRIPI,PRIND,NSY,NT,VLEN,VIL,C1W,C1L,NC1TRI,
  759.      2PRTBL,PRDTBL,HDTBL,PRLENL,CONCL,LEFTCL,LEFTIL,CONTL,TRIPL,PRIL,
  760.      3PACK,TOKEN,IDENTV,NUMBV,STRV,DIVIDE,EOFILE,PROCV,SEMIV,
  761.      *DECL,DOV,ENDV,GROUPV,STMTV,SLISTV
  762.       INTEGER BLOCK(30),DOPAR(30),MACBLK(30),CURBLK,MAXBLK,BLKSYM
  763.       INTEGER PROCTP(30)
  764.       COMMON /BLK/BLOCK,DOPAR,MACBLK,CURBLK,MAXBLK,BLKSYM
  765.      1,PROCTP
  766.       INTEGER SYMBOL(4000),SYMTOP,MAXSYM,SYMLOC,SYMLEN,SYMCNT,SYMABS,
  767.      1    ACNT
  768.       COMMON /SYM/SYMBOL,SYMTOP,MAXSYM,SYMLOC,SYMLEN,SYMCNT,SYMABS,
  769.      1    ACNT
  770.       INTEGER HENTRY(127),HCODE
  771.       COMMON /HASH/HENTRY,HCODE
  772.       INTEGER CONTRL(64)
  773.       COMMON /CNTRL/CONTRL
  774. C      ENTER ASSUMES A PREVIOUS CALL TO LOOKUP (EITHER THAT, OR SET UP
  775. C      THE VALUES OF SYMLOC AND SYMLEN IN THE VARC ARRAY).
  776. C         ALSO SET-UP HASH CODE VALUE (SEE LOOKUP), IF NECESSARY
  777.       INFO = INFOV
  778.       I = SYMTOP
  779.       IF (INFO.GE.0) GO TO 10
  780. C     ENTRY WITH NO EXTERNAL NAME
  781.       IHASH = 0
  782.       HCODE = 0
  783.       INFO = - INFO
  784.       SYMLEN = 0
  785.       Q = 0
  786.       GO TO 20
  787. C
  788. 10    IHASH = 1
  789.       Q = (SYMLEN-1)/PACK + 1
  790. C
  791. 20    SYMTOP = SYMTOP + Q + IHASH + 3
  792.       IQ = I
  793.       I = I + IHASH
  794. C
  795.       IF (SYMTOP .LE. MAXSYM) GO TO 100
  796.       I = IHASH
  797.       SYMTOP = Q + IHASH + 3
  798.       CALL ERROR(2,5)
  799. 100   SYMBOL(SYMTOP) = I
  800.       SYMCNT = SYMCNT + 1
  801.       SYMBOL(I) = SHL(SYMCNT,16) + SYMBOL(IQ)
  802.       I = I + 1
  803.       SYMBOL(I) = SHL(Q,12) + SYMLEN
  804.       IP = I + 1
  805.       SYMBOL(IP) = INFO
  806.       L = SYMLOC - 1
  807.       IF (Q.EQ.0) GO TO 210
  808.           DO 200 J = 1,Q
  809.           LTEMP=IP+J
  810.           LTEMP1=L+J
  811. 200       SYMBOL(LTEMP)=VARC(LTEMP1)
  812. 210   ENTER = I
  813. C
  814. C     COMPUTE HASH TABLE ENTRY
  815.       IF (IHASH.EQ.0) GO TO 300
  816. C     FIX COLLISION CHAIN
  817.       SYMBOL(IQ) = SHL(HCODE,16) + HENTRY(HCODE)
  818.       HENTRY(HCODE) = IQ
  819. 300   RETURN
  820.       END
  821.       SUBROUTINE DUMPSY
  822.       INTEGER INTPRO(8)
  823.       COMMON /INTER/INTPRO
  824. C      GLOBAL TABLES
  825.       INTEGER V(446),VLOC(107),VINDX(13),C1(364),C1TRI(243),PRTB(129),
  826.      1PRDTB(129),HDTB(129),PRLEN(129),CONTC(129),LEFTC(5),LEFTI(57),
  827.      2CONTT(1),TRIPI(57),PRIND(107),NSY,NT,VLEN,VIL,C1W,C1L,NC1TRI,
  828.      3PRTBL,PRDTBL,HDTBL,PRLENL,CONCL,LEFTCL,LEFTIL,CONTL,TRIPL,PRIL,
  829.      4PACK,TOKEN,IDENTV,NUMBV,STRV,DIVIDE,EOFILE,PROCV,SEMIV,
  830.      *DECL,DOV,ENDV,GROUPV,STMTV,SLISTV
  831.       COMMON /SYNTAX/V,VLOC,VINDX,C1,C1TRI,PRTB,PRDTB,HDTB,PRLEN,CONTC,
  832.      1LEFTC,LEFTI,CONTT,TRIPI,PRIND,NSY,NT,VLEN,VIL,C1W,C1L,NC1TRI,
  833.      2PRTBL,PRDTBL,HDTBL,PRLENL,CONCL,LEFTCL,LEFTIL,CONTL,TRIPL,PRIL,
  834.      3PACK,TOKEN,IDENTV,NUMBV,STRV,DIVIDE,EOFILE,PROCV,SEMIV,
  835.      *DECL,DOV,ENDV,GROUPV,STMTV,SLISTV
  836.       INTEGER RIGHT,SHR,SHL
  837.       INTEGER BLOCK(30),DOPAR(30),MACBLK(30),CURBLK,MAXBLK,BLKSYM
  838.       INTEGER PROCTP(30)
  839.       COMMON/BLK/BLOCK,DOPAR,MACBLK,CURBLK,MAXBLK,BLKSYM
  840.      1,PROCTP
  841.       INTEGER SYMBOL(4000),SYMTOP,MAXSYM,SYMLOC,SYMLEN,SYMCNT,SYMABS,
  842.      1    ACNT
  843.       COMMON /SYM/SYMBOL,SYMTOP,MAXSYM,SYMLOC,SYMLEN,SYMCNT,SYMABS,
  844.      1    ACNT
  845.       INTEGER LOOKUP,ENTER
  846.       INTEGER MSSG(77)
  847.       COMMON /MESSAG/MSSG
  848.       INTEGER CONTRL(64)
  849.       COMMON /CNTRL/CONTRL
  850.       INTEGER VARB,INTR,PROC,LABEL,LITER
  851.       COMMON /TYPES/VARB,INTR,PROC,LABEL,LITER
  852.       IC = CONTRL(30)
  853.       IF (IC.EQ.0) GO TO 2000
  854.       CALL WRITEL(0)
  855.       IF (IC.GT.1) CALL FORM(0,MSSG,42,77,77)
  856.       I = SYMBOL(SYMTOP)
  857.       IT = SYMTOP
  858. 210   IF (I .LE. 0) GO TO 1000
  859.       K = SYMBOL(I)
  860.       KP = SHR(K,16)
  861. C     QUICK CHECK FOR ZERO LENGTH NAME
  862.       IF (IC.GE.2) GO TO 215
  863.       N = IABS(SYMBOL(I+1))
  864.       IF (SHR(N,12).EQ.0) GO TO 218
  865. 215   CONTINUE
  866.       CALL PAD(0,30,1)
  867.       CALL CONOUT(1,5,KP,10)
  868. 218   CONTINUE
  869.       K = SYMBOL(I+1)
  870.       IF (IC.LT.2) GO TO 220
  871.       J = 1
  872.       IF (K .LT. 0) J = 47
  873.       CALL PAD(1,J,1)
  874.       CALL PAD(1,1,1)
  875. 220   CONTINUE
  876.       K = IABS(K)
  877.       KP = SHR(K,12)
  878.       N = KP
  879.       K = RIGHT(K,12)
  880.       MC = K
  881.       IF (IC.LT.2) GO TO 230
  882.       CALL CONOUT(1,4,I+1,10)
  883.       CALL PAD(1,1,1)
  884.       CALL CONOUT(1,-3,KP,10)
  885.       CALL PAD(1,1,1)
  886.       CALL CONOUT(1,-4,K,10)
  887.       CALL PAD(1,1,1)
  888. 230   CONTINUE
  889.       K = SYMBOL(I+2)
  890.       J = 29
  891.       IF (IC.LT.2) GO TO 240
  892.       IF (K .LT. 0) J = 13
  893.       CALL PAD(1,J,1)
  894.       CALL PAD(1,1,1)
  895. 240   CONTINUE
  896.       K = IABS(K)
  897.       M = RIGHT(K,4)
  898.       IF (IC.LT.2) GO TO 250
  899.       KP = SHR(K,8)
  900.       CALL CONOUT(1,6,KP,10)
  901.       KP = RIGHT(SHR(K,4),4)
  902.       CALL CONOUT(1,-3,KP,10)
  903.       KP = RIGHT(K,4)
  904.       CALL CONOUT(1,-3,KP,10)
  905. 250   CONTINUE
  906.       CALL PAD(1,1,1)
  907.       IP = I+2
  908.       IF (N.EQ.0) GO TO 310
  909.           IF (M.EQ.LITER) CALL PAD(1,46,1)
  910.           DO 300 KP=1,N
  911.           LTEMP=KP+IP
  912.           L=SYMBOL(LTEMP)
  913.               DO 300 LP=1,PACK
  914.               IF ((KP-1)*PACK+LP.GT.MC) GO TO 305
  915.               JP = 30-LP*6
  916.               JP = RIGHT(SHR(L,JP),6)+1
  917.               CALL PAD(1,JP,1)
  918. 300           CONTINUE
  919. 305       IF (M.EQ.LITER) CALL PAD(1,46,1)
  920. 310   IP = IP + N
  921.       IF (IC.LT.2) GO TO 330
  922. 320   IP = IP + 1
  923.       IF (IP .GE. IT) GO TO 330
  924.           CALL PAD(1,1,1)
  925.           K = SYMBOL(IP)
  926.           J = 1
  927.           IF (K .LT. 0) J = 45
  928.           CALL PAD(1,J,1)
  929.           K = IABS(K)
  930.           CALL CONOUT(1,8,K,16)
  931.           GO TO 320
  932. 330   IT = I
  933.       I = RIGHT(SYMBOL(I),16)
  934.       GO TO 210
  935. 1000  CONTINUE
  936.       CALL WRITEL(0)
  937. 2000  CONTINUE
  938.       CALL WRITEL(0)
  939.       K = CONTRL(26)
  940.       CONTRL(26) = CONTRL(32)
  941.       KP = CONTRL(34)
  942.       CONTRL(34) = CONTRL(33)
  943. C     WRITE THE INTERRUPT PROCEDURE NAMES
  944.       CALL PAD(1,41,1)
  945.           DO 2050 I = 1,8
  946.           J = INTPRO(I)
  947.           IF (J.LE.0) GO TO 2050
  948. C         WRITE INTNUMBER SYMBOLNUM (4 BASE-32 DIGITS)
  949.               CALL PAD(1,I+1,1)
  950.               DO 2020 L=1,3
  951.               CALL PAD(1,RIGHT(J,5)+2,1)
  952. 2020          J = SHR(J,5)
  953.           CALL PAD(1,41,1)
  954. 2050  CONTINUE
  955.       CALL PAD(1,41,1)
  956.       CALL WRITEL(0)
  957. C
  958. C
  959. C     REVERSE THE SYMBOL TABLE POINTERS
  960. C     SET THE LENGTH FIELD OF COMPILER-GENERATED LABELS TO 1
  961. C
  962.       L = 0
  963.       I = SYMTOP
  964.       J = SYMBOL(I)
  965.       SYMBOL(I) = 0
  966. 2100  IF (J.EQ.0) GO TO 2200
  967.       L = L + 1
  968. C     CHECK FOR A LABEL VARIABLE
  969.       K = SYMBOL(J+2)
  970.       IF (MOD(K,16).NE.LABEL) GO TO 2110
  971. C     CHECK FOR CHARACTER LENGTH = 0
  972.       K = IABS(SYMBOL(J+1))
  973.       IF (MOD(K,4096).NE.0) GO TO 2110
  974. C     SET LENGTH TO 1 AND PREC TO 5 (FOR COMP GENERATED LABELS)
  975.           SYMBOL(J+2) = 336 + LABEL
  976. C         336 = 1 * 256 + 5 * 16
  977. 2110  M = SYMBOL(J)
  978.       SYMBOL(J) = I
  979.       I = J
  980.       J = RIGHT(M,16)
  981.       GO TO 2100
  982. C
  983. 2200  CONTINUE
  984.       JP = 0
  985.       IFIN = 1
  986.       IP = 1
  987.       J = 1
  988. C
  989. 2500  IF (J.NE.JP) GO TO 2610
  990.       J = J + IP
  991. 2610  IF (J.LT.IFIN) GO TO 2700
  992. C     OTHERWISE GET ANOTHER ENTRY FROM TABLE
  993.           CALL PAD(1,41,1)
  994.           J = I + 1
  995.           I = SYMBOL(I)
  996.           IF (I.EQ.0) GO TO 2800
  997.           IP = IABS(SYMBOL(J))
  998.           IP =  RIGHT(SHR(IP,12),12)
  999.           J = J + 1
  1000.           JP = J + 1
  1001. C         CHECK FOR BASED VARIABLE -- COMPUTE LAST ENTRY
  1002.           IFIN = JP + IP
  1003.           IF (SYMBOL(J).LT.0) IFIN = IFIN + 1
  1004.           GO TO 2500
  1005. 2700  L = 1
  1006.       LP = SYMBOL(J)
  1007.       IF (LP.LT.0) L = 45
  1008.       LP = IABS(LP)
  1009.       CALL PAD(1,L,1)
  1010. 2710  CALL PAD(1,RIGHT(LP,5)+2,1)
  1011.       LP = SHR(LP,5)
  1012.       IF (LP.GT.0) GO TO 2710
  1013.       J = J + 1
  1014.       GO TO 2500
  1015. C
  1016. 2800  CALL PAD(1,41,1)
  1017.       CALL WRITEL(0)
  1018.       CONTRL(26) = K
  1019.       CONTRL(34) = KP
  1020.       RETURN
  1021.       END
  1022.       SUBROUTINE RECOV
  1023.       INTEGER SP,MP,MPP1,MSTACK,MVAR,VARTOP,PSTACK(75),VAR(75),
  1024.      1    VARC(256),FIXV(75),FIXC(75),PRMASK(5)
  1025.       LOGICAL FAILSF,COMPIL
  1026.       COMMON /STACKS/SP,MP,MPP1,MSTACK,MVAR,VARTOP,PSTACK,VAR,
  1027.      1    VARC,FIXV,FIXC,PRMASK,FAILSF,COMPIL
  1028. C      GLOBAL TABLES
  1029.       INTEGER V(446),VLOC(107),VINDX(13),C1(364),C1TRI(243),PRTB(129),
  1030.      1PRDTB(129),HDTB(129),PRLEN(129),CONTC(129),LEFTC(5),LEFTI(57),
  1031.      2CONTT(1),TRIPI(57),PRIND(107),NSY,NT,VLEN,VIL,C1W,C1L,NC1TRI,
  1032.      3PRTBL,PRDTBL,HDTBL,PRLENL,CONCL,LEFTCL,LEFTIL,CONTL,TRIPL,PRIL,
  1033.      4PACK,TOKEN,IDENTV,NUMBV,STRV,DIVIDE,EOFILE,PROCV,SEMIV,
  1034.      *DECL,DOV,ENDV,GROUPV,STMTV,SLISTV
  1035.       COMMON /SYNTAX/V,VLOC,VINDX,C1,C1TRI,PRTB,PRDTB,HDTB,PRLEN,CONTC,
  1036.      1LEFTC,LEFTI,CONTT,TRIPI,PRIND,NSY,NT,VLEN,VIL,C1W,C1L,NC1TRI,
  1037.      2PRTBL,PRDTBL,HDTBL,PRLENL,CONCL,LEFTCL,LEFTIL,CONTL,TRIPL,PRIL,
  1038.      3PACK,TOKEN,IDENTV,NUMBV,STRV,DIVIDE,EOFILE,PROCV,SEMIV,
  1039.      *DECL,DOV,ENDV,GROUPV,STMTV,SLISTV
  1040.       INTEGER GETC1
  1041.       INTEGER RIGHT
  1042. C     FIND SOMETHING SOLID IN THE TEXT
  1043. 100   IF(TOKEN.EQ.DECL.OR.TOKEN.EQ.PROCV.OR.TOKEN.EQ.ENDV
  1044.      1 .OR.TOKEN.EQ.DOV.OR.TOKEN.EQ.SEMIV.OR.TOKEN.EQ.EOFILE) GO TO 300
  1045. 200       CALL SCAN
  1046.           GO TO 100
  1047. C     AND IN THE STACK
  1048. 300   I = PSTACK(SP)
  1049.       IF (FAILSF.AND.GETC1(I,TOKEN).NE.0) GO TO 500
  1050.       IF (I.EQ.EOFILE.AND.TOKEN.EQ.EOFILE) GO TO 400
  1051.       IF ((I.EQ.GROUPV.OR.I.EQ.SLISTV.OR.I.EQ.STMTV.OR.
  1052.      1    I.EQ.DOV.OR.I.EQ.PROCV).AND.TOKEN.NE.EOFILE) GO TO 200
  1053. C         BUT DON'T GO TOO FAR
  1054.           IF (SP.LE.4) GO TO 200
  1055.           VARTOP = RIGHT(VAR(SP),12)
  1056.           SP = SP - 1
  1057.           GO TO 300
  1058. 400   COMPIL = .FALSE.
  1059. 500   FAILSF = .FALSE.
  1060.       RETURN
  1061.       END
  1062.       LOGICAL FUNCTION STACK(Q)
  1063.       INTEGER SP,MP,MPP1,MSTACK,MVAR,VARTOP,PSTACK(75),VAR(75),
  1064.      1    VARC(256),FIXV(75),FIXC(75),PRMASK(5)
  1065.       LOGICAL FAILSF,COMPIL
  1066.       COMMON /STACKS/SP,MP,MPP1,MSTACK,MVAR,VARTOP,PSTACK,VAR,
  1067.      1    VARC,FIXV,FIXC,PRMASK,FAILSF,COMPIL
  1068. C      GLOBAL TABLES
  1069.       INTEGER V(446),VLOC(107),VINDX(13),C1(364),C1TRI(243),PRTB(129),
  1070.      1PRDTB(129),HDTB(129),PRLEN(129),CONTC(129),LEFTC(5),LEFTI(57),
  1071.      2CONTT(1),TRIPI(57),PRIND(107),NSY,NT,VLEN,VIL,C1W,C1L,NC1TRI,
  1072.      3PRTBL,PRDTBL,HDTBL,PRLENL,CONCL,LEFTCL,LEFTIL,CONTL,TRIPL,PRIL,
  1073.      4PACK,TOKEN,IDENTV,NUMBV,STRV,DIVIDE,EOFILE,PROCV,SEMIV,
  1074.      *DECL,DOV,ENDV,GROUPV,STMTV,SLISTV
  1075.       COMMON /SYNTAX/V,VLOC,VINDX,C1,C1TRI,PRTB,PRDTB,HDTB,PRLEN,CONTC,
  1076.      1LEFTC,LEFTI,CONTT,TRIPI,PRIND,NSY,NT,VLEN,VIL,C1W,C1L,NC1TRI,
  1077.      2PRTBL,PRDTBL,HDTBL,PRLENL,CONCL,LEFTCL,LEFTIL,CONTL,TRIPL,PRIL,
  1078.      3PACK,TOKEN,IDENTV,NUMBV,STRV,DIVIDE,EOFILE,PROCV,SEMIV,
  1079.      *DECL,DOV,ENDV,GROUPV,STMTV,SLISTV
  1080.       INTEGER GETC1,SHL,SHR
  1081.       INTEGER Q
  1082. 100   I = GETC1(PSTACK(SP),TOKEN)+1
  1083.       GO TO (1000,2000,3000,4000),I
  1084. C     ILLEGAL SYMBOL PAIR
  1085. 1000  CALL ERROR(3,1)
  1086.       CALL PRSYM(0,PSTACK(SP))
  1087.       CALL PAD(1,1,1)
  1088.       CALL PRSYM(1,TOKEN)
  1089.       CALL SDUMP
  1090.       CALL RECOV
  1091. C     RECOVER MAY HAVE SET COMPILING FALSE
  1092.       IF (.NOT.COMPIL) GO TO 2000
  1093.       GO TO 100
  1094. C     RETURN TRUE
  1095. 2000  STACK = .TRUE.
  1096.       GO TO 9999
  1097. C     RETURN FALSE
  1098. 3000  STACK = .FALSE.
  1099.       GO TO 9999
  1100. C     CHECK TRIPLES
  1101. 4000  CONTINUE
  1102.       J = SHL(PSTACK(SP-1),16)+SHL(PSTACK(SP),8)+TOKEN
  1103.       IU = NC1TRI+2
  1104.       IL = 1
  1105. 4100  K =SHR(IU+IL,1)
  1106.       JP = C1TRI(K)
  1107.           IF(J .LT. JP) IU = K
  1108.           IF(J .GE. JP) IL = K
  1109.       IF ((IU-IL) .GT. 1) GO TO 4100
  1110. C     CHECK FOR MATCH
  1111.       STACK = J .EQ. C1TRI(IL)
  1112. 9999  RETURN
  1113.       END
  1114.       LOGICAL FUNCTION PROK(PRD)
  1115.       INTEGER PRD
  1116.       INTEGER SHL,SHR,RIGHT,CONV,GETC1
  1117.       INTEGER SP,MP,MPP1,MSTACK,MVAR,VARTOP,PSTACK(75),VAR(75),
  1118.      1    VARC(256),FIXV(75),FIXC(75),PRMASK(5)
  1119.       LOGICAL FAILSF,COMPIL
  1120.       COMMON /STACKS/SP,MP,MPP1,MSTACK,MVAR,VARTOP,PSTACK,VAR,
  1121.      1    VARC,FIXV,FIXC,PRMASK,FAILSF,COMPIL
  1122. C      GLOBAL TABLES
  1123.       INTEGER V(446),VLOC(107),VINDX(13),C1(364),C1TRI(243),PRTB(129),
  1124.      1PRDTB(129),HDTB(129),PRLEN(129),CONTC(129),LEFTC(5),LEFTI(57),
  1125.      2CONTT(1),TRIPI(57),PRIND(107),NSY,NT,VLEN,VIL,C1W,C1L,NC1TRI,
  1126.      3PRTBL,PRDTBL,HDTBL,PRLENL,CONCL,LEFTCL,LEFTIL,CONTL,TRIPL,PRIL,
  1127.      4PACK,TOKEN,IDENTV,NUMBV,STRV,DIVIDE,EOFILE,PROCV,SEMIV,
  1128.      *DECL,DOV,ENDV,GROUPV,STMTV,SLISTV
  1129.       COMMON /SYNTAX/V,VLOC,VINDX,C1,C1TRI,PRTB,PRDTB,HDTB,PRLEN,CONTC,
  1130.      1LEFTC,LEFTI,CONTT,TRIPI,PRIND,NSY,NT,VLEN,VIL,C1W,C1L,NC1TRI,
  1131.      2PRTBL,PRDTBL,HDTBL,PRLENL,CONCL,LEFTCL,LEFTIL,CONTL,TRIPL,PRIL,
  1132.      3PACK,TOKEN,IDENTV,NUMBV,STRV,DIVIDE,EOFILE,PROCV,SEMIV,
  1133.      *DECL,DOV,ENDV,GROUPV,STMTV,SLISTV
  1134. C      CONTEXT CHECK OF EQUAL OR IMBEDDED RIGHT PARTS
  1135.       I = CONTC(PRD)+1
  1136.       GO TO (1000,2000,3000,4000),I
  1137. C     NO CHECK REQUIRED
  1138. 1000  PROK = .TRUE.
  1139.       GO TO 9999
  1140. C     RIGHT CONTEXT CHECK
  1141. 2000  PROK = GETC1(HDTB(PRD),TOKEN) .NE. 0
  1142.       GO TO 9999
  1143. C     LEFT CONTEXT CHECK
  1144. 3000  K = HDTB(PRD) - NT
  1145.       L = PRLEN(PRD)
  1146.       LTEMP=SP-L
  1147.       I=PSTACK(LTEMP)
  1148.       L = LEFTI(K)+1
  1149.       LP = LEFTI(K+1)
  1150.       IF (L .GT. LP) GO TO 3200
  1151.           DO 3100 J=L,LP
  1152.           IF (LEFTC(J) .NE. I) GO TO 3100
  1153.           PROK = .TRUE.
  1154.           GO TO 9999
  1155. 3100      CONTINUE
  1156. 3200  CONTINUE
  1157. C
  1158.       PROK = .FALSE.
  1159.       GO TO 9999
  1160. C     CHECK TRIPLES
  1161. 4000  CONTINUE
  1162.       K = HDTB(PRD)-NT
  1163.       L=PRLEN(PRD)
  1164.       LTEMP=SP-L
  1165.       I=SHL(PSTACK(LTEMP),8)+TOKEN
  1166.       L = TRIPI(K)+1
  1167.       LP = TRIPI(K+1)
  1168.       IF (L .LT. LP) GO TO 4200
  1169.           DO 4100 J=L,LP
  1170.           IF (CONTT(J) .NE. I) GO TO 4100
  1171.           PROK = .TRUE.
  1172.           GO TO 9999
  1173. 4100      CONTINUE
  1174. 4200  CONTINUE
  1175.       PROK = .FALSE.
  1176. 9999  RETURN
  1177.       END
  1178.       SUBROUTINE REDUCE
  1179.       INTEGER SP,MP,MPP1,MSTACK,MVAR,VARTOP,PSTACK(75),VAR(75),
  1180.      1    VARC(256),FIXV(75),FIXC(75),PRMASK(5)
  1181.       LOGICAL FAILSF,COMPIL
  1182.       COMMON /STACKS/SP,MP,MPP1,MSTACK,MVAR,VARTOP,PSTACK,VAR,
  1183.      1    VARC,FIXV,FIXC,PRMASK,FAILSF,COMPIL
  1184.       INTEGER SHL,SHR,RIGHT,CONV,GETC1
  1185. C      GLOBAL TABLES
  1186.       INTEGER V(446),VLOC(107),VINDX(13),C1(364),C1TRI(243),PRTB(129),
  1187.      1PRDTB(129),HDTB(129),PRLEN(129),CONTC(129),LEFTC(5),LEFTI(57),
  1188.      2CONTT(1),TRIPI(57),PRIND(107),NSY,NT,VLEN,VIL,C1W,C1L,NC1TRI,
  1189.      3PRTBL,PRDTBL,HDTBL,PRLENL,CONCL,LEFTCL,LEFTIL,CONTL,TRIPL,PRIL,
  1190.      4PACK,TOKEN,IDENTV,NUMBV,STRV,DIVIDE,EOFILE,PROCV,SEMIV,
  1191.      *DECL,DOV,ENDV,GROUPV,STMTV,SLISTV
  1192.       COMMON /SYNTAX/V,VLOC,VINDX,C1,C1TRI,PRTB,PRDTB,HDTB,PRLEN,CONTC,
  1193.      1LEFTC,LEFTI,CONTT,TRIPI,PRIND,NSY,NT,VLEN,VIL,C1W,C1L,NC1TRI,
  1194.      2PRTBL,PRDTBL,HDTBL,PRLENL,CONCL,LEFTCL,LEFTIL,CONTL,TRIPL,PRIL,
  1195.      3PACK,TOKEN,IDENTV,NUMBV,STRV,DIVIDE,EOFILE,PROCV,SEMIV,
  1196.      *DECL,DOV,ENDV,GROUPV,STMTV,SLISTV
  1197.       INTEGER I,J,PRD,K,L,M
  1198.       LOGICAL JL,ML,PROK
  1199.       EQUIVALENCE (J,JL),(M,ML)
  1200. C     PACK STACK TOP
  1201.       K = SP-4
  1202.       L = SP-1
  1203.       J = 0
  1204.           DO 100 I=K,L
  1205. 100       J = SHL(J,8)+PSTACK(I)
  1206.       LTEMP=PSTACK(SP)
  1207.       K=PRIND(LTEMP)+1
  1208.       L=PRIND(LTEMP+1)
  1209. C
  1210.           DO 200 PRD=K,L
  1211.           M = PRLEN(PRD)
  1212.           M = 8 * (M - 1)
  1213.           M = RIGHT (J, M)
  1214.           IF (M .NE. PRTB(PRD)) GO TO 200
  1215.           IF (.NOT. PROK(PRD)) GO TO 200
  1216.           MP = SP -PRLEN(PRD)+1
  1217.           MPP1 = MP+1
  1218.           J = HDTB(PRD)
  1219.           CALL SYNTH(PRDTB(PRD),J)
  1220.           SP = MP
  1221.           PSTACK(SP) = J
  1222.           VARTOP=RIGHT(VAR(SP),12)
  1223.           GO TO 9999
  1224. C
  1225. 200       CONTINUE
  1226. 300   CONTINUE
  1227. C     NO APPLICABLE PRODUCTION
  1228.       CALL ERROR(4,1)
  1229.       FAILSF = .FALSE.
  1230.       CALL SDUMP
  1231.       CALL RECOV
  1232. 9999  RETURN
  1233.       END
  1234.       SUBROUTINE CLOOP
  1235.       LOGICAL STACK
  1236.       INTEGER SP,MP,MPP1,MSTACK,MVAR,VARTOP,PSTACK(75),VAR(75),
  1237.      1    VARC(256),FIXV(75),FIXC(75),PRMASK(5)
  1238.       LOGICAL FAILSF,COMPIL
  1239.       COMMON /STACKS/SP,MP,MPP1,MSTACK,MVAR,VARTOP,PSTACK,VAR,
  1240.      1    VARC,FIXV,FIXC,PRMASK,FAILSF,COMPIL
  1241. C      GLOBAL TABLES
  1242.       INTEGER V(446),VLOC(107),VINDX(13),C1(364),C1TRI(243),PRTB(129),
  1243.      1PRDTB(129),HDTB(129),PRLEN(129),CONTC(129),LEFTC(5),LEFTI(57),
  1244.      2CONTT(1),TRIPI(57),PRIND(107),NSY,NT,VLEN,VIL,C1W,C1L,NC1TRI,
  1245.      3PRTBL,PRDTBL,HDTBL,PRLENL,CONCL,LEFTCL,LEFTIL,CONTL,TRIPL,PRIL,
  1246.      4PACK,TOKEN,IDENTV,NUMBV,STRV,DIVIDE,EOFILE,PROCV,SEMIV,
  1247.      *DECL,DOV,ENDV,GROUPV,STMTV,SLISTV
  1248.       COMMON /SYNTAX/V,VLOC,VINDX,C1,C1TRI,PRTB,PRDTB,HDTB,PRLEN,CONTC,
  1249.      1LEFTC,LEFTI,CONTT,TRIPI,PRIND,NSY,NT,VLEN,VIL,C1W,C1L,NC1TRI,
  1250.      2PRTBL,PRDTBL,HDTBL,PRLENL,CONCL,LEFTCL,LEFTIL,CONTL,TRIPL,PRIL,
  1251.      3PACK,TOKEN,IDENTV,NUMBV,STRV,DIVIDE,EOFILE,PROCV,SEMIV,
  1252.      *DECL,DOV,ENDV,GROUPV,STMTV,SLISTV
  1253.       INTEGER ACCLEN,ACCUM(32),TYPE,STYPE,EOFLAG,
  1254.      1    IDENT,NUMB,SPECL,STR,CONT,VALUE
  1255.       COMMON /SCANC/ACCLEN,ACCUM,TYPE,STYPE,EOFLAG,
  1256.      1    IDENT,NUMB,SPECL,STR,CONT,VALUE
  1257.       INTEGER SHL,SHR,RIGHT
  1258.       COMPIL = .TRUE.
  1259. 100   IF (.NOT. COMPIL) GO TO 9999
  1260.       IF (.NOT. STACK(0)) GO TO 400
  1261. C     STACK MAY HAVE SET COMPILING FALSE
  1262.       IF (.NOT.COMPIL) GO TO 9999
  1263.       SP = SP + 1
  1264.       IF (SP .LT. MSTACK) GO TO 300
  1265.           CALL ERROR(5,5)
  1266.           GO TO 9999
  1267. 300   PSTACK(SP) = TOKEN
  1268. C     INSERT ACCUM INTO VARC HERE
  1269.       IF (TOKEN .NE. NUMBV) GO TO 302
  1270.       CALL CONV(16)
  1271.       IF (VALUE.GE.0) GO TO 301
  1272.           CALL ERROR(6,1)
  1273.           VALUE = 0
  1274. 301   FIXV(SP) = VALUE
  1275. 302   VAR(SP) = VARTOP
  1276. 305   IF (ACCLEN .EQ. 0) GO TO 315
  1277.           DO 310 J=1,ACCLEN
  1278.           VARC(VARTOP) = ACCUM(J)
  1279.           VARTOP = VARTOP + 1
  1280.           IF (VARTOP .LE. MVAR) GO TO 310
  1281.               CALL ERROR(7,5)
  1282.               VARTOP = 1
  1283. 310       CONTINUE
  1284. 315   IF (TOKEN .NE. STRV) GO TO 360
  1285.       IF (STYPE .NE. CONT) GO TO 360
  1286.       CALL SCAN
  1287.       GO TO 305
  1288. 360   I = VARTOP-VAR(SP)
  1289.       IF (I .LT. 0) I = 1
  1290.       VAR(SP) = SHL(I,12) + VAR(SP)
  1291.       CALL SCAN
  1292.       GO TO 100
  1293. 400   CALL REDUCE
  1294.       GO TO 100
  1295. 9999  RETURN
  1296.       END
  1297.       SUBROUTINE PRSYM(CC,SYM)
  1298. C      GLOBAL TABLES
  1299.       INTEGER V(446),VLOC(107),VINDX(13),C1(364),C1TRI(243),PRTB(129),
  1300.      1PRDTB(129),HDTB(129),PRLEN(129),CONTC(129),LEFTC(5),LEFTI(57),
  1301.      2CONTT(1),TRIPI(57),PRIND(107),NSY,NT,VLEN,VIL,C1W,C1L,NC1TRI,
  1302.      3PRTBL,PRDTBL,HDTBL,PRLENL,CONCL,LEFTCL,LEFTIL,CONTL,TRIPL,PRIL,
  1303.      4PACK,TOKEN,IDENTV,NUMBV,STRV,DIVIDE,EOFILE,PROCV,SEMIV,
  1304.      *DECL,DOV,ENDV,GROUPV,STMTV,SLISTV
  1305.       COMMON /SYNTAX/V,VLOC,VINDX,C1,C1TRI,PRTB,PRDTB,HDTB,PRLEN,CONTC,
  1306.      1LEFTC,LEFTI,CONTT,TRIPI,PRIND,NSY,NT,VLEN,VIL,C1W,C1L,NC1TRI,
  1307.      2PRTBL,PRDTBL,HDTBL,PRLENL,CONCL,LEFTCL,LEFTIL,CONTL,TRIPL,PRIL,
  1308.      3PACK,TOKEN,IDENTV,NUMBV,STRV,DIVIDE,EOFILE,PROCV,SEMIV,
  1309.      *DECL,DOV,ENDV,GROUPV,STMTV,SLISTV
  1310.       INTEGER CC,SYM,SHL,SHR,RIGHT
  1311.       INTEGER PBUFF(30)
  1312.       K=VLOC(SYM+1)
  1313.       IF (SYM .GT. NT) GO TO 100
  1314.       L = V(K)
  1315.       CALL FORM(CC,V,K+1,K+L,NSY+1)
  1316.       GO TO 9999
  1317. 100   CONTINUE
  1318.       L = RIGHT(K,15)-1
  1319.       K = SHR(K,15)
  1320.       KP = 0
  1321.           DO 300 I=1,K,PACK
  1322.           L = L + 1
  1323.           LP = V(L)
  1324.           JP = PACK * 6
  1325.                DO 300 J=1,PACK
  1326.                JP = JP - 6
  1327.                KP = KP + 1
  1328.                IP = SHR(LP,JP)
  1329.                PBUFF(KP) = RIGHT(IP,6)+1
  1330. 300        CONTINUE
  1331. C
  1332.       CALL FORM(CC,PBUFF,1,K,30)
  1333. 9999  RETURN
  1334.       END
  1335.       INTEGER FUNCTION GETC1(I,J)
  1336.       INTEGER SHL,SHR,RIGHT
  1337. C      GLOBAL TABLES
  1338.       INTEGER V(446),VLOC(107),VINDX(13),C1(364),C1TRI(243),PRTB(129),
  1339.      1PRDTB(129),HDTB(129),PRLEN(129),CONTC(129),LEFTC(5),LEFTI(57),
  1340.      2CONTT(1),TRIPI(57),PRIND(107),NSY,NT,VLEN,VIL,C1W,C1L,NC1TRI,
  1341.      3PRTBL,PRDTBL,HDTBL,PRLENL,CONCL,LEFTCL,LEFTIL,CONTL,TRIPL,PRIL,
  1342.      4PACK,TOKEN,IDENTV,NUMBV,STRV,DIVIDE,EOFILE,PROCV,SEMIV,
  1343.      *DECL,DOV,ENDV,GROUPV,STMTV,SLISTV
  1344.       COMMON /SYNTAX/V,VLOC,VINDX,C1,C1TRI,PRTB,PRDTB,HDTB,PRLEN,CONTC,
  1345.      1LEFTC,LEFTI,CONTT,TRIPI,PRIND,NSY,NT,VLEN,VIL,C1W,C1L,NC1TRI,
  1346.      2PRTBL,PRDTBL,HDTBL,PRLENL,CONCL,LEFTCL,LEFTIL,CONTL,TRIPL,PRIL,
  1347.      3PACK,TOKEN,IDENTV,NUMBV,STRV,DIVIDE,EOFILE,PROCV,SEMIV,
  1348.      *DECL,DOV,ENDV,GROUPV,STMTV,SLISTV
  1349.       K = (NT+1)*I+J
  1350.       L = K/15+1
  1351.       L = C1(L)
  1352.       M = SHL(14-MOD(K,15),1)
  1353.       GETC1=RIGHT(SHR(L,M),2)
  1354.       RETURN
  1355.       END
  1356.       SUBROUTINE SCAN
  1357.       INTEGER GNC,SHL,SHR,RIGHT
  1358. C      GLOBAL TABLES
  1359.       INTEGER V(446),VLOC(107),VINDX(13),C1(364),C1TRI(243),PRTB(129),
  1360.      1PRDTB(129),HDTB(129),PRLEN(129),CONTC(129),LEFTC(5),LEFTI(57),
  1361.      2CONTT(1),TRIPI(57),PRIND(107),NSY,NT,VLEN,VIL,C1W,C1L,NC1TRI,
  1362.      3PRTBL,PRDTBL,HDTBL,PRLENL,CONCL,LEFTCL,LEFTIL,CONTL,TRIPL,PRIL,
  1363.      4PACK,TOKEN,IDENTV,NUMBV,STRV,DIVIDE,EOFILE,PROCV,SEMIV,
  1364.      *DECL,DOV,ENDV,GROUPV,STMTV,SLISTV
  1365.       COMMON /SYNTAX/V,VLOC,VINDX,C1,C1TRI,PRTB,PRDTB,HDTB,PRLEN,CONTC,
  1366.      1LEFTC,LEFTI,CONTT,TRIPI,PRIND,NSY,NT,VLEN,VIL,C1W,C1L,NC1TRI,
  1367.      2PRTBL,PRDTBL,HDTBL,PRLENL,CONCL,LEFTCL,LEFTIL,CONTL,TRIPL,PRIL,
  1368.      3PACK,TOKEN,IDENTV,NUMBV,STRV,DIVIDE,EOFILE,PROCV,SEMIV,
  1369.      *DECL,DOV,ENDV,GROUPV,STMTV,SLISTV
  1370.       INTEGER ACCLEN,ACCUM(32),TYPE,STYPE,EOFLAG,
  1371.      1    IDENT,NUMB,SPECL,STR,CONT,VALUE
  1372.       COMMON /SCANC/ACCLEN,ACCUM,TYPE,STYPE,EOFLAG,
  1373.      1    IDENT,NUMB,SPECL,STR,CONT,VALUE
  1374. C     SCAN FINDS THE NEXT ENTITY IN THE INPUT STREAM
  1375. C     THE RESULTING ITEM IS PLACED INTO ACCUM (OF LENGTH
  1376. C     ACCLEN).  TYPE AND STYPE IDENTIFY THE ITEM AS SHOWN
  1377. C     BELOW --
  1378. C     TYPE     STYPE         ITEM           VARIABLE
  1379. C       1        NA        END OF FILE       EOFLAG
  1380. C       2       CONT       IDENTIFIER        IDENT
  1381. C       3       RADIX      NUMBER            NUMB
  1382. C       4        NA        SPEC CHAR         SPECL
  1383. C       5        CONT      STRING            STR
  1384. C
  1385.       INTEGER IBUFF(80),OBUFF(120),IBP,OBP,INPTR,
  1386.      1    INSTK(7),ITRAN(256),OTRAN(64)
  1387.       COMMON /FILES/IBUFF,OBUFF,IBP,OBP,INPTR,
  1388.      1    INSTK,ITRAN,OTRAN
  1389.       INTEGER MACROS(500),MAXMAC,CURMAC,MACTOP
  1390.       COMMON /MACRO/MACROS,MAXMAC,CURMAC,MACTOP
  1391.       INTEGER SP,MP,MPP1,MSTACK,MVAR,VARTOP,PSTACK(75),VAR(75),
  1392.      1    VARC(256),FIXV(75),FIXC(75),PRMASK(5)
  1393.       LOGICAL FAILSF,COMPIL
  1394.       COMMON /STACKS/SP,MP,MPP1,MSTACK,MVAR,VARTOP,PSTACK,VAR,
  1395.      1    VARC,FIXV,FIXC,PRMASK,FAILSF,COMPIL
  1396.       FAILSF = .TRUE.
  1397. 10    I=GNC(0)
  1398.       ACCLEN = 0
  1399.       IF (STYPE .NE. CONT) GO TO 51
  1400.       GO TO (100,200,51,51,499), TYPE
  1401. C     DEBLANK INPUT
  1402. 50    I = GNC(0)
  1403. 51    IF (I .EQ. 0) GO TO 100
  1404.       GO TO (50,300,300,300,300,300,300,300,300,300,300,
  1405.      1      200,200,200,200,200,200,200,200,200,200,
  1406.      2      200,200,200,200,200,200,200,200,200,200,
  1407.      3      200,200,200,200,200,200,
  1408.      4      400,400,400,400,400,400,400,400,400,400,
  1409.      5      400,400,400,400,400,400,400,400,400,400,
  1410.      6      400,400,400,400,400,400,400),I
  1411. C     END OF FILE
  1412. 100   TYPE = EOFLAG
  1413.       GO TO 999
  1414. C     IDENTIFIER
  1415. 200   TYPE = IDENT
  1416. 210   ACCLEN = ACCLEN + 1
  1417.       ACCUM(ACCLEN) = I
  1418.       IF (ACCLEN .GE. 32) GO TO 220
  1419. 215   I = GNC(0)
  1420. C     CHECK FOR $ WITHIN AN IDENTIFIER
  1421.       IF (I.EQ.38) GO TO 215
  1422.       IF ((I .GE. 2) .AND. (I .LE. 37)) GO TO 210
  1423.       CALL DECIBP
  1424.       STYPE = 0
  1425.       GO TO 999
  1426. 220   STYPE = CONT
  1427.       GO TO 999
  1428. C
  1429. C
  1430. C     NUMBER
  1431. 300   TYPE = NUMB
  1432.       STYPE = 0
  1433. 310   ACCLEN = ACCLEN +1
  1434.       ACCUM(ACCLEN) = I
  1435.       IF (ACCLEN .EQ. 32) GO TO 350
  1436. 312   I = GNC(0)
  1437. C     CHECK FOR $ IN NUMBER
  1438.       IF (I.EQ.38) GO TO 312
  1439.       IF ((I .GE. 2) .AND. (I .LE. 17)) GO TO 310
  1440. C     CHECK RADIX
  1441.       IF (I .EQ. 19) STYPE = 16
  1442.       IF (I .EQ. 28) STYPE = 8
  1443.       IF (I .EQ. 26) STYPE = 8
  1444.       IF (STYPE .NE. 0) GO TO 325
  1445.       IF (ACCUM(ACCLEN) .EQ. 13) GO TO 315
  1446.       IF (ACCUM(ACCLEN) .EQ. 15) GO TO 318
  1447.       STYPE = 10
  1448.       GO TO 320
  1449. 315   STYPE = 2
  1450.       ACCLEN = ACCLEN - 1
  1451.       GO TO 320
  1452. 318   STYPE = 10
  1453.       ACCLEN = ACCLEN -1
  1454. 320   CALL DECIBP
  1455. 325       DO 330 I=1,ACCLEN
  1456.           J = ACCUM(I) -2
  1457.           IF (J.GE.STYPE) GO TO 340
  1458. 330       CONTINUE
  1459.       GO TO 999
  1460. 340   STYPE = 1
  1461.       GO TO 999
  1462. 350   STYPE = 1
  1463. 351   I = GNC(0)
  1464.       IF ((I .GE. 2) .AND. (I .LE. 17)) GO TO 351
  1465.       CALL DECIBP
  1466.       GO TO 999
  1467. C     SPECIAL CHARACTER (TEST FOR QUOTE)
  1468. 400   CONTINUE
  1469.       IF (I .EQ. 46) GO TO 500
  1470.       TYPE = SPECL
  1471.       ACCLEN = 1
  1472.       ACCUM(1) = I
  1473.       IF (I .NE. 41) GO TO 999
  1474.       I = GNC(0)
  1475. C     LOOK FOR COMMENT
  1476.       IF (I .EQ. 47) GO TO 410
  1477.       CALL DECIBP
  1478.       GO TO 999
  1479. C     COMMENT FOUND
  1480. 410   I = GNC (0)
  1481.       IF (I .EQ. 0) GO TO 100
  1482.       IF (I .NE. 47) GO TO 410
  1483.       I = GNC(0)
  1484.       IF (I .EQ. 41) GO TO 420
  1485.       CALL DECIBP
  1486.       GO TO 410
  1487. 420   ACCLEN = 0
  1488.       GO TO 50
  1489. C     CONTINUE WITH STRING
  1490. 499   CALL DECIBP
  1491. C     STRING QUOTE
  1492. 500   TYPE = STR
  1493.       ACCUM(1) = 1
  1494. 510   I = GNC(0)
  1495.       IF (I .EQ. 46) GO TO 530
  1496. 520   ACCLEN = ACCLEN +1
  1497.       ACCUM(ACCLEN) = I
  1498.       IF (ACCLEN .LT. 32) GO TO 510
  1499.       STYPE = CONT
  1500.       GO TO 999
  1501. C     STRING QUOTE FOUND (ENDING, MAYBE)
  1502. 530   I = GNC(0)
  1503.       IF (I. EQ. 46) GO TO 520
  1504.       CALL DECIBP
  1505.       STYPE = 0
  1506. C     THE CODE BELOW IS HERE TO SATISFY THE SYNTAX ANALYZER
  1507. 999   IF (TYPE.EQ.EOFLAG) GO TO 2000
  1508.       TOKEN = STRV
  1509.       IF (TYPE .EQ. STR) RETURN
  1510.       TOKEN = 0
  1511.       IF (ACCLEN .GT. VIL) GO TO 3000
  1512. C     SEARCH FOR TOKEN IN VOCABULARY
  1513.       J = VINDX(ACCLEN)+1
  1514.       K = VINDX(ACCLEN+1)
  1515.           DO 1300 I=J,K
  1516.           L = VLOC(I)
  1517.           LP = L + V(L)
  1518.           L = L + 1
  1519.           N = 1
  1520.               DO 1200 M=L,LP
  1521.               IF (ACCUM(N) .NE. V(M)) GO TO 1300
  1522. 1200          N = N + 1
  1523.           TOKEN = I-1
  1524.           GO TO 1400
  1525. 1300      CONTINUE
  1526.       GO TO 3000
  1527. 1400  RETURN
  1528. 2000  TOKEN = EOFILE
  1529.       RETURN
  1530. 3000  IF (TYPE .NE. IDENT) GO TO 4000
  1531.       TOKEN = IDENTV
  1532.       L = MACTOP
  1533. 3100  L = MACROS(L)
  1534.       IF (L .EQ. 0) GO TO 3400
  1535.       K = MACROS(L+1)
  1536.       IF (K .NE. ACCLEN) GO TO 3100
  1537.           I = L+2
  1538.           DO 3200 J=1,K
  1539.           IF (ACCUM(J) .NE. MACROS(I)) GO TO 3100
  1540. 3200      I = I + 1
  1541. C     MACRO FOUND, SET-UP MACRO TABLE AND RESCAN
  1542.       CURMAC = CURMAC - 1
  1543.       IF (CURMAC .GT. MACTOP) GO TO 3300
  1544.       CALL ERROR(8,5)
  1545.       CURMAC = MAXMAC
  1546. 3300      J = I + MACROS(I)
  1547.           MACROS(CURMAC) = SHL(I,12)+J
  1548.       GO TO 10
  1549. 3400  CONTINUE
  1550. 4000  IF (TYPE .EQ. NUMB) TOKEN = NUMBV
  1551.       RETURN
  1552.       END
  1553.       INTEGER FUNCTION WRDATA(SY)
  1554.       INTEGER SY
  1555.       INTEGER VARB,INTR,PROC,LABEL,LITER
  1556.       COMMON /TYPES/VARB,INTR,PROC,LABEL,LITER
  1557.       LOGICAL DFLAG
  1558.       INTEGER OPCVAL(51),OPR,ADR,VLU,DEF,LIT,LIN,
  1559.      *NOP,ADD,ADC,SUB,SBC,MUL,DIV,REM,NEG,AND,IOR,XOR,NOT,EQL,LSS,GTR,
  1560.      *NEQ,LEQ,GEQ,INX,TRA,TRC,PRO,RET,STO,STD,XCH,DEL,DAT,LOD,BIF,INC,
  1561.      *CSE,END,ENB,ENP,HAL,RTL,RTR,SFL,SFR,HIV,LOV,CVA,ORG,DRT,ENA,DIS,
  1562.      *AX1,AX2,AX3
  1563.       COMMON /OPCOD/ OPCVAL,OPR,ADR,VLU,DEF,LIT,LIN,
  1564.      *NOP,ADD,ADC,SUB,SBC,MUL,DIV,REM,NEG,AND,IOR,XOR,NOT,EQL,LSS,GTR,
  1565.      *NEQ,LEQ,GEQ,INX,TRA,TRC,PRO,RET,STO,STD,XCH,DEL,DAT,LOD,BIF,INC,
  1566.      *CSE,END,ENB,ENP,HAL,RTL,RTR,SFL,SFR,HIV,LOV,CVA,ORG,DRT,ENA,DIS,
  1567.      *AX1,AX2,AX3
  1568. C     IF SY IS NEGATIVE, THE CALL COMES FROM SYNTH -- DATA IS INSERTED
  1569. C     INLINE BY CALLING LIT WITH EACH BYTE VALUE.
  1570. C
  1571. C     IF SY IS POSITIVE, THE CALL COMES FROM DUMPIN --
  1572. C     WRDATA WRITES DATA INTO THE OUTPUT FILE FROM SYMBOL AT LOCATION
  1573. C     'SY'  EACH BYTE VALUE IS WRITTEN AS A PAIR OF BASE 32 DIGITS.
  1574. C     THE HIGH ORDER BIT OF THE FIRST DIGIT IS 1, AND ALL REMAINING HIGH
  1575. C     ORDER DIGITS ARE ZERO. THE VALUE RETURNED BY WRDATA IS THE TOTAL
  1576. C     NUMBER OF BYTES WRITTEN.
  1577. C      GLOBAL TABLES
  1578.       INTEGER V(446),VLOC(107),VINDX(13),C1(364),C1TRI(243),PRTB(129),
  1579.      1PRDTB(129),HDTB(129),PRLEN(129),CONTC(129),LEFTC(5),LEFTI(57),
  1580.      2CONTT(1),TRIPI(57),PRIND(107),NSY,NT,VLEN,VIL,C1W,C1L,NC1TRI,
  1581.      3PRTBL,PRDTBL,HDTBL,PRLENL,CONCL,LEFTCL,LEFTIL,CONTL,TRIPL,PRIL,
  1582.      4PACK,TOKEN,IDENTV,NUMBV,STRV,DIVIDE,EOFILE,PROCV,SEMIV,
  1583.      *DECL,DOV,ENDV,GROUPV,STMTV,SLISTV
  1584.       COMMON /SYNTAX/V,VLOC,VINDX,C1,C1TRI,PRTB,PRDTB,HDTB,PRLEN,CONTC,
  1585.      1LEFTC,LEFTI,CONTT,TRIPI,PRIND,NSY,NT,VLEN,VIL,C1W,C1L,NC1TRI,
  1586.      2PRTBL,PRDTBL,HDTBL,PRLENL,CONCL,LEFTCL,LEFTIL,CONTL,TRIPL,PRIL,
  1587.      3PACK,TOKEN,IDENTV,NUMBV,STRV,DIVIDE,EOFILE,PROCV,SEMIV,
  1588.      *DECL,DOV,ENDV,GROUPV,STMTV,SLISTV
  1589.       INTEGER SYMBOL(4000),SYMTOP,MAXSYM,SYMLOC,SYMLEN,SYMCNT,SYMABS,
  1590.      1    ACNT
  1591.       COMMON /SYM/SYMBOL,SYMTOP,MAXSYM,SYMLOC,SYMLEN,SYMCNT,SYMABS,
  1592.      1    ACNT
  1593.       INTEGER ASCII(64)
  1594.       COMMON /ASC/ASCII
  1595.       INTEGER SHL, SHR, RIGHT
  1596.       NBYTES = 0
  1597.       J = IABS(SY)
  1598. C
  1599. C     CHECK PRECISION OF VALUE
  1600.       K = SYMBOL(J+1)
  1601. C     SET DFLAG TO TRUE IF WE ARE DUMPING A VARIABLE OR LABEL NAME
  1602.       L = RIGHT(K,4)
  1603.       DFLAG = (L.EQ.LABEL).OR.(L.EQ.VARB).OR.(L.EQ.PROC)
  1604.       L = RIGHT(SHR(K,4),4)
  1605.       IF ((L.GT.2).OR.DFLAG) GO TO 400
  1606. C
  1607. C     SINGLE OR DOUBLE BYTE CONSTANT
  1608.       KP = SHR(K,8)
  1609.       K = 16
  1610.       NBYTES = L
  1611. C
  1612. 200   IF (L.LE.0) GO TO 9999
  1613. C     PROCESS NEXT BYTE
  1614.           L = L - 1
  1615.           N = RIGHT(SHR(KP,L*8),8)
  1616.           IF (SY.LT.0) GO TO 350
  1617. C         N IS THEN WRITTEN IN TWO PARTS
  1618.               DO 300 I=1,2
  1619.               K  = RIGHT(SHR(N,(2-I)*4),4) + K + 2
  1620.               CALL PAD(1,K,1)
  1621. 300           K = 0
  1622. C
  1623.           GO TO 200
  1624. C
  1625. C     OTHERWISE EMIT DATA INLINE
  1626. 350   CALL EMIT(N,LIT)
  1627.       GO TO 200
  1628. C
  1629. C    WRITE OUT STRING DATA
  1630. 400   CONTINUE
  1631.       L = RIGHT(IABS(SYMBOL(J)),12)
  1632.       J = J + 1
  1633.       K = 16
  1634.       N = - 1
  1635.       NP = (PACK-1)*6
  1636.       LP = 1
  1637. C
  1638. 500   IF (LP.GT.L) GO TO 9999
  1639.       IF (N.GE.0) GO TO 600
  1640.           N = NP
  1641.           J = J + 1
  1642.           M = SYMBOL(J)
  1643. C
  1644. 600   CONTINUE
  1645.       NBYTES = NBYTES + 1
  1646.       KP = RIGHT(SHR(M,N),6)+1
  1647.       IF (DFLAG) GO TO 900
  1648.           KP = ASCII(KP)
  1649. C
  1650. C    WRITE OUT BOTH HEX VALUES
  1651.       IF (SY.LT.0) GO TO 800
  1652. C
  1653.           DO 700 IP=1,2
  1654.           K = RIGHT(SHR(KP,(2-IP)*4),4) + K + 2
  1655.           CALL PAD(1,K,1)
  1656. 700       K = 0
  1657. 710   N = N - 6
  1658.       LP = LP + 1
  1659.       GO TO 500
  1660. C
  1661. C     EMIT STRING DATA INLINE
  1662. 800   CALL EMIT(KP,LIT)
  1663.       GO TO 710
  1664. C
  1665. C     WRITE OUT THE VARIABLE OR LABEL NAME
  1666. 900   CALL PAD(1,KP,1)
  1667.       GO TO 710
  1668. 9999  WRDATA = NBYTES
  1669.       RETURN
  1670.       END
  1671.       SUBROUTINE DUMPCH
  1672. C     DUMP THE SYMBOLIC NAMES FOR THE SIMULATOR
  1673.       INTEGER SHR,SHL,RIGHT
  1674.       INTEGER VARB,INTR,PROC,LABEL,LITER
  1675.       COMMON /TYPES/VARB,INTR,PROC,LABEL,LITER
  1676.       INTEGER WRDATA
  1677.       INTEGER SYMBOL(4000),SYMTOP,MAXSYM,SYMLOC,SYMLEN,SYMCNT,SYMABS,
  1678.      1    ACNT
  1679.       COMMON /SYM/SYMBOL,SYMTOP,MAXSYM,SYMLOC,SYMLEN,SYMCNT,SYMABS,
  1680.      1    ACNT
  1681.       INTEGER CONTRL(64)
  1682.       COMMON /CNTRL/CONTRL
  1683.       CALL WRITEL(0)
  1684.       KT = CONTRL(26)
  1685.       CONTRL(26) = CONTRL(32)
  1686.       KQ = CONTRL(34)
  1687.       CONTRL(34) = CONTRL(33)
  1688. C
  1689.       K = 0
  1690.       I = 2
  1691.       IF (SYMBOL(2).EQ.0) I=0
  1692.       CALL PAD(1,41,1)
  1693. 200   IF (I.EQ.0) GO TO 1000
  1694.           K = K + 1
  1695.           J = SYMBOL(I+2)
  1696.           IF (J.LT.0) GO TO 400
  1697.           J = MOD(J,16)
  1698.           IF ((J.NE.LABEL).AND.(J.NE.VARB).AND.(J.NE.PROC)) GO TO 400
  1699. C         CHECK FOR NO CHARACTERS
  1700.           J = IABS(SYMBOL(I+1))
  1701. C         CHECK FOR NO WORDS ALLOCATED
  1702.           IF (SHR(J,12).EQ.0) GO TO 400
  1703. C         WRITE SYMBOL NUMBER
  1704.           M = K
  1705.               DO 300 L=1,3
  1706.               CALL PAD(1,MOD(M,32)+2,1)
  1707.               M = M/32
  1708. 300           CONTINUE
  1709. C         NOW WRITE THE STRING
  1710.           M = WRDATA(I+1)
  1711.           CALL PAD(1,41,1)
  1712. 400       I = SYMBOL(I)
  1713.       GO TO 200
  1714. C
  1715. 1000  CALL PAD(1,41,1)
  1716.       CALL WRITEL(0)
  1717.       CONTRL(26) = KT
  1718.       CONTRL(34) = KQ
  1719.       RETURN
  1720.       END
  1721.       SUBROUTINE SYNTH(PROD,SYMM)
  1722. C
  1723. C    MP == LEFT ,  SP == RIGHT
  1724. C
  1725. C      GLOBAL TABLES
  1726.       INTEGER V(446),VLOC(107),VINDX(13),C1(364),C1TRI(243),PRTB(129),
  1727.      1PRDTB(129),HDTB(129),PRLEN(129),CONTC(129),LEFTC(5),LEFTI(57),
  1728.      2CONTT(1),TRIPI(57),PRIND(107),NSY,NT,VLEN,VIL,C1W,C1L,NC1TRI,
  1729.      3PRTBL,PRDTBL,HDTBL,PRLENL,CONCL,LEFTCL,LEFTIL,CONTL,TRIPL,PRIL,
  1730.      4PACK,TOKEN,IDENTV,NUMBV,STRV,DIVIDE,EOFILE,PROCV,SEMIV,
  1731.      *DECL,DOV,ENDV,GROUPV,STMTV,SLISTV
  1732.       COMMON /SYNTAX/V,VLOC,VINDX,C1,C1TRI,PRTB,PRDTB,HDTB,PRLEN,CONTC,
  1733.      1LEFTC,LEFTI,CONTT,TRIPI,PRIND,NSY,NT,VLEN,VIL,C1W,C1L,NC1TRI,
  1734.      2PRTBL,PRDTBL,HDTBL,PRLENL,CONCL,LEFTCL,LEFTIL,CONTL,TRIPL,PRIL,
  1735.      3PACK,TOKEN,IDENTV,NUMBV,STRV,DIVIDE,EOFILE,PROCV,SEMIV,
  1736.      *DECL,DOV,ENDV,GROUPV,STMTV,SLISTV
  1737.       INTEGER PROD,SYMM,SHL,SHR,RIGHT,ENTER,LOOKUP,WRDATA
  1738.       INTEGER CONTRL(64)
  1739.       COMMON /CNTRL/CONTRL
  1740.       INTEGER MSSG(77)
  1741.       COMMON /MESSAG/MSSG
  1742.       INTEGER SP,MP,MPP1,MSTACK,MVAR,VARTOP,PSTACK(75),VAR(75),
  1743.      1    VARC(256),FIXV(75),FIXC(75),PRMASK(5)
  1744.       LOGICAL FAILSF,COMPIL
  1745.       COMMON /STACKS/SP,MP,MPP1,MSTACK,MVAR,VARTOP,PSTACK,VAR,
  1746.      1    VARC,FIXV,FIXC,PRMASK,FAILSF,COMPIL
  1747.       INTEGER MACROS(500),MAXMAC,CURMAC,MACTOP
  1748.       COMMON /MACRO/MACROS,MAXMAC,CURMAC,MACTOP
  1749.       INTEGER VARB,INTR,PROC,LABEL,LITER
  1750.       COMMON /TYPES/VARB,INTR,PROC,LABEL,LITER
  1751.       INTEGER BLOCK(30),DOPAR(30),MACBLK(30),CURBLK,MAXBLK,BLKSYM
  1752.       INTEGER PROCTP(30)
  1753.       COMMON /BLK/BLOCK,DOPAR,MACBLK,CURBLK,MAXBLK,BLKSYM
  1754.      1,PROCTP
  1755.       INTEGER SYMBOL(4000),SYMTOP,MAXSYM,SYMLOC,SYMLEN,SYMCNT,SYMABS,
  1756.      1    ACNT
  1757.       COMMON /SYM/SYMBOL,SYMTOP,MAXSYM,SYMLOC,SYMLEN,SYMCNT,SYMABS,
  1758.      1    ACNT
  1759.       INTEGER OPCVAL(51),OPR,ADR,VLU,DEF,LIT,LIN,
  1760.      *NOP,ADD,ADC,SUB,SBC,MUL,DIV,REM,NEG,AND,IOR,XOR,NOT,EQL,LSS,GTR,
  1761.      *NEQ,LEQ,GEQ,INX,TRA,TRC,PRO,RET,STO,STD,XCH,DEL,DAT,LOD,BIF,INC,
  1762.      *CSE,END,ENB,ENP,HAL,RTL,RTR,SFL,SFR,HIV,LOV,CVA,ORG,DRT,ENA,DIS,
  1763.      *AX1,AX2,AX3
  1764.       COMMON /OPCOD/ OPCVAL,OPR,ADR,VLU,DEF,LIT,LIN,
  1765.      *NOP,ADD,ADC,SUB,SBC,MUL,DIV,REM,NEG,AND,IOR,XOR,NOT,EQL,LSS,GTR,
  1766.      *NEQ,LEQ,GEQ,INX,TRA,TRC,PRO,RET,STO,STD,XCH,DEL,DAT,LOD,BIF,INC,
  1767.      *CSE,END,ENB,ENP,HAL,RTL,RTR,SFL,SFR,HIV,LOV,CVA,ORG,DRT,ENA,DIS,
  1768.      *AX1,AX2,AX3
  1769.       INTEGER POLISH(30),MAXPOL,POLTOP,POLCNT,POLCHR(18)
  1770.       COMMON /POLE/POLISH,MAXPOL,POLTOP,POLCNT,POLCHR
  1771.       INTEGER ASCII(64)
  1772.       COMMON /ASC/ASCII
  1773.       INTEGER INTPRO(8)
  1774.       COMMON /INTER/INTPRO
  1775.       IF(CONTRL(12).NE.0) CALL REDPR(PROD,SYMM)
  1776. C    1     1     2     3     4     5     6     7     8     9    10
  1777. C    2    11    12    13    14    15    16    17    18    19    20
  1778. C    3    21    22    23    24    25    26    27    28    29    30
  1779. C    4    31    32    33    34    35    36    37    38    39    40
  1780. C    5    41    42    43    44    45    46    47    48    49    50
  1781. C    6    51    52    53    54    55    56    57    58    59    60
  1782. C    7    61    62    63    64    65    66    67    68    69    70
  1783. C    8    71    72    73    74    75    76    77    78    79    80
  1784. C    9    81    82    83    84    85    86    87    88    89    90
  1785. C    A    91    92    93    94    95    96    97    98    99   100
  1786. C    B   101   102   103   104   105   106   107   108   109   110
  1787. C    C   111   112   113   114   115   116   117   118   119   120
  1788. C    D   121   122   123   124   125   126   127   128   129   130
  1789.       GO TO (
  1790.      1    100,99999,99999,99999,99999,  600,99999,  800,99999,99999,
  1791.      2  99999,  800, 1300, 1340, 1360,99999,99999, 1500, 1600,99999,
  1792.      3   1800, 1900, 2000, 2100, 2200, 2300, 2400, 2500, 2600, 2700,
  1793.      4   2800, 2900,99999, 3100, 3200, 3300, 3400, 3500, 3540, 3600,
  1794.      5   3700, 3800, 3700, 4000, 4100, 4200, 4300, 4350, 4400, 4500,
  1795.      6   4600, 4700, 5000,99999,99999,99999,99999,99999, 5300, 5600,
  1796.      7   5610, 5620, 5610, 5400, 5500,99999, 5700, 5800, 5900,99999,
  1797.      8   6100, 6400, 6300, 6400, 6500, 6600, 6500, 6800, 6900, 6800,
  1798.      9   7100, 7100,99999,99999,99999, 7500,99999, 7600, 7700,99999,
  1799.      1   7900,99999, 8100,99999, 8300, 8400, 8400, 8400, 8400, 8400,
  1800.      2   8400,99999, 9300, 9300, 9300, 9300, 9400,99999,10000,10000,
  1801.      3  10000,10300,10310,10320,10400,10500,99999,10550,10560,10600,
  1802.      4  10700,10800,10900,11000,11100,11200,11300,11400),PROD
  1803. C     P R O D U C T I O N S
  1804. C     <PROGRAM> ::= <STATEMENT LIST>
  1805. C     <STATEMENT LIST> ::= <STATEMENT>
  1806. 100   CONTINUE
  1807.       IF (MP .NE. 5) CALL ERROR(10,1)
  1808.       COMPIL = .FALSE.
  1809.       CALL EXITB
  1810.       GO TO 99999
  1811. C     <STATEMENT LIST> ::= <STATEMENT LIST> <STATEMENT>
  1812. C     <STATEMENT> ::= <BASIC STATEMENT>
  1813. C     <STATEMENT> ::= <IF STATEMENT>
  1814. C     <BASIC STATEMENT> ::= <ASSIGNMENT> ;
  1815. 600   IF (ACNT .LE. 0) GO TO 630
  1816.       LTEMP=MAXSYM-ACNT
  1817.       I=SYMBOL(LTEMP)
  1818.       ACNT = ACNT - 1
  1819.       IF (I.GT.0) GO TO 610
  1820.           CALL EMIT(XCH,OPR)
  1821.           GO TO 620
  1822. 610   J = SYMBOL(I-1)
  1823.       CALL EMIT(SHR(J,16),ADR)
  1824. 620   IF(ACNT.GT.0) CALL EMIT(STO,OPR)
  1825.       GO TO 600
  1826. 630   I = STD
  1827.       GO TO 88888
  1828. C     <BASIC STATEMENT> ::= <GROUP> ;
  1829. C     <BASIC STATEMENT> ::= <PROCEDURE DEFINITION> ;
  1830. 800   CONTINUE
  1831.       I = DOPAR(CURBLK)
  1832.       I = RIGHT(I,2)
  1833.       IF (I.EQ.0) GO TO 99999
  1834.       CALL ERROR(11,1)
  1835.       GO TO 99999
  1836. C     <BASIC STATEMENT> ::= <RETURN STATEMENT> ;
  1837. C     <BASIC STATEMENT> ::= <CALL STATEMENT> ;
  1838. C     <BASIC STATEMENT> ::= <GO TO STATEMENT> ;
  1839. C     <BASIC STATEMENT> ::= <DECLARATION STATEMENT> ;
  1840. C     <BASIC STATEMENT> ::= HALT
  1841. 1300  I = HAL
  1842.       GO TO 88888
  1843. C     <BASIC STATEMENT> ::= ENABLE;
  1844. 1340  CONTINUE
  1845.       I = ENA
  1846.       GO TO 88888
  1847. C     <BASIC STATEMENT> ::= DISABLE;
  1848. 1360  CONTINUE
  1849.       I = DIS
  1850.       GO TO 88888
  1851. C     <BASIC STATEMENT> ::= ;
  1852. C     <BASIC STATEMENT> ::= <LABEL DEFINITION> <BASIC STATEMENT>
  1853. 1500  I = FIXV(MP)
  1854.       GO TO 1610
  1855. C     <IF STATEMENT> ::= <IF CLAUSE> <STATEMENT>
  1856. 1600  I = FIXV(MP)
  1857. 1610  J = SYMBOL(I-1)
  1858.       CALL EMIT(SHR(J,16),DEF)
  1859.       SYMBOL(I+1) = 64+LABEL
  1860.       GO TO 99999
  1861. C     <IF STATEMENT> ::= <IF CLAUSE> <TRUE PART> <STATEMENT>
  1862. C     <IF STATEMENT> ::= <LABEL DEFINITION> <IF STATEMENT>
  1863. C     <IF CLAUSE> ::= IF <EXPRESSION> THEN
  1864. 1800  I = ENTER(-LABEL)
  1865.       J = SYMBOL(I-1)
  1866.       CALL EMIT(SHR(J,16),VLU)
  1867.       CALL EMIT(TRC,OPR)
  1868.       FIXV(MP) = I
  1869.       GO TO 99999
  1870. C     <TRUE PART> ::= <BASIC STATEMENT> ELSE
  1871. 1900  I = ENTER(-LABEL)
  1872.       J = SYMBOL(I-1)
  1873.       CALL EMIT(SHR(J,16),VLU)
  1874.       CALL EMIT(TRA,OPR)
  1875.       J = FIXV(MP-1)
  1876.       FIXV(MP-1) = I
  1877.       I = J
  1878.       GO TO 1610
  1879. C     <GROUP> ::= <GROUP HEAD> <ENDING>
  1880. 2000  IF (FIXV(SP).GT.0) CALL ERROR(12,1)
  1881.       IF (FIXC(SP).LT.0) FIXC(MP) = 0
  1882.       I = DOPAR(CURBLK+1)
  1883.       J = RIGHT(I,2) + 1
  1884.       I = SHR(I,2)
  1885.       GO TO (2060,2050,2040,2005),J
  1886. C     GENERATE DESTINATION OF CASE BRANCH
  1887. 2005  J = RIGHT(I,14)
  1888.       K = SHR(SYMBOL(J-1),16)
  1889.       CALL EMIT(K,DEF)
  1890.       M = SHR(SYMBOL(J+1),8)
  1891.       SYMBOL(J+1) = RIGHT(SYMBOL(J+1),8)
  1892. C     M IS SYMBOL NUMBER OF LABEL AT END OF JUMP TABLE
  1893.       CALL EMIT(CSE,OPR)
  1894. C     DEFINE THE JUMP TABLE
  1895.       I = SHR(I,14)
  1896. C     REVERSE THE LABEL LIST
  1897.       L = 0
  1898. 2010  IF (I.EQ.0) GO TO 2020
  1899.           K = SYMBOL(I+1)
  1900.           SYMBOL(I+1) = SHL(L,8)+RIGHT(K,8)
  1901.           L = I
  1902.           I = SHR(K,8)
  1903.           GO TO 2010
  1904. C     EMIT LIST STARTING AT L
  1905. 2020      I = SYMBOL(L+1)
  1906.           SYMBOL(L+1) = 64 + LABEL
  1907.           J = SHR(I,8)
  1908.           IF (J.EQ.0) GO TO 2030
  1909.           K = SHR(SYMBOL(L-1),16)
  1910. 2025      CALL EMIT(K,VLU)
  1911.           CALL EMIT(AX2,OPR)
  1912.           L = J
  1913.           GO TO 2020
  1914. 2030  CONTINUE
  1915. C     DEFINE END OF JUMP TABLE
  1916.       CALL EMIT(M,DEF)
  1917.       GO TO 99999
  1918. C     DEFINE END OF WHILE STATEMENT
  1919. 2040  J = SHR(I,14)
  1920.       I = RIGHT(I,14)
  1921.       CALL EMIT(J,VLU)
  1922.       CALL EMIT(TRA,OPR)
  1923.       CALL EMIT(I,DEF)
  1924.       GO TO 99999
  1925. C     END OF ITERATIVE STATEMENT
  1926. 2050  K = FIXV(MP)
  1927.       IF (K.EQ.0) GO TO 2040
  1928. C     OTHERWISE INCREMENT VARIABLE
  1929.       CALL EMIT(K,VLU)
  1930.       CALL EMIT(INC,OPR)
  1931.       CALL EMIT(K,ADR)
  1932.       CALL EMIT(STD,OPR)
  1933. C     DEFINE ENDING BRANCH AND LABEL
  1934.       GO TO 2040
  1935. 2060  I = END
  1936.       GO TO 88888
  1937. C     <GROUP HEAD> ::= DO ;
  1938. 2100  CALL ENTERB
  1939.       I = ENB
  1940.       GO TO 88888
  1941. C     <GROUP HEAD> ::= DO <STEP DEFINITION> ;
  1942. 2200  CALL ENTERB
  1943.       DOPAR(CURBLK) = 1 +  SHL(FIXV(MP+1),2)
  1944.       GO TO 99999
  1945. C     <GROUP HEAD> ::= DO <WHILE CLAUSE> ;
  1946. 2300  CALL ENTERB
  1947.       DOPAR(CURBLK) = 2 + SHL(FIXV(MP+1),2)
  1948.       GO TO 99999
  1949. C     <GROUP HEAD> ::= DO <CASE SELECTOR> ;
  1950. 2400  CALL ENTERB
  1951.       K = ENTER(-(64+LABEL))
  1952.       K = SHR(SYMBOL(K-1),16)
  1953. C     K IS LABEL AFTER CASE JUMP TABLE
  1954.       I = ENTER(-(SHL(K,8)+64+LABEL))
  1955.       J = SHR(SYMBOL(I-1),16)
  1956.       CALL EMIT(J,VLU)
  1957.       CALL EMIT(AX1,OPR)
  1958.       DOPAR(CURBLK) = SHL(I,2)+3
  1959. 2410  I = DOPAR(CURBLK)
  1960.       K = SHR(I,16)
  1961.       J = ENTER(-(SHL(K,8)+64+LABEL))
  1962.       DOPAR(CURBLK) = SHL(J,16) + RIGHT(I,16)
  1963.       J = SHR(SYMBOL(J-1),16)
  1964.       CALL EMIT(J,DEF)
  1965.       GO TO 99999
  1966. C     <GROUP HEAD> ::= <GROUP HEAD> <STATEMENT>
  1967. 2500  CONTINUE
  1968.       I = DOPAR(CURBLK)
  1969.       IF (RIGHT(I,2).NE.3) GO TO 99999
  1970. C     OTHERWISE CASE STMT
  1971.       J = RIGHT(SHR(I,2),14)
  1972.       J = SYMBOL(J+1)
  1973.       J = SHR(J,8)
  1974.       CALL EMIT(J,VLU)
  1975.       CALL EMIT(TRA,OPR)
  1976.       GO TO 2410
  1977. C     <STEP DEFINITION> ::= <VARIABLE> <REPLACE> <EXPRESSION> <ITERATION
  1978. C
  1979. 2600  I = FIXV(MP)
  1980.       J = FIXV(MP+3)
  1981.       IF (J.GE.0) I = 0
  1982. C     PLACE <VARIABLE> SYMBOL NUMBER INTO DO SLOT
  1983.       FIXV(MP-1) = I
  1984.       FIXV(MP) = IABS(J)
  1985.       GO TO 99999
  1986. C     <ITERATION CONTROL> ::= <TO> <EXPRESSION>
  1987. 2700  CALL EMIT(LEQ,OPR)
  1988.       I = ENTER(-(64+LABEL))
  1989.       I = SHR(SYMBOL(I-1),16)
  1990.       CALL EMIT(I,VLU)
  1991.       CALL EMIT(TRC,OPR)
  1992.       FIXV(MP) = - (SHL(FIXV(MP),14)+I)
  1993. C     SEND  -(BACK BRANCH NUMBER/END LOOP NUMBER)
  1994.       GO TO 99999
  1995. C     <ITERATION CONTROL> ::= <TO> <EXPRESSION> <BY> <EXPRESSION>
  1996. 2800  I = FIXV(MP-3)
  1997. C     I = SYMBOL NUMBER OF INDEXING VARIABLE
  1998.       CALL EMIT(I,VLU)
  1999.       CALL EMIT(ADD,OPR)
  2000.       CALL EMIT(I,ADR)
  2001.       CALL EMIT(STD,OPR)
  2002. C     BRANCH TO COMPARE
  2003.       I = FIXV(MP+2)
  2004.       J = SHR(I,14)
  2005.       CALL EMIT(J,VLU)
  2006.       CALL EMIT(TRA,OPR)
  2007. C     DEFINE BEGINNING OF STATEMENTS
  2008.       J = RIGHT(I,14)
  2009.       CALL EMIT(J,DEF)
  2010. C     <TO> ALREADY HAS (BACK BRANCH NUMBER/END LOOP NUMBER)
  2011.       GO TO 99999
  2012. C     <WHILE CLAUSE> ::= <WHILE> <EXPRESSION>
  2013. 2900  I = ENTER(-(64+LABEL))
  2014.       J = FIXV(MP)
  2015.       I = SHR(SYMBOL(I-1),16)
  2016.       FIXV(MP) = SHL(J,14)+I
  2017. C     (BACK BRANCH NUMBER/END LOOP NUMBER)
  2018.       CALL EMIT(I,VLU)
  2019.       I = TRC
  2020.       GO TO 88888
  2021. C     <CASE SELECTOR> ::= CASE <EXPRESSION>
  2022. C     <PROCEDURE DEFINITION> ::= <PROCEDURE HEAD> <STATEMENT LIST> <ENDI
  2023. 3100  I = FIXV(MP)
  2024.       K = SHR(I,15)
  2025.       I = RIGHT(I,15)
  2026.       J = FIXV(SP)
  2027.       IF (J.LT.0) J = -J+1
  2028.       IF ((J.NE.0).AND.(I.NE.J)) CALL ERROR(13,1)
  2029.       I = SHR(SYMBOL(K-1),16)
  2030.       CALL EMIT(END,OPR)
  2031. C     EMIT A RET JUST IN CASE HE FORGOT IT
  2032.       CALL EMIT(DRT,OPR)
  2033.       CALL EMIT(I,DEF)
  2034.       GO TO 99999
  2035. C     <PROCEDURE HEAD> ::= <PROCEDURE NAME> ;
  2036. 3200  L = 0
  2037.       K = 0
  2038.       GO TO 3450
  2039. C     <PROCEDURE HEAD> ::= <PROCEDURE NAME> <TYPE> ;
  2040. 3300  L = 0
  2041.       K = FIXV(SP-1)
  2042.       GO TO 3510
  2043. C     <PROCEDURE HEAD> ::= <PROCEDURE NAME> <PARAMETER LIST> ;
  2044. 3400  L = FIXV(MP+1)
  2045.       K = 0
  2046. 3450  PROCTP(CURBLK)=1
  2047.       GO TO 3520
  2048. C     <PROCEDURE HEAD> ::= <PROCEDURE NAME> <PARAMETER LIST> <TYPE> ;
  2049. 3500  L = FIXV(MP+1)
  2050.       K = FIXV(SP-1)
  2051. 3510  PROCTP(CURBLK)=2
  2052. 3520  I = FIXV(MP)
  2053.       SYMBOL(I+1) = SHL(L,8)+SHL(K,4)+PROC
  2054.       J = ENTER(-(64+LABEL))
  2055.       FIXV(MP) = SHL(J,15) + I
  2056.       J = SHR(SYMBOL(J-1),16)
  2057.       CALL EMIT(J,VLU)
  2058.       CALL EMIT(TRA,OPR)
  2059.       I = SHR(SYMBOL(I-1),16)
  2060.       CALL EMIT(I,DEF)
  2061.       GO TO 99999
  2062. C     <PROCEDURE HEAD> ::= <PROCEDURE NAME> INTERRUPT <NUMBER>;
  2063. 3540  CONTINUE
  2064. C     GET SYMBOL NUMBER
  2065.       I = FIXV(MP)
  2066.       I = SYMBOL(I-1)
  2067.       I = SHR(I,16)
  2068. C     GET INTERRUPT NUMBER
  2069.       J = FIXV(SP-1)
  2070.       IF (J.LE.7) GO TO 3550
  2071.       CALL ERROR(39,1)
  2072.       GO TO 3200
  2073. 3550  J = J + 1
  2074.       K = INTPRO(J)
  2075. C     IS INTERRUPT DUPLICATED
  2076.       IF (K.LE.0) GO TO 3560
  2077.       CALL ERROR(40,1)
  2078.       GO TO 3200
  2079. 3560  INTPRO(J) = I
  2080.       GO TO 3200
  2081. C     <PROCEDURE NAME> ::= <LABEL DEFINITION> PROCEDURE
  2082. 3600  CONTINUE
  2083.       CALL ENTERB
  2084.       I = ENP
  2085.       GO TO 88888
  2086. C     <PARAMETER LIST> ::= <PARAMETER HEAD> <IDENTIFIER> )
  2087. 3700  CONTINUE
  2088.       I = LOOKUP(SP-1)
  2089.       IF (I.GE.BLKSYM) CALL ERROR(14,1)
  2090.       I = ENTER(VARB)
  2091.       FIXV(MP) = FIXV(MP)+1
  2092.       GO TO 99999
  2093. C     <PARAMETER HEAD> ::= (
  2094. 3800  FIXV(MP) = 0
  2095.       GO TO 99999
  2096. C     <PARAMETER HEAD> ::= <PARAMETER HEAD> <IDENTIFIER> ,
  2097. C     <ENDING> ::= END
  2098. 4000  CALL EXITB
  2099.       FIXV(MP) = 0
  2100.       GO TO 99999
  2101. C     <ENDING> ::= END <IDENTIFIER>
  2102. 4100  CALL EXITB
  2103.       I = LOOKUP(SP)
  2104.       IF (I .EQ. 0) CALL ERROR(15,1)
  2105.       FIXV(MP) = I
  2106.       GO TO 99999
  2107. C     <ENDING> ::= <LABEL DEFINITION> <ENDING>
  2108. 4200  FIXV(MP) = FIXV(SP)
  2109.       GO TO 99999
  2110. C     <LABEL DEFINITION> ::= <IDENTIFIER> :
  2111. 4300  I = LOOKUP(MP)
  2112.       IF (CURBLK.EQ.2) IP = 48
  2113.       IF (CURBLK.NE.2) IP = 64
  2114.       IF (I.GE.BLKSYM) GO TO 4310
  2115. C
  2116. C         PREC = 3 IF USER-DEFINED OUTER BLOCK LABEL
  2117. C         PREC = 4 IF USER-DEFINED LABEL NOT IN OUTER BLOCK
  2118. C         PREC = 5 IF COMPILER-GENERATED LABEL
  2119.       I = ENTER (IP+LABEL)
  2120.       GO TO 4320
  2121. 4310  J = SYMBOL(I+1)
  2122.       J = RIGHT(SHR(J,4),4)
  2123.       K = I + 1
  2124.       IF (J.EQ.0) GO TO 4315
  2125.           CALL ERROR(16,1)
  2126.           SYMBOL(K) = SYMBOL(K) - J*16
  2127. 4315  SYMBOL(K) = SYMBOL(K) + IP
  2128. 4320  FIXV(MP) = I
  2129.       IF (TOKEN .EQ. PROCV) GO TO 99999
  2130.       I = SYMBOL(I-1)
  2131.       CALL EMIT(SHR(I,16),DEF)
  2132.       GO TO 99999
  2133. C     <LABEL DEFINITION> ::= <NUMBER> :
  2134. 4350  CONTINUE
  2135.       I = ORG
  2136.       J = MP
  2137. 4360  K = FIXV(J)
  2138.       IF (K.LE.65535) GO TO 4370
  2139.           CALL ERROR(17,1)
  2140.           GO TO 99999
  2141. 4370  CONTINUE
  2142.       L = LOOKUP(J)
  2143.       IF (L.NE.0) GO TO 4380
  2144. C     ENTER NUMBER
  2145.       J = 1
  2146.       IF (K.GT.255) J = 2
  2147.       L = ENTER(SHL(K,8)+SHL(J,4)+LITER+1)
  2148. 4380  L = SYMBOL(L-1)
  2149.       CALL EMIT(SHR(L,16),VLU)
  2150.       GO TO 88888
  2151. C     <RETURN STATEMENT> ::= RETURN
  2152. 4400  CALL EMIT(0,LIT)
  2153.       I = RET
  2154.       IF(PROCTP(CURBLK).EQ.2) CALL ERROR(45,1)
  2155.       IF(PROCTP(CURBLK).EQ.0) CALL ERROR(46,1)
  2156.       GO TO 88888
  2157. C     <RETURN STATEMENT> ::= RETURN <EXPRESSION>
  2158. 4500  I = RET
  2159.       IF(PROCTP(CURBLK).EQ.1) CALL ERROR(44,1)
  2160.       IF(PROCTP(CURBLK).EQ.0) CALL ERROR(46,1)
  2161.       GO TO 88888
  2162. C     <CALL STATEMENT> ::= CALL <VARIABLE>
  2163. 4600  I = FIXV(SP)
  2164.       IF (I.EQ.0) GO TO 99999
  2165.       IF (I.GT.0) GO TO 4620
  2166. 4610      CALL ERROR(18,1)
  2167.           GO TO 99999
  2168. 4620  J = SYMBOL(I+1)
  2169.       J = RIGHT(J,4)
  2170.       I = SHR(SYMBOL(I-1),16)
  2171.       CALL EMIT(I,ADR)
  2172.       I = 0
  2173.       IF (J.EQ.PROC) I = PRO
  2174.       IF (J.EQ.INTR) I = BIF
  2175.       IF (I.EQ.0) GO TO 4610
  2176.       GO TO 88888
  2177. C     <GO TO STATEMENT> ::= <GO TO> <IDENTIFIER>
  2178. 4700  CONTINUE
  2179.       I = LOOKUP(SP)
  2180.       IF(I .EQ. 0) I= ENTER(LABEL)
  2181.       J=SYMBOL(I+1)
  2182.       J = RIGHT(J,4)
  2183.       IF ((J.EQ.LABEL).OR.(J.EQ.VARB)) GO TO 4710
  2184.       CALL ERROR(19,1)
  2185.       GO TO 99999
  2186. C     INCREMENT THE REFERENCE COUNTER (USE LENGTH FIELD)
  2187. 4710  IF (J.EQ.LABEL) SYMBOL(I+1) = SYMBOL(I+1) + 256
  2188.       I = SYMBOL(I-1)
  2189.       CALL EMIT(SHR(I,16),VLU)
  2190.       I = TRA
  2191.       GO TO 88888
  2192. C     <GO TO STATEMENT> ::= <GOTO> <NUMBER>
  2193. 5000  J = SP
  2194.       I = TRA
  2195.       GO TO 4360
  2196. C     <GO TO> ::= GO TO
  2197. C     <GO TO> ::= GOTO
  2198. C     <DECLARATION STATEMENT> ::= DECLARE <DECLARATION ELEMENT>
  2199. C     <DECLARATION STATEMENT> ::= <DECLARATION STATEMENT> , <DECLARATION
  2200. C
  2201. C     <DECLARATION ELEMENT> ::= <TYPE DECLARATION>
  2202. C     <DECLARATION ELEMENT> ::= <IDENTIFIER> LITERALLY <STRING>
  2203.  5300 CONTINUE
  2204.       L = MP
  2205.       K = MACTOP
  2206.           DO 5330 M = 1,2
  2207.           I = VAR(L)
  2208.           IP = SHR(I,12)
  2209.           I = RIGHT(I,12)-1
  2210.           K = K + 1
  2211.           IF (K .GE. CURMAC) GO TO 5390
  2212.           MACROS(K) = IP
  2213.               DO 5320 J=1,IP
  2214.               K = K + 1
  2215.               IF (K .GE. CURMAC) GO TO 5390
  2216.               LTEMP=I+J
  2217.               MACROS(K)=VARC(LTEMP)
  2218. 5320          CONTINUE
  2219.           L = SP
  2220. 5330      CONTINUE
  2221. C
  2222.       K = K + 1
  2223.       IF (K .GE. CURMAC) GO TO 5390
  2224.           MACROS(K) = MACTOP
  2225.           MACTOP = K
  2226.           GO TO 99999
  2227. 5390  CALL ERROR(20,5)
  2228.       GO TO 99999
  2229. C     <TYPE DECLARATION> ::= <IDENTIFIER SPECIFICATION> <TYPE>
  2230. 5400  N = 1
  2231. 5410  I = FIXV(MP)
  2232.       J = SHR(I,15)
  2233.       I = RIGHT(I,15)
  2234.       K = FIXV(SP)
  2235.           DO 5420 L = J,I
  2236.           M = SYMBOL(L)+1
  2237.           IP = SYMBOL(M)
  2238.               IF (K.NE.0) GO TO 5430
  2239.               IF (IP.NE.1) CALL ERROR(21,1)
  2240.               IP = LABEL
  2241. 5430      CONTINUE
  2242.           SYMBOL(M) = SHL(N,8)+SHL(K,4)+RIGHT(IABS(IP),4)
  2243.           IF (IP .LT. 0) SYMBOL(M) = - SYMBOL(M)
  2244. 5420      CONTINUE
  2245. C
  2246.       MAXSYM = I
  2247.       FIXV(MP) = SYMBOL(I)
  2248.       GO TO 99999
  2249. C     <TYPE DECLARATION> ::= <BOUND HEAD> <NUMBER> ) <TYPE>
  2250. 5500  N = FIXV(MP+1)
  2251.       GO TO 5410
  2252. C     <TYPE DECLARATION> ::= <TYPE DECLARATION> <INITIAL LIST>
  2253. C     <DECLARATION ELEMENT> ::= <IDENTIFIER> <DATA LIST>
  2254. 5600  I = FIXV(MP)+1
  2255.       J = FIXV(MP+1)
  2256.       L = RIGHT(J,16)
  2257.       SYMBOL(I) = SHL(L,8) + SYMBOL(I)
  2258.       J = SHR(J,16)
  2259.       CALL EMIT(DAT,OPR)
  2260.       CALL EMIT(J,DEF)
  2261.       I = DAT
  2262.       GO TO 99999
  2263. C     <DATA LIST> ::= <DATA HEAD> <CONSTANT> )
  2264. 5610  I = FIXV(MP+1)
  2265.       FIXV(MP) = FIXV(MP) + WRDATA(-I)
  2266.       GO TO 99999
  2267. C     <DATA HEAD> ::= DATA (
  2268. 5620  J = ENTER(-(64+LABEL))
  2269.       J = SHR(SYMBOL(J-1),16)
  2270.       CALL EMIT(J,VLU)
  2271.       CALL EMIT(TRA,OPR)
  2272.       FIXV(MP) = SHL(J,16)
  2273.       I = LOOKUP(MP-1)
  2274.       IF (I.LE.BLKSYM) GO TO 5630
  2275.           CALL ERROR(22,1)
  2276. C     SET PRECISION OF INLINE DATA TO 3
  2277. 5630  I = ENTER(48+VARB)
  2278.       FIXV(MP-1) = I
  2279.       I = SHR(SYMBOL(I-1),16)
  2280.       CALL EMIT(DAT,OPR)
  2281.       CALL EMIT(I,DEF)
  2282. C     COUNT THE NUMBER OF BYTES EMITTED
  2283.       GO TO 99999
  2284. C     <DATA HEAD> ::= <DATA HEAD> <CONSTANT> ,
  2285. C     <TYPE> ::= BYTE
  2286. 5700  FIXV(MP) = 1
  2287.       GO TO 99999
  2288. C     <TYPE> ::= ADDRESS
  2289. 5800  FIXV(MP) = 2
  2290.       GO TO 99999
  2291. C     <TYPE> ::= LABEL
  2292. 5900  FIXV(MP) = 0
  2293.       GO TO 99999
  2294. C     <BOUND HEAD> ::= <IDENTIFIER SPECIFICATION> (
  2295. C     <IDENTIFIER SPECIFICATION> ::= <VARIABLE NAME>
  2296. 6100  SYMBOL(MAXSYM) = FIXV(MP)
  2297.       FIXV(MP) = SHL(MAXSYM,15)+MAXSYM
  2298.       GO TO 99999
  2299. C     <IDENTIFIER SPECIFICATION> ::= <IDENTIFIER LIST> <VARIABLE NAME> )
  2300. C     <IDENTIFIER LIST> ::= (
  2301. 6300  FIXV(MP) = MAXSYM
  2302.       GO TO 99999
  2303. C     <IDENTIFIER LIST> ::= <IDENTIFIER LIST> <VARIABLE NAME> ,
  2304. 6400  IF (SYMTOP .LT. MAXSYM) GO TO 6420
  2305. 6410  CALL ERROR(23,5)
  2306.       MAXSYM = SYMABS
  2307. 6420  SYMBOL(MAXSYM) = FIXV(MP+1)
  2308.       FIXV(MP) = SHL(MAXSYM,15)+RIGHT(FIXV(MP),15)
  2309.       MAXSYM=MAXSYM-1
  2310.       GO TO 99999
  2311. C     <VARIABLE NAME> ::= <IDENTIFIER>
  2312. 6500  CONTINUE
  2313.       I = LOOKUP(MP)
  2314.       IF (I.GT.BLKSYM) GO TO 6520
  2315.           I = ENTER(VARB)
  2316.       GO TO 6540
  2317. 6520  J = RIGHT(SYMBOL(I+1),8)
  2318.       IF (J.EQ.VARB) GO TO 6540
  2319.           CALL ERROR(24,1)
  2320. 6540  FIXV(MP) = I
  2321.       GO TO 99999
  2322. C     <VARIABLE NAME> ::= <BASED VARIABLE> <IDENTIFIER>
  2323. 6600  I = FIXV(MP)
  2324.       J = SYMTOP
  2325.       SYMTOP = SYMTOP + 1
  2326.       IF (SYMTOP .LE. MAXSYM) GO TO 6620
  2327.           SYMTOP = SYMTOP - 1
  2328.           CALL ERROR(25,5)
  2329.           GO TO 99999
  2330. 6620  SYMBOL(SYMTOP) = SYMBOL(J)
  2331.       K = LOOKUP(SP)
  2332.       IF (K .NE. 0) GO TO 6630
  2333.       K = ENTER(VARB)
  2334.       GO TO 6640
  2335. 6630  L = SYMBOL(K+1)
  2336.       L = RIGHT(L,4)
  2337.       IF (L.EQ.VARB) GO TO 6640
  2338.       CALL ERROR(26,1)
  2339.       GO TO 99999
  2340. 6640  K = SYMBOL(K-1)
  2341.       SYMBOL(J) = SHR(K,16)
  2342.       I = I + 1
  2343.       SYMBOL(I) = - SYMBOL(I)
  2344.       GO TO 99999
  2345. C     <BASED VARIABLE> ::= <IDENTIFIER> BASED
  2346. C     <INITIAL LIST> ::= <INITIAL HEAD> <CONSTANT> )
  2347. 6800  CONTINUE
  2348.       I = FIXV(MP)
  2349.       IF (MAXSYM.LE.SYMTOP) GO TO 6410
  2350.       SYMBOL(I) = SYMBOL(I)+1
  2351.       I = FIXV(MP+1)
  2352.       I = SHL(SHR(SYMBOL(I-1),16),16) + I
  2353.       SYMBOL(MAXSYM) = I
  2354.       MAXSYM = MAXSYM - 1
  2355.       GO TO 99999
  2356. C     <INITIAL HEAD> ::= INITIAL (
  2357. 6900  CONTINUE
  2358.       I = FIXV(MP-1)
  2359.       FIXV(MP) = MAXSYM
  2360.       J = MAXSYM
  2361.       MAXSYM = MAXSYM - 1
  2362.       IF (MAXSYM .LE. SYMTOP) GO TO 6410
  2363.       I = SHR(SYMBOL(I-1),16)
  2364.       SYMBOL(J) = SHL(I,15)
  2365.       GO TO 99999
  2366. C     <INITIAL HEAD> ::= <INITIAL HEAD> <CONSTANT> ,
  2367. C     <ASSIGNMENT> ::= <VARIABLE> <REPLACE> <EXPRESSION>
  2368. 7100  ACNT = ACNT + 1
  2369.       I = MAXSYM - ACNT
  2370.       IF (I.GT.SYMTOP) GO TO 7110
  2371.           CALL ERROR(27,5)
  2372.           ACNT = 0
  2373.           GO TO 99999
  2374. 7110  SYMBOL(I) = FIXV(MP)
  2375. C      CHECK FOR PROCEDURE ON LHS OF ASSIGNMENT.
  2376. C     ****NOTE THAT THIS IS DEPENDENT ON SYMBOL NUMBER OF OUTPUT=17****
  2377.       IF(FIXV(MP).NE.0.OR.FIXC(MP).EQ.17) GO TO 99999
  2378.       CALL ERROR(41,1)
  2379.       GO TO 99999
  2380. C     <ASSIGNMENT> ::= <LEFT PART> <ASSIGNMENT>
  2381. C     <REPLACE> ::= =
  2382. C     <LEFT PART> ::= <VARIABLE> ,
  2383. C     <EXPRESSION> ::= <LOGICAL EXPRESSION>
  2384. C     <EXPRESSION> ::= <VARIABLE> : = <EXPRESSION>
  2385. 7500  CONTINUE
  2386.       I = STO
  2387.       J = FIXV(MP)
  2388.       IF(FIXV(MP).EQ.0) CALL ERROR(41,1)
  2389.       IF (J.LT.0) GO TO 7510
  2390.           J = SYMBOL(J-1)
  2391.           CALL EMIT(SHR(J,16),ADR)
  2392.           GO TO 88888
  2393. 7510  CALL EMIT(XCH,OPR)
  2394.       GO TO 88888
  2395. C
  2396. C     <EXPRESSION> ::= <LOGICAL FACTOR>
  2397. C     <EXPRESSION> ::= <EXPRESSION> OR <LOGICAL FACTOR>
  2398. 7600  I = IOR
  2399.       GO TO 88888
  2400. C     <EXPRESSION> ::= <EXPRESSION> XOR <LOGICAL FACTOR>
  2401. 7700  I = XOR
  2402.       GO TO 88888
  2403. C     <LOGICAL FACTOR> ::= <LOGICAL SECONDARY>
  2404. C     <LOGICAL FACTOR> ::= <LOGICAL FACTOR> AND <LOGICAL SECONDARY>
  2405. 7900  I = AND
  2406.       GO TO 88888
  2407. C     <LOGICAL SECONDARY> ::= <LOGICAL PRIMARY>
  2408. C     <LOGICAL SECONDARY> ::= NOT <LOGICAL PRIMARY>
  2409. 8100  I = NOT
  2410.       GO TO 88888
  2411. C     <LOGICAL PRIMARY> ::= <STRING EXPRESSION>
  2412. C     <LOGICAL PRIMARY> ::= <STRING EXPRESSION> <RELATION> <STRING EXPRE
  2413. 8300  I = FIXV(MP+1)
  2414.       GO TO 88888
  2415. C
  2416. C     * NOTE THAT THE CODE THAT FOLLOWS DEPENDS UPON FIXED PRODUCTION #
  2417. 8400  FIXV(MP) = (PROD-96) + EQL
  2418. C     THE 96 COMES FROM THE PRODUCTION NUMBER FOR =
  2419.       GO TO 99999
  2420. C     <RELATION> ::= =
  2421. C     <RELATION> ::= <
  2422. C     <RELATION> ::= >
  2423. C     <RELATION> ::= < >
  2424. C     <RELATION> ::= < =
  2425. C     <RELATION> ::= > =
  2426. C     <STRING EXPRESSION> ::= <ARITHMETIC EXPRESSION>
  2427. C
  2428. C     <ARITHMETIC EXPRESSION> ::= <TERM>
  2429. C     * NOTE THAT THE FOLLOWING CODE DPENDS UPON FIXED PROD NUMBERS
  2430. 9300  I = (PROD-103) + ADD
  2431. C     *** THE VALUES OF ADC AND SUB WERE ACCIDENTILY REVERSED ***
  2432.       IF ((I.EQ.ADC).OR.(I.EQ.SUB)) I = 5-I
  2433.       GO TO 88888
  2434. C     <ARITHMETIC EXPRESSION> ::= <ARITHMETIC EXPRESSION> + <TERM>
  2435. C     <ARITHMETIC EXPRESSION> ::= <ARITHMETIC EXPRESSION> - <TERM>
  2436. C     <ARITHMETIC EXPRESSION> ::= <ARITHMETIC EXPRESSION> PLUS <TERM>
  2437. C     <ARITHMETIC EXPRESSION> ::= <ARITHMETIC EXPRESSION> MINUS <TERM>
  2438. C     <ARITHMETIC EXPRESSION> ::= - <TERM>
  2439. 9400  CONTINUE
  2440.       CALL EMIT(0,LIT)
  2441.       CALL EMIT(XCH,OPR)
  2442.       I = SUB
  2443.       GO TO 88888
  2444. C
  2445. C     <TERM> ::= <PRIMARY>
  2446. C     * NOTE THAT THE FOLLOWING CODE DEPENDS UPON FIXED PROD NUMBERS
  2447. 10000 I = (PROD-109) + MUL
  2448.       GO TO 88888
  2449. C     <TERM> ::= <TERM> * <PRIMARY>
  2450. C     <TERM> ::= <TERM> / <PRIMARY>
  2451. C     <TERM> ::= <TERM> MOD <PRIMARY>
  2452. C     <PRIMARY> ::= <CONSTANT>
  2453. 10300 I = FIXV(MP)
  2454.       I = SYMBOL(I-1)
  2455.       CALL EMIT(SHR(I,16),VLU)
  2456.       GO TO 99999
  2457. C     <PRIMARY> ::= . <CONSTANT>
  2458. 10310 I = ENTER(-(64+LABEL))
  2459.       I = SHR(SYMBOL(I-1),16)
  2460.       FIXV(MP) = I
  2461.       CALL EMIT(I,VLU)
  2462.       CALL EMIT(TRA,OPR)
  2463.       CALL EMIT(DAT,OPR)
  2464.       CALL EMIT(0,DEF)
  2465. C     DROP THROUGH TO NEXT PRODUCTION
  2466. C     <PRIMARY> ::= <CONSTANT HEAD> <CONSTANT> )
  2467. C     ENTER HERE FROM ABOVE ALSO
  2468. 10320  I = FIXV(MP+1)
  2469.       I = WRDATA(-I)
  2470.       CALL EMIT(DAT,OPR)
  2471.       I = FIXV(MP)
  2472.       CALL EMIT(I,DEF)
  2473.       GO TO 99999
  2474. C     <PRIMARY> ::= <VARIABLE>
  2475. 10400 I = FIXV(MP)
  2476.       IF (I.GT.0) GO TO 10450
  2477.       IF (I.EQ.0) GO TO 99999
  2478. C     SUBSCRIPTED VARIABLE
  2479.       I = LOD
  2480.       GO TO 88888
  2481. C     SIMPLE VARIABLE
  2482. 10450 J = SYMBOL(I-1)
  2483.       CALL EMIT(SHR(J,16),VLU)
  2484.       J = SYMBOL(I+1)
  2485.       J = RIGHT(J,4)
  2486.       IF (J.EQ.PROC) CALL EMIT(PRO,OPR)
  2487.       IF (J.EQ.INTR) CALL EMIT(BIF,OPR)
  2488.       GO TO 99999
  2489. C     <PRIMARY> ::= . <VARIABLE>
  2490. 10500 CONTINUE
  2491.       I = FIXV(SP)
  2492.       IF (I.GT.0) GO TO 10520
  2493. C     SUBSCRIPTED - CHANGE PRECISION TO 2
  2494.       IF (I.EQ.0) GO TO  10530
  2495. 10510     I = CVA
  2496.           GO TO 88888
  2497. C
  2498. 10520 J = IABS(SYMBOL(I+1))
  2499.       IF (RIGHT(J,4).EQ.VARB) GO TO 10540
  2500. 10530     CALL ERROR(28,1)
  2501.           GO TO 99999
  2502. 10540 J = SYMBOL(I-1)
  2503.       CALL EMIT(SHR(J,16),ADR)
  2504.       GO TO 10510
  2505. C     <PRIMARY> ::= ( <EXPRESSION> )
  2506. C     <CONSTANT HEAD> ::= . (
  2507. 10550 I = ENTER(-(64+LABEL))
  2508.       I = SHR(SYMBOL(I-1),16)
  2509.       FIXV(MP) = I
  2510.       CALL EMIT(I,VLU)
  2511.       CALL EMIT(TRA,OPR)
  2512.       CALL EMIT(DAT,OPR)
  2513.       CALL EMIT(0,DEF)
  2514.       GO TO 99999
  2515. C     <CONSTANT HEAD> ::= <CONSTANT HEAD> <CONSTANT> ,
  2516. 10560  I = FIXV(MP+1)
  2517.       I = WRDATA(-I)
  2518.       GO TO 99999
  2519. C     <VARIABLE> ::= <IDENTIFIER>
  2520. 10600 CONTINUE
  2521.       I = LOOKUP(MP)
  2522.       IF (I .NE. 0) GO TO 10650
  2523.       CALL ERROR(29,1)
  2524.       I = ENTER(VARB)
  2525. 10650 FIXV(MP) = I
  2526.       J = IABS(SYMBOL(I+1))
  2527.       J = RIGHT(J,4)
  2528.       IF(J.EQ.LABEL) CALL ERROR(47,1)
  2529.       IF ((J.NE.PROC).AND.(J.NE.INTR)) GO TO 99999
  2530.       IF(SHR(SYMBOL(I+1),8).NE.0) CALL ERROR(38,1)
  2531.       J=RIGHT(SHR(SYMBOL(I+1),4),4)
  2532. C     IN THE STATEMENTS BELOW, 30 IS THE TOKEN FOR 'CALL'
  2533.       IF(PSTACK(MP-1).EQ.30.AND.J.NE.0) CALL ERROR(42,1)
  2534.       IF(PSTACK(MP-1).NE.30.AND.J.EQ.0) CALL ERROR(43,1)
  2535.           I = SHR(SYMBOL(I-1),16)
  2536.           I = (SHL(I,15)+I+1)
  2537.           FIXC(MP) = 0
  2538.       GO TO 10760
  2539. C     <VARIABLE> ::= <SUBSCRIPT HEAD> <EXPRESSION> )
  2540. 10700 I = FIXV(MP)
  2541.       IF (I.LT.0) GO TO 10740
  2542.       FIXV(MP) = - I
  2543.       I = INX
  2544.       GO TO 88888
  2545. 10740 I = -I
  2546.       CALL EMIT(RIGHT(I,15),ADR)
  2547.       IF (FIXC(MP).NE.1) CALL EMIT(STD,OPR)
  2548.       IF(IABS(FIXC(MP)).EQ.0) CALL ERROR(37,1)
  2549.       IF(IABS(FIXC(MP)).GT.1) CALL ERROR(38,1)
  2550. 10760 CONTINUE
  2551.       CALL EMIT(SHR(I,15),VLU)
  2552.       FIXC(MP)=SHR(I,15)
  2553.       I = PRO
  2554.       FIXV(MP) = 0
  2555.       GO TO 88888
  2556. C     <SUBSCRIPT HEAD> ::= <IDENTIFIER> (
  2557. 10800 I = LOOKUP(MP)
  2558.       IF (I.NE.0) GO TO 10840
  2559.           CALL ERROR(30,1)
  2560.           I = ENTER(VARB)
  2561. 10840 J = IABS(SYMBOL(I+1))
  2562.       J = RIGHT(J,4)
  2563.       IF (J.EQ.VARB) GO TO 10860
  2564.       IF ((J.EQ.PROC).OR.(J.EQ.INTR)) GO TO 10880
  2565.           CALL ERROR(31,1)
  2566. 10860 FIXV(MP) = I
  2567.       I = SYMBOL(I-1)
  2568.       CALL EMIT(SHR(I,16),ADR)
  2569.       GO TO 99999
  2570. 10880 FIXC(MP) = SHR(SYMBOL(I+1),8)
  2571.       IF (J.EQ.INTR) FIXC(MP) = -FIXC(MP)
  2572.       J=RIGHT(SHR(SYMBOL(I+1),4),4)
  2573. C     IN THE STATEMENTS BELOW, 30 IS THE TOKEN FOR 'CALL'
  2574.       IF(PSTACK(MP-1).EQ.30.AND.J.NE.0) CALL ERROR(42,1)
  2575.       IF(PSTACK(MP-1).NE.30.AND.J.EQ.0)  CALL ERROR(43,1)
  2576.       I = SHR(SYMBOL(I-1),16)
  2577.       FIXV(MP) = -(SHL(I,15)+I+1)
  2578.       GO TO 99999
  2579. C     <SUBSCRIPT HEAD> ::= <SUBSCRIPT HEAD> <EXPRESSION> ,
  2580. 10900 I = -FIXV(MP)
  2581.       IF (I .GT. 0) GO TO 10910
  2582.           CALL ERROR(32,1)
  2583.           GO TO 99999
  2584. 10910 FIXV(MP) = -(I+1)
  2585.       J = RIGHT(I,15)
  2586.       CALL EMIT(J,ADR)
  2587.       IF (FIXC(MP).NE.0) GO TO 10920
  2588.           CALL ERROR(37,1)
  2589.           GO TO 99999
  2590. 10920 IF (FIXC(MP).NE.2) CALL EMIT(STD,OPR)
  2591.       I = -1
  2592.       IF (FIXC(MP).LT.0) I = 1
  2593.       FIXC(MP) = FIXC (MP) + I
  2594.       GO TO 99999
  2595. C     <CONSTANT> ::= <STRING>
  2596. 11000 CONTINUE
  2597. C     MAY WISH TO TREAT THIS STRING AS A CONSTANT LATER
  2598.       J = VAR(SP)
  2599.       I = SHR(J,12)
  2600.       L = 3
  2601.       K = 0
  2602.       IF ((I.LE.0).OR.(I.GT.2)) GO TO 11010
  2603. C         CONVERT INTERNAL CHARACTER FORM TO ASCII
  2604.           J = RIGHT(J,12)
  2605.           K = 0
  2606.               DO 11005 L = 1,I
  2607.               LTEMP=J+L-1
  2608.               KP=VARC(LTEMP)
  2609.               K = K * 256 + ASCII(KP)
  2610. 11005         CONTINUE
  2611.       L = I
  2612. 11010 I = LOOKUP(SP)
  2613.       IF (I.EQ.0) I = ENTER(SHL(K,8)+SHL(L,4)+LITER)
  2614.       FIXV(MP) = I
  2615.       GO TO 99999
  2616. C     <CONSTANT> :: = <NUMBER>
  2617. 11100  CONTINUE
  2618.       I = LOOKUP(SP)
  2619.       IF (I.NE.0) GO TO 11120
  2620. C     ENTER NUMBER INTO SYMBOL TABLE
  2621.       I = FIXV(MP)
  2622.       J = 1
  2623.       IF (I.GT.255) J=2
  2624.       I = ENTER(SHL(I,8)+SHL(J,4)+LITER+1)
  2625. 11120 FIXV(MP) = I
  2626.       GO TO 99999
  2627. C     <TO>  ::=  TO
  2628. 11200 CONTINUE
  2629.       I = FIXV(MP-3)
  2630.       IF (I .GT. 0) GO TO 11210
  2631.           CALL ERROR(33,1)
  2632.           FIXV(MP) = 1
  2633.           GO TO 99999
  2634. 11210 I = SYMBOL(I-1)
  2635.       I = SHR(I,16)
  2636.       FIXV(MP-3) = I
  2637.       CALL EMIT(I,ADR)
  2638.       CALL EMIT(STD,OPR)
  2639.       J = ENTER(-(64+LABEL))
  2640.       J = SHR(SYMBOL(J-1),16)
  2641.       CALL EMIT(J,DEF)
  2642.       FIXV(MP) = J
  2643.       CALL EMIT(I,VLU)
  2644.       GO TO 99999
  2645. C     <BY>  ::=  BY
  2646. 11300 CONTINUE
  2647.       CALL EMIT(LEQ,OPR)
  2648.       I = ENTER(-(64+LABEL))
  2649. C     SAVE SYMBOL NUMBER AT <TO> (END LOOP NUMBER)
  2650.       I = SHR(SYMBOL(I-1),16)
  2651.       J = FIXV(MP-2)
  2652.       FIXV(MP-2) = I
  2653.       CALL EMIT(I,VLU)
  2654.       CALL EMIT(TRC,OPR)
  2655.       I = ENTER(-(64+LABEL))
  2656.       I = SHR(SYMBOL(I-1),16)
  2657.       FIXV(MP) = SHL(J,14)+I
  2658. C     <BY> IS (TO NUMBER/STATEMENT NUMBER)
  2659.       CALL EMIT(I,VLU)
  2660.       CALL EMIT(TRA,OPR)
  2661. C     NOW DEFINE BY LABEL
  2662.       I = ENTER(-(64+LABEL))
  2663.       I = SHR(SYMBOL(I-1),16)
  2664. C     SAVE BY LABEL IN <TO> AS BRANCH BACK NUMBER
  2665.       FIXV(MP-2)=SHL(I,14)+FIXV(MP-2)
  2666.       CALL EMIT(I,DEF)
  2667.       GO TO 99999
  2668. C     <WHILE>  ::=  WHILE
  2669. 11400 CONTINUE
  2670.       I = ENTER(-(64+LABEL))
  2671.       I = SHR(SYMBOL(I-1),16)
  2672.       CALL EMIT(I,DEF)
  2673.       FIXV(MP) = I
  2674.       GO TO 99999
  2675. 88888 CALL EMIT(I,OPR)
  2676. 99999 RETURN
  2677.       END
  2678.       INTEGER FUNCTION GNC(Q)
  2679. C     GET NEXT CHARACTER FROM THE INPUT STREAM (OR 0 IF
  2680. C     NO CHARACTER IS FOUND)
  2681. C
  2682.       INTEGER OPCVAL(51),OPR,ADR,VLU,DEF,LIT,LIN,
  2683.      *NOP,ADD,ADC,SUB,SBC,MUL,DIV,REM,NEG,AND,IOR,XOR,NOT,EQL,LSS,GTR,
  2684.      *NEQ,LEQ,GEQ,INX,TRA,TRC,PRO,RET,STO,STD,XCH,DEL,DAT,LOD,BIF,INC,
  2685.      *CSE,END,ENB,ENP,HAL,RTL,RTR,SFL,SFR,HIV,LOV,CVA,ORG,DRT,ENA,DIS,
  2686.      *AX1,AX2,AX3
  2687.       COMMON /OPCOD/ OPCVAL,OPR,ADR,VLU,DEF,LIT,LIN,
  2688.      *NOP,ADD,ADC,SUB,SBC,MUL,DIV,REM,NEG,AND,IOR,XOR,NOT,EQL,LSS,GTR,
  2689.      *NEQ,LEQ,GEQ,INX,TRA,TRC,PRO,RET,STO,STD,XCH,DEL,DAT,LOD,BIF,INC,
  2690.      *CSE,END,ENB,ENP,HAL,RTL,RTR,SFL,SFR,HIV,LOV,CVA,ORG,DRT,ENA,DIS,
  2691.      *AX1,AX2,AX3
  2692.       INTEGER SHL,SHR,RIGHT
  2693.       INTEGER IBUFF(80),OBUFF(120),IBP,OBP,INPTR,
  2694.      1    INSTK(7),ITRAN(256),OTRAN(64)
  2695.       COMMON /FILES/IBUFF,OBUFF,IBP,OBP,INPTR,
  2696.      1    INSTK,ITRAN,OTRAN
  2697.       INTEGER CONTRL(64)
  2698.       COMMON /CNTRL/CONTRL
  2699.       INTEGER BLOCK(30),DOPAR(30),MACBLK(30),CURBLK,MAXBLK,BLKSYM
  2700.       INTEGER PROCTP(30)
  2701.       COMMON /BLK/BLOCK,DOPAR,MACBLK,CURBLK,MAXBLK,BLKSYM
  2702.      1,PROCTP
  2703.       INTEGER MACROS(500),MAXMAC,CURMAC,MACTOP
  2704.       COMMON /MACRO/MACROS,MAXMAC,CURMAC,MACTOP
  2705.       INTEGER Q
  2706. 4000  IF(CURMAC .LE. MAXMAC) GO TO 2000
  2707.       IF (IBP .LE. CONTRL(29)) GO TO 200
  2708. C     READ ANOTHER RECORD FROM COMMAND STREAM
  2709.       IF (CONTRL(31) .EQ. 0) GO TO 1
  2710.       IF(CONTRL(20).EQ. 1) CALL PAD(0,1,1)
  2711.       CALL WRITEL(0)
  2712. 1     IFILE = CONTRL(20)
  2713.       READ(IFILE,1000) IBUFF
  2714. 100       DO 110 I=1,80
  2715.           J = IBUFF(I)
  2716.           J = ICON(J)
  2717.           IBUFF(I) = ITRAN(J)
  2718. 110       CONTINUE
  2719. C
  2720.       LP = CONTRL(23)
  2721.       IF (IBUFF(LP).EQ.38) GO TO 300
  2722. 115   IBP = LP
  2723.       CONTRL(14) = CONTRL(14) + 1
  2724.       CALL EMIT(CONTRL(14),LIN)
  2725.       IF (CONTRL(27).EQ.0) GO TO 200
  2726.       CALL CONOUT(0,5,CONTRL(14),10)
  2727.       CALL CONOUT(1,-3,CURBLK-1,10)
  2728.       CALL PAD(1,1,3)
  2729.       IF (CONTRL(23) .EQ. 1) GO TO 120
  2730.       CALL FORM(1,IBUFF,1,CONTRL(23)-1,80)
  2731.       CALL PAD(1,1,3)
  2732. 120   CALL FORM(1,IBUFF,CONTRL(23),CONTRL(29),80)
  2733.       IF(CONTRL(29) .EQ. 80) GO TO 130
  2734.       CALL PAD(1,1,3)
  2735.       CALL FORM(1,IBUFF,CONTRL(29)+1,80,80)
  2736. 130   CONTINUE
  2737. 200   GNC = IBUFF(IBP)
  2738.       IBP = IBP + 1
  2739.       RETURN
  2740. 300   CONTINUE
  2741.       IF(IBUFF(2) .EQ. 1) GO TO 115
  2742.       LP = LP + 1
  2743. C     SCANNER PARAMETERS FOLLOW
  2744. 305   J = IBUFF(LP)
  2745.       IF (J.EQ.38) GO TO 400
  2746.       LP = LP + 1
  2747. C
  2748.           DO 310 I=LP,80
  2749.           II = I
  2750.           IF (IBUFF(I) .EQ. 39) GO TO 330
  2751.           IF (IBUFF(I).EQ.38) GO TO 315
  2752. 310       CONTINUE
  2753. C
  2754. 315   K = CONTRL(J)
  2755.       LP = II
  2756.       IF ((K.GT.1).OR.(K.LT.0)) GO TO 320
  2757.       CONTRL (J) = 1-K
  2758.       GO TO 325
  2759. 320   CALL ERROR(34,1)
  2760. 325   IF (II.EQ.80) GO TO 1
  2761.       LP = LP + 1
  2762.       GO TO 305
  2763. 330   K = 0
  2764.       II = II+1
  2765. C
  2766.           DO 340 I=II,80
  2767.           LP = II
  2768.           L = IBUFF(I)
  2769.           IF (L .LE. 1) GO TO 340
  2770.           IF (L .GT. 11) GO TO 350
  2771.           K = K*10+(L-2)
  2772. 340       CONTINUE
  2773. C
  2774. 350   CONTRL(J) = K
  2775. C     MAY BE MORE $ IN INPUT LINE
  2776. 360   II = LP + 1
  2777.           DO 370 I=II,80
  2778.           LP = I
  2779.           IF (IBUFF(I).EQ.38) GO TO 380
  2780. 370       CONTINUE
  2781. C     NO MORE $ FOUND
  2782.       GO TO 1
  2783. 380   LP = LP + 1
  2784.       GO TO 305
  2785. 400   CONTINUE
  2786. C     DISPLAY $ PARAMETERS
  2787.       L = 2
  2788.       K = 64
  2789.       LP = LP + 1
  2790.       J = IBUFF(LP)
  2791.       IF (J.EQ.1) GO TO 410
  2792.       L = J
  2793.       K = J
  2794. 410   CONTINUE
  2795.           DO 420 I=L,K
  2796.           J = CONTRL(I)
  2797.           IF (J.LT.0) GO TO 420
  2798.           CALL PAD(0,38,1)
  2799.           CALL PAD(1,I,1)
  2800.           CALL PAD(1,39,1)
  2801.           CALL CONOUT(2,-10,J,10)
  2802. 420       CONTINUE
  2803.       IF (CONTRL(31).NE.0) CALL PAD(0,1,1)
  2804.       CALL WRITEL(0)
  2805.       GO TO 360
  2806. 990   IF (INPTR .LT. 1) GO TO 999
  2807.       CONTRL(16) = 0
  2808.       INPTR = INPTR - 1
  2809.       CONTRL(20) = INSTK(INPTR)
  2810.       GO TO 1
  2811. 999   GNC = 0
  2812.       RETURN
  2813. 1000  FORMAT(80A1)
  2814. 2000  CONTINUE
  2815.       I = MACROS(CURMAC)
  2816.       J = SHR(I,12)
  2817.       I = RIGHT(I,12)
  2818.       IF (J .GE. I) GO TO 2100
  2819.       J = J + 1
  2820.       GNC = MACROS(J)
  2821.       MACROS(CURMAC) = SHL(J,12)+I
  2822.       RETURN
  2823. 2100  CURMAC = CURMAC + 1
  2824.       GO TO 4000
  2825.       END
  2826.       SUBROUTINE WRITEL(NSPAC )
  2827.       INTEGER IBUFF(80),OBUFF(120),IBP,OBP,INPTR,
  2828.      1    INSTK(7),ITRAN(256),OTRAN(64)
  2829.       COMMON /FILES/IBUFF,OBUFF,IBP,OBP,INPTR,
  2830.      1    INSTK,ITRAN,OTRAN
  2831.         INTEGER CONTRL(64),OFILE
  2832.       COMMON/CNTRL/CONTRL
  2833. C
  2834.       NSPACE=NSPAC
  2835.       NP = CONTRL(36) - 1
  2836.       IF (OBP.LE.NP) GO TO 998
  2837.       NBLANK = 1
  2838. C
  2839.           DO 5 I=1,OBP
  2840.           J = OBUFF(I)
  2841.           IF (J .NE. 1) NBLANK = I
  2842. 5         OBUFF(I) = OTRAN(J)
  2843. C
  2844.       OBP = IMIN(CONTRL(15),NBLANK)
  2845.       OFILE = CONTRL(26) + 10
  2846. 9     CONTINUE
  2847. 10      WRITE(OFILE,1000) (OBUFF(I), I=1,OBP)
  2848. 11    IF(NSPACE.LE.0) GO TO 998
  2849. C
  2850.       DO 12 I=1,OBP
  2851. 12    OBUFF(I)=OTRAN(1)
  2852.       NSPACE=NSPACE-1
  2853.       GO TO 9
  2854. 998   IF (NP.LE.0) GO TO 997
  2855.           DO 999 I=1,NP
  2856. 999       OBUFF(I) = 1
  2857. 997   OBP = NP
  2858.       RETURN
  2859. 1000    FORMAT (1H ,121A1)
  2860. 1001    FORMAT(1H )
  2861.         END
  2862.       FUNCTION ICON(I)
  2863.       INTEGER IBUFF(80),OBUFF(120),IBP,OBP,INPTR,
  2864.      1    INSTK(7),ITRAN(256),OTRAN(64)
  2865.       COMMON /FILES/IBUFF,OBUFF,IBP,OBP,INPTR,
  2866.      1    INSTK,ITRAN,OTRAN
  2867. C     ICON IS CALLED WITH AN INTEGER VARIABLE I WHICH CONTAINS A
  2868. C     CHARACTER READ WITH AN A1 FORMAT.  ICON MUST REDUCE THIS CHARACTER
  2869. C     TO A VALUE SOMEWHERE BETWEEN 1 AND 256.  NORMALLY, THIS WOULD BE
  2870. C     ACCOMPLISHED BY SHIFTING THE CHARACTER TO THE RIGHTMOST BIT POSI-
  2871. C     TIONS OF THE WORD AND MASKING THE RIGHT 8 BITS.  IT IS DONE RATHER
  2872. C     INEFFICIENTLY HERE, HOWEVER, TO GAIN SOME MACHINE INDEPENDENCE.
  2873.         DO 100 K=1,52
  2874.         J = K
  2875.         IF (I .EQ. OTRAN(K)) GO TO 200
  2876. 100   CONTINUE
  2877.         J = 1
  2878. 200   ICON = J
  2879.       RETURN
  2880.       END
  2881.       SUBROUTINE DECIBP
  2882.       INTEGER IBUFF(80),OBUFF(120),IBP,OBP,INPTR,
  2883.      1    INSTK(7),ITRAN(256),OTRAN(64)
  2884.       COMMON /FILES/IBUFF,OBUFF,IBP,OBP,INPTR,
  2885.      1    INSTK,ITRAN,OTRAN
  2886.       INTEGER MACROS(500),MAXMAC,CURMAC,MACTOP
  2887.       COMMON /MACRO/MACROS,MAXMAC,CURMAC,MACTOP
  2888.       IF (CURMAC .LE. MAXMAC) GO TO 100
  2889.       IBP = IBP -1
  2890.       RETURN
  2891. 100   I = MACROS(CURMAC)
  2892.       MACROS(CURMAC) = I - 2**12
  2893.       RETURN
  2894.       END
  2895.       SUBROUTINE CONV(PREC)
  2896.       INTEGER PREC
  2897.       INTEGER ACCLEN,ACCUM(32),TYPE,STYPE,EOFLAG,
  2898.      1    IDENT,NUMB,SPECL,STR,CONT,VALUE
  2899.       COMMON /SCANC/ACCLEN,ACCUM,TYPE,STYPE,EOFLAG,
  2900.      1    IDENT,NUMB,SPECL,STR,CONT,VALUE
  2901.       IF (STYPE .LE. 1) GO TO 200
  2902.       VALUE = 0
  2903.           DO 100 I=1,ACCLEN
  2904.           J = ACCUM(I) - 2
  2905. 100       VALUE = VALUE * STYPE + J
  2906.       IF (PREC .LE. 0) GO TO 999
  2907.       I = 2**PREC
  2908.       IF (VALUE .LT. I) GO TO 999
  2909. 200   VALUE = -1
  2910. 999   RETURN
  2911.       END
  2912.       FUNCTION IMIN(I,J)
  2913.       IF (I .LT. J) GO TO 10
  2914.       IMIN = J
  2915.       GO TO 20
  2916. 10    IMIN = I
  2917. 20    RETURN
  2918.       END
  2919.       SUBROUTINE FORM(CC,CHARS,START,FINISH,LENGTH)
  2920. C     CC = 0 DUMP BUFFER, GO TO NEXT LINE
  2921. C     CC = 1 APPEND TO CURRENT BUFFER
  2922. C     CC = 2 DELETE LEADING BLANKS AND APPEND
  2923.       INTEGER CHARS(LENGTH)
  2924.       INTEGER CC,START,FINISH
  2925.       INTEGER IBUFF(80),OBUFF(120),IBP,OBP,INPTR,
  2926.      1    INSTK(7),ITRAN(256),OTRAN(64)
  2927.       COMMON /FILES/IBUFF,OBUFF,IBP,OBP,INPTR,
  2928.      1    INSTK,ITRAN,OTRAN
  2929.       INTEGER CONTRL(64)
  2930.       COMMON /CNTRL/CONTRL
  2931.       J = START
  2932.       I = CC + 1
  2933.       GO TO (100,200,300),I
  2934. 100   CALL WRITEL(0)
  2935. 200   IF (J .GT. FINISH) GO TO 999
  2936.       OBP = OBP + 1
  2937.       OBUFF(OBP) = CHARS(J)
  2938.       J = J + 1
  2939.       IF (OBP .GE. CONTRL(34)) GO TO 100
  2940.       GO TO 200
  2941. 300   IF (J .GT. FINISH) GO TO 999
  2942.       IF (CHARS(J) .NE. 1) GO TO 200
  2943.       J = J + 1
  2944.       GO TO 300
  2945. 999   RETURN
  2946.       END
  2947.       SUBROUTINE CONOUT(CC,K,N,BASE)
  2948.       INTEGER CC,K,N,BASE,T(20)
  2949.       LOGICAL ZSUP
  2950.       NP = N
  2951.       ZSUP = K .LT. 0
  2952.       KP = IMIN (IABS(K),19)
  2953. C
  2954.           DO 10 I=1,KP
  2955. 10        T(I) = 1
  2956. C
  2957.       IP = KP + 1
  2958. C
  2959.           DO 20 I=1,KP
  2960.           LTEMP=IP-I
  2961.           T(LTEMP)=MOD(NP,BASE)+2
  2962.           NP = NP/BASE
  2963.           IF(ZSUP .AND. (NP .EQ. 0)) GO TO 30
  2964. 20        CONTINUE
  2965. C
  2966. 30    IF(BASE .EQ. 8) GO TO 40
  2967.       IF(BASE .EQ. 2) GO TO 45
  2968.       IF(BASE .NE. 16) GO TO 50
  2969.       KP = KP+1
  2970.       T(KP) = 19
  2971.       GO TO 50
  2972. 40    KP = KP+1
  2973.       T(KP) = 28
  2974.       GO TO 50
  2975. 45     KP = KP+1
  2976.       T(KP) = 13
  2977. 50    CALL FORM(CC,T,1,KP,20)
  2978.       RETURN
  2979.       END
  2980.       SUBROUTINE PAD(CC,CHR,I)
  2981.       INTEGER CC,CHR,I
  2982.       INTEGER T(20)
  2983.       J = IMIN(I,20)
  2984. C
  2985.           DO 10 K=1,J
  2986. 10        T(K) = CHR
  2987. C
  2988.       CALL FORM(CC,T,1,J,20)
  2989.       RETURN
  2990.       END
  2991.       SUBROUTINE STACKC(I)
  2992.       INTEGER IBUFF(80),OBUFF(120),IBP,OBP,INPTR,
  2993.      1    INSTK(7),ITRAN(256),OTRAN(64)
  2994.       COMMON /FILES/IBUFF,OBUFF,IBP,OBP,INPTR,
  2995.      1    INSTK,ITRAN,OTRAN
  2996.       INTEGER CONTRL(64)
  2997.       COMMON /CNTRL/CONTRL
  2998.       INPTR = INPTR + 1
  2999.       IF (INPTR .GT. 7) GO TO 100
  3000.       INSTK(INPTR) = CONTRL(20)
  3001.       CONTRL(20) = I
  3002.       RETURN
  3003. 100   CALL ERROR(35,5)
  3004.       RETURN
  3005.       END
  3006.       SUBROUTINE ENTERB
  3007. C     ENTRY TO BLOCK GOES THROUGH HERE
  3008.       INTEGER BLOCK(30),DOPAR(30),MACBLK(30),CURBLK,MAXBLK,BLKSYM
  3009.       INTEGER PROCTP(30)
  3010.       COMMON /BLK/BLOCK,DOPAR,MACBLK,CURBLK,MAXBLK,BLKSYM
  3011.      1,PROCTP
  3012.       INTEGER SYMBOL(4000),SYMTOP,MAXSYM,SYMLOC,SYMLEN,SYMCNT,SYMABS,
  3013.      1    ACNT
  3014.       COMMON /SYM/SYMBOL,SYMTOP,MAXSYM,SYMLOC,SYMLEN,SYMCNT,SYMABS,
  3015.      1    ACNT
  3016.       INTEGER MACROS(500),MAXMAC,CURMAC,MACTOP
  3017.       COMMON /MACRO/MACROS,MAXMAC,CURMAC,MACTOP
  3018.       INTEGER SHL
  3019.       INTEGER LOOKUP,ENTER
  3020.       CURBLK = CURBLK + 1
  3021.       PROCTP(CURBLK)=PROCTP(CURBLK-1)
  3022.       IF (CURBLK .LE. MAXBLK) GO TO 100
  3023.           CALL ERROR(36,5)
  3024.           CURBLK = 1
  3025. 100   BLOCK(CURBLK) = SYMTOP
  3026.       DOPAR(CURBLK) = 0
  3027. C     SAVE THE MACRO PARAMETERS
  3028.       MACBLK(CURBLK) = SHL(MACTOP,12) + CURMAC
  3029.       BLKSYM = SYMTOP
  3030.       RETURN
  3031.       END
  3032.       SUBROUTINE DUMPIN
  3033. C     DUMP THE INITIALIZATION TABLE
  3034.       INTEGER WRDATA
  3035. C     WRDATA(X) WRITES THE DATA AT LOCATION X IN SYMBOL TABLE
  3036. C     AND RETURNS THE NUMBER OF BYTES WRITTEN
  3037.       INTEGER SYMBOL(4000),SYMTOP,MAXSYM,SYMLOC,SYMLEN,SYMCNT,SYMABS,
  3038.      1    ACNT
  3039.       COMMON /SYM/SYMBOL,SYMTOP,MAXSYM,SYMLOC,SYMLEN,SYMCNT,SYMABS,
  3040.      1    ACNT
  3041.       INTEGER MSSG(77)
  3042.       COMMON /MESSAG/MSSG
  3043.       INTEGER RIGHT,SHL,SHR
  3044.       INTEGER CONTRL(64)
  3045.       COMMON /CNTRL/CONTRL
  3046.       IF(CONTRL(30).NE.2) GO TO 1000
  3047.       I = SYMABS+1
  3048. 100   I = I - 1
  3049.       IF (I .LE. MAXSYM) GO TO 1000
  3050.           J = SYMBOL(I)
  3051.           JP = RIGHT(J,15)
  3052.           J = SHR(J,15)
  3053.           CALL PAD(0,1,1)
  3054.           CALL WRITEL(0)
  3055.           CALL FORM(0,MSSG,42,48,77)
  3056.           CALL PAD(1,30,1)
  3057.           CALL CONOUT(1,5,J,10)
  3058.           CALL PAD(1,1,1)
  3059.           CALL PAD(1,39,1)
  3060. 200   IF (JP.LE.0) GO TO 100
  3061.           JP = JP - 1
  3062.           I  = I - 1
  3063.           CALL PAD(1,1,1)
  3064.           CALL PAD(1,30,1)
  3065. C         GET THE SYMBOL NUMBER
  3066.           K = SHR(SYMBOL(I),16)
  3067.           CALL CONOUT(1,5,K,10)
  3068.       GO TO 200
  3069. 1000  CALL WRITEL(0)
  3070.       KT = CONTRL(26)
  3071.       CONTRL(26) = CONTRL(32)
  3072.       KQ = CONTRL(34)
  3073.       CONTRL(34) = CONTRL(33)
  3074. C     READY TO WRITE THE INITIALIZATION TABLE
  3075.       I = SYMABS+1
  3076. 3000  CALL PAD(1,41,1)
  3077. 3100  I = I - 1
  3078.       IF (I.LE.MAXSYM) GO TO 4000
  3079.           J = SYMBOL(I)
  3080.           JP = RIGHT(J,15)
  3081.           J = SHR(J,15)
  3082. C     WRITE SYMBOL NUMBERS
  3083.           DO 3300 K=1,3
  3084.           KP = MOD(J,32)+2
  3085.           CALL PAD(1,KP,1)
  3086. 3300      J = J /32
  3087. C
  3088. C     WRITE OUT DATA CORRESPONDING TO EACH CONSTANT
  3089. 3400  IF (JP.LE.0) GO TO 3000
  3090.       JP = JP - 1
  3091.       I = I - 1
  3092.       K = RIGHT(SYMBOL(I),16)
  3093.       K = WRDATA(K)
  3094.       GO TO 3400
  3095. C
  3096. 4000  CALL PAD(1,41,1)
  3097.       CALL WRITEL(0)
  3098.       CONTRL(26) = KT
  3099.       CONTRL(34) = KQ
  3100.       RETURN
  3101.       END
  3102.       SUBROUTINE ERROR(I,LEVEL)
  3103.       INTEGER I,LEVEL
  3104. C     I IS ERROR NUMBER, LEVEL IS SEVERITY CODE
  3105.       INTEGER TERR(22)
  3106.       COMMON /TERRM/TERR
  3107. C     TERR CONTAINS THE TERMINAL ERROR MESSAGE - COMPILATION TERMINATED
  3108.       INTEGER CONTRL(64)
  3109.       COMMON /CNTRL/CONTRL
  3110.       INTEGER SP,MP,MPP1,MSTACK,MVAR,VARTOP,PSTACK(75),VAR(75),
  3111.      1    VARC(256),FIXV(75),FIXC(75),PRMASK(5)
  3112.       LOGICAL FAILSF,COMPIL
  3113.       COMMON /STACKS/SP,MP,MPP1,MSTACK,MVAR,VARTOP,PSTACK,VAR,
  3114.      1    VARC,FIXV,FIXC,PRMASK,FAILSF,COMPIL
  3115.       INTEGER IBUFF(80),OBUFF(120),IBP,OBP,INPTR,
  3116.      1    INSTK(7),ITRAN(256),OTRAN(64)
  3117.       COMMON /FILES/IBUFF,OBUFF,IBP,OBP,INPTR,
  3118.      1    INSTK,ITRAN,OTRAN
  3119.       INTEGER MSSG(77)
  3120.       COMMON /MESSAG/MSSG
  3121.       INTEGER ACCLEN,ACCUM(32),TYPE,STYPE,EOFLAG,
  3122.      1    IDENT,NUMB,SPECL,STR,CONT,VALUE
  3123.       COMMON /SCANC/ACCLEN,ACCUM,TYPE,STYPE,EOFLAG,
  3124.      1    IDENT,NUMB,SPECL,STR,CONT,VALUE
  3125.       CONTRL(1) = CONTRL(1) + 1
  3126.       CALL FORM(0,MSSG,21,21,41)
  3127.       CALL CONOUT(1,5,CONTRL(14),10)
  3128.       CALL FORM(1,MSSG,22,22,41)
  3129.       CALL PAD(1,1,2)
  3130.       CALL FORM(1,MSSG,16,20,41)
  3131.       CALL PAD(1,1,1)
  3132.       CALL CONOUT(2,-4,I,10)
  3133.       CALL PAD(1,1,2)
  3134.       CALL FORM(1,MSSG,23,26,41)
  3135.       CALL PAD(1,1,1)
  3136.       CALL FORM(1,ACCUM,1,ACCLEN,32)
  3137.       CALL WRITEL(0)
  3138. C     CHECK FOR TERMINAL ERROR - LEVEL GREATER THAN 4
  3139.       IF (LEVEL.LE.4) GO TO 999
  3140. C         TERMINATE COMPILATION
  3141.           CALL FORM(0,TERR,1,22,22)
  3142.           CALL WRITEL(0)
  3143.           COMPIL = .FALSE.
  3144. 999   RETURN
  3145.       END
  3146.       INTEGER FUNCTION SHR(I,J)
  3147.       SHR = I/(2**J)
  3148.       RETURN
  3149.       END
  3150.       INTEGER FUNCTION SHL(I,J)
  3151.       SHL = I*(2**J)
  3152.       RETURN
  3153.       END
  3154.       INTEGER FUNCTION RIGHT(I,J)
  3155.       RIGHT = MOD(I,2**J)
  3156.       RETURN
  3157.       END
  3158.       SUBROUTINE SDUMP
  3159.       INTEGER CONTRL(64)
  3160.       COMMON /CNTRL/CONTRL
  3161.       INTEGER MSSG(77)
  3162.       COMMON /MESSAG/MSSG
  3163.       INTEGER SP,MP,MPP1,MSTACK,MVAR,VARTOP,PSTACK(75),VAR(75),
  3164.      1    VARC(256),FIXV(75),FIXC(75),PRMASK(5)
  3165.       LOGICAL FAILSF,COMPIL
  3166.       COMMON /STACKS/SP,MP,MPP1,MSTACK,MVAR,VARTOP,PSTACK,VAR,
  3167.      1    VARC,FIXV,FIXC,PRMASK,FAILSF,COMPIL
  3168. C     CHECK FOR STACK DUMP BYPASS
  3169.       IF (CONTRL(13).NE.0) GO TO 400
  3170.       CALL FORM(0,MSSG,29,41,41)
  3171.       IF (SP .LT. 5) GO TO 200
  3172.           DO 100 I=5,SP
  3173.           J = PSTACK(I)
  3174.           CALL PRSYM(1,J)
  3175.           CALL PAD(1,1,1)
  3176. 100       CONTINUE
  3177. 200   CALL WRITEL(0)
  3178. 400   CONTINUE
  3179.       RETURN
  3180.       END
  3181.       SUBROUTINE REDPR(PROD,SYM)
  3182.       INTEGER SYM,PROD
  3183.       INTEGER CONTRL(64)
  3184.       COMMON /CNTRL/CONTRL
  3185.       INTEGER MSSG(77)
  3186.       COMMON /MESSAG/MSSG
  3187.       INTEGER SP,MP,MPP1,MSTACK,MVAR,VARTOP,PSTACK(75),VAR(75),
  3188.      1    VARC(256),FIXV(75),FIXC(75),PRMASK(5)
  3189.       LOGICAL FAILSF,COMPIL
  3190.       COMMON /STACKS/SP,MP,MPP1,MSTACK,MVAR,VARTOP,PSTACK,VAR,
  3191.      1    VARC,FIXV,FIXC,PRMASK,FAILSF,COMPIL
  3192.       CALL CONOUT(0,-5,PROD,10)
  3193.       CALL PAD(1,1,2)
  3194.       CALL PRSYM(1,SYM)
  3195.       CALL PAD(1,1,1)
  3196.       CALL PAD(1,51,2)
  3197.       CALL PAD(1,39,1)
  3198.           DO 50 I=MP,SP
  3199.           CALL PAD(1,1,1)
  3200. 50        CALL PRSYM(1,PSTACK(I))
  3201.       CALL WRITEL(0)
  3202.       RETURN
  3203.       END
  3204.       SUBROUTINE EMIT(VAL,TYP)
  3205.       INTEGER VAL,TYP
  3206. C     TYP      MEANING
  3207. C      0      OPERATOR
  3208. C      1      LOAD ADDRESS
  3209. C      2      LOAD VALUE
  3210. C      3      DEFINE LOCATION
  3211. C      4      LITERAL VALUE
  3212. C      5      LINE NUMBER
  3213. C      6      UNUSED
  3214. C      7        "
  3215.       INTEGER CONTRL(64)
  3216.       COMMON /CNTRL/CONTRL
  3217.       INTEGER OPCVAL(51),OPR,ADR,VLU,DEF,LIT,LIN,
  3218.      *NOP,ADD,ADC,SUB,SBC,MUL,DIV,REM,NEG,AND,IOR,XOR,NOT,EQL,LSS,GTR,
  3219.      *NEQ,LEQ,GEQ,INX,TRA,TRC,PRO,RET,STO,STD,XCH,DEL,DAT,LOD,BIF,INC,
  3220.      *CSE,END,ENB,ENP,HAL,RTL,RTR,SFL,SFR,HIV,LOV,CVA,ORG,DRT,ENA,DIS,
  3221.      *AX1,AX2,AX3
  3222.       COMMON /OPCOD/ OPCVAL,OPR,ADR,VLU,DEF,LIT,LIN,
  3223.      *NOP,ADD,ADC,SUB,SBC,MUL,DIV,REM,NEG,AND,IOR,XOR,NOT,EQL,LSS,GTR,
  3224.      *NEQ,LEQ,GEQ,INX,TRA,TRC,PRO,RET,STO,STD,XCH,DEL,DAT,LOD,BIF,INC,
  3225.      *CSE,END,ENB,ENP,HAL,RTL,RTR,SFL,SFR,HIV,LOV,CVA,ORG,DRT,ENA,DIS,
  3226.      *AX1,AX2,AX3
  3227.       INTEGER POLISH(30),MAXPOL,POLTOP,POLCNT,POLCHR(18)
  3228.       COMMON /POLE/POLISH,MAXPOL,POLTOP,POLCNT,POLCHR
  3229.       INTEGER RIGHT,SHR,SHL
  3230.       POLTOP = POLTOP+1
  3231.       IF (POLTOP .LE. MAXPOL) GO TO 100
  3232.           CALL ERROR(37,1)
  3233.           POLTOP = 1
  3234. 100   POLCNT = POLCNT + 1
  3235.       IF (CONTRL(18).EQ.0) GO TO 1200
  3236.           CALL CONOUT(0,-5,POLCNT,10)
  3237.           CALL PAD(1,1,1)
  3238.           I = (TYP*3)+1
  3239.           CALL FORM(1,POLCHR,I,I+2,18)
  3240.           CALL PAD(1,1,1)
  3241.           I = TYP+1
  3242.           J = 1
  3243.           GO TO (1000,1001,1001,1001,1004,1004),I
  3244. 1000      J = OPCVAL(VAL+1)
  3245.               DO 200 I=1,3
  3246.               K = SHR(J,(3-I)*6)
  3247.               CALL PAD(1,RIGHT(K,6),1)
  3248. 200           CONTINUE
  3249.           GO TO 1100
  3250. 1001      CONTINUE
  3251.           J = 30
  3252. 1004      CALL PAD(1,J,1)
  3253.           CALL CONOUT(1,5,VAL,10)
  3254. 1100      CONTINUE
  3255. C
  3256. C     NOW STORE THE POLISH ELEMENT IN THE POLISH ARRAY.
  3257. C
  3258.       CALL WRITEL(0)
  3259. 1200  POLISH(POLTOP) = SHL(VAL,3)+TYP
  3260.       LCODE = CONTRL(22)/3
  3261.       IF (POLTOP .LT. LCODE) GO TO 9999
  3262. C     WRITE THE CURRENT BUFFER
  3263.       CALL WRITEL(0)
  3264.       KP = CONTRL(34)
  3265.       CONTRL(34) = CONTRL(22)
  3266.       K = CONTRL(26)
  3267.       CONTRL(26) = CONTRL(21)
  3268. C
  3269.       JP = 0
  3270.           DO 2000 I=1,LCODE
  3271.           J = POLISH(I)
  3272.               DO 2000 L = 1,3
  3273.               LP = RIGHT(SHR(J,(3-L)*5),5)+2
  3274.               CALL PAD(JP,LP,1)
  3275.               JP = 1
  3276. 2000          CONTINUE
  3277. C
  3278.       CALL WRITEL(0)
  3279.       CONTRL(34) = KP
  3280.       CONTRL(26) = K
  3281.       POLTOP = 0
  3282. 9999  RETURN
  3283.       END
  3284.       BLOCK DATA
  3285.       INTEGER TITLE(10),VERS
  3286.       COMMON /TITL/TITLE,VERS
  3287.       INTEGER INTPRO(8)
  3288.       COMMON /INTER/INTPRO
  3289.       INTEGER ASCII(64)
  3290.       COMMON /ASC/ASCII
  3291.       INTEGER HENTRY(127),HCODE
  3292.       COMMON /HASH/HENTRY,HCODE
  3293.       INTEGER SP,MP,MPP1,MSTACK,MVAR,VARTOP,PSTACK(75),VAR(75),
  3294.      1    VARC(256),FIXV(75),FIXC(75),PRMASK(5)
  3295.       LOGICAL FAILSF,COMPIL
  3296.       COMMON /STACKS/SP,MP,MPP1,MSTACK,MVAR,VARTOP,PSTACK,VAR,
  3297.      1    VARC,FIXV,FIXC,PRMASK,FAILSF,COMPIL
  3298. C      GLOBAL TABLES
  3299.       INTEGER V(446),VLOC(107),VINDX(13),C1(364),C1TRI(243),PRTB(129),
  3300.      1PRDTB(129),HDTB(129),PRLEN(129),CONTC(129),LEFTC(5),LEFTI(57),
  3301.      2CONTT(1),TRIPI(57),PRIND(107),NSY,NT,VLEN,VIL,C1W,C1L,NC1TRI,
  3302.      3PRTBL,PRDTBL,HDTBL,PRLENL,CONCL,LEFTCL,LEFTIL,CONTL,TRIPL,PRIL,
  3303.      4PACK,TOKEN,IDENTV,NUMBV,STRV,DIVIDE,EOFILE,PROCV,SEMIV,
  3304.      *DECL,DOV,ENDV,GROUPV,STMTV,SLISTV
  3305.       COMMON /SYNTAX/V,VLOC,VINDX,C1,C1TRI,PRTB,PRDTB,HDTB,PRLEN,CONTC,
  3306.      1LEFTC,LEFTI,CONTT,TRIPI,PRIND,NSY,NT,VLEN,VIL,C1W,C1L,NC1TRI,
  3307.      2PRTBL,PRDTBL,HDTBL,PRLENL,CONCL,LEFTCL,LEFTIL,CONTL,TRIPL,PRIL,
  3308.      3PACK,TOKEN,IDENTV,NUMBV,STRV,DIVIDE,EOFILE,PROCV,SEMIV,
  3309.      *DECL,DOV,ENDV,GROUPV,STMTV,SLISTV
  3310.       INTEGER IBUFF(80),OBUFF(120),IBP,OBP,INPTR,
  3311.      1    INSTK(7),ITRAN(256),OTRAN(64)
  3312.       COMMON /FILES/IBUFF,OBUFF,IBP,OBP,INPTR,
  3313.      1    INSTK,ITRAN,OTRAN
  3314.       INTEGER CONTRL(64)
  3315.       COMMON /CNTRL/CONTRL
  3316. C     COMPILATION TERMINATED
  3317.       INTEGER TERR(22)
  3318.       COMMON /TERRM/TERR
  3319.       INTEGER MSSG(77)
  3320.       COMMON /MESSAG/MSSG
  3321. C
  3322.       INTEGER ACCLEN,ACCUM(32),TYPE,STYPE,EOFLAG,
  3323.      1    IDENT,NUMB,SPECL,STR,CONT,VALUE
  3324.       COMMON /SCANC/ACCLEN,ACCUM,TYPE,STYPE,EOFLAG,
  3325.      1    IDENT,NUMB,SPECL,STR,CONT,VALUE
  3326.       INTEGER MACROS(500),MAXMAC,CURMAC,MACTOP
  3327.       COMMON /MACRO/MACROS,MAXMAC,CURMAC,MACTOP
  3328.       INTEGER VARB,INTR,PROC,LABEL,LITER
  3329.       COMMON /TYPES/VARB,INTR,PROC,LABEL,LITER
  3330.       INTEGER POLISH(30),MAXPOL,POLTOP,POLCNT,POLCHR(18)
  3331.       COMMON /POLE/POLISH,MAXPOL,POLTOP,POLCNT,POLCHR
  3332.       INTEGER BLOCK(30),DOPAR(30),MACBLK(30),CURBLK,MAXBLK,BLKSYM
  3333.       INTEGER PROCTP(30)
  3334.       COMMON /BLK/BLOCK,DOPAR,MACBLK,CURBLK,MAXBLK,BLKSYM
  3335.      1,PROCTP
  3336. C     THE '48' USED IN BLOCK INITIALIZATION AND IN SYMBOL TABLE
  3337. C     INITIALIZATION IS DERIVED FROM THE PROGRAM 'SYMCS' WHICH
  3338. C     BUILDS THE INITIAL SYMBOL TABLE.  IF THIS NUMBER CHANGES, BE
  3339. C     SURE TO ALTER 'BLOCK', 'BLKSYM', 'SYMTOP', AND 'SYMCNT'.
  3340. C     TWO ARRAYS, SYM1 AND SYM2, ARE EQUIVALENCED OVER THE
  3341. C     SYMBOL TABLE ARRAY IN ORDER TO LIMIT THE NUMBER OF
  3342. C     CONTINUATION CARDS IN SYMBOL TABLE INITIALIZATION
  3343. C     BELOW.  THE LENGTHS OF SYM1 AND SYM2, THEREFORE, MUST
  3344. C     TOTAL THE LENGTH OF THE SYMBOL TABLE.  CURRENTLY, THESE
  3345. C     ARRAYS ARE DECLARED AS FOLLOWS
  3346. C
  3347. C         SYM1(60) + SYM2(3940) = SYMBOL(4000)
  3348. C
  3349. C     IF YOU INCREASE (DECREASE) THE SIZE OF SYMBOL, YOU MUST
  3350. C     INCREASE (DECREASE) THE SIZE OF SYM2 AS WELL.
  3351. C
  3352. C     NOTE ALSO THAT THE REMAINING ENTRIES OF THE SYMBOL
  3353. C     TABLE ARE SET TO ZERO AT THE END OF THE DATA STATEMENT
  3354. C     FOR SYM2.  CURRENTLY, THIS IS ACCOMPLISHED WITH THE LAST
  3355. C     ENTRY IN THE DATA STATEMENT
  3356. C
  3357. C                   3880*0
  3358. C
  3359. C     AGAIN, IF YOU CHANGE THE SIZE OF SYMBOL, YOU MUST
  3360. C     ALSO CHANGE THIS LAST ENTRY.  IF FOR EXAMPLE, YOU ALTER
  3361. C     THE SIZE OF SYMBOL TO 3000, THE LAST ENTRY 1880*0 BECOMES
  3362. C
  3363. C                   2880*0
  3364. C
  3365.       INTEGER SYMBOL(4000),SYMTOP,MAXSYM,SYMLOC,SYMLEN,SYMCNT,SYMABS,
  3366.      1    ACNT
  3367.       COMMON /SYM/SYMBOL,SYMTOP,MAXSYM,SYMLOC,SYMLEN,SYMCNT,SYMABS,
  3368.      1    ACNT
  3369.       INTEGER SYM1(60),SYM2(3940)
  3370.       EQUIVALENCE (SYMBOL(1),SYM1(1)),(SYMBOL(61),SYM2(1))
  3371.       INTEGER OPCVAL(51),OPR,ADR,VLU,DEF,LIT,LIN,
  3372.      *NOP,ADD,ADC,SUB,SBC,MUL,DIV,REM,NEG,AND,IOR,XOR,NOT,EQL,LSS,GTR,
  3373.      *NEQ,LEQ,GEQ,INX,TRA,TRC,PRO,RET,STO,STD,XCH,DEL,DAT,LOD,BIF,INC,
  3374.      *CSE,END,ENB,ENP,HAL,RTL,RTR,SFL,SFR,HIV,LOV,CVA,ORG,DRT,ENA,DIS,
  3375.      *AX1,AX2,AX3
  3376.       COMMON /OPCOD/ OPCVAL,OPR,ADR,VLU,DEF,LIT,LIN,
  3377.      *NOP,ADD,ADC,SUB,SBC,MUL,DIV,REM,NEG,AND,IOR,XOR,NOT,EQL,LSS,GTR,
  3378.      *NEQ,LEQ,GEQ,INX,TRA,TRC,PRO,RET,STO,STD,XCH,DEL,DAT,LOD,BIF,INC,
  3379.      *CSE,END,ENB,ENP,HAL,RTL,RTR,SFL,SFR,HIV,LOV,CVA,ORG,DRT,ENA,DIS,
  3380.      *AX1,AX2,AX3
  3381. C     SYNTAX ANALYZER TABLES
  3382.       INTEGER V0(254),V1(73),V2(68),V3(51)
  3383.       EQUIVALENCE (V(1),V0(1)),(V(255),V1(1)),(V(328),V2(1)),
  3384.      4(V(396),V3(1))
  3385.       INTEGER C10(110),C11(118),C12(136)
  3386.       EQUIVALENCE (C1(1),C10(1)),(C1(111),C11(1)),(C1(229),C12(1))
  3387.       INTEGER C1TRI0(93),C1TRI1(86),C1TRI2(64)
  3388.       EQUIVALENCE (C1TRI(1),C1TRI0(1)),(C1TRI(94),C1TRI1(1)),
  3389.      3(C1TRI(180),C1TRI2(1))
  3390. C     ... PLM1 VERS ...
  3391.       DATA TITLE/27,23,24, 3, 1,33,16,29,30, 1/
  3392.       DATA VERS/20/
  3393.       DATA INTPRO /8*0/
  3394. C     TRANSLATION TABLE FROM INTERNAL TO ASCII
  3395.       DATA ASCII /
  3396.      1    32,  48,49,50,51,52, 53,54,55,56,57,
  3397.      2    65,66,67,68,69,70,71,72,73,
  3398.      3    74,75,76,77,78,79,80,81,82,
  3399.      4    83,84,85,86,87,88,89,90,
  3400.      5    36,61,46, 47,40,41, 43,45,39, 42,44,60, 62,58,59,
  3401.      6    12*0/
  3402.       DATA CONTRL /64*0/
  3403.       DATA IBP/81/, OBP/0/,  INPTR /0/
  3404.       DATA OTRAN /1H ,1H0,1H1,1H2,1H3,1H4,
  3405.      1    1H5,1H6,1H7,1H8,1H9,1HA,1HB,1HC,1HD,1HE,1HF,
  3406.      2    1HG,1HH,1HI,1HJ,1HK,1HL,1HM,1HN,1HO,1HP,1HQ,
  3407.      3    1HR,1HS,1HT,1HU,1HV,1HW,1HX,1HY,1HZ,
  3408.      4    1H$,1H=,1H.,1H/,1H(,1H),1H+,1H-,1H',1H*,1H,,
  3409.      5    1H<,1H>,1H:,1H;,12*0/
  3410. C     COMPILATION TERMINATED
  3411.       DATA TERR /14,26,24,27,20,23,12,31,20,26,25, 1,
  3412.      1    31,16,29,24,20,25,12,31,16,15/
  3413. C     PASS-NO PROGRAM
  3414. C     ERROR
  3415. C     ()NEARAT
  3416. C     PARSE STACK
  3417. C     SYMBOL  ADDR WDS CHRS   LENGTH PR TY
  3418.       DATA MSSG /27,12,30,30,45,
  3419.      1    25,26,27,29,26,18,29,12,24,1,
  3420.      2    16,29,29,26,29,
  3421.      3    42,43,25,16,12,29,12,31,
  3422.      4    27,12,29,30,16,1,30,31,12,14,22,51,1,
  3423.      5    30,36,24,13,26,23, 1,1,  12,15,15,29, 1, 34,15,30, 1,
  3424.      6    14,19,29,30, 1,1,1, 23,16,25,18,31,19,  1,27,29,  1,31,36/
  3425.       DATA STYPE /0/, EOFLAG /1/, IDENT /2/, NUMB /3/,
  3426.      1    SPECL /4/, STR /5/, CONT /1/
  3427. C
  3428.       DATA MP /0/, MPP1 /1/, MSTACK /75/, VARTOP /1/,
  3429.      1    MVAR /256/, FAILSF /.FALSE./, COMPIL /.TRUE./
  3430.       DATA MACROS /500*0/, CURMAC /501/, MAXMAC /500/,
  3431.      1   MACTOP /1/
  3432.       DATA VARB /1/, INTR /2/, PROC /3/, LABEL /4/, LITER /5/
  3433.       DATA MAXPOL /30/, POLTOP /0/, POLCNT /0/
  3434. C     OPRADRVALDEFLITLIN
  3435.       DATA POLCHR /26,27,29, 12,15,29, 33,12,23, 15,16,17,
  3436.      1    23,20,31, 23,20,25/
  3437.       DATA BLOCK /1,120,28*0/, CURBLK /2/, MAXBLK /30/,
  3438.      1    BLKSYM /120/, DOPAR /30*0/, MACBLK /30*0/
  3439.      1,PROCTP/30*0/
  3440.       DATA SYM1 /
  3441.      1   5439488,     65536,      4101,        17, 221103907,   6815744,
  3442.      2    131074,      4100,        17, 608028224,   5046272,    196615,
  3443.      3      4100,        17, 491591168,   7471104,    262156,      8198,
  3444.      4        17, 439207134, 587202560,   7995392,    327697,      8198,
  3445.      5        17, 389903964, 587202560,    851968,    393239,      8200,
  3446.      6        33, 494449493, 444186624,   3866624,    458781,      4099,
  3447.      7       530, 476405760,   8126464,    524323,      4099,       530,
  3448.      8 476430336,   5373952,    589864,      4099,       530, 491347968,
  3449.      9   1310720,    655405,      4099,       530, 491372544,    131072,
  3450.      A    720946,      4099,       530, 490037248,   4390912,    786487/
  3451.       DATA SYM2 /
  3452.      B      4099,       530, 490061824,   5373996,    852028,      4100,
  3453.      C       258, 508392384,   7405568,    917569,      4100,       274,
  3454.      D 307041408,   7143424,    983110,      4099,       274, 375787520,
  3455.      E   5308416,   1048651,      4101,       274, 325167070,   3276800,
  3456.      F   1114192,      8198,       274, 427681439, 503316480,   1114112,
  3457.      G   1179733,      8198,       274, 373130334, 301989888,   1703936,
  3458.      H   1245275,      4100,       274, 372103040,   1900544,   1310817,
  3459.      I      4100,       770, 392561600,    589824,   1376358,      8198,
  3460.      J       290, 241562390, 251658240,    458752,   1441899,      4099,
  3461.      K       274, 238866432,   1507441,         0,         1,       117,
  3462.      L    3880*0/
  3463.       DATA SYMTOP /120/, MAXSYM /4000/, SYMABS /4000/,
  3464.      1    SYMCNT /23/, ACNT /0/
  3465.       DATA HENTRY /
  3466.      *0,54,0,0,0,0,112,0,106,0,0,0,28,0,0,0,90,0,0,49,0,0,0,0,0,96,0,
  3467.      10,101,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,84,0,0,0,0,0,0,0,
  3468.      20,34,0,0,0,0,0,0,0,59,0,0,0,0,0,0,0,0,0,11,0,0,0,79,64,1,0,0,0,
  3469.      30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,0,0,74,0,0,0,69,16,0,0,
  3470.      40,0,0,0,0,22,0,39,0,0,0/
  3471.       DATA OPR /0/, ADR /1/, VLU /2/, DEF /3/, LIT /4/, LIN /5/,
  3472.      *NOP/ 0/,ADD/ 1/,ADC/ 2/,SUB/ 3/,SBC/ 4/,MUL/ 5/,DIV/ 6/,REM/ 7/,
  3473.      *NEG/ 8/,AND/ 9/,IOR/10/,XOR/11/,NOT/12/,EQL/13/,LSS/14/,GTR/15/,
  3474.      *NEQ/16/,LEQ/17/,GEQ/18/,INX/19/,TRA/20/,TRC/21/,PRO/22/,RET/23/,
  3475.      *STO/24/,STD/25/,XCH/26/,DEL/27/,DAT/28/,LOD/29/,BIF/30/,INC/31/,
  3476.      *CSE/32/,END/33/,ENB/34/,ENP/35/,HAL/36/,RTL/37/,RTR/38/,SFL/39/,
  3477.      *SFR/40/,HIV/41/,LOV/42/,CVA/43/,ORG/44/,DRT/45/,ENA/46/,DIS/47/,
  3478.      *AX1/48/,AX2/49/,AX3/50/
  3479.       DATA OPCVAL /
  3480.      * 104091,  50127,  50126, 124941, 123726, 100375,  62753, 119832,
  3481.      * 103442,  50767,  83613, 145053, 104095,  67351,  96158,  75741,
  3482.      * 103452,  95260,  74780,  83555, 128844, 128846, 112474, 119839,
  3483.      * 124890, 124879, 144275,  62487,  62239,  95887,  54545,  83534,
  3484.      *  59280,  67151,  67149,  67163,  78615, 120791, 120797, 123991,
  3485.      * 123997,  79137,  95905,  59468, 108370,  63327,  67148,  62750,
  3486.      *  51395,  51396,  51397/
  3487.       DATA V0/18,49,16,29,29,26,29,51,1,31,26,22,16,25,1,39,1,2,50,1,52,
  3488.      11,43,1,42,1,48,1,51,1,39,1,49,1,50,1,44,1,45,1,47,1,41,1,40,2,20,
  3489.      217,2,15,26,2,18,26,2,31,26,2,26,29,2,13,36,3,16,26,17,3,16,25,15,
  3490.      33,35,26,29,3,12,25,15,3,25,26,31,3,24,26,15,4,19,12,23,31,4,31,19,
  3491.      416,25,4,16,23,30,16,4,14,12,30,16,4,14,12,23,23,4,18,26,31,26,4,
  3492.      515,12,31,12,4,13,36,31,16,4,27,23,32,30,5,23,12,13,16,23,5,13,12,
  3493.      630,16,15,5,24,20,25,32,30,5,34,19,20,23,16,6,16,25,12,13,23,16,6,
  3494.      729,16,31,32,29,25,7,15,20,30,12,13,23,16,7,15,16,14,23,12,29,16,7,
  3495.      812,15,15,29,16,30,30,7,20,25,20,31,20,12,23,8,49,25,32,24,13,16,
  3496.      929,50,8,49,30,31,29,20,25,18,50,9,20,25,31,16,29,29,32,27,31,9,27,
  3497.      A29,26,14,16,15,32,29,16,9,23,20,31,16,29,12,23,23,36,12,49,20,15/
  3498.       DATA V1/16,25,31,20,17,20,16,29,50,813276224,808598592,813315727,
  3499.      1822083584,813233943,822083584,809879135,449052672,814032086,
  3500.      2264503296,809865246,432275456,809337747,407310336,812238417,
  3501.      3472742976,812709526,188021824,812238039,192035904,813741843,
  3502.      4187786225,808818205,506300337,812709259,508401201,813032158,
  3503.      5257750558,822083584,810352653,372111183,822083584,813287375,
  3504.      66862622,822083584,809023371,5846878,822083584,809023371,4780750,
  3505.      7822083584,811136030,6862622,822083584,808310611,291599320,
  3506.      8516161536,809379484,259380441,415498240,809879135,436282315,
  3507.      9247726080,808556504,234955723,247726080,810352669,506323927,
  3508.      A258075712,814032086,251712907,527760448,810386654,321740822/
  3509.       DATA V2/326495296,810386654,321740818,254602304,808761167,7665039,
  3510.      1226072369,813741843,187786176,405631985,808818205,506300288,
  3511.      2305968049,813032158,257750558,5846878,822083584,808760726,7725790,
  3512.      3257750558,822083584,812238413,255457039,4780750,822083584,
  3513.      4812238413,255457039,6337999,822083584,812168971,389931996,5846878,
  3514.      5822083584,812168971,389931996,4780750,822083584,808499023,
  3515.      6235012828,321701263,822083584,811177043,221077520,188081756,
  3516.      7822083584,813036317,225523358,4780750,822083584,808499027,
  3517.      8218224523,507343832,516161536,809865246,419551115,507343832,
  3518.      9516161536,813032410,3732499,407758041,415498240,810345432,
  3519.      A508363983,469853405,516161536,811177043,221077530,474837724/
  3520.       DATA V3/600047616,812709791,476055390,192476623,410718208,
  3521.      1811119375,369157072,325138323,425922560,813315727,3732310,
  3522.      2191936403,425922560,810410972,192493144,3511838,476408896,
  3523.      3811177043,221077533,255170062,192035904,811177043,221077519,
  3524.      4577356765,491623985,809038678,191936403,425722838,257750558,
  3525.      5822083584,812238413,255457039,3732499,407758041,415498240,
  3526.      6809038678,191936403,425723742,192476623,410718208,808305886,
  3527.      7308082579,218167450,473814867,425922560,810345432,508363983,
  3528.      8469882511,223151309,192493144,822083584/
  3529.       DATA VLOC /1,20,22,24,26,28,30,32,34,36,38,40,42,44,46,49,52,55,
  3530.      158,61,64,68,72,76,80,84,88,93,98,103,108,113,118,123,128,133,139,
  3531.      2145,151,157,164,171,179,187,195,203,212,221,231,241,251,131336,
  3532.      3131337,196874,196876,229646,229648,229650,262420,295190,295192,
  3533.      4295194,327964,327966,327968,360738,360741,360744,360747,360750,
  3534.      5360753,393524,393527,393530,393533,459072,459075,459078,459081,
  3535.      6491852,491855,491858,524629,524633,524637,524641,524645,524649,
  3536.      7524653,524657,524661,557433,557437,557441,557445,557449,590221,
  3537.      8590225,590229,623001,623005,655777,688549,721322,754095,754100,
  3538.      9852409/
  3539.       DATA VINDX /1,14,20,26,35,39,41,45,47,50,50,50,51/
  3540.       DATA C10/0,0,0,32768,688288,35815424,713162890,715827202,
  3541.      1673744896,991953792,196620,201326640,0,15740976,2129920,8388608,
  3542.      22563,134283266,671219840,671091360,545786880,204472320,805306368,
  3543.      3245952,541360640,0,40,33686536,134217728,0,10493968,16384,0,1281,
  3544.      44194308,0,0,335807488,1048576,0,81984,268435712,0,20,16842752,0,0,
  3545.      55246992,1064960,4194304,1281,67108864,1,4096,262144,4096,0,0,
  3546.      6536904192,131072,40,33619972,67108880,0,5247008,2129920,8388608,
  3547.      72562,67108865,335544384,335545680,268730368,0,0,64,268452096,
  3548.      865536,20,16842756,67108880,0,5246992,1064960,0,1281,4194308,0,0,
  3549.      9335822848,0,0,8,168,8232,174112,35651584,44040194,10485802,
  3550.      A545267728,1064960,4194304,1281,0,0,0,262144,0,0,131200,268435456/
  3551.       DATA C11/0,0,2129920,0,0,33554448,16384,0,1281,136314880,0,2,0,0,
  3552.      10,128,268435712,0,20,16908296,134217760,0,10494208,0,0,0,
  3553.      2138412292,1024,0,335822848,0,0,0,268435456,0,0,18907136,0,0,
  3554.      333554448,0,0,0,254192288,44081696,2129920,41514,713042442,
  3555.      4142606856,0,0,0,16,2228224,0,139264,134742016,0,0,256,201239200,
  3556.      544081696,27885576,1049600,68157440,268435456,81984,268452096,
  3557.      665536,20,19955712,0,0,33555080,715456680,168951816,134217728,
  3558.      767108864,0,0,1024,68157440,268435456,81984,0,0,16,18874368,0,0,0,
  3559.      82,0,0,4194564,1024,0,335847978,713042442,142606856,10,233482242,
  3560.      9673744896,136314880,2935466,537559688,536904192,16,1064960,0,1281,
  3561.      A134217730,671744128,671091360,537411584,344064,16859136,356581444/
  3562.       DATA C12/84,4116,87056,18907136,0,0,0,0,0,1280,0,0,0,311296,0,0,9,
  3563.      167108865,67109888,0,1048576,22021121,5242901,272633856,0,0,1024,
  3564.      2134217730,671744128,671091360,537411584,0,0,8,134217728,0,128,0,0,
  3565.      30,5243136,0,0,0,26214400,0,8912904,0,0,0,81924,84,37752852,87056,
  3566.      417825792,0,0,256,5376,263424,5571585,71303168,0,4456452,16793600,
  3567.      50,1088,1048576,0,0,0,16777216,0,0,4744,168,151126016,0,4194564,
  3568.      61024,0,335839232,688288,36864000,713162884,0,0,0,1048576,0,0,0,0,
  3569.      70,1,169869312,44081184,0,16384,0,0,4,84,4198420,87056,287342592,0,
  3570.      80,16777728,0,0,0,169869312,44081184,0,41472,9732,8388608,8,
  3571.      9134217728,0,0,1048576,0,0,260,0,0,0,169956608,44081184,1064960,
  3572.      A1024,0,1088,1048576/
  3573.       DATA C1TRI0/197379,197386,197389,197400,197421,197422,197426,
  3574.      1209411,329219,329226,329229,329240,329261,329262,329266,393987,
  3575.      2393994,393997,394008,394029,394030,394034,406019,590595,590602,
  3576.      3590605,590616,590637,590638,590642,602627,656131,656138,656141,
  3577.      4656152,656173,656174,656178,668163,721667,721674,721677,721688,
  3578.      5721709,721710,721714,733699,787203,787210,787213,787224,787245,
  3579.      6787246,787250,799235,864771,918275,918282,918285,918296,918317,
  3580.      7918318,918322,930307,995843,998918,1180419,1180426,1180429,
  3581.      81180440,1180461,1180462,1180466,1192451,1323523,1323525,1326596,
  3582.      91326598,1328897,1442563,1442570,1442573,1442584,1442605,1442606,
  3583.      A1442610,1454595,1508099,1508106,1508109,1508120,1508141,1508142/
  3584.       DATA C1TRI1/1508146,1520131,1573635,1573642,1573645,1573656,
  3585.      11573677,1573678,1573682,1585667,1639171,1639178,1639181,1639192,
  3586.      21639213,1639214,1639218,1651203,1901315,1901322,1901325,1901336,
  3587.      31901357,1901358,1901362,1913347,1978883,2228995,2229002,2229005,
  3588.      42229016,2229037,2229038,2229042,2241027,2425603,2425610,2425613,
  3589.      52425624,2425645,2425646,2425650,2437635,2622211,2622218,2622221,
  3590.      62622232,2622253,2622254,2622258,2634243,2949665,2949667,2949675,
  3591.      73091713,3343107,3343114,3343117,3343128,3343149,3343150,3343154,
  3592.      83355139,3408643,3408650,3408653,3408664,3408685,3408686,3408690,
  3593.      93420675,3670787,3670794,3670797,3670808,3670829,3670830,3670834,
  3594.      A3682819,3932931,3932938,3932941,3932952,3932973,3932974,3932978/
  3595.       DATA C1TRI2/3944963,4195075,4195082,4195085,4195096,4195117,
  3596.      14195118,4195122,4207107,4338179,4338181,4341252,4341254,4343553,
  3597.      24348700,4403715,4403717,4406788,4406790,4409089,4538114,4538116,
  3598.      34600323,4603396,4603398,4796931,4796933,4800004,4800006,4802305,
  3599.      44861186,5127938,5127940,5324546,5324548,5386755,5386757,5389828,
  3600.      55389830,5392129,5517827,5517829,5520900,5520902,5523201,5584129,
  3601.      65649665,5714434,5714436,5899011,5899018,5899021,5899032,5899053,
  3602.      75899054,5899058,5911043,6369795,6369797,6372868,6372870,6375169,
  3603.      86816771,6816818/
  3604.       DATA PRTB /0,5592629,5582637,21813,21846,3933,3916,3919,85,15,71,
  3605.      155,103,96,83,92,104,26,39,41,0,17727,20031,22322,24144,20799,840,
  3606.      223112,32,106,44,13,50,0,0,22322,17727,24144,20031,20799,23112,62,
  3607.      350,45,7,8,0,0,0,7,0,16,0,0,0,3656,91,0,0,0,50,0,0,0,57,0,12849,0,
  3608.      497,21,57,88,0,0,4861186,106,26889,26890,26914,26917,10,0,21586,97,
  3609.      573,13835,13836,13849,0,30,13,0,13,0,16963,82,73,66,0,50,70,
  3610.      63360820,15932,51,56,29,40,97,0,98,0,0,25874,25878,0,97,0,24,0,0,
  3611.      74078664,22807,0,4064518,0,26628,42,26944,0/
  3612.       DATA PRDTB /0,38,39,36,37,25,26,27,35,24,6,7,8,9,10,11,12,13,14,
  3613.      115,16,61,78,41,72,114,117,121,62,70,79,118,122,42,73,43,63,74,80,
  3614.      2119,123,84,47,48,100,101,96,83,97,99,98,54,126,127,44,21,22,55,67,
  3615.      369,77,128,49,68,53,125,59,124,40,45,52,76,75,120,65,64,103,104,
  3616.      4105,106,107,102,34,46,23,109,110,111,108,51,116,115,113,112,19,3,
  3617.      528,18,2,60,82,31,81,30,32,33,50,20,5,66,71,1,88,89,87,17,4,93,92,
  3618.      658,29,91,90,86,85,57,56,95,94/
  3619.       DATA HDTB /0,84,84,84,84,73,73,73,84,73,91,91,91,91,91,91,91,91,
  3620.      191,91,91,68,77,86,106,61,61,62,69,74,78,81,90,87,94,87,69,94,78,
  3621.      281,90,70,97,97,64,64,64,60,64,64,64,57,51,52,58,66,67,57,53,53,88,
  3622.      356,96,53,92,63,102,63,85,58,92,80,80,62,98,98,105,105,105,105,105,
  3623.      4105,103,58,55,54,54,54,54,83,61,61,61,61,75,82,73,75,82,102,71,99,
  3624.      571,99,76,79,96,75,65,98,106,59,101,101,101,91,65,100,100,102,93,
  3625.      689,89,72,72,104,104,95,95/
  3626.       DATA PRLEN /0,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,3,3,3,3,3,3,
  3627.      13,2,2,2,2,2,1,1,3,3,3,3,3,3,2,2,2,2,2,1,1,1,2,1,2,1,1,1,3,2,1,1,1,
  3628.      22,1,1,1,2,1,3,1,2,2,2,2,1,1,4,2,3,3,3,3,2,1,3,2,2,3,3,3,1,2,2,1,2,
  3629.      31,3,2,2,2,1,2,2,4,3,2,2,2,2,2,1,2,1,1,3,3,1,2,1,2,1,1,4,3,1,4,1,3,
  3630.      42,3,1/
  3631.       DATA CONTC /0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  3632.      10,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,
  3633.      20,0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  3634.      30,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  3635.      40,0,0/
  3636.       DATA LEFTC /105,4,42,94,85/
  3637.       DATA LEFTI /0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,
  3638.      11,1,1,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5/
  3639.       DATA CONTT /0/
  3640.       DATA TRIPI /0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  3641.      10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1/
  3642.       DATA PRIND /1,21,28,35,42,44,48,49,51,51,51,51,51,51,51,51,51,53,
  3643.      153,54,54,55,55,55,55,55,55,56,57,57,57,58,58,59,59,60,61,61,62,62,
  3644.      263,63,63,64,64,66,68,68,69,69,74,74,74,76,82,82,82,82,85,85,85,89,
  3645.      392,94,94,99,99,99,100,100,100,101,107,107,107,109,109,110,110,110,
  3646.      4111,111,112,112,112,112,112,112,112,115,115,117,117,117,117,119,
  3647.      5119,119,120,121,123,125,127,127,127,129,129/
  3648.       DATA NSY /106/, NT /50/, VLEN /445/, VIL /12/, C1W /102/,
  3649.      2C1L /363/, NC1TRI /242/, PRTBL /128/, PRDTBL /128/, HDTBL /128/,
  3650.      3PRLENL /128/, CONCL /128/, LEFTCL /4/, LEFTIL /56/, CONTL /0/,
  3651.      4TRIPL /56/, PRIL /106/, PACK /5/, TOKEN /0/, IDENTV /50/,
  3652.      5NUMBV /45/, STRV /46/, DIVIDE /0/, EOFILE /20/, PROCV /48/,
  3653.      6SEMIV /1/, DECL /42/, DOV /15/, ENDV /21/, GROUPV /55/,
  3654.      7STMTV /65/, SLISTV /82/
  3655.       END
  3656.