1 * C210-001-6601 (FRTN) 3C NO.180463000 REV. D
6 * COMPUTER. DDP-116,516
11 * PROGRAM CATEGORY- COMPILER
17 * EXPANDED FORTRAN IV COMPILER
29 * PROG--------------------- ------------
32 * SUPR---------------------- ------------
35 * QUAL---------------------- ------------
38 * NO. OF PAGES ------------
43 * REV. C ECO 3824 10-31-66
44 * REV. B ECO 3476 09-19-66
49 * HONEYWELL. INC. - COMPUTER CONTROL DIVISION
54 * THIS PROGRAM IS DESIGNED TO COMPILE ASA STANDARD FORTRAN IV
55 * PROGRAMS IN ONE PASS, GENERATING OPTIMUM OBJECT CODE FOR THE
61 * MINIMUM 8K CORE STORAGE
73 * ********************************
75 * *FORTRAN-IV OPERATING PROCEDURE*
76 * ********************************
78 * 1. LOAD THE COMPILER SYSTEM TAPE USING STANDARD 'LOAD-MODE'
79 * (DDP-116), OR "PAL-MODE (DDP-516) LOADING PROCEDURES
81 * 2. SET THE (A) REGISTER FOR THE DESIRED INPUT/OUTPUT DEVICE
82 * SELECTION AS DESCRIBED BELOW, SET (P) TO '1000, SET THE
83 * SENSE SWITCHES AS DESCRIBED BELOW, AND PRESS START.
85 * 3. INPUT/OUTPUT DEVICE SELECTION (BITS SET IN (A) ON ENTRY).....
86 * 1......IF SET, CERTAIN ERROR CHECKS ARE NOT MADE. THIS
87 * OPTION IS USED WHEN COMPILING THOSE PARTS OF THE
88 * LIBRARY WRITTEN IN FORTRAN LANGUAGE AND IT ALLOWS THE
89 * LIBRARY TO TAKE ADVANTAGE OF THE COMPILER'S LOGIC TO
90 * GENERATE SPECIAL CODING.
94 * 8-10...INPUT DEVICE SELECTION
95 * 1 = ASR-33/35 KEYBOARD (OR ITS PAPER TAPE READER)
97 * 3 = DIGITRONICS PAPER TAPE READER
98 * 4 = MAGNETIC TAPE ( UNIT 1 )
101 * 11-13..SYMBOLIC LISTING SELECTION
102 * 0. SUPPRESS ALL SYMBOLIC LISTINGS
103 * 1. ASR-33/35 TYPEWRITER
106 * 4 = LISTING ON MAGNETIC TAPE UNIT 2
109 * 14-16..BINARY OUTPUT SELECTION
110 * 0. SUPPRESS BINARY OUTPUT.
111 * 1. BRPE HIGH SPEED PAPER TAPE PUNCH
112 * 2. ASR BINARY OUTPUT ASR/33
113 * 3. ASR BINARY OUTPUT ASR/35
114 * 4 = MAGNETIC TAPE OUTPUT
118 * 4. SENSE SWITCH SETTINGS AND MEANINGS.......
119 * 1......EXPAND THE SYMBOLIC LISTING TO INCLUDE
120 * SIDE-BY-SIDE OCTAL INFORMATION.
121 * 2......INHIBIT SYMBOLIC LISTING (AS LONG AS SSW-1 NOT SET).
122 * 3......PAUSE BEFORE INPUT OF THE NEXT RECORD. DURING
123 * THIS PAUSE, THE (A) REGISTER WILL DISPLAY THE CURRENT
124 * STATUS OF THE I/O KEYBOARD, IT MAY BE
125 * CHANGED AT THIS TIME IF DESIRED BEFORE RESETTING
126 * SSW-3 AND PRESSING START TO CONTINUE.
127 * 4......CAUSE TRACE COUPLING INFORMATION TO BE INCLUDED
128 * IN THE OBJECT CODING BEING GENERATED REGARDLESS OF
129 * ANY TRACE STATEMENTS WITHIN THE PROGRAM (OPERATOR
132 * 5. WHEN BINARY TAPE IS BEING GENERATED, THE COMPILER
133 * AUTOMATICALLY TURNS ON THE TAPE PUNCH AND PUNCHES OUT A
134 * LENGTH OF LEADER. AFTER THE END-OF-JOB IS TYPED, A LENGTH OF
135 * TRAILER IS PUNCHED BEFORE TURNING OFF THE PUNCH, AND THE LINE
136 * PRINTER IS ADVANCED TO THE NEXT PAPER SEAM. PRESS 'START'
137 * TO PROCESS THE NEXT PROGRAM (BATCH COMPILING).
139 * FOR ASR BINARY OUTPUT, NO LEADER OR TRAILER IS
140 * PROVIDED, AND THE BINARY PUNCH IS LEFT ON THROUGHOUT
146 * THE ERROR MESSAGES OUTPUT BY THIS COMPILER ARE LISTED ON A
147 * SEPERATE DOCUMENT FOR EASE OF DISTRIBUTION.
148 * *************************
149 * *DATA POOL ENTRY FORMATS*
150 * *************************
152 * THE DATA POOL CONSISTS OF FOUR FORMS OF INFORMATION
153 * 1. THE ASSIGNMENT TABLE CONSISTS OF 5 WORDS, STARTS
154 * AT THE END OF THE COMPILER AND EXTENDS TOWARD THE
157 * TDCCCCCCCCCCCCCC....DP(A+4)
158 * CCCCCCCCCCCCCCCC....DP(A+3)
159 * CCCCCCCCCCCCCCCC....DP(A+2)
160 * IIAAAAAAAAAAAAAA....DP(A+1)
161 * NRRRMMMLLLLLLLLL....DP(A)
165 * C = SIX 8-BIT CHAR. OR BINARY CONSTANT
166 * I = ITEM USAGE (IU)
167 * 0 = NO USAGE 2 = VAR/CONSTAN^
168 * 1 = SUBPROGRAM 3 = ARRAY
169 * A = ASSIGNMENT ADDRESS
171 * 0 = NAME 1 = CONSTANT
172 * R = ADDRESS TYPE (AT)
173 * 0 = ABSOLUTE 3 = STRING-REL
174 * 1 = RELATIVE 4 = COMMON
175 * 2 = STRING-ABS 5 = DUMMT
177 * 1 = INTEGER 5 = COMPLEX
178 * 2 = REAL 6 = DOUBLE
181 * 2. THE DO TABLE 'FLOATS' ON TOP OF THE ASSIGNMENT
182 * TABLE AND CONTAINS THE INFORMATION NEEDED TO CLOSE-OUT
183 * A DO-LOOP, EACH ENTRY IS 5 WORDS.
189 * I = INITIAL VALUE/OR RPL
193 * N = STATEMENT NUMBER
195 * 3. THE EXPRESSION TABLE (A0I TABLE) 'FLOATS' ON TOP
196 * THE DO TABLE AND CONSISTS OF 2 WORD ENTRIES.
198 * NOOOOOOOOIIIIIII.....DP(I+1)
199 * 00AAAAAAAAAAAAAAAA...DP(I)
200 * N = NEGATION INDICATOR
202 * I = INDEX (OPERATOR LEVEL)
203 * A = ASSIGNMENT TABLE REFERENCE
204 * 4. THE TRIAD TABLE IS USED TO OPTIMIZE EXPRESSIONS AND
205 * IS AT THE END OF MEMORY EXTENDING DOWN TOWARDS THE
206 * COMPILER. EACH ENTRY IS THREE WORDS LONG.
208 * S000000000PPPPPP.....DP(L+2)
209 * 0011111111111111.....DP(L+1)
210 * 0022222222222222.....DP(L)
211 * S = TEMP STORAGE INDICATOR
213 * 1 = FIRST OPERAND ADDRESS
214 * 2 = SECOND OPERAND ADDRESS
218 * ************************************
219 * * DIRECTORY OF FORTRAN IV COMPILER *
220 * ************************************
224 *..............ENTRANCE GROUP
225 DAC A3 (ENG1) COMPILER ENTRANCE/INITIALIZE
226 DAC DP DATA POOL START
228 *..............INPUT GROUP
229 DAC IC00 (IPG1) INPUT COLUMN
230 DAC UC00 (IPG2) UNINPUT COLUMN
231 DAC CH00 (IPG3) INPUT CHARACTER
232 DAC ID00 (IPG4) INPUT DIGIT
233 DAC IA00 (IPG5) INPUT (A) CHARACTERS
234 DAC FN00 (IPG6) FINISH OPERATOR
235 DAC DN00 (IPG7) INPUT DNA
236 DAC II00 (IPG8) INPUT ITEM
237 DAC OP00 (IPG9) INPUT OPERAND
238 DAC NA00 (IPG10) INPUT NAME
239 DAC IG00 (IPG11) INPUT INTEGER
240 DAC IV00 (IPG12) INPUT INTEGER VARIABLE/CONSTANT
241 DAC IR00 (IPG13) INPUT INTEGER VARIABLE
242 DAC IS00 (IPG14) INPUT STATEMENT NUMBER
243 DAC XN00 (IPG15) EXAMINE NEXT CHARACTER
244 DAC SY00 INPUT STMBOL
246 *..............TEST GROUP
247 DAC TS00 (TSG1) ALL CHARACTER TEST (EXCEPT C/R)
248 DAC IP00 (TSG2) )-INPUT OPERATOR
249 DAC A1 (TSG3) C/R TEST
250 DAC B1 (TSG4) , OR C/R TEST
251 DAC NU00 (TSG5) NO USAGE TEST
252 DAC NC00 (TSG6) NON CONSTANT TEST
253 DAC NS00 (TSG7) NON SUBPROGRAM TEST
254 DAC AT00 (TSG8) ARRAY TEST
255 DAC IT00 (TSG9) INTEGER TEST
256 DAC NR00 (TSG10) NON REL TEST
258 *..............ASSIGNMENT GROUP
259 DAC AS00 (ASG1) ASSIGN ITEM
260 DAC TG00 (ASG2) TAG SUBPROGRAM
261 DAC TV00 (ASG3) TAG VARIABLE
262 DAC FA00 (ASG4) FETCH ASSIGN
263 DAC FL00 (ASG5) FETCH LINK
264 DAC KT00 (ASG6) D(0)= SIZE OF ARRAY DEFLECTION
265 DAC DM00 (ASG7) DEFINE IM
266 DAC DA00 (ASG8) DEFINE AF
267 DAC AF00 (ASG9) DEFINE AFT
268 DAC LO00 (ASG10) DEFINE LOCATION
269 DAC AI00 (ASG11) ASSIGN INTEGER CONSTANT
270 DAC AA00 (ASG12) ASSIGN SPECIAL
271 DAC NXT GET NEXT ENTRY FROM ASSGN TABLE
272 DAC BUD BUILD ASSIGNMENT TABLE ENTRT
274 *..............CONTROL GROUP
277 DAC C6 (CNG2) CONTINUE
278 DAC C7 (CNG3) STATEMENT INPUT
279 DAC C8 (CNG4) STATEMENT SCAN
280 DAC A9 (CNG5) STATEMENT IDENTIFICATION
281 DAC NP00 (CNG6) FIRST NON-SPEC CHECK
283 *..............SPECIFICATIONS GROUP
284 DAC EL00 (SPG1) EXCHANGE LINKS
285 DAC NM00 (SPG2) NON COMM0N TEST
286 DAC ND00 (SPG3) NON DUMMY OR SUBPROGRAM TEST
287 DAC SC00 (SPG4) INPUT SUBSCRIPT
288 DAC IL00 (SPG5) INPUT LIST ELEMENT
289 DAC R1 (SPG6) FUNCTION
291 DAC A3 (SPG7) INTEGER
293 DAC A5 DOUBLE PRECISION
296 DAC B2 (SPG8) EXTERNAL
297 DAC B3 (SPG9) DIMENSION
298 DAC B7 INPUT DIMENSION
299 DAC B4 (SPG10) COMMON
300 DAC B5 (SPG11) EQUIVALENCE
301 DAC C2 (SPG12) RELATE COMMON ITEMS
302 DAC C3 (SPG13) GROUP EOUIVALENCE
303 DAC C4 (SPG14) ASSIGN SPECIFICATIONS
305 DAC R3 (SPG16) BLOCK DATA
306 DAC TRAC (SPG17) TRACE
308 *..............PROCESSOR GROUP
311 DAC IB00 INPUT BRANCH LIST
314 DAC V7 (PRG6) END FILE
320 DAC SI00 INPUT FORMAT STRING
321 DAC IN00 INPUT NUMERIC FORMAT STRING
322 DAC NZ00 NON ZERO STRING TEST
326 DAC G2 ASSIGNMENT STATEMENT
327 DAC R9 (PRG11) RETURN
328 DAC G1 (PRG12) STATEMENT FUNCTION
331 *..............PROCESSOR SUBROUTINES GROUP
332 DAC PO00 (PSG1) INPUT CHAR AND OUTPUT PACK
333 DAC HS00 (PSG2) TRANSMIT HOLLERITH STRING
334 DAC DP00 (PSG3) DO INPUT
335 DAC DS00 (PSG4) DO INITIALIZE
336 DAC DQ00 (PSG5) DO TERMINATION
337 DAC EX00 (PSG6) EXPRESSION
339 DAC ST00 TRIAD SEARCH
340 DAC TC00 TEMP STORE CHECK
341 DAC ET00 (PSG8) ENTER TRIAD
342 DAC GE00 (PSG9) GENERATE SUBPROGRAM ENTRANCE
344 *..............OUTPUT GROUP
345 DAC OL00 (OPG1) OUTPUT OBJECT LINK
346 DAC OI00 (OPG2) OUTPUT I/O LINK
347 DAC CN00 (OPG3) CALL NAME
348 DAC OK00 (OPG4) OUTPUT PACK
349 DAC OB00 (OPG5) OUTPUT OA
350 DAC OT00 (OPG6) OUTPUT TRIADS
351 DAC OM00 (OPG7) OUTPUT ITEM
352 DAC OR00 (OPG8) OUTPUT REL
354 DAC OS00 OUTPUT STRING
355 DAC OW00 (OPG9) OUTPUT WORD
357 DAC FS00 (OPG10) FLUSH
358 DAC TRSE (OPG11) OUTPUT TRACE COUPLING
359 DAC PRSP SET BUFFER TO SPACES
361 *..............MISC. GROUP
362 DAC AD3 ADD TWO 3 WORD INTEGERS
363 DAC IM00 MULTIPLY (A) BY (B)
364 DAC STXA SET A INTO INDEX
365 DAC STXI SET I INTO INDEX
366 DAC NF00 SET FS INTO NAMF
367 DAC BLNK SET AREA TO ZEROS
368 DAC MOV3 MOVE 3 WORDS TO TEMP STORAGE
369 DAC CIB COMPARE IBUF TO A CONSTANT
370 DAC SAV SAVE INDEX IN PUSH-DOWN STACK
371 DAC RST RESET INDEX FROM PUSH-DOWN STACK
373 DAC ER00 ERROR OUTPUT
374 DAC SRT SHIFT RIGHT 1 (TRIPLE PRES.)
375 DAC SFT SHIFT LEFT 1 (TRIPLE PRES.)
379 * ****************************
380 * *CONSTANT AND VARIABLE POOL*
381 * ****************************
383 XR EQU 0 INDEX REGISTER
384 * THE FOLLOWING 62 VARIABLES ARE SET TO ZERO DURING
385 * PROGRAM INITIALIZATION
386 A EQU '40 ASSIGNMENT TABLE INDEX
387 I EQU A+1 EXPRESSION TABLE INDEX
391 MFL EQU A+5 MODE FLAG
392 SFF EQU A+6 FUNCTION FLAG
393 SBF EQU A+7 SUBFUNCTION FLAG
394 SXF EQU A+8 POSSIBLE CPX FLAG
395 SPF EQU A+9 PEC. FLAG
396 TCF EQU A+10 TEMP STORE COUNT
398 ABAR EQU A+12 BASE OF ASSIGN TABLE
399 XST EQU A+13 FIRST EXECUTABLE STMNT.
400 CFL EQU A+14 MON FLAG
402 RPL EQU A+16 RELATE PROGRAM LOCATION
403 BDF EQU A+17 LOCK DATA FLAG
404 SLST EQU A+18 SOURCE LIST
405 OBLS EQU A+19 OUTPUT BINARY LIST
406 BNOT EQU A+20 BINART OUTPUT FLAG
407 TRF EQU A+21 TRACE FLAG (END TRACE STATEMENT NO.)
408 TRFA EQU A+22 POINTER TO FIRST VAR, 0R ARRAY NAME IN
409 * AN EXPRESSION (FOR USE BY TRACE).
410 SOF EQU A+23 SUBSCRIPT CONSTANT FLAG (NON-ZERO IF SET)
411 LIF EQU A+24 LOGICAL IF FLAG
412 LSTN EQU A+25 LAST STATEMENT NO.
413 LSTF EQU A+26 LAST STATEMENT FLAG
414 LSTP EQU A+27 LAST STATEMENT STOP
415 SDSW EQU A+28 STATEMENT I0 SWITCH
417 NAMF EQU '570 NAME FUNCTION
418 ND EQU NAMF+1 NO OF DIMENSIONS
419 NS EQU '572 NO OF SUBSCRIPTS
421 NTF EQU NS+2 NAME TAG FLAG
422 NTID EQU NS+3 NO. WORDS IN TID
423 O1 EQU NS+4 OPERATOR 1
424 O2 EQU NS+5 OPERATOR 2
427 OCNT EQU NS+8 OUTPUT COUNT
429 S1 EQU NS+10 SUBSCRIPT NO.1
430 S2 EQU NS+11 SUBSCRIPT NO.2
431 S3 EQU NS+12 SUBSCRIPT NO.3
432 TC EQU NS+13 TERMINAL CHAR
435 X EQU NS+16 ARRAY INDICES
440 NTA EQU NS+21 UNPACKED ASSIGNMENT ITEMS
447 *..........ADJUST THIS ORG IF THE SIZE OF THE CONSTAST POOL IS MODIFIED
449 AF PZE 0 ADDRESS FIELD
451 AT PZE 0 ADDRESS TYPE
452 CODE PZE 0 OUTPUT CODE
461 DFL PZE 0 DELIMITER FLAG
462 E OCT 0 EQUIVALENCE INDEX
465 FTOP PZE 0 OUTPUT COMMAND
467 ICSW PZE 1 INPUT CONTROL SWITCH
475 DO OCT 17 DO TABLE INDEX(FLOATS ABOVE ASSIGNMENT)
476 CC PZE '111 CARD COLUMN COUNTER
477 DCT PZE 0 DUMMY ARGUMENT COUNT
478 F PZE 0 TRIAD TABLE INDEX
479 CL PZE 0 ASSIGNMENT ITEMS UNPACKED
481 FLT1 PZE 0 FETCH LINK CL POINTER LOCATION
482 LIBF PZE 0 SPECIAL LIBRARY FLAG (NON-ZERO IF SET)
483 *..........CONSTANTS USED BY THE COMPILER
505 K60 OCT 260 00 (BCI ZERO)
541 HBIT OCT 140000 HIGH BITS FOR ALPHA DATA
542 KAEQ BCI 1,EQ EQUIVALENCE ERROR MESSAGE ATTACHMENT
548 DP EQU '15400 DUMMY START OF DATA POOL (ACTUALLY SET
549 * BY THE FORTRAN IOS SUBROUTINE.)
550 L0 EQU '113 DUMMY END OF DATA POOL (MINUS 3 WORDS)
551 * THE FOLLOWING INSTRUCTIONS CAUSE THE LOADER
552 * TO ASSIGN ALL REFERENCES TO THE DATA POOL IN WORDS
553 * 100 TO 112 OF THE ZERO SECTOR, FORTRAN IOS WILL
554 * CAUSE THESE CELLS TO BE SET TO THE ACTUAL DATA POOL
555 * LOCATIONS WHICH WILL BE DETERMINED BY COMPUTER
559 PZE DP-3,1 (101) DATA POOL REFERENCES
569 PZE DP+7 (113) NO WDS IN DATA POOL SET BY IOS
573 JST ER00 THIS INSTRUCTION REACHED ONLY IF THE
574 BCI 1,CG COMPILER JUMPED TO ZERO BY MISTAKE.
579 * *******************
580 * *START OF COMPILER*
581 * *******************
587 * - A0 COMP ENT EMPTY BUFFERS
589 STA LIBF SET SPECIAL LIBRARY FLAG
590 LLL 15 (BIT 1 ON INHIBITS CERTAIN ERROR CHECKS)
591 A0 CALL F4$INT INITIALIZE I/O DEVICES
594 JST IC00 INPUT COLUMN
597 LDA A092 LOC, OF INDEX PUSH-DOWN BUFFER
598 STA SAV9 INITIALIZE PUSH-DOWN BUFR,
600 STA A+M,1 SET M VARIABLES TO ZERO
606 JST FS00 INITIALIZE OUTPUT BUFFER
608 STA LSTF LSTF NOT EQ 0
609 STA LSTP LSTP NOT EQ 0
610 STA EBAR EBAR SET NEGATIVE
613 STA E0 INITIALIZE EQUIVALENCE TABLE
614 STA L INITIALIZE TRIAD TABLE POINTER
615 JST PRSP SET PRINT BUFFER TO SPACES
617 STA DO INITIALIZE DO TABLE POINTER
622 A055 IRS ID ESTABLISH CONSTANTS
631 LRL 32 (B)=0 IM=NO USAGE
632 LDA K101 (A)=1 IU=SUBR
633 JST AA00 ASSIGN (SPECIAL)
634 JST STXA SET POINTER A INTO INDEX AND (A)
635 STA CFL CFL=A (LOCATION OF FIRST COMMON BLOCK)
636 ADD K122 ='40000 (IU=SUBR)
637 STA DP+1,1 GF(A)=A (IN CASE NO BLANK COMMON IS SPECIFI
638 JMP C7 GO TO STMNT INPUT
642 A092 DAC SAVX START OF INDEX PUSH-DOWN BUFFER
650 * INPUT NEXT CHARACTER
653 * IC02 SET AS FOLLOWS -
656 IC00 DAC ** LINK STORE
658 LDA CC IF CC = 73, GO TO IC 10
661 JMP IC19 ELSE, GO TO IC
662 IC10 LDA ICSW IF ICSW. GO TO IC12
664 JMP IC24 ELSE, GO TO IC24
665 IC12 CALL F4$IN INPUT SYMBOLIC CARD IMAGE
671 JMP IC30 COMMENT CARD (IGNORE)
674 JMP IC18 CONTROL CARD (IGNORE COLUMN 6)
675 LDA K357 IF CARD COL, SIX IS
676 ANA CI+2 ZERO OR BLANK, GO TO IC18
679 JMP IC26 ELSE, GO TO IC26
681 LDA CI+2 CI(6) = SPECIAL
687 IC19 LDA CC TC = CI(CC)
697 IC22 JST RST RESTORE INDEX
699 IC24 LDA K9 TC = /, END OF LINE - STATEMENT SCAN
702 IC26 JST LIST LIST, CONTINUATION CARD
703 LDA K107 CC = 7. IGNORE STATEMENT NO.
706 IC30 JST LIST PRINT CARD IMAGE
707 JMP IC12 READ IN NEW CARD
710 KASP BCI 1, (SP)(SP) MUST PRECEDE CARD IMAGE BUFFER
731 * INPUT ONE CHARACTER FROM EITHER
732 * 1, INPUT BUFFER (EBAR POSITIVE) OR
733 * 2, EQUIVALENCE BUFFER (EBAR NEGATIVE)
736 LDA EBAR IF EBAR 7 0,
739 CH03 JST IC00 INPUT COLUMN
740 SUB K8 IF BLANK, REPEAT
756 CRA ALPHA NUMERIC CHARACTER
757 CH05 STA DFL DELIMITER ENTRY
758 LDA TC EXIT WITH TC IN A
766 CH10 LDA E IF E = EBAR
770 STA 0 SET E INTO INDEX
771 LLL 16 SET (B) TO ZERO
772 LDA DP,1 CURRENT CHARACTER WORD
774 STA DP,1 SAVE REMAINING CHARACTER IF ANY
776 STA TC TC=LEFTMOST CHARACTER
777 SZE SKIP IF NEW CHARACTER WORD NEEDED
782 JMP CH10 PICK UP NEXT CHARACTER WORD
783 CH12 SSM MAKE E MINUS
785 JMP C4 GO TO ASSIGN SPEC
793 * A IS ZERO IF NOT DIGIT
795 ID00 DAC ** INPUT DIGIT
796 JST CH00 INPUT A CHAR
799 JMP ID10 ELSE, (A) = 0
808 * **********************
809 * *INPUT (A) CHARACTERS*
810 * **********************
811 * CHAR COUNT IN XR, TERMINATES WITH EITHER
812 * 1, CHAR COUNT -1 = ZERO OR
813 * 2, LAST CHAR IS A DELIMITER
818 JST IA50 EXCHANGE IBUF AND ID
821 IA10 JST CH00 INPUT A CHARACTER
823 LDA DFL IF DFL NOT ZERO,
826 IRS IA99 TEST COUNTER
827 JMP IA10 MORE CHARACTERS TO INPUT
828 IA20 JST IA50 EXCHANGE ID AND IBUF
830 IA50 DAC ** EXCHANGE IBUF AND ID
839 JST RST RESTORE INDEX
849 * WRAP UP LOGICAL/RELATIONAL OPERATORS
852 LDA DFL IF DFL NOT . ,
859 FN05 LDA K110 USE TABLE TO CONVERT
869 FN20 LDA FN91+17,1 FOUND A LOGICAL OPERATOR
872 FN90 OCT 253,255,252,257 +-*/
873 BCI 9,NOANORLTLEEQGEGTNE
875 FN91 OCT 1,2,3,4,5,6,7,10,11,12,13,14,15,16,17
881 * BASIC INPUT ROUTINE, HANDLES FOLLOWING -
882 * CONSTANT CONVERSION
883 * MODE TYPING (CONSTANTS, IMPLIED/VARIABLES)
884 * ALL OPERATORS (TERMINATE ITEM)
887 TID EQU ID TEMP STORE FOR ID
888 IBUF BSS 3 3-WORD BUF
896 F3 PZE 0 INPUT EXPONENT
897 F4 PZE 0 NO, FRAC. POSITIONS
898 F5 PZE 0 TEMP DELIMITER STORE
901 HOLF PZE 0 HOLLERITH FLAG
909 JST BLNK CLEAR OUT TID = ID
916 DN07 JST ID00 INPUT DIGIT
918 JMP DN14 (A) NON-ZERO, G0 T0 DN14
919 DN10 LDA TID+2 CHECK FOR OVERFLOW AND ADJUST
920 ANA K158 POSITION COUNT IF NECESSARY,
925 ADD F4 F4 = F4+1 IF NO OVERFLOW
926 STA F4 AND IM ALREADY SET TO REAL
931 JST SFT SHIFT ID LEFT
933 JST MOV3 MOVE TO TEMP STORE
938 JST AD3 ID = 10*ID+TC
952 DN14 LDA IM IM = REAL
955 JMP DN50 NO, GO TO DN50
958 LDA DFL IF DFL =0, GO SO DN20 (5)
960 JMP DN90 ELSE GO TO DN90 (9)
961 DN20 LDA TC IF TC = D, GO TO DN26
965 SUB K101 ELSE, IF TC = E, GO TO DN22
967 JMP DN22 TERMINATOR = E
970 STA DFL SET DELIMITER FLAG
972 STA IM SET ITEM MODE TO INTEGER
973 JMP DN67 FINISH OPERATOR AND EXIT
975 DN22 JST ID00 INPUT DIGIT
976 SNZ IF (A) = 0, GO TO DN30
978 LDA TC IF TC = -, GO TO DN28
987 JST UC00 UN-INPUT COL
988 DN24 JST FN00 FINISH OPERATOR
989 DN25 LDA K101 IM = INT
991 LDA ID+1 IF ID IS TOO BIG TO
992 SZE BE AN INTEGER (>L2),
993 JMP DN69 GO TO DN69 (20)
997 JMP DN84 OTHERWISE, GO TO DN84(12)
998 DN26 LDA K106 IM = DBL
1001 DN28 LDA K101 F2 = 1
1003 DN29 JST ID00 INPUT DIGIT
1004 SZE IF (A) = 0, GO TO DN30 (8.5)
1005 JMP DN69 ELSE, GO TO DN69 (20)
1006 DN30 LDA F3 F3 = 10 * F3
1013 STA F3 IF (A) = 0, GO TO DN30 (8.5)
1014 JST ID00 ELSE, GO TO DN90 (9)
1018 DN50 LDA K102 IM=REA
1020 LDA TC IF TC = ., GO TO DN54
1025 SNZ IF NT = 0, GO TO DN72
1027 LDA TC IF TC = H, GO TO DN9H (22)
1032 SZE GO TO DN16 (4.9)
1033 JMP DN25 ELSE, GO TO DN25
1035 DN54 JST ID00 INPUT DIGIT
1037 JMP DN10 IF (A) = 0, GO TO DN10 (3)
1039 SNZ IF NT = 0, GO TO DN56
1042 JMP DN16 GO TO DN16 (4)
1045 DN58 JST UC00 UN-INPUT A COLUMN,
1046 LDA F1 IF F1 = 0, GO TO DN60
1048 JMP DN63 ELSE, GO TO DN63 (15)
1050 JST IA00 INPUT (6) CHARS
1051 JST CIB IF IBUF = TRUE.,
1054 JST CIB IF IBUF = FALSE.,
1055 DAC K2+3,1 GO TO DN66 (16)
1057 JST CIB CHECK FOR .NOT. OPERATOR
1058 DAC KNOT+3,1 CHECK FOR .NOT. OPERATOR
1059 JMP DN9N OPERATOR IS .NOT.