.@$@0
FLG @ = @.
      JF@10=JF@20;$
$
@@@ @ = @ @ @.
      J@10@40=J@10@50@60J@10@70;$
$
@@@ @ = @@@ @.
      J@10@40=J@50@80;$
$
GET @ = @.
      JF@10=L[JP@20];$
      JV@10=L[JP@20+1];$
      JP@10=L[JP@20+2];$
$
STO @ = @.
      L[JP@10]=JF@20;$
      L[JP@10+1]=JV@20;$
      L[JP@10+2]=JP@20;$
$
TO @@ IF @@@ @ = @.
      if(J@30@60 == J@30@70) goto L@10@20;$
$
TO @@ IF @@@ @ NE @.
      if(J@30@60 != J@30@70) goto L@10@20;$
$
TO @@ IF @@@ @ LT @.
      if(J@30@60 < J@30@70) goto L@10@20;$
$
TO @@ IF @@@ @ LE @.
      if(J@30@60 <= J@30@70) goto L@10@20;$
$
TO @@ IF @@@ @ GE @.
      if(J@30@60 >= J@30@70) goto L@10@20;$
$
TO @@ IF @@@ @ GT @.
      if(J@30@60 > J@30@70) goto L@10@20;$
$
TO @@ BY @.
      JP@30=@00-99;$
      goto L@10@20;$
  L@00: $
$
RETURN BY @.
/*C        USE THE FOLLOWING LINE WHEN TRANSLATING FLT1 */$
/*        goto L100;*/$
/*C        USE THE FOLLOWING SWITCH STMT WHEN TRANSLATING FLT2*/$
/*switch (JP@10){*/$
/*case 1: goto L100;*/$
/*case 2: goto L101;*/$
/*case 3: goto L102;*/$
/*case 4: goto L103;*/$
/*}; */$
/*        USE THE FOLLOWING SWITCH STMT WHEN TRANSLATING STAGE2 */$
  switch (JP@10) {$
case 1: goto L100;$
case 2: goto L101;$
case 3: goto L102;$
case 4: goto L103;$
case 5: goto L104;$
case 6: goto L105;$
case 7: goto L106;$
case 8: goto L107;$
case 9: goto L108;$
case 10: goto L109;$
case 11: goto L110;$
case 12: goto L111;$
case 13: goto L112;$
case 14: goto L113;$
case 15: goto L114;$
case 16: goto L115;$
case 17: goto L116;$
case 18: goto L117;};;$
$
TO @@.
      goto L@10@20;$
$
STOP.
      return;$
$
VAL @ = CHAR.
      JV@10=LB[LBR];$
      LBR=LBR+1;$
$
CHAR = VAL @.
      IWRCH(JV@10,LB,&LBW,&JF@10,&LBL);$
$
READ NEXT @.
      JF@10=IOOP(-1,JV@10,LB,1,&LBL);$
      LB[LBL]= -1;$
      LBR=1;$
$
WRITE NEXT @.
      JF@10=IOOP(1,JV@10,LB,1,&LBL);$
      LBW=1;$
$
REWIND @.
      J=1;$
      JF@10=IOOP(0,JV@10,LB,1,&J);$
      JF@10=0;$
$
LOC @@.
   L@10@20: $
$
MESSAGE @@@@ TO @.
      MB[11]=@11;$
      MB[12]=@21;$
      MB[13]=@31;$
      MB[14]=@41;$
      J=21;$
      JF@50=IOOP(1,JV@50,MB,1,&J);$
$
END PROGRAM.
}$
$
MESSAGE @@@@@@@.
for (J=1;J<=9;J++)
 MB[J]=@11;$
      MB[10]=@21;$
      MB[15]=@21;$
      MB[16]=@31;$
      MB[17]=@41;$
      MB[18]=@51;$
      MB[19]=@61;$
      MB[20]=@71;$
