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 THE ERNEST. 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 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