$$
PROGR()
{
      int LB[1026],MB[21],L[12001],J;
      int JP0,JP1,JP2,JP3,JP4,JP5,JP6,JP7,JP8,JP9;
      int JV0,JV1,JV2,JV3,JV4,JV5,JV6,JV7,JV8,JV9;
      int JVA,JVB,JVC,JVD,JVE,JVF,JVG,JVH;
      int JVI,JVJ,JVK,JVL,JVM,JVN,JVO,JVP;
      int JVQ,JVR,JVS,JVT,JVU,JVV,JVW,JVX,JVY,JVZ;
      int JFA,JFB,JFC,JFD,JFE,JFF,JFG,JFH;
      int JFI,JFJ,JFK,JFL,JFM,JFN,JFO,JFP;
      int JFQ,JFR,JFS,JFT,JFU,JFV,JFW,JFX,JFY,JFZ;
      int JPA,JPB,JPC,JPD,JPE,JPF,JPG,JPH;
      int JPI,JPJ,JPK,JPL,JPM,JPN,JPO,JPP,JPQ,JPR;
      int JPS,JPT,JPU,JPV,JPW,JPX,JPY,JPZ;
      int JF0,JF1,JF2,JF3,JF4,JF5,JF6,LBL,LBR,LBW;
      extern MAXCH; extern long JCHAN[];
      JP9=12000;
      JF0=0;
      JF1=1;
      JF2=2;
      JF3=3;
      JV0=0;
      JV1=1;
      JV2=2;
      JV3=3;
      JV4=4;
      JV5=5;
      JV6=6;
      JV7=7;
      JV8=8;
      JV9=9;
      JP0=0;
      JP1=1;
      JP2=2;
      JP3=3;
      JP5=10;
      JP7=3;
      JP8=1;
      LBL=1;
      LBR=1;
      LBW=1;
      JP9=JP8+(JP9/JP7-1)*JP7;
      JFV=0;
      JVV=0;
MESSAGE * ERROR.

FLG I = 0.                   SET UP MACRO CHANNEL.                      STG20001
VAL I = 1 + 0.                                                          STG20002
PTR I = 0 + 0.                                                          STG20003
READ NEXT I.                 GRAB THE FLAG LINE.                        STG20004
TO 98 IF FLG I NE 0.         QUIT UNLESS ALL IS OK.                     STG20005
VAL A = CHAR.                SOURCE EOL.                                STG20006
PTR A = 8 + 0.               SET UP A VOID TEMPLATE TREE.               STG20007
STO A = I.                   SAVE THE MACRO CHANNEL SPEC.               STG20008
FLG B = 2.                   PHASE FLAG.                                STG20009
VAL B = CHAR.                SOURCE PARAMETER FLAG.                     STG20010
VAL C = CHAR.                MCT EOL.                                   STG20011
PTR C = 9 + 0.               INITIAL TEXT POINTER.                      STG20012
VAL D = CHAR.                MCT PARAMETER FLAG.                        STG20013
VAL E = CHAR.                ZERO CHARACTER.                            STG20014
PTR E = VAL E.               PREPARE FOR NORMALIZATIONS.                STG20015
VAL F = CHAR.                SPACE CHARACTER.                           STG20016
PTR F = A + 7.               SET UP A VOID SYMBOL TREE.                 STG20017
STO F = 0.                                                              STG20018
VAL G = 0 + 0.               RESET THE DIGIT COUNT FOR NUMBER CONVERSIONSTG20019
PTR H = 5 * 7.               10*DESCRIPTOR LENGTH.                      STG20020
FLG J = 1.                   FLAG TO TERMINATE CREATED SYMBOL.          STG20021
PTR J = 0 + 0.                                                          STG20022
FLG L = 1.                   END-OF-LINE INDICATOR.                     STG20023
VAL L = 0 - 1.               CARRIAGE RETURN IS -1.                     STG20024
PTR L = 0 + 0.               LOCATION COUNTER.                          STG20025
VAL M = CHAR.                LEFT PARENTHESIS.                          STG20026
PTR M = 0 + 0.               RESET THE SKIP COUNT.                      STG20027
FLG N = 0.                   SET EXPRESSION SIGN POSITIVE.              STG20028
VAL N = CHAR.                ADDITION OPERATOR.                         STG20029
FLG O = 0.                                                              STG20030
VAL O = CHAR.                SUBTRACTION OPERATOR.                      STG20031
VAL P = CHAR.                MULTIPLICATION OPERATOR.                   STG20032
VAL Q = CHAR.                DIVISION OPERATOR.                         STG20033
VAL R = CHAR.                RIGHT PARENTHESIS.                         STG20034
PTR R = 0 + 0.               SET NO REPETITION IN PROGRESS.             STG20035
PTR 4 = 7 + 7.               LENGTH OF TWO DESCRIPTORS.                 STG20036
PTR 8 = F + 7.               POINT TO THE FIRST AVAILABLE SPACE.        STG20037
TO 01 BY D.                  START WORKING IN EARNEST.                  STG20038
LOC 01.                      ROUTINE TO READ FROM THE INPUT.            STG20039
GET I = A.                   RECALL THE CHANNEL SPEC.                   STG20040
READ NEXT I.                 GRAB A LINE.                               STG20041
TO 98 IF FLG I NE 0.         GET OUT UNLESS ALL IS OK.                  STG20042
PTR I = C + 0.                                                          STG20043
VAL Y = 0 + 0.                                                          STG20044
PTR Y = C + 0.                                                          STG20045
TO 02 IF PTR M = 0.          SHOULD THIS LINE BE SKIPPED, NO.           STG20046
PTR M = M - 1.               YES, DROP THE SKIP COUNT                   STG20047
TO 01.                       TRY AGAIN.                                 STG20048
LOC 02.                      READING LOOP.                              STG20049
PTR 9 = I + 0.               ADVANCE THE SPACE POINTER.                 STG20050
VAL I = CHAR.                READ THE NEXT CHARACTER.                   STG20051
PTR I = 9 - 7.               POINT TO THE NEXT CHARACTER SPACE.         STG20052
TO 97 IF PTR 8 GE I.         HAVE WE OVERRUN THE AREA, YES.             STG20053
STO 9 = I.                   PUT AWAY THE CHARACTER.                    STG20054
TO 04 IF VAL I = L.          WAS THIS A CARRIAGE RETURN, YES.           STG20055
TO 03 IF VAL I = A.          HAVE WE COMPLETED THE READ, YES.           STG20056
VAL Y = Y + 1.               BUMP THE INPUT STRING LENGTH.              STG20057
TO 02 IF VAL I NE B.         NO, IS THIS A PARAMETER FLAG, NO.          STG20058
PTR B = I + 0.               YES, SET THE PARAMETER POINTER AND         STG20059
STO 9 = B.                   STORE IT WITH THE PHASE FLAG.              STG20060
TO 02.                                                                  STG20061
LOC 03.                      READ THE REMAINDER OF THE LINE.            STG20062
PTR 9 = I + 0.               POINT TO THE FIRST FREE SPACE.             STG20063
VAL I = CHAR.                GRAB ANOTHER CHARACTER.                    STG20064
PTR I = 9 - 7.               SET A POINTER TO THE NEXT CHARACTER.       STG20065
STO 9 = I.                                                              STG20066
TO 97 IF PTR 8 GE I.         HAVE WE RUN OUT OF SPACE, YES.             STG20067
TO 03 IF VAL I NE L.         WAS THIS A CARRIAGE RETURN, NO.            STG20068
LOC 04.                      SCANNER.                                   STG20069
PTR U = 9 - 7.               SET ALL PARAMETERS UNDEFINED.              STG20070
STO U = 3.                                                              STG20071
PTR U = U - 7.                                                          STG20072
STO U = 3.                                                              STG20073
PTR U = U - 7.                                                          STG20074
STO U = 3.                                                              STG20075
PTR U = U - 7.                                                          STG20076
STO U = 3.                                                              STG20077
PTR U = U - 7.                                                          STG20078
STO U = 3.                                                              STG20079
PTR U = U - 7.                                                          STG20080
STO U = 3.                                                              STG20081
PTR U = U - 7.                                                          STG20082
STO U = 3.                                                              STG20083
PTR U = U - 7.                                                          STG20084
STO U = 3.                                                              STG20085
PTR V = U - 7.                                                          STG20086
STO V = 3.                                                              STG20087
PTR U = V - 7.                                                          STG20088
PTR 9 = U + 0.               FREE SPACE POINTER.                        STG20089
TO 97 IF PTR 8 GE 9.                                                    STG20090
GET W = A.                   SET UP THE TEMPLATE TREE POINTER.          STG20091
GET X = Y.                   GRAB THE FIRST INPUT CHARACTER.            STG20092
FLG Y = 0.                   SET THE STRING UNDEFINED.                  STG20093
PTR Z = A + 0.               SET THE TREE POINTER TO THE TEMPLATE ROOT. STG20094
TO 58 BY B.                  CALL THE SCANNER.                          STG20095
TO 50 IF FLG B = 2.          IS THIS THE DEFINITION PHASE, YES.         STG20096
TO 56 IF FLG Y = 0.          WAS THERE A DEFINITION, NO.                STG20097
STO 9 = 1.                   INITIALLY NO CREATED SYMBOLS FOR THIS MACROSTG20098
PTR 9 = 9 - H.               SPACE FOR THE CREATED SYMBOLS.             STG20099
STO 9 = J.                   PREVIOUS PARAMTER POINTER.                 STG20100
PTR J = 9 + H.               SET THE CURRENT PARAMETER POINTER.         STG20101
PTR 9 = 9 - 7.                                                          STG20102
STO 9 = C.                   PREVIOUS TEXT POINTER.                     STG20103
PTR 9 = 9 - 7.                                                          STG20104
STO 9 = D.                   SAVE THE OLD RETURN ADDRESS.               STG20105
PTR 9 = 9 - 7.                                                          STG20106
STO 9 = K.                   SAVE THE CURRENT TEXT POINTER.             STG20107
PTR K = U + 0.               SET UP THE NEW TEXT POINTER.               STG20108
PTR 9 = 9 - 7.                                                          STG20109
STO 9 = R.                   SAVE THE OLD REPETITION POINTER.           STG20110
PTR R = 0 + 0.               SET NO REPETITION IN PROGRESS.             STG20111
PTR C = 9 - 7.               NEW TEXT POINTER.                          STG20112
TO 97 IF PTR 8 GE C.         IS THE SPACE FULL ALREADY, YES.            STG20113
TO 05 BY D.                  GO PROCESS THE MCT                         STG20114
LOC 05.                      SUBSTITUTE PARAMETERS IN ONE LINE.         STG20115
PTR 9 = C + 0.               DISCARD ANY JUNK.                          STG20116
PTR Y = 0 + 0.               RESET THE LOOP COUNTER.                    STG20117
LOC 06.                                                                 STG20118
TO 07 IF PTR M = 0.          SHOULD WE SKIP LINES, NO.                  STG20119
PTR Z = K + 7.               RETAIN THE CODE BODY POSITION.             STG20120
GET K = K.                   SKIP A LINE.                               STG20121
GET I = K.                   GRAB THE TERMINATOR.                       STG20122
TO 08 IF VAL I = 1.          CHECK FOR THE END OF THE MACRO.            STG20123
PTR M = M - 1.               DECREMENT THE SKIP COUNT.                  STG20124
GET Z = Z.                   GRAB THE FIRST SKIPPED ELEMENT.            STG20125
TO 06 IF FLG Z NE 3.         IGNORE NON FUNCTION CALLS.                 STG20126
PTR Y = Y + 1.               BUMP THE COUNT OF LOOPS ENTERED.           STG20127
TO 06 IF VAL Z = 7.          LEAVE THE INCREM VALUE IF LOOP ENTERED.    STG20128
PTR Y = Y - 1.               ELSE DROP IT BACK.                         STG20129
TO 06 IF VAL Z NE 8.         NO CHANGE IF NOT LOOP END.                 STG20130
PTR Y = Y - 1.               ELSE DECREMANT THE COUNT                   STG20131
TO 06 IF PTR Y GE 0.         AND GO ON IF SKIPPING AN ENTIRE LOOP.      STG20132
TO 06 IF PTR R = 0.          OR IF THERE IS NO CURRENT LOOP.            STG20133
PTR U = R - 7.               ELSE TERMINATE THE LOOP.                   STG20134
GET Y = U.                                                              STG20135
TO 49 IF FLG Y NE 1.         IS IT COUNT CONTROLLED, NO.                STG20136
PTR C = R + 0.               YES, RESET THE LINE SPACE POINTER.         STG20137
GET R = R.                   RESTORE ITERATION POINTER.                 STG20138
TO 05.                       IF NOT, CONTINUE.                          STG20139
LOC 07.                      CHARACTER PROCESSING LOOP.                 STG20140
PTR K = K + 7.               ADVANCE THE POINTER AND                    STG20141
GET I = K.                   FETCH THE NEXT CHARACTER                   STG20142
TO 09 IF FLG I = 2.          IS THIS A PARAMETER CALL, YES.             STG20143
TO 22 IF FLG I = 3.          NO, IS IT A COMPILER SWITCH, YES.          STG20144
PTR I = 9 - 7.               NO, SET THE POINTER TO THE NEXT SPACE.     STG20145
STO 9 = I.                   PUT THE CHARACTER IN THE PSEUDO-INPUT.     STG20146
PTR 9 = I + 0.               ADVANCE THE SPACE POINTER.                 STG20147
TO 97 IF PTR 8 GE 9.         IS THE SPACE EXHAUSTED, YES.               STG20148
TO 07 IF FLG I = 0.          WAS THAT THE LAST CHARACTER, NO.           STG20149
PTR Y = C - 9.               SET THE PSEUDO-INPUT LENGTH.               STG20150
PTR Y = Y / 7.                                                          STG20151
PTR Y = Y - 1.                                                          STG20152
VAL Y = PTR Y.                                                          STG20153
PTR Y = C + 0.                                                          STG20154
TO 04 IF VAL I NE 1.         WAS THAT THE END OF THE CODE BODY, NO.     STG20155
LOC 08.                                                                 STG20156
PTR 9 = J - H.               RESTORE FROM THE CURRENT RECURSION.        STG20157
GET J = 9.                   PARAMETER POINTER.                         STG20158
PTR 9 = 9 - 7.                                                          STG20159
GET C = 9.                   TEXT SPACE POINTER.                        STG20160
PTR 9 = 9 - 7.                                                          STG20161
GET D = 9.                   RETURN ADDRESS.                            STG20162
PTR 9 = 9 - 7.                                                          STG20163
GET K = 9.                   CODE BODY POINTER.                         STG20164
PTR 9 = 9 - 7.                                                          STG20165
GET R = 9.                   ITERATION POINTER.                         STG20166
RETURN BY D.                                                            STG20167
LOC 09.                      DO PARAMETER CONVERSION.                   STG20168
PTR V = J + I.               NO, FIND THE PARAMETER POINTER.            STG20169
TO 21 IF VAL I = 6.          SET A PARAMETER.                           STG20170
GET Y = V.                   AND LOAD IT.                               STG20171
TO 45 IF VAL I = 7.          INITIATE REPETITION OVER AN ARGUMENT LIST. STG20172
TO 23 IF FLG Y = 3.          ERROR IF PARAMETER IS UNDEFINED.           STG20173
GET X = Y.                   GET THE FIRST CHARACTER.                   STG20174
TO 11 IF VAL I = 0.          COPY CONVERSION.                           STG20175
TO 10 IF VAL I = 1.          SYMBOL REFERENCE.                          STG20176
TO 12 IF VAL I = 2.          LOCATION SYMBOL DEFINITION.                STG20177
TO 15 IF VAL I = 4.          REQUEST FOR EXPRESSION CONVERSION.         STG20178
PTR X = Y + 0.                                                          STG20179
TO 20 IF VAL I = 3.          REQUEST THE BREAK CHARACTER.               STG20180
PTR N = VAL Y.                                                          STG20181
TO 18 IF VAL I = 5.          REQUEST FOR PARAMETER LENGTH.              STG20182
TO 23 IF VAL Y NE 1.         IF NOT ONE CHARACTER, SIGNAL ERROR.        STG20183
PTR N = VAL X.                                                          STG20184
TO 18 IF VAL I = 8.          REQUEST FOR INTERNAL REPRESENTATION.       STG20185
MESSAGE CONV TO 4.           THE CONVERSION DIGIT IS UNAVAILABLE.       STG20186
TO 94 BY B.                  CALL ERROR TRACEBACK.                      STG20187
TO 07.                       CONTINUE WITH THE LINE.                    STG20188
LOC 10.                      DEAL WITH A LOCATION SYMBOL.               STG20189
PTR V = 9 + 7.               STACK POINTER FOR SCANNER.                 STG20190
GET W = F.                   SET UP THE SYMBOL TREE.                    STG20191
PTR Z = F + 0.               SET THE TREE POINTER TO THE SYMBOL ROOT.   STG20192
TO 58 BY B.                  CALL ON THE SCANNER.                       STG20193
TO 07 IF FLG Y NE 1.         WAS THE SYMBOL DEFINED, NO.                STG20194
FLG I = 0.                   PREPARE TO COPY OVER THE SYMBOL VALUE.     STG20195
GET X = Y.                   NO, GRAB THE FIRST CHARACTER.              STG20196
LOC 11.                      COPY A PARAMETER TO THE PSEUDO-INPUT.      STG20197
TO 07 IF VAL Y = 0.          IS THE PARAMETER VOID, YES.                STG20198
GET I = X.                   FETCH THE NEXT CHARACTER.                  STG20199
PTR X = 9 - 7.               SET THE POINTER                            STG20200
STO 9 = X.                   AND PUT IT IN THE PSEUDO-INPUT.            STG20201
PTR 9 = X + 0.               POINT TO THE NEXT FREE SPACE.              STG20202
VAL Y = Y - 1.               DECREMENT THE CHARACTER COUNT.             STG20203
TO 07 IF VAL Y = 0.          ARE WE DONE, YES.                          STG20204
GET X = I.                   NO, GET THE NEXT CHARACTER.                STG20205
PTR I = 9 - 7.               SET ITS POINTER.                           STG20206
STO 9 = I.                   PUT AWAY THE COPY.                         STG20207
PTR 9 = I + 0.               POINT TO THE NEXT FREE SPACE.              STG20208
TO 97 IF PTR 8 GE 9.         HAVE WE EXHAUSTED THE SPACE, YES.          STG20209
VAL Y = Y - 1.               NO, DROP THE COUNT OF CHARACTERS.          STG20210
TO 11.                                                                  STG20211
LOC 12.                      MOVE A DEFINITION TO THE OUTPUT.           STG20212
FLG B = 2.                   ALLOW SYMBOL DEFINITION.                   STG20213
GET W = F.                   SET UP THE SYMBOL TREE.                    STG20214
PTR Z = F + 0.               SET THE TREE POINTER TO THE SYMBOL ROOT.   STG20215
TO 58 BY B.                  CALL ON THE SCANNER.                       STG20216
FLG B = 0.                   EXIT THE DEFINITION PHASE.                 STG20217
GET X = Y.                                                              STG20218
TO 11 IF FLG Y = 1.          IS THIS A NEW SYMBOL, NO.                  STG20219
PTR Y = 8 + 0.               YES, SET UP THE DEFINITION POINTER.        STG20220
FLG Y = 1.                   MARK IT AS HAVING BEEN DEFINED.            STG20221
PTR L = L + 1.               BUMP THE LOCATION COUNTER                  STG20222
PTR X = L + 0.               AND INSERT IT AS THE DEFINITION.           STG20223
PTR W = 9 + 7.               USE STORE AT THE TOP AS TEMPORARY.         STG20224
VAL Y = 0 + 0.               COUNT THE DIGITS.                          STG20225
LOC 13.                      CONVERT ONE DIGIT AT A TIME.               STG20226
PTR V = X / 5.               GET THE QUOTIENT BY INTEGER DIVISION.      STG20227
PTR Z = V * 5.               THE REMAINDER MUST BE FOUND BY MULTIPLYING STG20228
PTR X = X - Z.               AND THEN SUBTRACTING.                      STG20229
VAL X = PTR X.               MOVE THE RESULT TO THE VALUE FIELD.        STG20230
PTR X = V + 0.               THE QUOTIENT IS TO BE OPERATED ON NEXT.    STG20231
PTR W = W - 7.               ADVANCE THE TEMPORARY STORAGE POINTER.     STG20232
STO W = X.                   AND SALT AWAY THE RESULT.                  STG20233
VAL Y = Y + 1.               BUMP THE DIGIT COUNT.                      STG20234
TO 97 IF PTR 8 GE W.         HAVE WE RUN OUT OF ROOM, YES.              STG20235
TO 13 IF PTR X NE 0.         NO, MUST WE GO ON, YES.                    STG20236
LOC 14.                      MOVE THE DIGITS TO THEIR DESTINATION.      STG20237
GET X = W.                   RECOVER A POSSIBLE DIGIT.                  STG20238
PTR W = W + 7.               MOVE THE DIGIT POINTER BACK.               STG20239
VAL X = X + E.               MAKE THE DIGITS INTO CHARACTERS            STG20240
PTR X = 8 + 7.               SET UP A POINTER TO THE NEXT SPACE.        STG20241
STO 8 = X.                   PUT AWAY THE CHARACTER.                    STG20242
PTR 8 = X + 0.               BUMP THE SPACE POINTER.                    STG20243
TO 14 IF PTR 9 GE W.         DID WE REALLY HAVE ANOTHER DIGIT, YES.     STG20244
STO 8 = 0.                   PUT IN THE TERMINATOR.                     STG20245
PTR 8 = 8 + 7.               ADVANCE THE SPACE POINTER.                 STG20246
TO 97 IF PTR 8 GE 9.                                                    STG20247
STO U = Y.                   PUT AWAY THE POINTER TO THE DEFINITION.    STG20248
GET X = Y.                   PICK UP THE FIRST CHAR OF THE DEFINITION.  STG20249
FLG I = 0.                   CLEAN OUT THE INPUT BUFFER.                STG20250
TO 11.                       COPY OUT THE VALUE.                        STG20251
LOC 15.                      PROCESS AN EXPRESSION PARAMETER.           STG20252
TO 74 BY P.                  EVALUATE THE EXPRESSION.                   STG20253
TO 18 IF PTR N GE 0.         AND TEST FOR NON-NEGATIVE.                 STG20254
PTR O = 9 - 7.               IF NEGATIVE, INSERT A MINUS SIGN.          STG20255
TO 97 IF PTR 8 GE O.                                                    STG20256
STO 9 = O.                                                              STG20257
PTR 9 = O + 0.                                                          STG20258
PTR N = 0 - N.               MAKE THE NUMBER POSITIVE AND               STG20259
TO 18.                       STORE DOWN.                                STG20260
LOC 16.                      CONVERSION OF PARAMETER ZERO (LOC. CNTR.)  STG20261
GET Y = V.                   GRAB THE NEXT CREATED SYMBOL.              STG20262
TO 17 IF FLG Y = 1.          IS THIS A SYMBOL, NO.                      STG20263
PTR V = V - 7.               YES, ADVANCE THE CREATED SYMBOL POINTER.   STG20264
TO 16 IF VAL Y NE I.         IS THIS THE RIGHT SYMBOL, NO.              STG20265
PTR N = Y + 0.               YES, SET UP ITS VALUE                      STG20266
TO 18.                       AND INSERT IT IN THE LINE                  STG20267
LOC 17.                      CREATE A NEW SYMBOL.                       STG20268
PTR Y = V + H.               CHECK THAT THERE IS ROOM FOR IT.           STG20269
TO 23 IF PTR Y = J.          IF NOT, TREAT AS A CONVERSION ERROR.       STG20270
PTR L = L + 1.               BUMP THE LOCATION COUNTER.                 STG20271
PTR I = L + 0.               SAVE THE NEW VALUE IN THE NEXT SPACE.      STG20272
STO V = I.                                                              STG20273
PTR V = V - 7.               FLAG THE NEXT ENTRY AS NO SYMBOL.          STG20274
GET Y = V.                                                              STG20275
FLG Y = 1.                                                              STG20276
STO V = Y.                                                              STG20277
PTR N = L + 0.               SET UP THE NUMBER TO BE CONVERTED.         STG20278
LOC 18.                      CONVERT PTR X TO CHARACTERS, STORE DOWN.   STG20279
PTR Y = N / 5.               GET THE QUOTIENT BY INTEGER DIVISION.      STG20280
PTR Z = Y * 5.               THE REMAINDER MUST BE FOUND BY MULTIPLYING STG20281
PTR X = N - Z.               AND THEN SUBTRACTING.                      STG20282
FLG X = 0.                                                              STG20283
VAL X = PTR X.               MOVE THE RESULT TO THE VALUE FIELD.        STG20284
PTR N = Y + 0.               THE QUOTIENT IS TO BE OPERATED ON NEXT.    STG20285
VAL G = G + 1.               ADVANCE THE TEMPORARY STORAGE COUNT.       STG20286
PTR 8 = 8 + 7.                                                          STG20287
STO 8 = X.                   AND SALT AWAY THE RESULT.                  STG20288
TO 18 IF PTR N NE 0.         NO, MUST WE GO ON, YES.                    STG20289
LOC 19.                      MOVE THE DIGITS TO THEIR DESTINATION.      STG20290
GET X = 8.                   RECOVER A POSSIBLE DIGIT.                  STG20291
PTR 8 = 8 - 7.               MOVE THE DIGIT POINTER BACK.               STG20292
VAL G = G - 1.                                                          STG20293
VAL X = X + E.               MAKE THE DIGITS INTO CHARACTERS.           STG20294
PTR X = 9 - 7.               SET UP A POINTER TO THE NEXT SPACE.        STG20295
STO 9 = X.                   PUT AWAY THE CHARACTER.                    STG20296
PTR 9 = X + 0.               DROP THE SPACE POINTER.                    STG20297
TO 19 IF VAL G NE 0.         DID WE REALLY HAVE ANOTHER DIGIT, YES.     STG20298
TO 07.                       NO, GO BACK TO THE LINE PROCESSOR.         STG20299
LOC 20.                      ADVANCE TO A BREAK CHARACTER.              STG20300
GET X = X.                   GET THE NEXT CHARACTER                     STG20301
VAL Y = Y - 1.               AND DROP THE NUMBER REMAINING.             STG20302
TO 20 IF VAL Y NE L.         WAS THAT THE BREAK, NO.                    STG20303
TO 07 IF FLG X = 1.          END-OF-LINE IS THE NULL BREAK.             STG20304
PTR X = 9 - 7.               SET THE POINTER                            STG20305
TO 97 IF PTR 8 GE X.                                                    STG20306
STO 9 = X.                   AND PUT AWAY THE BREAK CHARACTER.          STG20307
PTR 9 = X + 0.                                                          STG20308
TO 07.                                                                  STG20309
LOC 21.                      SET A PARAMETER.                           STG20310
STO 9 = L.                   TERMINATE THE CURRENT LINE.                STG20311
PTR K = K + 7.               BYPASS THE NEXT CHARACTER.                 STG20312
PTR Y = C - 9.               SET UP THE SPECIFICATION OF THE            STG20313
PTR Y = Y / 7.               CURRENT STRING.                            STG20314
FLG Y = 0.                                                              STG20315
VAL Y = PTR Y.               LENGTH IN CHARACTERS.                      STG20316
PTR Y = C + 0.               POINTER TO THE FIRST CHARACTER.            STG20317
STO V = Y.                   SET THE PARAMETER STORE.                   STG20318
PTR C = 9 - 7.               NEXT EMPTY SPACE FOR NEW LINE.             STG20319
TO 05.                                                                  STG20320
LOC 22.                      DECODE COMPILER SWITCHES.                  STG20321
PTR V = J + 0.               SET A PARAMETER POINTER.                   STG20322
TO 16 IF PTR I = 0.          IS THIS A CALL ON PARAMETER ZERO, YES.     STG20323
TO 08 IF VAL I = 9.          ESCAPE FROM THE CURRENT MACRO.             STG20324
PTR V = V + 7.               ADVANCE THE PARAMETER POINTER.             STG20325
PTR K = K + 7.               BYPASS THE CHARACTER FOLLOWING THE SWITCH. STG20326
TO 32 IF VAL I = 1.          OUTPUT A LINE WITHOUT RESCANNING.          STG20327
TO 32 IF VAL I = 2.          CHANGE I/O UNITS AND COPY.                 STG20328
TO 33 IF VAL I = 3.          REDEFINE A SYMBOL.                         STG20329
TO 42 IF VAL I = 4.          SKIP ARG 1 LINES UNCONDITIONALLY.          STG20330
TO 36 IF VAL I = 5.          COMPARE ARG 1 AND ARG 2 AS STRINGS.        STG20331
TO 39 IF VAL I = 6.          COMPARE ARG 1 AND ARG 2 AS EXPRESSIONS.    STG20332
TO 43 IF VAL I = 7.          INITIATE A REPETITION UNDER COUNT CONTROL. STG20333
TO 47 IF VAL I = 8.          ADVANCE TO THE NEXT MEMBER OF THE LIST.    STG20334
TO 23 IF VAL I NE 0.         IF NOT A REQUEST FOR TERMINATION, COMPLAIN STG20335
STOP.                        ELSE TERMINATE NORMALLY.                   STG20336
LOC 23.                      ERROR IN CONVERSION DIGIT.                 STG20337
MESSAGE CONV TO 4.           PUT OUT THE MESSAGE.                       STG20338
TO 94 BY B.                  PRODUCE A TRACEBACK                        STG20339
TO 07.                       AND THEN CONTINUE.                         STG20340
LOC 32.                      CHECK FOR ALTERNATE OUTPUT UNIT.           STG20341
GET X = K.                   THIS MIGHT BE A CHANNEL NUMBER.            STG20342
VAL W = 3 + 0.               THE DEFAULT OUTPUT CHANNEL IS 3.           STG20343
TO 24 IF FLG X = 1.          IF NO CHANNEL NUMBER, TAKE THE DEFAULT.    STG20344
PTR K = K + 7.               ELSE ADVANCE THE CODE BODY POINTER.        STG20345
VAL W = X - E.               CONVERT THE DIGIT TO AN INTEGER.           STG20346
GET X = K.                   CHECK FOR REWIND REQUEST.                  STG20347
TO 24 IF FLG X = 1.          IF NONE, CONTINUE.                         STG20348
REWIND W.                    ELSE REWIND THE OUTPUT CHANNEL.            STG20349
PTR K = K + 7.               AND ADVANCE THE CODE BODY POINTER.         STG20350
LOC 24.                                                                 STG20351
TO 31 IF VAL I = 2.          INITIATE BLOCK COPYING.                    STG20352
STO 9 = L.                   TERMINATE THE CURRENT LINE.                STG20353
PTR X = C + 0.               POINT TO THE START OF THE LINE.            STG20354
TO 57 IF PTR C NE 9.         PUNCH IT IF IT EXISTS.                     STG20355
PTR K = K + 7.                                                          STG20356
GET I = K.                   GET THE NEXT COLUMN.                       STG20357
TO 25 IF FLG I NE 1.         CONTINUE IF THIS LINE IS VALID.            STG20358
PTR K = K - 7.               ELSE BACKSPACE THE CODE BODY               STG20359
TO 23.                       AND ISSUE AN ERROR MESSAGE.                STG20360
LOC 25.                                                                 STG20361
PTR Z = VAL I.                                                          STG20362
PTR Z = Z - E.               SUBTRACT THE CHARACTER ZERO.               STG20363
TO 28 IF PTR Z GE 5.         CHECK FOR DIGIT.                           STG20364
TO 28 IF PTR 0 GE Z.                                                    STG20365
VAL X = I + 0.               IF SO, SAVE FOR FUTURE REFERENCE.          STG20366
PTR Z = Z * 7.               COMPUTE THE PARAMETER LOCATION             STG20367
PTR Y = J + Z.               AND GRAB ITS SPECIFICATION.                STG20368
GET Y = Y.                                                              STG20369
TO 27 IF FLG Y = 3.          TREAT AN UNDEFINED PARAMETER AS VOID.      STG20370
GET Z = Y.                   PICK UP THE FIRST CHARACTER.               STG20371
LOC 26.                                                                 STG20372
TO 27 IF VAL Y = 0.          IS THE PARAMETER VOID, YES.                STG20373
CHAR = VAL Z.                NO, OUTPUT A CHARACTER.                    STG20374
GET Z = Z.                   PICK UP THE NEXT CHARACTER OF THE PARAMETERSTG20375
VAL Y = Y - 1.               AND DROP THE NUMBER REMAINING.             STG20376
PTR K = K + 7.               ADVANCE THE POINTER.                       STG20377
GET I = K.                   GRAB THE NEXT CHARACTER OF THE CODE BODY   STG20378
TO 26 IF VAL I = X.          IS IT THE SAME DIGIT, YES.                 STG20379
TO 25.                                                                  STG20380
LOC 27.                      FILL A FIELD WITH SPACES.                  STG20381
CHAR = VAL F.                                                           STG20382
PTR K = K + 7.                                                          STG20383
GET I = K.                                                              STG20384
TO 27 IF VAL I = X.                                                     STG20385
TO 25.                                                                  STG20386
LOC 28.                      COPY A NON-PARAMETER TO THE OUTPUT.        STG20387
TO 57 IF FLG I = 1.          QUIT AT THE END OF THE LINE.               STG20388
CHAR = VAL I.                                                           STG20389
PTR K = K + 7.               ELSE ADVANCE ALONG THE CODE BODY.          STG20390
GET I = K.                                                              STG20391
TO 25.                                                                  STG20392
LOC 31.                      CHECK FOR ALTERNATE INPUT UNIT.            STG20393
GET I = A.                   RECALL THE CHANNEL SPEC.                   STG20394
TO 29 IF PTR C = 9.          IF NO ALTERNATE INPUT UNIT, CONTINUE.      STG20395
GET X = C.                   ELSE GRAB THE UNIT NUMBER                  STG20396
VAL I = X - E.               AND CONVERT IT TO AN INTEGER.              STG20397
STO A = I.                   CHANGE THE CURRENT UNIT IN STORE.          STG20398
TO 29 IF PTR X = 9.          IF NO REWIND REQUEST, CONTINUE.            STG20399
REWIND I.                    ELSE PERFORM THE REWIND                    STG20400
TO 98 IF FLG I NE 0.         AND QUIT UNLESS IT WAS ALL OK.             STG20401
LOC 29.                      BLOCK COPY FROM INPUT TO OUTPUT.           STG20402
GET X = V.                   PICK UP THE PARAMETER SPECIFICATION.       STG20403
TO 05 IF VAL X = 0.          NO COPYING IF PARAMETER IS VOID.           STG20404
TO 05 IF FLG X = 3.          OR UNDEFINED.                              STG20405
PTR Y = X + 0.               ELSE SET UP THE ADDRESS OF THE FIRST CHAR. STG20406
READ NEXT I.                 GET THE NEXT LINE.                         STG20407
TO 05 IF FLG I = 1.          QUIT ON ENDFILE                            STG20408
TO 98 IF FLG I NE 0.         GET OUT UNLESS ALL IS OK.                  STG20409
LOC 30.                      CHECK FOR THE TERMINATOR.                  STG20410
TO 05 IF VAL X = 0.          RETURN IF THE MATCH IS COMPLETE.           STG20411
VAL X = X - 1.               ELSE DECREMENT THE CHARACTER COUNT         STG20412
GET Y = Y.                   PICK UP THE NEXT TERMINATOR CHARACTER.     STG20413
VAL Z = CHAR.                AND INPUT CHARACTER.                       STG20414
TO 30 IF VAL Y = Z.          IF WE ARE STILL MATCHING, GO ON.           STG20415
WRITE NEXT W.                ELSE WRITE THE LINE                        STG20416
TO 29 IF FLG W = 0.          AND KEEP LOOKING FOR THE TERMINATOR IF OK. STG20417
TO 98.                       ELSE I/O ERROR MESSAGE AND QUIT            STG20418
LOC 33.                      REDEFINE A SYMBOL.                         STG20419
GET Y = V.                   NAME OF THE SYMBOL TO BE REDEFINED.        STG20420
TO 23 IF FLG Y = 3.          ERROR IF PARAMETER IS UNDEFINED.           STG20421
TO 05 IF VAL Y = 0.          IGNORE THE NULL SYMBOL.                    STG20422
GET X = Y.                   PICK UP THE FIRST CHARACTER.               STG20423
FLG B = 2.                   ALLOW SYMBOL ENTRY.                        STG20424
GET W = F.                   SET UP THE SYMBOL TREE.                    STG20425
PTR Z = F + 0.               SET THE TREE POINTER TO THE SYMBOL ROOT.   STG20426
TO 58 BY B.                  CALL ON THE SCANNER.                       STG20427
FLG B = 0.                   RESET PHASE FLAG.                          STG20428
FLG W = Y.                   SAVE THE DEFINITION FLAG.                  STG20429
PTR W = U + 0.               POINT TO THE DEFINITION POINTER.           STG20430
PTR Z = Y + 0.               SET THE SYMBOL POINTER                     STG20431
PTR V = V + 7.               GET THE NEW DEFINITION OF THE SYMBOL.      STG20432
GET Y = V.                                                              STG20433
TO 23 IF FLG Y = 3.          ERROR IF PARAMETER IS UNDEFINED.           STG20434
PTR X = Y + 0.               POINT TO THE FIRST CHARACTER OF THE        STG20435
FLG Z = 1.                   NEW DEFINITION.  CLEAR OUT THE TEMPORARY   STG20436
VAL Z = Y + 0.               SET THE NEW SYMBOL LENGTH.                 STG20437
TO 35 IF FLG W NE 1.         WAS THERE A DEFINITION, NO.                STG20438
STO W = Z.                   YES, STORE THE NEW SYMBOL LENGTH.          STG20439
TO 05 IF VAL Y = 0.          IS THE DEFINITION VOID, NO.                STG20440
LOC 34.                      INSERT THE NEW DEFINITION IN THE OLD SPACE.STG20441
GET X = X.                   GET THE NEXT DEFINITION CHARACTER.         STG20442
PTR W = Z + 0.               POINT TO THE NEXT SPACE.                   STG20443
GET Z = W.                   GRAB THE OLD CONTENTS OF THE SPACE.        STG20444
VAL Z = X + 0.               MOVE THE CHARACTER INTO THE SPACE,         STG20445
STO W = Z.                   RETAINING THE OLD POINTER VALUE.           STG20446
VAL Y = Y - 1.               DECREMENT THE CHARACTER COUNT.             STG20447
TO 35 IF PTR Z = 0.          IS THERE MORE SPACE AVAILABLE, NO.         STG20448
TO 34 IF VAL Y NE 0.         YES, IS THERE MORE DEFINITION, YES.        STG20449
TO 05.                                                                  STG20450
LOC 35.                      CREATE NEW SPACE FOR THE DEFINITION.       STG20451
PTR Z = 8 + 0.               POINT TO THE NEXT AVAILABLE SPACE.         STG20452
STO W = Z.                   PUT AWAY THE CHARACTER.                    STG20453
PTR 8 = 8 + 7.               ADVANCE THE POINTER                        STG20454
TO 97 IF PTR 8 GE 9.         AND TEST FOR SPACE OVERFILL.               STG20455
PTR W = Z + 0.               ADVANCE THE CHARACTER POINTER.             STG20456
GET Z = X.                   GRAB THE NEXT DEFINITION CHARACTER.        STG20457
PTR X = Z + 0.               ADVANCE THE DEFINITION POINTER.            STG20458
VAL Y = Y - 1.               DECREMENT THE CHARACTER COUNT.             STG20459
TO 35 IF VAL Y NE L.         CHECK FOR TERMINATION OF THE DEFINITION.   STG20460
STO W = 0.                   STORE THE TERMINATOR IF THERE IS NO MORE.  STG20461
TO 05.                                                                  STG20462
LOC 36.                      COMPARE TWO STRINGS.                       STG20463
GET I = K.                   PICK UP THE CONDITION CODE.                STG20464
TO 23 IF FLG I NE 0.         COMPLAIN IF ILLEGAL CONDITION CODE         STG20465
PTR K = K + 7.               BYPASS THE NEXT CHARACTER.                 STG20466
GET Y = V.                                                              STG20467
PTR V = V + 7.                                                          STG20468
GET Z = V.                                                              STG20469
TO 23 IF FLG Y = 3.          ERROR IF PARAMETER IS UNDEFINED.           STG20470
TO 23 IF FLG Z = 3.                                                     STG20471
PTR V = V + 7.               OTHERWISE PICK UP THE THIRD ARGUMENT       STG20472
TO 41 IF VAL Y NE Z.         COULD THEY BE EQUAL, NO.                   STG20473
TO 38 IF VAL Y = 0.          TWO NULL STRINGS ARE EQUAL.                STG20474
PTR X = Z + 0.               POINT X TO THE SECOND STRING.              STG20475
LOC 37.                      COMPARE THE STRINGS CHARACTER BY CHARACTER.STG20476
GET X = X.                   GRAB THE NEXT CHARACTER OF EACH STRING.    STG20477
GET Y = Y.                                                              STG20478
TO 41 IF VAL X NE Y.         ARE THEY EQUAL, NO.                        STG20479
VAL Z = Z - 1.               YES, DROP THE NUMBER REMAINING.            STG20480
TO 37 IF VAL Z NE 0.         ARE WE DONE, NO.                           STG20481
LOC 38.                      THE STRINGS ARE EQUAL.                     STG20482
TO 05 IF VAL I NE E.         IS THE CONDITON CODE EQ, NO.               STG20483
TO 42.                                                                  STG20484
LOC 39.                      COMPARE TWO EXPRESSIONS.                   STG20485
GET I = K.                   PICK UP THE CONDITION CODE.                STG20486
TO 23 IF FLG I NE 0.         COMPLAIN IF ILLEGAL CONDITION CODE         STG20487
PTR K = K + 7.               BYPASS THE NEXT CHARACTER.                 STG20488
GET Y = V.                   FIRST ARGUMENT SPECIFICATION.              STG20489
TO 23 IF FLG Y = 3.          ERROR IF PARAMETER IS UNDEFINED.           STG20490
TO 74 BY P.                  EVALUATE THE FIRST PARAMETER.              STG20491
PTR I = N + 0.               SAVE THE VALUE OF THE FIRST EXPRESSION.    STG20492
PTR V = J + 4.                                                          STG20493
GET Y = V.                   SET UP THE SECOND PARAMETER.               STG20494
TO 23 IF FLG Y = 3.          ERROR IF PARAMETER IS UNDEFINED.           STG20495
TO 74 BY P.                  EVALUATE IT.                               STG20496
PTR V = J + 4.                                                          STG20497
PTR V = V + 7.                                                          STG20498
PTR N = N - I.               COMPUTE THE DIFFERENCE.                    STG20499
TO 38 IF PTR N = 0.          WERE THE PARAMETERS EQUAL, YES.            STG20500
TO 40 IF PTR N GE 0.         NO, WAS THE SECOND LARGER, YES.            STG20501
TO 05 IF VAL I = O.          NO, WAS THE CONDITION LT, YES.             STG20502
TO 41.                                                                  STG20503
LOC 40.                      PARAMETER 1 LT PARAMETER 2.                STG20504
TO 05 IF VAL I = N.           WAS THE CONDITION GT, YES.                STG20505
LOC 41.                      THE STRINGS ARE NOT EQUAL.                 STG20506
TO 05 IF VAL I = E.          IS THE CONDITION CODE EQ, YES.             STG20507
LOC 42.                      SET UP THE SKIP COUNTER.                   STG20508
GET Y = V.                                                              STG20509
TO 23 IF FLG Y = 3.          ERROR IF PARAMETER IS UNDEFINED.           STG20510
TO 05 IF VAL Y = 0.          IS IT VOID, YES.                           STG20511
TO 74 BY P.                  CONVERT A POSSIBLE EXPRESSION.             STG20512
PTR M = N + 0.               SET THE COUNT.                             STG20513
TO 05.                                                                  STG20514
LOC 43.                      ITERATE UNDER COUNT CONTROL.               STG20515
PTR Y = C - 9.               SET UP THE SPECIFICATION OF THE            STG20516
PTR Y = Y / 7.               CURRENT STRING.                            STG20517
VAL Y = PTR Y.               LENGTH IN CHARACTERS.                      STG20518
TO 07 IF VAL Y = 0.          IF NULL, IGNORE IT.                        STG20519
PTR Y = C + 0.               POINTER TO THE FIRST CHARACTER.            STG20520
TO 74 BY P.                  EVALUATE THE LINE AS AN EXPRESSION.        STG20521
FLG Y = 1.                   SET UP THE RESULT AS AN ITERATION COUNT.   STG20522
VAL Y = 0 + 0.                                                          STG20523
PTR Y = N + 1.                                                          STG20524
STO C = R.                   SAVE THE CURRENT ITERATION POINTER.        STG20525
PTR Z = R + 0.               PREPARE TO RESTORE IT.                     STG20526
PTR R = C + 0.               SET A NEW ONE.                             STG20527
PTR C = C - 4.                                                          STG20528
STO C = K.                   SAVE THE CURRENT CODE BODY POINTER.        STG20529
LOC 44.                      RE-ENTRY FOR ANOTHER ITERATION.            STG20530
PTR C = R + 0.               RESET THE TEXT POINTER.                    STG20531
PTR R = Z + 0.               RESET THE ITERATION POINTER.               STG20532
PTR Y = Y - 1.               DECREMENT THE ITERATION COUNT.             STG20533
TO 05 IF PTR 0 GE Y.         GET OUT IF NO MORE ARE NEEDED.             STG20534
PTR R = C + 0.               ELSE RESET THE ITERATION POINTER.          STG20535
PTR C = C - 7.                                                          STG20536
STO C = Y.                   SAVE THE CURRENT COUNT.                    STG20537
PTR C = C - 7.                                                          STG20538
GET K = C.                   RESTORE THE CODE BODY POINTER.             STG20539
PTR C = C - 7.               NEW SPACE FOR THE NEXT TEXT LINE.          STG20540
TO 05.                                                                  STG20541
LOC 45.                      ITERATE UNDER CONTEXT CONTROL.             STG20542
STO 9 = L.                   TERMINATE THE PARAMETER STRING.            STG20543
PTR W = C - 9.               SPECIFY THE CURRENT STRING.                STG20544
PTR W = W / 7.               COMPUTE ITS LENGTH IN CHARACTERS.          STG20545
FLG W = 0.                   FLAG FOR CONTEXT-CONTROLLED ITERATION.     STG20546
VAL W = PTR W.               LENGTH IN CHARACTERS.                      STG20547
PTR W = C + 0.               POINTER TO THE FIRST CHARACTER.            STG20548
PTR 9 = 9 - 7.                                                          STG20549
FLG B = 2.                   CONSTRUCT THE TREE FOR ARGUMENT SCANNING.  STG20550
PTR B = 0 + 0.               SET UP THE PARAMETER.                      STG20551
FLG U = 0.                   SET UP THE RIGHT PAREN.                    STG20552
VAL U = R + 0.                                                          STG20553
PTR U = 7 + 0.                                                          STG20554
FLG Z = 1.                   END-OF-LINE.                               STG20555
VAL Z = 0 + 0.               INITIALIZE BREAK COUNT.                    STG20556
PTR Z = 0 + 0.                                                          STG20557
PTR X = 9 - 7.                                                          STG20558
LOC 46.                      ADD BREAK CHARACTERS TO THE TREE.          STG20559
VAL Z = Z + 1.               BUMP THE BREAK COUNT.                      STG20560
STO 9 = Z.                   END-OF-LINE.                               STG20561
PTR 9 = 9 - 7.                                                          STG20562
STO 9 = U.                   RIGHT PAREN.                               STG20563
PTR 9 = 9 - 7.                                                          STG20564
STO 9 = B.                   PARAMETER FLAG.                            STG20565
PTR 9 = 9 - 7.                                                          STG20566
PTR K = K + 7.                                                          STG20567
GET I = K.                   GRAB THE NEXT BREAK.                       STG20568
PTR I = X - 9.               POINT TO THE ALTERNATIVE.                  STG20569
STO 9 = I.                   CURRENT BREAK CHARACTER.                   STG20570
PTR X = 9 + 0.               SAVE THE CURRENT POSITION FOR AN ALTERNATE.STG20571
PTR 9 = 9 - 7.                                                          STG20572
TO 97 IF PTR 8 GE 9.                                                    STG20573
TO 46 IF FLG I NE 1.                                                    STG20574
STO 9 = B.                   ANOTHER PARAMETER FLAG.                    STG20575
FLG B = 0.                   RESET THE PHASE FLAG.                      STG20576
PTR Z = 9 + 0.               SET UP A POINTER TO THE ROOT LOCATION.     STG20577
PTR 9 = 9 - 7.                                                          STG20578
VAL U = M + 0.               SET UP A LEFT PAREN.                       STG20579
STO 9 = U.                   TREE ROOT.                                 STG20580
PTR 9 = 9 - 7.                                                          STG20581
STO 9 = R.                   PREVIOUS ROOT POINTER.                     STG20582
PTR 9 = 9 - 7.                                                          STG20583
STO 9 = C.                   PREVIOUS TEXT POINTER.                     STG20584
PTR 9 = 9 - 7.                                                          STG20585
STO 9 = V.                   POINTER TO PARAMETER STORE.                STG20586
PTR 9 = 9 - 7.                                                          STG20587
STO 9 = Y.                   ORIGINAL PARAMETER SPEC.                   STG20588
PTR R = 9 - 7.               NEW REPETITION POINTER.                    STG20589
STO R = Z.                   NEW ROOT POINTER.                          STG20590
PTR 9 = R - 7.                                                          STG20591
STO 9 = W.                   PARAMETER REMAINDER.                       STG20592
PTR 9 = 9 - 4.                                                          STG20593
STO 9 = K.                   CURRENT TEXT POINTER.                      STG20594
PTR Z = Z - 7.               FIRST TIME ROOT POINTER.                   STG20595
TO 48.                                                                  STG20596
LOC 47.                      RE-ENTER FOR NEXT REPETITION.              STG20597
TO 05 IF PTR R = 0.          IF THERE IS NO REPETITION, GET OUT.        STG20598
GET Z = R.                   ELSE POINT THE SCANNER TO THE ROOT.        STG20599
LOC 48.                      FIRST TIME ENTRY POINT.                    STG20600
PTR U = R - 7.               REMAINDER OF THE LIST.                     STG20601
GET Y = U.                                                              STG20602
TO 44 IF FLG Y = 1.          IS THIS ITERATION UNDER COUNT CONTROL, YES.STG20603
TO 49 IF FLG Y = 3.          TERMINATE ON AN UNDEFINED PARAMETER.       STG20604
TO 49 IF VAL Y = 0.          TERMINATE THE ITERATION ON A NULL REMAINDERSTG20605
STO U = 0.                   ELSE SET UP ANOTHER SCAN.                  STG20606
PTR U = U - 4.                                                          STG20607
GET K = U.                   RESET THE CODE BODY POINTER.               STG20608
PTR V = U + 0.               SET UP THE STACK POINTER.                  STG20609
PTR 9 = U - 7.                                                          STG20610
PTR C = 9 + 0.               RESET THE TEXT ORIGIN.                     STG20611
GET X = Y.                   GRAB THE FIRST CHARACTER AND               STG20612
TO 99 BY B.                  GO CHECK FOR SINGLE-CHARACTER BREAKOUT.    STG20613
PTR Y = R + 4.               GET THE ADDRESS OF THE PARAMETER           STG20614
GET W = Y.                   TO BE FIDDLED.                             STG20615
PTR Y = R - 4.               GET THE NEW VALUE OF THE SPECIFICATION.    STG20616
TO 97 IF PTR 8 GE Y.                                                    STG20617
GET Y = Y.                                                              STG20618
STO W = Y.                   AND PUT IT IN THE PARAMETER SPACE.         STG20619
TO 05.                       CONTINUE WITH THE CODE BODY.               STG20620
LOC 99.                      CHECK AND SERVICE SINGLE-CHARACTER SPLITS. STG20621
TO 60 IF VAL Z NE 1.         IF BREAK CHARACTERS USED, GO TO THE SCANNERSTG20622
FLG X = 0.                   ELSE PICK OFF A SINGLE CHARACTER.          STG20623
VAL X = Y - 1.               DROP THE LENGTH OF THE PARAMETER.          STG20624
VAL Y = 1 + 0.               SET THE NEW PARAMETER LENGTH TO 1.         STG20625
PTR U = U + 7.               SAVE THE NEW PARAMETER SPECIFICATION.      STG20626
STO U = Y.                                                              STG20627
PTR U = U + 7.               ALSO SAVE THE REMAINDER OF THE STRING.     STG20628
STO U = X.                                                              STG20629
RETURN BY B.                 RETURN AS THOUGH FROM THE SCANNER.         STG20630
LOC 49.                      TERMINATE THE ITERATION.                   STG20631
TO 44 IF FLG Y = 1.          IS THIS ITERATION UNDER COUNT CONTROL, YES.STG20632
PTR R = R + 7.                                                          STG20633
GET Y = R.                   RESTORE THE ORIGINAL VALUE OF THE          STG20634
PTR R = R + 7.               PARAMETER SPECIFICATION.                   STG20635
GET W = R.                                                              STG20636
STO W = Y.                                                              STG20637
PTR R = R + 7.                                                          STG20638
GET C = R.                   RESTORE THE TEXT POINTER.                  STG20639
PTR R = R + 7.                                                          STG20640
GET R = R.                                                              STG20641
TO 05.                                                                  STG20642
LOC 50.                      DEFINE A MACRO.                            STG20643
FLG Y = 1.                   MARK IT AS DEFINED.                        STG20644
VAL Y = L + 0.               LINE TERMINATOR.                           STG20645
PTR 8 = 8 - 7.               PREPARE FOR A SPURIOUS ADVANCE.            STG20646
TO 54.                       GO GET THE MCT.                            STG20647
LOC 51.                      DEAL WITH AN ESCAPE CHARACTER.             STG20648
VAL I = CHAR.                PICK UP THE NEXT CHARACTER.                STG20649
STO 8 = I.                   ASSUME THAT IT IS A SPECIAL TO BE SAVED.   STG20650
TO 52 IF VAL I = C.          IF IT REALLY IS AN MCT PARAMETER OR END-   STG20651
TO 52 IF VAL I = D.          OF-LINE FLAG, THEN GO ON TO THE NEXT CHAR. STG20652
VAL I = I - E.               ELSE CONVERT A POSSIBLE DIGIT CHARACTER.   STG20653
FLG Z = 3.                   ASSUME THAT IT IS A FUNCTION CALL.         STG20654
VAL Z = CHAR.                GET THE PARAMETER CONVERSION OR FUNCTION.  STG20655
VAL Z = Z - E.               CONVERT FROM A CHARACTER TO AN INTEGER.    STG20656
PTR Z = VAL I.               PUT AWAY THE SPEC.                         STG20657
STO 8 = Z.                                                              STG20658
TO 52 IF PTR 0 GE Z.         IF IT IS REALLY A FUNCTION, GO ON.         STG20659
TO 52 IF PTR Z GE 5.                                                    STG20660
FLG Z = 2.                   OTHERWISE MAKE IT A PARAMETER CONVERSION.  STG20661
PTR Z = Z * 7.               SET UP THE RELATIVE ADDR OF THE PARAMETER. STG20662
STO 8 = Z.                                                              STG20663
LOC 52.                      PROCESS AN MCT LINE.                       STG20664
PTR 8 = 8 + 7.               ADVANCE THE SPACE POINTER.                 STG20665
TO 97 IF PTR 8 GE 9.         HAVE WE RUN OUT OF ROOM, YES.              STG20666
VAL I = CHAR.                READ THE NEXT CHARACTER.                   STG20667
STO 8 = I.                   STORE IT.                                  STG20668
TO 51 IF VAL I = D.          IS THIS AN ESCAPE CHARACTER, YES.          STG20669
TO 53 IF VAL I = L.          RECOGNIZE A CARRIAGE CONTROL.              STG20670
TO 52 IF VAL I NE C.         NO, WAS IT AN MCT END-OF-LINE, NO.         STG20671
LOC 53.                                                                 STG20672
PTR Y = 8 + 0.               POINT TO THE CURRENT LINE TERMINATOR.      STG20673
STO U = Y.                   SET UP THE PREVIOUS TERMINATOR.            STG20674
PTR U = 8 + 0.               UPDATE THE TERMINATOR ADDRESS.             STG20675
LOC 54.                      READ AND STORE A NEW MCT LINE.             STG20676
GET I = A.                   RECALL THE CHANNEL SPECIFIER.              STG20677
READ NEXT I.                 GRAB THE NEXT LINE.                        STG20678
TO 98 IF FLG I NE 0.         GET OUT UNLESS ALL IS OK.                  STG20679
VAL I = CHAR.                READ THE FIRST CHARACTER OF A LINE.        STG20680
PTR I = 0 + 0.               CLEAN OUT THE INPUT REGISTER.              STG20681
PTR 8 = 8 + 7.               ADVANCE THE SPACE POINTER.                 STG20682
STO 8 = I.                   PUT IT AWAY.                               STG20683
TO 51 IF VAL I = D.          WAS IT A PARAMETER FLAG, YES.              STG20684
TO 52 IF VAL I NE C.         WAS IT AN END-OF-LINE, NO.                 STG20685
PTR Y = 8 + 0.               FILL IN THE PREVIOUS TERMINATOR.           STG20686
STO U = Y.                                                              STG20687
STO 8 = 1.                                                              STG20688
PTR 8 = 8 + 7.               ADVANCE THE SPACE POINTER.                 STG20689
TO 97 IF PTR 8 GE 9.         HAVE WE OVERRUN THE AREA, YES.             STG20690
VAL I = CHAR.                GET THE NEXT CHARACTER.                    STG20691
TO 55 IF VAL I NE C.         DID THAT CLOSE THE DEFINITION PHASE, NO.   STG20692
FLG B = 0.                   YES, RESET THE PHASE FLAG.                 STG20693
LOC 55.                      COMMON SYSTEM RETURN POINT.                STG20694
RETURN BY D.                 REGISTER D IS THE RETURN ADDRESS.          STG20695
LOC 56.                      PUNCH AN UNRECOGNIZED LINE.                STG20696
VAL W = 3 + 0.               CHANNEL 3 USED WHEN A LINE IS NOT MATCHED. STG20697
PTR X = C + 0.               ADDRESS THE FIRST CHARACTER.               STG20698
LOC 57.                      LOOP TO PUT OUT THE CHARACTERS.            STG20699
GET X = X.                   GET THE NEXT ONE.                          STG20700
CHAR = VAL X.                MOVE IT INTO THE LINE BUFFER.              STG20701
TO 57 IF FLG X NE 1.         HAVE WE REACHED THE END, NO.               STG20702
WRITE NEXT W.                YES, PUT IT OUT ON THE DESIGNATED CHANNEL. STG20703
TO 98 IF FLG W NE 0.         TREAT ANY ERROR AS FATAL.                  STG20704
TO 55 IF VAL X = L.          ELSE IF THE LINE IS COMPLETE, RETURN.      STG20705
CHAR = VAL X.                ELSE REPRINT THE LAST CHARACTER            STG20706
TO 57.                       AND CONTINUE.                              STG20707
LOC 58.                      TRY FOR AN ALTERNATIVE MATCH.              STG20708
PTR Z = W + Z.               GET THE POINTER TO THE ALTERNATIVE.        STG20709
TO 60 IF PTR W NE 0.         WAS THERE ONE AFTER ALL, YES.              STG20710
TO 71 IF FLG B = 2.          NO, ARE WE DEFINING, YES.                  STG20711
LOC 59.                      TRY EXTENDING THE PREVIOUS PARAMETER.      STG20712
TO 70 IF PTR V GE 9.         IS THERE ONE TO EXTEND, NO.                STG20713
GET Z = V.                   RECALL THE MACRO POINTER.                  STG20714
GET Y = Q.                   YES, RECALL THE INPUT POINTER              STG20715
GET X = Y.                   AND THE CURRENT CHARACTER                  STG20716
TO 63 IF FLG Z = 2.          IS THIS THE FIRST TIME FOR A PARAMETER, YESSTG20717
TO 64 IF FLG Z = 3.          NO, IS IT A PARAMETER EXTENSION, YES.      STG20718
PTR V = Q + 7.               ABANDON THE STACK ENTRY.                   STG20719
PTR Q = V + 7.                                                          STG20720
LOC 60.                      TRY AN ALTERNATIVE.                        STG20721
GET W = Z.                   GRAB THE MACRO CHARACTER.                  STG20722
TO 69 IF FLG W = 1.          IS THIS THE END OF THE MACRO, YES.         STG20723
TO 62 IF FLG W = 2.          NO, IS IT A PARAMETER, YES.                STG20724
TO 58 IF VAL Y = 0.          NO, IS THIS THE END OF THE INPUT LINE, YES.STG20725
TO 58 IF VAL X NE W.         NO, DOES THE CHARACTER MATCH, NO.          STG20726
TO 61 IF PTR W = 0.          IS THERE AN ALTERNATIVE, NO.               STG20727
TO 61 IF FLG X = 3.          DO NOT STACK ALTERNATIVES FOLLOWING A PARAMSTG20728
TO 61 IF FLG B = 2.          DO NOT STACK ALTERNATIVES DURING DEFINITIONSTG20729
PTR Q = V - 7.                                                          STG20730
PTR V = Q - 7.                                                          STG20731
TO 97 IF PTR 8 GE V.                                                    STG20732
STO Q = Y.                   SAVE THE INPUT POINTER                     STG20733
PTR W = W + Z.               GET THE ADDRESS OF THE ALTERNATIVE.        STG20734
STO V = W.                                                              STG20735
LOC 61.                                                                 STG20736
VAL Y = Y - 1.                                                          STG20737
PTR Y = X + 0.                                                          STG20738
GET X = X.                   ADVANCE THE INPUT POINTER                  STG20739
PTR Z = Z + 7.               ADVANCE THE MACRO POINTER.                 STG20740
TO 60.                       CONTINUE MATCHING.                         STG20741
LOC 62.                      SET UP A PARAMETER IF POSSIBLE.            STG20742
TO 61 IF FLG X = 2.          IS THIS A PARAMETER DEFINITION, YES.       STG20743
TO 58 IF FLG B = 2.          NO, COULD WE NEED A PARAMETER, NO.         STG20744
PTR Q = V - 7.               CREATE AN ENTRY FOR THE PARAMETER.         STG20745
PTR V = Q - 7.                                                          STG20746
TO 97 IF PTR 8 GE V.                                                    STG20747
STO Q = Y.                                                              STG20748
FLG Z = 2.                   SET UP THE PARAMETER POINTER.              STG20749
STO V = Z.                                                              STG20750
FLG X = 3.                   DONT STACK FURTHER ALTERNATIVES.           STG20751
TO 58.                                                                  STG20752
LOC 63.                      FIRST TIME ENTRY FOR PARAMETERS.           STG20753
FLG Z = 3.                   SET FOR PARAMETER EXTENSION.               STG20754
PTR Z = Z + 7.                                                          STG20755
STO V = Z.                                                              STG20756
PTR U = U + 7.               ADVANCE THE PARAM STORE POINTER.           STG20757
FLG W = 0.                                                              STG20758
VAL W = 0 + 0.               SET THE PARAMETER LENGTH TO ZERO.          STG20759
PTR W = Y + 0.               POINT IT TO THE CURRENT INPUT CHARACTER.   STG20760
STO U = W.                                                              STG20761
TO 60.                                                                  STG20762
LOC 64.                      EXTEND THE CURRENT PARAMETER.              STG20763
TO 68 IF VAL Y = 0.          CAN IT BE EXTENDED, NO.                    STG20764
TO 68 IF VAL X = R.          FAIL ON AN UNMATCHED CLOSING PAREN.        STG20765
GET W = U.                   INCREASE THE PARAMETER LENGTH.             STG20766
VAL W = W + 1.                                                          STG20767
VAL Y = Y - 1.                                                          STG20768
PTR Y = X + 0.                                                          STG20769
TO 67 IF VAL X NE M.         IS THIS AN OPEN PAREN, NO.                 STG20770
VAL Z = 0 + 0.               YES, ZERO THE PAREN COUNT.                 STG20771
LOC 65.                      OBTAIN A BALANCED STRING.                  STG20772
VAL Z = Z + 1.               BUMP THE PARENTHESIS COUNT.                STG20773
LOC 66.                                                                 STG20774
TO 68 IF VAL Y = 0.          FAIL IF THIS IS THE END.                   STG20775
GET X = X.                   GRAB THE NEXT INPUT CHARACTER.             STG20776
VAL Y = Y - 1.                                                          STG20777
PTR Y = X + 0.                                                          STG20778
VAL W = W + 1.               ELSE BUMP THE PARAMETER LENGTH.            STG20779
TO 65 IF VAL X = M.          IS IT ANOTHER OPEN PAREN, YES.             STG20780
TO 66 IF VAL X NE R.         NO, IS IT A CLOSE PAREN, NO.               STG20781
VAL Z = Z - 1.               YES, DROP THE PAREN COUNT.                 STG20782
TO 66 IF VAL Z NE 0.         CONTINUE IF THE COUNT IS NONZERO.          STG20783
LOC 67.                      CONTINUE THE SCAN.                         STG20784
GET X = X.                   GET THE NEXT INPUT CHARACTER.              STG20785
STO Q = Y.                   INCREMENT THE INPUT POINTER.               STG20786
STO U = W.                                                              STG20787
TO 60.                                                                  STG20788
LOC 68.                      ABANDON THE CURRENT PARAMETER.             STG20789
STO U = 3.                   SET THE PARAMETER UNDEFINED.               STG20790
PTR U = U - 7.               DROP THE PARAMETER STORE POINTER BACK.     STG20791
PTR V = Q + 7.               ABANDON THE STACK ENTRY.                   STG20792
PTR Q = V + 7.                                                          STG20793
TO 59.                       SEE IF THERE ARE OTHERS TO FALL BACK ON.   STG20794
LOC 69.                                                                 STG20795
TO 58 IF VAL Y NE 0.         IS THIS A FINAL MATCH, NO.                 STG20796
PTR U = Z + 7.               YES, POINT TO THE DEFINITION SPEC.         STG20797
GET Y = U.                                                              STG20798
LOC 70.                                                                 STG20799
RETURN BY B.                 COMMON RETURN POINT FOR PTR B RETURNS.     STG20800
LOC 71.                      ROUTINE TO ADD MACRO DEFINITIONS.          STG20801
PTR W = 8 - Z.               CREATE THE ALTERNATE POINTER.              STG20802
STO Z = W.                   CHANGE THE CURRENT ALTERNATE.              STG20803
TO 73 IF VAL Y = 0.          TERMINATE THE BRANCH IF THIS IS THE END.   STG20804
LOC 72.                      READ THE REMAINDER OF THE TEMPLATE LINE.   STG20805
VAL Y = Y - 1.                                                          STG20806
PTR Y = X + 0.                                                          STG20807
PTR X = 0 + 0.               RESET THE POINTER OF THE CURRENT CHARACTER.STG20808
STO 8 = X.                   PUT IT AWAY.                               STG20809
PTR 8 = 8 + 7.               ADVANCE THE SPACE POINTER.                 STG20810
TO 97 IF PTR 8 GE 9.         HAVE WE OVERRUN THE AREA, YES.             STG20811
GET X = Y.                   GRAB THE NEXT CHARACTER.                   STG20812
TO 72 IF VAL Y NE 0.         WAS THAT THE LAST, NO.                     STG20813
LOC 73.                      TERMINATE A TREE BRANCH.                   STG20814
FLG X = 1.                   SET THE MACRO TERMINATOR.                  STG20815
PTR X = 0 + 0.               SET FOR NO ALTERNATIVE.                    STG20816
STO 8 = X.                                                              STG20817
PTR U = 8 + 7.               SET UP A DEFINITION POINTER.               STG20818
FLG Y = 0.                                                              STG20819
PTR Y = U + 0.                                                          STG20820
STO U = Y.                                                              STG20821
PTR 8 = U + 7.               POINT TO THE FIRST EMPTY SPACE.            STG20822
TO 97 IF PTR 8 GE 9.                                                    STG20823
RETURN BY B.                                                            STG20824
LOC 74.                      EXPRESSION PROCESSOR.                      STG20825
PTR O = 9 + 0.               SAVE THE CURRENT TOP OF FREE SPACE.        STG20826
VAL S = Y + 0.               SET UP THE STRING SPECIFIER.               STG20827
PTR S = Y + 0.                                                          STG20828
PTR T = 0 + 0.               INITIAL VALUE OF THE EXPRESSION IS ZERO.   STG20829
TO 75 IF VAL Y NE 0.         IS THE EXPRESSION VOID, NO.                STG20830
PTR N = 0 + 0.               YES, ITS VALUE IS ZERO.                    STG20831
RETURN BY P.                                                            STG20832
LOC 75.                                                                 STG20833
VAL T = M + 0.               STACK A LEFT PAREN.                        STG20834
LOC 76.                                                                 STG20835
TO 93 IF VAL S = 0.                                                     STG20836
GET X = S.                   ELSE GRAB THE NEXT.                        STG20837
PTR Y = S + 0.               POINT TO A POSSIBLE SECTION START.         STG20838
VAL Y = 0 + 0.               THE STRING IS INITIALLY EMPTY.             STG20839
TO 77 IF VAL X NE M.         IS THE CHARACTER A LEFT PAREN, NO.         STG20840
STO 9 = T.                   YES, PUSH THE STACK.                       STG20841
PTR 9 = 9 - 7.                                                          STG20842
TO 97 IF PTR 8 GE 9.                                                    STG20843
VAL S = S - 1.               DROP THE STRING LENGTH REMAINING.          STG20844
PTR S = X + 0.               BUMP THE POINTER.                          STG20845
TO 75.                                                                  STG20846
LOC 77.                      SPECIFIY A SECTION.                        STG20847
TO 78 IF VAL X = N.          IS THIS A PLUS, YES.                       STG20848
TO 78 IF VAL X = O.          MINUS.                                     STG20849
TO 78 IF VAL X = P.          TIMES.                                     STG20850
TO 78 IF VAL X = Q.          DIVIDE.                                    STG20851
TO 78 IF VAL X = R.          RIGHT PAREN.                               STG20852
VAL Y = Y + 1.               NOT AN OPERATOR. BUMP SECTION LENGTH.      STG20853
GET X = X.                   GRAB THE NEXT CHARACTER.                   STG20854
TO 77 IF VAL S NE Y.         IS THE STRING EXHAUSTED, NO.               STG20855
VAL X = R + 0.               YES, SET UP A RIGHT PAREN.                 STG20856
VAL S = S + 1.               PRETEND THAT IT WAS IN THE INPUT STRING.   STG20857
LOC 78.                                                                 STG20858
VAL J = X + 0.               SET UP THE SECTION OPERATOR.               STG20859
PTR N = 0 + 0.               ZERO THE ACCUMULATOR.                      STG20860
VAL S = S - Y.               UPDATE THE STRING POINTER.                 STG20861
VAL S = S - 1.                                                          STG20862
PTR S = X + 0.                                                          STG20863
TO 83 IF VAL Y = 0.          A NULL STRING HAS THE VALUE ZERO.          STG20864
GET X = Y.                   GRAB FIRST CHARACTER OF NON-NULL STRING.   STG20865
PTR U = VAL X.               CHECK FOR A DIGIT.                         STG20866
PTR U = U - E.                                                          STG20867
TO 79 IF PTR U GE 5.                                                    STG20868
TO 81 IF PTR U GE 0.                                                    STG20869
LOC 79.                      IF FIRST CHARACTER IS NOT A DIGIT, LOOK UP.STG20870
PTR V = 9 + 7.               STACK POINTER FOR SCANNER.                 STG20871
GET W = F.                   SET UP THE SYMBOL TREE.                    STG20872
FLG Y = 0.                   SET THE RESULTING SYMBOL UNDEFINED.        STG20873
PTR Z = F + 0.               SET THE TREE POINTER TO THE SYMBOL ROOT.   STG20874
TO 58 BY B.                  LOOK UP THE SYMBOL VALUE.                  STG20875
TO 83 IF FLG Y NE 1.         AN UNDEFINED SYMBOL HAS THE VALUE ZERO.    STG20876
TO 83 IF VAL Y = 0.          A NULL STRING HAS THE VALUE ZERO.          STG20877
GET X = Y.                   GRAB FIRST CHARACTER OF NON-NULL STRING.   STG20878
FLG N = 1.                   ASSUME IT IS A MINUS SIGN                  STG20879
TO 82 IF VAL X = O.          AND IF IT IS GO ON TO THE NEXT DIGIT.      STG20880
FLG N = 0.                   ELSE RESET THE SIGN TO PLUS.               STG20881
PTR X = Y + 0.               PREPARE FOR A SPURIOUS FETCH.              STG20882
LOC 80.                      CHECK THE NEXT CHARACTER FOR DIGIT.        STG20883
GET X = X.                   NO, GRAB THE NEXT CHARACTER.               STG20884
PTR U = VAL X.               CHECK FOR A DIGIT.                         STG20885
PTR U = U - E.                                                          STG20886
TO 81 IF PTR U = 0.                                                     STG20887
TO 93 IF PTR U GE 5.                                                    STG20888
TO 93 IF PTR 0 GE U.                                                    STG20889
LOC 81.                      INCORPORATE A DIGIT INTO THE SECTION VALUE.STG20890
PTR N = N * 5.               MULTIPLY ACCUMULATOR BY 10.                STG20891
PTR N = N + U.               ADD CURRENT DIGIT.                         STG20892
LOC 82.                                                                 STG20893
VAL Y = Y - 1.               DROP THE REMAINING LENGTH.                 STG20894
TO 80 IF VAL Y NE 0.         ARE WE DONE, NO.                           STG20895
TO 83 IF FLG N = 0.          IS THE ACCUMULATOR NEGATIVE, NO.           STG20896
FLG N = 0.                   YES, RESET THE SIGN BIT.                   STG20897
PTR N = 0 - N.               NEGATE THE CONTENTS.                       STG20898
LOC 83.                      EVALUATE THE CURRENT SECTION.              STG20899
TO 92 IF VAL J = R.          IS THE SECTION OPERATOR A RIGHT PAREN, YES.STG20900
TO 90 IF VAL T = M.          NO, IS THE STACK OPERATOR A LEFT PAREN, YESSTG20901
TO 89 IF VAL J = P.          NO, IS THE SECTION OPERATOR A TIMES, YES.  STG20902
TO 89 IF VAL J = Q.          NO, IS IT A DIVIDE, YES.                   STG20903
LOC 84.                      PERFORM A PENDING OPERATION.               STG20904
TO 87 IF VAL T = Q.          IS THE OPERATOR A DIVIDE, YES.             STG20905
TO 86 IF VAL T = P.          NO, IS IT A TIMES, YES.                    STG20906
TO 85 IF VAL T = O.          NO, IS IT A MINUS, YES.                    STG20907
PTR T = T + N.               PLUS.                                      STG20908
TO 88.                                                                  STG20909
LOC 85.                                                                 STG20910
PTR T = T - N.                                                          STG20911
TO 88.                                                                  STG20912
LOC 86.                                                                 STG20913
PTR T = T * N.                                                          STG20914
TO 88.                                                                  STG20915
LOC 87.                                                                 STG20916
PTR T = T / N.                                                          STG20917
LOC 88.                                                                 STG20918
VAL T = J + 0.               RESET THE STACK OPERATOR.                  STG20919
TO 76 IF VAL J NE R.         WAS THE SECTION OPERATOR A RIGHT PAREN, NO.STG20920
PTR N = T + 0.               YES, KEEP EVALUATING.                      STG20921
PTR 9 = 9 + 7.               POP THE STACK.                             STG20922
GET T = 9.                                                              STG20923
TO 92.                                                                  STG20924
LOC 89.                      CHECK PRECEDENCE OF STACK OPERATORS.       STG20925
TO 86 IF VAL T = P.          EVALUATE IF THE STACK OPERATOR IS TIMES    STG20926
TO 87 IF VAL T = Q.          OR DIVIDE.                                 STG20927
LOC 90.                      STACK A SECTION.                           STG20928
STO 9 = T.                   PUSH THE STACK.                            STG20929
PTR 9 = 9 - 7.                                                          STG20930
TO 97 IF PTR 8 GE 9.                                                    STG20931
VAL T = J + 0.               SET THE OPERATOR                           STG20932
PTR T = N + 0.               AND OPERAND ONTO THE STACK.                STG20933
TO 76.                                                                  STG20934
LOC 91.                      STACK IS EMPTY.                            STG20935
TO 93 IF VAL S NE 0.         IS THE EXPRESSION EMPTY, NO.               STG20936
RETURN BY P.                 YES, CORRECT RETURN.                       STG20937
LOC 92.                                                                 STG20938
TO 84 IF VAL T NE M.         IS THE STACK OPERATOR A LEFT PAREN, NO.    STG20939
TO 91 IF PTR 9 = O.          YES, IS THE STACK EMPTY, YES.              STG20940
PTR 9 = 9 + 7.               NO, POP IT UP.                             STG20941
GET T = 9.                                                              STG20942
TO 92 IF VAL S = 0.          IS THERE MORE IN THE EXPRESSION, NO.       STG20943
GET X = S.                   YES, GRAB THE NEXT CHARACTER.              STG20944
VAL S = S - 1.                                                          STG20945
PTR S = X + 0.                                                          STG20946
VAL J = X + 0.                                                          STG20947
TO 92 IF VAL J = R.          IS THE SECTION OPERATOR A RIGHT PAREN, YES.STG20948
TO 83 IF VAL J = N.          NO, IS IT A PLUS, YES.                     STG20949
TO 83 IF VAL J = O.          NO, MINUS, YES.                            STG20950
TO 83 IF VAL J = P.          NO, TIMES, YES.                            STG20951
TO 83 IF VAL J = Q.          NO, DIVIDE, YES.                           STG20952
LOC 93.                      ERROR IN ARITHMETIC EXPRESSION.            STG20953
MESSAGE EXPR TO 4.           ISSUE AN ERROR MESSAGE.                    STG20954
PTR N = 0 + 0.               ZERO OUT A POSSIBLE SKIP COUNT.            STG20955
PTR 9 = O + 0.               RESET THE FREE SPACE POINTER.              STG20956
TO 94 BY B.                  CALL ERROR TRACEBACK.                      STG20957
RETURN BY P.                 CONTINUE WITH THE LINE.                    STG20958
LOC 94.                      PROVIDE TRACEBACK FROM ERROR.              STG20959
PTR X = C + 0.               FIRST CHARACTER OF THE STRING BEING BUILT. STG20960
PTR Y = J + 0.               CURRENT PARAMETER POINTER.                 STG20961
TO 96 IF PTR 9 GE C.         IS THERE A LINE BEING CONSTRUCTED, NO.     STG20962
STO 9 = L.                   YES, TERMINATE IT.                         STG20963
LOC 95.                      PRINTING LOOP.                             STG20964
GET X = X.                   GRAB THE NEXT CHARACTER.                   STG20965
CHAR = VAL X.                MOVE IT TO THE LINE BUFFER.                STG20966
TO 95 IF FLG X = 0.          ARE WE DONE WITH THIS LINE, NO.            STG20967
WRITE NEXT 4.                YES, WRITE IT OUT.                         STG20968
TO 98 IF FLG 4 NE 0.         TREAT AN ERROR AS FATAL.                   STG20969
TO 96 IF VAL X = L.          IF THE LINE ENDED, FINE.                   STG20970
CHAR = VAL X.                OTHERWISE RE-ISSUE THE LAST CHARACTER      STG20971
TO 95.                       AND KEEP OUTPUTTING.                       STG20972
LOC 96.                                                                 STG20973
TO 70 IF PTR Y = 0.          ARE THERE MORE, NO.                        STG20974
PTR Y = Y - H.               YES, MOVE BACK UP THE CHAIN.               STG20975
PTR X = Y - 7.                                                          STG20976
GET Y = Y.                   PREVIOUS PARAMETER POINTER.                STG20977
GET X = X.                   CURRENT TEXT POINTER.                      STG20978
TO 95.                                                                  STG20979
LOC 97.                      THE WORKING AREA HAS BEEN OVERFILLED.      STG20980
MESSAGE FULL TO 4.           ISSUE AN ERROR MESSAGE.                    STG20981
TO 94 BY B.                  CALL ERROR TRACEBACK.                      STG20982
STOP.                                                                   STG20983
LOC 98.                      AN I/O ERROR HAS OCCURRED                  STG20984
MESSAGE IOCH TO 4.           ISSUE THE CHANNEL ERROR MESSAGE            STG20985
TO 94 BY B.                  AND PROVIDE A TRACEBACK.                   STG20986
STOP.                                                                   STG20987
END PROGRAM.                                                            STG20988
