mirror of
https://github.com/pkimpel/retro-b5500.git
synced 2026-02-13 11:44:33 +00:00
1. Alter method of writing disk sectors to IndexedDB, to avoid dragging along the entire 16KB IO Unit buffer area and unintentionally inflating host disk usage by 30-60X (ouch). This was causing Quota Exceeded errors in recent versions of Firefox. 2. Add onabort traps in B5500DiskUnit to catch QuotaExceeded errors. 3. Modify delay-deviation adjustment mechanism in B5500SetCallback to avoid oscillating between positive and negative cumulative deviations. 4. Correct tape reel angular motion in B5500MagTapeDrive, especially during reverse tape movement. 5. Fix bug with reporting memory parity error during tape I/O, should that ever occur. 6. Reset CPA Algol Glyphs option in default system configuration template. 7. Allow tools/B5500LibMaintDecoder to examine an entire .bcd tape image file instead of just the first 64KB. 8. Add USE SAVEPBT to default options in tools/COLDSTART-XIII deck. 9. Eliminate extraneous "schema update successful" alert when altering a disk subsystem configuration. 10. Commit minor corrections to source/B65ESPOL/SOURCE.alg_m from Richard Fehlinger.
10174 lines
914 KiB
Plaintext
10174 lines
914 KiB
Plaintext
B 6 5 0 0 I M P L E M E N T A T I O N L A N G U A G E 00001000
|
|
C O M P I L E R 00002000
|
|
1/68 00003000
|
|
DIRECTORY BY SECTION: 00004000
|
|
0 COMMENTARY & ERROR MESSAGE CODES. 00005000
|
|
1 NON-PROCEDURAL DECLARATIONS 00006000
|
|
2 STREAM PROCEDURES AND FORWARD DECLARATIONS. 00007000
|
|
3 THE SCANNER 00008000
|
|
4 THE EMITTERS & SERVICE ROUTINES 00009000
|
|
5 GENERAL COMPONENTS & EXPRESSIONS 00010000
|
|
6 STATEMENTS 00011000
|
|
7 DECLARATIONS 00012000
|
|
8 SYNTAX CONTROLLERS (BLOCK & STATEMENT) 00013000
|
|
9 INITIALIZATION AND WRAPUP 00014000
|
|
ERROR NUMBERS (USUALLY) HAVE THE NUMBER OF THE SECTION IN WHICH 00015000
|
|
DETECTED AS THE FIRST DIGIT. 00016000
|
|
100 UNKNOWN IDENTIFIER. 00100000
|
|
101 STATEMENT SCANNER SCREWED UP. 00101000
|
|
102 PRIMARY SCANNER SCREWED UP 00102000
|
|
103 BOOPRIM SCANNER SCREWED UP. 00103000
|
|
199 PROCEDURE HAS NOT YET BEEN CODED 00199000
|
|
300 SCAN IDENTIFIER OR NUMBER OF > 63 CHARACTERS. 00300000
|
|
301 TABLE ILLEGAL CONSTRUCT. 00301000
|
|
302 HOOK TOO MUCH NESTING OF DEFINES AND THINGS. 00302000
|
|
303 TABLE NUMBER IS TOO LARGE. 00303000
|
|
304 UNHOOK EXTRANEOUS CROSSHATCH OR SOMETHING LIKE THAT. 00304000
|
|
305 ASSOCIATE MISSING "(" OR "[". 00305000
|
|
306 ASSOCIATE MISSING ")" OR "]" OR TOO MANY PARAMETERS. 00306000
|
|
307 GOBBLE INVALID STRING CHARACTER. 00307000
|
|
308 GOBBLE INVALID STRING CODE OR ILLEGAL STRING SYNTAX. 00308000
|
|
400 EMITTERS TOO MUCH CODE IN THIS SEGMENT 00400000
|
|
401 EMITV/N DISPLACEMENT TOO BIG 00401000
|
|
402 SUBSCRIBER MISSING BRACKET OR SUBSCRIPT. 00402000
|
|
403 DOTTER EXPRESSION NOT ARITHMETIC. 00403000
|
|
404 DOTIT "." PERIOD NOT FOLLOWED BY FIELD IDENTIFIER. 00404000
|
|
405 PURGE LABEL DECLARED FORWARD NOT SEEN 00405000
|
|
406 PURGE PROCEDURE DECLARED FORWARD NOT SEEN 00406000
|
|
407 GETSPACE ILLEGAL ADDRESS-PART VALUE. 00407000
|
|
408 GETSPACE ILLEGAL ADDRESS-PART SYNTAX. 00408000
|
|
410 GETSPACE TOO MANY STACK CELLS AT THIS LEVEL. 00410000
|
|
415 GETSTACK TOO MANY TEMPORARIES IN USE AT ONE TIME 00415000
|
|
501 IFCLAUSE MISSING "THEN". 00501000
|
|
502 CASEHEAD EXPRESSION NOT ARITHMETIC. 00502000
|
|
503 CASEHEAD MISSING "OF". 00503000
|
|
504 IFEXP MISSING "ELSE". 00504000
|
|
505 EXPRESSION EXPRESSION IS NOT OF REQUIRED TYPE. 00505000
|
|
506 CASEXP MISSING "(". 00506000
|
|
507 CASEXP MISSING ")". 00507000
|
|
508 RELATION THIS EXPRESSION MAY NOT APPEAR IN A RELATION. 00508000
|
|
509 RELATION THIS RELATION MAY USE ONLY "=" OR "!". 00509000
|
|
510 RELATION MISSING "FOR" IN STRING RELATION. 00510000
|
|
511 RELATION ILLEGAL EXPRESSION TYPE. 00511000
|
|
512 BEXP EXPRESSION NOT BOOLEAN TYPE. 00512000
|
|
513 AEXP IF EXPRESSION NOT ARITHMETIC TYPE. 00513000
|
|
514 SIMPARITH ARRAY EXPRESSION MAY NOT BE SIGNED. 00514000
|
|
515 TERM ARRAY AND WORD EXPRESSIONS MAY NOT BE OPERATED UPON 00515000
|
|
516 BOOSEC CANT NEGATE AN EXPR UNLESS ITS BOOLEAN. 00516000
|
|
517 BOOCOMP EXPRESSION NOT BOOLEAN. 00517000
|
|
518 REXP VARIABLE NOT REFERENCE TYPE. 00518000
|
|
519 REXP NOT ENOUGH SUBSCRIPTS ON REFERENCE ARRAY. 00519000
|
|
520 REXP REF EXPR CANT START WITH THIS TYPE IDENTIFIER. 00520000
|
|
521 REXP EXPRESSION NOT OF TYPE REFERENCE. 00521000
|
|
522 REXP MISSING ")". 00522000
|
|
523 REXP CASE EXPR NOT OF TYPE REFERENCE. 00523000
|
|
524 REXP IF EXPRESSION NOT OF TYPE REFERENCE. 00524000
|
|
525 REXP REF EXPR CANT START WITH THIS QUANTITY. 00525000
|
|
526 REXP MISSING "(". 00526000
|
|
527 REXP CANT TRANSFER THIS TO TYPE REFERENCE. 00527000
|
|
528 REXP NOT ENOUGH SUBSCRIPTS. 00528000
|
|
529 VARIABLE REGISTER ASSIGNMENT MUST BE LEFT-MOST ASSIGNMENT. 00529000
|
|
530 VARIABLE LEFT BRACKET DOES NOT FOLLOW ARRAY IDENTIFIER. 00530000
|
|
531 VARIABLE FIELD DESIGNATOR IS NOT LEFT-MOST IN LEFT-PART LIST. 00531000
|
|
532 VARIABLE A PROCEDURE IDENTIFIER IS USED OUTSIDE OF ITS SCOPE. 00532000
|
|
533 LAYITOUT "&" NOT FOLLOWED BY LAYOUT. 00533000
|
|
534 LAYITOUT MISSING "(". 00534000
|
|
535 LAYITOUT MISSING ")". 00535000
|
|
537 ENTRYEXP NOT YET CODED 00537000
|
|
538 VARIABLE A VARIABLE IS NOT FOLLOWED BY A REPLACEMENT OPERATOR.00538000
|
|
539 VARIABLE A READ ONLY ARRAY MAY NOT BE STORED INTO. 00539000
|
|
540 PEXP EXPRESSION NOT POINTER TYPE. 00540000
|
|
541 PTRCOMP SKIP PART NOT INTEGER OR REAL EXPRESSION. 00541000
|
|
542 ITEMREFERENCE INCORRECT SYNTAX FOR AN ITEM REFERENCE 00542000
|
|
543 ENTRYEXPR INCORRECT SYNTAX FOR ENTRY EXPRESSION 00543000
|
|
544 LAYITOUT EXPRESSION NOT OF REQUIRED TYPE. 00544000
|
|
545 VARIABLE POINTER IDENTIFIER MAY NOT BE SUBSCRIPTED. 00545000
|
|
546 SETVARIABLE CANNOT MIX SETS OF VARYING SIZES IN SAME EXP 00546000
|
|
547 SETVARIABLE MISSING REPLACEMENT OPERATOR 00547000
|
|
548 VARIABLE REGISTERS MAY NOT BE PARTIAL FIELDED. 00548000
|
|
549 ARRAYROW MISSING LEFT BRACKET. 00549000
|
|
550 ARRAYROW ARRAY ROW MUST HAVE 1 ASTERISK. 00550000
|
|
551 LONGSTRING TOO MANY STRING CHARACTERS OR MISSING QUOTE. 00551000
|
|
552 STRINGSOURCE STRING MUST BE 4-, 6- OR 8-BIT CHARACTERS. 00552000
|
|
553 ARITHCOMP DOUBLE EXPRESSION MAY NOT BE DOTTED. 00553000
|
|
554 TERM SIMPARITH WORD EXPRESSIONS CONSIST OF WORD PRIMARY ONLY 00554000
|
|
567 VARIABLE EVENTS MAY NOT BE PARTIAL FIELDED 00567000
|
|
573 REPLACESTMT UPDATE ON ARITHMETIC SOURCE VALID ONLY FOR UNITS=DIGI00573000
|
|
574 SUBSCRIBER ACTUAL SUBSCRIPT(S) MUST PRECEDE ROW DESIGNATOR(S). 00574000
|
|
575 VARIABLE FIELDS MAY NOT BE DUPLICATED AND LOADED. 00575000
|
|
576 BITFIDDLE MISSING "(". 00576000
|
|
577 BITFIDDLE MISSING ",". 00577000
|
|
578 BITFIDDLE BAD BIT NUMBER. 00578000
|
|
579 BITFIDDLE MISSING ")". 00579000
|
|
600 CASESTMT MISSING ":". 00600000
|
|
601 CASESTMT MISSING "BEGIN". 00601000
|
|
602 CASESTMT TOO MANY STATEMENTS. 00602000
|
|
603 PROCALL ILLEGAL USE OF PROCEDURE IDENTIFIER 00603000
|
|
604 PROCALL EITHER ACTUAL AND FORMAL PARAMETERS DO NOT AGREE AS 00604000
|
|
TO NUMBER OR EXTRA RIGHT PARENTHESIS 00604500
|
|
605 ACTUALPARAPART ACTUAL AND FORMAL ARRAYS DO NOT HAVE SAME NUMBER OF 00605000
|
|
DIMENSIONS 00605500
|
|
607 ACTUALPARAPART NO ACTUAL PARAMETERS MAY START WITH A QUANTITY OF 00607000
|
|
THIS TYPE 00607500
|
|
608 FORSTMT IMPROPER FOR INDEX VARIABLE 00608000
|
|
609 FORSTMT MISSING UNTIL OR WHILE IN STEP ELEMENT 00609000
|
|
610 FORSTMT MISSING DO IN FOR CLAUSE 00610000
|
|
611 FORSTMT MISSING LEFT ARROW FOLLOWING INDEX VARIABLE 00611000
|
|
612 LABELR MISSING COLON 00612000
|
|
613 LABELR THE LABEL WAS NOT DECLARED IN THIS BLOCK 00613000
|
|
614 LABELR THE LABEL HAS ALREADY OCCURED 00614000
|
|
615 GOSTMT LABEL OR CASE DOES NOT FOLLOW GO TO 00615000
|
|
616 GOSTMT IMPROPER GO TO WITH CASE 00616000
|
|
617 GOSTMT MISSING "(" 00617000
|
|
618 GOSTMT ONLY A LABEL MAY APPEAR IN THE LIST 00618000
|
|
619 GOSTMT MISSING ")" 00619000
|
|
620 ACTUALPARAPART ACTUAL PARAMETER IS INTRINSIC PROCEDURE (NOT ERROR) 00620000
|
|
621 ACTUALPARAPART TEMPORARY ABSENCE OF CODE FOR THIS (NOT ERROR) 00621000
|
|
622 ACTUALPARAPART THE ACTUAL AND FORMAL PARAMETERS DO NOT AGREE AS TO 00622000
|
|
TYPE 00622500
|
|
623 ACTUALPARAPART ILLEGAL PARAMETER DELIMETER 00623000
|
|
624 COMPOUNDTAIL MISSING SEMICOLON OR END. 00624000
|
|
625 COMPOUNDTAIL EXTRA END. 00625000
|
|
626 COMPOUNDTAIL MISSING END. 00626000
|
|
628 QALGORITHM THIS ALGORITHM IS NOT VALID FOR THIS QUEUE 00628000
|
|
629 QALGORITHM MISSING ACTUAL PARAMETER PART IN EXPLICIT CALL 00629000
|
|
630 QALGORITHM FIRST ACTUAL PARAMETER OF QALGORITHM IS ILLEGAL 00630000
|
|
631 FORSTMT ILLEGAL FOR CLAUSE 00631000
|
|
632 FORSTMT ILLEGAL EXPRESSION TYPE 00632000
|
|
633 QALGORITHM TOO MANY ACTUAL PARAMETERS 00633000
|
|
634 QALGORITHM ILLEGAL PARAMETER DELIMETER (IN THE BROAD SENSE) 00634000
|
|
635 QALGORITHM TOO MANY ACTUAL PARAMETERS OR SOMETHING 00635000
|
|
636 REPLACESTMT POINTER IDENTIFIER REQUIRED. 00636000
|
|
637 REPLACESTMT MISSING KEY WORD "BY". 00637000
|
|
638 REPLACESTMT SIMPLE ARITHMETIC VARIABLE REQUIRED. 00638000
|
|
639 REPLACESTMT MISSING WHILE OR UNTIL CLAUSE. 00639000
|
|
640 REPLACESTMT RELATIONAL OPERATOR OR IN EXPECTED. 00640000
|
|
641 REPLACESTMT SET IDENTIFIER REQUIRED. 00641000
|
|
642 REPLACESTMT PICTURE IDENTIFIER REQUIRED. 00642000
|
|
643 SCANSTMT POINTER IDENTIFIER REQUIRED. 00643000
|
|
644 SCANSTMT SIMPLE ARITHMETIC VARIABLE REQUIRED. 00644000
|
|
645 SCANSTMT CONDITION MISSING. 00645000
|
|
646 SCANSTMT RELATIONAL OPERATOR OR IN EXPECTED. 00646000
|
|
647 SCANSTMT SET IDENTIFIER REQUIRED. 00647000
|
|
648 QALGORITHM BUSY AND SIZE MUST BE USED AS PRIMARIES 00648000
|
|
649 QALGORITHM INCORRECT USAGE OF UNTYPED QUEUE ALGORITHM 00649000
|
|
651 REPLACESTMT NUMBER OF CHARACTERS IN THE STRING EXCEEDS LENGTH OF 00650000
|
|
THE ARRAY. 00651000
|
|
652 REPLACESTMT MISSING LEFT BRACKET. 00652000
|
|
653 REPLACESTMT SHOULD BE A ROW 00653000
|
|
654 REPLACESTMT POINTER CANNOT BE UPDATED BY SUBCRIPTED VARIABLE. 00654000
|
|
655 REPLACESTMT MUST BE A PICTURE ID. 00655000
|
|
656 FILLSTMT TOO MANY WORDS OF INITIAL VALUES. 00656000
|
|
657 FILLSTMT INITIAL VALUE MUST BE NUMBER OR STRING. 00657000
|
|
658 FILLSTMT MISSING RIGHT PARENTHESIS. 00658000
|
|
659 FILLSTMT ARRAY ROW REQUIRED. 00659000
|
|
660 FILLSTMT MISSING "WITH". 00660000
|
|
661 SWAPSTMT MISSING LEFT PARENTHESIS. 00661000
|
|
662 SWAPSTMT ARRAYID OR SUBARRAY DESIGNATOR REQUIRED. 00662000
|
|
663 SWAPSTMT MISSING COMMA. 00663000
|
|
664 SWAPSTMT MISSING RIGHT PARENTHESIS. 00664000
|
|
665 SWAPSTMT NUMBER OF UNSPECIFIED SUBSCRIPTS MUST AGREE. 00665000
|
|
666 THRUSTMT MISSING DO IN A THRU CLAUSE 00666000
|
|
667 FORSTMT MISSING UNTIL FOLLOWING A BY ELEMENT 00667000
|
|
668 FORSTMT CONTROL VARIABLE IS NOT SIMPLE IN BY ELEMENT LIST 00668000
|
|
669 QALGORITHM BUZZ IS UNTYPED 00669000
|
|
670 EVENTINTRINSIC THE PARAMETER MUST BE AN EVENT DESIGNATOR 00670000
|
|
671 EVENTINTRINSIC THE PARAMETER MUST BE AN INTERRUPT ID 00671000
|
|
672 EVENTINTRINSIC MISSING LEFT OR RIGHT PARENTHESIS 00672000
|
|
680 EVENTINTRINSIC SECONDWORD EXPECTS EVENT OR DP PARAMETER 00680000
|
|
700 IDLIST THIS ID ALREADY DECLARED IN THIS BLOCK. 00700000
|
|
701 MERRIMAC PARENTHESES PROBLEM. 00701000
|
|
702 MERRIMAC INCORRECT TYPE OF PROCEDURE OR MONITORED ITEM. 00702000
|
|
703 FIELDPART INCORRECT "FIELD PART". 00703000
|
|
704 FIELDER INCORRECT "FIELD" - VALUE OR SYNTAX. 00704000
|
|
705 LAYOUTDEC INCORRECT "LAYOUT PART" 00705000
|
|
706 LAYOUTDEC "FIELD VALUE" IS NOT UNSIGNED INTEGER 00706000
|
|
707 LAYOUTDEC ILLEGAL LAYOUT PART 00707000
|
|
708 PUTOGETHER TOTAL ALPHA LONGER THAN 2047 CHARACTERS 00708000
|
|
709 00709000
|
|
710 DEFINEDEC MISSING EQUAL 00710000
|
|
711 QUEUEDEC ILLEGAL MULTIPLE USE 0F IDENTIFIER 00711000
|
|
712 QUEUEDEC MISSING ENTRY DESCRIPTION 00712000
|
|
713 QUEUEDEC MULTIPLE USE 0F SAME ALGORITHM ID IN QUEUE DEC 00713000
|
|
714 QUEUEDEC INCORRECT USAGE OF STANDARD QUEUE ALGORITHM 00714000
|
|
715 QUEUEDEC THIS CONSTRUCT NOT CODED AS YET (NOT ERROR) 00715000
|
|
717 ARRAYDEC THIS CONSTRUCT NOT CODED AS YET (NOT ERROR) 00717000
|
|
718 READONLYARRAYDEC ARRAY WORD MISSING. 00718000
|
|
719 READONLYARRAYDEC IDENTIFIER DECLARED BEFORE. 00719000
|
|
720 INITIALIZEARRAY MISSING LEFT PARANTHESIS. 00720000
|
|
721 INITIALIZEARRAY NOT A NUMBER OR A LOGICAL VALUE. 00721000
|
|
722 INITIALIZEARRAY TOO BIG AN INTEGER. 00722000
|
|
723 INITIALIZEARRAY MISSING RIGHT PARANTHESIS. 00723000
|
|
724 ARRAYDEC IDENTIFIER DECLARED BEFORE. 00724000
|
|
725 ARRAYDEC MORE THAN ONE IDENTIFIER DECLARED BEFORE +. 00725000
|
|
726 ARRAYDEC MISSING LEFT BRACKET. 00726000
|
|
727 ARRAYDEC IF YOU KNOW WHAT IT MEANS IMPLEMENT IT. 00727000
|
|
728 ARRAYDEC MISSING RIGHT BRACKET. 00728000
|
|
729 ARRAYDEC MISSING SEMICOLON. 00729000
|
|
730 PROCEDUREDEC PROCEDURE TYPE DIFFERS FROM FORWARD DECLARATION. 00730000
|
|
731 PROCEDUREDEC PROCEDURE IDENTIFIER ALREADY USED IN THIS BLOCK. 00731000
|
|
732 PROCEDUREDEC A PARAMETER WAS NOT SPECIFIED. 00732000
|
|
733 PROCEDUREDEC NUMBER OF PARAMETERS DIFFERS FROM FORWARD DEC. 00733000
|
|
734 PROCEDUREDEC SPECTEICATION DIFFERS FROM FORWARD DECLARATION. 00734000
|
|
735 PROCEDUREDEC THIS PROCEDURE WAS ALREAOY DECLARED FORWARD. 00735000
|
|
736 PROCEDUREDEC MISSING ";" OR "(" AFTER PROCEDURE IDENTIFIER. 00736000
|
|
737 FMLPARAPART ILLEGAL PAPAMETER DELIMITER. 00737000
|
|
738 FMLPARAPART MISSING "; " AFTER FORMAL PARAMETER LIST. 00738000
|
|
739 FMLPARAPART NOT VALID PARAMETER IDENTIFIER. 00739000
|
|
740 FMLPARAPART MISSING ";" IN SPECIFICATION PART. 00740000
|
|
741 FMLPARAPART ILLEGAL SPECIFIER OR COMBINATION OF SPECIFIERS. 00741000
|
|
742 FMLPARAPART TOO MANY ":"S. 00742000
|
|
743 FMLPARAPART ID NOT FORMAL, OR ALREADY SPECIFIED. 00743000
|
|
744 FMLPARAPART MISSING "[" IN ARRAY SPECIFICATION. 00744000
|
|
745 FMLPARAPART ILLEGAL BOUND SPECIFIER. 00745000
|
|
746 FMLPARAPART MISSING "]" IN ARRAY SPECIFICATION. 00746000
|
|
747 DEFINEDEC FUNNY PARAMETER. 00747000
|
|
748 DEFINEDEC MORE THAN 9 DEFINE PARAMETERS. 00748000
|
|
749 DEFINEDEC MISSING "(". 00749000
|
|
750 QUEUEDEC MORE THAN 32767 ITEMS 00750000
|
|
751 QUEUEDEC INCORRECT SYNTAX FOR LOCKING SPECIFICATION 00751000
|
|
752 QUEUEDEC MISSING RIGHT BRACKET IN SIZE SPECIFICATION 00752000
|
|
753 QUEUEDEC ILLEGAL SYNTAX FOR QUEUE ARRAY BOUND 00753000
|
|
756 PICTUREDEC ILLEGAL REPEAT PART VALUE. 00756000
|
|
757 PICTUREDEC MISSING ")" IN REPEAT PART. 00757000
|
|
758 PICTUREDEC PICTURE ID ALREADY USED IN THIS BLOCK. 00758000
|
|
759 PICTUREDEC MISSING "(" AFTER PICTURE ID. 00759000
|
|
760 PICTUREDEC ILLEGAL PICTURE CHARACTER. 00760000
|
|
783 IDLIST EVENT MAY NOT HAVE INITIAL VALUE 00783000
|
|
784 FMLPARAPART THIS ID HAS APPEARRED IN THE VALUE PART. 00784000
|
|
785 INTERRUPTDEC MISSING EVENT DESIGNATOR 00785000
|
|
786 INTERRUPTDE C MISSING "ON" OR COLON 00786000
|
|
787 INTERRUPTDEC MISSING COMMA 00787000
|
|
788 PROCEDUREDEC PROCEDURE FOR SEPARATED COMPILING CANNOT BE EXTERNAL.00788000
|
|
789 PROCEDUREDEC PROCEDURE FOR SEPARATED COMPILING CANNOT BE FORWARD. 00789000
|
|
790 PROCEDUREDEC GLOBAL PROCEDURE SHOULDNT HAVE A BODY. 00790000
|
|
791 PROCEDUREDEC TOO MANY GLOBAL DECLARATIONS. 00791000
|
|
800 DECLARATIONS MISSING ";" AFTER DECLARATION. 00800000
|
|
801 DECLARATIONS ILLEGAL COMBINATION OF DECLARATORS. 00801000
|
|
802 DECLARATIONS "SAVE" MAY NOT BE USED THIS WAY. 00802000
|
|
803 DECLARATIONS "OWN" MAY NOT BE USED THIS WAY. 00803000
|
|
804 STATEMENT UNRECOGNIZABLE STATEMENT STARTER. 00804000
|
|
805 STATEMENT DECLARATIONS SHOULD PRECEDE STATEMENTS. 00805000
|
|
806 STATEMENT MISSING "UNTIL" IN DO STATEMENT. 00806000
|
|
807 STATEMENT MISSING "DO" IN WHILE STATEMENT. 00807000
|
|
808 PRIMARY NO PRIMARY MAY START THIS WAY. 00808000
|
|
809 PRIMARY MISSING ")". 00809000
|
|
810 PRIMARY SOMEBODY GOOFED, SOMEWHERE. 00810000
|
|
811 PRIMARY ILLEGAL TRANSFER TYPE. 00811000
|
|
812 PRIMARY MISSING "(". 00812000
|
|
813 PRIMARY ILLEGAL EXPR TYPE IN TRANSFER FUNCTION. 00813000
|
|
814 PRIMARY ILLEGAL SECOND EXPRESSION IN TRANSFER FUNCTION. 00814000
|
|
815 PRIMARY TIMER AND XSIGN MAY NOT BE READ/ MISSING "+". 00815000
|
|
816 PRIMARY WRONG TYPE EXPRESSION IN REGISTER ASSIGNMENT. 00816000
|
|
817 BOOPRIM NO PRIMARY STARTS LIKE THIS. 00817000
|
|
818 BOOPRIM SOMEBODY GOOFED. 00818000
|
|
819 BOOPRIM MISSING ")". 00819000
|
|
820 BOOPRIM MISSING "(". 00820000
|
|
821 BOOPRIM ILLEGAL EXPRESSION TYPE IN TRANSFER FUNCTION. 00821000
|
|
822 PTRPRIM COMPILER ERROR. 00822000
|
|
823 PTRPRIM MISSING ")". 00823000
|
|
824 PTRPRIM CASE EXPRESSION NOT POINTER TYPE. 00824000
|
|
825 PTRPRIM POINTER PRIMARY CANNOT START WITH THIS. 00825000
|
|
826 MAKEPOINTER MISSING "(" 00826000
|
|
827 MAKEPOINTER MUST BE ARRAY IDENTIFIER. 00827000
|
|
828 MAKEPOINTER MUST BE ARRAY ROW. 00828000
|
|
829 MAKEPOINTER MUST BE ONE-DIMENSIONAL ARRAY. 00829000
|
|
830 MAKEPOINTER MISSING ")" 00830000
|
|
831 SETPRIM MISSING RIGHT PARENTHESIS 00831000
|
|
833 MAKEPOINTER CHARACTER SIZE MUST BE LITERAL 4, 6 OR 8. 00833000
|
|
834 BOOPRIM EXPRESSION BEFORE "IN" MUST BE POINTER OR SINGLE 00834000
|
|
835 BOOPRIM SET IDENTIFIER REQUIRED AFTER "IN". 00835000
|
|
836 STATEMENT HAPPENED AND AVAILABLE ARE BOOLEAN INTRINSICS 00836000
|
|
837 BOOPRIM THIS EVENT INTRINSIC IS UNTYPED 00837000
|
|
838 DECLARATIONS NOTHING BUT PROCEDURES CAN BE SEPARATELY COMPILED. 00838000
|
|
839 DECLARATIONS NO SAVE PROCEDURE CAN BE SEPARATELY COMPILED 00839000
|
|
840 DECLARATIONS NO "OWN" DEC IS PERMITTED IN SEPAR. COMPILATION 00840000
|
|
841 DECLARATIONS NO "VALUE" DEC IS PERMITTED IN SEPAR. COMPILATION 00841000
|
|
850 GLOBALDECLARATIONS ILLEGAL GLOBAL DECLARATION FOR SEPARATED COMPILE00850000
|
|
851 GLOBALDECLARATIONS MISSING SEMICOLON ON GLOBAL DECLARATION. 00851000
|
|
852 GLOBALDECLARATIONS ARRAY ID ALREADY DECLARED OR MISSING. 00852000
|
|
853 GLOBALDECLARATIONS MISSING "[" IN ARRAY DECLARATION. 00853000
|
|
854 GLOBALDECLARATIONS ILLEGAL BOUND SPECIFIER. 00854000
|
|
855 GLOBALDECLARATIONS MISSING "]" IN ARRAY DECLARATION. 00855000
|
|
856 GLOBALDECLARATIONS GLOBAL ID ALREADY DECLARED OR MISSING. 00856000
|
|
857 GLOBALDECLARATIONS TOO MANY GLOBAL DECLARATIONS. 00857000
|
|
858 SEPARATEDCOMPILING MISSING SEMICOLON AFTER LAST "END" OF PROCEDURE.00858000
|
|
900 QUEUEDEC MISSING SPECIFICATION IN FORMAL ITEM LIST. 00900000
|
|
921 GENMICRO REPEAT } 65535. 00921000
|
|
922 PICTUREDEC EXTRANEOUS ( IN PICTURE (INVALID REPEAT PART). 00922000
|
|
923 REPLACESTMT MISSING ")". 00923000
|
|
924 PICTUREGEN MISSING ",". 00924000
|
|
925 PICTUREGEN MISSING EXPRESSION. 00925000
|
|
926 PICTUREGEN MISSING ")". 00926000
|
|
COMMENT * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 10003000
|
|
NON-PROCEDURAL DECLARATIONS 10004000
|
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;10005000
|
|
BEGIN 10006000
|
|
INTEGER ERRORCOUNT; % NUMBER OF ERROR MESSAGES GIVEN. 10007000
|
|
BOOLEAN DONSBUG; % PRT 26 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%10008000
|
|
REAL PRT27; COMMENT SEQUENCE NUMBER%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%; 10008100
|
|
FILE IN CARD (5,10); % CARD INPUT 10009000
|
|
FILE IN TAPE DISK SERIAL (2,10,150); 10010000
|
|
SAVE FILE NEWTAPE DISK SERIAL [20:3000] 10011000
|
|
(2,10,150,SAVE 10);% NEW SRCE10012000
|
|
SAVE FILE CODE DISK [20:1250 ] (4,30,SAVE 100);%FINAL 10013000
|
|
FILE TEMP DISK SERIAL[20:200]"TEMP""CODE"(2,30,150,SAVE 100); 10014000
|
|
FILE LINE 4 "6500MCP" "LISTING" (3,17); 10015000
|
|
SAVE FILE INFOUT DISK SERIAL[4:128]"MCP""GLOBALS"(2,256,SAVE 10); 10015100
|
|
FILE INFIN DISK SERIAL "MCP""GLOBALS"(2,256); 10015200
|
|
FILE DECK "ESPOL""DECK" (2,20,SAVE 10); 10015900
|
|
% SCANNER VARIABLES 10016000
|
|
INTEGER NCR, % POINTS TO NEXT CHAR TO BE SCANNED. 10017000
|
|
FCR, % POINTS TO FIRST CHAR CURRENT ID OR NR. 10018000
|
|
LCR, % POINTS TO SEQ NR CURRENT RECORD, 10019000
|
|
CLCR, % POINTS TO SEQ NR CURRENT CARD RECORD. 10020000
|
|
TLCR, % POINTS TO SEQ NR CURRENT TAPE RECORD. 10021000
|
|
CONTEXT, % USED BY THE COMPILER TO TELL THE SCANNER 10022000
|
|
% WHAT TO DO: 10023000
|
|
%0=DECLARATIONS (GLOBAL IDS UNKNOWN) 10024000
|
|
%1=SPECIFICATIONS 10025000
|
|
%2=STATEMENTS & EXPRESSIONS 10026000
|
|
%3=END COMMENTARY 10027000
|
|
SCRAM, % SCRAMBLE INDEX OF LAST THING SEEN. 10028000
|
|
COUNT, % SIZE OF LAST THING SCANNED. 10029000
|
|
I, % SCAN POINTER FOR CURRENT ITEM. 10030000
|
|
NXTELBT, % NEXT AVAILABLE WORD IN ELBAT. 10031000
|
|
ELCLASS, % ELBAT[I].CLASS 10032000
|
|
RESULT, % WHAT SCAN FOUND OR IS TO LOOK FOR. 10033000
|
|
LASTUSED, % REMEMBERS WHERE THE LAST RECORD COME FROM10034000
|
|
%1=CARD (ONLY) 10035000
|
|
%2=CARD (INSERT WITH TAPE) 10036000
|
|
%3=CARD PATCHING TAPE 10037000
|
|
%4=TAPE WITH CARD WAITING. 10038000
|
|
%5=TAPE-RAN OUT OF CARDS. 10039000
|
|
% >5 IS INFO INDEX OF DEFINED STUFF. 10040000
|
|
CARDCOUNT, % JUST WHAT IT SAYS. 10041000
|
|
SCANCOUNT, % NUMBER OF CALLS ON TABLE 10042000
|
|
DEFINECTR, % LEVEL OF DEFINE DFCL NESTING. 10043000
|
|
DEFINEINDEX, % TOP OF DEFINEARRAY. 10044000
|
|
TCOUNT, % PREVIDUS COUNT, SOMETIMES. 10045000
|
|
LASTSEQUENCE; % ADDRESS OF LAST SEQUENCE NUMBER SEEN. 10046000
|
|
% +1 IS VOID SEQ NR. 10047000
|
|
% +2 IS ERROR SEQ NR. 10048000
|
|
REAL C, % VALUE OF LAST CONSTANT. 10049000
|
|
T, % TEMP FOR NUMBER CONVERSION. 10050000
|
|
THI, 10051000
|
|
TLO, 10052000
|
|
NHI, 10053000
|
|
NLO, 10054000
|
|
SPEC, % "SPECIAL" WORD FOR CURRENT CHARACTER 10055000
|
|
SEQNUMBER, % CURRENT SEQUENCE NUMBER. 10056000
|
|
VOIDNUMBER, % VOID SEQUENCE NUMBER. 10057000
|
|
ERRSEQNUMBER; % ERROR SEQUENCE NUMBER. 10058000
|
|
ARRAY SPECIAL[0:63], % SPECIAL-CHARACTER INFO. 10059000
|
|
INFO[0:127,0:255], % ALL WE KNOW ABOUT EVERYTHING 10060000
|
|
ADDL[0:127,0:255], % IS IN INFO AND ADDL 10061000
|
|
STACKHEAD[0:124], % ASSORTED LIST HEADS. 10062000
|
|
ELBAT[0:75]; % THE WINDOW BETWEEN THE SCANNER & COMPILER10063000
|
|
BOOLEAN LISTOG,SEQ, % SUNDRY OUTPUT TOGGLES 10064000
|
|
DECKTOG, 10064100
|
|
VOIDING, % --AND INPUT TYPES, TOO. 10065000
|
|
PRTOG,RESEQTOG, 10066000
|
|
SEPARATOG, % SEPARATED COMPILATION OF PROCEDURES. 10066100
|
|
% <0: AVAILABLE FOR SETTING BY $-CARD 10066101
|
|
% =2: GLOBAL DECLARATION TIME 10066102
|
|
% =1: SEPARATED PROCEDURE COMPILING TIME 10066103
|
|
% =0: REGULAR COMPILING 10066104
|
|
% =4: INSIDE SEPARATED PROCEDURE COMPILING 10066105
|
|
SVINFOTOG, % INFO & ADDL TO BE SAVED ON CODE FILE 10066200
|
|
% <0: AVAILABLE FOR SETTING BY $-CARD 10066201
|
|
% =0: RESET, INFO & ADDL NOT SAVED GENERALY10066202
|
|
% =1: SET, INFO & ADDL SAVED UNCONDITIONAL 10066203
|
|
DEBUGTOG, 10067000
|
|
DUMPTOG, 10068000
|
|
NOJUMPTOG, 10068500
|
|
ENDTOG, 10069000
|
|
INFOTOG,SAVETOG, 10069100
|
|
LISTING, 10069200
|
|
POOLTOG, 10069300
|
|
NEWTOG; 10070000
|
|
ALPHA Q; % ACCUM[1] OF LAST ID-TYPE THING. 10071000
|
|
INTEGER ACCUMSTART, % ABS ADDRESS OF ACCUM[1].[18:6] 10072000
|
|
ACCUMINX, % ABS ADDRESS OF END OF ACCUMED BLOB 10073000
|
|
BUMPCHAR, % CONSTANT 32768 , @100000 10074000
|
|
BUMPWORD; % CONSTANT 229375, @677777 10075000
|
|
INTEGER CSZ; COMMENT STRING CHARACTER SIZE; 10075100
|
|
INTEGER MAXCSZ; COMMENT MAX STRING CHAR SIZE IN CURRENT STRING; 10075200
|
|
BOOLEAN LEFTY; COMMENT TRUE IFF STRING IS LEFT JUSTIFIED; 10075300
|
|
BOOLEAN LITERALS; % TO KEEP PEOPLE HONEST ON IN LINE FIELDS, ETC. 10075350
|
|
DEFINE DEFAULTSIZE = 6#; %DEFAULT STRING SIZE -- NOT ALL REFERENCES****10075400
|
|
SAVE ARRAY ACCUM[0:10]; % WHAT THE SCANNER FOUND 10076000
|
|
ALPHA CHR; % USUALLY THE NEXT CHARACTER TO BE SCANNED 10077000
|
|
DEFINE STEPNCR=NCR~(IF NCR<BUMPWORD THEN BUMPCHAR ELSE -BUMPWORD)+NCR#;10078000
|
|
% NCR IS AN ABSOLUTE ADDRESS WITH THE 10079000
|
|
% CHARACTER POINTER IN 30:3. STEPNCR BUMPS 10080000
|
|
% NCR BY ONE CHAR. 10081000
|
|
DEFINE BUMPNCR= IF STEPNCR=LCR THEN NCR~READACARD#; 10082000
|
|
% IN ADDITION, BUMPNCR SWITCHES TO A NEW 10083000
|
|
% CARD WHEN NECESSARY 10084000
|
|
INTEGER RCOUNT, % USUALLY 63-COUNT. 10085000
|
|
GTI1, % JUNK CELL, USUALLY TO INTEGERIZE THINGS. 10086000
|
|
L, % SYLLABLE COUNTER, USED BY THE EMITTERS: 10087000
|
|
% INCLUDED HERE BECAUSE IT GETS ON LISTING 10088000
|
|
SEGNO, % CURRENT PROGRAM-SEGMENT NUMBER. 10089000
|
|
RESEQNR, % NEXT SEQ NR WHEN BESEQUENCING. 10090000
|
|
RESEQINC; % INCREMENT WHEN RESEQUENCING. 10091000
|
|
SAVE ARRAY CBUFF, % CARD IMAGE FROM CARD READER. 10092000
|
|
TBUFF[0:9]; % CARD IMAGE FROM TAPE FILE. 10093000
|
|
ARRAY 10094000
|
|
STACKMASK, % MAX DISP IN [18:15], LL IN[33:15] 10095000
|
|
STACKTOP, % CURRENT ASSIGNMENT FOR EACH LEVEL 10096000
|
|
MAXSTACK[0:31], % MAX STACK SIZE FOR EACH ADDR LEVEL 10097000
|
|
LBUFF[0:16]; % FOR BUILDING PRINT IMAGES. 10098000
|
|
DEFINE MAXDISPF = [18:15]#, 10099000
|
|
LLMASKF = [33:15]#; 10100000
|
|
INTEGER TIME1, TIME2; % THE TIME WHEN WE BEGAN 10101000
|
|
INTEGER SETSIZE; % NUMBER OF WORDS IN SET 10101100
|
|
REAL FIRSTINFO; 10101200
|
|
% THESE ARE THE FIELDS IN ELBAT WORDS, INFO ENTRIES, ETC. 10102000
|
|
DEFINE MONF =[ 1: 1]# % =1 IF MONITORED 10103000
|
|
,ADDRESS =[ 2:19]# % 10104000
|
|
, LVEL =[ 3: 6]# % ADDRESSING OR LEXICOGRAPHIC LEVEL 10105000
|
|
, DISP =[ 9:12]# % DISPLACEMENT WITHIN LEVEL 10106000
|
|
,CLASS =[21: 7]# % 10107000
|
|
,RSVD =[28: 1]# % =1 IF RESERVED NAME 10108000
|
|
,TYPE =[29: 4]# % 10109000
|
|
,LINK =[33:15]# % POINTER TO ADDL OR INFO 10114000
|
|
, LINKR =[33: 7]# % ROW 10115000
|
|
, LINKC =[40: 8]# % COLUMN 10116000
|
|
,EBCDF =[32: 8]# % EBCDIC REPRESENTATION OF CHARACTER-- 10116100
|
|
,ASCF =[ 1: 8]# % ASCII -- APPEAR IN "SPECIAL" ONLY 10116200
|
|
,CONL =[ 3:15]# % CONGRUENCY LINK 10117000
|
|
,CONR =[ 3: 7]# % -- ROW 10118000
|
|
,CONC =[10:8]# % -- COLUMN 10119000
|
|
,CHRCNT =[18: 6]# 10120000
|
|
,ALFA =[24:24]# 10121000
|
|
,ALFACNT =[18:30]# 10122000
|
|
,FIRSTCHR =[24: 6]# 10123000
|
|
,CF = 33:15 # 10124000
|
|
,FF = 18:15 # 10125000
|
|
,NOPAR =[40:8]# % NUMBER OF PARAMETERS FOR A PROCEDURE 10126000
|
|
,NODIM =[40:8]# % NUMBER OF DIMENSIONS FOR AN ARRAY 10127000
|
|
,PARTALFA= [18:30]# % CHRCNT PLUS ALFA 10128000
|
|
,ALGNOF = CLASS# % FIELD FOR NO OF ALGORITHMS 10129000
|
|
,QLINK = ADDRESS# % IN ITEM ADDL,POINTING TO Q INFO10130000
|
|
,ITMNOF =LINKR# %FIELD FOR NUMBER OF ITEMS 10131000
|
|
,SIZEF =LINKC# %FIELD FOR SIZE OF ENTRY 10131300
|
|
,ALGNO = [33:13]# %FIELD FOR ALGORITHM KEY 10132000
|
|
,PARADESC= [46:2]# %FIELD FOR PARAMETER DESCRIPIION 10133000
|
|
,QINDEXF =[2:10]# 10133100
|
|
,ITMQAINDXF =[12:9]# 10133150
|
|
,STANDF = ADDRESS# % =0 STANDARD,=1 NON STANDARD ALG10133500
|
|
,ALLBUTLINK = [1:32]# %ALL ELBAT EXCEPT LINK 10133520
|
|
,KIND = [40:8]# %WHICH EVENT INTRINSIC 10133540
|
|
; 10134000
|
|
DEFINE BOUND (BOUND1) = 10135000
|
|
IF (BOUND1).CLASS<REGID THEN IF (BOUND1).CLASS>PTRID THEN 10136000
|
|
GIT(TAKE(BOUND1)).NODIM ELSE 0 ELSE 0#; 10136100
|
|
COMMENT THESE ARE THE FIELDS IN ADDL ENTRIES THAT ARE USED BY DEFINE, 10137000
|
|
FIELD AND LAYOUT. ;10138000
|
|
DEFINE LAYINIT =[ 7: 1]# % IF = 1, NEXT ADDL ENTRY IS INITIAL VALUE 10139000
|
|
,LAYCODE =[ 8: 8]# % FIELDV OR TAGV (LAYOUT ONLY) 10140000
|
|
,LAYAEXP =[16:16]# % EXP FOR STARTING BIT 10141000
|
|
, LAYLTA=[16: 1]# % IF = 1 LAYLNA IS THE LITERAL OTHERWISE 10142000
|
|
% LAYLNA POINTS TO TEXT FOR ARITH EXP 10143000
|
|
, LAYLNA=[17:15]# 10144000
|
|
,LAYBEXP =[32:16]# % EXP FOR NUMBER OF BITS 10145000
|
|
, LAYLTB=[32: 1]# % SEE LAYLTA 10146000
|
|
, LAYLNB=[33:15]# 10147000
|
|
,STARTBIT =[ 9: 6]#%STARTING BIT FOR BIT OPERATORS - INFO.DISP 10148000
|
|
,NOOFBITS =[15: 6]#%NUMBER OF BITS FOR BIT OPERATORS - INFO.DISP10149000
|
|
; 10150000
|
|
REAL KLASSF, % CLASS IN LOW ORDER 7 BITS 10151000
|
|
TYPEF, % TYPE IN LOW ORDER 3 BITS 10152000
|
|
ADDRSF; % ADDRESS IN LOW ORDER 19 BITS 10153000
|
|
BOOLEAN FORMALF, % FML BIT OF ELBAT WORD 10154000
|
|
ITEMF, % QBIT OF ELBAT WORD 10154100
|
|
VONF; % VAL BIT OF ELBAT WORD 10155000
|
|
SAVE ARRAY DEFINEARRAY [0:47]; % FOR SCANNING DEFINDIDS 10156000
|
|
BOOLEAN MACRO; COMMENT - FALSE IF SCANNING ACTUAL SYMBOL LIST.; 10157000
|
|
ARRAY DEFINFO [0:89]; % DEFINE PARAMETER IDS ETC. NO. IDS{9 10158000
|
|
% ALPHA TEXT TO ADDL VARIABLES 10159000
|
|
INTEGER NEXTCHAR, % NEXT AVAILABLE CHAR IN ADDL 10160000
|
|
% 30:15 ADDL INDEX 10161000
|
|
% 45: 3 CHARACTER WITHIN ADDL INDEX 10162000
|
|
REMCOUNT, % NUMBER OF 6-BIT CHARACTER POSITIONS IN AN ADDL10163000
|
|
% ROW 10164000
|
|
CHARCOUNT; % TOTAL NUMBER OF CHARACTERS INSERTED IN ADDL 10165000
|
|
% BY A GIVEN CALL ON TEXT. 10166000
|
|
BOOLEAN BADSTUFF; % ALPHA LONGER THAN 2047 CHARACTERS (TOTAL) 10167000
|
|
COMMENT DEFINES FOR PARAMETERS TO TEXT 10168000
|
|
DEFINEV ;10169000
|
|
DEFINE FIELDEXPA = DEFINEV + 1#, 10170000
|
|
LAYEXPA = FIELDEXPA #, 10171000
|
|
FIELDEXPB = DEFINEV + 2#, 10172000
|
|
LAYEXPB = DEFINEV + 3#; 10173000
|
|
INTEGER N; % SCRATCH 10174000
|
|
REAL GT1,GT2,GT3,GT4,GT5; % SCRATCH 10175000
|
|
REAL QGT1; %USED IN QUEUEDEC TO REPLACE GT1 10175500
|
|
BOOLEAN TB1; % SCRATCH 10176000
|
|
BOOLEAN ERRORTOG; 10177000
|
|
BOOLEAN ARRAYDECTOG; %ARRAYDEC IN BLOCK 10177400
|
|
DEFINE BLOCKEXITPCW=10#; %PCW FOR BLOCKEXIT IN (0,12) 10177600
|
|
DEFINE GOTOSOLVERPCW=11#; % PCW FOR GOTOSOLVER IN (0,13) 10177700
|
|
BOOLEAN DONE, SAVED; 10178000
|
|
BOOLEAN FLAGS; 10179000
|
|
DEFINE DPTOG = FLAGS.[45:1]#, 10179100
|
|
STRINGSOURCEFLAG = FLAGS.[46:1]#, 10179110
|
|
DEFINESFLAG = FLAGS.[44:1]#, 10179120
|
|
THIFLAG = FLAGS.[46:1]#, 10179200
|
|
TLOFLAG = FLAGS.[47:1]#; 10179300
|
|
DEFINE WRITELBUFF=WRITE(LINE[DBL],17,LBUFF[*])#; 10180000
|
|
INTEGER DEFINEADDR; % ADDRESS OF DEFINEARRAY[0] 10181000
|
|
ARRAY TEN[0:68]; % POWERS OF TEN 10182000
|
|
DEFINE BUMPL= L~L+3#; 10183000
|
|
DEFINE INDXCHK=IF LASTINDEX=L-1 THEN IF GET(L~L-1)=NXLV THEN EMIT(INDX)10183300
|
|
ELSE L~L+1 ELSE#; 10183500
|
|
COMMENT VARIABLE SOMETIMES ISSUES NXLV RATHER THAN INDX; 10183510
|
|
DEFINE STUFF = EMIT(STFF)#; 10183540
|
|
DEFINE ANEVENT = EVENTID AND (GT1~ELBAT[I]).TYPE! 10183560
|
|
FORMALNAMEQ#; 10183580
|
|
ARRAY EDOC[0:31,0:255]; % CODE ACCUMULATED FOR CURRENT SEG 10184000
|
|
ARRAY INZCODE[0:31,0:255]; COMMENT EDOC FOR "SAVE 1" PROCEDURES; 10184100
|
|
INTEGER SAVEL; COMMENT L FOR INZCODE; 10184200
|
|
INTEGER CURRENT, % CURRENT ADDRESSING LEVEL 10185000
|
|
STATE, 10186000
|
|
MAXDISP , % MAXIMUM DISPLACEMENT FOR CURRENT LEVEL 10187000
|
|
LLMASK; % INVERTED ADDRESSING-LEVEL, FOR VALC,ETC10188000
|
|
INTEGER MODE; 10189000
|
|
INTEGER CSTATE; 10190000
|
|
DEFINE S0 = 128#; % INITIAL SIZE OF D0 - STACK 10190050
|
|
%%%%%%%%%%%%%%%%%%%%%% FOR SEPARATED COMPILATION %%%%%%%%%%%%%%%%%%%%%%%10190100
|
|
FILE SEPF DISK SERIAL[20:300](2,30,150); 10190110
|
|
ARRAY SEPA[0:29] % SEPARATED COMPILING INFORMATION (2-WDS/LEVEL) 10190120
|
|
,SEPSTR[0:12] % INFORMATION STORAGE IN BETWEEN SEP. PROCEDURES10190130
|
|
,AY[0:29] % SRATCH ARRAY. 10190140
|
|
; 10190150
|
|
REAL GLOBLCNT % COUNT OF GLOBALS IN A SEPARATED COMPILATION 10190160
|
|
,GINFO % STARTING INFO INDEX OF GLOBALS 10190170
|
|
,GADDL % STARTING ADDL INDEX OF GLOBALS 10190180
|
|
,PCW % PCW WHICH JUST HAS BEEN EMITED BY "EMITPCW" 10190190
|
|
,SEPAX % CURRENT SEPA[*] INDEX 10190200
|
|
,SEPFX % CURRENT SEPF-RECORD INDEX 10190210
|
|
,TOTALSEGSIZE % TOTAL SEGMENT SIZE 10190213
|
|
,CORESIZE % THIS IS NOT FOR SEPARATED COMPILING ONLY 10190217
|
|
; 10190220
|
|
DEFINE ENTERSEPA(ENTERSEPA1,ENTERSEPA2,ENTERSEPA3) = 10190230
|
|
IF REAL(SEPARATOG)=4 THEN 10190240
|
|
IF ERRORCOUNT=0 THEN 10190250
|
|
BEGIN 10190260
|
|
SEPA[SEPAX ]~PCW&SEGNO[01:37:11]; 10190270
|
|
SEPA[SEPAX+1]~ENTERSEPA1&ENTERSEPA2[19:32:16]& 10190280
|
|
ENTERSEPA3[03:32:16]; 10190290
|
|
IF SEPAX~SEPAX+2}30 THEN 10190300
|
|
BEGIN 10190310
|
|
WRITE(SEPF,30,SEPA[*]); 10190320
|
|
SEPFX~SEPFX+15; 10190330
|
|
SEPAX~0; 10190340
|
|
END; 10190350
|
|
END#; 10190360
|
|
DEFINE DKADDR=TEMPADDR#; % TEMP DISK FILE ADDRESS 10190365
|
|
DEFINE SEPLEVEL=3#; % RUNNING LEVEL OF OUTER MOST BLOCK OF PROCEDURE10190380
|
|
FORMAT GFMT(X4,"GLOBAL=(02,0",A4,")"); 10190390
|
|
DEFINE GLOBALINDEX = IF PRTOG THEN WRITE(LINE[DBL],GFMT,O(GLOBLCNT))#;10190400
|
|
%%%%%%%%%%%%%%%%%%% END OF FOR SEPARATED COMPILATION %%%%%%%%%%%%%%%%%%%10190498
|
|
% 10190499
|
|
%%%%%%%%%%%%%%%%%%%%%%%% FOR EXTERNAL PROCEDURE %%%%%%%%%%%%%%%%%%%%%%%%10190600
|
|
FILE INFF DISK SERIAL[20:1500](2,30,150); % SAVE INFO FILE 10190610
|
|
ARRAY INFD[0:15,0:255] % SAVE INFO DIRECTORY 10190620
|
|
; 10190630
|
|
REAL STARTINFO % STARTINFO INFO INDEX OF THE PROGRAM 10190640
|
|
,STARTADDL % ARTINFO ADDL INDEX OF THE PROGRAM 10190650
|
|
,EXTRNLCNT % EXTERNAL PROCEDURE COUNT 10190660
|
|
,LASTEXT % INDEX OF INFO[*] OF THE LAST EXTERNAL PROC 10190661
|
|
,INFFX % RECORD INDEX OF INFF FILE 10190662
|
|
,INFDX % WORD INDEX OF INFO[*] 10190664
|
|
; 10190670
|
|
BOOLEAN SVINFO % INFO & ADDL TO BE SAVED FOR THIS CURRENT LEVEL10190680
|
|
,XTRNL % EXTERNAL PROCEDURE 10190682
|
|
; 10190690
|
|
%%%%%%%%%%%%%%%%%%%% END OF FOR EXTERNAL PROCEDURE %%%%%%%%%%%%%%%%%%%%%10190998
|
|
% 10190999
|
|
REAL COUNTQALG, % COUNT OF NO. OF NON STANDARD Q ALGORITMS ENCOUNT- 10191000
|
|
% ERED AT A GIVEN LEVEL. INITIALISED TO STARTNSQ AT 10192000
|
|
% BLOCK ENTRY AND UPDATED BY 1 EACH TIME NON STANDARD10193000
|
|
% ALGORITHM ENCOUNTERED. UNIQUE IDENTIFICATION OF 10194000
|
|
% Q ALGORITHM ID AT ANY LEVEL 10195000
|
|
PCL, 10195500
|
|
INVISIBLE; % POINTS TO INFO ENTRY OF FIRST INVISIBLE ITEM AFTER 10196000
|
|
% SPECPART HAS PROCESSED Q ENTRY DESCRIPTION 10197000
|
|
BOOLEAN FIXCALL % FALSE IF FIX CALLED FROM STATEMENT. 10197200
|
|
% ALTERNATIVE IS TO PASS PARAMETER TO 10197220
|
|
% EVENT INTRINSIC 10197240
|
|
; 10197260
|
|
DEFINE STARTNSQ = 511#;%UPPER LIMIT ON NUMBER OF STANDARD Q ALGORITHMS10197300
|
|
ARRAY QALGORYTHM [0:19]; % DO NOT EXPAND BOUND BEYOND 62 10198000
|
|
COMMENT ONE ENTRY OF ONE OR TWO WORDS PER STANDARD Q ALGORITHM WITH 10199000
|
|
FIRST WORD HAVING FOLLOWING FIELDS; 10200000
|
|
DEFINE ALGKEY = [6:6]#, % FIELD FOR ALGORITHM IDENT 10201000
|
|
ALGTIPE = [12:3]#, % FIELD FOR ALGORITHM TYPE 10202000
|
|
ALGPD = [15:3]#, % FIELD FOR PARAMETER DESCRIPTION10203000
|
|
NOWORDS = [4:1]#; % NUMBER OF WORDS IN THIS ENTRY 10204000
|
|
DEFINE MAXQALG= 19#; % NUMBER OF ENTRIES IN QALGORYTHM 10205000
|
|
ALPHA ARRAY OPS[0:768]; % OPERATOR MNEMONICS FOR BUGOUT 10206000
|
|
DEFINE VALC= 63#,NAMC=127#,ADD =128#,SUBT=129#,MULT=130#,DIVD=131#,10207000
|
|
IDIV=132#,RDIV=133#,NTIA=134#,NTGR=135#,LESS=136#,GREQ=137#,GRTR=138#,10208000
|
|
LSEQ=139#,EQUL=140#,NEQL=141#,CHSN=142#,MULX=143#,LAND=144#,LOR =145#,10209000
|
|
LNOT=146#,LEQV=147#,SAME=148#,VARI=149#,BSET=150#,DBST=151#,FLTR=152#,10210000
|
|
DFTR=153#,ISOL=154#,DISO=155#,INSR=156#,DINS=157#,BRST=158#,DBRS=159#,10211000
|
|
BRFL=160#,BRTR=161#,BRUN=162#,EXIT=163#,STBR=164#,NXLN=165#,INDX=166#,10212000
|
|
RETN=167#,DBFL=168#,DBTR=169#,DBUN=170#,ENTR=171#,EVAL=172#,NXLV=173#,10213000
|
|
MKST=174#,STFF=175#,ZERO=176#,ONE =177#,LT8 =178#,LT16=179#,PUSH=180#,10214000
|
|
DLET=181#,EXCH=182#,DUPL=183#,STOD=184#,STON=185#,OVRD=186#,OVRN=187#,10215000
|
|
LOAD=189#,LT48=190#,MPCW=191#,SCLF=192#,DSLF=193#,SCRT=194#,DSRT=195#,10216000
|
|
SCRS=196#,DSRS=197#,SCRF=198#,DSRF=199#,SCRR=200#,DSRR=201#,ICVD=202#,10217000
|
|
ICVU=203#,SNGT=204#,SNGL=205#,XTND=206#,IMKS=207#,TEED=208#,PACD=209#,10218000
|
|
EXSD=210#,TWSD=211#,TWOD=212#,SISO=213#,SXSN=214#,ROFF=215#,TEEU=216#,10219000
|
|
PACU=217#,EXSU=218#,TWSU=219#,TWOU=220#,EXPU=221#,RTFF=222#,HALT=223#,10220000
|
|
TLSD=224#,TGED=225#,TGTD=226#,TLED=227#,TEQD=228#,TNED=229#,TUND=230#,10221000
|
|
TLSU=232#,TGEU=233#,TGTU=234#,TLEU=235#,TEQU=236#,TNEU=237#,TUNU=238#,10222000
|
|
CLSD=240#,CGEQ=241#,CGTD=242#,CLED=243#,CEQD=244#,CNED=245#,CLSU=248#,10223000
|
|
CGEU=249#,CGTU=250#,CLEU=251#,CEQU=252#,CNEU=253#,NOOP=254#,NVLD=255#,10224000
|
|
JOIN=322#,SPLT=323#,IDLE=324#,SINT=325#,EEXI=326#,DEXI=327#,SCNI=330#,10225000
|
|
SCNO=331#,WHOI=334#,HEYU=335#,NTGD=385#,OCRX=389#,LOG2=395#,IRWL=429#,10226000
|
|
PCWL=430#,MVST=431#,STAG=436#,RTAG=437#,RSUP=438#,RSDN=439#,RPRR=440#,10227000
|
|
SPRR=441#,RDLK=442#,CBON=443#,LODT=444#,LLLU=445#,SRCH=446#,USND=464#,10228000
|
|
UABD=465#,TWFD=466#,TWTD=467#,SWFD=468#,SWTD=469#,TRNS=471#,USNU=472#,10229000
|
|
UABU=473#,TWFU=474#,TWTU=475#,SWFU=476#,SWTU=477#,SLSD=496#,SGED=497#,10230000
|
|
SGTD=498#,SLED=499#,SEQD=500#,SNED=501#,SLSU=504#,SGEU=505#,SGTU=506#,10231000
|
|
SLEU=507#,SEQU=508#,SNEU=509#,MINS=720#,MFLT=721#,SFSC=722#,SRSC=723#,10232000
|
|
RSTF=724#,ENDF=725#,MVNU=726#,MCHR=727#,INOP=728#,INSG=729#,SFDC=730#,10233000
|
|
SRDC=731#,INSU=732#,INSC=733#,ENDE=734#; 10234000
|
|
DEFINE UNKNOWNID = 0#, 10235000
|
|
FORMALID = 1#, 10236000
|
|
FIELDID = 2#, 10237000
|
|
EVENTID = 3#, 10238000
|
|
LAYOUTID = 4#, 10239000
|
|
PROCID = 5#, 10240000
|
|
LABELID = 6#, 10241000
|
|
DEFINDID = 7#, 10242000
|
|
BOOPROCID = 8#, 10243000
|
|
DPPROCID = 9#, 10244000
|
|
REALPROCID = 10#, 10245000
|
|
INTPROCID = 11#, 10246000
|
|
REFPROCID = 12#, 10247000
|
|
WORDPROCID = 13#, 10248000
|
|
PTRPROCID = 14#, 10249000
|
|
BOOID = 15#, 10250000
|
|
DPID = 16#, 10251000
|
|
REALID = 17#, 10252000
|
|
INTID = 18#, 10253000
|
|
REFID = 19#, 10254000
|
|
WORDID = 20#, 10255000
|
|
PTRID = 21#, 10256000
|
|
BOOARRAYID = 22#, 10257000
|
|
DPARRAYID = 23#, 10258000
|
|
REALARRAYID = 24#, 10259000
|
|
INTARRAYID = 25#, 10260000
|
|
REFARRAYID = 26#, 10261000
|
|
WORDARRAYID = 27#, 10262000
|
|
PCID = 28#, 10263000
|
|
BOOROAID = 29#, 10264000
|
|
DPROAID = 30#, 10265000
|
|
REALROAID = 31#, 10266000
|
|
INTROAID = 32#, 10267000
|
|
EVENTARRAYID = 33#, 10268000
|
|
QUEUEARRAYID = 34#, 10269000
|
|
REGID = 35#, 10270000
|
|
QUEUEID = 36#, 10271000
|
|
NULLV = 37#, 10272000
|
|
TRUTHV = 38#, 10273000
|
|
NUMBER = 39#, 10274000
|
|
STRNGCON = 40#, 10275000
|
|
QALGID = 42#, 10277000
|
|
INTERRUPTID = 43#, 10278000
|
|
INTRINSICEVENT = 44#, 10279000
|
|
WORDV = 45#, 10280000
|
|
LOCKEDV = 46#, 10281000
|
|
STRING = 47#, 10282000
|
|
LFTPRN = 48#, 10283000
|
|
CASEV = 49#, 10284000
|
|
BEGINV = 50#, 10285000
|
|
ONV = 51#, 10286000
|
|
DOV = 52#, 10287000
|
|
IFV = 53#, 10288000
|
|
GOV = 54#, 10289000
|
|
THRUV = 55#, 10290000
|
|
FORV = 56#, 10291000
|
|
WHILEV = 57#, 10292000
|
|
SCANV = 58#, 10293000
|
|
REPLACEV = 59#, 10294000
|
|
FILLV = 60#, 10295000
|
|
SWAPV = 61#, 10296000
|
|
SEMICOLON = 62#, 10297000
|
|
ENDV = 63#, 10298000
|
|
UNTILV = 64#, 10299000
|
|
ELSEV = 65#, 10300000
|
|
DOLLAR = 66#, 10301000
|
|
COMMENTV = 67#, 10302000
|
|
ADDOP = 68#, 10303000
|
|
TYPEV = 69#, 10304000
|
|
FIELDV = 70#, 10305000
|
|
ARRAYV = 71#, 10306000
|
|
OWNV = 72#, 10307000
|
|
DEFINEV = 73#, 10308000
|
|
LABELV = 74#, 10309000
|
|
PROCV = 75#, 10310000
|
|
SAVEV = 76#, 10311000
|
|
LAYV = 77#, 10312000
|
|
EVENTV = 78#, 10313000
|
|
QUEUEV = 79#, 10314000
|
|
ENTERRUPT = 80#, 10315000
|
|
PITCHER = 81#, 10316000
|
|
MONITORV = 83#, 10318000
|
|
VALUEV = 84#, 10319000
|
|
INV = 85#, 10320000
|
|
CROSSHATCH = 86#, 10321000
|
|
ATSIGN = 87#, 10322000
|
|
PERCENT = 88#, 10323000
|
|
PERIODV = 89#, 10324000
|
|
STEPV = 90#, 10325000
|
|
TOV = 91#, 10326000
|
|
BYV = 92#, 10327000
|
|
OVERITE = 93#, 10328000
|
|
WITHV = 94#, 10329000
|
|
USING = 95#, 10330000
|
|
TAGV = 96#, 10331000
|
|
FACTOP = 97#, 10332000
|
|
LFTBRKT = 98#, 10333000
|
|
QUESTIONMK = 99#, 10334000
|
|
COMMA = 100#, 10335000
|
|
RTPARN = 101#, 10336000
|
|
RTBRKT = 102#, 10337000
|
|
COLON = 103#, 10338000
|
|
THENV = 104#, 10339000
|
|
EXTERNALV = 105#, 10340000
|
|
FORWARDV = 106#, 10341000
|
|
OFV = 107#, 10342000
|
|
NOTOP = 108#, 10343000
|
|
ASSNOP = 109#, 10344000
|
|
AMPERSAND = 110#, 10345000
|
|
LOGOP = 111#, 10346000
|
|
RELOP = 112#, 10347000
|
|
MULOP = 113#, 10348000
|
|
DEFINEP = 114#; 10349000
|
|
DEFINE DIGIT = 0#, 10350000
|
|
LETTER = 1#, 10351000
|
|
SPASE = 2#, 10352000
|
|
BOOV = 0#, 10353000
|
|
DPV = 1#, 10354000
|
|
REALV = 2#, 10355000
|
|
INTV = 3#, 10356000
|
|
REFV = 4#, 10357000
|
|
WDV = 5#, 10358000
|
|
PTRV = 6#; 10359000
|
|
DEFINE FS=0#, % CALLS ON VARIABLE: STATEMENT 11000000
|
|
FP=1#, % PRIMARY 11001000
|
|
FL=2#, % ACTUAL PARAPART 11002000
|
|
FR=3#; % FOR STATEMENTRT 11003000
|
|
DEFINE INCR = 7 #, 11003300
|
|
INCRTWICE = 14 #; 11003600
|
|
% TYPE FIELD VALUES 11004000
|
|
DEFINE FORMALNAMEP = 2#, 11005000
|
|
FORMALNAMEQ = 6#, 11006000
|
|
FORMALVALUEP= 3#, 11007000
|
|
FORMALVALUEQ= 7#, 11008000
|
|
LOCALTYPE = 0#, 11009000
|
|
WITHINBODY = 1#, 11010000
|
|
F0RWARD = 4#, 11011000
|
|
INTRINSIC = 5#; 11012000
|
|
DEFINE IDMAX = QUEUEID #; 11013000
|
|
DEFINE MINDEC = TYPEV#, MAXDEC = VALUEV#; 11014000
|
|
INTEGER NEXTINFO, % POINTS TO NEXT HOLE IN INFO 11015000
|
|
NINFOO, % POINTS TO START OF INFO ENTRIES FOR 11016000
|
|
% CURRENT BLOCK. 11017000
|
|
NEXTADDL, % POINTS TO NEXT SPOT IN ADDL. 11018000
|
|
LASTADDL, 11018100
|
|
RSVDX, %%%%%%%%%%%%%%%%%%%% KLUDGE%%%%%%%%%%%%%%% 11019000
|
|
LASTINFO; % POINTS TO LAST ENTRY IN INFO. 11020000
|
|
DEFINE GLOBAL=0#; % OUTERMOST ADDRESSING LEVEL. 11021000
|
|
BOOLEAN GTB1; % TEMP FREE-FOR-ALL 11022000
|
|
INTEGER LASTNOT; % USUALLY POINTS JUST BEYOND LAST LNOT 11023000
|
|
% OR RELOP. USED BY EMITNOT TO 11024000
|
|
% OPTIMISER A LITTLE. 11025000
|
|
INTEGER LASTINDEX; % USUALLY POINTS AT TWE LAST SUBSCRIPTING 11026000
|
|
% OPERATOR, SO THE ACTUALPARAPART CAN CALL 11027000
|
|
% THINGS BY NAME. 11028000
|
|
INTEGER BEGINCTR; 11029000
|
|
DEFINE DTYPE = ETYPE#; 11030000
|
|
DEFINE EVENTINTRINSICID = INTRINSICEVENT#, 11030300
|
|
INTERRUPTV = ENTERRUPT#; 11030800
|
|
INTEGER ADRCPL; % SCRATCH FOR EMITTERS. 11031000
|
|
DEFINE ATYPE = REALV#, % TYPES OF EXPRESSIONS: S.P. ARITH-REAL 11032000
|
|
BTYPE = BOOV#, % BOOLEAN 11033000
|
|
ITYPE = INTV#, % INTEGER 11034000
|
|
ETYPE = DPV#, % D.P. ARITH 11035000
|
|
RTYPE = REFV#, % REFERENCE 11036000
|
|
PTYPE = PTRV#, % POINTER 11037000
|
|
WTYPE = WDV#, 11037500
|
|
XTYPE = 0#; % ARRAY 11038000
|
|
COMMENT NOTE THAT AN ARRAY EXPRESSION IS GIVEN BY A TYPE < XTYPE. 11039000
|
|
THE VALUE OF TYPE IS -(NUMBER OF DIMENSIONS LEFT) - 11040000
|
|
(TYPE OF ARRAY) |32768; 11041000
|
|
DEFINE PROCD = 6# 11042000
|
|
; 11043000
|
|
DEFINE ARAYTPE = [30:3]#, % TYPE FIELD FOR EXPRSS VALUE FOR ARRAYS 11044000
|
|
ARAYDIM = [33:15]#; % NO OF DIMENSIONS ASSOCIATED WITH ARAYTYPE 11045000
|
|
DEFINE EMITLINK = EMIT3#; 11046000
|
|
DEFINE EMITO = EMIT#; 11047000
|
|
DEFINE ENABLEKEY = 20# 11047100
|
|
, DISABLEKEY= 21# 11047200
|
|
, SETKEY = 10# 11047300
|
|
, RESETKEY = 11# 11047400
|
|
, CAUSEKEY = 0# 11047500
|
|
, WAITKEY = 1# 11047600
|
|
, FIXKEY = 14# 11047700
|
|
, FREEKEY = 15# 11047800
|
|
, HAPPENEDKEY= 30# 11047900
|
|
, AVAILABLEKEY= 31# 11047950
|
|
,SECONDWORDKEY=40# 11047960
|
|
, STOREITEMKEY= 50# 11047970
|
|
; 11047980
|
|
DEFINE INSERTKEY =0# % KEY FOR INSERT ALGORITHM 11048000
|
|
,ALLOCATEKEY =3#; % KEY FOR ALLOCATE ALGORITHM 11049000
|
|
DEFINE SIZEKEY =15# % KEY FOR SIZE ALGORITHM/PROPERTY 11049100
|
|
,LOCKKEY =16# % KEY FOR LOCKED ALGORITHM/PROPERTY 11049200
|
|
,BUSYKEY =17# % KEY FOR BUSY ALGORITHM/PROPERTY 11049300
|
|
,BUZZKEY =18# % KEY FOR BUZZ ALGORITHM 11049330
|
|
,BUZZCONTROLKEY=20# % 11049360
|
|
,UNLOCKKEY =21# % KEY FOR UNLOCK ALGORITHM/PROPERTY 11049400
|
|
; 11049450
|
|
INTEGER LASTX, % L OF LAST EXECUTABLE CODE BEFORE THE 11050000
|
|
% CURRENT NON-EXEC: -1 IF CURRENT IS 11051000
|
|
% EXECUTABLE. 11052000
|
|
FIRSTX, % L OF FIRST EXECUTABLE CODE IN THE SEGMEMT11053000
|
|
% -1 IF NONE YET. 11054000
|
|
11055000
|
|
FIRSTMT; % L OF FIRST STATEMENT OF CURRENT BLOCK. 11056000
|
|
ARRAY PDPRT[0:15,0:255]; 11057000
|
|
INTEGER PDINX; 11058000
|
|
DEFINE PPINX=PDINX.[36:4],PDINX.[40:8]#; 11059000
|
|
COMMENT PDPRT TS USED AT THE END OF COMPILATION TO BUILD THE LEVEL-ZERO11060000
|
|
STACK FOR THE PROGRAM. PDINX IS THE INDEX OF THE NEXT SLOT 11061000
|
|
IN PDPRT. ENTRIES IN PDPRT CONTAIN THE FOLLOWING FIELDS: 11062000
|
|
[36:12] MOM ADDRESS. THE DISPLACEMENT RELATIVE TO D[0]. 11063000
|
|
NOTICE THAT PDINX BEARS NO RELATIONSHIP TO THIS VALUE11064000
|
|
(OR TO ANY OTHER, FOR THAT MATTER). 11065000
|
|
[23:13] RELATIVE DISK ADDRESS OF THE RELEVENT SEGMENT, IF 11066000
|
|
THERE IS ONE. THIS ADDRESS REFERS TO THE TEMPORARY 11067000
|
|
CODE FILE, AND IS CONVERTED TO A CORE ADDRESS, FOR 11068000
|
|
SAVE STUFF, OR A DISK ADDRESS. THIS FIELD IS 11069000
|
|
APPLICABLE TO DATA AND SEGMENT-DESCRIPTOR ENTRIES. 11070000
|
|
[24:12] SEGMENT DESCRIPTOR ADDRESS, APPLICABLE TO PCWS ONLY. 11071000
|
|
[10:13] SIZE, FOR DATA AND SEGMENT DESCRIPTORS. 11072000
|
|
[ 7:17] L, FOR PCW ENTRIES. 11073000
|
|
[ 6: 1] NCSF FOR PCW (1 => CONTROL STATE). 11074000
|
|
[ 4: 3] OPERAND-SIZE FIELD FOR DATA DESCRIPTOR. 11075000
|
|
1 = PCW OF EXTERNAL PROCEDURE 11075500
|
|
[ 8: 1] PRESENCE BIT, FOR SEGMENT AND DATA DESCRIPTORS. 11076000
|
|
IF ON, THE SEGMENT WILL BE LOADED AT H/L. 11077000
|
|
[ 2: 3] TYPE OF ENTRY: 11078500
|
|
0 = DATA DESC. 11079000
|
|
1 = DATA DESC ALSO. 11079500
|
|
2 = DOUBLE-PRECISION VARIABLE. 11080000
|
|
3 = POINTER VARIABLE. 11081000
|
|
4 = SEGMENT DESC OF EXTERNAL PROCEDURE 11081500
|
|
6 = SEGMENT DESC. 11082000
|
|
7 = PROG CTL WORD. 11083000
|
|
[ 7, 1] READ-ONLY BIT FOR DATA DESC. 11084000
|
|
; 11085000
|
|
DEFINE PDPRTDISPF=[36:12]# 11085200
|
|
,PDPRTSIZEF=[10:13]# 11085400
|
|
; 11085600
|
|
INTEGER TEMPADDR; COMMENT REL ADDR INTO TEMP CODE FILE; 11086000
|
|
DEFINE ERROR(ERROR1) = BEGIN ERR(ERROR1); GO TO EXIT END#; 11086010
|
|
LABEL ENDOFITALL; 11087000
|
|
DEFINE USINGV= USING#; 11087500
|
|
DEFINE LFTPARN=LFTPRN#; 11087550
|
|
INTEGER SAVESIZE; % AMOUNT OF SAVE ARRAYS DECLARED 11088000
|
|
DEFINE POOLMAX = 511#; 11100000
|
|
ALPHA ARRAY POOL[0:7, 0:255]; 11101000
|
|
INTEGER POOLMOM, POOLX; 11102000
|
|
ALPHA ARRAY TA [0:POOLMAX]; 11103000
|
|
INTEGER TAX; 11104000
|
|
DEFINE DEL=DLET#; 11104300
|
|
DEFINE BRSET=BRST#; 11104500
|
|
DEFINE CONTROLBUZZKEY=BUZZCONTROLKEY#; 11104800
|
|
DEFINE MAXTEMP = 39#; 11105000
|
|
ARRAY TEMPSTACK[0:MAXTEMP]; 11106000
|
|
BOOLEAN FIGS; COMMENT SHOULD BE TRUE IFF EMITTING FIXUP CODE; 11106100
|
|
DEFINE EVNTV = 100# % ANALOGOUS TO REALV,ATYPE,BOOV, 11107000
|
|
, EVTYPE = EVNTV # % BTYPE BUT USED IN MORE RESTRIC-11108000
|
|
; % TED WAY FOR EVENTS 11109000
|
|
COMMENT * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 20000000
|
|
STREAM PROCEDURE DECLARATIONS 20001000
|
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;20002000
|
|
INTEGER STREAM PROCEDURE EXAMINE(PTR); VALUE PTR; 20003000
|
|
BEGIN SI~PTR; DI~LOC PTR; DI~DI-1; DS~CHR END; 20004000
|
|
INTEGER STREAM PROCEDURE SKIPFORWARD(PTR,BY); VALUE PTR,BY; 20005000
|
|
BEGIN SI~PTR; SI~SI+BY; SKIPFORWARD~SI END; 20006000
|
|
INTEGER STREAM PROCEDURE MKABS(X); 20007000
|
|
BEGIN SI~X; MKABS~SI END; 20008000
|
|
INTEGER STREAM PROCEDURE MOVECHRS(N,F,T); VALUE N,F,T; 20009000
|
|
BEGIN SI~F; DI~T; DS~N CHR ; MOVECHRS~DI END MOVECHRS; 20010000
|
|
BOOLEAN STREAM PROCEDURE EQUAL(A,B); VALUE A,B; 20011000
|
|
BEGIN SI~A; DI~B; IF 8 SC=DC THEN TALLY~1; EQUAL~TALLY END; 20012000
|
|
BOOLEAN STREAM PROCEDURE GREATER(A,B); VALUE A,B; 20013000
|
|
BEGIN SI~A; DI~B; IF 8 SC>DC THEN TALLY~1; GREATER~TALLY END; 20014000
|
|
STREAM PROCEDURE MOVEIT(F,T); VALUE T; 20015000
|
|
BEGIN SI~F; DI~T; DS~WDS END MOVEIT; 20016000
|
|
STREAM PROCEDURE SEQERR(S,B); VALUE S; 20017000
|
|
BEGIN DI~B; DS~12 LIT" SEQERR"; SI~S; DS~8 CHR END SEQERR; 20018000
|
|
STREAM PROCEDURE BLANKOUT(N,D); VALUE N; 20019000
|
|
BEGIN DI~D; DS~8 LIT " "; SI~D; DS~N WDS END BLANKOUT; 20020000
|
|
STREAM PROCEDURE CONVERTOUT(N,D); VALUE N,D; 20021000
|
|
BEGIN DI~D; SI~LOC N; DS~8 DEC END CONVERTOUT; 20022000
|
|
STREAM PROCEDURE EDITLINE(FCR,LST,V,SEG,C,L,BUF); 20023000
|
|
VALUE FCR,LST,V,SEG,C,L ; 20024000
|
|
BEGIN LABEL B, C, T, P, L; 20025000
|
|
DI~BUF; DS~16 LIT" "; SI~FCR; DS~9 WDS; DS~8 LIT" "; BUF~DI; 20026000
|
|
DS~WDS; DS~8 LIT" "; 20027000
|
|
V(DI~DI-6; SI~LOC SEG; DS~3 DEC; DS~LIT":"; DS~4 DEC; 20028000
|
|
DS~LIT":"; DS~DEC); 20029000
|
|
DI~BUF; DI~DI-2; CI~CI+LST; GO B; GO B; GO C; GO P; GO T; 20030000
|
|
GO T; GO L; 20030100
|
|
T:DS~LIT"T"; GO B; 20031000
|
|
C:DS~LIT"C"; GO B; 20032000
|
|
P:DS~LIT"P"; GO B; 20033000
|
|
L:DS~LIT"L"; 20033100
|
|
B: 20034000
|
|
END EDITLINE; 20035000
|
|
STREAM PROCEDURE ZOT(C,AT); VALUE C, AT; 20036000
|
|
BEGIN SI~LOC AT; SI~SI-1; DI~AT; DS~CHR; END ZOT; 20037000
|
|
STREAM PROCEDURE MOVECHARACTERS(N,F,FS,T,TS); VALUE N,FS,TS; 20038000
|
|
BEGIN SI~F; SI~SI+FS; DI~T; DI~DI+TS; DS~N CHR END; 20039000
|
|
STREAM PROCEDURE MOVECHARACTERACCUM(N,F,FS,T,TS); VALUE N,FS,TS; 20040000
|
|
BEGIN SI ~ F; SI ~ SI+FS; SI~SI+4; DI~T; DI~DI+TS; DS ~ N CHR END; 20041000
|
|
BOOLEAN STREAM PROCEDURE OCTALCONVERT(A,C,S,T); VALUE A,C,S; 20042000
|
|
BEGIN SI~A; DI~T; 3(DS~S RESET); 20043000
|
|
C(IF SC<"0" THEN TALLY~1 ELSE IF SC>"7" THEN TALLY~1; 20044000
|
|
SKIP 3 SB; 20045000
|
|
3(IF SB THEN DS~SET ELSE DS~RESET; SKIP SB)); 20046000
|
|
OCTALCONVERT~TALLY 20047000
|
|
END OCTALCONVERT; 20048000
|
|
INTEGER STREAM PROCEDURE INPUTCONVERT(A,S,C); VALUE S,C; 20049000
|
|
BEGIN SI~A; SI~SI+S; DI~LOC INPUTCONVERT; DS~C OCT END ICV; 20050000
|
|
INTEGER STREAM PROCEDURE SEQCONVERT(LCR); VALUE LCR; 20050100
|
|
BEGIN SI ~ LCR; DI ~ LOC SEQCONVERT; DS ~ 8 OCT; END SEQ CONVERT; 20050200
|
|
BOOLEAN STREAM PROCEDURE CMPCHRNEQL(N,A,B); VALUE N; 20051000
|
|
BEGIN SI~A; DI~B; IF N SC!DC THEN TALLY~1; CMPCHRNEQL~TALLY END; 20052000
|
|
STREAM PROCEDURE MOVE(N,F,T); VALUE N; 20053000
|
|
BEGIN LOCAL M; SI~LOC N; SI~SI+4; SI~SC; M~SI; 20054000
|
|
SI~F; DI~T; DS~N WDS; M(DS~32 WDS; DS~32 WDS) 20055000
|
|
END SUPER MOVE; 20056000
|
|
STREAM PROCEDURE MOVE8BITS(FROM,SK,T0); VALUE SK; 20057000
|
|
BEGIN SI ~ FROM; SK(SKIP 8 SB); DI ~ T0; DI ~ DI + 6; SKIP 4 DB; 20058000
|
|
8(IF SB THEN DS ~ SET ELSE DS ~ RESET; SKIP SB); 20059000
|
|
END MOVE 8 BITS; 20060000
|
|
BOOLEAN STREAM PROCEDURE CMPCHREQL(N,A,B); VALUE N; 20061000
|
|
BEGIN SI~A; DI~B; IF N SC=DC THEN TALLY~1; CMPCHREQL~TALLY END; 20062000
|
|
STREAM PROCEDURE INSERT(N,STUFF,AT,PLUS); VALUE N,STUFF,PLUS; 20063000
|
|
BEGIN SI ~ LOC AT; SI ~ SI - N; DI ~ AT; DI ~ DI + PLUS; DS~N CHR 20064000
|
|
END INSERT; 20065000
|
|
STREAM PROCEDURE ZN9N(OC,N,ZS,AT,PLUS); VALUE OC,N,ZS,PLUS; 20066000
|
|
BEGIN SI~LOC OC; DI~AT; DI~DI+PLUS; AT~DI; 20067000
|
|
DS~N DEC; DI~AT; DS~ZS FILL 20068000
|
|
END ZN9N; 20069000
|
|
REAL STREAM PROCEDURE REEL(P,N); VALUE P,N; 20070000
|
|
BEGIN DI ~ LOC P; DI ~ DI - N; SI ~ P; DS ~ N CHR END; 20071000
|
|
STREAM PROCEDURE FLOG(F,V,T); VALUE F,V; 20072000
|
|
BEGIN DI ~ LOC V; DS ~ F SET; DI ~ T; SI ~ LOC V; DS ~ WDS END; 20073000
|
|
STREAM PROCEDURE MOVEBITS(FROM,NR,SSK,T,DSK); VALUE NR,SSK, DSK; 20074000
|
|
BEGIN SI ~ FROM; SKIP SSK SB; 20075000
|
|
DI ~ T; SKIP DSK DB; NR(IF SB THEN DS ~ SET ELSE DS ~ RESET; 20076000
|
|
SKIP SB) 20077000
|
|
END BIT MOVER; 20078000
|
|
BOOLEAN STREAM PROCEDURE FLAGBIT(A); 20079000
|
|
BEGIN 20080000
|
|
SI ~ A; 20081000
|
|
IF SB THEN 20082000
|
|
BEGIN TALLY ~ 1; DI ~ A; DS ~ RESET END; 20083000
|
|
FLAGBIT ~ TALLY; 20084000
|
|
END FLAGBIT; 20085000
|
|
BOOLEAN STREAM PROCEDURE BIT(N)" OF "(WORD); VALUE N,WORD; 20086000
|
|
BEGIN SI ~ LOC WORD; SKIP N SB; IF SB THEN TALLY ~ 1; BIT ~ TALLY; 20087000
|
|
END BIT RETREIVER; 20088000
|
|
STREAM PROCEDURE LABELINE(A,N,L); VALUE N; 20100000
|
|
BEGIN SI ~ A; DI ~ L; SI ~ SI + 4; DS ~ N CHR; 20101000
|
|
DS ~ 21LIT " SEEMS TO BE A LABEL." 20102000
|
|
END LABELINE; 20103000
|
|
PROCEDURE DUMPIT(A); ARRAY A[0]; 24000000
|
|
; 24001000
|
|
SAVE ARRAY SCRATCH [0:14]; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%24002000
|
|
PROCEDURE DONBUG (W, LI, LA); VALUE W, LI, LA; INTEGER LI,LA; ALPHA W; 24003000
|
|
BEGIN 24004000
|
|
OWN BOOLEAN BEFORE; 24005000
|
|
FORMAT FLI (A6, " INFO ", 7I6), FLA (A6," ADDL ", 7I6); 24006000
|
|
LIST LLI(W, LI, GT1.MONF, GT1.[9:6], GT1.[15:6], GT1.CLASS, 24007000
|
|
GT1.TYPE, GT1.LINK), 24008000
|
|
LLA(W, LA, GT1.LAYINIT, GT1.LAYCODE, GT1.LAYLTA, 24009000
|
|
GT1.LAYLNA, GT1.LAYLTB, GT1.LAYLNB); 24010000
|
|
IF DONSBUG AND NOT BEFORE 24011000
|
|
THEN BEGIN 24012000
|
|
FORMAT F ("INFO FIELDS ARE: INDEX, MONF, 9:6, 15:6,",24013000
|
|
" CLASS, TYPE, LINK",/, 24014000
|
|
"ADDL FIELDS ARE: INDEX, LAYINIT, LAYCODE, ", 24015000
|
|
"LAYLTA, LAYLNA, LAYLTB, LAYLNB",/); 24016000
|
|
BEFORE ~ TRUE; 24017000
|
|
WRITE (LINE[DBL], F); 24018000
|
|
END; 24019000
|
|
IF DONSBUG 24020000
|
|
THEN IF LI > 0 24021000
|
|
THEN BEGIN 24022000
|
|
GT1 ~ INFO [LI.LINKR, LI.LINKC]; 24023000
|
|
WRITE (LINE[DBL], FLI, LLI); 24024000
|
|
END 24025000
|
|
ELSE IF LI < 0 AND LA ! 0 24026000
|
|
THEN BEGIN 24027000
|
|
BLANKOUT (14, SCRATCH); 24028000
|
|
MOVE (ENTIER(ABS(LI) DIV 8 + 1), 24029000
|
|
ADDL [LA.LINKR, LA.LINKC], SCRATCH); 24030000
|
|
WRITE (LINE[DBL], 15, SCRATCH[*]); 24031000
|
|
END 24032000
|
|
ELSE IF LI = 0 24033000
|
|
THEN BEGIN 24034000
|
|
GT1 ~ ADDL[LA.LINKR, LA.LINKC]; 24035000
|
|
WRITE (LINE[DBL], FLA, LLA); 24036000
|
|
END; 24037000
|
|
END DONBUG; 24038000
|
|
COMMENT * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 25000000
|
|
FORWARD PROCEDURE DECLARATIONS 25001000
|
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;25002000
|
|
INTEGER PROCEDURE SCAN; FORWARD; %0400400025003000
|
|
INTEGER PROCEDURE READACARD; FORWARD; %0405700025004000
|
|
PROCEDURE DATIME; FORWARD; %0412500025005000
|
|
PROCEDURE GNC; FORWARD; %0414500025006000
|
|
PROCEDURE CONVERTINTO(H,L); 25007000
|
|
REAL H,L ; FORWARD; %0415000025008000
|
|
PROCEDURE FLAG(N); VALUE N; INTEGER N; FORWARD; %0600500025009000
|
|
PROCEDURE DOLLARCARD; FORWARD; 25010000
|
|
PROCEDURE DEBLANK; FORWARD; %0434200025011000
|
|
INTEGER PROCEDURE GETSPACE(L); VALUE L; INTEGER L;FORWARD; %0605100025012000
|
|
PROCEDURE STEPIT; FORWARD; % 25013000
|
|
INTEGER PROCEDURE STEPI; FORWARD; % 25014000
|
|
PROCEDURE EMIT(OP); VALUE OP; INTEGER OP; FORWARD; % 25015000
|
|
PROCEDURE EMITB(B,F,T); 25016000
|
|
VALUE B,F,T; INTEGER B,F,T; FORWARD; % 25017000
|
|
PROCEDURE EMITV(A); VALUE A; INTEGER A; FORWARD; 25018000
|
|
PROCEDURE EMITN(A); VALUE A; INTEGER A; FORWARD; 25019000
|
|
PROCEDURE EMITNUMBER(N,F); VALUE N,F; REAL N,F; FORWARD; 25020000
|
|
DEFINE EMITNUM(EMITNUM1) = EMITNUMBER(EMITNUM1,0)#; 25020100
|
|
PROCEDURE EMITD(A,B,N); VALUE A,B,N; 25021000
|
|
INTEGER A,B,N; FORWARD; 25022000
|
|
DEFINE EMITI(EMITI1,EMITI2)=EMIT2P(ISOL,EMITI1,EMITI2) #, 25023000
|
|
EMITR(EMITR1,EMITR2)=EMIT2P(INSR,EMITR1,EMITR2) #; 25024000
|
|
25025000
|
|
25026000
|
|
PROCEDURE ERR(N); VALUE N; INTEGER N; FORWARD; 25027000
|
|
PROCEDURE EMITDP(H,L); VALUE H,L; 25028000
|
|
REAL H,L; FORWARD; 25029000
|
|
PROCEDURE EMITPAIR(A,O); VALUE A,O; 25030000
|
|
INTEGER A,O; FORWARD; 25031000
|
|
PROCEDURE EMITNOT; FORWARD; 25032000
|
|
REAL PROCEDURE TAKE(N); VALUE N; INTEGER N; FORWARD; 25033000
|
|
PROCEDURE PUT(N,X); VALUE N,X; 25034000
|
|
INTEGER N,X; FORWARD; 25035000
|
|
BOOLEAN PROCEDURE IFCLAUSE; FORWARD; 25036000
|
|
INTEGER PROCEDURE CASEHEAD; FORWARD; 25037000
|
|
PROCEDURE CASETAIL(M,B,P); VALUE M,B,P; 25038000
|
|
INTEGER M,B,P; FORWARD; 25039000
|
|
INTEGER PROCEDURE EXPRSS; FORWARD; 25040000
|
|
INTEGER PROCEDURE IFEXP; FORWARD; 25041000
|
|
PROCEDURE EXPRESSION(T); VALUE T; 25042000
|
|
INTEGER T; FORWARD; 25043000
|
|
INTEGER PROCEDURE CASEXP; FORWARD; 25044000
|
|
PROCEDURE EMIT3(S); VALUE S; 25045000
|
|
INTEGER S; FORWARD; 25046000
|
|
INTEGER PROCEDURE GET3(L); VALUE L; INTEGER L; FORWARD; 25047000
|
|
PROCEDURE BEXP; FORWARD; 25048000
|
|
INTEGER PROCEDURE AEXP; FORWARD; 25049000
|
|
PROCEDURE RELATION(T); VALUE T; INTEGER T;FORWARD; 25050000
|
|
INTEGER PROCEDURE BOOSEC; FORWARD; 25051000
|
|
PROCEDURE BOOCOMP; FORWARD; 25052000
|
|
REAL PROCEDURE REXP(BOO); VALUE BOO; BOOLEAN BOO; FORWARD; 25053000
|
|
REAL PROCEDURE PEXP(BOO); VALUE BOO; BOOLEAN BOO; FORWARD; 25054000
|
|
PROCEDURE STATEMENT; FORWARD; 25055000
|
|
DEFINE PUTNBUMP(PUTNBUMP1)=BEGIN PUTADDL(PUTNBUMP1,NEXTADDL); 25056000
|
|
IF DUMPTOG THEN PADDLYOUROWN (NEXTADDL)END#; 25056001
|
|
PROCEDURE PADDLYOUROWN(GNU); VALUE GNU; INTEGER GNU; 25056010
|
|
BEGIN FORMAT F("NEXTADDL THINKS IT EQUALS "I9" AND IT REALLY IS "I9); 25056020
|
|
WRITE(LINE,F,GNU,NEXTADDL) END; 25056030
|
|
PROCEDURE COMPOUNDTAIL; FORWARD; 25057000
|
|
PROCEDURE JUMPCHKX; FORWARD; 25058000
|
|
PROCEDURE JUMPCHKNX; FORWARD; 25059000
|
|
PROCEDURE IDLIST(A,B,C,D,E); VALUE A,B,C,D,E; 25060000
|
|
BOOLEAN E; INTEGER B,C,D; REAL A; FORWARD; 25061000
|
|
BOOLEAN PROCEDURE ENTER(A,B,C,D); VALUE A,B,C,D; 25062000
|
|
BOOLEAN D; INTEGER A,B,C; FORWARD; 25063000
|
|
PROCEDURE READONLYARRAYDEC(B,A); 25064000
|
|
VALUE B,A; 25065000
|
|
BOOLEAN B; INTEGER A; FORWARD; 25066000
|
|
PROCEDURE MERRIMAC; FORWARD; 25067000
|
|
PROCEDURE PICTUREDEC(S); VALUE S; 25068000
|
|
BOOLEAN S; FORWARD; 25068100
|
|
INTEGER PROCEDURE TEXT (FROM, FINAL); VALUE FROM, FINAL; 25069000
|
|
INTEGER FROM, FINAL;FORWARD; 25070000
|
|
PROCEDURE LAYOUTDEC; FORWARD; 25071000
|
|
PROCEDURE DEFINEDEC; FORWARD; 25072000
|
|
PROCEDURE FIELDEC; FORWARD; 25073000
|
|
PROCEDURE PROCEDUREDEC(S,T); VALUE S,T; 25074000
|
|
BOOLEAN S; INTEGER T; FORWARD; 25075000
|
|
PROCEDURE ARRAYDEC(S,O,T); VALUE S,O,T; 25076000
|
|
BOOLEAN S,O; INTEGER T; FORWARD; 25077000
|
|
DEFINE EVENTDEC(EVENTDEC1)=IDLIST(EVENTDEC1,LOCALTYPE,EVENTID, 25078000
|
|
EVNTV,TRUE)#; 25078100
|
|
PROCEDURE QUEUEDEC(L); VALUE L; INTEGER L;FORWARD; 25079000
|
|
REAL PROCEDURE PROCALL(F,C); VALUE F,C; BOOLEAN F; REAL C; 25080000
|
|
FORWARD; 25080100
|
|
PROCEDURE LABELR; FORWARD; 25081000
|
|
REAL PROCEDURE VARIABLE(F); VALUE F; INTEGER F; FORWARD; 25082000
|
|
PROCEDURE QSTMT; FORWARD; 25083000
|
|
PROCEDURE LONGSTRING; FORWARD; 25083100
|
|
PROCEDURE STRINGSOURCE; FORWARD; 25083200
|
|
PROCEDURE BLOCK; FORWARD; 25084000
|
|
PROCEDURE IFSTMT; FORWARD; 25085000
|
|
PROCEDURE GOSTMT; FORWARD; 25086000
|
|
PROCEDURE FORSTMT; FORWARD; 25087000
|
|
PROCEDURE HOOK(X); VALUE X; INTEGER X; FORWARD; 25089000
|
|
PROCEDURE UNHOOK; FORWARD; 25090000
|
|
REAL PROCEDURE GIT(X); VALUE X; INTEGER X; FORWARD; 25091000
|
|
INTEGER PROCEDURE FACTOR(T); VALUE T; INTEGER T; FORWARD; 25091900
|
|
INTEGER PROCEDURE TERM(T); VALUE T; INTEGER T; FORWARD; 25092000
|
|
INTEGER PROCEDURE SIMPARITH(T); VALUE T; INTEGER T; 25093000
|
|
FORWARD; 25094000
|
|
INTEGER PROCEDURE PRIMARY; FORWARD; 25095000
|
|
INTEGER PROCEDURE SUBSCRIBER(W,N); VALUE W,N; 25096000
|
|
INTEGER W,N; FORWARD; 25097000
|
|
PROCEDURE DOTTER (T); VALUE T; REAL T; FORWARD; 25098000
|
|
INTEGER PROCEDURE DOTIT; FORWARD; 25099000
|
|
PROCEDURE LAYITOUT(T); VALUE T; INTEGER T;FORWARD; 25100000
|
|
PROCEDURE ACTUALPARAPART(FBIT,INDEX,AD,FROM);VALUE FBIT,INDEX,AD,FROM; 25101000
|
|
BOOLEAN FBIT,FROM; INTEGER INDEX; REAL AD; FORWARD; 25102000
|
|
INTEGER PROCEDURE INSERTPCW; FORWARD; 25103000
|
|
PROCEDURE EMITPCW(LEVEL,AD,STATE,SEG ); 25104000
|
|
VALUE LEVEL,AD,STATE,SEG; 25105000
|
|
INTEGER LEVEL,AD,STATE,SEG; FORWARD; 25106000
|
|
INTEGER PROCEDURE BOOPRIM; FORWARD; 25107000
|
|
REAL PROCEDURE PTRPRIM(BOO); VALUE BOO; BOOLEAN BOO; FORWARD; 25108000
|
|
PROCEDURE PTRCOMP; FORWARD; 25109000
|
|
PROCEDURE ENTRYEXPR; FORWARD; 25110000
|
|
PROCEDURE SEGMENT(A, B, C); VALUE A, B; INTEGER A, B; 25111000
|
|
ARRAY C[0, 0]; FORWARD; 25112000
|
|
PROCEDURE WRITEFILE(F,A,X0,X1); VALUE X0,X1; REAL X0,X1; 25112300
|
|
FILE F; ARRAY A[0,0]; FORWARD; 25112600
|
|
INTEGER PROCEDURE NEWSEG(X); VALUE X; INTEGER X; FORWARD; 25113000
|
|
PROCEDURE PURGE(T); VALUE T; INTEGER T; FORWARD; 25114000
|
|
PROCEDURE DECLARATIONS; FORWARD; 25115000
|
|
PROCEDURE GLOBALPCW(A,S,L,C); VALUE A,S,L,C; 25116000
|
|
INTEGER A,S,L,C; FORWARD; 25117000
|
|
PROCEDURE INITIALIZEARRAY(A); VALUE A; 25118000
|
|
INTEGER A; FORWARD; 25119000
|
|
PROCEDURE PLACE(W,X);VALUE W,X; REAL W,X; FORWARD; 25120000
|
|
INTEGER PROCEDURE FORMALPARAPART(Q); VALUE Q; 25121000
|
|
BOOLEAN Q; FORWARD; 25122000
|
|
PROCEDURE SEGDICT(S,A,L,P);VALUE S,A,L,P; 25123000
|
|
INTEGER S,A,L,P; FORWARD; 25124000
|
|
PROCEDURE QALGORITHM(PARINFO,ADDLADRES,FROM); VALUE PARINFO,ADDLADRES, 25125000
|
|
FROM; INTEGER PARINFO,ADDLADRES; BOOLEAN FROM; FORWARD; 25126000
|
|
25127000
|
|
PROCEDURE PUTADDL(ENTRY,LINK); VALUE ENTRY; INTEGER LINK;REAL ENTRY; 25128000
|
|
FORWARD; 25129000
|
|
PROCEDURE DIDDLENTER(K); VALUE K; REAL K; FORWARD; 25130000
|
|
PROCEDURE DSTROYNVISIBLE(LASTITEM); VALUE LASTITEM; INTEGER LASTITEM; 25131000
|
|
FORWARD; 25132000
|
|
INTEGER PROCEDURE EMITSPACE(LEVEL);VALUE LEVEL;INTEGER LEVEL; 25133000
|
|
FORWARD; 25134000
|
|
25135000
|
|
INTEGER PROCEDURE STANDSEARCH; FORWARD; 25136000
|
|
BOOLEAN PROCEDURE ASSOCIATE (SPEC); VALUE SPEC; 25137000
|
|
INTEGER SPEC; FORWARD; 25138000
|
|
PROCEDURE ITEMREFERENCE(F); VALUE F; INTEGER F; FORWARD; 25139000
|
|
INTEGER PROCEDURE QARRAYBOUND(LEVEL,BADTOG);VALUE LEVEL,BADTOG; 25140000
|
|
INTEGER LEVEL; BOOLEAN BADTOG; FORWARD; 25141000
|
|
PROCEDURE EMIT1P(OP,A); VALUE OP,A; 25141100
|
|
INTEGER OP,A; FORWARD; 25141200
|
|
PROCEDURE EMIT2P(OP,A,B); VALUE OP,A,B; 25142000
|
|
INTEGER OP,A,B; FORWARD; 25143000
|
|
PROCEDURE EMIT3P(OP,A,B,C); VALUE OP,A,B,C; 25144000
|
|
INTEGER OP,A,B,C; FORWARD; 25145000
|
|
PROCEDURE EMIT4P(OP,A,B,C,D); 25146000
|
|
VALUE OP,A,B,C,D ; 25147000
|
|
INTEGER OP,A,B,C,D ; FORWARD; 25148000
|
|
INTEGER PROCEDURE GETSTACK; FORWARD; 25149000
|
|
PROCEDURE RTNSTACK(ADR); VALUE ADR; REAL ADR; FORWARD; 25150000
|
|
INTEGER PROCEDURE PICTUREGEN(A,B,C); VALUE A,B,C; 25151000
|
|
BOOLEAN A,B; INTEGER C; FORWARD; 25152000
|
|
PROCEDURE EMITMICRO(A); VALUE A; ALPHA A; FORWARD; 25153000
|
|
ALPHA PROCEDURE HEXOUT(A); VALUE A; ALPHA A; FORWARD; 25154000
|
|
PROCEDURE PRINTSPACE(X,L,D); VALUE X,L,D; 25155000
|
|
ALPHA X,L,D; FORWARD; 25156000
|
|
BOOLEAN PROCEDURE GOBBLE(B); VALUE B; BOOLEAN B; FORWARD; 25160000
|
|
PROCEDURE INTERRUPTDEC; FORWARD; 25161000
|
|
BOOLEAN PROCEDURE ITEMONLY(VBIT,SCLASS);VALUE VBIT,SCLASS; 25162000
|
|
BOOLEAN VBIT;INTEGER SCLASS; FORWARD; 25163000
|
|
PROCEDURE EVENTINTRINSIC; FORWARD; 25164000
|
|
PROCEDURE EMITBUZEVENT; FORWARD; 25165000
|
|
INTEGER PROCEDURE EMITDESC(LEVEL);VALUE LEVEL;INTEGER LEVEL; 25166000
|
|
FORWARD; 25167000
|
|
PROCEDURE MAKEARRAYROW; FORWARD; 25168000
|
|
COMMENT * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 30000000
|
|
THE SCANNER 30001000
|
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;30002000
|
|
COMMENT THE NEXT SECTION CONTAINS THE SCANNER. IT IS COMPOSED OF THREE30003000
|
|
MAIN PROCEDURES: TABLE, SCAN, AND READACARD. ITS PURPOSE IS TO, 30004000
|
|
EACH TIME IT IS CALLED, GET THE NEXT LOGICAL ENTITY OF THE SOURCE 30005000
|
|
PROGRAM, AND PRESENT IT TO THE CALLER. THE SOURCE PROGRAM COMES IN 30006000
|
|
CHUNKS: USUALLY THE CHUNK IS A CARD-IMAGE FROM EITHER THE CARD OR 30007000
|
|
THE TAPE FILE. HOWEVER, SOME CHUNKS ARE TEXTS FROM A DEFINE: THESE 30008000
|
|
COME, A WORD AT A TIME, FROM ADDL. READACARD IS IN CHARGE OF 30009000
|
|
FINDING THE NEXT CHUNK: IN FACT, VIRTUALLY ALL THE SOURCE-LANGUAGE 30010000
|
|
MANAGEMENT IS HANDLED BY READACARD, INCLUDING NORMAL LISTING, 30011000
|
|
VOIDING, SEQUENCE DIDDLING, ETC., UNDER CONTROL OF SCAN AND TABLE. 30012000
|
|
SCAN IS RESPONSIBLE FOR GETTING AN ITEM FROM THE SOURCE AS 30013000
|
|
PRESENTED BY READACARD: AN ITEM MAY BE 1) A SPECIAL CHARACTER, 2) A 30014000
|
|
NUMBER, OR 3) AN IDENTIFIER. HOWEVER, SCAN-S LIFE IS COMPLICATED BY30015000
|
|
THE POSSIBILITY THAT A NUMBER OR IDENTIFIER MAY BE SPLIT ACROSS 30016000
|
|
CHUNKS OF SOURCE. IN ANY CASE, THE ITEM IS PLACED INTO ACCUM, IN 30017000
|
|
BASICALLY THE SAME FORM AS AN INFO ENTRY (SEE BELOW), AND GIVEN TO 30018000
|
|
TABLE FOR FURTHER PROCESSING. 30019000
|
|
TABLE IS THE ONE THAT DOES THE DIRTY WORK OF TRANSLATING THE 30020000
|
|
SOURCE-LANGUAGE ITEMS INTO A USABLE INTERNAL FORM, AND HANDLING THE 30021000
|
|
FUNNY CASES. THE NAME "TABLE" IS DERIVED FROM ITS FUNCTION IN THE 30022000
|
|
COMPILER: IT PRODUCES A NUMBER (CALLED THE CLASS) OF AN ITEM, 30023000
|
|
MAINLY BY LOOKING IT UP SOMEWHERE. FOR THE BENEFIT OF THE COMPILER 30024000
|
|
PROPER, IT MAINTAINS A TABLE, CALLED "ELBAT", CONTAINING THE 30025000
|
|
INTERNAL REPRESENTATIONS OF THE SOURCE ITEMS. FOR OBVIOUS REASONS, 30026000
|
|
THEN, THE INTERNAL REPRESENTATION OF AN ITEM IS CALLED ITS ELBAT- 30027000
|
|
WORD. TABLE TRIES TO GUARANTEE THAT AT LEAST THE TEN MOST-RECENTLY-30028000
|
|
SCANNED ITEMS ARE REPRESENTED. 30029000
|
|
THE ELBAT WORD CONTAINS THE FOLLOWING FIELDS: 30030000
|
|
ADDRESS : THE ADDRESS FIELD, FOR THINGS THAT HAVE ADDRESSES, 30031000
|
|
IS JUST THAT. IT CONTAINS TWO SUBFIELDS, ADDRESSING 30032000
|
|
LEVEL AND DISPLACEMENT. FOR OTHER THINGS, LIKE 30033000
|
|
OPERATORS, IT CONTAINS OTHER VALUES: 30034000
|
|
A.FOR ARITHMETIC, LOGICAL, AND RELATIONAL OPERATORS, 30035000
|
|
THE OPERATOR CODE. 30036000
|
|
B.FOR "TRUE" AND "FALSE", ONE AND ZERO. 30037000
|
|
C.FOR INTRINSICS (WHERE POSSIBLE), THE OPERATOR. 30038000
|
|
THESE OPERATORS USE ONLY THE DISP PART. 30038100
|
|
TYPE : USED TO DISCRIMINATE AMONG LOCAL, OWN, FORMAL, ETC. 30039000
|
|
RSVD : EQUALS ONE FOR RESERVED WORDS. 30040000
|
|
F1 : HAS NO STANDARD MEANING 30041000
|
|
CLASS: THE MAJOR CLASSIFICATION OF THE QUANTITY. THIS IS 30042000
|
|
THE PRIMARY VALUE USED BY THE COMPILER TO ANALYZE THE30043000
|
|
SYNTAX OF THE PROGRAM. 30044000
|
|
LINK : FOR IDENTIFIERS, THE INFO INDEX OF ITS ENTRY. 30045000
|
|
ELBAT WORDS COME FROM DIFFERENT PLACES, DEPENDING ON THE KIND 30046000
|
|
OF ITEM. FOR NUMBERS, THEY ARE BUILT BY TABLE. FOR SPECIAL 30047000
|
|
CHARACTERS, THEY COME FROM AN ARRAY CALLED "SPECIAL", WHICH IS 30048000
|
|
INDEXED BY THE CHARACTER ITSELF. NOTE THAT THIS WORD IS GOTTEN FROM30049000
|
|
SPECIAL BY SCAN, AND IS LEFT IN SPEC: ALSO NOTE THAT SOME SPECIAL 30050000
|
|
CHARACTERS--LIKE ., :, $--REQUIRE SPECIAL CONSIDERATION. FOR THESE 30051000
|
|
CASES, THE LINK FIELD HAS A NON-ZERO VALUE. 30052000
|
|
FOR IDENTIFIERS, THE ELBAT WORD COMES DIRECTLY FROM THE FIRST 30053000
|
|
WORD OF THE INFO ENTRY: HOWEVER, THE LINK FIELD IS CHANGED IN THE 30054000
|
|
PROCESS. A BASIC INFO ENTRY CONTAINS, ALSO, THE IDENTIFIER 30055000
|
|
; 30056000
|
|
COMMENT SCAN GETS THE NEXT ENTITY FROM THE SOURCE STRING AND PLACES IT 31000000
|
|
INTO ACCUM, REPORTING ON WHAT IT FOUND BOTH THROUGH ITS 31001000
|
|
VALUE AND RESULT; 31002000
|
|
INTEGER PROCEDURE SCAN; 31003000
|
|
BEGIN 31004000
|
|
LABEL AROUND; 31005000
|
|
LABEL BACK; 31005100
|
|
COUNT ~ ACCUM[1] ~ 0; RCOUNT ~ 63; 31006000
|
|
ACCUMINX ~ ACCUMSTART; % POINTS TO START OF ACCUM 31007000
|
|
DEBLANK; 31008000
|
|
COMMENT CHR NOW CONTAINS THE FIRST CHARACTER OF THE ENTITY31009000
|
|
WE ARE SEEKING, AND NCR HAS ITS ADDRESS. WE NOW 31010000
|
|
LOOK TO SEE WHAT WE HAVE; 31011000
|
|
IF SCAN~RESULT~(SPEC~SPECIAL[CHR]).CLASS<SPASE THEN 31012000
|
|
BEGIN 31013000
|
|
COMMENT IT WAS A LETTER OR DIGIT, SO WE SHALL BUILD AN 31014000
|
|
IDENTIFIER OR NUMBER. THE PSEUDO-CLASSES FOR 31015000
|
|
DIGIT AND LETTER ARE SUCH THAT THE STATEMENT AT 31016000
|
|
AROUND WILL COUNT THE NUMBER OF THE RIGHT KINDS OF31017000
|
|
CHARACTERS; 31018000
|
|
FCR~NCR; % REMEMBER WHERE IT STARTED 31019000
|
|
AROUND: DO COUNT~COUNT+1 UNTIL SPECIAL[CHR~EXAMINE(STEPNCR)].CLASS31020000
|
|
>RESULT; 31021000
|
|
IF COUNT>RCOUNT THEN COMMENT TOO BIG--; 31022000
|
|
BEGIN FLAG(300); COUNT~RCOUNT END; 31023000
|
|
COMMENT WE HAVE FOUND THE END OF SOMETHING: EITHER 31024000
|
|
THE ID/NR OR THE CARD. WE SAVE WHAT WE FOUND31025000
|
|
AND THEN DECIDE WHAT TO DO WITH IT; 31026000
|
|
ACCUMINX ~ MOVECHRS(COUNT, FCR,ACCUMINX); 31027000
|
|
COMMENT NOW SEE WHETHER WE HIT END OF CARD; 31028000
|
|
IF NCR=LCR THEN 31029000
|
|
BEGIN 31030000
|
|
COMMENT END OF CARD. WE READ ANOTHER AND SEE IF THIS 31031000
|
|
ID/NR IS CONTINUED; 31032000
|
|
BACK: 31032100
|
|
NCR~( FCR~READACARD)+BUMPWORD; 31033000
|
|
RCOUNT~RCOUNT-COUNT; 31034000
|
|
COUNT ~ -1; 31035000
|
|
GO AROUND 31036000
|
|
END ELSE IF CHR = "%" THEN GO BACK; 31037000
|
|
ACCUM[1].CHRCNT~COUNT~ COUNT + 63 - RCOUNT; 31038000
|
|
END BUILDING IDS AND NRS ELSE 31039000
|
|
BEGIN 31040000
|
|
COMMENT A SPECIAL CHARACTER, SO WE PUT IT INTO ACCUM; 31041000
|
|
ACCUM[1].[23:7]~CHR+64; 31042000
|
|
BUMPNCR; 31043000
|
|
ACCUM[0]~SPEC 31044000
|
|
END SPECIAL CHARACTERS 31045000
|
|
END SCAN; 31046000
|
|
COMMENT READACARD FINDS THE NEXT HUNK OF SOURCE LANGUAGE TO BE SCANNED,31047000
|
|
RETURNING ITS ADDRESS. IT READS CARDS, MERGING WITH TAPE 31048000
|
|
IF NECESSARY, HANDLES VOID, LIST, NEW TAPE, RESEQUENCING, 31049000
|
|
AND SEQUENCE CHECKING. IT ALSO DIGS OUT DEFINE-STUFF AND 31050000
|
|
PUTS WHERE THEY CAN BE SEEN; 31051000
|
|
INTEGER PROCEDURE READACARD; 31052000
|
|
BEGIN 31053000
|
|
LABEL EOFC,EOFT,BACK,C,T,EXIT; 31054000
|
|
LABEL LISTEM; 31054100
|
|
IF DONE THEN 31055000
|
|
BEGIN READACARD~ (LCR~CLCR-8) -1; 31056000
|
|
GO TO EXIT 31057000
|
|
END; 31058000
|
|
IF LASTUSED { 5 THEN GO BACK; 31059000
|
|
COMMENT MUST BE RESCANNING A DEFINE--MOVE IT FROM ADDL TO 31060000
|
|
WHEREVER THE LAST WORD WAS; 31061000
|
|
MOVEIT(ADDL[(LASTUSED~LASTUSED+1).LINKR,LASTUSED.LINKC], 31062000
|
|
READACARD~LCR-1); 31063000
|
|
GO TO EXIT; 31064000
|
|
COMMENT NOW THE END-OF-FILE ROUTINES FOR CARD AND TAPE; 31065000
|
|
EOFC: IF GTI1~LASTUSED=1 THEN GTI1~MKABS(CARD(0)); 31066000
|
|
COMMENT FORCE EOF NO LABEL IF CARD-ONLY, OTHERWISE USE 31067000
|
|
TAPE-ONLY; 31068000
|
|
LASTUSED~5; 31069000
|
|
IF GTI1=3 THEN GO TO C COMMENT TBUFF WASNT VALID; 31070000
|
|
ELSE GO TO T; 31071000
|
|
EOFT: IF LASTUSED=5 THEN GT1~MKABS(TAPE(0)) ELSE CLOSE(TAPE); 31072000
|
|
LASTUSED~1; COMMENT CARDS ONLY; 31073000
|
|
GO TO T; 31074000
|
|
BACK: IF LASTUSED{3 THEN READ(CARD,10,CBUFF[*])[EOFC]; 31075000
|
|
C: IF LASTUSED}3 THEN READ(TAPE,10,TBUFF[*])[EOFT]; 31076000
|
|
T: IF LASTUSED=1 THEN LCR~CLCR ELSE 31077000
|
|
IF LASTUSED=5 THEN LCR~TLCR ELSE 31078000
|
|
IF GREATER(CLCR,TLCR) THEN 31079000
|
|
BEGIN LCR~TLCR; LASTUSED~4 END ELSE 31080000
|
|
BEGIN LCR~CLCR; 31081000
|
|
IF EQUAL(CLCR,TLCR) THEN LASTUSED~3 ELSE LASTUSED~2 31082000
|
|
END CARD SELECTION; 31083000
|
|
COMMENT LCR NOW POINTS TO THE SEQUENCE NUMBER OF THE NEXT 31084000
|
|
CARD TO BE USED; 31085000
|
|
IF VOIDING THEN 31086000
|
|
IF GREATER(LASTSEQUENCE+1,LCR) THEN GO BACK 31087000
|
|
ELSE VOIDING~FALSE 31088000
|
|
COMMENT IF WE HAD SEEN A $ VOID, WE JUST CLEARED IT BY 31089000
|
|
GOING BACK TO READ AGAIN UNLESS THE VOID WAS 31090000
|
|
SATISFIED; 31091000
|
|
ELSE 31091100
|
|
IF LISTING THEN 31091200
|
|
IF GREATER(LASTSEQUENCE+1,LCR) THEN 31091300
|
|
BEGIN SEQ ~ FALSE; 31091310
|
|
BLANKOUT(2,LBUFF[14]); 31091320
|
|
GO LISTEM; 31091330
|
|
END 31091340
|
|
ELSE LISTING~FALSE; 31091400
|
|
IF SEQ~GREATER(LASTSEQUENCE,LCR) THEN SEQERR(LASTSEQUENCE, 31092000
|
|
LBUFF[14]) ELSE BLANKOUT(2,LBUFF[14]); 31093000
|
|
COMMENT SET UP SEQUENCE ERROR MESSAGE IF NECESSARY; 31094000
|
|
GTI1~MOVECHRS(8,LCR,LASTSEQUENCE); 31095000
|
|
COMMENT SAVE OFF THE SEQUENCE NUMBER; 31096000
|
|
IF LISTOG OR NEWTOG OR SEQ THEN 31097000
|
|
IF EXAMINE(READACARD~LCR-9)!"$" THEN 31098000
|
|
BEGIN COMMENT WRITE THE CARD OUT SOMEWHERE; 31099000
|
|
IF RESEQTOG THEN % CHANGE THE SEQUENCE NR. 31100000
|
|
BEGIN CONVERTOUT(RESEQNR,LCR); 31101000
|
|
RESEQNR ~ RESEQNR + RESEQINC 31102000
|
|
END RESEQUENCING; 31103000
|
|
IF NEWTOG THEN % WRITE IT ONTO NEWTAPE 31104000
|
|
IF LASTUSED<4 THEN WRITE(NEWTAPE,10,CBUFF[*]) 31105000
|
|
ELSE WRITE(NEWTAPE,10,TBUFF[*]); 31106000
|
|
LISTEM: 31106100
|
|
IF LISTOG OR SEQ THEN % WRITE IT ON THE PRINTER 31107000
|
|
BEGIN 31108000
|
|
IF LISTOG.[46:1] THEN DATIME; % FIRST LINE 31109000
|
|
EDITLINE(LCR-9,IF LISTING THEN 6 ELSE LASTUSED,1, 31110000
|
|
SEGNO,L DIV 6,GTI1~L MOD 6, LBUFF); 31111000
|
|
WRITELBUFF; 31112000
|
|
END LISTING; 31113000
|
|
IF LISTING THEN GO BACK; 31113100
|
|
END SOURCE OUTPUT ELSE ELSE READACARD ~ LCR - 9; 31114000
|
|
PRT27 ~ SEQCONVERT(LCR); 31114010
|
|
ZOT("%",LCR); 31115000
|
|
CARDCOUNT ~ CARDCOUNT + 1; 31116000
|
|
EXIT: 31117000
|
|
END READACARD; 31118000
|
|
PROCEDURE DATIME; % PRODUCES HEADING LINE FOR LISTING. 31119000
|
|
BEGIN 31120000
|
|
INTEGER DAY,MO,DA,YR,HR,MN; 31121000
|
|
LABEL OWT; 31122000
|
|
FORMAT DT(X25,"B 6 5 0 0 E S P O L C O M P I L A T I O N,",31123000
|
|
A8,"DAY, ",2(I2,"/"),I2,", ",A2,":"A2" H."); 31124000
|
|
DA~(((DAY~TIME(0)).[30:6]|10)+DAY.[36:6])|10+DAY.[42:6]; 31125000
|
|
YR~HR~DAY.[18:6]|10+DAY.[24:6]; 31126000
|
|
FOR DAY~31,REAL(YR MOD 4=0)+28,31,30,31,30,31,31,30,31,30 DO 31127000
|
|
IF DA{DAY THEN GO OWT ELSE 31128000
|
|
BEGIN MO~MO+1; DA~DA-DAY END; 31129000
|
|
OWT: IF MO<2 THEN BEGIN MN~MO+11; HR~YR-1 END ELSE MN~MO-1; 31130000
|
|
MO~MO+1; 31131000
|
|
DAY~((MN|26-2)DIV 10+DA+HR+HR DIV 4) MOD 7; 31132000
|
|
HR~(HR~TIME1 DIV 216000)MOD 10+(HR DIV 10)|64; 31133000
|
|
MN~(MN~(TIME1 DIV 3600)MOD 60)MOD 10 +(MN DIV 10)|64; 31134000
|
|
WRITE(LINE[DBL],DT,IF DAY=3 THEN " THURS" ELSE IF DAY<3 THEN 31135000
|
|
IF DAY=1 THEN " TUES" ELSE IF DAY<1 THEN" MON"ELSE 31136000
|
|
"WEDNES"ELSE IF DAY=5 THEN" SATUR"ELSE IF DAY<5 THEN 31137000
|
|
" FRI"ELSE " SUN",MO,DA,YR,HR,MN); 31138000
|
|
LISTOG~LISTOG AND TRUE; 31139000
|
|
END DATIME; 31140000
|
|
PROCEDURE GNC; % GET NEXT CHARACTER & PUT IT INTO ACCUM 31141000
|
|
BEGIN 31142000
|
|
ACCUMINX ~ MOVECHRS(1,NCR,ACCUMINX); 31143000
|
|
COUNT ~ COUNT+1; BUMPNCR 31144000
|
|
END GNC; 31145000
|
|
BOOLEAN FONY; % CAUSES TABLE TO STUTTER PROPERLY. 31145100
|
|
BOOLEAN FIELDING; %KEEPS TABLE FROM STUTTERING IMPROPERLY. 31145200
|
|
INTEGER PROCEDURE TABLE(P); VALUE P; INTEGER P; 31146000
|
|
COMMENT TABLE IS THE REAL SCANNER: IT PRE-PROCESSES THE 31147000
|
|
RAW SOURCE LANGUAGE BY LOOKING UP IDENTIFIERS, TRYING31148000
|
|
TO CLASSIFY THEM, BY CONVERTING NUMBERS, AND BY 31149000
|
|
GENERALLY REPLACING THINGS BY ELBAT WORDS REPRESENTIN31150000
|
|
THEM. IT PERFORMS OTHER TRANSFORMATIONS ON THE TEXT, 31151000
|
|
SUCH AS INITIATING AND TERMINATING DEFINE-EXPANSION, 31152000
|
|
DELETING COMMENTS, AND OTHER GOOD STUFF; 31153000
|
|
BEGIN 31154000
|
|
LABEL RESCAN, COMPLAIN, FAKEIT, ON, FOUND,FPART,FINISHNUMBER;31155000
|
|
LABEL FINISH, INN, AWAY; 31155100
|
|
OWN REAL HIDYPLACE; 31155200
|
|
LABEL UNRECURSE, THERE, SOMEWHERE; 31155300
|
|
INTEGER HOOKUP; 31156000
|
|
IF P < 0 THEN GO RESCAN ELSE 31156100
|
|
WHILE P}NXTELBT DO 31157000
|
|
BEGIN 31158000
|
|
IF FONY THEN GO INN; 31158100
|
|
RESCAN: IF SCAN>SPASE THEN COMMENT SPECIAL CHARACTER; 31159000
|
|
BEGIN ENDTOG ~ FALSE; 31160000
|
|
CASE SPEC.LINKC OF 31161000
|
|
BEGIN ; COMMENT CASE 0= NO FUNNY BUSINESS; 31162000
|
|
COMMENT CASE 1= CROSSHATCH; 31163000
|
|
IF DEFINECTR = 0 31164000
|
|
THEN BEGIN COMMENT TRY TO UNHOOK DEFINE; 31165000
|
|
UNHOOK; 31166000
|
|
GO RESCAN 31167000
|
|
END CROSSHATCH CASE; 31168000
|
|
COMMENT CASE 2=ATSIGN. BUILD OCTAL; 31169000
|
|
IF P = -2 THEN GO UNRECURSE ELSE 31169100
|
|
IF DEFINECTR = 0 THEN 31170000
|
|
BEGIN DEBLANK; DPTOG ~ FALSE; 31171000
|
|
IF CHR<8 THEN 31172000
|
|
BEGIN 31172100
|
|
IF SCAN = DIGIT THEN 31173000
|
|
IF COUNT { 16 THEN 31174000
|
|
IF COUNT ! 16 OR ACCUM[1].FIRSTCHR { 3 THEN 31175000
|
|
IF NOT OCTALCONVERT(ACCUMSTART,COUNT,16-COUNT, 31176000
|
|
THI) THEN GO FINISHNUMBER; 31177000
|
|
COMPLAIN: FLAG(301); GO RESCAN 31178000
|
|
END 31178100
|
|
END AT SIGN; 31179000
|
|
COMMENT CASE 3=COLON. CHECK FOR :=; 31180000
|
|
BEGIN 31181000
|
|
DEBLANK; 31182000
|
|
IF CHR="=" THEN 31183000
|
|
BEGIN CHR~"~"; 31184000
|
|
FAKEIT: RESULT~(ACCUM[0]~SPEC~SPECIAL[CHR]).CLASS; 31185000
|
|
ACCUM[1].FIRSTCHR ~ CHR; 31185100
|
|
BUMPNCR 31186000
|
|
END OF SUBSTITUTE CHARACTER; 31187000
|
|
END COLON CASE; 31188000
|
|
COMMENT CASE 4=DOLLAR. CALL WALLY; 31189000
|
|
BEGIN DOLLARCARD; GO RESCAN END; 31190000
|
|
COMMENT CASE 5=RIGHT PAREN.; 31191000
|
|
BEGIN 31192000
|
|
DEBLANK; 31193000
|
|
IF CHR=""" THEN COMMENT A FUNNY COMMA, I HOPE; 31194000
|
|
BEGIN 31195000
|
|
DO BUMPNCR UNTIL EXAMINE(NCR)="""; 31196000
|
|
BUMPNCR; 31197000
|
|
DEBLANK; 31198000
|
|
IF CHR!"(" THEN GO COMPLAIN; 31199000
|
|
CHR~","; 31200000
|
|
GO FAKEIT 31201000
|
|
END FUNNY COMMA 31202000
|
|
END RIGHT PAREN CASE; 31203000
|
|
BEGIN COMMENT PERCENT; 31204000
|
|
IF NCR!LCR-9 THEN 31204100
|
|
NCR ~ READACARD; 31205000
|
|
GO TO RESCAN; 31205100
|
|
END; 31205300
|
|
COMMENT CASE 7=QUOTE. MAKE A STRING; 31206000
|
|
UNRECURSE: IF P < 0 THEN 31206100
|
|
BEGIN TABLE~RESULT; GO AWAY END ELSE 31206200
|
|
BEGIN 31207000
|
|
MAXCSZ ~ CSZ ~ DEFAULTSIZE; 31208000
|
|
SPEC.CLASS ~ IF GOBBLE(FALSE) THEN STRING 31209000
|
|
ELSE STRNGCON; 31210000
|
|
END QUOTE CASE; 31214000
|
|
COMMENT CASE 8=PERIOD; 31215000
|
|
IF P = -2 THEN GO UNRECURSE ELSE 31215100
|
|
IF EXAMINE(NCR){9 AND CONTEXT!3 THEN 31216000
|
|
IF DEFINECTR = 0 THEN 31217000
|
|
BEGIN THI~TLO~TCOUNT~C~REAL(FLAGS~FALSE); 31218000
|
|
GO TO FPART 31219000
|
|
END PERIOD CASE 31220000
|
|
9 IS MULTIPLY TRY FOR TWO; 31221000
|
|
IF DEFINECTR = 0 THEN 31222000
|
|
BEGIN 31223000
|
|
DEBLANK; 31224000
|
|
IF CHR = "|" THEN 31225000
|
|
BEGIN BUMPNCR; SPEC.ADDRESS ~ MULX END 31226000
|
|
END MULTIPLY CASE; 31227000140621PK
|
|
END 31228000
|
|
END SPECIAL CHARACTER CASES ELSE 31229000
|
|
IF RESULT=LETTER THEN COMMENT IDENTIFIER-TYPE THING; 31230000
|
|
BEGIN 31231000
|
|
IF (GT1~(SPEC~STACKHEAD[SCRAM~(Q~ACCUM[1])MOD 125]) 31232000
|
|
.LINKR) + GT2~SPEC.LINKC ! 0 THEN 31233000
|
|
DO IF(SPEC~INFO[GT1,GT2]).[18:30] = Q THEN 31234000
|
|
IF COUNT < 5 THEN GO ON ELSE 31235000
|
|
IF CMPCHREQL(COUNT-4,ACCUM[2],INFO[GT1,GT2+1]) 31236000
|
|
THEN 31237000
|
|
ON: BEGIN 31238000
|
|
SPEC ~(GT3 ~ INFO[GT1,GT2-1])>1[33:41:7] 31239000
|
|
&(GT2-1)[40:40:8]; 31240000
|
|
GO TO FOUND 31241000
|
|
END 31242000
|
|
UNTIL (GT1~SPEC.CONR)+GT2~SPEC.CONC = 0; 31243000
|
|
SPEC ~ 0; COMMENT WE DID NOT FIND IT; 31244000
|
|
FOUND: 31245000
|
|
IF SPEC.CLASS = COMMENTV THEN 31246000
|
|
IF CONTEXT!3 OR DEFINECTR!0 THEN 31247000
|
|
BEGIN WHILE EXAMINE(NCR)!";" DO BUMPNCR; 31248000
|
|
BUMPNCR; 31249000
|
|
GO RESCAN 31250000
|
|
END COMMENT REMOVER; 31251000
|
|
IF CONTEXT { 1 THEN 31252000
|
|
IF SPEC.LINK > RSVDX THEN %%%%%%%KLUDGE%%%%%%%%%%%% 31253000
|
|
IF SPEC.RSVD =0 THEN 31254000
|
|
IF SPEC .LINK < NINFOO THEN 31255000
|
|
SPEC.CLASS ~ UNKNOWNID; 31256000
|
|
IF DEFINECTR = 0 THEN 31256900
|
|
IF CONTEXT!3 THEN 31257000
|
|
IF SPEC.CLASS = DEFINDID THEN 31258000
|
|
BEGIN 31259000
|
|
LITERALS ~ FALSE; 31259100
|
|
HOOKUP ~ GT3.LINK; 31260000
|
|
IF GT1 ~ SPEC.ADDRESS ! 0 31261000
|
|
THEN BEGIN 31262000
|
|
HOOKUP ~ HOOKUP & NEXTINFO[18:33:15]; 31263000
|
|
IF ASSOCIATE (SPEC.ADDRESS) 31264000
|
|
THEN GO RESCAN; 31265000
|
|
END; 31266000
|
|
HOOK(HOOKUP); 31267000
|
|
GO RESCAN; 31268000
|
|
END START OF DEFINE SCAN; 31269000
|
|
END IDENTIFIER TYPES ELSE 31270000
|
|
IF DEFINECTR = 0 THEN 31271000
|
|
BEGIN COMMENT NUMBERS; 31272000
|
|
TCOUNT~NLO~TLO~NHI~REAL(FLAGS ~ FALSE); 31273000
|
|
IF COUNT=1 THEN THI~ACCUM[1].FIRSTCHR ELSE 31274000
|
|
CONVERTINTO(THI,TLO); 31275000
|
|
IF P < 0 THEN GO FINISHNUMBER; 31275050
|
|
IF NOT FIELDING THEN IF CONTEXT!3 THEN 31275055
|
|
IF COUNT { 3 THEN 31275060
|
|
IF HOOKUP~TABLE(-2)=PERIODV THEN GO THERE ELSE 31275100
|
|
IF HOOKUP = ATSIGN THEN GO SOMEWHERE ELSE 31275140
|
|
IF HOOKUP ! STRNGCON THEN GO FINISHNUMBER ELSE 31275150
|
|
BEGIN MAXCSZ ~ 0; 31275160
|
|
SPEC.CLASS ~ IF GOBBLE(THI MOD 10 = 0 OR 31275200
|
|
BOOLEAN(2)) 31275250
|
|
THEN STRING ELSE STRNGCON; 31275300
|
|
GO FINISH 31275600
|
|
END; 31275700
|
|
IF CHR = "." THEN 31276000
|
|
BEGIN BUMPNCR; 31277000
|
|
THERE: DOUBLE(THI, TLO, 1.0, 0, |, ~, THI, TLO); 31278000
|
|
IF EXAMINE(NCR){9 THEN 31279000
|
|
BEGIN 31280000
|
|
FPART: IF SCAN!DIGIT THEN GO COMPLAIN; 31281000
|
|
IF COUNT=1 THEN NHI~ACCUM[1].FIRSTCHR ELSE 31282000
|
|
CONVERTINTO(NHI,NLO); 31283000
|
|
TCOUNT~COUNT 31284000
|
|
END FRACTION PART; 31285000
|
|
END DOT PART; 31286000
|
|
IF EXAMINE(NCR)="@" THEN 31287000
|
|
BEGIN BUMPNCR; 31288000
|
|
SOMEWHERE: DPTOG ~ EXAMINE(NCR) = "@"; 31289000
|
|
IF DPTOG THEN BUMPNCR; 31289100
|
|
IF SCAN=ADDOP THEN 31290000
|
|
BEGIN T~CHR; IF SCAN!DIGIT THEN GO COMPLAIN31291000
|
|
END SIGN OF EXPONENT ELSE 31292000
|
|
IF RESULT!DIGIT THEN GO COMPLAIN; 31293000
|
|
IF COUNT=1 THEN C~ACCUM[1].FIRSTCHR ELSE 31294000
|
|
CONVERTINTO(C,GTI1); 31295000
|
|
IF T="-" THEN C~-C; 31296000
|
|
END EXPONENT PART ELSE C~T~0; 31297000
|
|
COMMENT THE NUMBER IS SPLIT ALL APART: 31298000
|
|
HIGH LOW SIZE 31299000
|
|
INTEGER THI TLO - 31300000
|
|
FRACTION NHI NLO TCOUNT 31301000
|
|
EXPONENT C JUNK COUNT 31302000
|
|
NOW IT IS TIME TO PUT THE PIECES TOGETHER; 31303000
|
|
DPTOG~(GT1~THI|1.0).[3:6]+(NHI|1.0).[3:6]< 31304000
|
|
REAL(NHI|THI!0)|13 OR DPTOG; 31305000
|
|
IF ABS(GT1.[3:6]>1[1:2:1]+(T~TEN[ABS(C)]).[3:6] 31306000
|
|
&C[1:1:1]+12)>63 THEN 31307000
|
|
FLAG(303) COMMENT NUMBER IS TOO BIG; ELSE 31308000
|
|
BEGIN COMMENT THE NUMBER FITS: PUT THE INTEGER AND 31309000
|
|
FRACTION PARTS TOGETHER; 31310000
|
|
IF TCOUNT>0 THEN 31311000
|
|
IF DPTOG THEN BEGIN 31312000
|
|
FOR N~0 STEP 16 UNTIL TCOUNT DO 31313000
|
|
DOUBLE(THI,TLO,TEN[MIN(TCOUNT-N,16)],0,|, 31314000
|
|
~,THI,TLO); 31315000
|
|
DOUBLE(THI,TLO,NHI,NLO,+,~,THI,TLO) 31316000
|
|
END DP ELSE 31317000
|
|
THI~THI|TEN[TCOUNT]+NHI; 31318000
|
|
COMMENT THE NUMBER IS IN (THI,TLO) AS AN 31319000
|
|
INTEGER (MAYBE NORMALIZED, BUT WITH ZEROES 31320000
|
|
TO THE RIGHT OF THE OCTAL POINT). WE NOW 31321000
|
|
ADJUST IT BY THE APPROPRIATE POWER OF TEN. 31322000
|
|
NOTE THAT ONLY THE POWERS 0 THRU 16 OF TEN 31323000
|
|
(@0 THRU @16) CAN BE REPRESENTED EXACTLY IN31324000
|
|
A SINGLE WORD, SO WE USE ONLY THOSE VALUES 31325000
|
|
FOR DP CONVERSION; 31326000
|
|
IF DPTOG THEN 31327000
|
|
IF C~C-TCOUNT<0 THEN 31328000
|
|
FOR N~0 STEP -16 UNTIL C DO 31329000
|
|
DOUBLE(THI,TLO,TEN[MIN(N-C,16)],0,/, 31330000
|
|
~,THI,TLO) 31331000
|
|
ELSE 31332000
|
|
FOR N~0 STEP 16 UNTIL C DO 31333000
|
|
DOUBLE(THI,TLO,TEN[MIN(C-N,16)],0,|, 31334000
|
|
~,THI,TLO) 31335000
|
|
ELSE 31336000
|
|
IF C~C-TCOUNT<0 THEN THI~THI/TEN[-C] ELSE 31337000
|
|
IF C!0 THEN THI~TEN[C]|THI; 31338000
|
|
END PUTTING PIECES TOGETHER; 31339000
|
|
FINISHNUMBER: 31340000
|
|
COMMENT HERE WE SHOULD THINK ABOUT CLASSIFYING THE 31341000
|
|
NUMBER, ONCE WE DECIDE WHAT CLASSIFICATIONS 31342000
|
|
WE NEED; 31343000
|
|
SPEC.CLASS ~ NUMBER; 31344000
|
|
FINISH: 31344900
|
|
END NUMBERS; 31345000
|
|
IF P < 0 THEN COMMENT GOBBLE IS RUNNING,31345010
|
|
SO WE LEAVE THINGS LAYING AROUND 31345020
|
|
TO PICK UP--IF GOBBLE DIDNT TURN 31345030
|
|
OFF FONY; 31345040
|
|
BEGIN 31345100
|
|
FONY ~TRUE; 31345110
|
|
RCOUNT ~ COUNT; 31345150
|
|
TABLE ~ SPEC.CLASS; 31345160
|
|
HIDYPLACE ~ SPEC; 31345170
|
|
GO AWAY; 31345190
|
|
INN: FONY ~ FALSE; 31345500
|
|
SPEC ~ HIDYPLACE; 31345550
|
|
COUNT ~ RCOUNT; 31345600
|
|
END; 31345990
|
|
COMMENT NOW WE HAVE SOMETHING, SO WE PUT THE CODED 31346800
|
|
VERSION INTO ELBAT; 31347000
|
|
ELBAT[NXTELBT]~SPEC; 31348000
|
|
COMMENT CHECK THAT ELBAT IS NOT FULL. IF 31349000
|
|
IT IS, DIDDLE IT SO THAT IT WONT 31350000
|
|
OVERFLOW. BE SURE TO SAVE THE LAST 31351000
|
|
10 THINGS SEEN; 31352000
|
|
IF NXTELBT~NXTELBT+1 > 74 THEN 31353000
|
|
IF MACRO THEN 31354000
|
|
BEGIN 31355000
|
|
MOVE(10,ELBAT[65],ELBAT[0]); 31356000
|
|
NXTELBT~10; I~I-65; P~P-65; 31357000
|
|
END ELBAT ADJUSTMENT; 31358000
|
|
SCANCOUNT ~ SCANCOUNT + 1; 31359000
|
|
END OF WHILELOOP ON P VS NXTELBT; 31360000
|
|
COMMENT NOW WE KNOW THAT ELBAT[P] IS VALID; 31361000
|
|
IF TABLE ~ ELBAT[P].CLASS = COMMENTV THEN 31362000
|
|
BEGIN THI ~ GIT(GT1~ELBAT[P]); 31363000
|
|
FLAGS ~ BOOLEAN(GT1.[1:3]); 31364000
|
|
IF DPTOG THEN TLO~GIT(GT1.LINK -1); 31364100
|
|
IF GT1.[4:1]=1 THEN 31364200
|
|
NEXTADDL ~ NEXTADDL -REAL(DPTOG) -1; 31364300
|
|
ELBAT[P].CLASS ~ TABLE ~ NUMBER; 31365000
|
|
END; 31365100
|
|
AWAY: 31365900
|
|
END TABLE; 31366000
|
|
PROCEDURE DEBLANK; 31367000
|
|
BEGIN 31368000
|
|
LABEL INN, ON; 31368100
|
|
INTEGER STREAM PROCEDURE UB(NCR); VALUE NCR; 31369000
|
|
BEGIN LABEL L; 31370000
|
|
SI~NCR; 31371000
|
|
IF SC=" " THEN BEGIN L: SI~SI+1; IF SC=" " THEN GO L END; 31372000
|
|
UB ~ SI 31373000
|
|
END UB; 31374000
|
|
ON: WHILE NCR ~ UB(NCR) = LCR DO INN: NCR ~ READACARD; 31375000
|
|
IF CHR ~ EXAMINE(NCR) = "%" THEN GO INN; 31375500
|
|
IF CHR = "#" THEN IF DEFINECTR = 0 THEN 31375600
|
|
BEGIN BUMPNCR; UNHOOK; GO ON END; 31376000
|
|
END; 31377000
|
|
COMMENT AND THEN THERE ARE THESE GUYS, AGAIN; 31378000
|
|
PROCEDURE STEPIT; ELCLASS~TABLE(I~I+1); 31379000
|
|
INTEGER PROCEDURE STEPI; STEPI~ELCLASS~TABLE(I~I+1); 31380000
|
|
PROCEDURE CONVERTINTO(HI,LO); REAL HI,LO; 31381000
|
|
COMMENT CONVERTS THE NUMBER IN ACCUM INTO INTERNAL FORM, 31382000
|
|
IN H AND L. IT TRIES TO KEEP THINGS INTEGER; 31383000
|
|
BEGIN REAL J,K; 31384000
|
|
HI~INPUTCONVERT(ACCUM[1],4,N~COUNT.[45:3]); 31385000
|
|
WHILE N<COUNT DO 31386000
|
|
BEGIN IF (J~(K~INPUTCONVERT(ACCUM[N.[42:3]+1],N.[45:3]+4,8)) 31387000
|
|
+HI|100000000){549755813887 THEN HI~J ELSE 31388000
|
|
DOUBLE(HI,LO,@8,0,|,K,0,+,~,HI,LO); 31389000
|
|
N~N+8 31390000
|
|
END LOOP 31391000
|
|
END CONVERTINTO; 31392000
|
|
PROCEDURE HOOK(INDEX); VALUE INDEX; INTEGER INDEX; 31393000
|
|
COMMENT HOOK CAUSES THE SCANNER TO START USING A PART OF ADDL AS 31394000
|
|
THE SOURCE OF THE SYMBOLIC. INDEX IS THE LOCATION IN ADDL31395000
|
|
OF THE BEGINNING; 31396000
|
|
IF DEFINEINDEX > 47 THEN FLAG (302) ELSE 31397000
|
|
BEGIN INDEX ~ INDEX - 1; 31398000
|
|
DEFINEARRAY[DEFINEINDEX] ~ LASTUSED & INDEX [3:18:30]; 31399000
|
|
LASTUSED ~ INDEX.[33:15]; 31400000
|
|
DEFINEARRAY[DEFINEINDEX + 2] ~ -NCR 31401000
|
|
& LCR [12:30:18] 31402000
|
|
& DEFINECTR [4:40:8]; 31403000
|
|
DEFINECTR ~ 0; 31404000
|
|
IF DEFINEADDR = 0 THEN DEFINEADDR ~ MKABS(DEFINEARRAY)-1; 31405000
|
|
LCR ~ (DEFINEINDEX ~ DEFINEINDEX + 3) + DEFINEADDR; 31406000
|
|
NCR ~ READACARD 31407000
|
|
END HOOKING UP A DEFINE TYPE ACTION; 31408000
|
|
PROCEDURE UNHOOK; 31409000
|
|
COMMENT UNHOOK RETURNS THE SCANNER FROM A DEFINE-TYPE ACTION, BY 31410000
|
|
UNDOING THE WORK OF HOOK; 31411000
|
|
IF DEFINEINDEX { 0 THEN FLAG(304) ELSE 31412000
|
|
BEGIN 31413000
|
|
LCR ~ (GT1 ~ DEFINEARRAY[DEFINEINDEX -1]).[12:18]; 31414000
|
|
NCR ~ GT1.[30:18]; 31415000
|
|
DEFINECTR ~ GT1.[4:8]; 31416000
|
|
LASTUSED~(GT1~DEFINEARRAY[DEFINEINDEX~DEFINEINDEX-3]).[33:15]; 31417000
|
|
IF (GT1 ~ GT1.[3:15]) ! 0 THEN 31418000
|
|
BEGIN NEXTADDL ~ TAKE(GT1).LINK; PURGE(-NEXTINFO ~ GT1) END; 31418100
|
|
END UNHOOKING THE DEFINE ACTION; 31419000
|
|
PROCEDURE DOLLARCARD; 31420000
|
|
COMMENT THIS CODE HANDLES $ CONTROL CARD OPTIONS; 31421000
|
|
BEGIN LABEL QUIT; 31422000
|
|
LABEL LISTEM; 31422100
|
|
ZOT("[", LCR); 31422900
|
|
LCR~LCR+BUMPCHAR; 31423000
|
|
COUNT~RESULT~ACCUM[1]~0; N~SCAN; 31424000
|
|
Q~ACCUM[1]; 31425000
|
|
IF Q="4VOID" THEN 31426000
|
|
BEGIN VOIDING~TRUE; 31427000
|
|
LISTEM: 31427100
|
|
DEBLANK; 31428000
|
|
GT1~MOVECHRS(8,NCR,LASTSEQUENCE+1); 31429000
|
|
COMMENT STORES VOID SEQUENCE NO.; 31430000
|
|
NCR ~ LCR.[CF]; N ~ SCAN; 31430100
|
|
GO QUIT; 31431000
|
|
END; 31432000
|
|
IF Q="7LIST" THEN 31432100
|
|
BEGIN LISTING~TRUE; GO LISTEM END; 31432200
|
|
IF Q="4DUMP" THEN 31433000
|
|
IF SCAN ! LETTER THEN 31434000
|
|
BEGIN DUMPIT(LBUFF); GO QUIT END ELSE 31435000
|
|
BEGIN DUMPTOG ~ ACCUM[1] = "2ON00"; GO QUIT END; 31436000
|
|
IF Q="4TAPE" THEN 31437000
|
|
BEGIN 31437100
|
|
IF LASTUSED=1 THEN LASTUSED~3; 31437200
|
|
TLCR~MKABS(TBUFF[9]); 31437300
|
|
END ELSE 31437400
|
|
BEGIN IF Q!"4CARD" THEN GO QUIT; 31438000
|
|
IF LASTUSED}5 THEN ELSE LASTUSED~1; 31439000
|
|
END; 31440000
|
|
LISTOG.[47:1]~FALSE; 31441000
|
|
INFOTOG~SAVETOG~ 31441100
|
|
DONSBUG ~ %%%%%%%%%%%%%%%%%%%% 31442000
|
|
PRTOG~NEWTOG~RESEQTOG~DEBUGTOG~FALSE; 31443000
|
|
DO BEGIN 31444000
|
|
COUNT~RESULT~ACCUM[1]~0; N~SCAN; 31445000
|
|
Q~ACCUM[1]; 31446000
|
|
IF Q = "4LIST" THEN LISTOG.[47:1] ~ TRUE ELSE 31447000
|
|
IF Q="3NEW0" THEN NEWTOG~TRUE ELSE 31448000
|
|
IF Q="3SEQ0" THEN RESEQTOG~TRUE ELSE 31449000
|
|
IF Q="3PRT0" THEN PRTOG~TRUE ELSE 31450000
|
|
IF RESULT=DIGIT THEN CONVERTINTO(RESEQNR,GT1) ELSE 31451000
|
|
IF RESULT=ADDOP THEN 31452000
|
|
BEGIN 31453000
|
|
N ~ SCAN; 31454000
|
|
IF RESULT= DIGIT THEN CONVERTINTO(RESEQINC,GT1);31455000
|
|
END ELSE 31458000
|
|
IF Q="#PROC" THEN 31458100
|
|
BEGIN 31458200
|
|
IF REAL(SEPARATOG)<0 THEN SEPARATOG~BOOLEAN(2); 31458300
|
|
END ELSE 31458400
|
|
IF Q="6SVIN" THEN 31458500
|
|
BEGIN 31458600
|
|
IF REAL(SVINFOTOG)<0 THEN SVINFOTOG~TRUE; 31458700
|
|
END ELSE 31458800
|
|
IF Q="6DEBU" THEN DEBUGTOG~TRUE ELSE 31459000
|
|
IF Q = "7DONS" THEN DONSBUG ~ TRUE ELSE 31460000
|
|
IF Q ="4INFO" THEN INFOTOG ~ TRUE ELSE 31460100
|
|
IF Q ="4SAVE" THEN SAVETOG ~ TRUE ELSE 31460200
|
|
IF Q = "4POOL" THEN POOLTOG ~ TRUE ELSE 31460300
|
|
IF Q = "4DECK" THEN DECKTOG ~ POOLTOG ~ TRUE ELSE 31460900
|
|
IF Q!"4TAPE" THEN GO QUIT; 31461000
|
|
END 31462000
|
|
UNTIL FALSE; 31463000
|
|
QUIT: 31464000
|
|
END DOLLARDCARD; 31465000
|
|
BOOLEAN PROCEDURE ASSOCIATE (SPEC); VALUE SPEC; INTEGER SPEC; 31466000
|
|
BEGIN COMMENT ASSOCIATE CHECKS THE PARAMETERIZED DEFINE SYNTAX31467000
|
|
AT INVOCATION TIME AND FORCES THE DECLARATION OF A PHONY 31468000
|
|
DEFINED ID THAT POINTS TO THE TEXTUAL MATERIAL ASSOCIATED 31469000
|
|
WITH THE PARAMETER. THE ID HAS THE FORM: "ANQO", WHERE 31470000
|
|
A IS THE LETTER "A", N IS THE LEFT TO RIGHT SEOUENTIAL 31471000
|
|
APPEARANCE NUMBER OF THE PARAMETER AND Q IS A QUESTION 31472000
|
|
MARK. ;31473000
|
|
DEFINE SCAT = IF E ! 0 THEN ERR(E); 31474000
|
|
ASSOCIATE ~ TRUE; 31475000
|
|
GO QUIT;#, 31476000
|
|
LASTI = LASTINFO.LINKR, LASTINFO.LINKC#; 31477000
|
|
LABEL QUIT; 31478000
|
|
INTEGER T, J, E, FINAL, SAVELCLASS; 31479000
|
|
INTEGER CONTEX; 31479100
|
|
DOUBLE (CONTEXT, 3, ~, CONTEX, CONTEXT); 31479200
|
|
SAVELCLASS ~ ELCLASS; 31479500
|
|
ASSOCIATE ~ FALSE; 31480000
|
|
MACRO ~ FALSE; 31481000
|
|
DEFINECTR ~ DEFINECTR + 1; 31481100
|
|
IF ELCLASS ~ TABLE (NXTELBT) = LFTPRN 31482000
|
|
THEN FINAL ~ RTPARN 31483000
|
|
ELSE IF ELCLASS = LFTBRKT 31484000
|
|
THEN FINAL ~ RTBRKT 31485000
|
|
ELSE BEGIN E ~ 305; SCAT END; 31486000
|
|
NXTELBT ~ NXTELBT -1; 31487000
|
|
DO BEGIN 31488000
|
|
ELCLASS ~ TABLE(NXTELBT); 31489000
|
|
NXTELBT ~ NXTELBT -1; 31490000
|
|
MACRO ~ FALSE; 31491000
|
|
IF -(T ~ TEXT(DEFINEP, FINAL)) > 0 31492000
|
|
THEN BEGIN SCAT END 31493000
|
|
ELSE BEGIN 31494000
|
|
Q ~ 31495000
|
|
ACCUM [1] ~ DEFINFO [J]; 31496000
|
|
COUNT ~ 3; 31497000
|
|
SCRAM ~ Q MOD 125; 31498000
|
|
GTB1 ~ ENTER(0,LOCALTYPE,DEFINDID,FALSE); 31499000
|
|
INFO[LASTI].LINK ~ T; 31500000
|
|
DONBUG ("ASSOCI", LASTINFO, 0); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 31501000
|
|
END; 31502000
|
|
END UNTIL J ~ J + 10 > SPEC OR ELCLASS ! COMMA; 31503000
|
|
IF ELCLASS ! FINAL THEN BEGIN E ~ 305; SCAT END; 31504000
|
|
QUIT: 31505000
|
|
CONTEXT ~ CONTEX; 31505100
|
|
DEFINECTR ~ DEFINECTR - 1; 31505200
|
|
MACRO ~ TRUE; 31506000
|
|
ELCLASS ~ SAVELCLASS; 31506500
|
|
END OF ASSOCIATE; 31507000
|
|
BOOLEAN PROCEDURE SYNTAXCK(ELBATCLASS,ERRNO); 31508000
|
|
VALUE ELBATCLASS,ERRNO; 31508100
|
|
REAL ELBATCLASS,ERRNO; 31508200
|
|
BEGIN 31508300
|
|
IF SYNTAXCK ~ (ELBATCLASS!TABLE(I)) THEN 31508400
|
|
ERR(ERRNO); 31508500
|
|
END SYNTAXCK; 31508600
|
|
BOOLEAN PROCEDURE GOBBLE(FROM); VALUE FROM; BOOLEAN FROM; 31510000
|
|
COMMENT GOBBLE GETS UP TO 48 BITS OF STRING FROM THE SOURCE AND 31511000
|
|
PACKS IT INTO ACCUM, THI, AND THIFLAG. IT RETURNS FALSE 31512000
|
|
IF IT FOUND THE END OF THE STRING. GOBBLE MANAGES TO 31513000
|
|
WORRY ABOUT CONCATENATED STRINGS WITH SIZE CODES, AND 31514000
|
|
THINGS LIKE THAT. 31515000
|
|
FROM IS TRUE IF THE STRING IS LEFT-JUSTIFIED (OR IS A 31516000
|
|
CONTINUATION). THE [46:1] OF FROM IS TURNED ON(BY 31517000
|
|
TABLE) TO START A NON-BCL STRING: GOBBLE WILL 31518000
|
|
RETURN TRUE IN[46:1] IF THE NUMBER IN THI IS NOT A 31519000
|
|
VALID STRING TYPE. 31520000
|
|
COUNT WILL BE LEFT CONTAINING THE NUMBER OF BITS HANDLED. 31521000
|
|
CSZ IS THE FRAME SIZE OF THE STRING(1,2,3,4,6,7,8); 31522000
|
|
BEGIN 31523000
|
|
LABEL ROUND,BYE,ECH,INN,OWT,START,WAY; 31524000
|
|
REAL S; INTEGER T, C; 31525000
|
|
DEFINE NEXTCR = BUMPNCR ELSE NCR#; 31525100
|
|
DEFINE TABLET=BEGIN C~COUNT; T~ TABLE(-1); COUNT~C END#; 31525200
|
|
COUNT ~ ACCUM[9] ~ 0; 31526000
|
|
FLAGS ~ BOOLEAN(ACCUM[2]~0); 31527000
|
|
LEFTY ~ FROM; 31527100
|
|
S ~ CONTEXT; CONTEXT ~ 5; 31527200
|
|
CHR ~ EXAMINE(NCR); 31528000
|
|
COMMENT IF TABLE FINDS AN INTEGER AND A ", HE CALLS 31529000
|
|
US WITH [46:1] TRUE; 31530000
|
|
IF FROM.[46:1] THEN GO TO START; 31531000
|
|
ROUND: COMMENT CHR CONTAINS THE NEXT CHARACTER TO BE 31532000
|
|
CONSIDERED; 31533000
|
|
CASE CSZ OF 31534000
|
|
BEGIN COMMENT DEPENDING ON THE FRAME SIZE, CHECK AND/OR 31535000
|
|
TRANSLATE THE CHARACTER; 31536000
|
|
GO ECH; COMMENT INVALID; 31537000
|
|
IF CHR > 1 THEN GO ECH; COMMENT BINARY; 31538000
|
|
IF CHR > 3 THEN GO ECH; COMMENT QUATERNARY; 31539000
|
|
IF CHR > 7 THEN GO ECH; COMMENT OCTAL; 31540000
|
|
IF CHR > 9 THEN COMMENT HEXADECIMAL; 31541000
|
|
IF CHR < "A" THEN GO ECH ELSE 31542000
|
|
IF CHR > "F" THEN GO ECH ELSE CHR ~ CHR - 7; 31543000
|
|
GO ECH; COMMENT INVALID; 31544000
|
|
; COMMENT BCL; 31545000
|
|
COMMENT THE ASCII(CSZ=7) AND EBCDIC(CSZ=8) 31546000
|
|
TRANSLATIONS ARE IN THE ARRAY SPECIAL; 31547000
|
|
IF CHR ~ SPECIAL[CHR].ASCF = 0 THEN GO ECH; 31548000
|
|
IF CHR ~ SPECIAL[CHR].EBCDF = 0 THEN 31549000
|
|
ECH: FLAG(307); 31550000140621PK
|
|
END CASES OF CHARACTER SIZE; 31551000
|
|
COMMENT CHR NOW HAS THE CHARACTER TO BE PLACED INTO 31552000
|
|
ACCUM; 31553000
|
|
MOVEBITS(CHR,GT2 ~ IF CSZ=7 THEN 8 ELSE CSZ, 31554000
|
|
48-GT2, ACCUM[9], COUNT); 31555000
|
|
COUNT ~ COUNT + GT2; 31556000
|
|
COMMENT WE MUST NOW LOOK FOR THE END OF THE STRING, 31557000
|
|
SO THAT WE WILL PROPERLY HANDLE A STRING WITH 31558000
|
|
EXACTLY 48 BITS; 31559000
|
|
IF CHR ~ EXAMINE(NEXTCR) = """ THEN 31560000
|
|
BEGIN 31561000
|
|
COMMENT THFRE IS A QUOTE, SO WE GO PAST IT AND LOOK 31562000
|
|
SOME MORE; 31563000
|
|
BUMPNCR; 31564000
|
|
IF DEFINECTR ! 0 THEN GO OWT; 31564100
|
|
TABLET; 31565000
|
|
IF T ! NUMBER THEN 31566000
|
|
IF T ! STRNGCON THEN GO OWT ELSE 31566100
|
|
BEGIN 31567000
|
|
COMMENT THERE ARE TWO QUOTES, MEANING A CONCATEN- 31568000
|
|
ATION. WE PREPARE TO CHANGE FRAME SIZE TO 6; 31569000
|
|
THI ~ DEFAULTSIZE; GO INN; % OR SOMETHING. 31570000
|
|
END; 31571000
|
|
FONY ~ FALSE; 31572000
|
|
TABLET; IF T ! STRNGCON THEN GO BYE; 31583000
|
|
START: COMMENT THERE IS A QUOTE, SO WE EXAMINE THE NUMBER 31584000
|
|
IN THI TO SEE IF IT IS A VALID STRING CODE; 31585000
|
|
IF THI > 480 THEN GO BYE; 31586000
|
|
IF GT1 ~ (IF THI MOD 10 = 0 THEN THI DIV 10 ELSE THI)=0 31586500
|
|
THEN GO BYE; 31587000
|
|
IF GT1 < 10 THEN C ~ GT1 ELSE 31587500
|
|
IF C ~ GT1 MOD 10 { GT1 ~ GT1 DIV 10 THEN GO BYE; 31588000
|
|
IF C } 9 THEN GO BYE; 31588500
|
|
IF (C~ REAL(C=7)+C)/GT1 MOD 1 ! 0 THEN GO BYE; 31589000
|
|
IF C > MAXCSZ THEN MAXCSZ ~ C; 31590000
|
|
IF GT1 < 1 THEN GO BYE; 31591000
|
|
IF GT1 = 5 THEN 31592000
|
|
BYE: COMMENT WE HAVE AN INVALID SIRING CODE; 31593000
|
|
BEGIN FLAG(0308); GO OWT END; 31594000
|
|
COMMENT WE PASSED ALL THE TESTS, SO WE HAVE A NEW 31611000
|
|
FRAME SIZE; 31612000
|
|
IF THI ~ GT1 } 9 THEN GO BYE; 31615000
|
|
INN: COMMENT NOW WE FUDGE THE BIT COUNTER, SO THAT THE NEW31616000
|
|
FRAMES START IN THE RIGHT PLACE; 31617000
|
|
COUNT ~ ABS(ENTIER(-COUNT/THI)) | THI; 31618000
|
|
IF (CSZ ~ THI) > MAXCSZ THEN 31619000
|
|
MAXCSZ ~ IF CSZ = 7 THEN 8 ELSE CSZ; 31619100
|
|
THI ~ 0; 31620000
|
|
CHR ~ EXAMINE(NCR); 31621000
|
|
COMMENT NOW EVERYTHING IS SET UP AS IF THE QUOTE 31622000
|
|
NONSENSE HAD NEVER HAPPENED; 31623000
|
|
END OF NONTERMINAL QUOTE HANDLING; 31624000
|
|
COMMENT WE MAY NOW CHECK FOR 48 BITS; 31625000
|
|
IF COUNT < 48 THEN GO ROUND; 31626000
|
|
COMMENT WE DIDNT FIND THE TERMINATOR OF THE STRING, 31627000
|
|
BUT WE HAVE BITTEN OFF A COMPLETE MOUTHFUL OF 31628000
|
|
STUFF. WE RETURN TRUE TO THE GUY WHO IS GOING 31629000
|
|
TO SWALLOW; 31630000
|
|
GOBBLE ~ TRUE; 31631000
|
|
OWT: COMMENT ACCUM HAS AS MUCH STRING AS WE ARE GOING TO 31632000
|
|
HANDLE, SO WE PUT THE STUFF INTO THI. IT MAY BE31633000
|
|
EITHER LEFT OR RIGHT JUSTIFIED; 31634000
|
|
IF COUNT } 48 OR FROM THEN 31635000
|
|
BEGIN COMMENT LEFT JUSTIFIED: THE MOST-SIGNIFICANT BIT GETS31636000
|
|
HANDLED WITH EXTREME CARE; 31637000
|
|
THIFLAG ~ FLAGBIT(ACCUM[9]); 31638000
|
|
DEFINESFLAG ~ THIFLAG; 31638100
|
|
THI ~ ACCUM[9]; 31639000
|
|
END ELSE 31640000
|
|
BEGIN 31641000
|
|
THI ~ 0; 31642000
|
|
MOVEBITS(ACCUM[9], COUNT, 0, THI, 48-COUNT); 31643000
|
|
DEFINESFLAG ~ FLAGBIT(ACCUM[9]); 31643100
|
|
END; 31644000
|
|
CONTEXT ~ S; 31645000
|
|
END GOBBLE; 31646000
|
|
COMMENT * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 40000000
|
|
THE EMITTERS 40001000
|
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;40002000
|
|
ALPHA PROCEDURE O(A); VALUE A; REAL A; 40003000
|
|
O~A.[45:3]&A[39:42:3]&A[33:39:3]&A[27:36:3]&A[21:33:3] 40004000
|
|
&A[15:30:3]&A[9:27:3]&A[3:24:3]; 40005000
|
|
COMMENT BUGOUT FORMATS AND PRINTS DEBUGGING INFO-NOTE THAT THE PARAMS 40006000
|
|
HAVE DIFFERENT MEANINGS AT DIFFENT CALLS; 40007000
|
|
PROCEDURE BUGOUT(F,OP,P1,P2,P3); VALUE F,OP,P1,P2,P3; 40008000
|
|
INTEGER F,OP,P1,P2,P3; 40009000
|
|
BEGIN 40010000
|
|
INTEGER I; 40011000
|
|
ALPHA HEGS; 40012000
|
|
DEFINE Q(Q1)=(O(Q1) & 29[24:43:5])#, H = HEXOUT #; 40012100
|
|
LABEL L0,L1,L2,L3,L4,L5,L6,L7,L8,L9,L10,WAY; 40012200
|
|
SWITCH SW ~ L0,L1,L2,L3,L4,L5,L6,L7,L8,L9,L10; 40012300
|
|
BLANKOUT(16,LBUFF); 40013000
|
|
HEGS ~ " "; 40014000
|
|
IF FIGS THEN BEGIN 40015000
|
|
INSERT(2,"**",LBUFF[7],0); 40016000
|
|
IF FIGS.[46:1] THEN FIGS ~ FALSE END; 40017000
|
|
I ~ IF F = 7 THEN P1 ELSE L; 40017100
|
|
INSERT(4,H(I DIV 6), LBUFF[7],3); % PIR - HEX 40018000
|
|
INSERT(2,(I ~ I MOD 6) + ":0", LBUFF[7],7); 40018100
|
|
INSERT(4,OPS[IF F = 7 THEN 768 ELSE OP],LBUFF[8],3); 40019000
|
|
40019100
|
|
40019200
|
|
GO TO SW[F + 1]; GO WAY; 40020000
|
|
L2: P2 ~ (P1 DIV 6) & I ~ P1 MOD 6[32:45:3];% BRANCH OP 40021000
|
|
GO TO L10; 40021100
|
|
L7: P1 ~ P2; % LINK 40022000
|
|
L10: I ~ P1 MOD 6 + ":0"; 40023000
|
|
INSERT(6,I + H(P1 DIV 6 | 256), LBUFF[9],1); % 10 =MPCW 40023100
|
|
IF F = 10 THEN GO TO L9; 40023200
|
|
40023300
|
|
HEGS.[12:24] ~ H(P2); 40023400
|
|
GO TO L0; 40023500
|
|
L1: P1 ~ OP; OP ~ VARI; GO TO L3; % VARIANT OP 40024000
|
|
L8: % 4 PARAMS 40025000
|
|
INSERT(2,H(P3.[16:8]),LBUFF[11],4); 40025100
|
|
L5: % 3 PARAMS 40026000
|
|
HEGS ~ H(P3); 40026100
|
|
L4: % 2 PARAMS 40027000
|
|
HEGS.[24:12] ~ H(P2); 40027100
|
|
L3: % 1 PARAM 40027200
|
|
HEGS.[12:12] ~ H(P1); 40027300
|
|
L0: % PRIMARY 40027400
|
|
INSERT(8, HEGS & H(OP) [1:37:11], LBUFF[10],4); 40027500
|
|
GO WAY; 40027600
|
|
L9: % LT48 40027700
|
|
40027800
|
|
INSERT(2,H(OP),LBUFF[10],4); 40027820
|
|
INSERT(GTI1~ 5 - L MOD 6, "FFFFF", LBUFF[10], 6); 40027840
|
|
INSERT(GTI1,"FFFFF",LBUFF[10],6+GTI1); 40027860
|
|
INSERT(6, H(P2),LBUFF[10],6+GTI1+GTI1); 40027900
|
|
INSERT(6, H(P3),LBUFF[11],4+GTI1+GTI1); 40028000
|
|
GO WAY; 40028100
|
|
L6: % VALC/NAMC 40028200
|
|
INSERT(4,"(00," + H(P1 | 16), LBUFF[9],1); 40028300
|
|
40028400
|
|
INSERT(5, H(P2|16)+ ")", LBUFF[9],5); 40028500
|
|
40028600
|
|
INSERT(4, H(P3), LBUFF[10],4); 40028700
|
|
WAY: WRITELBUFF; 40029000
|
|
END OF BUGOUT; 40030000
|
|
COMMENT GET RETURNS A SYLLABLE FROM EDOC; 40031000
|
|
INTEGER PROCEDURE GET(L); VALUE L; INTEGER L; 40032000
|
|
BEGIN 40033000
|
|
MOVE8BITS(EDOC[(GT1~L DIV 6).[35:5],GT1.[40:8]],GTI1~L MOD 6,L)40034000
|
|
; GET ~ L.[40:8] 40035000
|
|
END GET; 40036000
|
|
COMMENT PUTSYL PUTS A SYLLABLE INTO EDOC, THE OBJECT CODE ARRAY; 40037000
|
|
PROCEDURE PUTSYL(SYL); VALUE SYL; INTEGER SYL; 40038000
|
|
BEGIN 40039000
|
|
REAL GT1;%FOR WALLY 40040000
|
|
STREAM PROCEDURE PUTS(S,W,B); VALUE S,B; 40041000
|
|
BEGIN DI~W; B(SKIP 8 DB); SI~LOC W; SI~SI-2; SKIP 4 SB; 40042000
|
|
8(IF SB THEN DS~SET ELSE DS~RESET; SKIP SB) 40043000
|
|
END PUTS; 40044000
|
|
PUTS(SYL,EDOC[(GT1~L DIV 6).[35:5],GT1.[40:8]],GTI1~L MOD 6) 40045000
|
|
END PUTSYL; 40046000
|
|
COMMENT EMIT EMITS ONE OR TWO SYLLABLES, AS IT THINKS APPROPRIATE; 40047000
|
|
PROCEDURE EMIT(OP); VALUE OP; INTEGER OP; 40048000
|
|
BEGIN 40049000
|
|
IF DEBUGTOG THEN 40050000
|
|
BUGOUT(REAL(OP MOD 512 > 255),OP,0,0,0); 40051000
|
|
IF OP > 255 THEN 40052000
|
|
IF OP < 512 THEN BEGIN PUTSYL(VARI); L ~ L + 1 END; 40053000
|
|
PUTSYL(OP); 40053100
|
|
IF L ~ L + 1 > 49150 THEN FLAG(400) 40053200
|
|
END EMIT; 40054000
|
|
COMMENT EMITV EMITS A VALUE-CALL ON THE LOCATION GIVEN BY ITS PARAM, A.40055000
|
|
THE FORMAT OF A(BOTH FOR EMIIV AND EMITN) IS THAT OF THE 40056000
|
|
ADDRESS FIELD OF AN ELBAT-WORD. IN PARTICULAR, [36:12] IS THE 40057000
|
|
DISPLACEMENT, AND [31:5] IS THE LEVEL; 40058000
|
|
PROCEDURE EMITV(A); VALUE A; INTEGER A; 40059000
|
|
BEGIN 40060000
|
|
LITERALS ~ FALSE; 40060100
|
|
IF ADRCPL ~ A.[36:12] & A[35:29:1] > MAXDISP THEN FLAG(401); 40061000
|
|
ADRCPL ~ STACKMASK[A.[31:5]].[CF] + ADRCPL; 40062000
|
|
IF DEBUGTOG THEN 40063000
|
|
BUGOUT(6,VALC,A.[31:5],A.[36:12]&A[35:29:1],ADRCPL); 40064000
|
|
PUTSYL(ADRCPL.[34:6]); L~L+1; PUTSYL(A); 40065000
|
|
IF L~L+1>49150 THEN FLAG(400); 40066000
|
|
END EMITV; 40067000
|
|
COMMENT EMITN EMITS A NAME-CALL. SEE THE EMITV COMMENT FOR DETAILS; 40068000
|
|
PROCEDURE EMITN(A);VALUE A; INTEGER A; 40069000
|
|
BEGIN 40070000
|
|
LITERALS ~ FALSE; 40070100
|
|
IF ADRCPL ~ A.[36:12] & A[35:29:1] > MAXDISP THEN FLAG(401); 40071000
|
|
ADRCPL ~ STACKMASK[A.[31:5]].[CF] + ADRCPL + 16384; 40072000
|
|
IF DEBUGTOG THEN 40073000
|
|
BUGOUT(6,NAMC,A.[31:5],A.[36:12]&A[35:29:1],ADRCPL); 40074000
|
|
PUTSYL(ADRCPL.[32:8]); L ~ L+ 1 ; PUTSYL(ADRCPL); 40075000
|
|
IF L~L+1}49150 THEN FLAG(400); 40076000
|
|
END EMITN; 40077000
|
|
PROCEDURE EMITB(B,F,T); VALUE B,F,T; INTEGER B,F,T; 40078000
|
|
BEGIN 40079000
|
|
INTEGER TL; 40080000
|
|
TL~L; L~F-3; 40081000
|
|
IF DEBUGTOG THEN 40082000
|
|
BEGIN FIGS ~ F ! TL OR TB1 ~ FIGS; 40082100
|
|
BUGOUT(2,B,T,0,0); 40082200
|
|
FIGS ~ TB1 AND NOT TB1.[46:1]; 40082300
|
|
END; 40082400
|
|
PUTSYL(B); L~L+1; 40083000
|
|
PUTSYL((T DIV 1536)&(GTI1~T MOD 6)[40:45:3]); L ~L + 1; 40084000
|
|
PUTSYL(T DIV 6); 40085000
|
|
L ~ TL; 40086000
|
|
END EMITR; 40087000
|
|
PROCEDURE EMITD(A,B,N); VALUE A,B,N; INTEGER A,B,N; 40088000
|
|
IF N - A = 1 THEN 40089000
|
|
EMIT2P(INSR,B,N) ELSE 40090000
|
|
EMIT3P(FLTR,A,B,N); 40091000
|
|
ALPHA PROCEDURE HEXOUT(N); VALUE N; ALPHA N; 40092000
|
|
COMMENT HEXOUT CONVERTS HALF OF A WORD (24 BITS) INTO BCL-CODED 40093000
|
|
HEXADECIMAL (CHARACTERS 0-9, A-F). IT FIRST PLACES EACH 40094000
|
|
4-BIT DIGIT (OR HEXIT) INTO ONE 6-BIT CHARACTER. THEN 40095000
|
|
IT ADDS "6" TO EACH CHARACTER: ANY CHARACTER WHICH 40096000
|
|
OVERFLOWS INTO THE 16S BIT REQUIRES CONVERSION TO A LETTER40097000
|
|
WE "AND" THE SUM WITH "+"S TO CATCH THAT BIT, AND SHIFT 40098000
|
|
THE RESULT RIGHT BY FOUR BITS. MULTIPLYING THIS RESULT BY40099000
|
|
SEVEN YIELDS A 7 IN EACH CHARACTER-POSITION NEEDING TO BE 40100000
|
|
CONVERTED. THE CONVERSION IS ACCOMPLISHED BY ADDING THIS 40101000
|
|
PRODUCT TO THE RESULT OF THE FIRST (CHAR + HEXIT) 40102000
|
|
OPERATION; 40103000
|
|
HEXOUT ~ REAL( BOOLEAN((N ~ N.[44:4] & N[38:40:4] & N [32:36:4] 40104000
|
|
& N [26:32:4] & N[20:28:4] & N[14:24:4]) + "666666") 40105000
|
|
AND BOOLEAN("++++++")).[12:32] | 7 + N; 40106000
|
|
40107000
|
|
40108000
|
|
40109000
|
|
40110000
|
|
PROCEDURE EMITNUMBER(N,STRINGSOURCEFLAG); VALUE N, STRINGSOURCEFLAG; 40111000
|
|
REAL N, STRINGSOURCEFLAG; 40111100
|
|
BEGIN 40112000
|
|
LABEL ON; 40113000
|
|
REAL GT1; % FOR TALLY 40114000
|
|
BOOLEAN S; 40115000
|
|
IF BOOLEAN(STRINGSOURCEFLAG) OR N.[2:30] ! 0 THEN GO ON; 40121000
|
|
S ~ BOOLEAN(N.[1:1]); N ~ ABS(N); 40122000
|
|
IF N=0 THEN EMIT(ZERO) ELSE 40123000
|
|
IF N=1 THEN EMIT(ONE) ELSE 40124000
|
|
40125000
|
|
IF N.[9:31]=0 THEN 40126000
|
|
EMIT1P(LT8,N) ELSE 40127000
|
|
40128000
|
|
40129000
|
|
40130000
|
|
IF N.[9:23]=0 THEN 40131000
|
|
EMIT2P(LT16,N.[32:8],N.[40:8]) ELSE 40132000
|
|
BEGIN 40137000
|
|
ON: IF DEBUGTOG THEN BUGOUT(9,LT48 ,0,N.[1:23] 40138000
|
|
& STRINGSOURCEFLAG [24:47:1],N.[24:24]); 40138100
|
|
PUTSYL(LT48); WHILE(L~L+1)MOD 6 ! 0 DO PUTSYL(NVLD); 40138200
|
|
FLOG(STRINGSOURCEFLAG,N,EDOC[(GT1~L DIV 6).LINKR, 40139000
|
|
GT1.LINKC]); 40140000
|
|
IF L ~ L + 6 } 49150 THEN FLAG(400) 40141000
|
|
END LT48; 40142000
|
|
40143000
|
|
40144000
|
|
IF S THEN EMIT(CHSN) 40145000
|
|
END EMITNUM; 40146000
|
|
PROCEDURE EMITDP(H,J); VALUE H,J; REAL H,J; 40147000
|
|
BEGIN 40148000
|
|
EMITNUM(H); 40149000
|
|
IF J = 0 AND J.[1:8] = 0 THEN EMIT(XTND) ELSE 40150000
|
|
BEGIN EMITNUM(J); EMIT(JOIN) END; 40151000
|
|
END EMITDP; 40152000
|
|
PROCEDURE EMITPAIR(A,O); VALUE A,O; INTEGER A,O; 40153000
|
|
BEGIN EMITN(A); EMIT(O) END EMITPAIR; 40154000
|
|
PROCEDURE EMITNOT; 40155000
|
|
COMMENT EMITNOT SOMETIMES EMITS AN LNOT. AT OTHER TIMES, DEPENDING 40156000
|
|
ON THE VALUE OF LASTNOT, IT WILL CANCEL AN LNOT THAT HAD 40157000
|
|
JUST BEEN EMITTED, OR IT WILL INVERT A RELATIONAL 40158000
|
|
OPERATOR; 40159000
|
|
IF LASTNOT = L THEN COMMENT LAST THING WAS AN LNOT; 40160000
|
|
BEGIN L ~ L - 1; LASTNOT ~ 0; FIGS ~ BOOLEAN(3) END ELSE 40161000
|
|
IF LASTNOT = -L AND GET(L-1) ! SAME THEN 40162000
|
|
BEGIN 40162100
|
|
FIGS ~ TRUE; 40162200
|
|
EMIT(REAL(BOOLEAN(GET(L~L-1)) EQV NOT TRUE).[40:8]); 40163000
|
|
FIGS ~ FALSE; 40163100
|
|
COMMENT "EQV NOT TRUE" COMPLEMENTS THE LOW-ORDER BIT, 40164000
|
|
WHICH IS SUFFICIENT TO INVERT THE RELATION; 40165000
|
|
END ELSE 40165100
|
|
COMMENT OUT OF LUCK. GOT TO EMIT SOMETHING; 40166000
|
|
BEGIN EMIT(LNOT); LASTNOT ~ L END EMITNOT; 40167000
|
|
INTEGER PROCEDURE GET3(L); VALUE L; INTEGER L; 40168000
|
|
COMMENT GET3 RETURNS THE THREE SYLLABLES IN EDOC AT L; 40169000
|
|
GET3 ~ GET(L+2) & GET(L+1)[32:40:8] & GET(L)[24:40:8]; 40170000
|
|
PROCEDURE EMIT3(LINK); VALUE LINK; INTEGER LINK; 40171000
|
|
COMMENT EMIT3, ALSO KNOWN AS EMITLINK, EMITS THREE SYLLABLES. IF 40172000
|
|
WE ARE LISTING THE CODE, THE LISTING WILL SAY THAT IT IS A 40173000
|
|
LINK; 40174000
|
|
BEGIN 40175000
|
|
IF DEBUGTOG THEN BUGOUT(7, LINK.[24:8],L,LINK.[32:16],0); 40176000
|
|
PUTSYL(LINK.[24:8]); IF L~L+1 } 49148 THEN FLAG(400); 40177000
|
|
PUTSYL(LINK.[32:8]); L ~ L + 1; 40178000
|
|
PUTSYL(LINK); L ~ L + 1; 40179000
|
|
END EMITLINK; 40180000
|
|
PROCEDURE EMIT1P(OP,A); VALUE OP,A; INTEGER OP,A; 40181000
|
|
BEGIN 40182000
|
|
IF OP > 255 THEN 40183000
|
|
IF OP < 512 THEN EMIT(VARI); 40184000
|
|
IF DEBUGTOG THEN BUGOUT(3,OP,A,0,0); 40185000
|
|
PUTSYL(OP); L~L + 1; PUTSYL(A); 40186000
|
|
IF L ~ L + 1 } 49150 THEN FLAG(400) 40187000
|
|
END; 40188000
|
|
PROCEDURE EMIT2P(OP,A,B); VALUE OP,A,B; INTEGER OP,A,B; 40189000
|
|
BEGIN 40190000
|
|
IF OP > 255 THEN 40191000
|
|
IF OP < 512 THEN EMIT(VARI); 40192000
|
|
IF DEBUGTOG THEN BUGOUT(4,OP,A,B,0); 40193000
|
|
PUTSYL(OP); L ~ L + 1; PUTSYL(A); L ~ L + 1; PUTSYL(B); 40194000
|
|
IF L ~ L + 1 } 49150 THEN FLAG(400) 40195000
|
|
END EMIT2P; 40196000
|
|
PROCEDURE EMIT3P(OP,A,B,C); VALUE OP,A,B,C; INTEGER OP,A,B,C; 40197000
|
|
BEGIN 40198000
|
|
IF OP > 255 THEN 40199000
|
|
IF OP < 512 THEN EMIT(VARI); 40200000
|
|
IF DEBUGTOG THEN BUGOUT(5,OP,A,B,C); 40201000
|
|
PUTSYL(OP); L ~ L + 1; PUTSYL(A); L ~ L + 1; 40202000
|
|
PUTSYL(B); L ~ L + 1; PUTSYL(C); 40203000
|
|
IF L ~ L + 1 } 49150 THEN FLAG(400) 40204000
|
|
END EMIT3P; 40205000
|
|
PROCEDURE EMIT4P(OP,A,B,C,D); VALUE OP,A,B,C,D; 40206000
|
|
INTEGER OP,A,B,C,D; 40207000
|
|
BEGIN 40208000
|
|
IF OP } 256 THEN IF OP < 512 THEN EMIT(VARI); 40208100
|
|
IF DEBUGTOG THEN BUGOUT(8,OP,A,B,C&D[16:40:8]); 40209000
|
|
PUTSYL(OP); L ~ L + 1; PUTSYL(A); L ~ L + 1; PUTSYL(B); 40210000
|
|
L ~ L + 1; PUTSYL(C); L ~ L + 1; PUTSYL(D); 40211000
|
|
IF L ~ L + 1 > 49150 THEN FLAG(400); 40212000
|
|
END EMIT4P; 40213000
|
|
PROCEDURE EMITBUZEVENT; 40214000
|
|
COMMENT EMITS CODE WHICH BUZZES LOCK BIT IN AN EVENT. CODE HAS 40215000
|
|
PREVIOUSLY BEEN EMITTED TO PLACE POINTER(INDEXED DD OR IRW) TO 40216000
|
|
EVENT IN TOS. THE BUZZ IS IN NORMAL STATE; 40217000
|
|
BEGIN 40218000
|
|
INTEGER TI1; 40219000
|
|
EMIT(ZERO); 40220000
|
|
COMMENT **** 40220200
|
|
EMIT(EEXI); 40221000
|
|
TI1~L; 40222000
|
|
EMIT(DEL); 40223000
|
|
EMIT(DUPL); 40224000
|
|
EMIT(ONE); 40225000
|
|
EMIT(RDLK); 40226000
|
|
EMIT(DUPL); 40227000
|
|
COMMENT IN TOS AT THIS POINT-TWO POINTERS TO EVENT,TWO COPIES OF FIRST 40228000
|
|
WORD OF EVENT; 40229000
|
|
EMITB(BRTR,BUMPL,TI1); % END OF EVENT BUZZ LOOP 40230000
|
|
EMIT(ZERO); EMIT(STAG); %ZOT THE D.P. TAG 40230500
|
|
COMMENT **** 40230520
|
|
EMIT(DEXI); 40231000
|
|
COMMENT IN TOS AT THIS POINT-POINTER TO EVENT(IRW OR INDEXED DD),FIRST 40232000
|
|
WORD OF EVENT(WITH DOUBLE TAG); 40233000
|
|
END EMITBUZEVENT; 40234000
|
|
PROCEDURE EMITMICRO(WORD); VALUE WORD; ALPHA WORD; 40236000
|
|
BEGIN 40237000
|
|
DEFINE P1 = WORD.[35:8]#, 40238000
|
|
P2 = WORD.[27:8]#, 40239000
|
|
P3 = WORD.[19:8]#, 40240000
|
|
OP = WORD.[44:4]+719 #, 40241000
|
|
N = WORD.[17:2]#; 40242000
|
|
INTEGER J; 40243000
|
|
J ~ WORD.[1:16]; 40244000
|
|
DO CASE REAL(J!0)|4 + N OF 40245000
|
|
BEGIN 40246000
|
|
EMIT(OP); 40247000
|
|
EMIT1P(OP,P1); 40248000
|
|
EMIT2P(OP,P1,P2); 40249000
|
|
EMIT3P(OP,P1,P2,P3); 40250000
|
|
EMIT1P(OP,MIN(J,255)); 40251000
|
|
EMIT2P(OP,MIN(J,255),P1); 40252000
|
|
EMIT3P(OP,MIN(J,255),P1,P2); 40253000
|
|
EMIT4P(OP,MIN(J,255),P1,P2,P3); 40254000140621PK
|
|
END CASE UNTIL J ~ J - 255 { 0; 40255000
|
|
END EMITMICRO; 40256000
|
|
PROCEDURE PRINTSPACE(ID,LL,DISP); VALUE ID,LL,DISP; 40260000
|
|
ALPHA ID,LL,DISP; 40261000
|
|
BEGIN INTEGER X; DEFINE H = HEXOUT #; 40262000
|
|
BLANKOUT(16,LBUFF); 40263000
|
|
IF ID ! 0 THEN 40264000
|
|
IF ID < 0 THEN INSERT(X~6, ID,LBUFF[0],0) ELSE 40265000
|
|
MOVECHARACTERS(X~TAKE(ID+1).CHRCNT,INFO[ID.LINKR,ID.LINKC+1],4,40266000
|
|
LBUFF[0],0); 40267000
|
|
INSERT(5,H(LL|16)+"=(00,",LBUFF[ID~X.[39:6]],X~X.[45:3]); 40268000
|
|
INSERT(5,H(DISP|16)+")",LBUFF[ID],X+5); 40269000
|
|
40270000
|
|
40271000
|
|
WRITELBUFF; 40272000
|
|
END PRINTSPACE; 40273000
|
|
COMMENT * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 44000000
|
|
SERVICE ROUTINES 44001000
|
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;44002000
|
|
COMMENT FLAG WRITES ERROR MESSAGES ON THE PRINTER, USUALLY; 44003000
|
|
PROCEDURE FLAG(NR); VALUE NR; INTEGER NR; 44004000
|
|
IF ERRORTOG THEN 44004100
|
|
BEGIN STREAM PROCEDURE EDITERR(N,C,W,L,S); VALUE N,C,S; 44005000
|
|
BEGIN 44006000
|
|
DI ~ L; 8(DS ~ 2 LIT ">"); 44(DS ~ 2 LIT " "); 44007000
|
|
8(DS ~ 2 LIT "<"); DS ~ 2 LIT " "; SI ~ S; DS ~ 8 CHR; 44008000
|
|
DI~W; DI~DI+C; DS~14 LIT"~ERROR NUMBER "; 44009000
|
|
SI~LOC N; DS~3 DEC; DS~LIT"."; SI~S;SI~SI-16;DI~S; DS~WDS;44010000
|
|
END; 44011000
|
|
STREAM PROCEDURE PREPERR(LBUFF); 44012000
|
|
BEGIN DI ~ LBUFF; DS ~ 16 LIT ".DEFINED TO BE: "; 44013000
|
|
30(DS ~ 4 LIT " ") 44014000
|
|
END PREPERR; 44015000
|
|
INTEGER J,K,C,W,START; 44016000
|
|
IF DEFINEINDEX>0 THEN 44017000
|
|
BEGIN GT1~(GT2~DEFINEARRAY[2]).[30:18]; % GT1=NCR 44018000
|
|
GT2~GT2.[12:18]; % GT2=LCR 44019000
|
|
GT3~DEFINEARRAY[0] % GT3=LASTUSED 44020000
|
|
END ELSE 44021000
|
|
BEGIN GT1~NCR; GT2~LCR; GT3~LASTUSED END; 44022000
|
|
IF NOT LISTOG THEN 44023000
|
|
BEGIN IF LISTOG.[46:1] THEN DATIME; LISTOG~FALSE; 44024000
|
|
BLANKOUT(16, LBUFF); 44024100
|
|
ZOT(EXAMINE(LASTSEQUENCE),GT2); 44025000
|
|
EDITLINE(GT2-9,GT3,0,0,0,0,LBUFF); 44026000
|
|
ZOT("%",GT2); 44027000
|
|
WRITELBUFF 44028000
|
|
END FORCED LISTING; 44029000
|
|
EDITERR(NR,GT1.[30:3],LBUFF[GT1-GT2+11],LBUFF,LASTSEQUENCE 44030000
|
|
+2); 44031000
|
|
WRITELBUFF; 44032000
|
|
FOR J ~ 3 STEP 3 UNTIL DEFINEINDEX DO 44033000
|
|
BEGIN PREPERR(LBUFF); K ~ 1; 44034000
|
|
IF J < DEFINEINDEX THEN 44035000
|
|
BEGIN W ~ DEFINEARRAY[J].[CF]; 44036000
|
|
C ~ DEFINEARRAY[J+2].[30:3] 44037000
|
|
END ELSE 44038000
|
|
BEGIN W ~ LASTUSED; C ~ NCR.[30:3] END; 44039000
|
|
IF W - START ~ DEFINEARRAY[J-3].[FF] > 8 THEN START ~W-8; 44040000
|
|
WHILE START ~ START + 1 < W DO 44041000
|
|
MOVE(1,ADDL[START.LINKR,START.LINKC],LBUFF[K~K+1]); 44042000
|
|
MOVECHARACTERS(C,DEFINEARRAY[J-2],0,LBUFF[K+1],0); 44043000
|
|
WRITELBUFF 44044000
|
|
END OF PRINTING DEFINED STUFF; 44045000
|
|
ERRORCOUNT~ERRORCOUNT+1; 44046000
|
|
IF DUMPTOG THEN DUMPIT(LBUFF); 44047000
|
|
ERRORTOG ~ FALSE; 44047100
|
|
END FLAG; 44048000
|
|
INTEGER PROCEDURE GETSPACE(LEVEL); VALUE LEVEL; INTEGER LEVEL; 44049000
|
|
COMMENT GETSPACE ASSIGNS STACK SPACE AND RETURNS THE ADDRESS-FIELD 44050000
|
|
VALUE FOR THAT SPACE. THE PARAMETER, LEVEL, INDICATES THE 44051000
|
|
ADDRESSING LEVEL AT WHICH THE SPACE IS TO BE ALLOCATED. 44052000
|
|
HOWEVER, IF AN ADDRESS PART IS GIVEN IN THE SOURCE, IT WILL 44053000
|
|
OVERRIDE THE NORMAL ALLOCATION: IF THE PARAMETER HAS ITS SIGN 44054000
|
|
BIT ON, HOWEVER, WE WILL NOT LOOK FOR AN ADDRESS PART. THE 44055000
|
|
EXPONENT-SIGN BIT IS ON IF TWO SPACES ARE NEEDED, AS FOR 44055100
|
|
DOUBLE PRECISION. THE 44055200
|
|
CALLER IS INFORMED OF THE EXISTANCE OF THE ADDRESS PART VIA THE44056000
|
|
SIGN BIT OF THE RESULT; 44057000
|
|
BEGIN 44058000
|
|
INTEGER ADRF; COMMENT THE DISPLACEMENT FIELD; 44059000
|
|
INTEGER N; COMMENT # SPACES NEEDED; 44059100
|
|
LABEL ON; 44060000
|
|
BOOLEAN B; 44061000
|
|
N ~ LEVEL.[2:1] + 1; 44061100
|
|
IF B ~ LEVEL.[1:1] = 0 THEN 44062000
|
|
IF TABLE(I+1) = RELOP THEN % ADDR PART JUST MIGHT BE THERE. 44063000
|
|
IF ELBAT[I+1].DISP ! EQUL THEN 44064000
|
|
FLAG(408) ELSE % OOPS--WRONG RELATIONAL. 44065000
|
|
BEGIN STEPIT; % PAST THE "=". 44066000
|
|
ADRF~CONTEXT; CONTEXT~2; %LET THE SCANNER WORK RIGHT. 44067000
|
|
STEPIT; % GET THE NEXT THING. 44068000
|
|
CONTEXT ~ ADRF; % UNFUTZ THE SCANNER. 44069000
|
|
IF ELCLASS < IDMAX THEN % ID COPY ADDRESS 44070000
|
|
IF ELBAT[I].ADDRESS = 0 THEN % BUT THE ADDRESS IS BAD NEWS44071000
|
|
FLAG(407) ELSE 44072000
|
|
IF ELBAT[I].LINK < FIRSTINFO THEN FLAG(408) ELSE 44072100
|
|
BEGIN 44073000
|
|
LEVEL ~ ELBAT[I].LVEL; 44074000
|
|
ADRF ~ -ELBAT[I].DISP & ELBAT[I] [35:2:1]; 44075000
|
|
IF TABLE(I+1) = ADDOP THEN 44075100
|
|
BEGIN 44075200
|
|
STEPIT; 44075300
|
|
IF STEPI ! NUMBER THEN FLAG(408) ELSE 44075400
|
|
ADRF ~(IF ELBAT[I-1].ADDRESS=ADD THEN -THI 44075500
|
|
ELSE THI) + ADRF; 44075600
|
|
END; 44075700
|
|
GO ON 44076000
|
|
END IDENTIFIER AS ADDRESS PART; 44077000
|
|
IF ELCLASS ! LFTPRN THEN 44078000
|
|
FLAG(408) ELSE 44079000
|
|
BEGIN 44080000
|
|
IF STEPI = ADDOP THEN % IS + OR - 44081000
|
|
IF ELBAT[I].ADDRESS ! SUBT THEN % 44082000
|
|
FLAG(408) ELSE % IT WAS +: ERROR 44083000
|
|
IF STEPI ! NUMBER THEN % NOT A NUMBER IS BAD. 44084000
|
|
FLAG(408) ELSE % 44085000
|
|
LEVEL ~ LEVEL - THI ELSE % NUMBER IS RELATIVE. 44086000
|
|
IF ELCLASS ! NUMBER THEN % WAS NOT SIGN (+ OR -). 44087000
|
|
FLAG(408) ELSE 44088000
|
|
LEVEL ~ THI; % UNSIGNED NR IS ABSOLUTE. 44089000
|
|
IF LEVEL < 0 OR 44090000
|
|
LEVEL > CURRENT THEN 44091000
|
|
FLAG(407); 44092000
|
|
IF STEPI ! RTPARN THEN % CHECK FOR DISPLACEMENT. 44093000
|
|
IF ELCLASS ! COMMA THEN 44094000
|
|
FLAG(408) ELSE 44095000
|
|
BEGIN 44096000
|
|
IF STEPI ! NUMBER THEN 44097000
|
|
FLAG(408) ELSE ADRF ~-THI; 44098000
|
|
IF STEPI ! RTPARN THEN FLAG(408); 44099000
|
|
GO ON 44100000
|
|
END ELSE % NO DISP GIVEN 44101000
|
|
BEGIN 44102000
|
|
IF STACKTOP[LEVEL] ~-(ADRF~-STACKTOP[LEVEL])+ N 44103000
|
|
> MAXSTACK[LEVEL] THEN 44104000
|
|
MAXSTACK[LEVEL] ~ STACKTOP[LEVEL]; 44105000
|
|
GO ON 44106000
|
|
END; END; END ABNORMAL ALLOCATION; 44107000
|
|
IF STACKTOP[LEVEL~ABS(LEVEL)] ~(ADRF ~ STACKTOP[LEVEL]) + N 44108000
|
|
> MAXSTACK[LEVEL] THEN 44109000
|
|
MAXSTACK[LEVEL] ~ STACKTOP[LEVEL]; 44110000
|
|
ON: IF ABS(ADRF) > MAXDISP THEN FLAG(410); 44111000
|
|
IF PRTOG THEN IF NOT B THEN PRINTSPACE(0,LEVEL,ADRF); 44112000
|
|
GETSPACE ~ ADRF & LEVEL [30:42:6] & ADRF [29:35:1]; 44113000
|
|
END GETSPACE; 44114000
|
|
PROCEDURE MOVECODE(E,T); ARRAY E,T[0,0]; 44115000
|
|
BEGIN REAL Q; STREAM PROCEDURE FAKEIT(T,Q); 44116000
|
|
BEGIN SI~LOC T; DI~Q; DS~WDS; TALLY~1; Q~TALLY; CI~CI+Q; 44117000
|
|
DS ~ 48 LIT 44118000
|
|
"10YH+A|8+A-E+E0@8EH)*/}V|8+AYH+A-E+E0@8E}V4A4A4(" 44119000
|
|
END FAKEIT; FAKEIT(T,Q) 44120000
|
|
END MOVECODE; 44121000
|
|
REAL PROCEDURE TAKE(N); VALUE N; INTEGER N; 44122000
|
|
TAKE ~ INFO[N.LINKR, N.LINKC]; 44123000
|
|
PROCEDURE PUT( ENTRY,AT); VALUE ENTRY,AT; INTEGER ENTRY,AT; 44124000
|
|
INFO[AT.LINKR, AT.LINKC] ~ ENTRY; 44125000
|
|
PROCEDURE JUMPCHKX; 44126000
|
|
COMMENT JUMPCHKX AND JUMPCHKNX HANDLE BRANCHING AROUND NON-EXECUTABLE 44127000
|
|
CODE, SUCH AS PROCEDURE DECLARATIONS, THUNKS, ETC. JUMPCHKX 44128000
|
|
IS CALLED IMMEDIATELY PRIOR TO EMITTING EXECUTABLE CODE: HE 44129000
|
|
WILL, IF THERE HAS BEEN ANY NON-EXECUTABLE CODE EMITTED, GO 44130000
|
|
BACK AND FIX UP A BRANCH. HE ALSO NOTICES WHETHER THIS IS THE 44131000
|
|
FIRST EXECUTABLE CODE, AND REMEMBERS WHERE IT IS; 44132000
|
|
IF FIRSTX < 0 THEN % FIRST EXECUTABLE CODE 44133000
|
|
FIRSTX ~ L ELSE % SO MARK IT. 44134000
|
|
IF LASTX } 0 THEN % THERE IS A BRANCH HANGING 44135000
|
|
BEGIN EMITB(BRUN,LASTX, L); % SO FILL IT IN. 44136000
|
|
IF FIRSTMT < 0 THEN % WE HAVENT DONE A STATEMENT YET 44137000
|
|
LASTX ~ -1 % SO FORGET LASTX. 44138000
|
|
END JUMPCHKX; 44139000
|
|
PROCEDURE JUMPCHKNX; 44140000
|
|
COMMENT JUMPCHKNX IS CALLED PRIOR TO EMITTING NON-EXECUTABLE CODE. HE 44141000
|
|
LEAVES TRACKS, IF NECESSARY, FOR JUMPCHKX TO USE; 44142000
|
|
IF FIRSTX } 0 THEN % THERE HAS BEEN EXECUTABLE CODE 44143000
|
|
IF FIRSTMT } 0 THEN % WE HAVE SEEN A STATEMENT 44145100
|
|
EMITB(BRUN,LASTX~BUMPL,FIRSTMT) ELSE 44145200
|
|
IF LASTX < 0 THEN LASTX ~ BUMPL; 44145300
|
|
44146000
|
|
44147000
|
|
44148000
|
|
44149000
|
|
44150000
|
|
PROCEDURE PUTADDL(ENTRY,LINK); VALUE ENTRY; 44151000
|
|
INTEGER LINK; 44152000
|
|
REAL ENTRY; 44153000
|
|
BEGIN 44154000
|
|
COMMENT PUTADDL INSERTS ENTRY AT LINK IN ADDL AND THEN UPDATES LINK BY 44155000
|
|
ONE; 44156000
|
|
ADDL[LINK.LINKR,LINK.LINKC] ~ ENTRY; 44157000
|
|
LINK ~ LINK+1 44158000
|
|
END PUTADDL; 44159000
|
|
REAL PROCEDURE GIT(X); VALUE X; INTEGER X; 44160000
|
|
COMMENT GIT RETURNS ADDL[X]; 44161000
|
|
GIT ~ ADDL[X.LINKR,X.LINKC]; 44162000
|
|
DEFINE RANGE(RANGE1,RANGE2)= 44163000
|
|
((RANGE1){ ELCLASS AND (RANGE2)} ELCLASS)#; 44164000
|
|
44165000
|
|
COMMENT SCATTERELBAT CARVES UP THE ELBATWORD; 44166000
|
|
PROCEDURE SCATTERELBAT; 44167000
|
|
BEGIN 44168000
|
|
REAL T; 44169000
|
|
T ~ ELBAT[I]; 44170000
|
|
KLASSF ~ T.CLASS; 44171000
|
|
TYPEF ~ T.TYPE; 44172000
|
|
FORMALF ~TYPEF=FORMALNAMEP OR TYPEF=FORMALNAMEQ; 44173000
|
|
VONF ~ TYPEF=FORMALVALUEP OR TYPEF=FORMALVALUEQ; 44174000
|
|
ITEMF ~ TYPEF=FORMALNAMEQ OR TYPEF=FORMALVALUEQ; 44174100
|
|
ADDRSF ~ T.ADDRESS; 44175000
|
|
COMMENT*** NOT ALL FIELDS ARE REFERENCED THIS MAY BE CHANGED; 44176000
|
|
END SCATTERELBAT; 44177000
|
|
PROCEDURE SEGMENT(IDINX, SIZE, EDOC); VALUE IDINX, SIZE; 44178000
|
|
INTEGER IDINX, SIZE; ARRAY EDOC[0, 0]; 44178100
|
|
COMMENT SEGMENT COPIES EDOC INTO THE TEMPORARY CODE FILE,TEMP. IT 44179000
|
|
ALSO PUTS A MESSAGE OUT, ONTO THE PRINTER FILE, IF WE ARE 44180000
|
|
LISTING THE PROGRAM. IDINX IS THE INFO INDEX OF THE ID OF THE 44181000
|
|
SEGMENT, IF APPLICABLE, OR ZERO IF THE SEGMENT IS NOT NAMED; 44182000
|
|
BEGIN 44183000
|
|
INTEGER I,M; 44184000
|
|
DEFINE CNT= CHRCNT#, LBUF= LBUFF#; 44185000
|
|
IF LISTOG THEN 44186000
|
|
BEGIN 44187000
|
|
BLANKOUT(16,LBUFF); 44188000
|
|
IF IDINX = 0 THEN INSERT(5,"BLOCK",LBUFF[12],4) ELSE 44189000
|
|
IF IDINX =-1 THEN INSERT(5," DATA",LBUFF[12],4) ELSE 44189100
|
|
MOVECHARACTERS(I~TAKE(IDINX).CNT,INFO[IDINX.LINKR, 44190000
|
|
IDINX.LINKC],4,LBUF[13-(I+7).[41:4]], 44191000
|
|
IF I MOD 8 ! 0 THEN 8 - I MOD 8 ELSE 0); 44192000
|
|
INSERT(2,"IS",LBUF[13],2); 44193000
|
|
ZN9N(SIZE,4,3,LBUF[13],5); 44194000
|
|
INSERT(5,"LONG.",LBUFF[14],2); 44195000
|
|
WRITELBUFF 44196000
|
|
END LISTOG ACTION; 44197000
|
|
IF ERRORCOUNT = 0 THEN 44197100
|
|
WRITEFILE(TEMP,EDOC,0,SIZE-1); 44205000
|
|
TEMPADDR ~ (SIZE+29) DIV 30 + TEMPADDR 44206000
|
|
END SEGMENT; 44207000
|
|
PROCEDURE ERR(N); VALUE N; INTEGER N; 44208000
|
|
COMMENT ERR, IS THE SAME AS FLAG EXCEPT THAT IT MAKES AN ATTEMPT TO 44209000
|
|
RECOVER FROM ERROR SITUATIONS BY SEARCHING FOR A SEMICOLON, 44210000
|
|
END, OR BEGIN 44211000
|
|
N- ERROR NUMBER; 44212000
|
|
BEGIN FLAG(N); 44213000
|
|
I~I-1; 44214000
|
|
IF N=400 THEN GO ENDOFITALL; 44215000
|
|
DO IF STEPI=BEGINV THEN STATEMENT 44216000
|
|
UNTIL ELCLASS=ENDV OR ELCLASS=SEMICOLON; 44217000
|
|
END ERR; 44218000
|
|
PROCEDURE PLACE(WORD)" INTO ADDL AT "(INX); VALUE WORD,INX; 44219000
|
|
REAL WORD,INX; 44220000
|
|
ADDL[INX.LINKR,INX.LINKC] ~ WORD; 44221000
|
|
PROCEDURE SEGDICT(SEGNO,DKADDR,SIZE,PBIT); 44222000
|
|
VALUE SEGNO,DKADDR,SIZE,PBIT; 44223000
|
|
INTEGER SEGNO,DKADDR,SIZE,PBIT; 44224000
|
|
COMMENT SEGDICT MAKES A PDPRT ENTRY FOR A PROGRAM SEGMENT. 44225000
|
|
IF LISTING IS GOING ON, WITH "PRTOG" TURNED ON, THEN HE 44226000
|
|
MAKES REMARKS ON THE PRINTER FILE ABOUT THE ENTRIES; 44227000
|
|
BEGIN 44228000
|
|
LABEL HAIRY; 44228100
|
|
PDPRT[PDINX.LINKR,PDINX.LINKC]~ SEGNO& 44229000
|
|
DKADDR[23:35:13]& 44230000
|
|
SIZE[10:35:13]& 44231000
|
|
(IF XTRNL THEN 4 ELSE 6)[2:45:3] & 44231100
|
|
PBIT[8:47:1]; 44232000
|
|
PDINX ~ PDINX + 1; 44233000
|
|
IF PRTOG THEN 44234000
|
|
BEGIN 44235000
|
|
BLANKOUT(16,LBUFF); 44236000
|
|
INSERT(3,"(0,",LBUFF[7],0); 44242100
|
|
INSERT(5,HEXOUT(SEGNO|16)+")",LBUFF[7],3); 44242200
|
|
INSERT(7,"SEGDESC",LBUFF[8],3); 44242300
|
|
INSERT(6,HEXOUT(SIZE.[32:16]&PBIT[24:47:1]),LBUFF[10],6); 44242400
|
|
INSERT(6,HEXOUT(DKADDR&SIZE[24:44:4]),LBUFF[11],4); 44242500
|
|
INSERT(1,3,LBUFF[10],4); 44242600
|
|
WRITELBUFF 44243000
|
|
END END OF SEGMENT DICTIONARY ENTRY; 44244000
|
|
PROCEDURE FLUSHPOOL; 44244100
|
|
BEGIN 44244150
|
|
LABEL TOMAKEABLOCK; 44244160
|
|
PDPRT[PPINX] ~ POOLMOM & TEMPADDR[23:35:13] & 44244200
|
|
(POOLX~POOLX+1)[10:35:13]&1[7:47:1]&REAL(POOLTOG)[8:47:1]; 44244250
|
|
PDINX ~ PDINX+1; 44244300
|
|
IF POOLTOG THEN SAVESIZE ~ SAVESIZE +POOLX; 44244320
|
|
SEGMENT(-1, POOLX, POOL); 44244350
|
|
POOLX ~ POOLMOM ~ 0; 44244400
|
|
END FLUSHPOOL; 44244450
|
|
INTEGER PROCEDURE NEWSEG(AT); 44245000
|
|
VALUE AT; INTEGER AT; 44246000
|
|
COMMENT NEWSEG DOES THE HOUSEKEEPING STUFF INVOLVED WITH FINDING A 44247000
|
|
NEW SEGMENT NUMBER AND INFORMING THE PROGRAMMER; 44248000
|
|
BEGIN 44249000
|
|
INTEGER N; 44250000
|
|
NEWSEG ~ N~ GETSPACE(-0); 44251000
|
|
IF LISTOG THEN 44252000
|
|
BEGIN 44253000
|
|
BLANKOUT(16,LBUFF); 44254000
|
|
INSERT(2,"IS", LBUFF[12],6); 44255000
|
|
INSERT(7,"SEGMEMT",LBUFF[13],1); 44256000
|
|
INSERT(5,HEXOUT (N),LBUFF[14],1); 44257000
|
|
IF AT = 0 THEN 44258000
|
|
INSERT(5,"BLOCK",LBUFF[12],0) ELSE 44259000
|
|
MOVECHARACTERS(GT1~TAKE(AT).CHRCNT, INFO[AT.LINKR,AT.LINKC44260000
|
|
],4,LBUFF[5],61 - GT1); 44261000
|
|
WRITELBUFF 44262000
|
|
END END NEW SEGMENT NUMBER ASSIGNMENT; 44263000
|
|
PROCEDURE GLOBALPCW(MOM,SEGNO,L,STATE); 44264000
|
|
VALUE MOM,SEGNO,L,STATE; INTEGER MOM,SEGNO,L,STATE; 44265000
|
|
COMMENT GLOBALPCW MAKES A PDPRT ENTRY FOR A LEVEL-0 PROGRAM 44266000
|
|
CONTROL WORD, AND NOTES THAT FACT ON THE PRINTER(SOMETIMES44267000
|
|
; 44268000
|
|
BEGIN LABEL ECH; 44269000
|
|
DEFINE H = HEXOUT#; 44269050
|
|
IF SEPARATOG THEN 44269100
|
|
IF PRTOG THEN 44269200
|
|
BEGIN 44269300
|
|
SEGNO~PCW.[35:13]; 44269400
|
|
L ~PCW.[15:13]|6 + PCW.[12:3]; 44269500
|
|
END ELSE ELSE 44269600
|
|
BEGIN 44269700
|
|
IF SVINFO THEN 44269800
|
|
PCW~SEGNO&(L DIV 6)[15:35:13]&(GTI1~L MOD 6)[12:45:3]& 44269900
|
|
STATE[28:47:1]&1[33:47:1]; 44269990
|
|
PDPRT[PDINX.LINKR,PDINX.LINKC]~MOM & 44270000
|
|
SEGNO[24:36:12]& 44271000
|
|
L[7:31:17]& 44272000
|
|
(IF XTRNL THEN 1 ELSE 7)[2:45:3]& 44272100
|
|
STATE[6:47:1]; 44273000
|
|
PDINX ~ PDINX + 1; 44274000
|
|
END; 44274010
|
|
IF PRTOG THEN 44275000
|
|
BEGIN 44276000
|
|
BLANKOUT(16,LBUFF); 44277000
|
|
GTI1 ~ L MOD 6; 44285000
|
|
INSERT(3,"(0,",LBUFF[7],0); 44285100
|
|
INSERT(5,H(MOM|16)+")",LBUFF[7],3); 44285200
|
|
INSERT(3,"PCW",LBUFF[8],3); 44285300
|
|
INSERT(6,H((L~L DIV 6)|256)+GTI1+832,LBUFF[9],1); 44285400
|
|
INSERT(6,H(L.[35:9]>I1[36:45:3]),LBUFF[10],6); 44285500
|
|
INSERT(6,H(SEGNO&1[33:47:1]&STATE[28:47:1]&L[24:44:4]), 44285600
|
|
LBUFF[11],4); 44285700
|
|
INSERT(1,7,LBUFF[10],4); 44285800
|
|
WRITELBUFF 44286000
|
|
END END OF REMEMBERING A GLOBAL PCW; 44287000
|
|
PROCEDURE FIRSTATEMENT; 44288000
|
|
COMMENT FIRSTATEMENT IS CALLED TO MARK THE EXISTENCE OF THE FIRST 44289000
|
|
STATEMENT IN A BLOCK OR PROCEDURE; 44290000
|
|
BEGIN 44290100
|
|
IF FIRSTX < 0 THEN FIRSTMT ~ L ELSE 44291000
|
|
EMITB(BRUN,IF LASTX < 0 THEN LASTX ~ BUMPL ELSE LASTX, 44292000
|
|
FIRSTMT ~ L); 44293000
|
|
IF CURRENT > 0 THEN 44293100
|
|
BEGIN EMIT(ZERO); EMITNUM(6); EMIT(STAG) END; 44293200
|
|
44293300
|
|
EMIT(PUSH) END; 44294000
|
|
PROCEDURE FILLPOOL; 44300000
|
|
BEGIN REAL I; 44301000
|
|
IF POOLMOM = 0 THEN POOLMOM ~ GETSPACE(-0) ELSE 44302000
|
|
IF POOLX+TAX > POOLMAX THEN 44303000
|
|
BEGIN 44304000
|
|
FLUSHPOOL; 44305000
|
|
POOLX ~ 0; POOLMOM ~ GETSPACE(-0); 44306000
|
|
END; 44307000
|
|
EMITNUM(POOLX); 44308000
|
|
EMITN(POOLMOM); 44309000
|
|
EMIT(INDX); 44310000
|
|
EMITNUM(MAXCSZ DIV 2); EMITR(42, 3); 44310300
|
|
POOLX ~ (GT2~POOLX)+TAX; 44311000
|
|
DO 44312000
|
|
BEGIN 44312100
|
|
MOVE(I~MIN( TAX.LINKC,256-TAX.LINKC),TA, 44313000
|
|
POOL[GT2.LINKR,GT2.LINKC]) ; 44314000
|
|
GT2 ~ GT2 + I; 44314100
|
|
END 44314200
|
|
UNTIL TAX~TAX-I { 0; 44315000
|
|
END FILLPOOL; 44316000
|
|
INTEGER PROCEDURE GETSTACK; 44317000
|
|
BEGIN 44318000
|
|
REAL GT1,GT2; 44319000
|
|
LABEL EXIT; 44320000
|
|
FOR GT1 ~ 0 STEP 1 UNTIL MAXTEMP DO 44321000
|
|
BEGIN 44321100
|
|
IF GT2~TEMPSTACK[GT1] = 0 THEN 44322000
|
|
IF CURRENT = 0 THEN 44322100
|
|
BEGIN GETSTACK ~TEMPSTACK[GT1] ~ - GETSPACE(-0); 44322200
|
|
GO EXIT; 44322300
|
|
END ELSE 44322400
|
|
BEGIN 44323000
|
|
EMITLINK(0&BRUN[24:40:8]); GT2 ~ L; 44323090
|
|
JUMPCHKX; 44323100
|
|
GETSTACK~TEMPSTACK[GT1]~-GETSPACE(- CURRENT); 44324000
|
|
EMIT(ZERO); 44324100
|
|
JUMPCHKNX; 44324200
|
|
EMITB(GET(GT2-3),GT2,L); 44324300
|
|
GO TO EXIT; 44325000
|
|
END; 44326000
|
|
IF GT2 > 0 THEN 44327000
|
|
BEGIN 44328000
|
|
IF GT2.[31:5] = CURRENT THEN 44329000
|
|
BEGIN 44330000
|
|
GETSTACK~TEMPSTACK[GT1]~ -GT2; 44331000
|
|
IF PRTOG THEN PRINTSPACE 44331100
|
|
(-"TEMP ",CURRENT,GT2.[36:12]); 44331200
|
|
GO TO EXIT; 44332000
|
|
END; 44333000
|
|
END; 44334000
|
|
END; 44334100
|
|
FLAG(415); 44334200
|
|
EXIT: 44335000
|
|
END GETSTACK; 44336000
|
|
PROCEDURE RTNSTACK(ADR); VALUE ADR; REAL ADR; 44350000
|
|
FOR GT1 ~ 0 STEP 1 UNTIL MAXTEMP DO 44351000
|
|
IF TEMPSTACK[GT1] = ADR THEN 44352000
|
|
BEGIN 44354000
|
|
TEMPSTACK[GT1] ~ ABS(ADR); 44355000
|
|
GT1 ~ MAXTEMP + 1; 44356000
|
|
END; 44357000
|
|
BOOLEAN PROCEDURE FUTZALABEL; 46000000
|
|
COMMENT FUTZALABEL TRIES TO DO A DEFAULT DECLARATION ON THE 46001000
|
|
THING IN ACCUM, AS A LABELID. IT RETURNS TRUE IFF IT 46002000
|
|
FAILS; 46003000
|
|
BEGIN LABEL PHONY; 46004000
|
|
FUTZALABEL ~ TRUE; COMMENT PREPARE FOR FAILURE; 46005000
|
|
IF ELBAT[I].LINK < NINFOO THEN COMMENT NOT LOCAL; 46006000
|
|
IF NOT BOOLEAN(ELBAT[I].RSVD) THEN COMMENT NOT RESERVED; 46007000
|
|
BEGIN 46008000
|
|
IF LISTOG THEN 46009000
|
|
BEGIN 46010000
|
|
BLANKOUT(14,LBUFF[2]); 46011000
|
|
LABELINE(ACCUM[1],COUNT,LBUFF[0]); 46012000
|
|
WRITELBUFF; 46013000
|
|
END; 46014000
|
|
FUTZALABEL ~ ENTER(0&CURRENT[30:42:6],F0RWARD,LABELID, 46015000
|
|
FALSE); 46016000
|
|
COMMENT WITH THOSE PARAMETERS, ENTER IS FALSE; 46017000
|
|
PUT(GT1 ~ TAKE(LASTINFO) & 0 [33:33:15] , LASTINFO); 46018000
|
|
ELBAT[I] ~ GT1 & LASTINFO [33:33:15]; 46019000
|
|
ELCLASS ~ LABELID; 46020000
|
|
END END FUTZALABEL; 46021000
|
|
BOOLEAN PROCEDURE IFCLAUSE; 50000000
|
|
COMMENT IFCLAUSE TAKES CARE OF " IF <BEXP> THEN", MORE OR LESS. THE 50001000
|
|
CALLER GETS TO BUMP L AND/OR EMIT THE BRANCH. IFCLAUSE 50002000
|
|
WILL, HOWEVER, TELL THE GUY WHAT KIND OF BRANCH TO DO: 50003000
|
|
BRTR OR BRFL; 50004000
|
|
BEGIN STEPIT; COMMENT PAST THE "IF"; 50005000
|
|
BEXP; 50006000
|
|
IF IFCLAUSE ~ LASTNOT = L THEN EMITNOT; 50007000
|
|
IF ELCLASS = THENV THEN STEPIT ELSE FLAG(501) 50008000
|
|
END IFCLAUSE; 50009000
|
|
INTEGER PROCEDURE CASEHEAD; 50010000
|
|
COMMENT CASEHEAD DOES THE SYNTAX-CHECKING AND EMITS SOME OF THE CODE50011000
|
|
FOR THE "CASE <AEXP> OF" CONSTRUCT. IT RETURNS L FOR THE 50012000
|
|
REST OF THE CODE, AND LEAVES SPACE ENOUGH IN EDOC; 50013000
|
|
BEGIN STEPIT; COMMENT PAST THE "CASE"; 50014000
|
|
IF AEXP { XTYPE THEN FLAG(502); 50015000
|
|
IF ELCLASS = OFV THEN STEPIT ELSE FLAG(503); 50016000
|
|
EMIT(DUPL); EMIT(DUPL); EMIT(ZERO); 50017000
|
|
EMIT(GREQ); EMIT(EXCH); 50018000
|
|
L ~ (CASEHEAD ~ L) + 12; 50019000
|
|
END FIRST PART OF CASE HEAD CONSTRUCT; 50020000
|
|
PROCEDURE CASETAIL(MAX,BASE,PLACE); 50021000
|
|
VALUE MAX,BASE,PLACE ; 50022000
|
|
INTEGER MAX,BASE,PLACE ; 50023000
|
|
COMMENT CASETAIL GOES BACK AND PICKS UP WHERE CASEHEAD LEFT OFF. 50024000
|
|
PLACE IS THE L FOR THE FIXUPS, MAX IS THE NUMBER OF ENTRYS50025000
|
|
IN THE BRANCH TABLE, AND BASE IS THE L OF THE BASE OF THE 50026000
|
|
BRANCH TABLE; 50027000
|
|
BEGIN INTEGER LO; 50028000
|
|
LO ~ L; L ~ PLACE; 50029000
|
|
FIGS ~ TRUE; 50029100
|
|
EMITNUM(MAX); EMIT(LSEQ); EMIT(LAND); EMIT(EXCH); 50030000
|
|
EMITNUM(BASE DIV 3); EMIT(ADD); EMIT( DBTR); 50031000
|
|
EMIT(NVLD); 50032000
|
|
L ~ LO 50033000
|
|
; FIGS ~ FALSE; 50033100
|
|
END SECOND PART OF CASE HEAD CODE; 50034000
|
|
PROCEDURE GOGEN(LABELBAT,BRANCHTYPE); 50035000
|
|
VALUE LABELBAT,BRANCHTYPE; 50036000
|
|
REAL LABELBAT,BRANCHTYPE; 50037000
|
|
BEGIN 50038000
|
|
IF (GT1 ~ TAKE(LABELBAT)).TYPE = F0RWARD THEN 50039000
|
|
BEGIN 50040000
|
|
EMITLINK(GT1 & BRANCHTYPE [24:40:8]); 50041000
|
|
PUT(GT1&(L-3)[32:32:16],LABELBAT); 50042000
|
|
END ELSE 50043000
|
|
EMITB(BRANCHTYPE,BUMPL,GT1.[32:16]); 50044000
|
|
END GOGEN; 50045000
|
|
BOOLEAN PROCEDURE SIMPGO; 50046000
|
|
BEGIN 50047000
|
|
LABEL EXIT,INN; 50048000
|
|
IF ELCLASS = GOV THEN 50049000
|
|
BEGIN 50050000
|
|
IF STEPI = TOV THEN STEPIT; 50051000
|
|
IF ELCLASS = LABELID THEN 50052000
|
|
IF ELBAT[I].LINK } NINFOO THEN 50053000
|
|
BEGIN 50054000
|
|
SIMPGO ~ TRUE; 50055000
|
|
GO TO EXIT; 50056000
|
|
END ELSE GO INN ELSE 50057000
|
|
IF FUTZALABEL THEN 50058000
|
|
INN: 50058900
|
|
BEGIN I ~ I - 1; ELCLASS ~ GOV END ELSE SIMPGO ~ TRUE50059000
|
|
END; 50060000
|
|
EXIT: 50061000
|
|
END SIMPGO; 50062000
|
|
PROCEDURE EMITPCW(LEVEL,AD,STATE,SEG ); 50063000
|
|
VALUE LEVEL,AD,STATE,SEG; 50064000
|
|
INTEGER LEVEL,AD,STATE,SEG; 50065000
|
|
COMMENT EMITPCW GENERATES CODE TO MAKE A PCW IN THE STACK; 50066000
|
|
BEGIN 50067000
|
|
50069000
|
|
LABEL AWAY; 50069100
|
|
PCW ~ SEG & LEVEL [29:43:5] & (AD DIV 6) [15:35:13] 50070000
|
|
& GTI1 ~ AD MOD 6 [12:45:3] & STATE [28:47:1]; 50071000
|
|
IF SEPARATOG THEN GO AWAY; 50071100
|
|
IF DEBUGTOG THEN 50072000
|
|
BUGOUT(10,IF XTRNL THEN LT48 ELSE MPCW,AD,PCW.[1:23],PCW.[24: 50073000
|
|
24]); 50074000
|
|
PUTSYL(IF XTRNL THEN LT48 ELSE MPCW); 50075000
|
|
WHILE (L ~ L + 1) MOD 6 ! 0 DO PUTSYL(NVLD); 50076000
|
|
EDOC[(L DIV 6).LINKR,(L DIV 6).LINKC] ~ PCW; 50077000
|
|
IF L ~ L + 6 } 49150 THEN FLAG(400); 50078000
|
|
AWAY: 50078900
|
|
END EMITPCW; 50079000
|
|
PROCEDURE WRITEFILE(DKFL,ARY,STARTINX,LASTINX); 50080000
|
|
VALUE STARTINX,LASTINX; 50081000
|
|
REAL STARTINX,LASTINX; 50082000
|
|
FILE DKFL; 50083000
|
|
ARRAY ARY[0,0]; 50084000
|
|
BEGIN 50085000
|
|
DEFINE WRITEDKFL = BEGIN 50086000
|
|
WRITE(DKFL,30,AY[*]); 50087000
|
|
GT1~0; 50088000
|
|
END#; 50089000
|
|
REAL N,GT1,GT2; 50090000
|
|
REAL GP1; 50091000
|
|
LABEL START; 50092000
|
|
GP1~STARTINX.LINKC; 50093000
|
|
GO TO START; 50094000
|
|
DO BEGIN 50095000
|
|
IF (GT1~GT1+N)=30 THEN WRITEDKFL; 50096000
|
|
GP1~IF GT2~STARTINX.LINKC=0 THEN 0 50097000
|
|
ELSE GP1+N; 50098000
|
|
START: MOVE(N~MIN(30-GT1,256-GT2,LASTINX-STARTINX+1), 50099000
|
|
ARY[STARTINX.LINKR,GP1],AY[GT1]); 50100000
|
|
END UNTIL (STARTINX~STARTINX+N)>LASTINX; 50101000
|
|
IF N>0 THEN WRITE(DKFL,30,AY[*]); 50102000
|
|
END OF WRITE FILE; 50103000
|
|
PROCEDURE MAKEARRAYROW; 50200000
|
|
BEGIN 50201000
|
|
REAL T, N, ELBW; 50202000
|
|
LABEL AWAY; 50203000
|
|
IF STEPI}BOOARRAYID AND ELCLASS<INTROAID AND ELCLASS!PCID THEN 50204000
|
|
BEGIN 50204100
|
|
N~BOUND(ELBW ~ ELBAT[I]); 50204150
|
|
IF TABLE(I+1) = LFTBRKT THEN 50204200
|
|
BEGIN STEPIT; 50204250
|
|
IF T~SUBSCRIBER(ELBW.ADDRESS,N) > 1 THEN 50204300
|
|
FLAG(828); 50204350
|
|
IF T!N THEN EMIT(INDX) ELSE 50204400
|
|
BEGIN EMITN(ELBW.ADDRESS); 50204450
|
|
IF ELBW.TYPE=FORMALNAMEP THEN EMIT(EVAL); 50204460
|
|
EMIT(LOAD); 50204470
|
|
END; 50204480
|
|
GO AWAY; 50204500
|
|
END; 50204550
|
|
END; 50204650
|
|
IF T ~ AEXP } XTYPE THEN 50205000
|
|
BEGIN 50206000
|
|
IF T = WTYPE THEN GO AWAY; 50207000
|
|
IF LASTINDEX + 1 = L THEN 50208000
|
|
IF GET(L ~ L - 1) = NXLV THEN 50209000
|
|
BEGIN 50210000
|
|
FIGS ~ TRUE; 50210100
|
|
EMIT(INDX); 50210200
|
|
FIGS ~ FALSE; 50210300
|
|
GO AWAY; 50210350
|
|
END; 50210400
|
|
FLAG(827); 50211000
|
|
END ELSE 50212000
|
|
IF T.[33:15] ! 1 THEN FLAG(829); 50213000
|
|
AWAY: 50214000
|
|
END MAKEARRAYROW; 50222000
|
|
COMMENT * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 51000000
|
|
EXPRESSIONS 51001000
|
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;51002000
|
|
INTEGER PROCEDURE EXPRSS; 51003000
|
|
COMMENT EXPRSS COMPILES AN EXPRESSION OF SOME SORT: GENERALLY, IT 51004000
|
|
WILL GOBBLE AS MUCH AS IT CAN. IT RETURNS A VALUE TELLING51005000
|
|
WHAT IT DID: 51006000
|
|
ATYPE: SINGLE-PRECISION ARITHMETIC 51007000
|
|
BTYPE: BOOLEAN 51008000
|
|
ETYPE: EXTENDED-PRECISION ARITHMETIC 51009000
|
|
RTYPE: REFERENCE 51010000
|
|
PTYPE: POINTER 51011000
|
|
WTYPE : WORD 51011500
|
|
XTYPE: ARRAY (INDEXABLE); 51012000
|
|
IF ELCLASS = IFV THEN 51013000
|
|
BEGIN IF GT1 ~ EXPRSS ~ IFEXP ! BTYPE THEN 51014000
|
|
IF ELCLASS = RELOP THEN 51015000
|
|
BEGIN RELATION(GT1); EXPRSS ~ BTYPE END 51016000
|
|
END ELSE 51017000
|
|
IF EXPRSS ~ BOOSEC = BTYPE THEN 51018000
|
|
WHILE ELCLASS = LOGOP DO BOOCOMP; 51019000
|
|
INTEGER PROCEDURE IFEXP; 51020000
|
|
COMMENT IFEXP CDMPILES A CONDITIONAL EXPRESSION, AND RETURNS THE 51021000
|
|
TYPE THEREOF. HE ALSO FIXES ANY SINGLE VS DOUBLE PROBLEM;51022000
|
|
BEGIN BOOLEAN B; 51023000
|
|
INTEGER T,TL; 51024000
|
|
B ~ IFCLAUSE; 51025000
|
|
TL ~ BUMPL; 51026000
|
|
IFEXP ~ T ~ EXPRSS; 51027000
|
|
EMITB(IF B THEN BRTR ELSE BRFL,TL,TL~BUMPL); 51028000
|
|
IF ELCLASS ! ELSEV THEN FLAG(504) ELSE STEPIT; 51029000
|
|
EXPRESSION(T); 51030000
|
|
EMITB(BRUN,TL,L); 51031000
|
|
LASTINDEX ~ LASTNOT ~ 0; 51032000
|
|
COMMENT THE ABOVE FUTZING IS TO KEEP CODE DIDDLERS FROM 51033000
|
|
BACKING UP INTO THE CONDITIONAL EXPRESSION; 51034000
|
|
END IFEXP; 51035000
|
|
BOOLEAN PROCEDURE SIMPLEX(KIND); VALUE KIND; INTEGER KIND; 51035100
|
|
COMMENT SIMPLEX COMPILES AN EXPRESSION AND RETURNS THE BIT FROM 51035200
|
|
KIND CORRESPONDING TO THE TYPE THEREOF; 51035300
|
|
SIMPLEX ~ BIT(47 -(IF T~EXPRSS < XTYPE THEN 46 ELSE T),KIND); 51035500
|
|
PROCEDURE EXPRESSION(TYPE); VALUE TYPE; INTEGER TYPE; 51036000
|
|
COMMENT EXPRESSION COMPILES AN EXPR OF THE SPECIFIED TYPE: IF 51037000
|
|
A SINGLE-DOUBLE MISMATCH OCCURS, THE EXPR IS ADJUSTED, 51038000
|
|
OTHER MISMATCHES ARE FLAGGED; 51039000
|
|
BEGIN LABEL ECH; 51040000
|
|
IF TYPE = BTYPE THEN BEXP ELSE 51041000
|
|
IF TYPE=RTYPE OR TYPE.[18:15]=RTYPE THEN GT1~REXP(FALSE) ELSE 51042000
|
|
IF TYPE = WTYPE THEN GT2 ~ EXPRSS ELSE 51042500
|
|
IF TYPE=PTYPE OR TYPE.[18:15]=PTYPE THEN GT1 ~ PEXP(FALSE) ELSE51043000
|
|
IF GT1 ~ AEXP ! TYPE THEN 51044000
|
|
IF(TYPE<XTYPE AND GT1<XTYPE) AND (TYPE.ARAYTPE=WTYPE OR 51044500
|
|
GT1.ARAYTPE=WTYPE) THEN ELSE 51044800
|
|
IF TYPE = ITYPE THEN 51045000
|
|
IF GT1 = ATYPE OR GT1 = ETYPE THEN EMIT(NTGR) 51046000
|
|
ELSE GO ECH 51047000
|
|
ELSE 51048000
|
|
IF TYPE = ETYPE THEN 51049000
|
|
IF GT1 = ATYPE OR GT1 = ITYPE OR GT1=WTYPE THEN EMIT(XTND)51050000
|
|
ELSE GO ECH 51051000
|
|
ELSE 51052000
|
|
IF TYPE = ATYPE THEN 51053000
|
|
IF GT1 = ETYPE THEN EMIT(SNGL) ELSE 51054000
|
|
IF GT1 = ITYPE THEN ELSE GO ECH 51055000
|
|
ELSE ECH: 51056000
|
|
IF GT1!WTYPE THEN FLAG(505) ELSE 51056500
|
|
51057000
|
|
END EXPRESSION; 51058000
|
|
INTEGER PROCEDURE CASEXP; 51059000
|
|
COMMENT CASEXP WILL COMPILE A CASE EXPRESSION, AND RETURN THE TYPE 51060000
|
|
THEREOF; 51061000
|
|
BEGIN INTEGER LT )"A TEMP FOR L USED FOR DIFFERENT THINGS"( 51062000
|
|
S )"USED FOR CREATING AND CHASING LINKS "( 51063000
|
|
T )"EXPRESSION TYPE, THEN TEMP FOR S "( 51064000
|
|
N; COMMENT EXPRESSION COUNTER; 51065000
|
|
LT ~ CASEHEAD; 51066000
|
|
IF ELCLASS = LFTPRN THEN STEPIT ELSE FLAG(506); 51067000
|
|
S ~ L; COMMENT S POINTS, IN TURN, TO THE START OF EACH 51068000
|
|
EXPRESSION; 51069000
|
|
CASEXP ~ T ~ EXPRSS; 51070000
|
|
EMIT3(S); S ~ L; COMMENT SAVE S IN EDOC, AND SAVE L IN S; 51071000
|
|
WHILE ELCLASS = COMMA DO 51072000
|
|
BEGIN STEPIT; 51073000
|
|
EXPRESSION(T); 51074000
|
|
N ~ N + 1; 51075000
|
|
EMIT3(S); S ~ L; 51076000
|
|
END EXPRESSION LIST; 51077000
|
|
WHILE L MOD 3 ! 0 DO EMIT(NVLD); COMMENT ADJUST FOR BRANCH TBL;51078000
|
|
CASETAIL(N,L,LT); COMMENT FIX UP HEAD CODE; 51079000
|
|
L ~ LT ~ 3 | N + L + 3; COMMENT COMPUTE EXIT POINT ADDRESS; 51080000
|
|
DO BEGIN 51081000
|
|
T ~ GET3(S-3); COMMENT GET OLD S; 51082000
|
|
EMITB(BRUN,S,L); COMMENT FIX EXIT BRANCH; 51083000
|
|
EMITB(BRUN,LT,S~T); COMMENT FIX TABLE BRANCH; 51084000
|
|
LT ~ LT - 3 51085000
|
|
END UNTIL N ~ N - 1 < 0; 51086000
|
|
IF ELCLASS ! RTPARN THEN FLAG(507) ELSE STEPIT; 51087000
|
|
END CASE EXPRESSION HANDLER; 51088000
|
|
PROCEDURE RELATION(T); VALUE T; INTEGER T; 51089000
|
|
COMMENT GUESS WHAT THIS GUY HANDLES... 51090000
|
|
T IS THE TYPE OF THE FIRST EXPRESSION(REFERENCE, POINTER, OR 51091000
|
|
ARITHMETIC), WHICH HAS ALREADY BEEN COMPILED; 51092000
|
|
BEGIN 51093000
|
|
INTEGER OP; 51094000
|
|
LABEL EXIT; 51094100
|
|
LABEL ON; 51094200
|
|
OP ~ ELBAT[I].DISP; 51095000
|
|
STEPIT; 51096000
|
|
IF T=ITYPE OR T=ATYPE OR T=DTYPE OR (T=WTYPE AND OP=SAME) THEN 51097000
|
|
BEGIN COMMENT ARITHMETIC TYPES; 51098000
|
|
IF GT1~AEXP<XTYPE OR (GT1=WTYPE AND OP!SAME)THEN FLAG(508)51099000
|
|
END ELSE 51100000
|
|
IF T = RTYPE THEN 51101000
|
|
BEGIN COMMENT REFERENCE RELOP MUST BE = OR !; 51102000
|
|
IF OP ! EQUL AND OP ! NEQL THEN FLAG(509); 51103000
|
|
T ~ REXP(FALSE); GO ON; 51104000
|
|
51104100
|
|
END ELSE 51105000
|
|
IF T = PTYPE THEN 51106000
|
|
BEGIN COMMENT POINTER OR STRING RELATION; 51107000
|
|
IF ELCLASS = STRING OR ELCLASS = STRNGCON THEN 51107100
|
|
BEGIN COMMENT STRING RELATION; 51107200
|
|
STRINGSOURCE; T ~ COUNT; 51107300
|
|
IF STEPI ! FORV THEN EMITNUM(T) ELSE 51107400
|
|
BEGIN STEPIT; EXPRESSION(ATYPE) END; 51107500
|
|
EMIT(OP-LESS+CLSD); EMIT(RTFF); 51107600
|
|
GO EXIT; 51107610
|
|
END ELSE 51107700
|
|
BEGIN 51107800
|
|
T ~ PEXP(TRUE); 51108000
|
|
IF ELCLASS = FORV THEN 51109000
|
|
BEGIN COMMENT STRING RELATION; 51110000
|
|
STEPIT; 51111000
|
|
EXPRESSION(ATYPE); 51112000
|
|
IF T=ATYPE THEN BEGIN 51112100
|
|
EMITPAIR(T~GETSTACK,OVRN); EMIT(EXSU); 51112200
|
|
EMIT(SRSC); EMITV(T); RTNSTACK(T) END; 51112300
|
|
EMIT(OP-LESS+CLSD); EMIT(RTFF); 51113000
|
|
GO EXIT; 51113100
|
|
END ELSE 51114000
|
|
IF T =ATYPE THEN ERR(510) ELSE 51114100
|
|
BEGIN 51115000
|
|
ON: 51115050
|
|
EMIT(SAME); 51115100
|
|
IF OP = NEQL THEN EMITNOT ELSE 51115200
|
|
IF OP ! EQUL THEN FLAG(510); 51115300
|
|
GO TO EXIT; 51115310
|
|
END; 51115400
|
|
END; 51116000
|
|
END ELSE FLAG(511); 51117000
|
|
EMIT(OP); 51118000
|
|
LASTNOT ~ -L; COMMENT ALLOW EMITNOT TO NEGATE RELOP; 51119000
|
|
EXIT: 51119100
|
|
END RELATION; 51120000
|
|
PROCEDURE BEXP; 51121000
|
|
IF GT1 ~ EXPRSS ! BTYPE AND GT1 ! WTYPE THEN FLAG(512); 51122000
|
|
INTEGER PROCEDURE AEXP; 51123000
|
|
IF ELCLASS = IFV THEN 51124000
|
|
BEGIN 51125000
|
|
IF(AEXP~GT1~IFEXP>ITYPE OR GT1=BTYPE) AND GT1!WTYPE THEN 51126000
|
|
FLAG(513) 51127000
|
|
END ELSE 51128000
|
|
AEXP ~ SIMPARITH(0); 51129000
|
|
INTEGER PROCEDURE SIMPARITH(T); VALUE T; INTEGER T; 51130000
|
|
COMMENT SIMRARITH COMPILES A SIMPLE ARITHMETIC (OR ARRAY) EXPRESSION, 51131000
|
|
AT LEAST TO THE POINT OF DOING THE ADDING-TYPE OPERATORS. 51132000
|
|
FOR THE CASES WHERE TRE FIRST PRIMARY HAS BEEN COMPILED, T 51133000
|
|
IS PASSED AS OTHER-THAN-ZERO, BEING THE TYPE OF THAT THING. 51134000
|
|
SIMPARITH, AS USUAL, RETURNS THE TYPE OF THE THING; 51135000
|
|
BEGIN 51136000
|
|
INTEGER OP; 51137000
|
|
LABEL AWAY; 51138000
|
|
IF T = 0 THEN 51139000
|
|
BEGIN 51140000
|
|
IF ELCLASS = ADDOP THEN 51141000
|
|
BEGIN OP ~ ELBAT[I].DISP; STEPIT END; 51142000
|
|
IF T ~ TERM(0) < XTYPE THEN 51143000
|
|
IF OP = 0 THEN GO AWAY ELSE FLAG(514); 51144000
|
|
IF OP = SUBT THEN EMIT(CHSN); 51145000
|
|
END ELSE 51146000
|
|
BEGIN IF ELCLASS=FACTOP THEN T ~ FACTOR(T); 51146500
|
|
IF ELCLASS = MULOP THEN T ~ TERM(T); 51147000
|
|
END; 51147500
|
|
WHILE ELCLASS = ADDOP DO 51148000
|
|
BEGIN 51149000
|
|
IF T=WTYPE THEN FLAG(554); 51149500
|
|
OP ~ ELBAT[I].DISP; STEPIT; 51150000
|
|
IF GT1~TERM(0)=WTYPE THEN FLAG(554)ELSE 51151000
|
|
IF GT1=DTYPE THEN T~DTYPE ELSE 51151500
|
|
IF T ! DTYPE THEN T ~ ATYPE; 51152000
|
|
EMIT(OP) 51153000
|
|
END; 51154000
|
|
AWAY: SIMPARITH ~ T 51155000
|
|
END SIMPARITH; 51156000
|
|
INTEGER PROCEDURE TERM(T); VALUE T; INTEGER T; 51157000
|
|
COMMENT TERM HANDLES EITHER ONE ARRAY DESIGNATOR OR A SERIES OF ONE OR 51158000
|
|
MORE PRIMARIES SEPARATED BY MULTIPLYING OPERATORS. IT RETURNS 51159000
|
|
AND GETS PASSED TO JUST LIKE SIMPARITH DOES; 51160000
|
|
BEGIN 51161000
|
|
INTEGER OP; 51162000
|
|
LABEL AWAY; 51163000
|
|
IF T = 0 THEN 51164000
|
|
IF T ~ FACTOR(0) < XTYPE THEN GO AWAY; 51165000
|
|
WHILE ELCLASS = MULOP DO 51166000
|
|
BEGIN 51167000
|
|
IF T =WTYPE THEN FLAG(554); 51167500
|
|
OP ~ ELBAT[I].DISP; STEPIT; 51168000
|
|
IF GT1~FACTOR(0)<XTYPE OR GT1 = WTYPE THEN FLAG(515) ELSE 51169000
|
|
IF GT1 = DTYPE THEN T ~ DTYPE ELSE 51170000
|
|
IF T ! DTYPE THEN 51171000
|
|
IF OP = IDIV THEN T ~ ITYPE ELSE 51172000
|
|
IF OP = MULX THEN T ~ DTYPE ELSE T ~ ATYPE; 51173000
|
|
EMIT(OP); 51174000
|
|
END; 51175000
|
|
AWAY: TERM ~ T 51176000
|
|
END TERM; 51177000
|
|
INTEGER PROCEDURE BOOSEC; 51178000
|
|
COMMENT BOOSEC GRABS OFF A BOOLEAN SECONDARY, WHICH IS A (POSSIBLY 51179000
|
|
NEGATED) BOOLEAN PRIMARY: OF COURSE, ALLOWANCES ARE MADE FOR 51180000
|
|
NON-BOOLEAN ACTION; 51181000
|
|
IF ELCLASS ! NOTOP THEN BOOSEC ~ BOOPRIM ELSE 51182000
|
|
BEGIN STEPIT; 51183000
|
|
IF BOOSEC ~ BOOPRIM ! BTYPE THEN FLAG(516); 51184000
|
|
EMITNOT 51185000
|
|
END BOOLEAN SECONDARY; 51186000
|
|
PROCEDURE BOOCOMP; 51187000
|
|
COMMENT BOOCOMP COMPLETES A BOOLEAN SOMETHING, WHERE THE SOMETHING MAY 51188000
|
|
BE SIMPLE, IMPLICATION, TERM, OR FACTOR, DEPENDING ON THE 51189000
|
|
LOGICAL OPERATOR THAT I IS POINTING TO AT ENTRY; 51190000
|
|
BEGIN LABEL ON; 51191000
|
|
REAL ELBW; 51192000
|
|
ELBW ~ ELBAT[I]; 51193000
|
|
DO BEGIN 51194000
|
|
IF ELBW.ADDRESS = 0 THEN COMMENT IMP OPERATOR-CHECK; 51194100
|
|
IF L = ABS(LASTNOT) THEN COMMENT WE CAN OPTIMIZE; 51194200
|
|
BEGIN EMITNOT; ELBW.ADDRESS ~ LOR END; 51194300
|
|
COMMENT THE "IMP" OPERATOR, AS IN A IMP B, MAY BE CODED IN51194400
|
|
(AT LEAST) TWO WAYS: AS NOT(A AND NOT B), OR AS 51194500
|
|
(NOT A) OR B. WE DO THE LATTER IFF THE "NOT" WILL51194600
|
|
DISAPPEAR: ELSE WE DO THE FORMER, AND HOPE THAT 51194700
|
|
SOMEBODY ELSE OPTIMISES; 51194800
|
|
STEPIT; 51195000
|
|
IF BOOSEC ! BTYPE THEN FLAG(517); 51196000
|
|
WHILE ELCLASS = LOGOP DO 51197000
|
|
IF ELBAT[I].TYPE > ELBW.TYPE THEN BOOCOMP ELSE GO ON; 51198000
|
|
ON: IF ELBW.ADDRESS = 0 THEN COMMENT IMP IS A FUNNY; 51199000
|
|
BEGIN EMITNOT; EMIT(LAND); EMIT(LNOT); LASTNOT ~ L END 51200000
|
|
ELSE EMIT(ELBW.ADDRESS); 51201000
|
|
END UNTIL ELBAT[I] ! ELBW; 51202000
|
|
END BOOLEAN COMPLETION; 51203000
|
|
INTEGER PROCEDURE ARITHCOMP(T); VALUE T; INTEGER T; 51204000
|
|
COMMENT ARITHCOMP COMPLETES AN ARITHMETIC EXPRESSION; 51205000
|
|
BEGIN 51206000
|
|
IF ELCLASS = PERIODV THEN COMMENT THE "." OPERATOR; 51206100
|
|
BEGIN IF T = ETYPE THEN FLAG(553); 51206200
|
|
IF STEPI = TAGV THEN BEGIN EMIT(RTAG); 51206250
|
|
IF T!WTYPE THEN T~ITYPE; STEPIT; END ELSE 51206270
|
|
IF GT1 ~ DOTIT = 0 THEN EMIT(DISO) ELSE 51206300
|
|
EMITI(GT1.[36:6], GT1.[42:6]); 51206400
|
|
END; 51206500
|
|
WHILE ELCLASS=AMPERSAND DO LAYITOUT (T); 51207000
|
|
IF T=BTYPE THEN BEGIN 51207300
|
|
IF ELCLASS!THENV AND ELCLASS!COMMA AND (ELCLASS<SEMICOLON 51207400
|
|
OR ELCLASS>ELSEV) THEN BOOCOMP 51207500
|
|
END ELSE 51207600
|
|
51208000
|
|
IF T =PTYPE THEN PTRCOMP ELSE 51209000
|
|
T ~SIMPARITH (T); 51209500
|
|
ARITHCOMP ~ T 51210000
|
|
END ARITHCOMP; 51211000
|
|
REAL PROCEDURE REXP(BOO); VALUE BOO; BOOLEAN BOO; %BOO IS A KLUDGE 51212000
|
|
COMMENT REXP HANDLES A REFERENCE EXPRESSION. INASMUCH AS THERE ARE NO 51213000
|
|
REFERENCE OPERATORS (EXCEPT ~, WHICH VARIABLE GETS TO HANDLE), 51214000
|
|
THIS IS ALL OF THE REFERENCE-EXPRESSION SYSTEM; 51215000
|
|
BEGIN INTEGER T; 51216000
|
|
LABEL FINI; 51216100
|
|
REXP ~ RTYPE; 51216200
|
|
IF ELCLASS { IDMAX THEN COMMENT WE MAKE A PRELIMINARY TEST TO 51217000
|
|
DIVIDE BETWEEN IDS AND OTHERS; 51218000
|
|
IF ELCLASS=REFID OR ELCLASS=WORDID THEN 51219000
|
|
BEGIN IF(GT1~VARIABLE(FP)).[18:15]!RTYPE AND GT1!WTYPE 51220000
|
|
THEN BEGIN 51220500
|
|
IF BOO AND REXP ~ GT1 = ATYPE THEN GO FINI 51220600
|
|
ELSE FLAG(518) END END ELSE 51220700
|
|
IF ELCLASS}BOOPROCID AND ELCLASS{PTRPROCID THEN BEGIN 51221000
|
|
IF GT1~PROCALL(TRUE,ELCLASS-BOOPROCID)!RTYPE AND GT1!WTYPE THEN51221300
|
|
FLAG(520) END ELSE 51221500
|
|
IF ELCLASS=REFARRAYID OR ELCLASS=WORDARRAYID THEN 51222000
|
|
BEGIN IF(GT1~VARIABLE(FP)).[18:15]!RTYPE AND GT1!WTYPE 51223000
|
|
THEN FLAG(519) END ELSE 51223500
|
|
IF ELCLASS = QUEUEID THEN ENTRYEXPR ELSE 51224000
|
|
IF ELCLASS = QUEUEARRAYID THEN ENTRYEXPR ELSE 51225000
|
|
FLAG(520) ELSE COMMENT THATS ALL THE ID-TYPE THINGS, 51226000
|
|
NOW WE WORK ON THE OTHERS; 51227000
|
|
IF ELCLASS = NULLV THEN % MAKE A GUESS 51228000
|
|
BEGIN EMIT(ZERO); 51229000
|
|
EMITNUM(5); 51230000
|
|
EMIT(STAG); 51231000
|
|
EMITNUM(3); EMITR(47,2); 51231100
|
|
STEPIT 51232000
|
|
END NULLV ELSE 51233000
|
|
IF ELCLASS=QALGID THEN QALGORITHM(0,0,TRUE) ELSE 51233500
|
|
IF ELCLASS = LFTPRN THEN 51234000
|
|
BEGIN STEPIT; 51235000
|
|
IF (GT1~EXPRSS).[FF]!RTYPE AND GT1!RTYPE AND GT1!WTYPE 51236000
|
|
THEN FLAG(521); 51236100
|
|
IF ELCLASS ! RTPARN THEN FLAG(522); 51237000
|
|
STEPIT 51238000
|
|
;GO TO FINI; 51238100
|
|
END PARENS ELSE 51239000
|
|
IF ELCLASS = CASEV THEN 51240000
|
|
BEGIN IF GT1~CASEXP!RTYPE AND GT1!WTYPE THEN FLAG(523) END ELSE51241000
|
|
IF ELCLASS = IFV THEN 51242000
|
|
BEGIN IF GT1~IFEXP!RTYPE AND GT1!WTYPE THEN FLAG(524) END ELSE 51243000
|
|
IF ELCLASS ! TYPEV THEN FLAG(525) ELSE 51244000
|
|
IF TAKE(ELBAT[I]).LINK ! REFV THEN FLAG(525) ELSE 51245000
|
|
IF STEPI ! LFTPRN THEN FLAG(526) ELSE 51246000
|
|
BEGIN STEPIT; 51247000
|
|
IF GTB1~(T~AEXP)!WTYPE AND T}XTYPE THEN FLAG(527) ELSE 51248000
|
|
IF T.[CF] !1 AND T!WTYPE THEN FLAG(528) ELSE 51249000
|
|
IF ELCLASS ! RTPARN THEN FLAG(522); 51250000
|
|
STEPIT 51251000
|
|
END; 51252000
|
|
WHILE ELCLASS=AMPERSAND DO LAYITOUT(ATYPE); 51252700
|
|
FINI: 51252999
|
|
END REFERENCE EXPRESSION; 51253000
|
|
PROCEDURE ENTRYEXPR; 51254000
|
|
BEGIN COMMENT HANDLES ENTRY EXPRESSIONS, MOST OF THE WORK IS 51254200
|
|
DONE BY QALGORITHM AND ACTUALPARAPART; 51254250
|
|
INTEGER ADDLADRES; 51254500
|
|
LABEL QUIT; 51254700
|
|
ADDLADRES ~ TAKE(ELBAT[I]).LINK; 51255000
|
|
IF ELCLASS = QUEUEARRAYID THEN 51255200
|
|
ADDLADRES ~ ADDLADRES+1; 51255500
|
|
COMMENT *** FIRST WORD OF ADDL FOR A QUEUE ARRAY CONTAINS INFORMATION 51255700
|
|
ON BOUNDS; 51255750
|
|
GT1.NOPAR ~ GIT(ADDLADRES).ITMNOF; 51255900
|
|
IF STEPI ! LFTPRN THEN BEGIN FLAG(543); GO QUIT END; 51256000
|
|
QALGORITHM(1,ADDLADRES,TRUE); 51256200
|
|
COMMENT 1 SAYS CALL IS FROM ENTRYEXP, TRUE SAYS CALL IS NOT FROM 51256220
|
|
STMT, QALGORITHM INVOKES IMPLICIT CALL ON THE ALLOCATE ALL- 51256240
|
|
ORITHM ASSOCIATED WITH THE QUEUE. ALLOCATE GETS SPACE FOR A 51256260
|
|
QUEUE ENTRY AND QALGORITHM EXITS WITH AN INDEXABLE DATA 51256270
|
|
DESCRIPTOR POINTING TO THIS SPACE IN THE TOP OF THE STACK; 51256290
|
|
ACTUALPARAPART(FALSE,ADDLADRES,GT1,FALSE); 51257000
|
|
COMMENT FIRST PARAMETER SAYS QUEUE IS NOT FORMAL, LAST PARAMETER SAYS51257500
|
|
CALL IS FROM ENTRYEXP. ACTUALPARAPART PASSES ACTUAL PARAME 51257520
|
|
-TERS (OR IRWS POINTING TO THEM) TO THE SPACE REFERENCED BY 51257540
|
|
THE DD IN THE TOP OF THE STACK; 51257560
|
|
QUIT: END ENTRYEXPR; 51258000
|
|
REAL PROCEDURE PEXP(BOO); VALUE BOO; BOOLEAN BOO; %BOO IS A KLUDGE 51259000
|
|
BEGIN 51260000
|
|
LABEL EXIT; 51261000
|
|
IF ELCLASS = IFV THEN 51262000
|
|
BEGIN 51263000
|
|
IF PEXP ~ GT1 ~ IFEXP ! PTYPE AND GT1 ! WTYPE THEN 51264000
|
|
BEGIN IF GT1 = ITYPE THEN PEXP~ GT1 ~ ATYPE; 51264050
|
|
IF NOT (BOO AND GT1=ATYPE) THEN FLAG(540); 51264100
|
|
END; 51264150
|
|
IF GT1 = WTYPE THEN PEXP ~ PTYPE; 51264200
|
|
GO TO EXIT; 51265000
|
|
END; 51266000
|
|
PEXP ~ PTRPRIM(BOO); 51267000
|
|
IF ELCLASS = ADDOP THEN PTRCOMP; 51268000
|
|
EXIT: 51269000
|
|
WHILE ELCLASS=AMPERSAND DO LAYITOUT(ATYPE); 51269700
|
|
END PEXP; 51270000
|
|
PROCEDURE PTRCOMP; 51271800
|
|
BEGIN 51272000
|
|
REAL OP; 51273000
|
|
LABEL EXIT; 51274000
|
|
IF ELCLASS ! ADDOP THEN GO TO EXIT; 51275000
|
|
OP ~ ELBAT[I].DISP; 51276000
|
|
STEPIT; 51277000
|
|
IF T ~ AEXP ! ITYPE AND T ! ATYPE THEN FLAG(541); 51278000
|
|
EMIT(EXPU); 51279000
|
|
EMIT(IF OP = ADD THEN SFDC ELSE SRDC); 51280000
|
|
EXIT: 51281000
|
|
END PTRCOMP; 51282000
|
|
PROCEDURE LONGSTRING; 51300000
|
|
BEGIN 51301000
|
|
DEFINE BUMPTAX=IF TAX~TAX+1}POOLMAX THEN ERROR(551)#; 51302000
|
|
LABEL EXIT; 51303000
|
|
TAX ~ 0; 51305000
|
|
DO BEGIN FLOG(THIFLAG,THI,TA[TAX]); 51306000
|
|
BUMPTAX; 51306100
|
|
END 51306200
|
|
UNTIL NOT GOBBLE(TRUE); 51307000
|
|
FLOG(THIFLAG, THI, TA[TAX]); 51308000
|
|
BUMPTAX; 51308100
|
|
COUNT ~ (TAX-1)|48+COUNT; 51309000
|
|
EXIT: 51311000
|
|
END LONGSTRING; 51312000
|
|
PROCEDURE STRINGSOURCE; 51313000
|
|
BEGIN COMMENT COMPILES LONG AND SHORT STRINGS AS SOURCES FOR 51314000
|
|
REPLACE STATEMENTS AND STRING RELATIONS; 51315000
|
|
REAL STREAM PROCEDURE FILLWORD(S,N,R,B,SK,D); 51316000
|
|
VALUE N, R, B, SK; 51317000
|
|
BEGIN 51318000
|
|
DI ~ D; 51319000
|
|
R(SI ~ S; SKIP SK SB; 51320000
|
|
N(IF SB THEN DS ~ SET ELSE DS ~ RESET; SKIP SB)); 51321000
|
|
SI ~ S; SKIP SK SB; 51322000
|
|
8(IF SB THEN DS ~ SET ELSE DS ~ RESET; SKIP SB); 51323000
|
|
DI ~ D; SI ~ D; 51324000
|
|
IF SB THEN BEGIN TALLY ~ 1; DS ~ RESET END; 51324100
|
|
FILLWORD ~ TALLY; 51324200
|
|
END FILLWORD; 51325000
|
|
REAL FLG; 51325100
|
|
IF ELCLASS = STRING THEN 51326000
|
|
BEGIN LONGSTRING; FILLPOOL END ELSE 51327000
|
|
BEGIN 51328000
|
|
IF COUNT = 48 OR LEFTY THEN BEGIN 51328010
|
|
FLG ~ REAL(THIFLAG); GT1 ~ THI; 51328020
|
|
END ELSE 51328030
|
|
FLG ~ FILLWORD(THI, COUNT, 48 DIV COUNT, GTI1 ~ 48 MOD 51328100
|
|
COUNT, IF LEFTY THEN 0 ELSE 48 - COUNT, GT1); 51329000
|
|
EMITNUMBER(GT1, FLG); 51330000
|
|
END; 51331000
|
|
COUNT ~ (COUNT+MAXCSZ-1) DIV MAXCSZ; 51332000
|
|
IF MAXCSZ < 4 THEN FLAG(0552); 51333000
|
|
END STRINGSOURCE; 51334000
|
|
PROCEDURE ARRAYROW; 51335000
|
|
BEGIN 51336000
|
|
LABEL EXIT; 51337000
|
|
REAL NDIMS, ELBW; 51338000
|
|
ELBW ~ ELBAT[I]; 51339000
|
|
NDIMS ~ BOUND(ELBW); 51340000
|
|
IF STEPI ! LFTBRKT THEN ERROR(0549); 51341000
|
|
IF SUBSCRIBER(ELBW.ADDRESS, NDIMS) ! 1 THEN ERROR(0550); 51342000
|
|
IF NDIMS = 1 THEN EMITN(ELBW.ADDRESS); 51343000
|
|
EXIT: 51344000
|
|
END ARRAYROW; 51345000
|
|
INTEGER PROCEDURE FACTOR(T); VALUE T; INTEGER T; 51401000
|
|
COMMENT FACTOR WORKS LIKE SIMPARITH AND TERM, HANDLING THE * (RAISED- 51402000
|
|
TO-THE-POWER) OPERATOR; 51403000
|
|
BEGIN 51404000
|
|
INTEGER N; 51404100
|
|
DEFINE T1 = NHI#, T2 = NLO#, L1 = RCOUNT#, L2 = REMCOUNT#; 51404200
|
|
LABEL ON, ROUND; 51405000
|
|
BOOLEAN MINUS; 51406000
|
|
IF T = 0 THEN 51407000
|
|
IF T ~ PRIMARY < XTYPE OR T = WTYPE THEN GO ON; 51408000
|
|
IF ELCLASS = FACTOP THEN 51409000
|
|
IF T = ITYPE THEN T ~ ATYPE; 51410000
|
|
ROUND: 51410500
|
|
WHILE ELCLASS = FACTOP DO 51411000
|
|
BEGIN 51412000
|
|
N ~ REAL(MINUS ~ FALSE); 51413000
|
|
IF STEPI = ADDOP THEN 51414000
|
|
BEGIN MINUS ~ ELBAT[I].DISP = SUBT; STEPIT END; 51415000
|
|
IF ELCLASS ! NUMBER THEN 51416000
|
|
BEGIN 51416020
|
|
IF N ~ PRIMARY ! ITYPE THEN 51416040
|
|
IF N < XTYPE THEN FLAG(573) ELSE EMIT(NTGR); 51416060
|
|
EMITPAIR(T1 ~ GETSTACK, OVRN); 51416080
|
|
EMIT1P(BRST,46); 51416100
|
|
L1 ~ L; EMITPAIR(T2 ~ GETSTACK, OVRN); 51416120
|
|
EMIT(LOG2); EMIT(ONE); EMIT(LSEQ); 51416140
|
|
L2 ~ BUMPL; 51416160
|
|
EMITV(T2); EMITB(BRFL,BUMPL,L+1); EMIT(DUPL); 51416180
|
|
EMIT(DUPL); EMIT(MULT); EMITV(T2); EMITI(38,38); 51416200
|
|
EMITB(BRUN,BUMPL,L1); EMITB(BRTR,L2,L); EMITV(T2); 51416220
|
|
L1 ~ BUMPL; EMITV(T1); EMIT1P(BRST,46); EMIT(CBON); 51416240
|
|
L2 ~ L; EMIT(ONE); EMIT(SUBT); EMITPAIR(T2,STON); 51416260
|
|
EMIT(ONE); EMIT(GREQ); 51416280
|
|
N ~ BUMPL; EMIT(MULT); EMITV(T2); 51416300
|
|
EMITB(BRUN,BUMPL,L2); EMITB(BRFL,L1,L); EMIT(DLET); 51416320
|
|
EMIT(ONE); EMITB(BRFL,N,L); EMITV(T1); 51416340
|
|
EMIT(ZERO); EMIT(LESS); 51416360
|
|
EMITB(IF MINUS THEN BRTR ELSE BRFL,BUMPL,L+3); 51416380
|
|
EMIT(ONE); EMIT(EXCH); EMIT(DIVD); 51416400
|
|
RTNSTACK(T1); RTNSTACK(T2); 51416420
|
|
GO ROUND 51416440
|
|
END X TO THE NONCONSTANT; 51416460
|
|
IF THI.[3:6] ! 0 THEN FLAG(573); 51417000
|
|
WHILE THI.[9:38] ! 0 DO 51418000
|
|
BEGIN 51419000
|
|
EMIT(DUPL); 51420000
|
|
IF BOOLEAN(THI) THEN 51421000
|
|
BEGIN N ~ N + 1; EMIT(DUPL) END; 51422000
|
|
EMIT(MULT); 51423000
|
|
THI ~ THI.[9:38]; 51424000
|
|
END; 51425000
|
|
IF BOOLEAN(THI) THEN 51426000
|
|
WHILE N ~ N - 1 > 0 DO EMIT(MULT) ELSE 51427000
|
|
BEGIN EMIT(DLET); EMIT(ONE) END; 51428000
|
|
IF MINUS THEN 51429000
|
|
BEGIN EMIT(ONE); EMIT(EXCH); EMIT(DIVD) END; 51430000
|
|
STEPIT; 51430100
|
|
END; 51431000
|
|
ON: FACTOR ~ T; 51432000
|
|
END; 51433000
|
|
INTEGER PROCEDURE BITFIDDLE(S); VALUE S; BOOLEAN S; 51450000
|
|
COMMENT THIS IS THE "SET" AND "RESET" HANDLER. S TELLS US WHICH; 51451000
|
|
BEGIN 51454000
|
|
LABEL ECH, OWT; 51455000
|
|
IF STEPI ! LFTPRN THEN FLAG(576); 51456000
|
|
STEPIT; 51457000
|
|
BITFIDDLE ~ EXPRSS; COMMENT THESE GUYS ARE TYPE-TRANSPARENT; 51458000
|
|
IF ELCLASS ! COMMA THEN FLAG(577); 51460000
|
|
IF STEPI = NUMBER THEN 51461000
|
|
BEGIN 51462000
|
|
IF RESULT ! RTPARN THEN GO OWT; 51463000
|
|
IF THI > 47 THEN GO ECH; 51465000
|
|
IF THI.[1:8] ! 0 THEN 51466000
|
|
ECH: FLAG(578) ELSE 51467000
|
|
EMIT1P(IF S THEN BSET ELSE BRST,THI); 51468000
|
|
STEPIT; 51469000
|
|
END STATIC KIND OF BITFIDDLE ELSE 51470000
|
|
OWT: BEGIN 51471000
|
|
IF AEXP < XTYPE THEN GO ECH; 51472000
|
|
EMIT(IF S THEN DBST ELSE DBRS); 51473000
|
|
END; 51474000
|
|
IF ELCLASS ! RTPARN THEN FLAG(579); 51475000
|
|
STEPIT; 51476000
|
|
END BITFIDDLE; 51477000
|
|
PROCEDURE MONITER (ELBW); 57000000
|
|
VALUE ELBW; 57001000
|
|
REAL ELBW; 57002000
|
|
BEGIN COMMENT MONITER SETS UP PARAMETERS AND ISSUES A CALL ON 57003000
|
|
A TYPED PROCEDURE WHOSE ADDRESS IS KEPT IN THE LINK FIELD 57004000
|
|
OF THE INFO WORD. THE FIRST PARAMETER IS THE FIRST 57005000
|
|
7 (5500) OR FEWER CHARACTERS OF THE IDENTIFIER AND THE 57006000
|
|
SECOND IS THE VALUE BEING ASSIGNED TO THE VARIABLE AND 57007000
|
|
RETURNED BY THE PROCEDURE. 57008000
|
|
;57009000
|
|
EMITN (TAKE (GT3 ~ ELBW.LINK).LINK); 57010000
|
|
EMIT (EXCH); 57011000
|
|
EMIT (IMKS); 57012000
|
|
GT1 ~ TAKE (GT3 + 1); 57013000
|
|
IF GT2 ~ GT1.CHRCNT > 7 THEN GT2 ~ 7; 57014000
|
|
GT1 ~ " "; 57015000
|
|
MOVECHARACTERS (GT2, INFO[GT3.LINKR,GT3.LINKC+1], 4, GT1, 1); 57016000
|
|
EMITNUM (GT1); 57017000
|
|
EMIT (EXCH); 57018000
|
|
EMIT (ENTR); 57019000
|
|
END MONITER; 57020000
|
|
5702050057141000
|
|
REAL PROCEDURE VARIABLE(F); 57021000
|
|
VALUE F; 57022000
|
|
INTEGER F; 57023000
|
|
BEGIN 57024000
|
|
REAL ADDRS,ELBW,DIALS,TYP,T; 57025000
|
|
BOOLEAN ARY,FORMAL,ADDRSTOG,QUE,FLD; 57026000
|
|
DEFINE SBPT = [33:33:15] #, 57026020
|
|
TIPE = [18:33:15] #; 57026040
|
|
DEFINE SBT=TYP#; 57026100
|
|
LABEL A1,A2,ASSGN,FEILD,AWAY; 57027000
|
|
FORMAL~TYP~(ELBW~ELBAT[I]).TYPE=FORMALNAMEP OR TYP=FORMALNAMEQ;57029000
|
|
IF RANGE(BOOPROCID,PTRPROCID) THEN 57030000
|
|
BEGIN 57031000
|
|
T~ELCLASS-BOOPROCID; 57032000
|
|
IF TYP!WITHINBODY THEN BEGIN ERR(532); GO AWAY END; 57033000
|
|
ELBW.ADDRESS~ADDRS~GIT(TAKE(ELBW)).ADDRESS; 57034000
|
|
STEPIT; ADDRSTOG~TRUE; GO TO ASSGN; 57035000
|
|
END; 57036000
|
|
ADDRS~ELBW.ADDRESS; 57037000
|
|
T~IF ELCLASS=EVENTID OR ARY~ELCLASS=EVENTARRAYID THEN EVNTV 57038000
|
|
ELSE ELCLASS-( 57039000
|
|
IF RANGE(BOOID,PTRID) THEN BOOID ELSE 57040000
|
|
IF ARY~RANGE(BOOARRAYID,WORDARRAYID) THEN BOOARRAYID ELSE 57041000
|
|
IF ARY~RANGE(BOOROAID,INTROAID) THEN BOOROAID ELSE 57042000
|
|
(ELCLASS+1)); 57043000
|
|
IF T<0 THEN BEGIN ERR(111); GO AWAY END; 57044000
|
|
IF QUE~TYP=FORMALNAMEQ OR TYP=FORMALVALUEQ THEN 57045000
|
|
BEGIN 57046000
|
|
ITEMREFERENCE(F); 57047000
|
|
IF T=EVNTV THEN EMIT(LOAD) ELSE 57048000
|
|
IF FORMAL THEN EMIT(EVAL); 57049000
|
|
IF F=FR THEN GO AWAY; 57050000
|
|
END ELSE STEPIT; 57051000
|
|
IF ARY THEN 57052000
|
|
BEGIN 57053000
|
|
IF ADDRS=0 AND TYP=INTRINSIC THEN ARY~BOOLEAN(3); % REG, 57054000
|
|
SBT~-GIT(TAKE(ELBW)).NODIM; 57055000
|
|
IF ELCLASS=LFTBRKT THEN 57056000
|
|
IF-SBT=SBT~SUBSCRIBER(IF QUE OR ADDRS=4 THEN 0 ELSE ADDRS,57057000
|
|
-SBT) THEN SBT~-SBT; % AN EMPTY ARRAY IDENTIFIER. 57058000
|
|
IF SBT!0 THEN 57059000
|
|
BEGIN 57060000
|
|
IF REAL(ARY)=3 THEN BEGIN ERR(529); GO AWAY END; 57061000
|
|
T~-0&(T)TIPE&(SBT)SBPT; % THIS MAKES IT < "XTYPE". 57062000
|
|
SBT ~ SBT.[1:1]; % AN EMPTY ARRAY IDENTIFIER. 57063000
|
|
END ELSE 57064000
|
|
ARY~ARY AND BOOLEAN(2); 57065000
|
|
IF F=FR THEN BEGIN EMIT(INDX); GO TO AWAY END; 57065400
|
|
IF F=FS THEN 57065500
|
|
IF FLD~ELCLASS=PERIODV THEN GO TO A1; 57065700
|
|
IF ELCLASS=ASSNOP THEN 57066000
|
|
A1: BEGIN 57067000
|
|
IF NOT ARY THEN 57068000
|
|
IF ELBW.CLASS}BOOROAID THEN FLAG(539); 57069000
|
|
IF BOOLEAN(SBT) THEN 57070000
|
|
IF QUE THEN ELSE 57071000
|
|
BEGIN 57072000
|
|
EMITN(ADDRS); 57073000
|
|
IF FORMAL THEN EMIT(EVAL); 57074000
|
|
END ELSE 57075000
|
|
BEGIN 57076000
|
|
IF ADDRS=4 THEN EMITN(4); 57077000
|
|
IF REAL(ARY)!2 THEN EMIT(INDX); 57078000
|
|
END; 57079000
|
|
IF FLD THEN GO TO FEILD; GO TO ASSGN; 57080000
|
|
END; 57081000
|
|
IF F=FS THEN BEGIN ERR(538); GO AWAY END; 57081500
|
|
IF QUE THEN GO AWAY; 57082000
|
|
IF ARY THEN 57083000
|
|
IF BOOLEAN(SBT) THEN 57084000
|
|
BEGIN 57085000
|
|
EMITN(ADDRS); 57086000
|
|
IF FORMAL THEN EMIT(EVAL); 57087000
|
|
EMIT(LOAD); 57088000
|
|
END ELSE EMIT(NXLN) ELSE 57089000
|
|
IF REAL(ARY)=2 THEN EMIT(RPRR) ELSE 57090000
|
|
IF ADDRS=4 THEN EMIT(LODT) ELSE 57091000
|
|
BEGIN 57092000
|
|
IF T>ITYPE AND T!EVNTV THEN EMIT(INDX); 57093000
|
|
EMIT(IF T=WTYPE THEN LODT ELSE 57094000
|
|
IF T>ITYPE AND T!EVNTV THEN NXLN ELSE NXLV); 57095000
|
|
END; GO AWAY; 57096000
|
|
END; 57097000
|
|
IF F=FR THEN 57097100
|
|
BEGIN 57097200
|
|
EMITN(ADDRS); IF FORMAL THEN EMIT(EVAL); GO AWAY ; 57097300
|
|
END; 57097400
|
|
IF F=FS THEN 57097500
|
|
IF FLD~ELCLASS=PERIODV THEN GO TO A2; 57097600
|
|
IF ELCLASS=ASSNOP THEN 57098000
|
|
A2: BEGIN 57099000
|
|
IF QUE THEN ELSE 57100000
|
|
IF FORMAL THEN EMITPAIR(ADDRS,EVAL) ELSE ADDRSTOG~TRUE; 57101000
|
|
IF FLD THEN GO TO FEILD; 57102000
|
|
ASSGN: IF STEPI=FACTOP THEN 57103000
|
|
BEGIN 57104000
|
|
STEPIT; 57105000
|
|
FEILD: IF REAL(ARY)=2 THEN 57106000
|
|
BEGIN EMIT(DUPL); EMIT(RPRR) END ELSE 57107000
|
|
BEGIN 57108000
|
|
IF ADDRSTOG THEN 57108200
|
|
IF T>ITYPE AND T!EVNTV THEN 57108400
|
|
BEGIN EMITN(ADDRS); ADDRSTOG~FALSE END ELSE 57108600
|
|
EMITV(ADDRS); 57108800
|
|
IF ADDRSTOG THEN ELSE 57109000
|
|
BEGIN 57109200
|
|
EMIT(DUPL); 57109500
|
|
EMIT(IF T=WTYPE THEN LODT ELSE LOAD); 57110000
|
|
END; 57111000
|
|
END; 57112000
|
|
IF FLD THEN 57113000
|
|
BEGIN 57113020
|
|
IF STEPI=TAGV THEN 57113040
|
|
BEGIN DIALS~-2; STEPIT END ELSE DIALS~DOTIT; 57113060
|
|
IF ELCLASS=ASSNOP THEN STEPIT ELSE 57113080
|
|
BEGIN ERR(538); GO AWAY END; 57113100
|
|
EXPRESSION(IF T=BTYPE THEN BTYPE ELSE ATYPE); 57113120
|
|
IF DIALS=-2 THEN EMIT(STAG) ELSE 57113140
|
|
IF DIALS=0 THEN EMIT(DINS) ELSE 57113160
|
|
EMITR(DIALS.[36:6],DIALS.[42:6]); 57113180
|
|
END ELSE GT1~ARITHCOMP(T); 57113200
|
|
END ELSE EXPRESSION(T); 57114000
|
|
IF ELBW.MONF=1 THEN MONITER(ELBW); 57114500
|
|
IF REAL(ARY)=2 THEN EMIT(SPRR) ELSE 57115000
|
|
BEGIN 57116000
|
|
IF ADDRSTOG THEN EMITN(ADDRS) ELSE 57117000
|
|
IF T>ITYPE AND T!EVNTV OR ARY THEN EMIT(EXCH); 57118000
|
|
IF T>ITYPE AND T!EVNTV OR ARY THEN 57118300
|
|
EMIT(IF F=FS THEN OVRD ELSE OVRN) ELSE 57118500
|
|
EMIT(IF F=FS THEN STOD ELSE STON); 57119000
|
|
END; 57120000
|
|
GO AWAY; 57120500
|
|
END; 57121000
|
|
IF F=FS THEN BEGIN ERR(538); GO AWAY END; 57121500
|
|
IF QUE THEN GO AWAY; 57122000
|
|
IF T>ITYPE AND T!EVNTV THEN 57123000
|
|
BEGIN 57124000
|
|
EMITN(ADDRS); 57125000
|
|
IF FORMAL THEN EMIT(EVAL); 57126000
|
|
EMIT(IF T=WTYPE THEN LODT ELSE LOAD); 57127000
|
|
END ELSE 57128000
|
|
EMITV(ADDRS); 57129000
|
|
AWAY: 57130000
|
|
IF VARIABLE~T =PTYPE OR T=RTYPE THEN 57131000
|
|
VARIABLE ~ -1&(T)TIPE; 57131100
|
|
END OF VARIABLE; 57132000
|
|
PROCEDURE LAYITOUT (TYPE); VALUE TYPE; INTEGER TYPE; 57142000
|
|
BEGIN COMMENT 57143000
|
|
;57144000
|
|
REAL ELBW, ADDLWD; 57145000
|
|
REAL DIALS; 57145050
|
|
DEFINE ELCLAS = ELCLASS #; 57145100
|
|
BOOLEAN SIMPLE; 57146000
|
|
INTEGER ADDLJ, ADDLN, T, S, N; 57147000
|
|
INTEGER NEXTCLS; 57147100
|
|
LABEL EXPR1, EXPR2, EXPR3; 57147200
|
|
LABEL WAY; 57147500
|
|
LABEL NEXT, QUIT; 57148000
|
|
DEFINE ADDLI = ADDLJ.LINKR, ADDLJ.LINKC #, 57149000
|
|
SCAT = DO UNTIL STEPI = SEMICOLON; GO QUIT#; 57150000
|
|
STEPIT; 57151000
|
|
IF (ELBW ~ TAKE (ELBAT[I].LINK)).CLASS ! LAYOUTID 57152000
|
|
THEN 57153000
|
|
BEGIN 57153010
|
|
EXPRESSION(TYPE); 57153020
|
|
IF ELCLASS ! LFTBRKT THEN GO WAY; 57153030
|
|
LITERALS ~ TRUE; 57153035
|
|
IF STEPI!NUMBER THEN GO EXPR1; 57153040
|
|
IF TABLE(I+1)=COLON THEN BEGIN 57153045
|
|
S ~ THI; STEPIT END ELSE BEGIN 57153050
|
|
EXPR1: S ~ -1; IF NOT SIMPLEX(14) THEN GO WAY END; 57153055
|
|
IF ELCLASS ! COLON THEN GO WAY; 57153060
|
|
IF STEPI!NUMBER THEN GO EXPR2; 57153065
|
|
IF T~TABLE(I+1)=COLON OR T=RTBRKT THEN BEGIN 57153070
|
|
IF S<0 THEN GO EXPR2; T~THI; STEPIT END ELSE BEGIN 57153075
|
|
EXPR2: IF S}0 THEN EMITNUM(S); S ~ -1; 57153080
|
|
IF NOT SIMPLEX(14) THEN GO WAY END; 57153085
|
|
IF ELCLASS=COLON THEN BEGIN 57153090
|
|
IF STEPI!NUMBER THEN GO EXPR3; 57153100
|
|
IF TABLE(I+1)=RTBRKT THEN BEGIN 57153110
|
|
IF S<0 THEN GO EXPR3; N ~ THI; STEPIT; 57153120
|
|
IF S}48 OR T}48 OR N>48 THEN FLAG(704); 57153125
|
|
EMITD(S,T,N) END ELSE BEGIN 57153130
|
|
EXPR3: IF S}0 THEN BEGIN EMITNUM(S); EMITNUM(T) END; 57153140
|
|
IF NOT SIMPLEX(14) THEN GO WAY; 57153150
|
|
EMIT(DFTR) END 57153160
|
|
END THE TWO COLON CASE ELSE 57153170
|
|
IF S}0 THEN BEGIN IF S}48 OR T>48 THEN FLAG(704); 57153175
|
|
EMIT2P(INSR, S, T) END ELSE BEGIN 57153180
|
|
EMIT(RSUP); EMIT(DINS) END; 57153185
|
|
IF LITERALS THEN WAY: FLAG(533); 57153190
|
|
IF ELCLASS = RTBRKT THEN STEPIT ELSE 57153200
|
|
BEGIN 57153210
|
|
WHILE ELCLASS!RTBRKT AND ELCLASS!SEMICOLON DO 57153220
|
|
STEPIT; 57153230
|
|
FLAG(533); 57153240
|
|
END; 57153250
|
|
GO QUIT 57153260
|
|
END; 57153270
|
|
IF STEPI ! LFTPRN 57154000
|
|
THEN BEGIN FLAG (534); SCAT END; 57155500
|
|
ADDLJ ~ ELBW.LINK - 1; 57156000
|
|
ADDLN ~ ELBW.ADDRESS; 57157000
|
|
ELCLASS ~ COMMA; 57157100
|
|
NEXT: WHILE ADDLJ ~ ADDLJ + 1 < ADDLN DO 57158000
|
|
BEGIN 57159000
|
|
IF ELCLASS!RTPARN THEN 57159040
|
|
IF ELCLASS!COMMA THEN FLAG(535); 57159060
|
|
DIALS ~ 0; 57159100
|
|
DEBLANK; 57160000
|
|
ADDLWD ~ ADDL[ADDLI]; 57161000
|
|
IF CHR = "*" 57162000
|
|
THEN BEGIN 57163000
|
|
ELCLAS ~ TABLE (I~I+2); 57164000
|
|
ADDLJ ~ ADDLJ + ADDLWD.LAYINIT; 57165000
|
|
IF ELCLAS= RTPARN THEN ADDLJ~ADDLN; 57165500
|
|
GO NEXT; 57166000
|
|
END; 57167000
|
|
IF SIMPLE ~ ADDLWD.LAYLTA = 0 AND ADDLWD.LAYLTB = 0 57168000
|
|
AND T ~ ADDLWD.LAYCODE = FIELDID 57169000
|
|
THEN BEGIN 57170000
|
|
S ~ ADDLWD.LAYLNA; 57171000
|
|
N ~ ADDLWD.LAYLNB; 57172000
|
|
END 57173000
|
|
ELSE IF T ! TAGV 57174000
|
|
THEN IF T = LAYOUTID 57175000
|
|
THEN IF (GT1 ~ TAKE (ADDLWD.LINK)).ADDRESS ! 0 57176000
|
|
THEN BEGIN 57177000
|
|
S ~ GT1.STARTBIT; 57178000
|
|
SIMPLE ~ TRUE; 57179000
|
|
N ~ GT1.NOOFBITS; 57180000
|
|
END 57181000
|
|
ELSE DIALS ~ GIT (GT1.LINK) & 1[1:47:1] 57182000
|
|
ELSE DIALS ~ ADDLWD & 1 [1:47:1]; 57183000
|
|
IF ELCLAS ! RTPARN THEN DEBLANK; 57183100
|
|
IF CHR = "," OR CHR =")" OR ELCLAS = RTPARN 57184000
|
|
THEN BEGIN 57184100
|
|
IF NEXTCLS~ELCLAS!RTPARN THEN NEXTCLS~STEPI; 57184150
|
|
IF N =1 AND T! TAGV AND SIMPLE THEN 57184175
|
|
BEGIN IF N ~ ADDLWD.LAYINIT ! 0 THEN 57184200
|
|
BEGIN 57184250
|
|
N ~ GIT(ADDLJ ~ ADDLJ + 1).[47:1]; 57184300
|
|
EMIT1P(BSET&(1-N)[44:47:1],S); 57184400
|
|
END; 57184450
|
|
GO TO NEXT 57184500
|
|
END ELSE 57184600
|
|
IF ADDLWD.LAYINIT = 0 57185000
|
|
THEN GO NEXT 57186000
|
|
ELSE BEGIN 57187000
|
|
IF DIALS !0 57187100
|
|
THEN DOTTER (DIALS); 57187200
|
|
ADDLJ ~ ADDLJ + 1; 57187300
|
|
EMITNUM (ADDL[ADDLI]) 57187400
|
|
; ELCLAS ~ NEXTCLS; 57187450
|
|
END 57187500
|
|
END 57187600
|
|
ELSE BEGIN 57188000
|
|
IF DIALS ! 0 57188010
|
|
THEN DOTTER (DIALS); 57188020
|
|
STEPIT; 57188025
|
|
IF AEXP < XTYPE 57188030
|
|
THEN FLAG(544) 57188100
|
|
ELSE BEGIN 57188200
|
|
57188300
|
|
ADDLJ ~ ADDLJ + ADDLWD.LAYINIT; 57188400
|
|
END; 57188500
|
|
END; 57188600
|
|
IF T =TAGV 57189000
|
|
THEN EMIT (STAG) 57190000
|
|
ELSE IF SIMPLE THEN EMITR (S, N) ELSE EMIT (DINS); 57191000
|
|
END; 57192000
|
|
57192100
|
|
IF ELCLASS ! RTPARN THEN BEGIN FLAG(535); SCAT END ELSE STEPIT;57193000
|
|
QUIT: 57194000
|
|
END LAYITOUT; 57195000
|
|
INTEGER PROCEDURE SUBSCRIBER (ADDRESS, BOUNDS); 57196000
|
|
VALUE ADDRESS, BOUNDS; 57197000
|
|
INTEGER ADDRESS,BOUNDS; 57198000
|
|
BEGIN COMMENT SUBSCRIBER HANDLES A SUBSCRIPT LIST INCLUDING 57199000
|
|
THE ENCLOSING BRACKETS. IT RETURNS THE NUMBER OF ASTER- 57200000
|
|
ISKS (SUBSCRIPTS NOT SEEN), AND EMITS NXLN-S FOR ALL 57201000
|
|
ACTUAL SUBSCRIPTS EXCEPT THE FINAL ONE. WHEN ADDRESS IS 57202000
|
|
NON-ZERO, A NAME IS EMITTED AFTER THE FIRST SUBSCRIPTS 57203000
|
|
ARITHMETIC EXPRESSION HAS BEEN COMPILED. BOUNDS IS THE 57204000
|
|
NUMBER OF DECLARED DIMENSIONS. 57205000
|
|
;57206000
|
|
INTEGER BDS, NOTBDS; 57207000
|
|
BOOLEAN FIRST; 57208000
|
|
FIRST ~ ADDRESS !0; 57209000
|
|
IF ELCLASS ! LFTBRKT 57210000
|
|
THEN BEGIN ERR(402); SUBSCRIBER ~ 0; END 57211000
|
|
ELSE BEGIN 57212000
|
|
DO BEGIN 57213000
|
|
STEPIT; 57214000
|
|
IF ELCLASS ! FACTOP 57215000
|
|
THEN BEGIN 57216000
|
|
IF AEXP < XTYPE THEN FLAG (505); 57217000
|
|
IF NOTBDS ! 0 THEN FLAG (574); 57217100
|
|
BDS ~ BDS + 1; 57218000
|
|
IF FIRST 57219000
|
|
THEN BEGIN 57220000
|
|
FIRST ~ FALSE; 57221000
|
|
EMITN (ADDRESS); 57222000
|
|
END; 57223000
|
|
IF BDS!BOUNDS AND TABLE(I+1)! 57224000
|
|
FACTOP THEN EMIT(NXLN); 57224010
|
|
END 57225000
|
|
ELSE BEGIN NOTBDS ~ NOTBDS + 1; STEPIT END;57226000
|
|
END UNTIL ELCLASS ! COMMA; 57227000
|
|
IF ELCLASS ! RTBRKT 57228000
|
|
OR BDS + (SUBSCRIBER ~ NOTBDS) ! BOUNDS 57229000
|
|
THEN ERR (402) ELSE 57230000
|
|
STEPIT; 57231000
|
|
END; 57232000
|
|
LASTINDEX ~ L; 57233000
|
|
END SUBSCRIBER; 57234000
|
|
PROCEDURE DOTTER (DIALS); 57235000
|
|
VALUE DIALS; 57236000
|
|
REAL DIALS; 57237000
|
|
BEGIN 57238000
|
|
INTEGER D; 57239000
|
|
FOR D ~ DIALS.LAYAEXP, DIALS.LAYBEXP 57240000
|
|
DO IF D.LAYLTB = 0 57241000
|
|
THEN EMITNUM (D.LAYLNB) 57242000
|
|
ELSE BEGIN 57243000
|
|
HOOK (D.LAYLNB); 57244000
|
|
STEPIT; 57245000
|
|
IF AEXP < XTYPE THEN FLAG (403); 57246000
|
|
IF ELCLASS = SEMICOLON THEN UNHOOK; 57247000
|
|
END; 57248000
|
|
IF DIALS > 0 THEN STEPIT; 57249000
|
|
END DOTTER; 57250000
|
|
INTEGER PROCEDURE DOTIT; 57251000
|
|
BEGIN COMMENT WHEN DOTIT RETURNS A ZERO, CODE WILL HAVE BEEN 57252000
|
|
EMITTED TO INITIALIZE THE STACK TO THE PROPER VARIABLES 57253000
|
|
SO THAT THE CALLER MAY EMIT A DINS OR DISO AT SOME LATER 57254000
|
|
TIME. WHEN DOTIT IS NON-ZERO IT CONTAINS THE STARTING BIT57255000
|
|
36:6 AND NUMBER OF BITS 42:6. 57256000
|
|
57257000
|
|
;57258000
|
|
LABEL WAY, EXPR1, EXPR2; 57258100
|
|
INTEGER S, T; 57258200
|
|
IF ELCLASS ! FIELDID 57259000
|
|
THEN 57260000
|
|
IF ELCLASS ! LFTBRKT THEN GO WAY ELSE 57260010
|
|
BEGIN 57260020
|
|
LITERALS ~TRUE; 57260025
|
|
IF STEPI!NUMBER THEN GO EXPR1; 57260030
|
|
IF TABLE(I+1)=COLON THEN BEGIN S ~ THI; STEPIT END ELSE 57260035
|
|
EXPR1: BEGIN S ~ -1; IF NOT SIMPLEX(14) THEN GO WAY END; 57260040
|
|
IF ELCLASS!COLON THEN GO WAY; 57260045
|
|
IF STEPI!NUMBER THEN GO EXPR2; 57260050
|
|
IF TABLE(I+1)=RTBRKT THEN BEGIN 57260055
|
|
IF S<0 THEN GO EXPR2; T ~ THI; STEPIT; 57260060
|
|
IF S}48 OR T>48 THEN FLAG(704); 57260065
|
|
DOTIT ~ T & S[36:42:6] END ELSE BEGIN 57260070
|
|
EXPR2: IF S}0 THEN EMITNUM(S); 57260080
|
|
IF NOT SIMPLEX(14) THEN GO WAY END; 57260090
|
|
IF ELCLASS ! RTBRKT THEN GO WAY; 57260100
|
|
STEPIT; 57260105
|
|
IF LITERALS THEN 57260110
|
|
WAY: FLAG(404); 57260120
|
|
END 57260140
|
|
ELSE BEGIN 57261000
|
|
IF DOTIT ~ ELBAT[I].ADDRESS = 0 57262000
|
|
THEN DOTTER(GIT(TAKE(ELBAT[I].LINK).LINK)) 57263000
|
|
ELSE STEPIT; 57263100
|
|
END; 57264000
|
|
END DOTIT; 57265000
|
|
PROCEDURE ITEMREFERENCE(F); VALUE F; INTEGER F; 57266000
|
|
BEGIN COMMENT (MCS 1); 57267000
|
|
COMMENT GOBBLES UP AN ITEM REFERENCE AND LEAVES A THING LOOKING LIKE AN 57268000
|
|
ACTUAL PARAMETER IN THE TOP OF THE STACK- I.E. AN IRW FOR A NAME57269000
|
|
ITEM AND A VALUE FOR A VALUE ITEM 57269500
|
|
F TELLS WHO CALLED AS IN VARIABLE 57269530
|
|
; 57269590
|
|
INTEGER NEXTCLASS, % HOLDS CLASS OF NEXT THING AFTER ITEM 57270000
|
|
INDEX, % INDEX OF ITEM WITHIN ENTRY 57271000
|
|
QUEUECLASS; % QUEUEID OR QUEUEARRAYID 57272000
|
|
REAL ITEMINFO, % HOLDS FIRST WORD OF ITEM INFO 57273000
|
|
QUEUEINFO; % FIRST WORD OF QUEUE OR QUEUE ARRAY INFO 57274000
|
|
REAL GT1; % HOLDS CLASS OF ITEM 57274500
|
|
LABEL ON,QUIT,FINI; 57275000
|
|
INDEX~(ITEMINFO~TAKE(ELBAT[I])).QINDEXF; 57276000
|
|
N ~ ITEMINFO.LINK; 57277000
|
|
QUEUECLASS~(QUEUEINFO~TAKE(IF(GT1~ ITEMINFO.CLASS) 57278000
|
|
>EVENTARRAYID OR GT1<BOOARRAYID THEN N 57279000
|
|
ELSE GIT(N).QLINK)).CLASS; 57280000
|
|
COMMENT ARRAY ITEMS HAVE LINK TO Q IN QLINK OF FIRST ADDL WORD; 57280010
|
|
IF (NEXTCLASS~TABLE(I+1))=ATSIGN OR (NEXTCLASS=LFTBRKT 57281000
|
|
AND QUEUECLASS=QUEUEARRAYID) 57281500
|
|
THEN 57282000
|
|
BEGIN COMMENT (MCS 2); 57283000
|
|
COMMENT OTHER THAN SINGLE LOGICAL QUANTITY; 57284000
|
|
STEPIT; STEPIT; 57285000
|
|
IF NEXTCLASS =ATSIGN 57286000
|
|
THEN 57287000
|
|
BEGIN COMMENT (MCS 3); 57288000
|
|
COMMENT WE EXPECT A QUEUEID FOLLOWED BY REF EXPRESSUN;57289000
|
|
57290000
|
|
EXPRESSION(RTYPE); 57291000
|
|
END MCS 3 57292000
|
|
ELSE 57293000
|
|
BEGIN COMMENT (MCS 4); 57294000
|
|
COMMENT WE EXPECT A QUEUEARRAYID FOLLOWED BY AN 57295000
|
|
ARITHMETIC EXPRESSION; 57296000
|
|
57297000
|
|
EXPRESSION(ATYPE); 57298000
|
|
EMITN(QUEUEINFO.ADDRESS); 57299000
|
|
EMIT(NXLN); 57300000
|
|
IF ELCLASS!RTBRKT THEN GO QUIT ELSE STEPIT 57301000
|
|
END MCS 4 57302000
|
|
END MCS2 57303000
|
|
ELSE 57304000
|
|
BEGIN COMMENT (MCS 5); 57305000
|
|
COMMENT SINGLE LOGICAL OUANTITY; 57306000
|
|
57307000
|
|
IF QUEUECLASS! QUEUEID THEN GO QUIT; 57308000
|
|
EMITN(QUEUEINFO.ADDRESS); 57309000
|
|
STEPIT; 57310000
|
|
END MCS 5; 57311000
|
|
COMMENT WE HAVE NOW TO OBTAIN ITEM; 57312000
|
|
EMITNUM(INDEX); 57313000
|
|
57314000
|
|
COMMENT WE NOW HAVE INDEX AND DESCRIPTOR SITTING ON TOP OF STACK; 57315000
|
|
LASTINDEX~L ; 57315500
|
|
IF ITEMINFO.TYPE=FORMALNAMEQ OR (GTB1~GT1=WORDID) 57316000
|
|
THEN BEGIN EMIT(INDX);EMIT(IF GTB1 THEN LODT ELSE LOAD) 57316200
|
|
END % NAME CALL,WORD ITEMS 57316250
|
|
ELSE IF F=FS OR ELCLASS=ASSNOP 57316300
|
|
THEN EMIT(INDX) 57316400
|
|
ELSE IF GT1=REFID OR 57316500
|
|
GT1=PTRID THEN BEGIN EMIT(INDX);IF F!FR THEN EMIT(LOAD) END 57316600
|
|
ELSE EMIT(NXLV); % EVERYTHING ELSE ARITH OR BOOL 57316800
|
|
GO FINI; 57317000
|
|
QUIT: 57318000
|
|
COMMENT ALL ERRORS PROCESSED HERE; 57319000
|
|
FLAG(542);ERRORTOG~TRUE; 57320000
|
|
FINI: END MCS 1 ITEMREFERENCE; 57321000
|
|
COMMENT * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 60000000
|
|
STATEMENTS 60001000
|
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;60002000
|
|
PROCEDURE CASESTMT; 60003000
|
|
BEGIN 60004000
|
|
INTEGER LT,S,T,N,SN,FSN,LCTR,LN ; 60005000
|
|
DEFINE E = GT1#, NEXTADDL = LASTADDL#; 60006000
|
|
%**************** HERE BEE DRAGONS *********************************60006100
|
|
LABEL ON,INN; 60007000
|
|
DEFINE FWD = TYPE =F0RWARD#; 60008000
|
|
LT ~ CASEHEAD; 60009000
|
|
T~ 60009100
|
|
SN ~ FSN ~ LN ~ -1; 60010000
|
|
S ~ L; 60011000
|
|
IF ELCLASS ! BEGINV THEN FLAG(601) ELSE ELCLASS ~ SEMICOLON; 60012000
|
|
BEGINCTR ~ BEGINCTR + 1; 60012100
|
|
DO BEGIN 60013000
|
|
CONTEXT ~ 2; 60014000
|
|
IF ELCLASS ! SEMICOLON THEN ERR(600) ELSE 60015000
|
|
IF STEPI ! SEMICOLON THEN 60016000
|
|
IF ELCLASS ! ENDV THEN 60017000
|
|
BEGIN 60018000
|
|
IF ELCLASS = GOV THEN 60019000
|
|
BEGIN 60020000
|
|
IF TABLE(I+1) = TOV THEN NXTELBT ~ NXTELBT - 1; 60021000
|
|
IF TABLE(I+1) ! LABELID THEN 60022000
|
|
BEGIN I ~ I + 1; 60022100
|
|
IF FUTZALABEL THEN I ~ I - 1 ELSE 60022200
|
|
BEGIN E ~ ELBAT[I]; I~I-1; GO INN END; 60022300
|
|
END ELSE 60022400
|
|
IF (E ~ ELBAT[I+1]).LINK } NINFOO THEN 60023000
|
|
INN: 60023100
|
|
BEGIN E.DISP ~ LN ~ N; 60024000
|
|
PUTNBUMP(E); 60025000
|
|
LCTR ~ LCTR + 1; 60026000
|
|
ELCLASS ~ TABLE(I~I+2); 60027000
|
|
IF T < 0 THEN T ~ N; 60027100
|
|
GO ON 60028000
|
|
END; END; 60029000
|
|
STATEMENT; 60030000
|
|
EMITLINK(S & SN ~ N [24:40:8]); 60031000
|
|
IF FSN < 0 THEN FSN ~ N; 60032000
|
|
S ~ L 60033000
|
|
END; 60034000
|
|
ON: IF N ~ N + 1 = 256 THEN FLAG(602); 60035000
|
|
END UNTIL ELCLASS = ENDV; 60036000
|
|
IF T > 0 AND FSN >0 THEN COMMENT FIRST STMT IS DUMMY; 60037000
|
|
BEGIN 60037100
|
|
S ~ GET3(L ~ S - 3); COMMENT PICK UP LAST LINK; 60037200
|
|
WHILE L MOD 3 ! 0 DO EMIT(NOOP); 60037300
|
|
T ~ L; 60037400
|
|
EMITLINK(S); COMMENT PUT THE LINK BACK; 60037500
|
|
S ~ L; 60037600
|
|
END ELSE 60037700
|
|
BEGIN 60037800
|
|
WHILE L MOD 3 ! 0 DO EMIT(NVLD); 60037900
|
|
T ~ L; 60038000
|
|
END; 60038100
|
|
CASETAIL(N~N-1, T , LT); 60039000
|
|
IF N > SN THEN 60039100
|
|
IF N > LN THEN N ~ N - 1; COMMENT LAST STMT IS DUMMY; 60039200
|
|
LT ~ (N+1)| 3 + T; COMMENT COMPUTE EXIT POINT ADDRESS; 60040000
|
|
60041000
|
|
60041900
|
|
6004200060020000
|
|
60042100
|
|
WHILE L < LT DO EMITB(BRUN,BUMPL,LT); 60043000
|
|
FIGS ~ TRUE; 60043100
|
|
WHILE LCTR ~ LCTR - 1 } 0 DO 60044000
|
|
BEGIN 60045000
|
|
L ~ (E ~ GIT( NEXTADDL ~ NEXTADDL - 1)).DISP | 3 + T; 60046000
|
|
GOGEN(E,BRUN); 60047000
|
|
END OF LABELS; 60048000
|
|
IF FSN } 0 THEN 60049000
|
|
DO BEGIN 60050000
|
|
SN ~ GET3(S - 3); 60051000
|
|
EMITB(BRUN,S,LT); 60052000
|
|
EMITB(BRUN,(SN.[24:8] + 1)|3+ T,S ~ SN.[32:16]); 60053000
|
|
END STATEMENTS UNTIL SN.[24:8] { FSN; 60054000
|
|
L ~ LT; 60066000
|
|
FIGS ~ FALSE; 60066100
|
|
COMPOUNDTAIL 60067000
|
|
END CASE STATEMENT; 60068000
|
|
PROCEDURE FORSTMT; 60069000
|
|
BEGIN OWN REAL B,STMTSTART,REGO,RETURNSTORE,ADDRES,V,VRET,BRET; 60070000
|
|
OWN BOOLEAN SIGNA,SIGNB,SIGNC,INT, 60071000
|
|
BYE, 60071100
|
|
CONSTANA,CONSTANB,CONSTANC; 60072000
|
|
DEFINE SIMPLEB = SIGNC #, FORMALV = SIGNA #, 60073000
|
|
SIMPLEV = CONSTANA #, A = V # , Q = REGO #, 60074000
|
|
K = BRET #; 60075000
|
|
LABEL EXIT; 60076000
|
|
REAL T1,T2,T3,T4; 60077000
|
|
PROCEDURE PLUG(C,A); VALUE C,A; REAL A; BOOLEAN C; 60078000
|
|
IF C THEN EMITNUM(A) ELSE EMITV(A.ADDRESS); 60079000
|
|
BOOLEAN PROCEDURE SIMPLE(B,A,S); 60080000
|
|
BOOLEAN B,S; REAL A; 60081000
|
|
BEGIN 60082000
|
|
S ~ IF STEPI ! ADDOP THEN FALSE ELSE 60083000
|
|
ELBAT[I].DISP = SUBT; 60084000
|
|
IF ELCLASS= ADDOP THEN STEPIT; 60085000
|
|
IF ELCLASS } NUMBER AND ELCLASS { STRNGCON THEN 60086000
|
|
BEGIN 60087000
|
|
SIMPLE ~ NOT DPTOG; 60088000
|
|
ELBAT[I] ~ K&COMMENTV[21:41:7]; 60089000
|
|
ADDL[K.LINKR,K.LINKC] ~ A ~ THI; 60090000
|
|
B ~ TRUE; 60091000
|
|
K ~ K + 1; 60092000
|
|
END ELSE 60093000
|
|
BEGIN 60094000
|
|
B ~ FALSE; 60095000
|
|
A ~ ELBAT[I]; 60096000
|
|
SIMPLE ~ ELCLASS } DPID AND ELCLASS{INTID 60097000
|
|
END; 60098000
|
|
STEPIT; 60099000
|
|
END SIMPLE; 60100000
|
|
PROCEDURE TEST; 60101000
|
|
BEGIN 60102000
|
|
IF NOT CONSTANB THEN 60103000
|
|
BEGIN 60104000
|
|
EMITO(SUBT); 60105000
|
|
IF SIMPLEB THEN EMITV(B.ADDRESS) ELSE 60106000
|
|
BEGIN 60107000
|
|
EMITNUM((L+9)DIV 3); 60108000
|
|
EMITB(BRUN,BUMPL,B); 60109000
|
|
WHILE L MOD 3 ! 0 DO EMIT(NVLD); 60110000
|
|
END; 60111000
|
|
EMITO(MULT); EMITNUM(0); 60112000
|
|
END; 60113000
|
|
EMITO(IF SIGNB THEN GREQ ELSE LSEQ); 60114000
|
|
END TEST; 60115000
|
|
BOOLEAN PROCEDURE SIMPI(ALL); VALUE ALL; REAL ALL; 60116000
|
|
BEGIN 60117000
|
|
REAL T; 60118000
|
|
ADDRES ~ ALL.ADDRESS; 60119000
|
|
FORMALV~ ALL.TYPE = FORMALNAMEP; 60120000
|
|
IF T ~ ALL.CLASS > INTARRAYID 60121000
|
|
OR T < BOOID 60122000
|
|
OR T = REFID 60123000
|
|
OR T = PTRID THEN ERR(REAL(T!0)|508 + 100); 60124000
|
|
INT ~ T = INTID OR T = INTARRAYID; 60125000
|
|
SIMPI ~ T { INTID; 60126000
|
|
END SIMPI; 60127000
|
|
PROCEDURE STORE(S); VALUE S; BOOLEAN S; 60128000
|
|
BEGIN 60129000
|
|
IF FORMALV THEN 60130000
|
|
BEGIN 60131000
|
|
S ~ FALSE; 60132000
|
|
END ELSE 60133000
|
|
EMITN(ADDRES); 60134000
|
|
IF INT THEN BEGIN EMIT(EXCH); EMIT(NTGR) END; 60135000
|
|
EMITO(STOD + REAL(S)); 60136000
|
|
END STORE; 60137000
|
|
PROCEDURE CALL(S); VALUE S; BOOLEAN S; 60138000
|
|
BEGIN 60139000
|
|
IF SIMPLEV THEN 60140000
|
|
IF S THEN EMITV(ADDRES) ELSE 60141000
|
|
EMITPAIR(ADDRES,EVAL) ELSE 60142000
|
|
BEGIN 60143000
|
|
EMITNUM((L+9) DIV 3); 60144000
|
|
EMITB(BRUN,BUMPL,V); 60145000
|
|
WHILE L MOD 3 ! 0 DO EMIT (NVLD); 60146000
|
|
IF S THEN EMIT(NXLV); 60147000
|
|
END; 60148000
|
|
END CALL; 60149000
|
|
PROCEDURE FORLIST(NUMLE); VALUE NUMLE; BOOLEAN NUMLE; 60150000
|
|
BEGIN 60151000
|
|
INTEGER BACKFIX,FORWARDBRANCH,FOOT,STOREFIX; 60152000
|
|
LABEL BRANCH,EXIT; 60153000
|
|
STOREFIX ~ L; 60154000
|
|
BACKFIX ~ V + REAL(SIMPLEV) - 1; 60155000
|
|
IF GT1 ~ AEXP { XTYPE THEN 60156000
|
|
BEGIN 60157000
|
|
ERR(632); GO TO EXIT; 60158000
|
|
END; 60159000
|
|
VRET ~ L; 60160000
|
|
IF ELCLASS = BYV THEN 60161000
|
|
BEGIN 60161010
|
|
IF GT1 ! ITYPE THEN EMIT(NTGR); 60161015
|
|
IF NOT SIMPLEV THEN 60161020
|
|
BEGIN 60161030
|
|
ERR(668); GO TO EXIT; 60161040
|
|
END; 60161060
|
|
STEPIT; 60161070
|
|
EXPRESSION(ITYPE); 60161080
|
|
EMITR(47,12); 60161090
|
|
IF ELCLASS ! UNTILV THEN 60161140
|
|
BEGIN 60161150
|
|
ERR(667); GO TO EXIT; 60161160
|
|
END; 60161180
|
|
STEPIT; 60161185
|
|
EXPRESSION(ITYPE); 60161190
|
|
EMIT(ONE); 60161200
|
|
EMIT(ADD); 60161210
|
|
EMITR(35,16); 60161220
|
|
EMITNUM(4); 60161250
|
|
EMIT(STAG); 60161260
|
|
EMITN(ADDRES); 60161270
|
|
EMIT(STOD); 60161280
|
|
IF ELCLASS ! DOV THEN 60161290
|
|
BEGIN 60161300
|
|
ERR(610); GO TO EXIT; 60161310
|
|
END; 60161330
|
|
BACKFIX ~ L; 60161340
|
|
EMITN(ADDRES); 60161350
|
|
STOREFIX ~ L; 60161360
|
|
EMITLINK(0&STBR[24:40:8]); 60161370
|
|
EMIT(DLET); 60161380
|
|
STEPIT; 60161390
|
|
STATEMENT; 60161400
|
|
EMITB(BRUN,BUMPL,BACKFIX); 60161410
|
|
EMITB(GET(STOREFIX),STOREFIX+3,L); 60161420
|
|
GO TO EXIT; 60161430
|
|
END; 60161440
|
|
IF ELCLASS = STEPV THEN 60161999
|
|
BEGIN 60162000
|
|
BACKFIX ~ BUMPL; 60163000
|
|
IF FORMALV THEN 60164000
|
|
IF SIMPLEV THEN CALL(FALSE) ELSE 60164100
|
|
WHILE L MOD 3 ! 0 DO EMIT(NVLD); 60164200
|
|
CALL(TRUE); BACKFIX.[2:1] ~ 1; 60164300
|
|
IF I > 70 THEN 60165000
|
|
BEGIN 60166000
|
|
NXTELBT ~ 1; 60167000
|
|
I ~ 0; 60168000
|
|
END ELSE 60169000
|
|
REGO ~ I; 60170000
|
|
IF SIMPLEB ~ SIMPLE(CONSTANB,B,SIGNB) 60171000
|
|
AND (ELCLASS = UNTILV 60172000
|
|
OR ELCLASS = WHILEV) THEN 60173000
|
|
PLUG(CONSTANB,B) ELSE 60174000
|
|
BEGIN 60175000
|
|
I ~ IF I < 4 THEN 0 ELSE REGO; 60176000
|
|
STEPIT; 60177000
|
|
SIGNB ~ CONSTANB ~ FALSE; 60178000
|
|
EMITO(ZERO); 60179000
|
|
B ~ L; 60180000
|
|
IF AEXP { XTYPE THEN 60181000
|
|
BEGIN 60182000
|
|
ERR(632); GO TO EXIT; 60183000
|
|
END; 60184000
|
|
EMITO(EXCH); 60185000
|
|
BRET ~ L; 60186000
|
|
EMIT(DBUN); 60187000
|
|
END; 60188000
|
|
EMITO(ADD + REAL(SIGNB)); 60189000
|
|
EMITB(BRUN,BACKFIX,L); 60190000
|
|
IF ELCLASS = UNTILV THEN 60191000
|
|
BEGIN 60192000
|
|
STORE(TRUE); 60193000
|
|
IF FORMALV THEN CALL(TRUE); 60194000
|
|
STEPIT; 60195000
|
|
IF AEXP { XTYPE THEN 60196000
|
|
BEGIN 60197000
|
|
ERR(632); GO TO EXIT; 60198000
|
|
END; 60199000
|
|
TEST; 60200000
|
|
END ELSE 60201000
|
|
BEGIN 60202000
|
|
IF ELCLASS ! WHILEV THEN 60203000
|
|
BEGIN 60204000
|
|
ERR(609); 60205000
|
|
GO TO EXIT 60206000
|
|
END; 60207000
|
|
STEPIT; 60208000
|
|
STORE(FALSE); 60209000
|
|
BEXP; 60210000
|
|
END; 60211000
|
|
END ELSE 60212000
|
|
BEGIN 60213000
|
|
STORE(FALSE); 60214000
|
|
IF ELCLASS = WHILEV THEN 60215000
|
|
BEGIN 60216000
|
|
STEPIT; 60217000
|
|
BEXP; 60218000
|
|
END ELSE 60219000
|
|
BEGIN 60220000
|
|
ERR(631); 60221000
|
|
GO TO EXIT; 60222000
|
|
END; 60223000
|
|
END; 60224000
|
|
EMITLINK(0&BRFL[24:40:8]); 60225000
|
|
BRANCH: FORWARDBRANCH ~ L; 60226000
|
|
IF ELCLASS = COMMA THEN 60227000
|
|
BEGIN 60228000
|
|
ERR(631); 60229000
|
|
END ELSE 60230000
|
|
BEGIN 60231000
|
|
IF ELCLASS ! DOV THEN 60232000
|
|
BEGIN 60233000
|
|
ERR(610); 60234000
|
|
GO TO EXIT; 60235000
|
|
END; 60236000
|
|
STEPIT; 60237000
|
|
STATEMENT; 60238000
|
|
IF BACKFIX.[2:1] = 1 AND FORMALV 60238100
|
|
AND NOT SIMPLEV THEN 60238200
|
|
BEGIN 60238300
|
|
EMITNUM((BACKFIX+2) DIV 3); 60238400
|
|
EMITB(BRUN,BUMPL,V); 60238500
|
|
END ELSE 60238600
|
|
EMITB(BRUN,BUMPL,BACKFIX); 60239000
|
|
EMITB(GET(FORWARDBRANCH - 3), 60240000
|
|
FORWARDBRANCH, 60241000
|
|
L); 60242000
|
|
END; 60243000
|
|
EXIT: 60244000
|
|
END FORLIST; 60245000
|
|
NXTELBT ~ 1; I ~ 0; 60246000
|
|
STEPIT; 60247000
|
|
IF SIMPI(VRET ~ ELBAT[I]) THEN 60248000
|
|
BEGIN 60249000
|
|
IF STEPI ! ASSNOP THEN 60250000
|
|
BEGIN 60251000
|
|
ERR(611); 60252000
|
|
GO TO EXIT; 60253000
|
|
END; 60254000
|
|
T1 ~ L; 60255000
|
|
IF FORMALV THEN EMITN(ADDRES); 60256000
|
|
K ~ NEXTADDL; 60257000
|
|
IF SIMPLE(CONSTANA,A,SIGNA) THEN 60258000
|
|
IF ELCLASS = STEPV OR BYE~ELCLASS=BYV THEN 60259000
|
|
IF SIMPLE(CONSTANB,B,SIGNB) THEN 60260000
|
|
IF ELCLASS = UNTILV THEN 60261000
|
|
IF SIMPLE(CONSTANC,Q,SIGNC) THEN 60262000
|
|
IF ELCLASS = DOV THEN 60263000
|
|
BEGIN 60264000
|
|
IF CONSTANA AND CONSTANB AND CONSTANC AND 60265000
|
|
NOT(SIGNA OR SIGNB OR SIGNC ) AND 60266000
|
|
A.[1:31]=0 AND Q.[1:31]=0 AND B.[1:36]=060267000
|
|
% THE ABOVE CARD SHOULD BE CHANGED LATER TO ALLOW FOR TWELVE BITS 60267100
|
|
% WORTH OF INCREMENT VALUE. . . . . 60267200
|
|
AND BYE 60267300
|
|
THEN 60268000
|
|
BEGIN 60269000
|
|
IF A > Q THEN 60270000
|
|
BEGIN 60271000
|
|
T1 ~ BUMPL; 60272000
|
|
STEPIT; 60273000
|
|
STATEMENT; 60274000
|
|
EMITB(BRUN,T1,L); 60275000
|
|
GO TO EXIT; 60276000
|
|
END; 60277000
|
|
EMITNUM(A&Q[12:32:16]&B[1:37:11]);60278000
|
|
EMITNUM(4); 60279000
|
|
EMIT(STAG); 60280000
|
|
EMITN((T1~VRET).ADDRESS); 60281000
|
|
EMIT(STOD); 60282000
|
|
T2 ~ L; 60283000
|
|
STEPIT; 60284000
|
|
STATEMENT; 60285000
|
|
EMITN(T1.ADDRESS); 60286000
|
|
EMITB(STBR,BUMPL,L+4); 60287000
|
|
EMIT(DLET); 60288000
|
|
EMITB(BRUN,BUMPL,T2); 60289000
|
|
GO TO EXIT; 60290000
|
|
END; 60291000
|
|
IF NOT BYE THEN 60291100
|
|
BEGIN 60291200
|
|
PLUG(CONSTANA,A); 60292000
|
|
IF SIGNA THEN EMITO(CHSN); 60293000
|
|
RETURNSTORE ~ BUMPL; 60294000
|
|
STMTSTART ~ L; 60295000
|
|
STEPIT; 60296000
|
|
T1 ~ RETURNSTORE&STMTSTART[8:28:20]; 60297000
|
|
T1.[7:1] ~ REAL(CONSTANB); 60298000
|
|
T1.[6:1] ~ REAL(CONSTANC); 60299000
|
|
T1.[5:1]~ REAL(SIGNB); 60300000
|
|
T1.[4:1] ~ REAL(SIGNC); 60301000
|
|
T2 ~ VRET; 60302000
|
|
T3 ~ B; 60303000
|
|
T4 ~ Q; 60304000
|
|
STATEMENT; 60305000
|
|
SIGNC ~ BOOLEAN(T1.[4:1]); 60306000
|
|
SIGNB ~ BOOLEAN(T1.[5:1]); 60307000
|
|
CONSTANC ~ BOOLEAN(T1.[6:1]); 60308000
|
|
CONSTANB ~ BOOLEAN(T1.[7:1]); 60309000
|
|
STMTSTART ~ T1.[8:20]; 60310000
|
|
RETURNSTORE ~ T1.[28:20]; 60311000
|
|
VRET ~ T2; 60312000
|
|
B ~ T3; 60313000
|
|
Q ~ T4; 60314000
|
|
SIMPLEV ~ SIMPI(VRET); 60315000
|
|
IF FORMALV THEN EMITN(ADDRES); 60316000
|
|
EMITV(ADDRES); 60317000
|
|
PLUG(CONSTANB,B); 60318000
|
|
EMITO(ADD + REAL(SIGNB)); 60319000
|
|
EMITB(BRUN,RETURNSTORE,L); 60320000
|
|
STORE(TRUE); 60321000
|
|
IF FORMALV THEN CALL(TRUE); 60322000
|
|
PLUG(CONSTANC,Q); 60323000
|
|
IF SIGNC THEN EMITO(CHSN); 60324000
|
|
SIMPLEB ~ TRUE; 60325000
|
|
TEST; 60326000
|
|
EMITB(BRTR,BUMPL,STMTSTART); 60327000
|
|
GO TO EXIT; 60328000
|
|
END; 60328100
|
|
END; 60329000
|
|
I ~ 2; K ~ 0; 60330000
|
|
SIMPLEV ~ SIMPI(VRET); 60331000
|
|
V ~ T1; 60332000
|
|
END ELSE 60333000
|
|
BEGIN 60334000
|
|
V ~ BUMPL; 60335000
|
|
60336000
|
|
SIMPLEV ~ FALSE; 60337000
|
|
FORMALV ~ TRUE; 60338000
|
|
VRET ~ VARIABLE(FR); 60339000
|
|
EMIT(EXCH); 60340000
|
|
EMIT(DBUN); 60341000
|
|
WHILE L MOD 3 ! 0 DO EMIT(NVLD); 60341100
|
|
VRET ~ L; L ~ V-3; FIGS ~ TRUE; 60341200
|
|
EMIT2P(LT16, VRET DIV 768, VRET MOD 768 DIV 3); 60341300
|
|
FIGS ~ FALSE; L ~ VRET; 60341400
|
|
IF ELCLASS ! ASSNOP THEN 60342000
|
|
BEGIN 60343000
|
|
ERR(611); 60344000
|
|
GO TO EXIT; 60345000
|
|
END; 60346000
|
|
END; 60347000
|
|
STEPIT; 60348000
|
|
FORLIST(FALSE); 60349000
|
|
EXIT: 60350000
|
|
K ~ 0; 60351000
|
|
END FORSTMT; 60352000
|
|
PROCEDURE LABELR; 60353000
|
|
BEGIN 60354000
|
|
LABEL EXIT,ROUND; 60355000
|
|
REAL GT1; 60356000
|
|
DEFINE ELBATWORD = GT1 #, 60357000
|
|
LINK = GT2 #, 60358000
|
|
INDEX = GT3 #, 60359000
|
|
ADDITIONAL= GT4 #, 60360000
|
|
NEXTLINK = GT5 #; 60361000
|
|
DO BEGIN 60362000
|
|
IF STEPI ! COLON THEN 60363000
|
|
BEGIN 60364000
|
|
ERR(612); 60365000
|
|
GO TO EXIT; 60366000
|
|
END; 60367000
|
|
IF (ELBATWORD~ELBAT[I-1]).[33:15] < NINFOO THEN 60368000
|
|
BEGIN 60369000
|
|
FLAG(613); 60370000
|
|
GO TO ROUND; 60371000
|
|
END; 60372000
|
|
LINK ~ (ADDITIONAL ~ INDEX ~ TAKE(ELBATWORD)) 60373000
|
|
.[32:16]; 60374000
|
|
IF ADDITIONAL.TYPE ! F0RWARD THEN 60375000
|
|
BEGIN 60376000
|
|
FLAG(614); 60377000
|
|
GO TO ROUND; 60378000
|
|
END; 60379000
|
|
WHILE LINK ! 0 DO 60380000
|
|
BEGIN 60381000
|
|
NEXTLINK ~ GET3(LINK); 60382000
|
|
EMITB(NEXTLINK.[24:8],LINK+3,L); 60383000
|
|
LINK ~ NEXTLINK.[32:16]; 60384000
|
|
END; 60385000
|
|
PUT(INDEX&L[32:32:16]&0[29:45:3],ELBATWORD); 60386000
|
|
ROUND: 60387000
|
|
ERRORTOG ~ TRUE; 60388000
|
|
END UNTIL STEPI ! LABELID; 60389000
|
|
EXIT: 60390000
|
|
END LABELR; 60391000
|
|
PROCEDURE IFSTMT; 60392000
|
|
BEGIN 60393000
|
|
REAL T1,T2,T3; 60394000
|
|
LABEL INN, GRONK, ON; 60394100
|
|
LABEL EXIT; 60395000
|
|
T3 ~ REAL(IFCLAUSE).[47:1]; 60396000
|
|
IF SIMPGO THEN 60397000
|
|
BEGIN 60398000
|
|
GOGEN(ELBAT[I], BRTR-T3); 60399000
|
|
IF STEPI = ELSEV THEN 60400000
|
|
BEGIN 60401000
|
|
STEPIT; 60402000
|
|
IF SIMPGO THEN 60403000
|
|
BEGIN 60404000
|
|
60405000
|
|
GOGEN(ELBAT[I],BRUN); 60406000
|
|
STEPIT; 60407000
|
|
GO TO EXIT; 60408000
|
|
END; 60409000
|
|
60409200
|
|
60409300
|
|
STATEMENT; 60409400
|
|
GO TO EXIT; 60409500
|
|
60409600
|
|
END; 60410000
|
|
60411000
|
|
GO TO EXIT; 60412000
|
|
END; 60413000
|
|
IF ELCLASS } SEMICOLON AND ELCLASS { UNTILV THEN GO GRONK; 60413050
|
|
T2 ~ T1 ~ BUMPL; 60413100
|
|
IF ELCLASS = ELSEV THEN 60413150
|
|
IF STEPI < SEMICOLON OR ELCLASS > ELSEV THEN 60413200
|
|
IF SIMPGO THEN GO ON ELSE 60413250
|
|
BEGIN T3 ~ 1 - T3; STATEMENT; GO INN END ELSE 60413300
|
|
BEGIN 60413350
|
|
L ~ L - 3; 60413400
|
|
GRONK: EMIT(DLET); 60413450
|
|
GO TO EXIT; 60413500
|
|
END; 60413550
|
|
60414000
|
|
STATEMENT; 60415000
|
|
IF ELCLASS ! ELSEV THEN 60416000
|
|
BEGIN 60417000
|
|
INN: 60417500
|
|
EMITB(BRFL+T3,T1,L); 60418000
|
|
GO TO EXIT; 60419000
|
|
END; 60420000
|
|
STEPIT; 60421000
|
|
IF SIMPGO THEN 60422000
|
|
BEGIN 60423000
|
|
T2 ~ L; 60424000
|
|
ON: 60424500
|
|
L ~ T1 - 3; 60425000
|
|
FIGS ~ TRUE; 60425100
|
|
GOGEN(ELBAT[I],BRFL + T3); 60426000
|
|
L ~ T2; 60427000
|
|
FIGS ~ FALSE; 60427100
|
|
STEPIT; 60428000
|
|
GO TO EXIT; 60429000
|
|
END; 60430000
|
|
T2 ~ BUMPL; 60431000
|
|
EMITB(BRFL+T3,T1,L); 60432000
|
|
STATEMENT; 60433000
|
|
EMITB(BRUN,T2,L); 60434000
|
|
EXIT: 60435000
|
|
END IFSTMT; 60436000
|
|
PROCEDURE GOSTMT; 60437000
|
|
BEGIN 60438000
|
|
REAL LT,S,N; 60439000
|
|
REAL ELBW,GT1; 60439500
|
|
REAL PCWADDR; 60439700
|
|
DEFINE NEXTADDL = LASTADDL#; %HERE BEE MORE DRAGONS 60439800
|
|
BOOLEAN TB1; 60440000
|
|
LABEL EXIT, ON; 60441000
|
|
LABEL CASECASE,CONTINUECASE; 60442000
|
|
IF STEPI = TOV THEN STEPIT; 60443000
|
|
IF ELCLASS = LABELID THEN TB1 ~ TRUE ELSE 60444000
|
|
IF ELCLASS = CASEV THEN GO ON ELSE 60445000
|
|
IF NOT TB1 ~ NOT FUTZALABEL THEN 60445100
|
|
BEGIN 60446000
|
|
ERR(615); 60447000
|
|
GO TO EXIT; 60448000
|
|
END; 60449000
|
|
IF (ELBW~ELBAT[I]).LINK<NINFOO THEN 60450000
|
|
BEGIN 60450100
|
|
CASECASE: 60450200
|
|
EMIT(ZERO); 60450220
|
|
EMIT(DUPL); 60450230
|
|
EMIT(MKST); 60450300
|
|
EMITN(GOTOSOLVERPCW); 60450400
|
|
IF ELBW.DISP=0 THEN 60451000
|
|
BEGIN 60452000
|
|
PCWADDR~GETSPACE(-ELBW.LVEL); 60453000
|
|
GT1~TAKE(ELBW); 60454000
|
|
GT1.ADDRESS~PCWADDR; 60455000
|
|
IF PRTOG THEN 60455100
|
|
PRINTSPACE(ELBW,ELBW.LVEL ,GT1.DISP>1[32:2:1]); 60455200
|
|
PUT(GT1,ELBW); 60456000
|
|
END ELSE 60457000
|
|
PCWADDR~ELBW.ADDRESS; 60458000
|
|
EMITPAIR(PCWADDR,STFF); 60458100
|
|
EMIT(ZERO); 60458200
|
|
EMIT(STAG); 60458300
|
|
EMIT(ENTR); 60458400
|
|
IF TB1 THEN 60459000
|
|
BEGIN 60459200
|
|
STEPIT; 60459300
|
|
GO EXIT; 60459350
|
|
END ELSE 60459400
|
|
GO CONTINUECASE; 60459600
|
|
END; 60459700
|
|
IF TB1 THEN 60460000
|
|
BEGIN 60461000
|
|
GOGEN(ELBAT[I],BRUN); 60462000
|
|
STEPIT; 60463000
|
|
GO TO EXIT; 60464000
|
|
END; 60465000
|
|
ON: LT := CASEHEAD; 60466000
|
|
IF ELCLASS ! LFTPRN THEN FLAG(817); 60467000
|
|
S ~ LASTADDL; 60468000
|
|
60469000
|
|
60469100
|
|
DO BEGIN 60470000
|
|
IF STEPI ! LABELID THEN 60471000
|
|
IF FUTZALABEL THEN 60471100
|
|
BEGIN 60472000
|
|
ERR(618); 60473000
|
|
GO TO EXIT; 60474000
|
|
END; 60475000
|
|
IF (ELBW ~ ELBAT[I]).LINK < NINFOO THEN 60476000
|
|
BEGIN PUTNBUMP(L); GO TO CASECASE END; 60476500
|
|
PUTNBUMP(ELBW); %GOES BOOMP IN THE NIGHT 60477000
|
|
CONTINUECASE: 60477500
|
|
N~N+1; 60478000
|
|
STEPIT; 60479000
|
|
END UNTIL ELCLASS ! COMMA; 60480000
|
|
WHILE L MOD 3 ! 0 DO EMIT(NVLD); 60481100
|
|
CASETAIL(N-1, L, LT); 60482000
|
|
LT ~ S; 60482100
|
|
DO IF (N ~ GIT(LT)).CLASS = 0 THEN EMITB(BRUN,BUMPL,N) ELSE 60482200
|
|
GOGEN(N,BRUN) UNTIL LT ~ LT + 1 } LASTADDL; 60482250
|
|
LASTADDL ~ S; 60482300
|
|
IF ELCLASS ! RTPARN THEN FLAG(619) ELSE STEPIT; 60483000
|
|
EXIT: 60484000
|
|
END GOSTMT; 60485000
|
|
REAL PROCEDURE PROCALL(FROM, WISH); VALUE FROM, WISH; 60486000
|
|
BOOLEAN FROM; REAL WISH; 60486100
|
|
COMMENT PROCALL COMPILES CODE FOR ALL PROCEDURE STATEMENTS AND FUNCTION 60487000
|
|
CALLS. THE PARAMETER...FROM....TELLS WHO CALLED. IF 60488000
|
|
STMT CALLED FROM IS FALSE. PROCALL ALSO HANDLES FUNCTION60489000
|
|
NAME ASSIGNMENT OPERATIONS; 60490000
|
|
COMMENT WISH TELLS WHAT TYPE OF EXPRESSION WE ARE HOPING FOR; 60490100
|
|
BEGIN 60491000
|
|
INTEGER ADDLADRES,T1,T2,T3; 60492000
|
|
REAL K; 60492100
|
|
BOOLEAN TB1; 60493000
|
|
LABEL FINI ,SKIP1,SKIP2; 60494000
|
|
PROCALL ~ WISH; %UNLESS WE LEARN OTHERWISE 60494100
|
|
SCATTERELBAT; 60495000
|
|
ADDLADRES ~ TAKE(ELBAT[I]).LINK; 60496000
|
|
T1~ADDRSF; 60497000
|
|
T2~ADDLADRES; 60498000
|
|
T3~TYPEF; 60499000
|
|
60500000
|
|
COMMENT ADDLADRES HOLDS LINK TO ADDL; 60501000
|
|
IF (TB1~ ELCLASS!PROCID) THEN 60502000
|
|
IF NOT FORMALF THEN 60503000
|
|
IF TABLE(I+1) = ASSNOP THEN 60504000
|
|
BEGIN 60505000
|
|
GT1~VARIABLE(IF FROM THEN FP ELSE FS);GO TO FINI 60506000
|
|
END; 60506050
|
|
IF ELCLASS=PROCID AND FROM THEN 60507000
|
|
BEGIN ERR(603); GO TO FINI END; 60508000
|
|
COMMENT IT IS PROCEDURE IF AND ONLY IF WE COME FROM STMT; 60509000
|
|
60510000
|
|
IF T3=INTRINSIC THEN 60511000
|
|
BEGIN 60512000
|
|
STEPIT; 60512100
|
|
IF T1 = HALT THEN T2 ~ 7 ELSE 60512200
|
|
IF T1 = SRCH THEN T2 ~ 6 ELSE 60512500
|
|
IF T1 = RETN THEN T2 ~ 5; 60512600
|
|
IF T2 { 7 THEN 60513000
|
|
BEGIN 60514000
|
|
IF T2>0 THEN IF ELCLASS!LFTPRN THEN IF T1!HALT THEN 60515000
|
|
FLAG(604); 60515100
|
|
CASE T2 OF 60516000
|
|
BEGIN 60517000
|
|
EMIT(T1); 60517100
|
|
BEGIN 60518100
|
|
IF STEPI=UNKNOWNID THEN FLAG(622); 60518110
|
|
K~ELBAT[I]; 60518120
|
|
IF GT1~TABLE(I+1)=LFTBRKT OR GT1=ATSIGN THEN 60518130
|
|
BEGIN 60518140
|
|
GT1~VARIABLE(FR); 60518150
|
|
END ELSE 60518160
|
|
BEGIN 60518170
|
|
EMITN(K.ADDRESS); 60518180
|
|
IF K.TYPE=FORMALNAMEP OR 60518190
|
|
K.TYPE=FORMALNAMEQ THEN 60518200
|
|
IF K.CLASS>BOOID AND 60518210
|
|
(K.CLASS<PTRID AND K.CLASS!WORDID) 60518220
|
|
THEN EMIT(EVAL) ELSE EMIT(LOAD); 60518230
|
|
STEPIT; 60518232
|
|
END; 60518233
|
|
END; 60518235
|
|
BEGIN 60518240
|
|
STEPIT; 60518245
|
|
K~AEXP; 60518250
|
|
IF ELCLASS! COMMA THEN ERR(609); 60518260
|
|
IF STEPI=UNKNOWNID OR 60518270
|
|
ELCLASS = NUMBER THEN 60518271
|
|
FLAG(622); 60518272
|
|
IF (K~ELBAT[I]).LINK<FIRSTINFO THEN FLAG(622); 60518273
|
|
IF GT1~TABLE(I+1)=LFTBRKT OR 60518274
|
|
GT1 = ATSIGN THEN 60518275
|
|
PROCALL~GT1~VARIABLE(FR) ELSE 60518276
|
|
BEGIN 60518279
|
|
EMITN(K.ADDRESS); 60518280
|
|
IF K.TYPE=FORMALNAMEP THEN 60518281
|
|
EMIT(LOAD); STEPIT; 60518282
|
|
PROCALL := (GT1 := K).CLASS - BOOID END; 60518283
|
|
IF GT1<0 OR (GT1~ K.CLASS }BOOARRAYID AND GT1{WORDARRAYID) THEN 60518284
|
|
PROCALL ~ WTYPE; 60518285
|
|
EMIT(RDLK); 60518289
|
|
END; 60518290
|
|
BEGIN % DECIMAL 60518300
|
|
STEPIT; 60518310
|
|
K ~ AEXP; 60518320
|
|
EMIT1P(SCRF,12); 60518330
|
|
END; 60518340
|
|
BEGIN % BINARY 60518350
|
|
STEPIT; 60518355
|
|
K ~ AEXP; 60518360
|
|
EMITNUM(12); 60518380
|
|
EMIT(ICVD); 60518390
|
|
END; 60518400
|
|
BEGIN STEPIT; K~EXPRSS; EMIT(T1) END % RETURN 60518405
|
|
;BEGIN % SRCH 60518410
|
|
STEPIT; K ~ EXPRSS; 60518420
|
|
IF ELCLASS ! COMMA THEN FLAG(623); 60518430
|
|
STEPIT; EXPRESSION(K); 60518440
|
|
IF ELCLASS ! COMMA THEN FLAG(623); 60518450
|
|
MAKEARRAYROW; EMIT(SRCH); 60518460
|
|
END 60518470
|
|
;IF ELCLASS=LFTPRN THEN BEGIN %STOP(EXP) 60518480
|
|
STEPIT; K ~ EXPRSS; 60518490
|
|
IF ELCLASS=COMMA THEN BEGIN 60518492
|
|
STEPIT; K := EXPRSS END ELSE 60518494
|
|
EMIT(ZERO); EMIT(EXCH); 60518495
|
|
TB1 ~ BOOLEAN(T2 ~1); 60518500
|
|
EMIT(HALT); EMIT(DLET) END ELSE BEGIN 60518510
|
|
EMIT(HALT); GO FINI END; 60518520140621PK
|
|
END CASES ON T2; 60518970
|
|
IF T2 > 0 THEN 60518980
|
|
IF ELCLASS ! RTPARN THEN FLAG(623) ELSE STEPIT; 60518990
|
|
GO TO SKIP2; 60519000
|
|
END ELSE GO SKIP1; 60520000
|
|
END; 60521000
|
|
EMIT(MKST); 60522000
|
|
IF TYPEF=FORMALNAMEQ 60522200
|
|
THEN ITEMREFERENCE(FP) 60522300
|
|
ELSE BEGIN EMITN(ADDRSF);STEPIT;END; 60522350
|
|
COMMENT ITEMREFERENCE LEAVES IRW POINTING TO PCW IN TOS; 60522400
|
|
SKIP1: 60523000
|
|
N~(GT1~IF NOT FORMALF THEN GIT(ADDLADRES) ELSE 0).NOPAR; 60524000
|
|
COMMENT THERE IS NO ADDL ENTRY FOR A FORMAL PROCEDURE; 60524100
|
|
IF ELCLASS = LFTPRN THEN 60525000
|
|
ACTUALPARAPART(FORMALF,ADDLADRES,GT1,TRUE) ELSE 60526000
|
|
IF N!0 THEN ERR(604); 60527000
|
|
IF T3=INTRINSIC THEN 60528000
|
|
BEGIN 60528100
|
|
IF T1.[30:6]=0 THEN EMIT(T1) ELSE 60528200
|
|
BEGIN % PICK UP SYLLABLE FROM ADDL 60528250
|
|
T2~T1.[30:6]; 60528300
|
|
T2~ADDL[T2.LINKR,T2.LINKC]; 60528400
|
|
EMIT1P(T1,T2); 60528500
|
|
END; 60528600
|
|
60528700
|
|
GO SKIP2 60528800
|
|
END; 60528900
|
|
EMIT(ENTR); 60529000
|
|
SKIP2: IF TB1 AND NOT FROM THEN EMIT(DLET); 60530000
|
|
COMMENT A CALL ON A FUNCTION FROM STMT REQUIRES A DLET ON RETURN; 60531000
|
|
FINI: END PROCALL; 60532000
|
|
INTEGER RETNBUG; COMMENT KLUDGE FOR BUG IN RETN OP; 6053290060533XXX
|
|
PROCEDURE ACTUALPARAPART(FBIT,INDEX,AD,FROM); 60533000
|
|
VALUE FBIT,INDEX,AD,FROM; 60534000
|
|
BOOLEAN FBIT,FROM; 60535000
|
|
INTEGER INDEX; 60536000
|
|
REAL AD; 60537000
|
|
COMMENT ACTUALPARAPART IS RESPONSIBLE FOR CONSTRUCTING ALL CALLS ON PAR-60538000
|
|
AMETERS.IT HANDLES THE ENTIRE PARAMETER LIST WITH ONE 60539000
|
|
CALL. IT IS ALSO RESPONSIBLE FOR CHECKING FOR NON-CORRE-60540000
|
|
SPONDENCE OF THE ACTUAL AND FORMAL PARAMETERS. 60541000
|
|
FBIT TELLS IF THE PROCEDURE BEING CALLED IS FORMAL OR 60542000
|
|
NOT 60543000
|
|
AD IS FIRST ADDL WORD FOR PROCEDURE OR QUEUE 60544000
|
|
FROM TRUE IF CALL FROM PROCALL,FALSE IF FROM ENTRYEXP 60544100
|
|
INDEX IS THE INDEX INTO ADDL (-VE IF FROM STOREITEM) 60545000
|
|
; 60545500
|
|
BEGIN 60546000
|
|
INTEGER PCTR,ACLASS,SCLASS; 60547000
|
|
BOOLEAN INTRINSICFLAG %TURNED ON FOR INTRINSIC 60547500
|
|
,STOREITEMFLAG %TURNED ON FOR STOREITEM CALL 60547600
|
|
; 60547700
|
|
60548000
|
|
60549000
|
|
60550000
|
|
DEFINE FL=FR#; 60550500
|
|
60551000
|
|
60552000
|
|
COMMENT PCTR IS A COUNT OF THE NUMBER OF PARAMETERS COMPILED. 60553000
|
|
ACLASS IS THE CLASS OF THE ACTUAL PARAMETER 60554000
|
|
SCLASS IS THE CLASS OF THE FORMAL PARAMETER; 60555000
|
|
REAL WHOLE; 60556000
|
|
COMMENT WHOLE CONTAINS THE ELBAT WORD OF THE ACTUAL PARAMETERS; 60557000
|
|
BOOLEAN VBIT,VP; 60558000
|
|
COMMENT VBIT TELLS WHETHER THE PARAMETER IS TO BE CALLED BY 60559000
|
|
VALUE OR BY NAME 60560000
|
|
VP TELLS WHETHER PROCEDURE HAS VARIABLE NO. OF PARAMS; 60561000
|
|
LABEL ANOTHER,NORMAL,STORE,LRTS,CERR,NMCALL,VE,LOADPAR,NAMCPAR60562000
|
|
,LP,DIMCHECK,COMMON,HANDLEARRAY,FINI,BS; 60563000
|
|
REAL T1,T2,T3,T4,T5,T6,T7; 60564000
|
|
BOOLEAN ITEMFLAG; %SET FOR ACTUALS WHICH ARE ITEM REFERENCES 60564100
|
|
COMMENT *** THE FOLLOWING TWO MECHANISMS MIGHT PROFITABLY BE OPTIMISED; 60564200
|
|
DEFINE NOTWORDARRAY=(ACLASS!WORDARRAYID OR SCLASS<BOOARRAYID 60564300
|
|
OR SCLASS>WORDARRAYID) AND (SCLASS!WORDARRAYID 60564400
|
|
OR ACLASS<BOOARRAYID OR ACLASS>EVENTARRAYID 60564500
|
|
OR ACLASS=PCID)#, 60564600
|
|
NOTWORDPROCID=(ACLASS!WORDPROCID OR SCLASS<BOOPROCID 60564700
|
|
OR SCLASS>PTRPROCID) AND (SCLASS!WORDPROCID60564800
|
|
OR ACLASS<BOOPROCID OR ACLASS>PTRPROCID)#, 60564850
|
|
NOTFORMALWORDARRAY=SCLASS!WORDID AND SCLASS!WORDARRAYID# 60564855
|
|
; 60564900
|
|
COMMENT *** PERHAPS THESE CAN BE REDUCED; 60565000
|
|
LABEL 60566000
|
|
L5,L6,L7,L8,L9,L10,L11,L12,L13,L14,L15,L16,L17,L18,L19,L20, 60567000
|
|
L21,L22,L23,L24,L25,L26,L27,L28,L29,L30,L31,L32,L33,L34,L35, 60568000
|
|
L36,L37,L38,L40,L41,L42; 60569000
|
|
DEFINE BOTTOM = 4#; 60570000
|
|
SWITCH S ~L6 ,L7 ,L8 ,L9 ,L10 ,L11 ,L12 ,60571000
|
|
L13 ,L40 ,L14 ,L15 ,L16 ,L17 ,L18 ,L19 ,L41 ,60572000
|
|
L20 ,L21 ,L22 ,L23 ,L24 ,L25 ,L42 ,L26 ,L27 ,60573000
|
|
L28 ,L29 ,L30 ,L31 ,L32 ,L33 ,L34 ,L35 ,L36 ,60574000
|
|
%THIS PATCH FOR L37 MAKES STRNGCON LOOK LIKE NUMBER. USE THE 60574008
|
|
%OPTAB SWITCH AS SOON AS WE GET A 6500. 60574009
|
|
L37 ,L37 ; 60574100
|
|
COMMENT THESE LABELS ARE ALL SCREWED UP. THERE IS NO CORRESPONDENCE 60575000
|
|
BETWEEN THE NUMBERS IN THE LABELS AND THE CLASS VALUES IT 60576000
|
|
WOULD BE WORTHWHILE CHANGING TO MNEMONIC LABELS LATER; 60577000
|
|
60578000
|
|
COMMENT FOLLOWING MUST BE REMOVED LATER; 60579000
|
|
FORMAT FMT ( " DEBUG ",3I6); 60580000
|
|
FORMAT FMT1(" DEBUG ",4I9); COMMENT REMOVE LATER; 60580500
|
|
INTEGER TEMPNO; 60581000
|
|
INTEGER LOC; % LOCATION OF PCW IN THE SEGMENT, A WORD INDEX. 60581300
|
|
BOOLEAN RETERN; 60581500
|
|
DEFINE DEBUGLINE=IF DONSBUG THEN WRITE(LINE[DBL],FMT,ACLASS,SCLASS, 60582000
|
|
TEMPNO)#; 60582001
|
|
COMMENT END OF DEBUG DECLARATIONS; 60583000
|
|
IF DONSBUG THEN 60583500
|
|
WRITE (LINE[DBL],FMT,AD.NOPAR,N,10); COMMENT REMOVE LATER; 60584000
|
|
INTRINSICFLAG ~ TYPEF=INTRINSIC; 60584500
|
|
IF (STOREITEMFLAG~INDEX<0) THEN INDEX~ABS(INDEX); 60584800
|
|
PCTR ~ 1; 60585000
|
|
IF AD< 0 THEN BEGIN VP ~ TRUE;EMIT(ZERO) END ELSE VP~FALSE; 60586000
|
|
COMMENT PROCEDURE HAS VARIABLE NUMBER OF PARAMETERS; 60587000
|
|
ANOTHER:ACLASS ~ STEPI; WHOLE ~ ELBAT[I]; SCATTERELBAT; 60588000
|
|
COMMENT SETUP FIELDS OF ACTUAL PAR;60589000
|
|
IF FBIT OR VP THEN 60590000
|
|
BEGIN VBIT ~ FALSE; SCLASS ~ FORMALID END 60591000
|
|
ELSE 60592000
|
|
BEGIN 60593000
|
|
T7 ~ GIT(INDEX+PCTR); 60594000
|
|
VBIT~((IF FROM THEN T7 ELSE T7~TAKE(T7.LINK)).TYPE 60594300
|
|
=FORMALVALUEQ OR T7.TYPE=FORMALVALUEP); 60594500
|
|
60594600
|
|
IF DONSBUG THEN 60594650
|
|
WRITE(LINE[DBL],FMT,T7.TYPE,T7.CLASS,11); COMMENT REMOVE LATER; 60595000
|
|
COMMENT *** ADDL WORDS OF PROCEDURE CONTAIN ELBAT WORDS FOR FORMAL 60596000
|
|
PARAMETERS WHEREAS ADDL WORDS FOR QUEUE CONTAIN LINK TO60596100
|
|
ITEM ELBATWORDS IS THIS DISTINCTION NECESSARY; 60596200
|
|
IF SCLASS~ T7.CLASS{INTROAID AND SCLASS}REALPROCID THEN 60597000
|
|
IF(SCLASS-REALPROCID) MOD INCR=1 THEN SCLASS~SCLASS-160598000
|
|
; 60599000
|
|
COMMENT *** WHEN NOT FORMAL OR VARIABLE PARAMETER OBTAIN VBIT,SCLASS60600000
|
|
FROM THE ADDL ENTRY FOR THE PROCEDURE. SCLASS MAY BE 60601000
|
|
MODIFIED TO ELIMINATE DISTINCTION BETWEEN REAL AND INTE-60602000
|
|
GER. NOTE DEPENDENCE UPON CLASS RELATIVITIES; 60603000
|
|
60604000
|
|
IF NOT FROM AND NOT STOREITEMFLAG THEN 60604300
|
|
BEGIN EMIT(DUPL);EMITNUM(T7.QINDEXF);EMIT(INDX) END;60604500
|
|
COMMENT ACTUALPARAPART IS CALLED FROM ENTRYEXP WITH AN 60604800
|
|
INDEXABLE DD IN THE TOP OF THE STACK. ALL ACTUAL 60604810
|
|
PARAMETERS MUST BE PASSED TO THE SPACE REFERENCED BY60604820
|
|
THIS DD (SEE BELOW). AT THIS POINT - I.E. AT THE 60604830
|
|
BEGINNING OF PROCESSING FOR ALL PARAMETERS, AN 60604840
|
|
INDEXED DD IS POINTING TO THE HOLE IN THE SPACE 60604850
|
|
WHERE THE NEXT PARAMETER WILL BE PLACED; 60604860
|
|
END; 60605000
|
|
TEMPNO ~ 1; DEBUGLINE; COMMENT REMOVE LATER; 60606000
|
|
IF NOT (ITEMFLAG~ITEMONLY(VBIT,SCLASS)) THEN 60606500
|
|
IF T1~TABLE(I+1)!COMMA THEN 60607000
|
|
IF T1 ! RTPARN THEN 60608000
|
|
COMMENT THE ACTUAL PARAMETER HAS MORE THAN ONE LOGICAL QUANTITY60609000
|
|
HENCE A DIFFERENT ANALYSIS IS REQUIRED; 60610000
|
|
BEGIN 60611000
|
|
IF ACLASS<BOOARRAYID OR ACLASS> QUEUEARRAYID THEN 60612000
|
|
BEGIN 60613000
|
|
COMMENT THE ACTUAL PARAMETER DOES NOT START WITH AN ARRAY 60614000
|
|
NAME, HENCE IT IS GENERAL EXPRESSION; 60615000
|
|
NORMAL: IF VBIT OR VP OR ACLASS=EVENTARRAYID THEN 60616000
|
|
VE: BEGIN COMMENT VALUE CALL OR REFERENCE CALL EPRSION;60617000
|
|
T1~IF ELCLASS!EVENTID AND ELCLASS!EVENTARRAYID 60618000
|
|
THEN EXPRSS ELSE VARIABLE(FP); 60618030
|
|
IF DONSBUG THEN 60618050
|
|
WRITE(LINE[DBL],FMT1,ELCLASS,T1.ARAYTPE,T1.ARAYDIM,16); 60618500
|
|
IF VP OR ACLASS=EVENTARRAYID THEN INDXCHK 60619000
|
|
END 60620000
|
|
ELSE 60621000
|
|
BEGIN COMMENT NAME CALL EXPRESSION; 60622000
|
|
NMCALL: T2~ BUMPL; 60623000
|
|
COMMENT T2 NOW HOLDS LOCATION FOR JUMP AROUND EXPRESSION;60624000
|
|
T3 ~ INSERTPCW; 60625000
|
|
COMMENT INSERTPCW CAUSES PCW TO BE PLACED BELOW 60626000
|
|
MARKSTACK; 60627000
|
|
T1~IF ELCLASS!EVENTID AND ELCLASS!EVENTARRAYID 60628000
|
|
THEN EXPRSS ELSE VARIABLE(FP); 60628030
|
|
IF DONSBUG THEN 60628050
|
|
WRITE(LINE[DBL],FMT1,ELCLASS,T1.ARAYTPE,T1.ARAYDIM,15); 60628500
|
|
COMMENT NOTE THAT PROTECTION AGAINST AN ATTEMPT TO STORE 60629000
|
|
INTO AN EXPRESSION (INSIDE A PROCEDURE) IS PROV- 60630000
|
|
IDED BY HARDWARE AND NOT (AS ON THE 5500) BY COM-60631000
|
|
PILED CODE; 60632000
|
|
INDXCHK; 60633000
|
|
EMITN(RETNBUG~GETSTACK); EMIT(OVRD);EMITPAIR(RETNBUG,STFF); 6063390060634XXX
|
|
RTNSTACK(RETNBUG); 6063392060634YYY
|
|
EMIT(RETN); 60634000
|
|
ENTERSEPA((LOC~T2 DIV 6 + 1),L,(LOC|6+9)); 60634100
|
|
COMMENT THIS IS FOR SEPARATED COMPILING ONLY; 60634200
|
|
EMITB(BRUN,T2,L); EMITN(T3); STUFF; 60634300
|
|
COMMENT FINISH CODE AND COMPLETE BRANCH. AN IRW REFEREN- 60635000
|
|
CING PCW PLACED IN STACK; 60636000
|
|
END NAME CALL EXPRESSION; 60637000
|
|
IF NOT BOOLEAN(T1.[01:01])%THEN IT"S NOT AN ARRAY. 60638000
|
|
THEN ACLASS~(IF T1!EVTYPE THEN T1+BOOID ELSE 60638300
|
|
EVENTID) 60638600
|
|
ELSE 60638800
|
|
COMMENT *** EXPRSS RETURNS TYPE<O FOR ARRAY EXPRESSIONS, NOTE 60639000
|
|
DEPENDENCE ON CLASS RELATIVITIES; 60640000
|
|
BEGIN COMMENT ARRAY EXRPESSION CLEANUP; 60641000
|
|
ACLASS~ T1.ARAYTPE + BOOARRAYID; 60642000
|
|
COMMENT *** EVENT ARRAYS ARE NOT YET CATERED FOR; 60643000
|
|
IF ACLASS=INTARRAYID THEN ACLASS~REALARRAYID; 60644000
|
|
DIMCHECK: IF ((IF FROM THEN T7 ELSE GIT(T7.LINK)).NODIM) 60645000
|
|
!T1.ARAYDIM AND NOTFORMALWORDARRAY THEN 60645500
|
|
COMMENT *** ASSUMED THAT FIRST WORD OF ADDL FOR ARRAY FORMAL 60646000
|
|
PARAMETER CONTAINS NUMBER OF DIMENSIONS IN NODIM; 60647000
|
|
BEGIN FLAG(605); GO TO CERR END 60648000
|
|
END ARRAY EXPRESSION CLEANUP; 60649000
|
|
IF ACLASS=INTID THEN ACLASS~REALID; 60649500
|
|
GO TO BS; 60650000
|
|
END OF EXPRESSION CALL CODE; 60651000
|
|
COMMENT IF WE REACH THIS POINT THE ACTUAL PARAMETER STARTS 60652000
|
|
WITH AN ARRAY NAME FOLLOWED BY SOMETHING ELSE; 60653000
|
|
IF VBIT THEN GO TO VE; 60654000
|
|
IF TABLE(I+2)!NUMBER OR (GT1~TABLE(I+4)!COMMA AND 60655000
|
|
GT1!RTPARN) THEN GO TO NORMAL ELSE 60656000
|
|
COMMENT IF WE REACH THIS POINT WE HAVE A ONE DIMENSIONAL 60657000
|
|
SUBSCRIPTED VARIABLE - CONSTANT LOWER BOUND CALLED 60658000
|
|
BY NAME.WE OPTIMISE BY AVOIDING ACCIDENTAL ENTRY; 60659000
|
|
BEGIN 60660000
|
|
GT1~VARIABLE(FP);INDXCHK; 60661000
|
|
IF ACLASS=WORDARRAYID THEN L~L-2; 60661200
|
|
IF ACLASS= EVENTARRAYID THEN ACLASS~EVENTID 60662000
|
|
ELSE 60663000
|
|
IF ACLASS>PCID THEN ACLASS~ACLASS-INCRTWICE 60664000
|
|
ELSE ACLASS~ACLASS-INCR; 60665000
|
|
IF ACLASS= INTID THEN ACLASS~ REALID; 60666000
|
|
COMMENT ACLASS NOW IS CLASS WHICH WOULD BE RETURNED BY EXPRSS; 60667000
|
|
COMMENT *** THIS CODE IS KLUDEGY AND MAY BE WRONG- RECONSIDER LATER; 60668000
|
|
GO TO BS; 60669000
|
|
END NAME CALL SINGLY SUBSCRIPTED VARIABLE 60670000
|
|
END ACTUAL PARAMETER WITH MORE THAN ONE LOGICAL QUANT;60671000
|
|
COMMENT IF WE REACH THIS POINT THE ACTUAL PARAMETER IS A SINGLE 60672000
|
|
LOGICAL QUANTITY; 60673000
|
|
IF NOT ITEMFLAG THEN STEPIT; 60674000
|
|
GO TO S[ACLASS-BOTTOM]; 60675000
|
|
IF ACLASS=EVENTID THEN GO TO NAMCPAR; 60676000
|
|
IF ACLASS=0 THEN FLAG(100) 60677000
|
|
ELSE 60678000
|
|
CERR: COMMENT ILLEGAL ACTUAL PARAMETERS FLAGGED HERE; 60679000
|
|
L7:L8:L33: BEGIN FLAG(607); ERRORTOG ~ TRUE; GO TO COMMON END; 60680000
|
|
L26: COMMENT PICTURE ID; 60681000
|
|
IF FORMALF THEN EMITPAIR(ADDRSF,LOAD) ELSE 60682000
|
|
COMMENT IF THE PICTURE WAS FORMAL, WE PASS IT ALONG. 60682020
|
|
OTHERWISE WE GEN UP A THUNK; 60682040
|
|
BEGIN 60682060
|
|
T4 ~ 0 & (CURRENT+1) [30:42:6]; 60682080
|
|
T2 ~ BUMPL; 60682100
|
|
EMITPAIR(T4+2,LOAD); EMITPAIR(T4+3,LOAD); 60682120
|
|
T5 ~ PICTUREGEN(FALSE,TRUE,TAKE(ELBAT[I-1]).LINK); 60682140
|
|
EMITPAIR(T4+4,STOD); 60682160
|
|
EMIT(RETN); 60682180
|
|
T3 ~ INSERTPCW; 60682200
|
|
EMITNUM(T5); 60682220
|
|
EMIT(GREQ); 60682240
|
|
EMITB(BRTR,BUMPL,T2); 60682260
|
|
EMIT(NVLD); 60682280
|
|
EMITB(BRUN,T2,L); 60682300
|
|
EMITN(T3); STUFF 60682320
|
|
END; 60682340
|
|
GO TO BS; 60682360
|
|
LOADPAR:IF VBIT THEN 60683000
|
|
BEGIN 60683100
|
|
%PATCH TO MAKE INTEGERS LOOK LIKE REALS--RATCHFORD, 11-16-68. 60683150
|
|
I~I-2; STEPIT; 60683200
|
|
IF ACLASS~EXPRSS+BOOID{INTROAID AND ACLASS}REALPROCID THEN 60683300
|
|
IF (ACLASS-REALPROCID) MOD INCR=1 THEN ACLASS~ACLASS-1; 60683400
|
|
END ELSE 60683500
|
|
NAMCPAR: IF ITEMFLAG THEN ELSE BEGIN EMITN(ADDRSF); 60684000
|
|
IF FORMALF THEN EMIT(LOAD) ELSE STUFF END; 60684500
|
|
BS: IF SCLASS ! ACLASS THEN 60685000
|
|
IF SCLASS ! FORMALID THEN 60686000
|
|
IF SCLASS!WORDID AND ACLASS!WORDID THEN 60686200
|
|
IF NOTWORDARRAY THEN 60686400
|
|
IF NOTWORDPROCID THEN 60686600
|
|
COMMENT ACTUAL AND FORMAL PARAMETERS DO NOT AGREE; 60687000
|
|
BEGIN TEMPNO ~ 2; DEBUGLINE; FLAG(622); GO TO CERR; COMMENT FIX UP;END;60688000
|
|
COMMON: 60689000
|
|
COMMENT NEXT PARAMETER WILL BE EXAMINED; 60690000
|
|
PCTR ~ PCTR+1; 60691000
|
|
60692000
|
|
IF NOT FROM THEN 60692100
|
|
BEGIN 60692200
|
|
COMMENT WE ARE PROCESSING AN ENTRY EXPRESSION. PARAMETER IS IN TOP 60692300
|
|
OF STACK, INDEXED DD IN SECOND WORD FROM TOP AND INDEXABLE 60692310
|
|
DD IN THIRD WORD FROM TOP; 60692320
|
|
EMIT(EXCH); 60692400
|
|
EMIT(OVRD); 60692500
|
|
COMMENT PARAMETER HAS BEEN TRANSFERRED TO SPACE FOR ENTRY.INDEX- 60692600
|
|
ABLE DD POINTING TO THIS SPACE IS IN TOP OF STACK; 60692610
|
|
END ENTRY EXPRESSION CASE; 60692700
|
|
IF ELCLASS= COMMA THEN 60692750
|
|
GO TO ANOTHER; 60692800
|
|
60692900
|
|
IF ELCLASS ! RTPARN THEN BEGIN ERR (623);GO TO FINI END; 60693000
|
|
IF NOT FBIT AND NOT VP THEN 60694000
|
|
IF FROM AND AD.NOPAR+1!PCTR THEN 60695000
|
|
BEGIN COMMENT WRONG NUMBER OF PARAMETERS; 60696000
|
|
IF DONSBUG THEN 60696050
|
|
WRITE(LINE[DBL],FMT,PCTR,AD.NOPAR,12); COMMENT REMOVE LATER; 60697000
|
|
ERR(604); GO TO FINI 60698000
|
|
END; 60699000
|
|
STEPIT; GO TO FINI; 60700000
|
|
L6: 60701000
|
|
COMMENT PROCEDURE; 60702000
|
|
TEMPNO ~ 3; DEBUGLINE; COMMENT REMOVE LATER; 60703000
|
|
TB1~ TRUE; 60704000
|
|
IF FORMALF THEN GO TO NAMCPAR; 60705000
|
|
LP: IF TYPEF = INTRINSIC THEN BEGIN FLAG(620);GO TO CERR END; 60706000
|
|
COMMENT ***INTRINSIC PROCEDURE AS ACTUAL PARAMETER- FIX UP LATER; 60707000
|
|
IF T1 ~ GIT(WHOLE~TAKE(WHOLE).LINK).NOPAR =0 THEN 60708000
|
|
BEGIN 60709000
|
|
COMMENT THE PROCEDURE BEING PASSED HAS ZERO PARAMETERS; 60710000
|
|
IF TB1 THEN GO TO NAMCPAR; COMMENT PROCID OR DPPROCID; 60711000
|
|
IF NOT FBIT AND NOT VP THEN 60712000
|
|
BEGIN 60713000
|
|
TEMPNO ~ 4; DEBUGLINE; COMMENT REMOVE LATER; 60714000
|
|
ACLASS ~ ACLASS+INCR; 60715000
|
|
IF SCLASS{PTRPROCID THEN SCLASS~SCLASS+INCR; 60716000
|
|
END; 60717000
|
|
COMMENT *** ACTUAL PARAMETER IS ZERO PARAMETER FUNCTION-MAY BE PASSED60718000
|
|
AS EXPRESSION IRRESPECTIVE OF CLASS OF FORMAL PARAMETER. 60719000
|
|
CONVENIENT TO MODIFY(WHEN NECESSARY) SCLASS RATHER THAN 60720000
|
|
ACLASS, NOTE DEPENDENCE ON RELATIVITIES OF CLASSES; 60721000
|
|
GO TO LOADPAR 60722000
|
|
END CASE OF ZERO PARAMETERS; 60723000
|
|
TB1 ~ TRUE; 60724000
|
|
FOR T2~1 STEP 1 UNTIL T1 60725000
|
|
DO BEGIN 60726000
|
|
IF (T3~GIT(WHOLE+T2)).TYPE=FORMALVALUEQ OR 60727000
|
|
T3.TYPE=FORMALVALUEP THEN 60727100
|
|
COMMENT THE T2-TH PARAMETER TO THE PROCEDURE BEING PASSED IS 60728000
|
|
VALUE; 60729000
|
|
BEGIN 60730000
|
|
IF TB1 THEN 60731000
|
|
BEGIN 60732000
|
|
COMMENT THIS IS THE FIRST VALUE PARAMETER. WE CONSTRUCT 60733000
|
|
THUNK HERE TO ENSURE THAT WHEN THIS PROCEDURE IS 60734000
|
|
CALLED,ITS PARAMETERS THAT ARE VALUE GET CALLED BY60735000
|
|
VALUE. THIS ONLY OCCURS WITH FIRST VALUE PARMETER;60736000
|
|
TB1~FALSE ; COMMENT TURN OFF FOR FUTURE VAL PARS;60737000
|
|
T5 ~ BUMPL; 60738000
|
|
T6 ~ INSERTPCW; 60739000
|
|
EMIT(MKST); 60739100
|
|
EMITN(ADDRSF); 60739200
|
|
FOR T4~2 STEP 1 WHILE T4{T2 DO 60739300
|
|
BEGIN 60739400
|
|
COMMENT SINCE WE FIND THE 1ST VALUE PARAMETER, WE RE-DO 60739500
|
|
THOSE NAME CALLS WHICH WE DIDNOT CARE BEFORE; 60739600
|
|
EMITN(T4&(CURRENT+1)[30:42:6]); 60739700
|
|
STUFF; 60739800
|
|
END; 60739900
|
|
END CASE FOR FIRST VALUE PARAMETER; 60740000
|
|
COMMENT WE CAN NOW BUILD CODE FOR VALUE CALL EVALUATION; 60741000
|
|
EMITV((T2+1)&(CURRENT+1)[30:42:6]); 60742000
|
|
END CASE FOR ANY VALUE PARAMETER ELSE 60743000
|
|
IF TB1 THEN ELSE 60743100
|
|
BEGIN 60743200
|
|
COMMENT SINCE THERE ARE VALUE PARAMETERS, WE HAVE TO ALSO 60743300
|
|
PASS THE NAME PARAMETERS; 60743400
|
|
EMITN((T2+1)&(CURRENT+1)[30:42:6]); 60743500
|
|
STUFF; 60743600
|
|
END; 60743700
|
|
END CHASING OF PARAMETERS TO PROCEDURE BEING PASSED; 60744000
|
|
IF NOT TB1 THEN 60745000
|
|
BEGIN 60746000
|
|
COMMENT THERE WERE VALUE CALLS SO THUNK MUST BE COMPLETED; 60747000
|
|
EMIT(ENTR); 60747500
|
|
EMIT(IF RETERN THEN RETN ELSE EXIT); 60748000
|
|
ENTERSEPA((LOC~T5 DIV 6 + 1),L,(LOC|6+9)); 60748500
|
|
COMMENT FOR SEPARATED COMPILING ONLY, TEST IS IN THE DEFINE; 60748501
|
|
EMITB(BRUN,T5,L); 60749000
|
|
ADDRSF ~ T6 60750000
|
|
END CASE OF VALUE PARAMETERS TO PROCEDURE BEING PASSED; 60751000
|
|
TEMPNO ~ 5; DEBUGLINE; COMMENT REMOVE LATER; 60752000
|
|
GO TO NAMCPAR; COMMENT MUST BE NAME CALL; 60753000
|
|
L12: ACLASS~ REALPROCID; COMMENT CHANGE INTEGER TO REAL ID; 60754000
|
|
L9:L10:L11:L13:L14:L40: 60755000
|
|
COMMENT ALL TYPED PROCEDURES PROCESSED HERE; 60756000
|
|
IF FORMALF THEN COMMENT PROCEDURE BEING PASSED IS FORMAL; 60757000
|
|
BEGIN 60758000
|
|
IF SCLASS>PTRPROCID THEN ACLASS~ACLASS+INCR; 60759000
|
|
COMMENT *** THE FORMAL PARAMETER DOES NOT CALL FOR A PROCEDURE SO IT 60760000
|
|
MUST CALL FOR AN EXPRESSION, NOTE USE OF RELATIVITIES; 60761000
|
|
IF VBIT THEN BEGIN EMITV(ADDRSF);GO TO BS END 60762000
|
|
ELSE GO TO NAMCPAR; 60763000
|
|
END CASE WHERE PROCEDURE BEING PASSED IS FORMAL; 60764000
|
|
RETERN~TRUE; 60764500
|
|
TB1~ACLASS=DPPROCID; GO TO LP; 60765000
|
|
COMMENT NO ZERO PARAMETER FUNCTION OPTIMIZATION FOR DPPROCID; 60765300
|
|
L19:L20:L41: COMMENT REFERENCE,POINTER,WORD IDS; 60765500
|
|
IF VBIT AND NOT ITEMFLAG THEN BEGIN EMITN(ADDRSF);EMIT(IF 60765600
|
|
ACLASS=WORDID THEN LODT ELSE LOAD);GO TO BS END ELSE 60765800
|
|
GO TO NAMCPAR; 60765850
|
|
L18: ACLASS ~ REALID; 60766000
|
|
L15:L16:L17: 60767000
|
|
COMMENT ALL TYPED IDS PROCESSED HERE; 60768000
|
|
IF VBIT THEN BEGIN IF ITEMFLAG THEN ELSE EMITV(ADDRSF); 60769000
|
|
GO TO BS END ELSE GO TO NAMCPAR; 60770000
|
|
L24:L30:ACLASS~ REALARRAYID; 60771000
|
|
COMMENT INTEGER ARRAYS CHANGED TO REAL; 60772000
|
|
GO TO HANDLEARRAY; 60773000
|
|
L32: ACLASS~ REFARRAYID; COMMENT QUEUARRAYS LOOK LIKE REFARRAYS; 60774000
|
|
GO TO HANDLEARRAY; 60775000
|
|
L27:L28:L29: 60776000
|
|
ACLASS ~ ACLASS-INCR; 60777000
|
|
COMMENT ***READ ONLY ARRAYS NOW LOOK LIKE REGULAR ARRAYS. 60778000
|
|
; 60779000
|
|
HANDLEARRAY: 60780000
|
|
L21:L22:L23:L25:L31:L42: 60781000
|
|
COMMENT ARRAYS HANDLED HERE; 60782000
|
|
IF NOT ITEMFLAG THEN 60782500
|
|
EMITN(ADDRSF); 60783000
|
|
IF INTRINSICFLAG AND VBIT THEN EMIT(LODT) ELSE 60784000
|
|
60784001
|
|
IF NOT ITEMFLAG THEN IF FORMALF THEN EMIT(LOAD) ELSE STUFF; 60784300
|
|
COMMENT AN INTRINSIC VALUE CALL EXPECTS THE DD; 60784600
|
|
T1.ARAYDIM ~ GIT(TAKE(WHOLE).LINK).NODIM; 60785000
|
|
GO TO DIMCHECK; 60786000
|
|
L34: COMMENT QUEUEID; 60787000
|
|
ACLASS ~ REFID; 60788000
|
|
GO TO LOADPAR; 60789000
|
|
L35: COMMENT NULLV; 60790000
|
|
EMIT(ZERO);EMITNUM(5);EMIT(STAG);GO TO BS; 60791000
|
|
COMMENT *** FORMAT OF NULLV NOT YET DETERMINED; 60792000
|
|
L36: COMMENT TRUTHV; 60793000
|
|
ACLASS ~ BOOID; EMIT(ADDRSF); GO TO BS; 60794000
|
|
L37: COMMENT NUMBER; 60795000
|
|
I ~ I-2; STEPIT; 60796000
|
|
IF SCLASS = FORMALID THEN T1~EXPRSS ELSE 60796500
|
|
EXPRESSION(SCLASS-BOOID); 60797000
|
|
IF DONSBUG THEN 60797050
|
|
WRITE(LINE[DBL],FMT1,ELCLASS,T1.ARAYTPE,T1.ARAYDIM,16); 60797500
|
|
ACLASS ~ SCLASS; 60798000
|
|
GO TO BS; 60799000
|
|
L38: 60800000
|
|
COMMENT *** HANDLING OF DOUBLE PRECISION NUMBERS RAISES SOME PROBLEMS AT60801000
|
|
PRESENT HENCE KLUDGE.CHANGE AS SOON AS POSSIBLE; 60802000
|
|
FINI : END ACTUALPARAPART; 60803000
|
|
INTEGER PROCEDURE INSERTPCW; 60804000
|
|
COMMENT INSERTPCW CAUSES PCW TO BE PLACED BELOW MARKSTACK AND RETURNS 60805000
|
|
ITS LOCATION; 60806000
|
|
60806010
|
|
IF CURRENT = 0 THEN 60806100
|
|
BEGIN 60806150
|
|
JUMPCHKNX; 60806180
|
|
GLOBALPCW(INSERTPCW~GETSPACE(-0),SEGNO,L,STATE); 60806200
|
|
END ELSE 60806250
|
|
BEGIN 60807000
|
|
JUMPCHKX; COMMENT THIS IS BLOCKHEAD CODE; 60807500
|
|
INSERTPCW ~ GETSPACE(-CURRENT); 60808000
|
|
EMITPCW(CURRENT+1,(L DIV 6)|6+15,STATE,SEGNO); 60809000
|
|
JUMPCHKNX; 60809500
|
|
END INSERTPCW; 60810000
|
|
60810010
|
|
BOOLEAN PROCEDURE ITEMONLY(VBIT,SCLASS);VALUE VBIT,SCLASS; 60810020
|
|
BOOLEAN VBIT; INTEGER SCLASS; 60810040
|
|
COMMENT WHEN THE ACTUAL PARAMETER IS EITHER: 60810060
|
|
<ITEM IDENTIFIER> OR60810080
|
|
<ITEM IDENTIFIEP> @ <REFERENCE IDENTIFIER> OR60810100
|
|
60810120
|
|
<ITEMREFERFNCE> (WHERE ITEM IS PROCEDURE EITHERUNTYPED OR 60810140
|
|
TYPED WITH FORMAL PARAMETER TYPED 60810160
|
|
PROCEDURE ALSO) 60810170
|
|
IT IS COMPILED AND THE VALUE TRUE IS RETURNED.OTHER- 60810180
|
|
WISE FALSE IS RETURNED; 60810200
|
|
BEGIN 60810220
|
|
LABEL FINI; 60810230
|
|
BOOLEAN NAMEFLAG; 60810240
|
|
INTEGER ELCLAS; 60810260
|
|
IF KLASSF=NUMBER THEN BEGIN ITEMONLY~FALSE ;GO FINI;END; 60810270
|
|
IF (ITEMONLY~ 60810280
|
|
((NAMEFLAG~TYPEF=FORMALNAMEQ) OR TYPEF=FORMALVALUEQ) AND 60810300
|
|
(((ELCLAS~ 60810320
|
|
TABLE(I+1))=ATSIGN AND TABLE(I+2)=REFID) OR 60810340
|
|
(ELCLAS=COMMA OR ELCLAS=RTPARN) OR60810350
|
|
60810360
|
|
60810380
|
|
KLASSF=PROCID OR 60810400
|
|
(RANGE(BOOPROCID,PTRPROCID) AND SCLASS}BOOPROCID AND 60810420
|
|
SCLASS{PTRPROCID))) 60810440
|
|
THEN 60810460
|
|
BEGIN 60810480
|
|
ITEMREFERENCE(FP); 60810500
|
|
IF NAMEFLAG 60810520
|
|
THEN IF VBIT 60810540
|
|
THEN EMIT (IF KLASSF=WORDID THEN LODT ELSE 60810560
|
|
LOAD) 60810580
|
|
ELSE 60810600
|
|
ELSE IF VBIT 60810620
|
|
THEN 60810640
|
|
IF ELCLASS!PERIODV THEN ELSE 60810642
|
|
BEGIN 60810644
|
|
IF STEPI = TAGV THEN 60810646
|
|
BEGIN EMIT(RTAG); STEPIT END ELSE60810647
|
|
IF GT1~DOTIT =0 THEN EMIT(DISO) 60810648
|
|
ELSE 60810650
|
|
EMITI(GT1.[36:6],GT1.[42:6]); 60810652
|
|
END 60810654
|
|
ELSE INDXCHK 60810660
|
|
END; 60810680
|
|
FINI: 60810690
|
|
END ITEMONLY; 60810700
|
|
PROCEDURE COMPOUNDTAIL; 60811000
|
|
COMMENT COMPOUNDTAIL COMPILES COMPOUNDTAILS. IT ALSO ELIMINATES 60812000
|
|
COMMENTS FOLLOWING ENDS. AFTER ANY ERROR, ERROR MESSAGES ARE 60813000
|
|
SUPPRESSED. COMPOUNDTAIL IS PARTIALLY RESPONSIBLE FOR 60814000
|
|
RESTORING THE ABILITY TO WRITE ERROR MESSAGES. SOME CARE IS 60815000
|
|
ALSO TAKEN TO PREVENT READING BEYOND THE "END."; 60816000
|
|
BEGIN LABEL ANOTHER; 60817000
|
|
I~I-1; 60818000
|
|
ANOTHER: ERRORTOG~TRUE; % ALLOW ERROR MESSAGES 60819000
|
|
CONTEXT ~ 2; 60820000
|
|
STEPIT; 60821000
|
|
STATEMENT; 60822000
|
|
IF ELCLASS=SEMICOLON THEN GO ANOTHER; 60823000
|
|
IF ELCLASS!ENDV THEN 60824000
|
|
BEGIN ERR(624); % MISSING SEMICOLON OR END 60825000
|
|
GO ANOTHER; 60826000
|
|
END; 60827000
|
|
ENDTOG~TRUE; 60828000
|
|
DO CONTEXT~3 % END COMMENTARY 60829000
|
|
UNTIL STEPI } SEMICOLON AND ELCLASS { ELSEV OR NOT ENDTOG; 60830000
|
|
ENDTOG~FALSE; 60831000
|
|
CONTEXT ~ 2; 60832000
|
|
IF BEGINCTR~BEGINCTR-1!0 EQV ELCLASS=PERIODV THEN 60833000
|
|
BEGIN IF BEGINCTR=0 THEN 60834000
|
|
BEGIN FLAG(625); % EXTRA END 60835000
|
|
BEGINCTR~1; GO ANOTHER; 60836000
|
|
END; 60837000
|
|
FLAG(626); % MISSING END 60838000
|
|
END; 60839000
|
|
IF ELCLASS=PERIODV THEN 60840000
|
|
BEGIN 60841000
|
|
CBUFF[0] ~ "ND;END."&"E"[1:43:5]; 60842000
|
|
DONE~TRUE; 60843000
|
|
NCR~READACARD; 60844000
|
|
ELBAT[I~I-2]~SPECIAL[46]; 60845000
|
|
ELCLASS~SEMICOLON; 60846000
|
|
END; 60847000
|
|
END COMPOUNDTAIL; 60848000
|
|
PROCEDURE QSTMT; 60851000
|
|
COMMENT COMPILES THE QUEUE ASSIGNMENT STATEMENT 60852000
|
|
THE QUEUE ASSIGNMENT STATEMENT IS OF THE FORM: 60853000
|
|
<QUEUE DESIGNATOR>::=<REFERENCE EXPRESSION> WHERE 60854000
|
|
<QUEUE DESIGNATOR>::=<QUEUE IDENTIFIER>/<QUEUE ARRAY60855000
|
|
IDENTIFIER>[INDEX] 60856000
|
|
MOST OF THE WORK IS DONE BY QALGORITHM; 60857000
|
|
BEGIN COMMENT (MCS 1); 60858000
|
|
DEFINE ADDLADRES = N#, % LINK TO ADDL ENTRY FOR Q 60859000
|
|
PARINFO = GT1#; % INFORMATION ON PARAMETERS TO 60860000
|
|
% INSERT 60861000
|
|
% =2 ONE PARAMETER ONLY 60862000
|
|
% =3 TWO PARAMETERS 60863000
|
|
PARINFO ~ 2; 60864000
|
|
ADDLADRES ~ TAKE(ELBAT[I]).LINK; 60865000
|
|
IF ELCLASS= QUEUEARRAYID THEN 60866000
|
|
ADDLADRES ~ ADDLADRES + 1; 60867000
|
|
COMMENT *** FIRST WORD OF ADDL FOR A QUEUE ARRAY CONTAINS INFOR- 60868000
|
|
MATION ON BOUNDS; 60869000
|
|
IF STEPI = LFTBRKT THEN PARINFO ~ 3; 60870000
|
|
QALGORITHM (PARINFO, ADDLADRES,FALSE) 60871000
|
|
END QSTMT MCS1 ; 60872000
|
|
PROCEDURE QALGORITHM(PARINFO,ADDLADRES,FROM); VALUE PARINFO,ADDLADRES, 60873000
|
|
FROM; 60874000
|
|
INTEGER PARINFO, % =0 EXPLICIT CALL I AT ALGORITHM ID 60875000
|
|
% =1 IMPLICIT CALL ON ALLOCATE, I AT LFTPRN60876000
|
|
% =2 IMPLICIT CALL ON INSERT,I AT ASSNOP 60877000
|
|
% =3 IMPLICIT CALL ON INSERT,I AT LFTBRKT 60878000
|
|
ADDLADRES; % HOLDS LINK TO FIRST (QUEUEID) OR 60879000
|
|
% SECOND (QEUEARRAYID) WORD OF QADDL FOR 60880000
|
|
% IMPLICIT CALLS 60881000
|
|
BOOLEAN FROM; % FALSE IF CALL IS FROM STATEMENT 60882000
|
|
COMMENT COMPILES CODE FOR EXPLICIT OR IMPLICIT CALLS ON QUEUE ALGORITHMS60883000
|
|
DETERMINES THE NUMBER AND TYPE OF ACTUAL PARAMETERS TO BE PASSED60884000
|
|
WHEN THERE ARE FEWER ACTUAL PARAMETERS THAN REQUIRED CONSTRUCTS 60885000
|
|
APPROPRIATE DUMMY PARAMETERS 60886000
|
|
THIS PROCEDURE IS CALLED FROM QSTMT TO HANDLE IMPLICIT CALL 60887000
|
|
ON INSERT. IT IS ALSO CALLED TO HANDLE THE IMPLICIT ALLOCATE 60888000
|
|
ASSOCIATED WITH AN ENTRY EXPRESSION. 60888500
|
|
THE FACILITIES SIZE,BUSY,LOCK AND UNLOCK ARE HANDLED HERE 60889000
|
|
HOWEVER IN-LINE CODE RATHER THAN PROCEDURE ENTRY IS RESULT 60890000
|
|
NOTE THAT BUSY,LOCK AND UNLOCK CAN REFERENCE OTHER THAN QUEUES 60890500
|
|
HOWEVER IT IS CONVENIENT TO HANDLE THEM HERE 60890505
|
|
; 60890800
|
|
COMMENT *** SHOULD THIS PROCEDURE HANDLE BOTH IMPLICIT AND EXPLICIT 60891000
|
|
CALLS; 60892000
|
|
BEGIN COMMENT (MCS 1); 60893000
|
|
INTEGER KEY, % ALGORITHM KEY 60894000
|
|
DESCPARA,% PARAMETER DESCRIPTION 60895000
|
|
NOPAR, % NUMBER OF PARAMETERS 60896000
|
|
TYPEA; % TYPE OF ALGORITHM 60897000
|
|
INTEGER ARRAY ACTUALP[1:2]; %HOLDS CLASS OF FORMAL PAR 60898000
|
|
BOOLEAN MISSINGACTUAL; % SET WHEN FEWER ACTUAL THAN 60899000
|
|
% FORMAL PARAMETERS 60899050
|
|
BOOLEAN NOTQUEUE %INDICATES NON Q 60899500
|
|
, TB %SCRATCH 60899600
|
|
, ISVALUE %INDICATES VALUE ITEMREFRNCE60899700
|
|
, BUZZF %INDICATES BUZZ ALGORITHM 60899800
|
|
; 60899900
|
|
DEFINE BUZF=BUZZF#; 60900000
|
|
BOOLEAN GTB1; %SCRATCH 60900500
|
|
INTEGER N; 60900550
|
|
LABEL ON,QUIT,ENDPAR,STAP,FINISH,FINI,EMITENTER,ANOTHER; 60901000
|
|
LABEL ISRTPARN,WHEREFROM,CONTINUE; 60901500
|
|
REAL ELCLAS; 60901520
|
|
LABEL RESIGN,LOCKL; 60901530
|
|
REAL GT4,GT5; 60901540
|
|
LABEL CONTINU ; 60901545
|
|
REAL GT1,GT2,GT3; 60901550
|
|
COMMENT FOLLOWING MUST BE REMOVED LATER; 60901551
|
|
FORMAT FMT4 (" ITEMINFO ", 10I9); 60901552
|
|
INTEGER DT1,DT2,DT3,DT4,TEMPNO; 60901553
|
|
DEFINE DEBUG = IF DONSBUG THEN#; 60901554
|
|
DEFINE 60901555
|
|
D4 = DEBUG WRITE(LINE[DBL],FMT4,TD.ADDRESS,TD.ALGNO,TD.TYPE,TD.PARADESC 60901556
|
|
,TEMPNO,DT1,DT2,DT3,DT4)#; 60901557
|
|
REAL TD; 60901558
|
|
MISSINGACTUAL~FALSE; 60902000
|
|
COMMENT*** NOTQUEUE~TB~ISVALUE~BUZZF~FALSE; %IMPLIED BY PREVIOUS STMNT 60902500
|
|
GT3~0; 60902600
|
|
IF PARINFO ! 0 THEN GT2~GIT(ADDLADRES); 60902800
|
|
IF PARINFO = 0 60903000
|
|
THEN 60904000
|
|
BEGIN COMMENT (MCS 2) EXPLICIT CALL; 60905000
|
|
KEY~(GT1~TAKE(ELBAT[I])).ALGNO; 60906000
|
|
IF STEPI ! LFTPRN THEN BEGIN FLAG(629);GO QUIT END; 60907000
|
|
GTB1~KEY}LOCKKEY AND KEY{UNLOCKKEY; 60907500
|
|
IF STEPI!QUEUEID AND ELCLASS!QUEUEARRAYID 60908000
|
|
THEN BEGIN COMMENT MCS2AA; 60908200
|
|
NOTQUEUE~TRUE ; 60908400
|
|
IF NOT GTB1 THEN GO RESIGN; 60908600
|
|
IF((ELCLAS~ELCLASS)}BOOID AND ELCLASS{PTRID60908700
|
|
)60908750
|
|
THEN IF(ISVALUE~(GT2~(GT5~TAKE(ELBAT[I])60908800
|
|
).TYPE)=FORMALVALUEQ) OR 60908801
|
|
GT2=FORMALNAMEQ 60908900
|
|
THEN BEGIN ITEMREFERENCE(FP); 60909000
|
|
GO TO LOCKL;END 60909030
|
|
ELSE BEGIN GT3~ELBAT[I].ADDRESS; 60909050
|
|
GO CONTINU ;END; 60909100
|
|
TEMPNO~5;DT1~ELCLASS;DT2~ELCLAS;D4; 60909200
|
|
IF(ISVALUE~((ELCLAS~(ELCLASS-INCR))}BOOID 60909300
|
|
AND ELCLAS{WORDID)) 60909400
|
|
THEN IF VARIABLE(FP)<XTYPE OR LASTINDEX 60909500
|
|
!L-1 60909600
|
|
THEN FLAG(630) 60909605
|
|
ELSE GO TO LOCKL; 60910000
|
|
TEMPNO~6;DT1~ELCLASS;DT2~ELCLAS;D4; 60910200
|
|
RESIGN: FLAG(630);GO QUIT; 60910400
|
|
END MCS 2AA LOCK ALGORITHM AND NOT QUEUE 60910600
|
|
60910800
|
|
ELSE 60911000
|
|
BEGIN COMMENT MCS 2AB; 60911400
|
|
N~TAKE(ELBAT[I]) .LINK; 60911600
|
|
GT2~GIT(ADDLADRES~IF ELCLASS=QUEUEID 60911800
|
|
THEN N ELSE N+1); 60912000
|
|
END MCS 2AB; 60912200
|
|
CONTINU : STEPIT; 60912400
|
|
IF NOTQUEUE THEN GO TO LOCKL; 60912600
|
|
COMMENT NON QUEUE LOCK,UNLOCK AND BUSY ARE ALSO HANDLED HERE; 60912800
|
|
COMMENT ADDLADRES NOW HOLDS ADDRESS OF FIRST RELEVANT QUEUE 60913000
|
|
ADDL ENTRY; 60914000
|
|
IF KEY=SIZEKEY 60914300
|
|
THEN 60914350
|
|
BEGIN COMMENT MCS 2A; 60914400
|
|
COMMENT MUST PUT ENTRY SIZE IN TOP OF STACK; 60914450
|
|
EMITNUM(GT2.SIZEF); 60914500
|
|
WHEREFROM: IF NOT FROM THEN 60914550
|
|
BEGIN FLAG(648);GO QUIT END; 60914600
|
|
ISRTPARN: IF ELCLASS!RTPARN THEN 60914650
|
|
BEGIN FLAG(634); GO QUIT END; 60914700
|
|
STEPIT; 60914705
|
|
GO FINI 60914750
|
|
END MCS 2A; 60914800
|
|
IF GTB1 60914850
|
|
THEN 60914900
|
|
BEGIN COMMENT MCS 2B; 60914950
|
|
COMMENT MUST FIND OUT IF QUEUE IS LOCKED; 60914955
|
|
IF (GT3~GT2.ADDRESS)=0 THEN 60915000
|
|
BEGIN FLAG(628); GO QUIT END; 60915050
|
|
COMMENT THERE WAS NO LOCK SPECIFICATION IN QDEC; 60915100
|
|
60915150
|
|
60915152
|
|
60915153
|
|
60915154
|
|
60915155
|
|
LOCKL: TB~GT3!0; 60915200
|
|
GTB1~(GT4~GT5.TYPE)!FORMALNAMEP 60915225
|
|
AND GT5!FORMALNAMEQ; 60915228
|
|
TB1~ELCLAS!WORDID; 60915230
|
|
IF KEY=BUSYKEY THEN 60915235
|
|
BEGIN COMMENT MCS PRB; 60915240
|
|
IF ISVALUE 60915245
|
|
THEN 60915250
|
|
ELSE 60915255
|
|
BEGIN 60915260
|
|
IF TB AND GTB1 AND TB1 60915270
|
|
THEN EMITV(GT3) 60915280
|
|
ELSE 60915290
|
|
BEGIN IF TB THEN EMITN(GT3);IF NOT TB OR NOT GTB1 THEN EMIT 60915300
|
|
(EVAL);EMIT(IF TB1 THEN LOAD ELSE LODT) END; 60915305
|
|
END; 60915312
|
|
GO WHEREFROM ; 60915313
|
|
END MCS 2BB; 60915315
|
|
TEMPNO~10;DT1~KEY;DT2~REAL(TB);DT3~REAL(GTB1);DT4~REAL(TB1);D4; 60915318
|
|
IF TB 60915320
|
|
THEN BEGIN EMITN(GT3);IF NOT GTB1 THEN 60915325
|
|
EMIT(EVAL) END 60915330
|
|
ELSE 60915335
|
|
IF NOT ISVALUE 60915340
|
|
THEN EMIT(EVAL) 60915343
|
|
ELSE IF TB1 60915346
|
|
THEN INDXCHK ELSE L~L-1; 60915350
|
|
IF(BUZF~(KEY=BUZZKEY OR KEY=CONTROLBUZZKEY)) 60915352
|
|
THEN BEGIN GT2~L;EMIT(DUPL) END; 60915354
|
|
60915400
|
|
EMITNUM(IF KEY=UNLOCKKEY THEN 0 ELSE 1); 60915450
|
|
IF BUZF EQV FROM 60915480
|
|
THEN IF BUZF 60915500
|
|
THEN FLAG(669) 60915520
|
|
ELSE EMIT(IF ELCLASS=DPID THEN 60915540
|
|
OVRD ELSE STOD) 60915550
|
|
60915555
|
|
ELSE BEGIN 60915570
|
|
IF KEY =BUZZKEY 60915572
|
|
THEN BEGIN 60915574
|
|
EMIT(EEXI);EMIT(DEXI );60915576
|
|
END; 60915578
|
|
EMIT(RDLK); 60915580
|
|
END; 60915590
|
|
IF KEY=UNLOCKKEY AND FROM THEN EMIT(LNOT);60915600
|
|
IF BUZF THEN 60915620
|
|
BEGIN 60915640
|
|
60915650
|
|
60915660
|
|
EMITB(BRTR,BUMPL,GT2); 60915670
|
|
EMIT(DLET); 60915675
|
|
END; 60915680
|
|
GO ISRTPARN; 60915700
|
|
END MCS 2B; 60915750
|
|
DESCPARA ~ GT1.PARADESC; 60916000
|
|
END MCS 2 EXPLICIT CALLS 60916500
|
|
ELSE IF PARINFO=1 THEN BEGIN DESCPARA~0;KEY~ALLOCATEKEY END 60917000
|
|
ELSE 60918000
|
|
BEGIN COMMENT (MCS 3) IMPLICIT INSERT; 60919000
|
|
KEY ~ INSERTKEY; 60920000
|
|
DESCPARA~IF PARINFO=2 THEN 1 ELSE 4 60921000
|
|
END MCS 3 ; 60922000
|
|
COMMENT KEY HAS BEEN OBTAINED FROM ELBATWORD FOR EXPLICIT CALL AND 60923000
|
|
HAS BEEN SET TO ALLOCATEKEY FOR IMPLICIT CALL ON ALLOCATE AND60924000
|
|
TO INSERTKEY FOR IMPLICIT CALL ON INSERT 60925000
|
|
DESCPARA CONTAINS INFORMATION ON THE KIND AND DISPOSITION 60926000
|
|
OF ACTUAL PARAMETERS; 60927000
|
|
EMIT(MKST); 60928000
|
|
GT1~ADDLADRES+GT2.ITMNOF+1; 60929000
|
|
TEMPNO~1;TD~GIT(GT1);DT1~KEY;DT2~GT1;D4; 60929500
|
|
GT2 ~ GT2.ALGNOF + GT1-1; 60930000
|
|
COMMENT GT1 NOW POINTS TO FIRST AND GT2 TO LAST Q ALG0RITHM ADDL 60931000
|
|
ENTRY; 60932000
|
|
FOR N~GT1 STEP 1 UNTIL GT2 DO 60933000
|
|
IF (GT3 ~ GIT(N)).ALGNO = KEY THEN GO ON; 60934000
|
|
COMMENT ERROR - NO MATCH; 60935000
|
|
FLAG (628); GO QUIT; 60936000
|
|
ON: EMITN (GT3.ADDRESS); 60937000
|
|
TYPEA ~ GT3.TYPE; 60938000
|
|
IF TYPEA=PROCD AND FROM THEN BEGIN FLAG(649);GO QUIT END; 60938500
|
|
COMMENT AN UNTYPED QALGORITHM MAY NOT BE USED AS A PRIMARY; 60938550
|
|
COMMENT GT3.ADDRESS HOLDS ADDRESS OF PCW, GT3.TYPE HOLD ALGORITHM 60939000
|
|
TYPE; 60940000
|
|
NOPAR~ 2; 60941000
|
|
ACTUALP[1]~ RTYPE; ACTUALP[2]~ITYPE; 60942000
|
|
IF DESCPARA<2 60943000
|
|
THEN NOPAR~ DESCPARA 60944000
|
|
ELSE IF DESCPARA=2 60945000
|
|
THEN BEGIN NOPAR~1; ACTUALP[1]~ITYPE END 60946000
|
|
ELSE IF DESCPARA=4 60947000
|
|
THEN BEGIN ACTUALP[1]~ITYPE; ACTUALP[2]~RTYPE END; 60948000
|
|
COMMENT ***CHECK THIS CODE LATER - WOULD SWITCH BE BETTER; 60949000
|
|
60950000
|
|
60951000
|
|
60952000
|
|
N~-1; 60953000
|
|
COMMENT AT THIS POINT, I POINTS TO A LFTBRKT OR AN ASSNOP FOR 60954000
|
|
AN IMPLIED INSERT CALL AND TO A COMMA OR A RTPRN FOR 60955000
|
|
AN EXPLICIT CALL; 60956000
|
|
ANOTHER: IF(N~N+1)=NOPAR THEN GO FINISH; 60957000
|
|
IF PARINFO=0 60957500
|
|
THEN 60958000
|
|
BEGIN COMMENT MCS 4; 60958500
|
|
IF ELCLASS = COMMA AND (N=0 OR N=1) 60959000
|
|
THEN GO CONTINUE ; 60959050
|
|
IF ELCLASS=RTPARN THEN BEGIN 60960000
|
|
MISSINGACTUAL~TRUE;GO CONTINUE END 60960050
|
|
END MCS 4; 60961000
|
|
IF PARINFO=3 60961500
|
|
THEN 60962000
|
|
BEGIN COMMENT MCS 4A; 60962500
|
|
IF ELCLASS=LFTBRKT AND N =0 THEN GO 60963000
|
|
CONTINUE; 60963050
|
|
IF ELCLASS=RTBRKT AND N =1 AND TABLE 60964000
|
|
(I+1)=ASSNOP THEN 60964040
|
|
BEGIN STEPIT;GO CONTINUE END; 60964080
|
|
END MCS 4A; 60964081
|
|
IF PARINFO=2 AND ELCLASS=ASSNOP AND N =0 THEN 60965000
|
|
GO CONTINUE; 60965030
|
|
COMMENT *** ABOVE SWAG OF CODE IS MESSY,MAYBE IT CAN BE 60965050
|
|
REPLACED LATER; 60965080
|
|
FLAG(634);GO QUIT; 60966000
|
|
COMMENT SOMETHING IS WRONG. NOMINALLY AN ILLEGAL PARAMETR60967000
|
|
DELIMETER; 60967500
|
|
CONTINUE: IF NOT MISSINGACTUAL THEN STEPIT; 60968000
|
|
IF(GT1~ACTUALP[N+1]) = RTYPE 60969000
|
|
THEN IF MISSINGACTUAL 60970000
|
|
THEN 60971000
|
|
BEGIN COMMENT(MCS 5); 60972000
|
|
COMMENT THE ALGORITHM CALLS FOR A REFERENCE PARAMETER.60973000
|
|
THERE IS NO CORRESPONDING ACTUAL PARAMETER. 60974000
|
|
THIS IS NOT AN ERROR HOWEVER WE PASS ZERO 60975000
|
|
WHICH WILL CAUSE A RUN-TIME ERROR IF 60976000
|
|
REFERENCED AS A DESCRIPTOR; 60977000
|
|
EMIT(ZERO); 60978000
|
|
60979000
|
|
60980000
|
|
GO TO ANOTHER; 60981000
|
|
END MCS 5 MISSING ACTUAL REFERENCE PARAMTER 60982000
|
|
ELSE 60983000
|
|
BEGIN COMMENT (MCS 6); 60984000
|
|
COMMENT NON DUMMY REFERENCE PARAMETER; 60985000
|
|
EXPRESSION(RTYPE); 60986000
|
|
STAP: 60987000
|
|
GO TO ANOTHER 60988000
|
|
END MCS 6 NON DUMMY REFERENCE 60989000
|
|
ELSE IF MISSINGACTUAL 60990000
|
|
THEN 60991000
|
|
BEGIN COMMENT (MCS 9); 60992000
|
|
COMMENT DUMMY ITYPE PARAMETER. PASS CONTROL WORD; 60993000
|
|
EMIT(ZERO); 60994000
|
|
EMITNUM(7); 60995000
|
|
60996000
|
|
EMIT(STAG); 60997000
|
|
GO TO ANOTHER 60998000
|
|
COMMENT ***; 60999000
|
|
END MCS 9 DUMMY ITYPE 61000000
|
|
ELSE 61001000
|
|
BEGIN COMMENT (MCS 10); 61002000
|
|
COMMENT NON DUMMY ITYPE PARAMETER; 61003000
|
|
EXPRESSION(ITYPE); 61004000
|
|
GO TO ANOTHER; 61005000
|
|
END MCS 10 NON DUMMMY ITYPE PARAMETER; 61006000
|
|
FINISH: 61007000
|
|
COMMENT AT THIS POINT HAVE PASSED ALL PARAMETERS. I SITTING ON 61008000
|
|
RTPARN(EXPLICIT CALL) OR ON LFTPARN (IMPLICIT ALLOCATE)61009000
|
|
OR ON SOMETHING ELSE (IMPLICIT INSERT).HOWEVER NEED 61010000
|
|
CHECK ONLY ON EXPLICIT CALL; 61010050
|
|
IF PARINFO = 0 61011000
|
|
THEN IF ELCLASS=RTPARN 61012000
|
|
THEN STEPIT 61013000
|
|
ELSE GO QUIT 61014000
|
|
ELSE; 61015000
|
|
EMITENTER: IF PARINFO =3 THEN EMIT (EXCH); 61016000
|
|
COMMENT:*** AN IMPLICIT CALL ON INSERT OF THE FORM: 61017000
|
|
<QUEUE ARRAY IDENTIFIER>[<INDEX>]~<REFERENCE EXPRSSION>61018000
|
|
REVERSES THE ORDER OF PARAMETERS REQUIRED BY INSERT 61019000
|
|
HENCE WE MUST EXCHANGE THE TWO ACTUAL PARAMETERS; 61020000
|
|
EMIT (ENTR); 61021000
|
|
IF TYPEA ! PROCD AND NOT FROM THEN EMIT(DLET); 61022000
|
|
COMMENT WHEN CALL IS FROM STATEMENT AND WE HAVE A TYPED 61023000
|
|
ALGORITHM THEN WE MUST DELETE RESULT; 61024000
|
|
GO FINI; 61025000
|
|
QUIT: FLAG(635); 61025200
|
|
ERRORTOG~TRUE; 61025400
|
|
FINI: END MCS 1 QALGORITHM; 61025600
|
|
PROCEDURE EVENTINTRINSIC; 61026000
|
|
COMMENT THE ELBAT WORD OF THE EVENT INTRINSIC HAS A KEY IN FIELD "KIND"61026005
|
|
WHICH IDENIFIES THE PARTICULAR INTRINSIC. THIS PROCEDURE 61026010
|
|
FIRST CHECKS THE PARAMETER(S), THEN TAKES THE FOLLOWING ACTION:61026015
|
|
CAUSE ONE PARAMETER ONLY. EMITS CODE TO ENTER THE MCP 61026020
|
|
WAIT PROCEDURE "EVENTHANDLER", PASSING AS PARAMETERS 61026025
|
|
THE KEY(BY VALUE) AND THE EVENT (BY NAME) 61026030
|
|
61026035
|
|
61026040
|
|
SET TURNS ON (SET) OR OFF THE HAPPENED BIT IN THE 61026045
|
|
RESET EVENT REFERENCED BY EACH PARAMETER 61026050
|
|
61026055
|
|
61026060
|
|
FIX TURNS ON (FIX) OR OFF THE AVAILABLE BIT IN THE 61026065
|
|
FREE EVENT REFERENCED BY EACH PARAMETER 61026070
|
|
61026075
|
|
61026080
|
|
ENABLE TURNS ON MCP SOFTWARE INTERRUPT LOCK (IN KNOWN 61026085
|
|
DISABLE LOCATION IN MCP STACK) THUS PREVENTING MCP 61026090
|
|
ACCESS TO EVENT INTERRUPT QUEUE. TURNS ON 61026095
|
|
(ENABLE) OR OFF THE ENABLE BIT IN THE INTERRUPT 61026100
|
|
REFERENCED BY EACH PARAMETER. TURNS OFF MCP 61026105
|
|
SOFTWARE INTERRUPT LOCK 61026110
|
|
NOTE THE PARAMETER(S) TO ENABLE AND DISABLE ARE 61026115
|
|
INTERRUPTS RATHER THAN EVENTS, HOWEVER IT IS 61026120
|
|
CONVENIENT TO HANDLE THEM HERE 61026125
|
|
61026130
|
|
61026135
|
|
HAPPENED CAN HAVE ONLY ONE PARAMETER. RETURNS VALUE OF 61026140
|
|
AVAILABLE HAPPENED OR AVAILABLE BIT FOR THE EVENT REFER- 61026145
|
|
ENCED BY THE PARAMETER.EQUIVALENT TO BOOLEAN 61026150
|
|
PROCEDURE 61026155
|
|
61026157
|
|
61026159
|
|
SECONDWORD LEAVES SECOND WORD OF EVENT OR DOUBLE ON TOS 61026161
|
|
PRESUMES EVENT HAS BEEN LOCKED PREVIOUSLY 61026163
|
|
61026170
|
|
61026172
|
|
STOREITEM NOT REALLY AN EVENT INTRINSIC BUT CONVENIENT TO 61026174
|
|
HANDLE IT HERE.CALLS ACTUALPARAPART WHICH TREATS61026176
|
|
FIRST PARAMETER(WHICH MUST BE AN ITEM REFERENCE 61026178
|
|
) AS FORMAL AND SECOND AS ACTUAL PARAMETER 61026180
|
|
61026197
|
|
61026198
|
|
61026199
|
|
; 61026200
|
|
BEGIN 61026300
|
|
INTEGER KEY % TELLS WHICH INTRINSIC 61026400
|
|
; 61026500
|
|
LABEL RESIGN 61026600
|
|
, FINI 61026630
|
|
, CHECK 61026640
|
|
; 61026650
|
|
BOOLEAN TB1 61026700
|
|
; 61026800
|
|
61027000
|
|
REAL GT1 61027100
|
|
, GT2 61027150
|
|
; 61027200
|
|
DEFINE SOFTWAREINTERRUPTLOCK = 17# %FIXED MCP LOCATION 61027300
|
|
, ISOLATEHAPPEN = 1,1# %ISOLATE FOR HAPPEN BIT61027310
|
|
, EMITI(EMITI1) =EMIT2P(ISOL,EMITI1)#%FAKE OUT BILL 61027315
|
|
, ENABLEP = 46# % ENABLE BIT POSITION 61027320
|
|
, AVAILABLEP = 2# %AVAILABLE BIT POSITION61027330
|
|
, HAPPENEDP = 1# %HAPPENED BIT POSITION 61027340
|
|
, LOCKBITP = 0 # 61027345
|
|
, ISOLATEAVAILABLE= 2,1# %ISOLATE AVAILABLE BIT 61027360
|
|
, EVENTHANDLER = 15# %FIXED MCP LOCATION 61027380
|
|
, INDXNLOADCHK=BEGIN IF GET(L-1)=LOAD THEN 61027382
|
|
L~L-1 ELSE INDXCHK END# 61027384
|
|
; 61027400
|
|
TB1 ~ ELBAT[I] < 0; ELBAT[I] ~ ABS(ELBAT[I]); 61027410
|
|
KEY~TAKE(ELBAT[I]).KIND; 61027500
|
|
IF STEPI!LFTPARN THEN GO RESIGN ; 61027600
|
|
CASE KEY DIV 10 OF 61027700
|
|
BEGIN COMMENT MCS 1; 61027800
|
|
61027820
|
|
61027840
|
|
BEGIN COMMENT CAUSE AND WAIT; 61027900
|
|
EMIT (MKST); 61028000
|
|
EMITN(EVENTHANDLER); 61028100
|
|
IF STEPI=ANEVENT 61028200
|
|
THEN BEGIN EMITN((GT1:=ELBAT[I]).ADDRESS); 61028300
|
|
IF GT1.TYPE = FORMALNAMEP THEN 61028310
|
|
EMIT(EVAL) ELSE EMIT(STFF); STEPIT; 61028320
|
|
END 61028330
|
|
ELSE IF VARIABLE(FP) =EVTYPE THEN INDXNLOADCHK 61028400
|
|
ELSE FLAG(670); 61028450
|
|
EMITBUZEVENT; 61028452
|
|
COMMENT IN TOS AT THIS POINT-POINTER TO EVENT (IRW OR INDEXED DD),61028454
|
|
FIRST WORD OF EVENT (WITH DOUBLE TAG); 61028456
|
|
EMITNUM(KEY); 61028500
|
|
EMIT(ENTR); 61028550
|
|
END ; % CAUSE,WAIT 61028600
|
|
61028700
|
|
61028750
|
|
DO 61028800
|
|
BEGIN COMMENT SET AND RESET 61028900
|
|
FIX AND FREE ;61029000
|
|
IF STEPI=ANEVENT 61029100
|
|
THEN BEGIN EMITN((GT1:=ELBAT[I]).ADDRESS); 61029200
|
|
IF GT1.TYPE = FORMALNAMEP THEN 61029210
|
|
EMIT(EVAL); STEPIT; 61029220
|
|
END 61029230
|
|
ELSE IF ELCLASS=EVENTID OR ELCLASS=EVENTARRAYID THEN 61029400
|
|
IF VARIABLE(FP)=EVTYPE THEN INDXNLOADCHK 61029500
|
|
ELSE FLAG(670) 61029505
|
|
ELSE IF KEY=SETKEY OR KEY=RESETKEY THEN 61029510
|
|
BEGIN 61029520
|
|
EXPRESSION(ATYPE); 61029525
|
|
IF ELCLASS!COMMA THEN FLAG(670); 61029530
|
|
STEPIT; 61029532
|
|
IF ELCLASS = NUMBER AND NOT DPTOG THEN 61029534
|
|
IF TABLE(I+1)=RTPARN 61029535
|
|
THEN 61029536
|
|
BEGIN 61029538
|
|
EMIT1P(IF KEY=SETKEY THEN BSET 61029540
|
|
ELSE BRST, THI DIV 1); 61029542
|
|
STEPIT; 61029544
|
|
IF NOT TB1 THEN EMIT(DLET); 61029546
|
|
GO CHECK; 61029548
|
|
END; 61029550
|
|
GT1 ~ AEXP; 61029552
|
|
EMIT(IF KEY=SETKEY THEN DBST ELSE DBRS); 61029554
|
|
IF TB1 THEN ELSE EMIT(DLET); 61029555
|
|
GO TO CHECK; 61029560
|
|
END 61029570
|
|
ELSE FLAG(670); 61029600
|
|
COMMENT AT THIS POINT WE HAVE TO EMIT CODE FOR BUZZING EVENT; 61029610
|
|
EMITBUZEVENT; 61029620
|
|
COMMENT IN TOS AT THIS POINT-POINTER TO EVENT(IRW OR INDEXED DD), 61029640
|
|
FIRST WORD OF EVENT(WITH DOUBLE TAG); 61029660
|
|
L ~ L - 3; % COVER THE ZERO STAG 61029700
|
|
FIGS ~ TRUE; 61029710
|
|
EMIT1P(BRSET,LOCKBITP); 61029800
|
|
FIGS ~ FALSE; 61029810
|
|
IF KEY=FIXKEY AND FIXCALL THEN 61029820
|
|
BEGIN EMIT(DUPL); EMIT2P(ISOL,AVAILABLEP,1);EMIT(RSDN); END; 61029840
|
|
EMIT1P(IF KEY = SETKEY OR KEY=FIXKEY THEN BSET ELSE BRSET,61029850
|
|
IF KEY =FIXKEY OR KEY =FREEKEY THEN AVAILABLEP ELSE 61029900
|
|
HAPPENEDP); 61029950
|
|
EMIT(OVRD); 61030000
|
|
END UNTIL ELCLASS!COMMA; % FINISH SET,RESET 61030300
|
|
% FIX,FREE 61030400
|
|
61030430
|
|
61030460
|
|
BEGIN COMMENT ENABLE AND DISABLE; 61030500
|
|
EMIT(ONE); 61030600
|
|
EMITN(SOFTWAREINTERRUPTLOCK); 61030700
|
|
EMIT(STOD); 61030800
|
|
COMMENT *** MAYBE WE NEED A READ WITH LOCK. I HOPE THIS LOCKP OUT 61030900
|
|
ALL INTERRUPT BASHERS EXCEPT THOSE WHO ONLY WANT TO TURN 61031000
|
|
THE LOCK; 61031100
|
|
DO 61031200
|
|
BEGIN COMMENT MCS 2; 61031300
|
|
IF STEPI!INTERRUPTID THEN FLAG(671); 61031400
|
|
EMITN(GT1~ELBAT[I].ADDRESS); 61031500
|
|
EMIT(LODT); 61031600
|
|
EMIT1P(IF KEY =ENABLEKEY THEN BSET ELSE BRSET 61031700
|
|
,ENABLEP); 61031800
|
|
EMITN(GT1); 61031900
|
|
EMIT(OVRD); 61032000
|
|
STEPIT 61032100
|
|
END UNTIL ELCLASS!COMMA; 61032200
|
|
EMIT(ZERO); 61032300
|
|
EMITN(SOFTWAREINTERRUPTLOCK); 61032400
|
|
EMIT(STOD); 61032500
|
|
END; % ENABLE, 61032600
|
|
% DISABLE 61032700
|
|
61032800
|
|
61032900
|
|
BEGIN COMMENT HAPPENED,AVAILABLE; 61033000
|
|
STEPIT; 61033100
|
|
IF VARIABLE(FP)!EVTYPE THEN FLAG(670); 61033200
|
|
IF KEY =HAPPENEDKEY THEN EMITI(ISOLATEHAPPEN) 61033300
|
|
ELSE EMITI(ISOLATEAVAILABLE); 61033350
|
|
61033380
|
|
END; % HAPPENED,AVAILABLE; 61033400
|
|
61033430
|
|
61033460
|
|
61033462
|
|
61033464
|
|
BEGIN COMMENT SECONDWORD; 61033466
|
|
STEPIT; 61033467
|
|
IF GT1~VARIABLE(FP)!EVTYPE AND GT1!ETYPE THEN FLAG(680); 61033468
|
|
EMIT(SPLT ); 61033470
|
|
EMIT(EXCH);EMIT(DLET); 61033480
|
|
COMMENT THE SECOND WORD WITH SP TAG IS NOW IN TOS; 61033482
|
|
END; % SECONDHALF 61033490
|
|
61033492
|
|
61033494
|
|
61033500
|
|
BEGIN COMMENT STOREITEM; 61033503
|
|
STEPIT; 61033506
|
|
GT1~ TAKE(ELBAT[I]); 61033507
|
|
ITEMREFERENCE(FP); INDXNLOADCHK; 61033511
|
|
ACTUALPARAPART ( 61033513
|
|
FALSE , 61033516
|
|
61033519
|
|
- ((GT2 ~ TAKE ( 61033522
|
|
IF(GT3~GT1.CLASS)>EVENTARRAYID 61033525
|
|
OR GT3<BOOARRAYID 61033528
|
|
THEN GT1.LINK 61033531
|
|
ELSE GIT(GT1.LINK).QLINK 61033534
|
|
) ).LINK + 61033537
|
|
GT1.ITMQAINDXF+ 61033540
|
|
(IF GT2.CLASS=QUEUEID THEN 0 61033543
|
|
ELSE 1) 61033546
|
|
) , 61033549
|
|
1 , 61033552
|
|
FALSE ); 61033555
|
|
GO FINI; 61033558
|
|
END; % STOREITEM 61033561
|
|
61033564
|
|
61033567
|
|
61033570
|
|
END MCS1 CASE STATEMENT; 61033580
|
|
CHECK: 61033590
|
|
IF ELCLASS=RTPARN 61033600
|
|
THEN STEPIT 61033700
|
|
ELSE 61033800
|
|
BEGIN COMMENT MCS 3; 61033900
|
|
RESIGN: FLAG(672); 61034000
|
|
ERRORTOG~TRUE; 61034100
|
|
DO UNTIL STEPI=SEMICOLON 61034200
|
|
END MCS 3; 61034300
|
|
FINI: 61034350
|
|
END EVENTINTRINSIC; 61034400
|
|
PROCEDURE SCANSTMT; 61035000
|
|
BEGIN 61036000
|
|
REAL NEWSP,NEWCT,T,OP; 61037000
|
|
LABEL ENTERA,ENTERB,ENTERC,EXIT; 61038000
|
|
BOOLEAN WHILETOG; 61039000
|
|
STEPIT; 61040000
|
|
IF TABLE (I+1) = COLON THEN 61041000
|
|
BEGIN 61042000
|
|
IF ELCLASS ! PTRID THEN FLAG(643) ELSE 61043000
|
|
NEWSP ~ ELBAT[I]; 61044000
|
|
STEPIT; STEPIT; 61045000
|
|
END; 61046000
|
|
GT1 ~ PEXP(FALSE); 61047000
|
|
IF ELCLASS ! FORV THEN GO TO ENTERA; 61048000
|
|
STEPIT; 61049000
|
|
IF TABLE (I+1) = COLON THEN 61050000
|
|
BEGIN 61051000
|
|
IF ELCLASS ! REALID AND ELCLASS!INTID AND ELCLASS!WORDID 61052000
|
|
THEN 61052500
|
|
FLAG(644) ELSE NEWCT ~ ELBAT[I]; 61053000
|
|
STEPIT; STEPIT; 61054000
|
|
END; 61055000
|
|
GT1 ~ AEXP; 61056000
|
|
ENTERA: IF ELCLASS ! WHILEV AND ELCLASS ! UNTILV THEN 61057000
|
|
BEGIN 61058000
|
|
ERR(145); GO TO EXIT; 61059000
|
|
END; 61060000
|
|
WHILETOG ~ ELCLASS = WHILEV; 61061000
|
|
IF STEPI ! RELOP THEN GO TO ENTERC; 61062000
|
|
OP ~ ELBAT[I].DISP - LESS + SLSD; 61063000
|
|
STEPIT; 61064000
|
|
GT1 ~ AEXP; 61065000
|
|
IF NOT WHILETOG THEN 61066000
|
|
IF BOOLEAN(OP) THEN 61067000
|
|
OP ~ OP -1 ELSE OP ~ OP + 1; 61068000
|
|
ENTERB: IF NEWSP ! 0 OR NEWCT ! 0 THEN 61069000
|
|
BEGIN 61069100
|
|
EMIT(OP+8); 61070000
|
|
IF NEWCT ! 0 THEN 61071000
|
|
BEGIN 61072000
|
|
EMITN(NEWCT.ADDRESS); 61073000
|
|
EMIT(STOD); 61074000
|
|
END ELSE EMIT(DLET); 61075000
|
|
IF NEWSP ! 0 THEN 61076000
|
|
BEGIN 61077000
|
|
EMITN(NEWSP.ADDRESS); 61078000
|
|
EMIT(OVRD); 61079000
|
|
END ELSE EMIT(DLET); 61080000
|
|
END ELSE EMIT(OP); 61080100
|
|
GO TO EXIT; 61081000
|
|
ENTERC: IF ELCLASS ! INV THEN BEGIN ERR(646); GO TO EXIT; END; 61082000
|
|
MAKEARRAYROW; 61083000
|
|
IF WHILETOG THEN OP ~ SWTD ELSE OP ~ SWFD; 61086000
|
|
GO TO ENTERB; 61087000
|
|
EXIT: 61088000
|
|
END SCANSTMT; 61089000
|
|
PROCEDURE REPLACESTMT; 61100000
|
|
BEGIN 61101000
|
|
LABEL SOURCEPART, CONDITION, EMITOP, PTRFORCOUNT; 61102000
|
|
LABEL CONTINUE, DODP, DOSP; 61103000
|
|
LABEL DOIT; 61103100
|
|
DEFINE FML = [31:1]#; 61104000
|
|
LABEL STRINGSORCE, AEXPSOURCE, UNITS, EXIT; 61105000
|
|
REAL NEWDP,NEWSP,NEWCT,OP,TYPE; 61106000
|
|
BOOLEAN UPDATETOG,WHILETOG, COMMAFLAG, OVERITOG; 61107000
|
|
BOOLEAN ERROR573; %TRUE FOR UPDATE ON ARITHMETIC SOURCE 61107500
|
|
IF TABLE(I+2) = COLON THEN 61108000
|
|
BEGIN 61109000
|
|
IF STEPI ! PTRID THEN ERROR(636); 61110000
|
|
NEWDP ~ ELBAT[I]; 61111000
|
|
STEPIT; 61112000
|
|
END; 61113000
|
|
STEPIT; GT1 ~ PEXP(FALSE); 61114000
|
|
IF ELCLASS ! BYV THEN ERROR(637); 61115000
|
|
SOURCEPART: 61116000
|
|
IF STEPI = STRING OR ELCLASS = STRNGCON THEN GO TO STRINGSORCE;61117000
|
|
IF TABLE(I+1) = COLON THEN 61118000
|
|
BEGIN 61119000
|
|
IF ELCLASS!PTRID THEN 61120000
|
|
BEGIN 61120100
|
|
ERROR573~TRUE; %RESET IF WE FIND "DIGITS" LATER. 61120200
|
|
NEWSP~ELBAT[I]; 61120300
|
|
STEPIT; STEPIT; 61120400
|
|
TYPE~EXPRSS; 61120500
|
|
GO TO AEXPSOURCE; 61120600
|
|
END; 61120700
|
|
NEWSP ~ ELBAT[I]; 61121000
|
|
STEPIT; STEPIT; GT1 ~ PEXP(FALSE); 61122000
|
|
END ELSE 61123000
|
|
IF(TYPE ~ EXPRSS) ! PTYPE THEN GO TO AEXPSOURCE; 61124000
|
|
IF ELCLASS = FORV THEN 61125000
|
|
BEGIN 61126000
|
|
IF TABLE(I+2) ! COLON THEN GO TO PTRFORCOUNT; 61127000
|
|
IF STEPI ! INTID AND ELCLASS ! REALID THEN ERROR(638); 61128000
|
|
NEWCT ~ ELBAT[I]; 61129000
|
|
STEPIT; STEPIT; TYPE ~ AEXP; 61130000
|
|
END ELSE 61131000
|
|
IF ELCLASS = WITHV THEN 61132000
|
|
BEGIN 61133000
|
|
IF STEPI ! PCID THEN ERROR(655); 61134000
|
|
IF BOOLEAN(ELBAT[I].FML) THEN 61135000
|
|
BEGIN COMMENT FOR FORMAL PICTURE WE DO A SORT OF 61136000
|
|
PROCEDURE ENTRY; 61137000
|
|
EMIT(IMKS); EMITPAIR(ELBAT[I].ADDRESS,RSDN); 61138000
|
|
IF NEWSP = 0 THEN EMIT(ZERO) ELSE 61139000
|
|
EMITPAIR(NEWSP.ADDRESS,STFF); 61140000
|
|
OP ~ 0; COMMENT OP WILL COUNT EXPRESSIONS; 61141000
|
|
IF STEPI = LFTPRN THEN 61142000
|
|
BEGIN 61143000
|
|
DO BEGIN 61144000
|
|
STEPIT; OP ~ OP + 1; EXPRESSION(ITYPE); 61145000
|
|
END UNTIL ELCLASS ! COMMA; 61146000
|
|
IF ELCLASS ! RTPARN THEN FLAG(923) ELSE STEPIT; 61147000
|
|
END; 61148000
|
|
IF NEWSP ! 0 THEN 61149000
|
|
BEGIN EMIT(ZERO); EMITPAIR(NEWSP .ADDRESS,OVRD) END; 61150000
|
|
EMITNUM(OP); EMIT(ENTR); 61151000
|
|
IF ELCLASS = COMMA THEN GO CONTINUE; 61152000
|
|
GO TO DODP; 61153000
|
|
END FORMAL PICTURE; 61154000
|
|
OP ~ PICTUREGEN(TRUE,NEWSP~NEWDP!0,TAKE(ELBAT[I]).LINK); 61155000
|
|
COMMAFLAG~ ELCLASS=COMMA; 61156000
|
|
IF BOOLEAN(OP) THEN GO DOSP ELSE GO EXIT; 61157000
|
|
END; 61158000
|
|
IF ELCLASS ! WHILEV AND ELCLASS ! UNTILV THEN ERROR(639); 61159000
|
|
CONDITION: 61160000
|
|
WHILETOG ~ ELCLASS = WHILEV; 61161000
|
|
IF STEPI = RELOP THEN 61162000
|
|
BEGIN 61163000
|
|
OP ~ ELBAT[I].DISP - LESS + TLSD; 61164000
|
|
STEPIT; TYPE ~ AEXP; 61165000
|
|
IF NOT WHILETOG THEN 61166000
|
|
IF BOOLEAN(OP) THEN 61167000
|
|
OP ~OP-1 ELSE OP ~ OP+1; 61168000
|
|
END ELSE 61169000
|
|
BEGIN 61170000
|
|
IF ELCLASS ! INV THEN ERROR(640); 61171000
|
|
MAKEARRAYROW; 61172000
|
|
IF WHILETOG THEN OP ~ TWTD ELSE OP ~ TWFD; 61175000
|
|
END; 61176000
|
|
EMITOP: 61177000
|
|
COMMAFLAG ~ ELCLASS = COMMA; 61178000
|
|
IF NEWSP>0 OR NEWDP>0 OR NEWCT>0 OR COMMAFLAG THEN 61179000
|
|
BEGIN OP ~ OP + 8; UPDATETOG ~ TRUE; END; 61180000
|
|
EMIT(OP); 61181000
|
|
IF NOT UPDATETOG THEN GO TO EXIT; 61182000
|
|
IF NEWCT ! -1 THEN 61183000
|
|
IF NEWCT = 0 THEN EMIT(DLET) ELSE 61184000
|
|
EMITPAIR(NEWCT.ADDRESS, STOD); 61185000
|
|
DOSP: 61186000
|
|
IF NEWSP}0 THEN 61186500
|
|
IF NEWSP = 0 THEN EMIT(DLET) ELSE 61187000
|
|
EMITPAIR(NEWSP.ADDRESS, OVRD); 61188000
|
|
IF COMMAFLAG THEN 61189000
|
|
CONTINUE: 61190000
|
|
BEGIN 61191000
|
|
NEWCT ~ NEWSP ~ 0; 61192000
|
|
COMMAFLAG ~ UPDATETOG ~ FALSE; 61193000
|
|
GO TO SOURCEPART; 61194000
|
|
END; 61195000
|
|
DODP: 61196000
|
|
IF NEWDP = 0 THEN EMIT(DLET) ELSE 61197000
|
|
EMITPAIR(NEWDP.ADDRESS, OVRD); 61198000
|
|
GO TO EXIT; 61199000
|
|
PTRFORCOUNT: 61200000
|
|
STEPIT; TYPE ~ AEXP; 61201000
|
|
IF ELCLASS=WORDV OR OVERITOG~ELCLASS=OVERITE THEN 61202000
|
|
BEGIN 61203000
|
|
STEPIT; 61204000
|
|
OP ~ TWSD + REAL(OVERITOG); NEWCT ~ -1; 61205000
|
|
GO TO EMITOP; 61206000
|
|
END; 61207000
|
|
DOIT: 61207100
|
|
IF ELCLASS = WHILEV OR ELCLASS = UNTILV THEN GO TO CONDITION; 61208000
|
|
IF ELCLASS = WITHV THEN 61209000
|
|
BEGIN 61210000
|
|
MAKEARRAYROW; 61211000
|
|
IF NEWSP < 0 THEN NEWSP ~ 0; IF NEWDP < 0 THEN NEWDP ~ 0;61212000
|
|
OP ~ TRNS - 8|REAL(NEWSP~NEWDP!0 OR ELCLASS=COMMA); 61224000
|
|
UPDATETOG ~ TRUE; NEWCT ~ -1; 61225000
|
|
GO EMITOP; 61226000
|
|
END; 61227000
|
|
OP ~ TUND; 61228000
|
|
GO TO EMITOP; 61229000
|
|
STRINGSORCE: 61230000
|
|
STRINGSOURCE; 61231000
|
|
TYPE ~ COUNT; STEPIT; 61232000
|
|
IF ELCLASS ! FORV THEN 61233000
|
|
BEGIN 61234000
|
|
EMITNUM(TYPE); 61235000
|
|
OP ~ TUND; 61236000
|
|
GO TO EMITOP; 61237000
|
|
END; 61238000
|
|
STEPIT; TYPE ~ AEXP; 61239000
|
|
GO TO UNITS; 61240000
|
|
AEXPSOURCE: 61241000
|
|
IF TYPE!ATYPE AND TYPE!ITYPE AND TYPE!ETYPE AND TYPE!WTYPE THEN61242000
|
|
FLAG(638); 61243000
|
|
IF ELCLASS ! FORV THEN 61244000
|
|
BEGIN 61245000
|
|
EMIT(ONE); OP ~ TWSD; NEWCT ~ -1; 61246000
|
|
GO TO EMITOP; 61247000
|
|
END; 61248000
|
|
STEPIT; TYPE ~ AEXP; 61249000
|
|
IF Q = "6DIGI" THEN 61250000
|
|
BEGIN 61251000
|
|
STEPIT; 61252000
|
|
EMIT(DUPL); EMIT(RSDN); 61253000
|
|
IF ERROR573 THEN 61254000
|
|
BEGIN %AEXP SOURCE W/ UPDATE ARITH VARIABLE 61254100
|
|
ERROR573~FALSE; 61254200
|
|
EMIT(DSRS); %SAVES THE QUOTENT IN THE UPDATE VARIABLE 61254300
|
|
61254350
|
|
EMIT3(NEWSP.ADDRESS); 61254400
|
|
EMIT(STOD); 61254500
|
|
END ELSE 61254600
|
|
BEGIN 61254610
|
|
EMIT(DSRF); 61254700
|
|
END; 61254720
|
|
EMIT(EXCH); 61254800
|
|
OP ~ UABD; %SOMEBODY OUGHTA ALLOW FOR SIGN SOMETIME. 61255000
|
|
NEWCT ~ - 1; 61256000
|
|
NEWSP ~ 0; 61256100
|
|
GO TO EMITOP; 61257000
|
|
END; 61258000
|
|
UNITS: 61259000
|
|
IF ELCLASS = WORDV THEN 61260000
|
|
BEGIN 61261000
|
|
STEPIT; 61262000
|
|
OP ~ TWSD; NEWCT ~ -1; 61263000
|
|
GO TO EMITOP; 61264000
|
|
END; 61265000
|
|
IF ELCLASS = OVERITE THEN 61266000
|
|
BEGIN 61267000
|
|
STEPIT; 61268000
|
|
OP ~ TWOD; NEWCT ~ -1; 61269000
|
|
GO TO EMITOP; 61270000
|
|
END; 61271000
|
|
IF ELCLASS { IDMAX THEN 61271100
|
|
IF Q = "9CORR" THEN 61271150
|
|
BEGIN 61271200
|
|
INSERT(5,"ECTLY",ACCUM[9],0); 61271250
|
|
IF CMPCHREQL(5,ACCUM[2],ACCUM[9]) THEN 61271300
|
|
BEGIN 61271350
|
|
EMITPAIR(OP ~ GETSTACK, OVRN); 61271400
|
|
EMIT(EXSU); EMIT(SRSC); EMITV(OP); 61271450
|
|
RTNSTACK(OP); STEPIT; 61271500
|
|
END; END; 61271550
|
|
GO DOIT; 61271900
|
|
EXIT: 61274000
|
|
END REPLACESTMT; 61275000
|
|
PROCEDURE FILLDATA(N); VALUE N; INTEGER N; 62020200
|
|
BEGIN 62021000
|
|
DEFINE BUMPTAX=IF TAX~TAX+1}POOLMAX THEN ERROR(0656)#; 62021100
|
|
LABEL EXIT, CHECK, LOOP, STUFF; 62022000
|
|
INTEGER Z,FIRSTX,LASTX, J; 62023000
|
|
FIRSTX ~ TAX; 62024000
|
|
LOOP: 62025000
|
|
IF STEPI = STRNGCON THEN GO TO STUFF; 62026000140621PK
|
|
IF ELCLASS = STRING THEN 62027000
|
|
BEGIN 62028000
|
|
DO BEGIN 62029000
|
|
TA[TAX] ~ THI; BUMPTAX; 62029100
|
|
TA[TAX] ~ REAL(THIFLAG); BUMPTAX; 62029200
|
|
END 62029300
|
|
UNTIL NOT GOBBLE(TRUE); 62030000
|
|
GO TO STUFF; 62031000
|
|
END; 62032000
|
|
IF ELCLASS = ADDOP THEN 62033000
|
|
BEGIN 62033100
|
|
IF STEPI ! NUMBER THEN ERROR(657); 62033200
|
|
IF ELBAT[I-1].DISP = SUBT THEN THI ~ -THI; 62033300
|
|
GO TO STUFF; 62033400
|
|
END; 62033500
|
|
IF ELCLASS ! NUMBER THEN ERROR(657); 62033600
|
|
IF RESULT ! LFTPRN THEN GO STUFF; 62034000
|
|
62035000
|
|
Z ~ THI; STEPIT; 62036000
|
|
FILLDATA(Z-1); 62037000
|
|
IF ELCLASS ! RTPARN THEN ERROR(0658); 62038000
|
|
GO TO CHECK; 62039000
|
|
STUFF: 62040000
|
|
TA[TAX] ~ THI; BUMPTAX; 62041000
|
|
TA[TAX]~ REAL(THIFLAG); BUMPTAX; 62041100
|
|
IF DPTOG THEN 62042000
|
|
BEGIN TA[TAX] ~ TLO; BUMPTAX;TA[TAX]~REAL(TLOFLAG);BUMPTAX END;62043000
|
|
CHECK: 62044000
|
|
IF STEPI = COMMA THEN GO TO LOOP; 62045000
|
|
LASTX ~ TAX-1; 62046000
|
|
FOR Z~1 STEP 1 UNTIL N DO 62047000
|
|
FOR J ~ FIRSTX STEP 1 UNTIL LASTX DO 62048000
|
|
BEGIN TA[TAX] ~ TA[J]; BUMPTAX END; 62049000
|
|
EXIT: 62050000
|
|
END FILLDATA; 62051000
|
|
PROCEDURE FILLSTMT; 62052000
|
|
BEGIN 62053000
|
|
LABEL EXIT; 62065000
|
|
INTEGER N; 62065500
|
|
STEPIT; 62066000
|
|
IF BOOARRAYID { ELCLASS AND ELCLASS { INTARRAYID THEN 62067000
|
|
ARRAYROW ELSE ERROR(0659); 62068000
|
|
IF ELCLASS ! WITHV THEN ERROR(0660); 62069000
|
|
TAX ~ 0; 62071000
|
|
FILLDATA(0); N ~ TAX; 62072000
|
|
FILLPOOL; 62073000
|
|
EMITNUM(N); EMIT(TWSD); 62074000
|
|
EXIT: 62075000
|
|
END FILLSTMT; 62076000
|
|
PROCEDURE SWAPSTMT; 62100000
|
|
BEGIN 62101000
|
|
LABEL L, EXIT; 62102000
|
|
REAL NA, NB, A, B, T; 62103000
|
|
IF STEPI ! LFTPRN THEN ERROR(0661); 62104000
|
|
IF STEPI < BOOARRAYID OR ELCLASS > INTARRAYID THEN ERROR(0662);62105000
|
|
A ~ ELBAT[I]; NA ~ BOUND(A); A ~ A.ADDRESS; 62106000
|
|
IF STEPI = LFTBRKT THEN 62107000
|
|
BEGIN 62108000
|
|
IF T ~ SUBSCRIBER(A, NA) = 0 THEN FLAG(0662); 62109000
|
|
IF T ! NA THEN 62110000
|
|
BEGIN 62111000
|
|
EMIT(INDX); EMIT(DUPL); EMIT(LOAD); 62112000
|
|
A ~ 0; NA ~ T; 62113000
|
|
END; 62114000
|
|
END; 62115000
|
|
IF ELCLASS ! COMMA THEN ERROR(0663); 62116000
|
|
IF STEPI < BOOARRAYID OR ELCLASS > INTARRAYID THEN ERROR(0662);62117000
|
|
B ~ ELBAT[I]; NB ~ BOUND(B); B ~ B.ADDRESS; 62118000
|
|
IF STEPI = LFTBRKT THEN 62119000
|
|
BEGIN 62120000
|
|
IF T ~ SUBSCRIBER(B, NB) = 0 THEN FLAG(0662); 62121000
|
|
IF T ! NB THEN 62122000
|
|
BEGIN 62123000
|
|
EMIT(INDX); EMIT(DUPL); EMIT(LOAD); 62124000
|
|
B ~ 0; NB ~ T; 62125000
|
|
END; 62126000
|
|
END; 62127000
|
|
IF ELCLASS = RTPARN THEN STEPIT ELSE ERROR(0664); 62128000
|
|
IF A = 0 THEN 62129000
|
|
IF B = 0 THEN 62130000
|
|
BEGIN 62131000
|
|
EMIT(RSDN); EMIT(OVRD); 62132000
|
|
EMIT(EXCH); EMIT(OVRD); 62133000
|
|
END ELSE 62134000
|
|
BEGIN 62135000
|
|
L: EMITN(B); EMIT(LOAD); 62136000
|
|
EMIT(RSDN); EMITN(B); 62137000
|
|
EMIT(OVRD); EMIT(OVRD); 62138000
|
|
END ELSE 62139000
|
|
IF B = 0 THEN 62140000
|
|
BEGIN B ~ A; GO TO L END ELSE 62141000
|
|
BEGIN 62142000
|
|
EMITN(A); EMIT(LOAD); 62143000
|
|
EMITN(B); EMIT(LOAD); 62144000
|
|
EMITN(A); EMIT(OVRD); 62145000
|
|
EMITN(B); EMIT(OVRD); 62146000
|
|
END; 62147000
|
|
IF NA ! NB THEN FLAG(0665); 62148000
|
|
EXIT: 62149000
|
|
END SWAPSTMT; 62150000
|
|
INTEGER PROCEDURE PICTUREGEN(FROM,UP,X); VALUE FROM,UP,X; 65001000
|
|
BOOLEAN FROM,UP; INTEGER X; 65002000
|
|
COMMENT PICTUREGEN GENERATES (SURPRIZE) A PICTURE EDIT-MICRO 65003000
|
|
STRING...OR AN ENTER-EDIT ON A MICRO-STRING IN A TABLE 65004000
|
|
SOMEWHERE. "X" POINTS INTO ADDL, AT THE STUFF FOR THE 65005000
|
|
PICTURE (SEE PICIUREDEC). "UP" IS TRUE IF THE UPDATED 65006000
|
|
POINTERS ARE REQUIRED. "FROM" IS TRUE IF WE ARE CALLED BY65007000
|
|
REPLACESTMT: IF SO, WE HAVE EXPRESSIONS TO COMPILE FOR ANY65008000
|
|
DYNAMIC REPEATS IN THE PICTURE. IF "FROM" IS FALSE, WE 65009000
|
|
ARE CALLED FROM ACTUALPARAPART (Q.V.), AND WE MUST DREAM 65010000
|
|
UP VALUE-CALLS FOR THOSE DYNAMIC THINGS; 65011000
|
|
BEGIN 65012000
|
|
BOOLEAN DOING; COMMENT TRUE IFF WE ARE COMPILING EXPRESSIONS- 65013000
|
|
TURNS OFF WHEN WE RUN OUT; 65014000
|
|
REAL A, OP, N; 65015000
|
|
IF FROM THEN 65016000
|
|
IF DOING ~ STEPI = LFTPRN THEN ELCLASS ~ COMMA; 65017000
|
|
DO BEGIN 65018000
|
|
A ~ GIT(X); X ~ X + 1; 65019000
|
|
IF A.[44:4] = 0 THEN % TABLE-ENTER 65020000
|
|
BEGIN EMITNUM(A.[19:24]); EMITPAIR(A.[1:18],INDX); 65021000
|
|
OP ~ TEED; 65022000
|
|
END TABLE MODE ELSE 65023000
|
|
BEGIN 65024000
|
|
IF A.[1:16] = 65535 THEN % DYNAMIC 65025000
|
|
BEGIN 65026000
|
|
IF FROM THEN 65027000
|
|
IF DOING THEN 65028000
|
|
IF ELCLASS ! COMMA THEN FLAG(924) ELSE 65029000
|
|
BEGIN STEPIT; EXPRESSION(ITYPE) END ELSE 65030000
|
|
FLAG(925) ELSE 65031000
|
|
COMMENT HERE WE DREAM UP A VALC; 65032000
|
|
EMITV(5&(CURRENT+1)[30:42:6] + N); 65033000
|
|
N ~ N + 1; 65034000
|
|
65035000
|
|
END ELSE 65036000
|
|
EMITNUM(A.[1:16]); % STUPID MACHINE 65037000
|
|
A.[1:16] ~ 0; 65038000
|
|
OP ~ EXSD; 65039000
|
|
END; 65040000
|
|
IF DOING THEN COMMENT CHECK FOR END OF EXPR LIST; 65041000
|
|
IF ELCLASS = RTPARN OR BOOLEAN(A.[43:1]) THEN 65042000
|
|
BEGIN 65043000
|
|
WHILE ELCLASS = COMMA DO 65044000
|
|
BEGIN STEPIT; EXPRESSION(ITYPE); EMIT(DLET) END; 65045000
|
|
IF ELCLASS ! RTPARN THEN FLAG(926) ELSE STEPIT; 65046000
|
|
DOING ~ FALSE; 65047000
|
|
END; 65048000
|
|
IF FROM THEN 65048900
|
|
IF NOT DOING THEN 65049000
|
|
IF ELCLASS = COMMA THEN UP ~ TRUE; 65050000
|
|
EMIT(OP & REAL(UP OR NOT BOOLEAN(A.[43:1]))[44:47:1]); 65051000
|
|
IF OP = EXSD THEN EMITMICRO(A); 65052000
|
|
END UNTIL BOOLEAN(A.[43:1]); 65053000
|
|
PICTUREGEN ~ IF FROM THEN REAL(UP) ELSE N; 65054000
|
|
END PICTUREGEN; 65055000
|
|
PROCEDURE BLOCK; 66000000
|
|
COMMENT BLOCK COMPILES ONE OF THOSE. MOST OF HIS WORK IS KEEPING TRACK66001000
|
|
OF THINGS FOR SEGMENTATION AND NOMENCLATURE NESTING; 66002000
|
|
COMMENT FIRST WHACK, 2/68, MCP *************************************; 66003000
|
|
BEGIN 66004000
|
|
ARRAY TEDOC[0:31,0:255]; 66005000
|
|
INTEGER LO, SEGNOO, NINFOOO, NADDLO, BLKAD,LINFOO, LASTXO, 66006000
|
|
FIRSTXO, FIRSTMTO, POINT; 66007000
|
|
REAL CQAO; 66007100
|
|
BOOLEAN SVINFOO; 66007200
|
|
DEFINE LEVELMASK = STACKMASK #; 66008000
|
|
NADDLO ~ NEXTADDL; 66009000
|
|
NINFOOO ~ NINFOO; 66010000
|
|
NINFOO ~ NEXTINFO; 66011000
|
|
LINFOO ~ LASTINFO; 66012000
|
|
FIRSTMTO ~ FIRSTMT; 66013000
|
|
FIRSTXO ~ FIRSTX; 66014000
|
|
LASTXO ~ LASTX; 66015000
|
|
SEGNOO ~ SEGNO; 66016000
|
|
IF SVINFOTOG THEN ELSE 66016100
|
|
BEGIN 66016200
|
|
SVINFOO~SVINFO; 66016300
|
|
SVINFO~FALSE; 66016400
|
|
END; 66016500
|
|
BEGIN 66017000
|
|
EMIT(MKST); 66018000
|
|
EMITN(BLKAD ~ GETSPACE(-CURRENT)); 66019000
|
|
EMIT(ENTR); 66020000
|
|
POINT ~ BUMPL; 66021000
|
|
IF NOT SAVED THEN 66022000
|
|
IF REAL(SEPARATOG)!4 THEN 66022500
|
|
BEGIN 66023000
|
|
LO ~ L; 66024000
|
|
MOVECODE(TEDOC,EDOC); 66025000
|
|
L ~ 0; 66026000
|
|
SEGNO ~ NEWSEG(0); 66027000
|
|
END; END; 66028000
|
|
FIRSTX ~ LASTX ~ FIRSTMT ~ -1; 66029000
|
|
LASTINDEX ~ LASTNOT ~ 0; 66030000
|
|
IF CURRENT < 31 THEN CURRENT ~ CURRENT + 1 ELSE FLAG(627); 66031000
|
|
MAXDISP ~ LEVELMASK[CURRENT].[FF]; 66032000
|
|
STACKTOP[CURRENT] ~ MAXSTACK[CURRENT] ~ 2; 66033000
|
|
DECLARATIONS; 66034000
|
|
FIRSTATEMENT; 66035000
|
|
66036000
|
|
66037000
|
|
COMPOUNDTAIL; 66038000
|
|
IF SVINFO THEN 66038100
|
|
BEGIN 66038105
|
|
WRITEFILE(INFF,INFO,NINFOO,NEXTINFO-1); 66038110
|
|
WRITEFILE(INFF,ADDL,NADDLO,NEXTADDL-1); 66038115
|
|
INFD[(INFDX~INFDX+2).LINKR,INFDX.LINKC] ~ 66038120
|
|
(GTI1~(NEXTINFO-NINFOO+29)DIV 30+INFFX)& 66038125
|
|
INFFX[18:33:15]; 66038130
|
|
INFD[(INFDX~INFDX+1).LINKR,INFDX.LINKC] ~ 66038135
|
|
(NEXTINFO-1)&NINFOO[18:33:15]& 66038140
|
|
(NINFOO-STARTINFO)[3:33:15]; 66038145
|
|
INFD[(INFDX~INFDX+1).LINKR,INFDX.LINKC] ~ 66038150
|
|
(NEXTADDL-1)&NADDLO[18:33:15]& 66038155
|
|
(NADDLO-STARTADDL)[3:33:15]; 66038160
|
|
INFFX~(NEXTADDL-NADDLO+29) DIV 30 + GTI1; 66038165
|
|
END; 66038170
|
|
NEXTINFO ~ NINFOO; 66040000
|
|
NINFOO ~ NINFOOO; 66041000
|
|
NEXTADDL ~ NADDLO; 66042000
|
|
LASTINFO ~ LINFOO; 66043000
|
|
IF REAL(ARRAYDECTOG AND BOOLEAN(2*CURRENT)) !0 THEN 66043100
|
|
BEGIN 66043200
|
|
EMIT(MKST); 66043300
|
|
EMITN(BLOCKEXITPCW); 66043400
|
|
EMIT(ENTR); 66043500
|
|
ARRAYDECTOG~ARRAYDECTOG AND NOT BOOLEAN(2*CURRENT); 66043540
|
|
END; 66043600
|
|
EMIT(EXIT); 66044000
|
|
PURGE(NEXTINFO); 66044300
|
|
LINFOO~L; % LAST SYLLABLE OF THE LEVEL 66044500
|
|
IF NOT SAVED THEN 66045000
|
|
IF REAL(SEPARATOG)!4 THEN 66045500
|
|
BEGIN 66046000
|
|
WHILE L MOD 6 ! 0 DO EMIT(NVLD); 66047000
|
|
SEGMENT(0, L DIV 6, EDOC); 66048000
|
|
L ~ LO; MOVECODE(TEDOC,EDOC); 66049000
|
|
END; 66050000
|
|
LO ~ IF FIRSTX < 0 THEN FIRSTMT ELSE FIRSTX; 66050100
|
|
DOUBLE(SEGNO,SEGNOO,~,SEGNOO,SEGNO); 66050200
|
|
FIRSTX ~ FIRSTXO; LASTX ~ LASTXO; FIRSTMT ~ FIRSTMTO; 66050300
|
|
IF CURRENT = 1 THEN 66051000
|
|
GLOBALPCW(BLKAD,SEGNO,LO,STATE) ELSE 66052000
|
|
BEGIN 66053000
|
|
IF NOT NOJUMPTOG THEN JUMPCHKX; 66054000
|
|
PCL~L; 66054500
|
|
EMITPCW(CURRENT,LO,STATE,SEGNOO); 66055000
|
|
ENTERSEPA(((L-6) DIV 6),LINFOO,POINT); 66055500
|
|
LO ~ STACKTOP[CURRENT - 1]; 66056000
|
|
BLKAD ~ BLKAD.[36:12]; 66057000
|
|
WHILE BLKAD ~ BLKAD + 1 < LO DO EMIT(ZERO); 66058000
|
|
COMMENT TO RESERVE CELLS FOR THINGS WITH ADDR PARTS; 66059000
|
|
IF NOT NOJUMPTOG THEN JUMPCHKNX; 66059100
|
|
END; 66059200
|
|
EMITB(BRUN, POINT, L); 66060000
|
|
IF SVINFO THEN 66060100
|
|
INFO[(GTI1~INFDX-3).LINKR,GTI1.LINKC]~PCW; 66060200
|
|
IF SVINFOTOG THEN ELSE SVINFO~SVINFO OR SVINFOO; 66060800
|
|
MAXDISP ~ LEVELMASK[CURRENT ~ CURRENT-1].[FF]; 66061000
|
|
CQAO ~ COUNTQALG; COUNTQALG ~ STARTNSQ; 66061100
|
|
66062000
|
|
END THE BLOCK ROUTINE; 66063000
|
|
PROCEDURE PURGE(T); VALUE T; INTEGER T; 66064000
|
|
BEGIN 66065000
|
|
INTEGER I, J, K, ERR; 66066000
|
|
REAL E; 66067000
|
|
LABEL GRIPE; 66068000
|
|
DEFINE CNT = CHRCNT#; 66069000
|
|
IF T < 0 THEN T ~ - T ELSE 66069050
|
|
FOR GT1 ~ 0 STEP 1 UNTIL MAXTEMP DO 66069100
|
|
IF TEMPSTACK[GT1] .[31:5] = CURRENT THEN 66069200
|
|
TEMPSTACK[GT1] ~ 0; 66069300
|
|
FOR I ~ 0 STEP 1 UNTIL 124 DO 66070000
|
|
WHILE J~STACKHEAD[I]}T DO 66071000
|
|
BEGIN 66072000
|
|
STACKHEAD[I] ~ TAKE(J).CONL; 66073000
|
|
IF(E ~ TAKE(J-1)).CLASS = LABELID THEN 66074000
|
|
BEGIN 66075000
|
|
IF E.TYPE = F0RWARD THEN 66076000
|
|
IF E.LINK ! 0 THEN 66077000
|
|
BEGIN ERR ~ 405; GO GRIPE END 66078000
|
|
ELSE ELSE 66078100
|
|
IF E.DISP!0 THEN 66078200
|
|
BEGIN 66078300
|
|
JUMPCHKX; 66078400
|
|
EMITPCW(E.LVEL,E.[32:16],STATE,SEGNO); 66078500
|
|
EMITPAIR(E.ADDRESS,OVRD); 66078600
|
|
JUMPCHKNX; 66078650
|
|
END; 66078700
|
|
END ELSE 66079000
|
|
IF E.CLASS = PROCID OR E.CLASS } BOOPROCID AND 66080000
|
|
E.CLASS { PTRPROCID THEN 66081000
|
|
IF E.TYPE = F0RWARD THEN 66082000
|
|
BEGIN ERR ~ 406; 66083000
|
|
GRIPE: ERRORTOG ~ TRUE; 66084000
|
|
FLAG(ERR); 66085000
|
|
BLANKOUT(16,LBUFF[0]); 66086000
|
|
INSERT(5,"ERROR",LBUFF[2],0); 66087000
|
|
MOVECHARACTERS(TAKE(J).CNT,INFO[J.LINKR,J.LINKC],4, 66088000
|
|
LBUFF[3],3); 66089000
|
|
INSERT(4,"WAS:",LBUFF[2],6); 66090000
|
|
WRITELBUFF 66093000
|
|
END ELSE ELSE 66094000
|
|
% ARRAY ACTION 66095000
|
|
END END PURGE; 66096000
|
|
PROCEDURE THRUSTMT; 66200000
|
|
BEGIN 66201000
|
|
REAL SAVEL, GT1, SAVESTBR; 66202000
|
|
BOOLEAN TB1,TB2; 66202100
|
|
LABEL EXIT; 66203000
|
|
SAVEL ~ L; 66204100
|
|
IF TB1~STEPI = NUMBER THEN 66205000
|
|
BEGIN 66205100
|
|
DOUBLE(THI,TLO,~,GT1,SAVESTBR); TB2 ~ DPTOG; 66205200
|
|
TB1 ~ TB1 AND TABLE(I+1)=DOV; 66205300
|
|
DOUBLE(GT1,SAVESTBR,~,THI,TLO); DPTOG ~ TB2; 66205400
|
|
END; 66205500
|
|
IF TB1 AND THI.[1:31] = 0 THEN 66208000
|
|
BEGIN 66209000
|
|
EMITNUM(0&1[1:37:11]&THI[12:32:16]); 66210000
|
|
STEPIT; 66211000
|
|
IF ELCLASS ! DOV THEN FLAG(666); 66212000
|
|
EMITNUM(4); 66215000
|
|
EMIT(STAG); 66216000
|
|
EMITPAIR(GT1 ~ GETSTACK, OVRN); 66217100
|
|
SAVEL ~ L; 66219000
|
|
EMITN(GT1); 66220000
|
|
SAVESTBR ~ L; 66221000
|
|
EMITLINK(0&STBR[24:40:8]); 66222000
|
|
EMIT(DLET); 66223000
|
|
STEPIT; 66224000
|
|
STATEMENT; 66225000
|
|
EMITB(BRUN,BUMPL,SAVEL); 66226000
|
|
EMITB(GET(SAVESTBR),SAVESTBR+3,L); 66227000
|
|
GO TO EXIT; 66229000
|
|
END; 66230000
|
|
GT1 ~ AEXP; 66230100
|
|
IF ELCLASS ! DOV THEN FLAG(666); 66230200
|
|
GT1 ~ GETSTACK; 66231000
|
|
SAVEL ~ BUMPL; 66232000
|
|
STEPIT; 66233000
|
|
STATEMENT; 66234000
|
|
EMITV(GT1); 66235000
|
|
EMIT(ONE); 66236000
|
|
EMIT(SUBT); 66237000
|
|
EMITB(BRUN,SAVEL,L); 66238000
|
|
EMITN(GT1); 66239000
|
|
EMIT(OVRN); 66240000
|
|
EMIT(ZERO); 66241000
|
|
EMIT(LSEQ); 66242000
|
|
EMITB(BRFL,BUMPL,SAVEL); 66243000
|
|
EXIT: 66297000
|
|
RTNSTACK(GT1); 66298000
|
|
END THRUSTMT; 66299000
|
|
COMMENT * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 70000000
|
|
DECLARATIONS 70001000
|
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *; 70002000
|
|
PROCEDURE IDLIST(SPAZE,TIPE,KLASS,B,C); VALUE SPAZE,TIPE,KLASS,B,C; 70003000
|
|
BOOLEAN C; INTEGER TIPE,KLASS,B; REAL SPAZE; 70004000
|
|
COMMENT IDLIST HANDLES THE ENTRY INTO INFO OF A LIST OF IDENTIFIERS, 70005000
|
|
SEPARATED BY COMMAS. "I" MUST BE POINTING TO THE FIRST ONE, 70006000
|
|
AND MUST NOT HAVE EVER PASSED IT (I.E., YOU MAY NOT "I~I-1", 70007000
|
|
THEN CALL IDLIST). SPAZE GETS PASSED ON TO GETSPACE, Q.V. 70008000
|
|
TIPE IS THE TYPE-FIELD VALUE FOR THE ELBAT WORD, AND KLASS, 70009000
|
|
THEN CLASS FIELD. IF B IS } ZERO, WE WILL PROVIDE AN INITIAL 70010000
|
|
VALUE OF TYPE B(UNLESS ENTER RETURNS TRUE, INDICATING THAT THE 70011000
|
|
PROGRAMMER GAVE AN ADDRESS PART). C IS TRUE IF SPACE IS TO BE 70012000
|
|
ALLOCATED; 70013000
|
|
BEGIN 70014000
|
|
INTEGER CONTEX, T; 70015000
|
|
LABEL INN, OWT; 70015100
|
|
BOOLEAN FAKEY; 70016000
|
|
70017000
|
|
IF B=DPV OR B=EVNTV THEN SPAZE.[2:1]~ 1; 70017100
|
|
IF CURRENT ! 0 THEN T ~ 1 ELSE 70017200
|
|
IF KLASS=DPID OR KLASS=EVENTID THEN T~2 ELSE 70017300
|
|
IF KLASS = REFID THEN T ~ 0 ELSE 70017400
|
|
IF KLASS = PTRID THEN T ~ 3 ELSE T ~ 1; 70017500
|
|
I ~ I - 1; CONTEX ~ CONTEXT; % FUTZ UP THE SCANNER 70018000
|
|
DO BEGIN 70019000
|
|
CONTEXT ~ 0; % ITS DECLARATION TIME, GANG. 70020000
|
|
IF STEPI ! UNKNOWNID THEN % BUT THIS HAS ALREADY BEEN 70021000
|
|
FLAG(700); % DECLARED. 70022000
|
|
IF NOT ENTER(SPAZE,TIPE,KLASS,C) THEN % 70023000
|
|
IF B } 0 THEN % B IS INITIAL-VALUE TYPE 70024000
|
|
IF TABLE(I+1) = ASSNOP THEN % DID HE GIVE ONE 70025000
|
|
BEGIN % WELL, COMPILE IT 70026000
|
|
IF B=EVNTV THEN FLAG(783); 70026500
|
|
CONTEXT ~ 2; % UNFUTZ THE SCANNER 70027000
|
|
ELCLASS ~ TABLE(I~I+2); % MEANS STEPIT TWICE. 70028000
|
|
JUMPCHKX; 70028100
|
|
EXPRESSION(B); % AND DO THE THING. 70029000
|
|
I ~ I - 1; 70029010
|
|
IF CURRENT = 0 THEN 70029100
|
|
BEGIN 70029200
|
|
EMITPAIR(TAKE(LASTINFO).ADDRESS, 70029300
|
|
IF B < REFV THEN STOD ELSE OVRD); 70029400
|
|
IF(N~IF B = DPV THEN 2 ELSE 70029500
|
|
IF B = REFV THEN 0 ELSE 70029600
|
|
IF B = PTRV THEN 3 ELSE 1)! 1 THEN GO INN 70029700
|
|
END; 70029800
|
|
FAKEY ~ FALSE 70030000
|
|
END ELSE % HE DIDNT GIVE ONE, WE GOTTA DO 70031000
|
|
IF N ~ T ! 1 THEN % ITS A COMPILE-TIME THING 70031100
|
|
BEGIN 70031200
|
|
INN: PDPRT[PDINX.LINKR,PDINX.LINKC]~TAKE(LASTINFO).DISP 70031300
|
|
&REAL(T=0)[8:47:1] 70031310
|
|
&N[2:45:3]; 70031400
|
|
PDINX ~ PDINX + 1; GO OWT 70031500
|
|
END ELSE % THE OBJECT CODE GOTTA DO 70031600
|
|
IF CURRENT ! 0 THEN % BUT IF ITS OUTER BLOCK, DONT DO70031700
|
|
BEGIN JUMPCHKX; EMIT(ZERO); 70032000
|
|
IF KLASS=DPID OR KLASS=EVENTID THEN %MAYBE TWICE 70033000
|
|
EMIT(XTND) ELSE 70034000
|
|
IF KLASS = REFID THEN 70035000
|
|
IF FAKEY THEN 70036000
|
|
BEGIN L ~ L - 1; EMIT(DUPL) END ELSE 70037000
|
|
BEGIN EMITNUM(5); EMIT(STAG); FAKEY ~ TRUE END; 70038000
|
|
END; 70039000
|
|
OWT: 70039500
|
|
PUT(TAKE(LASTINFO)&NEXTINFO[33:33:15],LASTINFO); 70040000
|
|
END UNTIL STEPI ! COMMA; 70041000
|
|
CONTEXT ~ CONTEX 70042000
|
|
END IDLIST; 70043000
|
|
BOOLEAN PROCEDURE ENTER(SPAZE,TIPE,KLASS,B); VALUE SPAZE,TIPE,KLASS,B; 70044000
|
|
BOOLEAN B; INTEGER SPAZE,TIPE,KLASS; 70045000
|
|
COMMENT ENTER PUTS THE IDENTIFIER IN ACCUM INTO INFO, AND LINKS IT IN 70046000
|
|
APPROPRIATELY, MAKING CERTAIN THAT THE ENTRY IS NOT SPLIT 70047000
|
|
ACROSS A ROW BOUND. IF B IS TRUE, SPAZE IS PASSED ON TO 70048000
|
|
GETSPACE, WHICH RETURNS THE ADDRESS-FIELD VALUE: OTHERWISE, 70049000
|
|
SPAZE ITSELF IS THE ADDRESS-FIELD VALUE. TIPE GOES INTO THE 70050000
|
|
TYPE FIELD, AND KLASS INTO THE CLASS FIELD; 70051000
|
|
BEGIN 70052000
|
|
INTEGER N; 70053000
|
|
REAL ELBW; 70054000
|
|
IF ((N ~ (COUNT + 19) DIV 8) + NEXTINFO).LINKR ! 70055000
|
|
NEXTINFO.LINKR THEN 70056000
|
|
PUT(NEXTINFO~(LASTINFO~NEXTINFO)+256-NEXTINFO.LINKC, 70057000
|
|
LASTINFO); 70058000
|
|
ACCUM[1].CONL ~ STACKHEAD[SCRAM]; 70059000
|
|
STACKHEAD[SCRAM] ~ NEXTINFO + 1; 70060000
|
|
MOVE(N-1,ACCUM[1],INFO[NEXTINFO.LINKR,NEXTINFO.LINKC+1]); 70061000
|
|
IF B THEN 70062000
|
|
BEGIN 70062100
|
|
ENTER~SPAZE ~ GETSPACE(SPAZE) < 0; 70062200
|
|
IF PRTOG THEN PRINTSPACE(NEXTINFO,SPAZE.[31:5], 70062300
|
|
SPAZE.[36:12]); 70062400
|
|
END; 70062500
|
|
ELBW.ADDRESS ~ SPAZE; 70063000
|
|
ELBW.CLASS ~ KLASS; 70064000
|
|
ELBW.TYPE ~ TIPE; 70065000
|
|
PUT(ELBW, LASTINFO ~ NEXTINFO); 70066000
|
|
NEXTINFO ~ NEXTINFO + N; 70067000
|
|
END ENTER; 70068000
|
|
PROCEDURE MERRIMAC; 70069000
|
|
BEGIN COMMENT MERRIMAC IS STILL WORKING ON THE MONITOR. 70070000
|
|
<MONITOR DECLARATION>::= MONITOR <PROCEDURE IDENTIFIER> 70071000
|
|
(<MONITOR LIST>) 70072000
|
|
THE PROCEDURE IDENTIFIER PARAMETERS ARE CHECKED TO SEE IF THEY 70073000
|
|
ARE BOTH VALUE AND IF THE TYPE OF SECOND PARAMETER IS THE SAME 70074000
|
|
AS THE PROCEDURE. THE MONITOR LIST VARIABLES ARE RE-ENTERED 70075000
|
|
IN INFO (IF FOUND) MARKED AS MONITORED AND WITH A LINK POINT- 70076000
|
|
ING TO THE INFO ENTRY FOR THE PROCEDURE IDENIIFIER. ;70077000
|
|
REAL ELBW, CLAS, PROCLINK; 70078000
|
|
DO BEGIN 70078010
|
|
CONTEXT ~ 2; 70078050
|
|
CLAS ~ STEPI - BOOPROCID; 70079000
|
|
IF RANGE (BOOPROCID, PTRPROCID) 70080000
|
|
THEN BEGIN 70081000
|
|
PROCLINK ~ ELBAT[I].ADDRESS; 70082000
|
|
COMMENT CHECK PARAMETERS %-----------% ;70083000
|
|
IF STEPI ! LFTPRN 70084000
|
|
THEN ERR (701) 70085000
|
|
ELSE DO IF STEPI - BOOID = CLAS 70086000
|
|
OR CLAS = WORDID - BOOID 70086100
|
|
THEN BEGIN 70087000
|
|
GTB1 ~ ENTER((ELBW ~ ELBAT [I]). 70088000
|
|
ADDRESS, ELBW.TYPE, ELBW.CLASS, 70089000
|
|
FALSE); 70090000
|
|
PUT (INFO [(GT1~LASTINFO).LINKR, 70091000
|
|
GT1.LINKC] 70092000
|
|
&1 [1:47:1] 70093000
|
|
&PROCLINK [33:33:15], 70094000
|
|
LASTINFO); 70095000
|
|
END 70096000
|
|
ELSE ERR (702) 70097000
|
|
UNTIL STEPI ! COMMA; 70098000
|
|
IF ELCLASS ! RTPARN THEN ERR (701); 70099000
|
|
STEPIT; 70100000
|
|
END 70101000
|
|
ELSE ERR (702); 70102000
|
|
END UNTIL ELCLASS!COMMA; 70102010
|
|
END MERRIMAC; 70103000
|
|
BOOLEAN PROCEDURE FIELDER (DIALS, SIMPLE); 70104000
|
|
REAL DIALS; 70105000
|
|
BOOLEAN SIMPLE ; 70106000
|
|
BEGIN COMMENT FIELDER HANDLES THE CONSTRUCT: 70107000
|
|
<FIELD> ::= <ARITHMETIC EXPRESSION> : <ARITHMETIC EXPRESSION> 70108000
|
|
AS FOUND IN FIELD AND LAYOUT DECLARATIONS, THE SIMPLE CASE IS 70109000
|
|
WHEN BOTH AEXP-S ARE LITERALS, AND IN THIS CASE THE DIAL SET- 70110000
|
|
TINGS ARE FORMATTED SO THAT THEY WILL MAP INTO THE DISP FIELD 70111000
|
|
OF THE ELBAT WORD AND THE LVT BIT IS TURNED ON AND SIMPLE IS 70112000
|
|
SET TRUE. IN THE NOT SIMPLE CASE AN ADDL WORD IS BUILT (IN 70113000
|
|
DIALS) THAT CONTAINS EITHER A DIAL SETTING OR A LINK TO ADDL 70114000
|
|
IF EACH OF TWO FIELDS. IN EITHER CASE FIELDER IS SET FALSE IF 70115000
|
|
A SYNTAX ERROR IS DETECTED. 70116000
|
|
;70117000
|
|
DEFINE SCAT = BEGIN FIELDER ~ FALSE; GO QUIT END#, 70118000
|
|
LITERAL = NUMBER#; %----------% 70119000
|
|
LABEL QUIT, COLONCHECK, WRAPUP, SECOND; 70120000
|
|
INTEGER S, N; 70121000
|
|
FIELDER ~ SIMPLE ~ TRUE; 70122000
|
|
COMMENT I POINTS AT FIRST COMPONENT OF ARITH EXPR AND HAS NOT70123000
|
|
BEEN STEPPED PAST IT; 70124000
|
|
IF ELCLASS = LITERAL 70125000
|
|
THEN BEGIN 70126000
|
|
DEBLANK; 70127000
|
|
IF CHR = ":" 70128000
|
|
THEN BEGIN 70129000
|
|
IF S ~ THI { 47 70130000
|
|
THEN BEGIN STEPIT; GO COLONCHECK END; 70131000
|
|
FLAG (704); SCAT; 70132000
|
|
END; 70133000
|
|
END; 70134000
|
|
SIMPLE ~ FALSE; 70135000
|
|
IF S ~ -TEXT(FIELDEXPA, COLON) > 0 THEN SCAT; 70136000
|
|
COLONCHECK: 70137000
|
|
IF ELCLASS ! COLON THEN SCAT; 70138000
|
|
IF STEPI = LITERAL 70139000
|
|
THEN BEGIN 70140000
|
|
DEBLANK; 70141000
|
|
IF CHR = "," 70142000
|
|
THEN GO SECOND; 70143000
|
|
IF CHR = ";" OR CHR = ")" OR CHR = "~" 70144000
|
|
THEN BEGIN 70145000
|
|
SECOND: 70146000
|
|
IF N ~ THI { 48 AND N > 0 70147000
|
|
THEN BEGIN STEPIT; GO WRAPUP END; 70148000
|
|
FLAG (704); 70149000
|
|
SCAT; 70150000
|
|
END 70151000
|
|
END; 70152000
|
|
SIMPLE ~ FALSE; 70153000
|
|
IF N ~ -TEXT(FIELDEXPB, SEMICOLON) > 0 THEN SCAT; 70154000
|
|
WRAPUP: IF SIMPLE 70155000
|
|
THEN BEGIN 70156000
|
|
70157000
|
|
DIALS ~ N & S [36:42:6]; 70158000
|
|
END 70159000
|
|
ELSE DIALS ~ ABS (N) 70160000
|
|
& N [32:1:1] 70161000
|
|
& ABS (S)[17:33:15] 70162000
|
|
& S [16:1:1]; 70163000
|
|
QUIT: COMMENT WHEN SUCCESSFUL I POINTS AT ENTITY AFTER LAST AEXP.; 70164000
|
|
END FIELDER; 70165000
|
|
BOOLEAN PROCEDURE FIELDPART (LSTINFO, DIALS); 70166000
|
|
REAL LSTINFO, DIALS; 70167000
|
|
BEGIN COMMENT FIELDPART HANDLES THE CONSTRUCT: 70168000
|
|
<FIELD PART> ::= <FIELD IDENTIFIER> = <FIELD> 70169000
|
|
AND MAY BE DRIVEN BY FIELDEC OR LAYOUTDEC. THE IDENTIFIER IS 70170000
|
|
ENTERED AND LSTINFO IS RETURNED TO THE CALLER. FIELDER RETURNS70171000
|
|
DIALS AND IF THE DIALS ARE NOT SIMPLE THEY ARE NEGATED FOR THE 70172000
|
|
CALLER. WHEN FIELDPART IS TRUE - IT WAS SUCCESSFUL 70173000
|
|
; 70174000
|
|
INTEGER ELCLAS; 70175000
|
|
BOOLEAN SIMPLE; 70176000
|
|
LABEL QUIT; 70177000
|
|
DEFINE SCAT=DO UNTIL 70178000
|
|
(ELCLAS~STEPI=COMMA AND TABLE (I+2)=RELOP) 70179000
|
|
OR ELCLAS= SEMICOLON; 70180000
|
|
FIELDPART ~ FALSE; 70181000
|
|
GO QUIT#; 70182000
|
|
DEFINE LASTI = LSTINFO.LINKR,LSTINFO.LINKC#; 70183000
|
|
COMMENT T POINTS AT IDENTIFIER.; 70184000
|
|
IF ELCLASS ! UNKNOWNID 70185000
|
|
THEN BEGIN FLAG (700); SCAT END; 70186000
|
|
GTB1 ~ ENTER (0, LOCALTYPE, FIELDID, FALSE); 70187000
|
|
LSTINFO ~ LASTINFO; 70188000
|
|
IF STEPI ! RELOP OR ELBAT[I].DISP ! EQUL 70189000
|
|
THEN BEGIN FLAG (703); SCAT END; 70190000
|
|
FIELDING ~ TRUE; 70190100
|
|
STEPIT; 70191000
|
|
IF FIELDER (DIALS, SIMPLE) 70192000
|
|
THEN BEGIN 70193000
|
|
IF SIMPLE 70194000
|
|
THEN INFO [LASTI].ADDRESS ~ DIALS 70195000
|
|
ELSE BEGIN 70196000
|
|
INFO [LASTI].LINK ~ NEXTADDL; 70197000
|
|
PUTNBUMP (DIALS); 70198000
|
|
DONBUG ("FIELDS", 0, NEXTADDL-1); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%70199000
|
|
END; 70200000
|
|
END 70201000
|
|
ELSE BEGIN FLAG (704); SCAT END; 70202000
|
|
FIELDING ~ FALSE; 70202100
|
|
FIELDPART ~ TRUE; 70203000
|
|
QUIT: COMMENT T POINTS AT TERMINATING "," OR SEMICOLON; 70204000
|
|
DONBUG ("FIELDS", LSTINFO,0); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%70205000
|
|
END FIELDPART; 70206000
|
|
PROCEDURE FIELDEC; 70207000
|
|
BEGIN COMMENT FIELDEC PROCESSES THE DECLARATION: 70208000
|
|
<FIELD DECLARATION> ::= FIELD <FIELD PART LIST> 70209000
|
|
WHEN THE DIALS ARE SIMPLE THEY ARE PLACE IN THE ADDRESS PART OF70210000
|
|
THE INFO WORD, OTHERWISE THE LINK POINTS TO A WORD IN ADDL THAT70211000
|
|
CONTAINS A DIAL AND/OR A POINTER TO TEXT IN ADDL. 70212000
|
|
;70213000
|
|
REAL DIALS; 70214000
|
|
INTEGER LSTINFO; 70215000
|
|
DO BEGIN 70216000
|
|
STEPIT; 70217000
|
|
GTB1 ~ FIELDPART (LSTINFO, DIALS); 70218000
|
|
END UNTIL ELCLASS ! COMMA; 70219000
|
|
END FIELDEC; 70220000
|
|
PROCEDURE LAYOUTDEC; 70221000
|
|
BEGIN COMMENT LAYOUTDEC PROCESSES THE DECLARATION 70222000
|
|
<LAYOUT DECLARATION> ::= LAYOUT <LAYOUT PART LIST> 70223000
|
|
IN ALL CASES THE INFO WORD LINK POINTS TO N ADDL ENTRIES WHERE 70224000
|
|
EACH ENTRY IS SIMILAR TO THE ADDL ENTRIES FOR FIELDEC EXCEPT 70225000
|
|
THAT SIMPLE DIALS ARE ALSO KEPT IN ADDL. SOME OF THE ENTRIES 70226000
|
|
MAY BE INITIAL VALUES. THE ADDRESS PART OF THE INFO WORD CON- 70227000
|
|
TAINS N (THE NUMBER OF ADDL ENTRIES). 70228000
|
|
;70229000
|
|
INTEGER ADDLI, ELCLAS, CODE, LSTINFO, J; 70230000
|
|
ARRAY TADDL [0:98]; 70231000
|
|
REAL TINFO, DIALS; 70232000
|
|
BOOLEAN SIMPLE, INITIAL; 70233000
|
|
LABEL ON; 70233100
|
|
LABEL BACK, GONE; 70233200
|
|
LABEL EXIT; 70234000
|
|
DEFINE SCAT = 70235000
|
|
BEGIN WHILE ELCLASS!RTPARN AND ELCLASS!SEMICOLON DO 70236000
|
|
STEPIT; 70237000
|
|
IF ELCLASS=RTPARN THEN GO EXIT ELSE GO GONE 70238000
|
|
END # 70239000
|
|
, LITERAL = NUMBER # %------------% 70240000
|
|
, LASTI = LSTINFO.LINKR, LSTINFO.LINKC # 70241000
|
|
, EVERYTHING= CODE [8:40:8] 70242000
|
|
& REAL(INITIAL)[7:47:1]# 70243000
|
|
; 70244000
|
|
DO BEGIN 70245000
|
|
IF STEPI ! UNKNOWNID 70246000
|
|
THEN BEGIN FLAG (700); SCAT END; 70247000
|
|
GTB1 ~ ENTER (0, LOCALTYPE, LAYOUTID, FALSE); 70248000
|
|
LSTINFO ~ LASTINFO; 70249000
|
|
IF STEPI ! LFTPRN 70250000
|
|
THEN BEGIN FLAG (705); SCAT END; 70251000
|
|
DO BEGIN 70252000
|
|
FIELDING ~ TRUE; 70252100
|
|
STEPIT; 70253000
|
|
FIELDING ~ FALSE; 70253100
|
|
DEBLANK; 70254000
|
|
IF CHR = "=" 70255000
|
|
THEN IF FIELDPART (TINFO, DIALS) 70256000
|
|
THEN BEGIN 70257000
|
|
CODE ~ LAYOUTID; 70258000
|
|
DIALS ~ TINFO; 70259000
|
|
END 70260000
|
|
ELSE BEGIN FLAG (703); END 70261000
|
|
ELSE 70261100
|
|
BACK: 70261150
|
|
IF ELCLASS = UNKNOWNID THEN 70261200
|
|
IF GT1 ~ ELBAT[I] = 0 THEN GO ON ELSE 70261300
|
|
BEGIN 70261400
|
|
ELBAT[I].CLASS ~ ELCLASS ~ (TINFO ~TAKE(GT170261500
|
|
)).CLASS; 70261600
|
|
IF ELCLASS ! DEFINDID THEN GO ON ELSE 70261700
|
|
70261800
|
|
DIALS ~ TINFO.LINK; 70261900
|
|
IF TINFO.ADDRESS ! 0 THEN 70262000
|
|
BEGIN 70262100
|
|
DIALS.[18:15]~ NEXTINFO; 70262200
|
|
IF ASSOCIATE(TINFO.ADDRESS) THEN 70262300
|
|
GO ON; 70262400
|
|
END; 70262500
|
|
HOOK(DIALS); NXTELBT ~ NXTELBT-1; 70262600
|
|
ELCLASS ~ TABLE(I); 70262700
|
|
GO BACK; 70262800
|
|
END ELSE 70262900
|
|
ON: IF ELCLASS = FIELDID THEN 70263000
|
|
BEGIN 70263100
|
|
CODE ~ LAYOUTID; 70264000
|
|
DIALS ~ ELBAT [I].LINK; 70265000
|
|
STEPIT; 70266000
|
|
END 70267000
|
|
ELSE 70268000
|
|
IF ELCLASS = TAGV 70269000
|
|
THEN BEGIN 70270000
|
|
CODE ~ TAGV; 70271000
|
|
STEPIT; 70272000
|
|
END 70273000
|
|
ELSE 70274000
|
|
BEGIN FIELDING ~ TRUE; 70274100
|
|
IF FIELDER (DIALS, SIMPLE) 70275000
|
|
THEN BEGIN 70276000
|
|
IF SIMPLE 70277000
|
|
THEN DIALS~ 0 &DIALS[26:36:6] 70278000
|
|
&DIALS[42:42:6]; 70279000
|
|
CODE ~ FIELDID; 70280000
|
|
END 70281000
|
|
ELSE BEGIN FLAG (707); SCAT END; 70282000
|
|
FIELDING ~ FALSE END; 70282100
|
|
IF ELCLASS = ASSNOP 70283000
|
|
THEN BEGIN 70284000
|
|
IF STEPI ! LITERAL OR THI < 0 70285000
|
|
THEN BEGIN FLAG (706); SCAT END; 70286000
|
|
INITIAL ~ TRUE; 70287000
|
|
STEPIT; 70288000
|
|
END; 70289000
|
|
TADDL [ADDLI~ADDLI+1]~ ABS (DIALS)& EVERYTHING; 70290000
|
|
IF INITIAL THEN TADDL [ADDLI ~ ADDLI + 1] ~ THI;70291000
|
|
INITIAL ~ SIMPLE ~ FALSE; 70292000
|
|
END 70293000
|
|
UNTIL ELCLASS ! COMMA; 70294000
|
|
IF ELCLASS ! RTPARN THEN FLAG (705); 70295000
|
|
INFO [LASTI] ~ INFO [LASTI] 70296000
|
|
&(NEXTADDL + ADDLI)[2:29:19] 70297000
|
|
& NEXTADDL [33:33:15]; 70298000
|
|
DONBUG ("LAYOUT", LSTINFO, 0); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%70299000
|
|
WHILE J ~ J + 1 { ADDLI DO PUTNBUMP (TADDL [J]); 70300000
|
|
ADDLI ~ INFO [LASTI].ADDRESS; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 70301000
|
|
BEGIN J~INFO[LASTI].LINK-1; WHILE J~J+1< ADDLI DO DONBUG("LAYOUT",0,J); 70302000
|
|
END; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%70303000
|
|
EXIT: STEPIT; 70304000
|
|
ADDLI ~ J ~ 0; 70305000
|
|
END 70306000
|
|
UNTIL ELCLASS ! COMMA; 70307000
|
|
GONE: 70307100
|
|
END LAYOUTDEC; 70308000
|
|
PROCEDURE PUTOGETHER (CHAR); 70309000
|
|
REAL CHAR; 70310000
|
|
BEGIN 70311000
|
|
DEFINE ADDLI = (GT1 ~ NEXTCHAR.[30:15]).LINKR, GT1.LINKC#; 70312000
|
|
INTEGER COUNT, EXCESS; 70313000
|
|
REAL GT1; 70314000
|
|
IF (CHARCOUNT ~ (COUNT ~ CHAR.CHRCNT) + CHARCOUNT)> 2047 THEN 70315000
|
|
BEGIN FLAG (708); BADSTUFF ~ TRUE END 70316000
|
|
ELSE BEGIN 70317000
|
|
IF COUNT > REMCOUNT 70318000
|
|
THEN BEGIN 70319000
|
|
COUNT ~ (COUNT -(EXCESS~ REMCOUNT)); 70320000
|
|
MOVECHARACTERACCUM 70321000
|
|
(EXCESS, CHAR, 0, ADDL[ADDLI], 70322000
|
|
NEXTCHAR.[45:3]); 70323000
|
|
DONBUG("PUTOGE", -EXCESS, GT1); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%70324000
|
|
NEXTCHAR ~ NEXTCHAR + EXCESS; 70325000
|
|
REMCOUNT ~ 2047; 70326000
|
|
END; 70327000
|
|
MOVECHARACTERACCUM 70328000
|
|
(COUNT, CHAR, EXCESS, ADDL[ADDLI], 70329000
|
|
NEXTCHAR.[45:3]); 70330000
|
|
DONBUG ("PUTOGE",-COUNT, GT1); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%70331000
|
|
NEXTCHAR ~ NEXTCHAR + COUNT; 70332000
|
|
REMCOUNT ~ REMCOUNT - COUNT; 70332500
|
|
END 70333000
|
|
END PUTOGETHER; 70334000
|
|
INTEGER PROCEDURE TEXT (FROM, FINAL); 70335000
|
|
VALUE FROM, FINAL; 70336000
|
|
INTEGER FROM, FINAL; 70337000
|
|
BEGIN COMMENT TEXT HANDLES THE PLACING OF A SEQUENCE OF VALID 70338000
|
|
SYMBOLS IN ADDL. THE PARAMETER FROM DETERMINES HOW THE 70339000
|
|
TRANSFER IS TERMINATED AND THE TERMINATING SYMBOL THAT IS 70340000
|
|
PLACED IN ADDL. CURRENTLY RECOGNIZED FROM(S) ARE: 70341000
|
|
DEFINEV = <TEXT> #, 70342000
|
|
FIELDEXPA OR LAYEXPA = <ARITHMETIC EXPRESSION> : 70343000
|
|
FIELDEXPB = <ARITHMETIC EXPRESSION> <, OR SEMICOLON> 70344000
|
|
IF THE VALUE OF TEXT IS } 0 THEN IT IS THE ADDL INDEX FOR 70345000
|
|
THE TEXT, OTHERWISE AN ERROR HAS OCCURRED. 70346000
|
|
FINAL IS THE ELCLASS FOR A POSSIBLE TERMINATING CHARACTER 70347000
|
|
OR A FUNCTION OF THE NUMBER OF SYMBOLS IN A FORMAL SYMBOL 70348000
|
|
LIST I.E. FINAL DIV 10 + 1 = NO. OF SYMBOLS. 70349000
|
|
;70350000
|
|
REAL TERMINATE; 70351000
|
|
BOOLEAN TERMINATOR, FIELDPARTA, FIELDPARTB; 70352000
|
|
INTEGER BRAKET, PARENS, PARCOUNT, J; 70353000
|
|
BOOLEAN DEFINPARAM; 70354000
|
|
BOOLEAN GOBBLER; 70354100
|
|
DEFINE FLOGGER = 70354200
|
|
IF REMCOUNT = 0 THEN REMCOUNT ~ 2047; 70354250
|
|
FLOG(DEFINESFLAG,ACCUM[9],ADDL[(GT1~NEXTCHAR.[30:15]).LINKR, 70354300
|
|
GT1.LINKC]); 70354400
|
|
NEXTCHAR ~ (GT3 ~ COUNT DIV 6) + NEXTCHAR; 70354500
|
|
CHARCOUNT ~ GT3 + CHARCOUNT; 70354550
|
|
REMCOUNT ~ REMCOUNT - GT3; 70354575
|
|
DONBUG ("FLOGER",-COUNT DIV 6, GT1);#; %%%%%%%%%%%%%%%%%%%%%%%70354600
|
|
LABEL ON, AWAY; 70355000
|
|
LABEL WAY; 70355100
|
|
INTEGER LASTRESULT, CONTEX; 70356000
|
|
IF FROM =DEFINEV THEN PARCOUNT ~ FINAL; 70357000
|
|
FIELDPARTA ~ FROM = FIELDEXPA; 70358000
|
|
FIELDPARTB ~ FROM =FIELDEXPB; 70359000
|
|
IF DEFINPARAM ~ FROM =DEFINEP THEN TERMINATE ~ "1#000"; 70360000
|
|
CHARCOUNT ~ 0; 70361000
|
|
REMCOUNT ~ (256 - NEXTADDL MOD 256) | 8; 70362000
|
|
NEXTCHAR ~ 0 & NEXTADDL [30:33:15]; 70363000
|
|
DOUBLE (CONTEXT, 3, ~, CONTEX, CONTEXT); 70364000
|
|
WHILE NOT (TERMINATOR OR BADSTUFF) 70365000
|
|
DO BEGIN 70366000
|
|
IF ELCLASS = STRNGCON OR ELCLASS =STRING 70367000
|
|
THEN BEGIN 70367300
|
|
WHILE NEXTCHAR.[45:3] ! 7 70367600
|
|
DO PUTOGETHER ("1 000"); 70368000
|
|
PUTOGETHER (33292288); % 1"000 70368300
|
|
FLOGGER; 70369000
|
|
IF ELCLASS = STRING 70370000
|
|
THEN DO BEGIN 70370300
|
|
GOBBLER ~ GOBBLE (FALSE); 70370600
|
|
FLOGGER; 70371000
|
|
END UNTIL NOT GOBBLER; 70371300
|
|
PUTOGETHER (33292288); % 1"000 70371600
|
|
END 70372000
|
|
ELSE BEGIN 70373000
|
|
IF FROM = DEFINEP AND ELCLASS } LFTPRN 70374000
|
|
OR FIELDPARTB 70375000
|
|
THEN BEGIN 70376000
|
|
PARENS~PARENS+REAL(ELCLASS=LFTPRN); 70377000
|
|
PARENS~PARENS-REAL(ELCLASS=RTPARN); 70378000
|
|
BRAKET~BRAKET+REAL(ELCLASS=LFTBRKT); 70379000
|
|
BRAKET~BRAKET-REAL(ELCLASS=RTBRKT ); 70380000
|
|
END 70381000
|
|
ELSE IF FROM = DEFINEV AND ELCLASS < NULLV 70382000
|
|
THEN IF PARCOUNT ! 0 THEN 70383000
|
|
BEGIN 70384000
|
|
J ~ 1; 70385000
|
|
DO BEGIN 70386000
|
|
IF (GTB1 ~ DEFINFO[J] =ACCUM[1]) 70387000
|
|
AND COUNT < 5 70387100
|
|
THEN GO ON 70388000
|
|
ELSE IF COUNT > 4 70389000
|
|
AND GTB1 70389050
|
|
THEN IF CMPCHREQL (COUNT -4,70389100
|
|
ACCUM[2],DEFINFO[J+1]) 70390000
|
|
THEN BEGIN 70391000
|
|
ON: ACCUM[1]~DEFINFO[J-1]; 70392000
|
|
GO AWAY; 70393000
|
|
END 70394000
|
|
END 70395000
|
|
UNTIL J ~ J + 10 > PARCOUNT; 70396000
|
|
END; 70397000
|
|
AWAY: 70398000
|
|
IF LASTRESULT < SPASE AND RESULT < SPASE 70399000
|
|
THEN PUTOGETHER ("1 000"); 70400000
|
|
PUTOGETHER (ACCUM [1]); 70401000
|
|
IF ELCLASS=SEMICOLON AND FIELDPARTA THEN 70401100
|
|
BEGIN BADSTUFF~TRUE; GO WAY END; 70401200
|
|
END; 70402000
|
|
LASTRESULT ~ RESULT; 70403000
|
|
IF ELCLASS = DEFINEV THEN DEFINECTR ~ DEFINECTR + 1; 70404000
|
|
IF ACCUM[1] ! "1#000" THEN 70404100
|
|
IF MACRO THEN STEPIT 70405000
|
|
ELSE BEGIN ELCLASS~TABLE(NXTELBT); NXTELBT~NXTELBT-1 END; 70406000
|
|
IF TERMINATOR~FROM=DEFINEV AND ELCLASS=CROSSHATCH 70407000
|
|
THEN BEGIN TERMINATE ~ ACCUM [1]; STEPIT; 70408000
|
|
IF DEFINECTR > 1 70409000
|
|
THEN TERMINATOR ~ DEFINECTR ~ DEFINECTR - 70410000
|
|
REAL(ELCLASS ! COMMA) = 0; 70411000
|
|
IF NOT TERMINATOR 70412000
|
|
THEN PUTOGETHER (TERMINATE); 70413000
|
|
END 70414000
|
|
ELSE IF TERMINATOR ~ (FIELDPARTA AND ELCLASS = FINAL)70415000
|
|
OR (FIELDPARTB 70416000
|
|
AND (ELCLASS = FINAL OR ELCLASS = COMMA 70417000
|
|
OR (ELCLASS = RTPARN AND PARENS = 0) 70418000
|
|
OR ELCLASS = ASSNOP)) 70419000
|
|
THEN TERMINATE ~ "1;000" 70420000
|
|
ELSE TERMINATOR ~ DEFINPARAM AND 70421000
|
|
(ELCLASS=COMMA OR ELCLASS=FINAL) 70422000
|
|
AND (BRAKET+PARENS= 0); 70423000
|
|
END; 70424000
|
|
WAY: 70424500
|
|
IF BADSTUFF 70425000
|
|
THEN TEXT ~ - NEXTADDL 70426000
|
|
ELSE BEGIN 70427000
|
|
PUTOGETHER (TERMINATE); 70428000
|
|
TEXT ~ NEXTADDL; 70429000
|
|
END; 70430000
|
|
PUTOGETHER ("1#000"); 70431000
|
|
NEXTADDL ~ (CHARCOUNT + 7) DIV 8 + NEXTADDL; 70432000
|
|
CONTEXT ~ CONTEX; 70433000
|
|
END PLACING TEXT IN ADDL; 70434000
|
|
PROCEDURE DEFINEDEC; 70435000
|
|
BEGIN COMMENT DEFINEDEC PROCESSES THE DECLARATION 70436000
|
|
<DEFINE DECLATION> ::= DEFINE <DEFINITION LIST>. IF AN IDENTI-70437000
|
|
FIER IS ENTERED, THE MINIMUM ADDL ENTRY IS A #; 70438000
|
|
DEFINE SCAT = DO UNTIL STEPI = CROSSHATCH; 70439000
|
|
IF STEPI = COMMA 70440000
|
|
THEN GO BACK ELSE WHILE ELCLASS ! SEMICOLON DO STEPIT; 70441000
|
|
GO EXIT;#; 70442000
|
|
INTEGER LSTINFO, DEFI; 70443000
|
|
INTEGER CONTEX; 70443100
|
|
LABEL BACK, EXIT; 70444000
|
|
DO BEGIN 70445000
|
|
BACK: BADSTUFF ~ FALSE; 70446000
|
|
DEFINECTR ~ 1; 70447000
|
|
IF STEPI ! UNKNOWNID 70448000
|
|
THEN BEGIN FLAG (700); SCAT END; 70449000
|
|
GTB1 ~ ENTER (0, LOCALTYPE, DEFINDID, FALSE); 70450000
|
|
70451000
|
|
70452000
|
|
LSTINFO ~ LASTINFO; 70453000
|
|
IF STEPI = LFTPRN 70454000
|
|
THEN BEGIN %PROCESS PARAMETERS 70455000
|
|
DEFI ~ -9; 70456000
|
|
DO BEGIN 70457000
|
|
IF DEFI ~ DEFI + 10 > 90 70458000
|
|
THEN BEGIN FLAG (749); SCAT END; 70459000
|
|
IF STEPI > NULLV % MUST BE IN ID70460000
|
|
THEN BEGIN FLAG(747); SCAT END; 70461000
|
|
MOVE (GTI1~(Q.CHRCNT+11)DIV 8, 70462000
|
|
ACCUM[1], DEFINFO[DEFI]); 70463000
|
|
END UNTIL STEPI ! COMMA; 70464000
|
|
IF ELCLASS ! RTPARN 70465000
|
|
THEN BEGIN FLAG(749); SCAT END; 70466000
|
|
INFO [(GT1~ LSTINFO).LINKR, 70467000
|
|
GT1.LINKC].ADDRESS ~ DEFI; 70468000
|
|
STEPIT; 70469000
|
|
END; 70470000
|
|
70471000
|
|
IF ELCLASS ! RELOP OR ELBAT[I].DISP ! EQUL 70472000
|
|
THEN BEGIN 70473000
|
|
FLAG (710); 70474000
|
|
BADSTUFF ~ TRUE; 70475000
|
|
GT1 ~ TEXT (DEFINEV, DEFI); 70476000
|
|
SCAT; 70477000
|
|
END; 70478000
|
|
DOUBLE (CONTEXT, 3, ~, CONTEX, CONTEXT); 70478100
|
|
STEPIT; 70479000
|
|
CONTEXT ~ CONTEX; 70479100
|
|
INFO [LSTINFO.LINKR,LSTINFO.LINKC].LINK ~ NEXTADDL; 70479500
|
|
DONBUG ("DEFINE", LSTINFO, 0); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 70479600
|
|
70479700
|
|
IF TEXT (DEFINEV, DEFI) <0 70480000
|
|
THEN BEGIN SCAT END; 70481000
|
|
END UNTIL ELCLASS ! COMMA; 70482000
|
|
EXIT: DEFINECTR ~ 0; 70483000
|
|
END DEFINE DECLARATION; 70484000
|
|
PROCEDURE PROCEDUREDEC(SAV,KLASS); VALUE SAV,KLASS; 70485000
|
|
BOOLEAN SAV; INTEGER KLASS; 70486000
|
|
COMMENT PROCEDUREDEC COMPILES A PROCEDURE DECLARATION. SAV IS TRUE 70487000
|
|
FOR SAVE, AND KLASS IS THE ELCLASS FOR THE THING; 70488000
|
|
BEGIN ARRAY TEDOC[0:31,0:255]; 70489000
|
|
LABEL BYPASS,SGMENT,SAVE1; 70489100
|
|
INTEGER X, Z, 70490000
|
|
PROINFO, % INFO INDEX OF THE ENTRY WE MAKE 70491000
|
|
NINFOOO, % OLD VALUE OF NINFOO 70492000
|
|
SEGNOO, 70493000
|
|
LASTXO, 70494000
|
|
FIRSTXO, 70495000
|
|
FIRSTMTO, LO, 70496000
|
|
PADDL, % ADDL INDEX FOR THE PROCEDURE STUFF 70497000
|
|
PINFO, % FIRST PARAMETER INFO INDEX 70498000
|
|
DSP; % DISPLACEMENT VALUE FOR PARAM ADDRESSES 70499000
|
|
BOOLEAN SEGED, %PROCEDURE BODY IS A SEGMENT 70500000
|
|
SEPARATOGO, % OLD "SEPARATOG" 70500500
|
|
SVINFOO, % OLD "SVINFO" 70500600
|
|
BLOCKED; % BODU IS A BLOCK 70501000
|
|
REAL Y,P, 70502000
|
|
CQAO, % COUNTQALG SAVED HERE 70502100
|
|
ELBW, % ELBAT WORD FOR THE PROCEDURE. 70503000
|
|
FELBW, % ELBAT WORD OF THE FORWARD DEC, IF ANY 70504000
|
|
NP; % FIRST ADDL WORD FOR THE PROCEDURE. 70505000
|
|
DEFINE FWD = FELBW ! 0#; 70506000
|
|
IF SVINFOTOG THEN ELSE 70506200
|
|
BEGIN 70506300
|
|
SVINFOO~SVINFO; 70506400
|
|
SVINFO~FALSE; 70506500
|
|
END; 70506600
|
|
CONTEXT ~ 0; % ITS DECLARATION TIME 70507000
|
|
IF STEPI ! UNKNOWNID THEN % PROCID MATCHES A LOCAL ID 70508000
|
|
IF ELBAT[I].TYPE ! F0RWARD THEN FLAG(731) ELSE 70509000
|
|
IF ELCLASS ! KLASS THEN FLAG(730) ELSE 70510000
|
|
FELBW ~ ELBAT[I]; % ITS OK--WAS DECLARED FWD WITH SAME TYPE 70511000
|
|
IF BOOLEAN(X~REAL(REAL(SEPARATOG AND BOOLEAN(3))!0)) THEN 70511200
|
|
BEGIN 70511400
|
|
IF (GLOBLCNT~GLOBLCNT+1).[16:5]>2 THEN FLAG(791); 70511600
|
|
GLOBALINDEX; % PRINT PRT FOR GLOBAL IF "PRTOG" IS SET 70511800
|
|
END; 70512000
|
|
TB1~ENTER(IF FWD THEN FELBW.ADDRESS ELSE 70512200
|
|
IF BOOLEAN(X) THEN GLOBLCNT ELSE CURRENT, 70512400
|
|
WITHINBODY, KLASS, NOT(FWD OR BOOLEAN(X))); 70512600
|
|
IF SEPARATOGO~SEPARATOG THEN 70512800
|
|
BEGIN 70513000
|
|
SEPSTR[12]~" "; 70513100
|
|
MOVECHARACTERS(X~MIN(7,COUNT),ACCUM[1],4,SEPSTR[12],1); 70513200
|
|
FILL TEMP WITH SEPSTR[12]; 70513300
|
|
SEPSTR[12].[1:5]~X; 70513350
|
|
WRITE(TEMP); % SAVE THE 1ST RECORD FOR DIRECTORY. 70513400
|
|
END; 70513500
|
|
ELBW ~ TAKE(PROINFO ~ LASTINFO) & PADDL ~ NEXTADDL [33:33:15]; 70514000
|
|
PUT(ELBW,PROINFO); 70515000
|
|
PUTNBUMP(0); % RESERVE CELL FOR 1ST ADDL WORD 70516000
|
|
DSP ~ 1; % PREPARE FOR ADDRESS CALCULATIONS 70517000
|
|
NINFOOO ~ NINFOO; 70518000
|
|
X ~ PINFO ~ NINFOO ~ NEXTINFO; 70519000
|
|
CONTEXT ~ 2; 70520000
|
|
IF STEPI = LFTPRN THEN % IF ANY PARAMETERS... 70521000
|
|
NP ~ FORMALPARAPART(FALSE) % THEN HANDLE THEM 70522000
|
|
ELSE 70523000
|
|
IF ELCLASS ! SEMICOLON THEN FLAG(736) ELSE STEPIT; 70524000
|
|
FOR Z ~ 1 STEP 1 UNTIL NP DO % FOR EACH PARAMETER 70525000
|
|
BEGIN % X POINTS TO FIRST PARAM INFO 70526000
|
|
IF (P~Y~TAKE(X)).CLASS = 0 THEN P~Y~TAKE(X~Y); 70527000
|
|
P.LINK ~ P.ADDRESS; % FMLPARAPART PUTS LINK IN 70528000
|
|
P.LVEL ~ CURRENT + 1; % AND WE ASSIGN ADDRESSES 70529000
|
|
P.DISP ~ DSP ~ DSP + 1; 70530000
|
|
PUT(P,X); 70531000
|
|
IF P.CLASS = FORMALID THEN % NO SPECIFICATION FOR THISUN 70532000
|
|
FLAG(732) ELSE % CHANGE TO PURGE-TYPE ACTION 70533000
|
|
IF P.CLASS=DPID OR P.CLASS=EVENTID THEN 70534000
|
|
DSP ~ REAL (P.TYPE = FORMALVALUEP) + DSP ELSE 70535000
|
|
IF P.CLASS } BOOARRAYID AND P.CLASS { EVENTARRAYID THEN 70536000
|
|
P.LINK ~ GIT(P).NODIM; 70537000
|
|
PLACE(P)"INTO ADDL AT"(PADDL + Z); 70538000
|
|
X ~ Y.LINK %X NOW POINTS TO NEXT PARAM ENTRY 70539000
|
|
END OF PARAMETER FUTZING; 70540000
|
|
IF ELCLASS { IDMAX THEN 70540100
|
|
IF X ~ ELBAT[I].LINK } PINFO THEN 70540200
|
|
ELBAT[I].ADDRESS ~ TAKE(X).ADDRESS; 70540300
|
|
IF FWD THEN 70541000
|
|
IF GIT(X ~TAKE(FELBW).LINK).LINK!NP THEN FLAG(733) ELSE 70542000
|
|
FOR Y ~ 1 STEP 1 UNTIL NP DO % CHECK CORRESPONDENCE WITH FWDEC70543000
|
|
IF GIT(X + Y) ! GIT(PADDL + Y) THEN FLAG(734); 70544000
|
|
IF KLASS ! PROCID THEN 70545000
|
|
NP.ADDRESS ~(DSP ~ DSP + 1)&(CURRENT + 1)[30:42:6]; 70546000
|
|
COMMENT THAT SHOULD TAKE CARE OF THE PROCEDURE HEAD. NOW WE TRY 70547000
|
|
FOR A BODY-- OR AT LEAST A "FORWARD"; 70548000
|
|
PLACE(NP,PADDL); 70549000
|
|
IF ELCLASS=EXTERNALV THEN 70549100
|
|
IF SEPARATOG THEN 70549150
|
|
BEGIN % TIME FOR SEPARATED PROCEDURE DECLARATIONS, 70549200
|
|
FLAG(788); % IT SHOULDNT HAVE AN "EXTERNAL" IN ANY SENSE.70549250
|
|
GO BYPASS; 70549300
|
|
END ELSE 70549350
|
|
IF REAL(SEPARATOG)=2 THEN % TIME FOR GLOBAL DECLARATIONS, IT 70549400
|
|
GO BYPASS ELSE % IS A GLOBAL PROC DECLARATION. 70549450
|
|
BEGIN % WE ARE DOING REGULAR COMPILATION, IT IS AN EXTRNL DEC.70549500
|
|
EXTRNLCNT~EXTRNLCNT+REAL(SVINFO~XTRNL~TRUE); 70549550
|
|
SEGNOO~NEWSEG(PROINFO+1); 70549560
|
|
PURGE(NEXTINFO~IF FWD THEN PROINFO ELSE PINFO); 70549570
|
|
IF FWD THEN PROINFO~FELBW.LINK; 70549580
|
|
PUT(TAKE(PROINFO)&LOCALTYPE[29:45:3],PROINFO); 70549590
|
|
NINFOO~NINFOOO; 70549600
|
|
NEXTADDL~IF FWD THEN PADDL ELSE PADDL+NP.LINK+1; 70549610
|
|
SEGDICT(SEGNOO,0,0,0); 70549630
|
|
LO~L; % THE L VALUE OF "MPCW" 70549640
|
|
IF SEGED~SEPARATOG OR CURRENT>0 THEN 70549650
|
|
BEGIN 70549653
|
|
EMITPCW(CURRENT+1,0,STATE,SEGNOO); 70549656
|
|
IF FWD THEN 70549658
|
|
BEGIN 70549660
|
|
EMITN(TAKE(PROINFO).ADDRESS); 70549662
|
|
EMIT(STOD); 70549664
|
|
END; 70549666
|
|
END ELSE 70549668
|
|
GLOBALPCW(ELBW.DISP,SEGNOO,0,STATE); 70549670
|
|
INFD[(GT3~INFDX~INFDX+1).LINKR,INFDX.LINKC]~PCW; 70549680
|
|
INFD[(INFDX~INFDX+1).LINKR,INFDX.LINKC]~NEXTINFO& 70549690
|
|
(GT1~((GT2~TAKE(PROINFO+1)).CHRCNT+35)DIV 8) 70549700
|
|
[18:33:15]&KLASS[1:41:7]; 70549710
|
|
INFD[(INFDX~INFDX+1).LINKR,INFDX.LINKC]~ 70549720
|
|
PROINFO&(IF SEGED THEN LO&SEGNO[20:35:13] ELSE 70549730
|
|
ELBW.DISP)[5:20:28]; 70549740
|
|
INFD[(INFDX~INFDX+1).LINKR,INFDX.LINKC]~ 70549750
|
|
GT2&LASTEXT[3:33:15]; 70549760
|
|
LASTEXT~GT3; 70549770
|
|
IF GT1}5 THEN 70549780
|
|
BEGIN 70549790
|
|
MOVE(GT1-4,INFO[PROINFO.LINKR,PROINFO.LINKC+2], 70549800
|
|
INFD[(INFDX~INFDX+1).LINKR,INFDX.LINKC]); 70549810
|
|
INFDX~INFDX+GT1-5; 70549820
|
|
END; 70549825
|
|
XTRNL~FALSE; 70549830
|
|
STEPIT; 70549835
|
|
END ELSE 70549990
|
|
IF ELCLASS = FORWARDV THEN 70550000
|
|
BEGIN 70551000
|
|
IF FWD THEN FLAG(735) ELSE % OOOOOPS...... 70552000
|
|
IF SEPARATOG THEN FLAG(789) ELSE 70552100
|
|
IF REAL(SEPARATOG)!2 THEN % =2: GLOBAL DEC FOR SEPA COMP.70552150
|
|
IF CURRENT>0 THEN 70552200
|
|
BEGIN JUMPCHKX; EMIT(ZERO) END; 70552300
|
|
BYPASS: PURGE(NINFOO); % DISPOSE OF THE PARAM INFO 70553000
|
|
ELBW.TYPE ~ F0RWARD; 70554000
|
|
PUT(ELBW, LASTINFO ~ PROINFO); 70555000
|
|
NEXTINFO ~ NINFOO; 70556000
|
|
NINFOO ~ NINFOOO; 70557000
|
|
NEXTADDL ~ PADDL + NP.LINK + 1; 70558000
|
|
STEPIT; 70558100
|
|
END FORWARD DECLARARATION ELSE 70559000
|
|
IF ELCLASS = NULLV THEN 70559100
|
|
BEGIN 70559200
|
|
ELBW ~ TAKE(ELBAT[I-2]) & ELBW [21:21:7]; 70559300
|
|
PUT(ELBW,LASTINFO ~ PROINFO); 70559400
|
|
NEXTINFO ~ NINFOO; 70559500
|
|
NINFOO ~ NINFOOO; 70559600
|
|
NEXTADDL ~ PADDL + NP.LINK + 1; 70559700
|
|
STEPIT; 70559800
|
|
END ELSE 70559900
|
|
COMMENT THE HEAD GOTS A BODY; 70560000
|
|
BEGIN 70561000
|
|
IF SEPARATOG THEN SEPARATOG~BOOLEAN(4) ELSE 70561100
|
|
IF REAL(SEPARATOG)=2 THEN FLAG(790); 70561200
|
|
MAXDISP ~ STACKMASK[CURRENT ~ CURRENT + 1].[FF]; 70562000
|
|
STACKTOP[CURRENT] ~ MAXSTACK[CURRENT] ~ 70563000
|
|
REAL(KLASS = DPPROCID) + DSP + 1; 70564000
|
|
TB1 ~ SAV; SAV ~ SAVED; SAVED ~TB1; 70565000
|
|
SEGNOO ~ SEGNO; 70566000
|
|
CONTEXT ~ 2; 70567000
|
|
IF ELCLASS = BEGINV THEN 70568000
|
|
IF BLOCKED ~GT1~TABLE(I+1)}MINDEC AND GT1{MAXDEC THEN 70569000
|
|
SGMENT: IF SEGED~NOT SAVED THEN 70570000
|
|
BEGIN % NEW SEGMENT REQUIRED 70571000
|
|
IF REAL(SEPARATOGO)=4 THEN 70571100
|
|
BEGIN 70571200
|
|
SEGED~NOT(SAVED~TRUE); 70571400
|
|
GO TO SAVE1; 70571500
|
|
END ELSE 70571600
|
|
SAVED~SEPARATOGO; 70571700
|
|
SEGNO ~ NEWSEG(PROINFO+1); 70572000
|
|
MOVECODE(TEDOC,EDOC); 70573000
|
|
LO ~ L; L ~ 0; 70574000
|
|
GO TO SAVE1; 70574500
|
|
END; 70575000
|
|
IF SEPARATOGO THEN GO TO SGMENT; 70575050
|
|
SAVE1: IF SAVED.[46:1] THEN 70575100
|
|
BEGIN 70575200
|
|
LO ~ L; SEGNO ~ 1; 70575300
|
|
L ~ IF SAVEL = 0 THEN SAVEL ~18 ELSE SAVEL; 70575400
|
|
MOVECODE(EDOC,INZCODE); 70575500
|
|
END ELSE 70575900
|
|
IF NOT SEGED THEN JUMPCHKNX; 70576000
|
|
LASTXO ~ LASTX; FIRSTXO ~ FIRSTX; FIRSTMTO ~ FIRSTMT; 70577000
|
|
LASTX ~ FIRSTX ~ FIRSTMT ~ -1; 70578000
|
|
X~L; % THIS STORES THE STARTING L FOR SEPARATED COMPILING70578100
|
|
70579000
|
|
IF KLASS ! PROCID THEN 70580000
|
|
BEGIN 70581000
|
|
JUMPCHKX; %GOT TO INITIALIZE THE VALUE CELL 70582000
|
|
EMIT(ZERO); 70583000
|
|
IF KLASS = DPPROCID THEN EMIT(XTND) ELSE 70584000
|
|
IF KLASS = REFPROCID THEN 70585000
|
|
BEGIN EMITNUM(5); EMIT(STAG) END 70586000
|
|
END; 70587000
|
|
LASTINDEX ~ LASTNOT ~ 0; 70588000
|
|
P~NEXTADDL; 70588500
|
|
NINFOO ~ NEXTINFO; 70589000
|
|
CQAO ~ COUNTQALG; COUNTQALG ~ STARTNSQ; 70589100
|
|
Y ~ STACKTOP[CURRENT - 1]; 70590000
|
|
IF BLOCKED THEN 70591000
|
|
BEGIN 70592000
|
|
BEGINCTR ~ BEGINCTR + 1; 70593000
|
|
DECLARATIONS; 70594000
|
|
FIRSTATEMENT; 70596000
|
|
70597000
|
|
COMPOUNDTAIL; 70598000
|
|
IF SVINFO THEN 70598100
|
|
BEGIN 70598150
|
|
WRITEFILE(INFF,INFO,NINFOO,NEXTINFO-1); 70598200
|
|
WRITEFILE(INFF,ADDL,P,NEXTADDL-1); 70598250
|
|
INFD[(INFDX~INFDX+2).LINKR,INFDX.LINKC] ~ 70598300
|
|
(GTI1~(NEXTINFO-NINFOO+29)DIV 30+INFFX)& 70598350
|
|
INFFX[18:33:15]; 70598400
|
|
INFD[(INFDX~INFDX+1).LINKR,INFDX.LINKC] ~ 70598450
|
|
(NEXTINFO-1)&NINFOO[18:33:15]& 70598500
|
|
(NINFOO-STARTINFO)[3:33:15]; 70598550
|
|
INFD[(INFDX~INFDX+1).LINKR,INFDX.LINKC] ~ 70598600
|
|
(NEXTADDL-1)&P[18:33:15]& 70598650
|
|
(P-STARTADDL)[3:33:15]; 70598700
|
|
INFFX~(NEXTADDL-P+29) DIV 30 + GTI1; 70598750
|
|
END; 70598900
|
|
END ELSE 70600000
|
|
BEGIN 70601000
|
|
FIRSTATEMENT; 70601100
|
|
STATEMENT 70601200
|
|
END PROCEDURE BODY; 70601300
|
|
COMMENT SO MUCH FOR THE PROCEDURE. NOW TO CLEAN UP ALL THAT MESS; 70602000
|
|
NINFOO ~ NINFOOO; 70603000
|
|
COMMENT THE FOLLOWING APPLIES TO CODE AT 70616500-700; 70605000
|
|
COMMENT IF A PROCEDURE HAD BEEN DECLARED FORWARD, WE 70606000
|
|
MAKE A COMPLETE NEW ENTRY IN INFO AT THE ACTUAL 70607000
|
|
DECLARATION. THE CODE JUST ABOVE HAS REMOVED THE 70608000
|
|
DUPLICATE ENTRY, AS WELL AS THE PARAMETER ENTRIES; 70609000
|
|
IF REAL(ARRAYDECTOG AND BOOLEAN(2*CURRENT))!0 THEN 70609150
|
|
BEGIN 70609200
|
|
EMIT(MKST); 70609300
|
|
EMITN(BLOCKEXITPCW); 70609400
|
|
EMIT(ENTR); 70609500
|
|
ARRAYDECTOG~ARRAYDECTOG AND NOT BOOLEAN(2*CURRENT); 70609540
|
|
END; 70609600
|
|
IF KLASS = PROCID THEN EMIT(EXIT) ELSE 70610000
|
|
BEGIN 70611000
|
|
IF KLASS=REFPROCID OR KLASS=PTRPROCID OR KLASS 70612000
|
|
=WORDPROCID THEN 70612500
|
|
EMITPAIR(NP.ADDRESS,LODT ) ELSE 70613000
|
|
EMITV(NP.ADDRESS); 70614000
|
|
EMIT(RETN); 70615000
|
|
END; 70616000
|
|
PURGE(NEXTINFO~IF FWD THEN PROINFO ELSE PINFO); 70616500
|
|
NEXTADDL~IF FWD THEN PADDL ELSE PADDL + NP.LINK +1; 70616700
|
|
IF SEGED THEN 70617000
|
|
BEGIN 70618000
|
|
WHILE L MOD 6 ! 0 DO EMIT(NVLD); 70619000
|
|
SEGDICT(SEGNO,TEMPADDR,L DIV 6, 0); 70620000
|
|
SEGMENT( (IF FWD THEN PROINFO ~ FELBW.LINK 70621000
|
|
ELSE PROINFO)+1, L DIV 6, EDOC); 70622000
|
|
MOVECODE(TEDOC,EDOC); 70623000
|
|
DSP~L; % THIS STORES THE LAST L FOR SEPARATED COMPLG70623500
|
|
L ~ LO; LASTINDEX ~ LASTNOT ~ 0; 70624000
|
|
DOUBLE(SEGNO,SEGNOO,~,SEGNOO,SEGNO); 70625000
|
|
END ELSE 70626000
|
|
BEGIN 70626100
|
|
DSP~L; % THIS STORES THE LAST L OF THIS LEVEL 70626120
|
|
IF FWD THEN PROINFO~FELBW.LINK; 70626140
|
|
END; 70626160
|
|
IF SAVED.[46:1] THEN 70626200
|
|
BEGIN 70626300
|
|
MOVECODE(EDOC,INZCODE); 70626400
|
|
SAVEL ~ L; L ~ LO; SEGNO ~ SEGNOO; SEGNOO~ 1; 70626500
|
|
LASTINDEX ~ LASTNOT ~ 0; 70626600
|
|
END; 70626900
|
|
LO ~ IF FIRSTX < 0 THEN FIRSTMT ELSE FIRSTX; 70627000
|
|
FIRSTX ~ FIRSTXO; LASTX ~ LASTXO; 70628000
|
|
COUNTQALG ~ CQAO; 70628100
|
|
FIRSTMT ~ FIRSTMTO; 70629000
|
|
SAVED ~ SAV; 70630000
|
|
IF SEPARATOG~SEPARATOGO THEN 70630300
|
|
EMITPCW(CURRENT,LO,STATE,SEGNOO) ELSE 70630600
|
|
IF CURRENT = 1 THEN 70631000
|
|
GLOBALPCW(ELBW.DISP,SEGNOO,LO,STATE) ELSE 70632000
|
|
BEGIN 70633000
|
|
JUMPCHKX; 70634000
|
|
EMITPCW(CURRENT,LO,STATE,SEGNOO); 70635000
|
|
IF FWD THEN 70635100
|
|
BEGIN 70635150
|
|
EMITN(TAKE(PROINFO).ADDRESS); 70635200
|
|
EMIT(STOD); 70635250
|
|
END; 70635300
|
|
ENTERSEPA(((L-6)DIV 6),DSP,X); 70635500
|
|
X ~ STACKTOP[CURRENT-1]; 70636000
|
|
WHILE Y~Y+1{X DO EMIT(ZERO); 70637000
|
|
END; 70638000
|
|
PUT(TAKE(PROINFO)&LOCALTYPE[29:45:3],PROINFO); 70639000
|
|
IF SVINFO THEN 70639100
|
|
INFD[(GTI1+INFDX-3).LINKR,GTI1.LINKC]~PCW; 70639200
|
|
IF SVINFOTOG THEN ELSE SVINFO~SVINFO OR SVINFOO; 70639800
|
|
MAXDISP ~ STACKMASK[CURRENT ~ CURRENT-1].[FF]; 70640000
|
|
END BODY OF THE PROCEDURE 70641000
|
|
END OF THE PROCEDURE DECLARARION; 70642000
|
|
INTEGER PROCEDURE FORMALPARAPART(Q); VALUE Q; BOOLEAN Q; 70643000
|
|
COMMENT FORMALPARAPZRT HANDLES THE FORMAL PARAMETER LIST, VALUE 70644000
|
|
PART, AND SPECIFICATION PART FOR PROCEDURE AND QUEUE DECS. 70645000
|
|
Q IS TRUE FOR QUEUES. FMLPARAPART RETURNS THE NUMBER OF 70646000
|
|
PARAMETERS, AND SVAES THAT MANY SPOTS IN ADDL. 70647000
|
|
HE LEAVES FUNNY THINGS IN THE ELBAT WORDS IN INFO: 70648000
|
|
THE LINK FIELD POINTS TO THE ELBAT WORD FOR THE NEXT PARAM, AND70649000
|
|
THE LINK-FIELD-VALUE, AS APPROPRIATE, IS IN THE ADDRESS FIELD. 70650000
|
|
THE ADDRESS FIELD IS OTHERWISE MEANINGLESS; 70651000
|
|
BEGIN 70652000
|
|
INTEGER MARK,PJ,T; 70653000
|
|
LABEL ROUND, BACK ,FLUSH, ARRAI, SIMPLE; 70654000
|
|
LABEL SIMPLENV; 70654100
|
|
CONTEXT ~ 0; 70655000
|
|
MARK ~ NEXTINFO; 70656000
|
|
T ~ IF Q THEN FORMALNAMEQ ELSE FORMALNAMEP; 70657000
|
|
DO BEGIN 70658000
|
|
ROUND: IF STEPI ! UNKNOWNID THEN FLAG(739); 70659000
|
|
ERRORTOG ~ TRUE; 70659100
|
|
TB1 ~ 70660000
|
|
ENTER(0,T,FORMALID,FALSE); 70661000
|
|
PUT(TAKE(LASTINFO)&NEXTINFO[33:33:15],LASTINFO); 70662000
|
|
PJ ~ PJ + 1 70663000
|
|
END UNTIL STEPI ! COMMA; 70664000
|
|
IF ELCLASS = COLON THEN 70665000
|
|
BEGIN 70666000
|
|
IF Q THEN 70667000
|
|
IF INVISIBLE } MARK THEN FLAG(742) ELSE 70668000
|
|
INVISIBLE ~ NEXTINFO ELSE FLAG(742); 70669000
|
|
GO ROUND; 70670000
|
|
END; 70671000
|
|
NEXTADDL ~ (FORMALPARAPART ~ PJ) + NEXTADDL; 70672000
|
|
IF ELCLASS ! RTPARN THEN 70673000
|
|
BEGIN 70674000
|
|
FLAG(737); 70675000
|
|
FLUSH: WHILE ELCLASS ! SEMICOLON DO STEPIT; 70676000
|
|
ERRORTOG ~ TRUE; 70676100
|
|
END ELSE 70677000
|
|
STEPIT; 70678000
|
|
IF ELCLASS ! SEMICOLON THEN FLAG(738 ) ELSE STEPIT; 70679000
|
|
CONTEXT ~ 1; 70680000
|
|
T ~ IF Q THEN FORMALVALUEQ ELSE FORMALVALUEP; 70681000
|
|
IF ELCLASS ! VALUEV THEN ELCLASS ~ TABLE(I~I-1) ELSE 70682000
|
|
DO IF STEPI ! FORMALID THEN FLAG(747) ELSE 70683000
|
|
IF GT1~ELBAT[I].TYPE =FORMALVALUEP OR 70683100
|
|
GT1 = FORMALVALUEQ THEN 70683110
|
|
BEGIN FLAG(784); ERRORTOG ~ TRUE END ELSE 70683200
|
|
PUT(TAKE(ELBAT[I])&T[29:44:4],ELBAT[I]) 70684000
|
|
UNTIL STEPI ! COMMA; 70685000
|
|
BACK: MARK ~ 0; 70686000
|
|
CONTEXT ~ 2; 70687000
|
|
IF ELCLASS ! SEMICOLON THEN ERR(740) ELSE STEPIT; 70688000
|
|
CONTEXT ~ 1; 70689000
|
|
IF ELCLASS = TYPEV THEN 70690000
|
|
BEGIN 70691000
|
|
T ~ TAKE(ELBAT[I]).LINK ; 70692000
|
|
IF PJ ~ TABLE(I+1) = PROCV THEN 70693000
|
|
BEGIN T ~ T + BOOPROCID; STEPIT; GO TO SIMPLENV END; 70694000
|
|
IF PJ = ARRAYV THEN 70695000
|
|
BEGIN 70696000
|
|
IF T ~ T + BOOARRAYID = PCID THEN FLAG(741); 70697000
|
|
STEPIT; 70698000
|
|
GO TO ARRAI 70699000
|
|
END; 70700000
|
|
IF PJ > IDMAX THEN 70701000
|
|
BEGIN 70702000
|
|
FLAG(741); 70703000
|
|
WHILE ELCLASS>IDMAX AND ELCLASS!SEMICOLON DO STEPIT; 70704000
|
|
IF ELCLASS = SEMICOLON THEN GO BACK 70705000
|
|
END; 70706000
|
|
T ~ T + BOOID; 70707000
|
|
GO TO SIMPLE 70708000
|
|
END; 70709000
|
|
IF ELCLASS = ARRAYV THEN 70710000
|
|
BEGIN T ~ REALARRAYID; GO TO ARRAI END; 70711000
|
|
IF ELCLASS = PROCV THEN 70712000
|
|
BEGIN T ~ PROCID; GO TO SIMPLENV END; 70713000
|
|
IF ELCLASS = PITCHER THEN 70714000
|
|
BEGIN T ~ PCID; 70714100
|
|
SIMPLENV: COMMENT WE ARE HERE TO PROCESS SIMPLE SPECIFICATION THAT 70714200
|
|
DISALLOW VALUE BUSINESS; 70714300
|
|
DO IF STEPI ! FORMALID THEN FLAG(743) ELSE 70714400
|
|
BEGIN 70714500
|
|
IF (GT1~TAKE(ELBAT[I])).TYPE=FORMALVALUEP OR 70714600
|
|
GT1.TYPE=FORMALVALUEQ THEN FLAG(784); 70714610
|
|
PUT(GT1 & T [21:41:7],ELBAT[I]); 70714700
|
|
ERRORTOG ~ TRUE 70714800
|
|
END UNTIL STEPI ! COMMA; 70714900
|
|
GO BACK 70715000
|
|
END; 70715100
|
|
IF ELCLASS = EVENTV THEN 70716000
|
|
BEGIN 70717000
|
|
IF TABLE(I+1) = ARRAYV THEN 70718000
|
|
BEGIN 70719000
|
|
T ~ EVENTARRAYID; 70720000
|
|
STEPIT; 70721000
|
|
ARRAI: IF STEPI ! FORMALID THEN FLAG(743) ELSE 70722000
|
|
PUT((GT1~TAKE(ELBAT[I]))&T[21:41:7]&MARK 70723000
|
|
[6:33:15], MARK ~ ELBAT[I].LINK); 70724000
|
|
IF GT1.TYPE=FORMALVALUEP OR 70724100
|
|
GT1.TYPE=FORMALVALUEQ THEN 70724110
|
|
BEGIN FLAG(784); ERRORTOG ~ TRUE END; 70724200
|
|
IF STEPI = COMMA THEN GO TO ARRAI; 70725000
|
|
IF ELCLASS ! LFTBRKT THEN 70726000
|
|
BEGIN FLAG(744); GO FLUSH END; 70727000
|
|
PJ ~ 0; COMMENT TO COUNT DIMENSIONS; 70728000
|
|
DO IF STEPI ! FACTOP THEN FLAG(745) ELSE PJ~PJ+170729000
|
|
UNTIL STEPI ! COMMA; 70730000
|
|
DO PUT((GT1~TAKE(MARK))&NEXTADDL[6:33:15],MARK) 70731000
|
|
UNTIL MARK ~ GT1.ADDRESS = 0; 70732000
|
|
PUTNBUMP(PJ); 70733000
|
|
IF ELCLASS ! RTBRKT THEN 70734000
|
|
BEGIN FLAG(746 ); GO FLUSH END; 70735000
|
|
IF STEPI ! COMMA THEN GO BACK; 70736000
|
|
GO TO ARRAI 70737000
|
|
END ARRAY SPECIFICATION; 70738000
|
|
T ~ EVENTID; 70739000
|
|
SIMPLE: DO IF STEPI ! FORMALID THEN FLAG(743) ELSE 70740000
|
|
PUT(TAKE(ELBAT[I])&T[21:41:7],ELBAT[I]) 70741000
|
|
UNTIL STEPI ! COMMA; 70742000
|
|
GO BACK 70743000
|
|
END EVENT; 70744000
|
|
IF ELCLASS } MINDEC THEN 70745000
|
|
IF ELCLASS { MAXDEC THEN 70746000
|
|
BEGIN FLAG(741); GO FLUSH END; 70747000
|
|
END FORMAL PARAMETER PART; 70748000
|
|
PROCEDURE READONLYARRAYDEC(SAVEBIT,TYP); VALUE SAVEBIT,TYP; 70749000
|
|
BOOLEAN SAVEBIT; INTEGER TYP; 70750000
|
|
COMMENT THIS CODE HANDLES VALUE ARRAY DECLARATION AS: 70751000
|
|
SAVE <TYPE> VALUE ARRAY(<CONSTANT LIST>) 70752000
|
|
INITIALIZEARRAY PROCEDURE IS CALLED TO CREATE A SEGMENT 70753000
|
|
AND THEN APPROPRIATE PDPRT ENTRIES ARE MADE 70754000
|
|
SAVEBIT - FOR INDICATING SAVE ARRAY 70755000
|
|
TYP - CLASS OF IDENTIFIER TYPE; 70756000
|
|
BEGIN 70757000
|
|
LABEL STRT;% 70757100
|
|
IF STEPI!ARRAYV THEN ERR(718); %ARRAY WORD MISSING 70758000
|
|
TYP~BOOROAID+TYP; %MAKE APPROPRIATE READONLY ARRAY ID CLASS 70759000
|
|
STRT:% 70759100
|
|
IF STEPI!UNKNOWNID THEN ERR(719); %IDENTIFIER DECLARED BEFORE 70760000
|
|
TB1~ENTER(0,LOCALTYPE,TYP,TRUE);%GET STACK AND MAKE INFO ENTRY70761000
|
|
IF STEPI ! ASSNOP THEN FLAG(709); 70761100
|
|
INITIALIZEARRAY(TYP - BOOROAID); % PASS TYPE OF INITIAL VALUE 70762000
|
|
PDPRT[PPINX].[7:1]~1; 70763000
|
|
PDPRT[PPINX].[8:1]~IF SAVEBIT THEN 1 ELSE 0; 70764000
|
|
SAVESIZE~SAVESIZE+PDPRT[PPINX].[10:13]; 70764500
|
|
PDINX~PDINX+1; 70765000
|
|
IF STEPI=COMMA THEN GO TO STRT;% 70766000
|
|
END READONLYARRAYDEC; 70767000
|
|
PROCEDURE INITIALIZEARRAY(KLASS); VALUE KLASS; INTEGER KLASS; 70768000
|
|
COMMENT INITIALIZEARRAY HANDLES THE CONSTRUCT: 70769000
|
|
(<CONSTANT LIST>) 70770000
|
|
WHICH IS USED IN VALUE ARRAY DECLARATION AND ARRAY DECLARATION70771000
|
|
IT USES EDOC ARRAY FOR STORING CONSTANTS AND THEN CALLS 70772000
|
|
SEGMENT FOR CREATING SEGMENT.IT ALSO INSERTS SOME FIELDS IN 70773000
|
|
PDPRT ENTRY 70774000
|
|
KLASS- CLASS OF EXPECTED VALUES(BOOV,DPV,REALV,INTV OR PTRV) 70775000
|
|
KLASS=(READONLYARRAY IDENTIFIER CLASS)-26 OR 70776000
|
|
(ARRAY IDENTIFIER CLASS)-20; 70777000
|
|
BEGIN LABEL QUIT; 70778000
|
|
INTEGER INDEX, TINDEX; 70779000
|
|
ARRAY TEDOC[0:31,0:255]; 70780000
|
|
DEFINE MAXNTGR=549755813887#, 70781000
|
|
EDOCI=INDEX.[35:5],INDEX.[40:8]#; 70782000
|
|
IF STEPI!LFTPRN THEN ERR(720); 70783000
|
|
MOVECODE(EDOC,TEDOC); 70784000
|
|
TAX ~ TINDEX ~ INDEX ~ 0; 70785000
|
|
FILLDATA(0); 70786000
|
|
TINDEX ~ TAX DIV 2; 70787000
|
|
70788000
|
|
DO BEGIN 70789000
|
|
FLOG (TA[INDEX|2+1], TA[INDEX|2], 70790000
|
|
EDOC[EDOCI]); 70791000
|
|
END UNTIL INDEX ~ INDEX + 1 } TINDEX; 70792000
|
|
INDEX ~ TINDEX; 70793000
|
|
IF ELCLASS!RTPARN THEN ERR(723); %MISSING RIGHT PARANTHESIS 70808000
|
|
PDPRT[PPINX].[23:13]~TEMPADDR; 70808500
|
|
SEGMENT(LASTINFO+1, INDEX, EDOC); 70809000
|
|
MOVECODE(TEDOC,EDOC); 70810000
|
|
PDPRT[PPINX].[10:13]~INDEX; %INSERT ARRAY SIZE FIELD 70811000
|
|
PDPRT[PPINX].[36:12]~INFO[LASTINFO.LINKR,LASTINFO.LINKC]. 70812000
|
|
ADDRESS; 70813000
|
|
INFO[LASTINFO.LINKR,LASTINFO.LINKC].LINK~NEXTADDL; 70814000
|
|
PUTNBUMP(1); 70814500
|
|
IF KLASS=DPV THEN PDPRT[PPINX].[6:1]~1; 70815000
|
|
END INITIALIZEARRAY; 70816000
|
|
PROCEDURE ARRAYDEC(SAVEBIT,OWNBIT,KLASS); 70817000
|
|
VALUE SAVEBIT,OWNBIT,KLASS; 70818000
|
|
BOOLEAN SAVEBIT,OWNBIT; 70819000
|
|
INTEGER KLASS; 70820000
|
|
COMMENT THIS CODE HANDLES <ARRAY LIST> OF ARRAY DECLARATION: 70821000
|
|
<ARRAY KIND> ARRAY <ARRAY LIST> 70822000
|
|
IT ALSO HANDLES THE ARRAY DECLARATION AS A WHOLE BY USING 70823000
|
|
THE <ARRAY KIND> INFORMATION PASSED ON THROUGH PARAMETERS. 70824000
|
|
SAVEBIT- FOR INDICATING SAVE ARRAY 70825000
|
|
OWNBIT - FOR INDICATING OWN ARRAY 70826000
|
|
KLASS - CLASS OF ARRAY IDENTIFIER TYPE; 70827000
|
|
BEGIN LABEL LOOP,PASSRTBRKT,QUIT; 70828000
|
|
LABEL FINI,NEXTDIM,CHECKAGAIN,SKIP; 70828500
|
|
INTEGER CONTEX,NOOFID,TCURRENT; 70829000
|
|
INTEGER NOOFDIMS, 70829400
|
|
TNOOFID, %TEMPORARY FOR NOOFID 70829600
|
|
ARRAYTYPE; 70829700
|
|
BOOLEAN ADDRTOG, %ON MEANS ADDRESS PART IN SOURCE 70830000
|
|
DPTOG, %ON MEANS KLASS DP OR EVENT 70830500
|
|
ASTERIKTOG, % FIRST DIMENSION IS ASTERIK; 70830600
|
|
MULTIDIMTOG, 70830700
|
|
PDPRTOG; %GLOBAL SAVE ARRAY- MAKE PDPRT ENTRY 70831000
|
|
INTEGER OL; BOOLEAN CODE; 70831100
|
|
DEFINE SCAT=DO STEPIT UNTIL ELCLASS=COMMA OR ELCLASS=SEMICOLON70832000
|
|
; I~I-1; GO QUIT;#; 70833000
|
|
DEFINE ARRAYDECPCW=7#; 70833500
|
|
CONTEX~CONTEXT; %FUTZ UP THE SCANNER 70834000
|
|
70835000
|
|
JUMPCHKX; 70836000
|
|
TCURRENT~CURRENT; %STORES THE CURRENT LEVEL 70838000
|
|
IF KLASS=QUEUEARRAYID THEN 70838500
|
|
BEGIN QUEUEDEC(IF OWNBIT THEN GLOBAL ELSE CURRENT);GO FINI END;70838550
|
|
IF OWNBIT OR (SAVEBIT AND CURRENT=0) THEN %GLOBAL SAVE ARRAY 70839000
|
|
PDPRTOG~TRUE; 70840000
|
|
DPTOG~KLASS=EVENTARRAYID OR KLASS=DPARRAYID; 70840500
|
|
LOOP: 70841000
|
|
NOOFDIMS~1; 70841100
|
|
CONTEXT ~ NOOFID ~ 0; 70841200
|
|
OL ~ L; CODE ~ NOT PDPRTOG; 70841300
|
|
MULTIDIMTOG~ASTERIKTOG~ADDRTOG~FALSE; 70841500
|
|
DO BEGIN 70842000
|
|
IF STEPI!UNKNOWNID THEN 70843000
|
|
BEGIN FLAG(724); SCAT END; %ID DECLARED BEFORE 70844000
|
|
DEBLANK; %INITIALIZED ARRAY 70845000
|
|
IF CHR="~" THEN 70846000
|
|
BEGIN 70847000
|
|
IF KLASS=EVENTARRAYID THEN FLAG(783); 70847500
|
|
IF NOOFID!0 THEN %MORE THAN ONE IDENTIFIER 70848000
|
|
BEGIN FLAG(725); SCAT END;%DECLARED BEFORE ~ 70849000
|
|
TB1~ENTER(0,LOCALTYPE,KLASS,TRUE); 70850000
|
|
STEPIT; 70851000
|
|
INITIALIZEARRAY(KLASS-20); 70852000
|
|
IF CURRENT ! 0 THEN FLAG(717); 70852100
|
|
PDPRT[PPINX].[8:1]~REAL(SAVEBIT OR OWNBIT); 70853000
|
|
SAVESIZE~PDPRT[PPINX].[10:13]+SAVESIZE; 70853500
|
|
PDINX~PDINX+1; 70854000
|
|
GO QUIT; 70855000
|
|
END; 70856000
|
|
NOOFID~NOOFID+1; 70856500
|
|
IF NOT ENTER(TCURRENT,LOCALTYPE,KLASS,TRUE) THEN 70857000
|
|
BEGIN 70858000
|
|
INFO[LASTINFO.LINKR,LASTINFO.LINKC].LINK~NEXTADDL; 70859100
|
|
IF CURRENT=0 AND NOT PDPRTOG THEN 70859130
|
|
PUTNBUMP(INFO[LASTINFO.LINKR,LASTINFO.LINKC].ADDRESS) ELSE 70859160
|
|
PUTNBUMP(1); 70859200
|
|
IF PDPRTOG THEN 70860000
|
|
BEGIN 70861000
|
|
PDPRT[PPINX].[36:12]~INFO[LASTINFO.LINKR,LASTINFO. 70862000
|
|
LINKC].ADDRESS; 70863000
|
|
IF DPTOG THEN PDPRT[PPINX].[6:1]~1; 70864000
|
|
70865000
|
|
PDPRT[PPINX].[8:1]~1; 70866000
|
|
PDINX~PDINX+1; 70867000
|
|
END; 70868000
|
|
END ELSE 70869000
|
|
ADDRTOG~TRUE; 70870000
|
|
END 70871000
|
|
UNTIL STEPI!COMMA; 70872000
|
|
IF NOT ADDRTOG THEN 70872400
|
|
IF PDPRTOG THEN PDINX~PDINX-NOOFID; 70872500
|
|
IF ELCLASS!LFTBRKT THEN 70873000
|
|
BEGIN FLAG(726); SCAT END; %MISSING LEET BRACKET 70874000
|
|
CONTEXT ~ 2; 70874100
|
|
IF ADDRTOG THEN 70875000
|
|
BEGIN 70876000
|
|
IF TABLE(I+1)!FACTOP THEN 70877000
|
|
BEGIN FLAG(727); %IF YOU.KNOW WHAT IT MEANS, 70878000
|
|
SCAT END; %IMPLEMENT IT. 70879000
|
|
INFO[LASTINFO.LINKR,LASTINFO.LINKC].LINK~NEXTADDL; 70879100
|
|
PUTNBUMP(1); 70879200
|
|
STEPIT; 70879400
|
|
IF TABLE(I+1)!RTBRKT THEN STEPIT; 70879600
|
|
ASTERIKTOG~TRUE; 70879800
|
|
GO CHECKAGAIN; 70880000
|
|
END ELSE 70881000
|
|
IF TABLE(I+1)=FACTOP THEN % [*] SPECIFICATION 70882000
|
|
BEGIN 70882100
|
|
IF SAVEBIT THEN FLAG(727); 70882110
|
|
EMIT(ZERO); 70882200
|
|
EMITNUM(5); 70882300
|
|
EMIT(STAG); 70882400
|
|
STEPIT; 70882600
|
|
IF TABLE(I+1)!RTBRKT THEN STEPIT; 70882700
|
|
ASTERIKTOG~TRUE; 70882750
|
|
GO CHECKAGAIN; 70882800
|
|
END ELSE 70883000
|
|
IF TABLE(I+1)=NUMBER AND TABLE(I+2)=RTBRKT AND PDPRTOG THEN 70883100
|
|
BEGIN 70883200
|
|
DO BEGIN 70883400
|
|
70883500
|
|
PDPRT[PPINX].[10:13]~THI; 70883600
|
|
PDINX~PDINX+1; 70883700
|
|
SAVESIZE~SAVESIZE+THI; 70883750
|
|
END 70883800
|
|
UNTIL (NOOFID~NOOFID-1)=0; 70883900
|
|
IF TABLE(I+2) ! RTBRKT THEN FLAG(728); 70883910
|
|
GO PASSRTBRKT; 70883930
|
|
END ELSE 70883960
|
|
BEGIN %[AEXP] SPECIFICATION 70884000
|
|
IF SAVEBIT AND CURRENT = 0 THEN FLAG(727); 70884100
|
|
EMIT(ZERO); 70885000
|
|
NEXTDIM: 70885500
|
|
STEPIT; 70886000
|
|
EXPRESSION(ITYPE); %INTEGER=AEXP ON TOP OF STACK 70887000
|
|
CODE ~ TRUE; 70888000
|
|
CHECKAGAIN: 70889050
|
|
IF TABLE(I)=COMMA AND TABLE(I+1)!RTBRKT THEN 70889100
|
|
BEGIN 70889150
|
|
NOOFDIMS~NOOFDIMS + 1; 70889200
|
|
IF TABLE(I+1)!FACTOP THEN 70889300
|
|
BEGIN 70889400
|
|
MULTIDIMTOG~TRUE; 70889500
|
|
GO NEXTDIM; 70889600
|
|
END ELSE 70889620
|
|
BEGIN 70889640
|
|
STEPIT; 70889660
|
|
STEPIT; 70889670
|
|
IF ASTERIKTOG THEN GO CHECKAGAIN 70889680
|
|
ELSE 70889682
|
|
BEGIN 70889684
|
|
MULTIDIMTOG~TRUE; 70889686
|
|
NOOFDIMS~1; 70889687
|
|
END; 70889688
|
|
END; 70889690
|
|
END ELSE 70889700
|
|
IF NOT MULTIDIMTOG AND NOT ASTERIKTOG THEN 70889800
|
|
BEGIN 70889900
|
|
EMITR(39,20); %INSERT SIZE FIELD 70890000
|
|
EMITNUM(5); %5 ON TOP OF STACK 70891000
|
|
EMIT(STAG); %SET TAG FIELD 70892000
|
|
END; 70892500
|
|
END; 70893000
|
|
IF ADDRTOG THEN GO SKIP; 70894000
|
|
IF SAVEBIT AND CURRENT!0 THEN %LOCAL SAVE ARRAY 70895000
|
|
IF MULTIDIMTOG THEN ARRAYTYPE~1 70896000
|
|
ELSE EMIT1P(BSET,0); 70897000
|
|
IF DPTOG THEN % DP OR EVENT ARRAY 70898000
|
|
IF MULTIDIMTOG THEN ARRAYTYPE ~ ARRAYTYPE + 4 70899000
|
|
ELSE EMIT1P(BSET,40); 70900000
|
|
IF MULTIDIMTOG THEN 70901000
|
|
BEGIN 70902000
|
|
EMIT(MKST); 70902300
|
|
EMITN(ARRAYDECPCW); 70902600
|
|
EMITNUM(NOOFDIMS); 70903000
|
|
EMITNUM(NOOFID); 70903100
|
|
EMITNUM(-ARRAYTYPE); 70903200
|
|
EMIT(ENTR); 70903300
|
|
END; 70904000
|
|
70904100
|
|
SKIP: 70904200
|
|
NEXTADDL~NEXTADDL-NOOFID; 70904250
|
|
TNOOFID~NOOFID; 70904270
|
|
DO BEGIN 70904300
|
|
IF CURRENT=0 AND NOT MULTIDIMTOG AND NOT ADDRTOG THEN70904330
|
|
BEGIN 70904370
|
|
EMITN(ADDL[NEXTADDL.LINKR,NEXTADDL.LINKC]); 70904400
|
|
IF NOOFID>1 THEN EMIT(OVRN) ELSE EMIT(OVRD); 70904500
|
|
END; 70904550
|
|
PUTNBUMP(NOOFDIMS); 70904600
|
|
END UNTIL (NOOFID~NOOFID-1)=0; 70904700
|
|
IF CURRENT!0 AND NOT ADDRTOG THEN 70904900
|
|
WHILE (TNOOFID~TNOOFID-1)>0 DO EMIT(DUPL); %DUPLICATE 70905000
|
|
PASSRTBRKT: 70906000
|
|
WHILE ELCLASS!RTBRKT AND ELCLASS!SEMICOLON DO STEPIT; 70907000
|
|
IF ELCLASS=SEMICOLON THEN 70908000
|
|
BEGIN FLAG(728); I~I-1; %MISSING RIGHT BRACKET 70909000
|
|
SCAT END; 70910000
|
|
QUIT: IF NOT CODE THEN L ~ OL; IF STEPI = COMMA THEN GO LOOP; 70911000
|
|
IF ELCLASS!SEMICOLON THEN ERR(729); %MISSING SEMICOLON 70912000
|
|
CONTEXT~CONTEX; 70913000
|
|
FINI: END ARRAYDEC; 70914000
|
|
PROCEDURE QUEUEDEC (LEVEL); VALUE LEVEL; INTEGER LEVEL; 70915000
|
|
COMMENT SPACE IS OBTAINED FOR THE DESCRIPTOR AT THE HEAD OF THE QUEUE. 70916000
|
|
CODE TO PUT ZERO (QUEUEDEC) OR A SUITABLE DESCRIPTOR(QUEUE ARAY)70917000
|
|
IN THIS SPACE IS EMITTED 70917500
|
|
INFO AND ADDL ENTRIES FOR THE QUEUE ARE AS FOLLOWS: 70918000
|
|
(1) LINK IN FIRST WORD OF INFO POINTS TO ADDL. ADDRESS REFER-70919000
|
|
ENCES A ZERO WORD IN THE STACK 70920000
|
|
(2) THE FIRST WORD OF ADDL CONTAINS: 70921000
|
|
ADDRESS OF LOCK CELL IN ADDRESS FIELD 70922000
|
|
NUMBER OF ALGORITHMS IN FIELD "ALGNOF" 70923000
|
|
NUMBER OF ITEMS IN FIELD "ITMNOF" 70924000
|
|
SIZE OF ENTRY IN FIELD "SIZEF" 70924500
|
|
(3) THERE IS ONE ADDL WORD PER ITEM WITH THE LINK FIELD POIN-70925000
|
|
TING TO THE INFO ENTRY FOR THE RELEVANT ITEM 70926000
|
|
(4) THERE IS ONE ADDL WORD PER Q ALGORITHM WITH: 70927000
|
|
ADDRESS OF PCW IN ADDRESS FIELD 70928000
|
|
ALGORITHM KEY IN FIELD "ALGNO" 70929000
|
|
TYPE OF ALGORITHM IN TYPE FIELD HAVING FOLLOWING VALUES70930000
|
|
ITYPE INTEGER ALGORITHM ID 70931000
|
|
RTYPE REFERENCE ALGORITHM ID 70932000
|
|
BTYPE BOOLEAN ALGORITHM ID 70933000
|
|
PROCD UNTYPED ID 70934000
|
|
PARAMETER DESCRIPTION IN FIELD "PARADESC" 70935000
|
|
=0 NO PARAMETERS 70936000
|
|
=1 ONE PARAMETER,TYPE REFERENCE - ASSOCIATED WITH 70937000
|
|
IMPLIED FORMAL PARAMETER NAME "ENTRY" 70938000
|
|
=2 ONE PARAMETER,TYPE INTEGER - ASSOCIATED WITH IMP-70939000
|
|
LIED FORMAL PARAMETER NAME "INDEX" 70940000
|
|
=3 TWO PARAMETERS THE FIRST ONE ASSOCIATED WITH 70941000
|
|
"ENTRY" AND THE SECOND WITH "INDEX" 70942000
|
|
IF A LINK PART IS SUPPLIED,AN INFO ENTRY OF CLASS REFERENCE, 70943000
|
|
(QUEUEDEC) OR REFERENCE ARRAY (QUEUE ARRAY DECLARATION) 70943300
|
|
AND ADDRESS THAT OF THE QUEUE HEAD DESCRIPTOR IS GENERATED FOR 70944000
|
|
THE LINK IDENTIFIER. THUS NO SPACE IS RESERVED FOR THE LINK 70945000
|
|
EACH ITEM IN THE ENTRY DESCRIPTION HAS AN INFO ENTRY OF THE 70946000
|
|
FOLLOWING FORM: 70947000
|
|
QINDEXF FIELD POSITION OF ITEM IN ENTRY 70948000
|
|
DESCRIPTION 70949000
|
|
LINK FIELD LINK TO ADDL FOR ARRAYS AND PROCE-70950000
|
|
DURES OTHERWISE LINK TO INFO ENTRY70951000
|
|
FOR QUEUE ID 70952000
|
|
ADDL WORD (FOR ARRAYS ONLY) 70953000
|
|
FIELD "NODIM" HOLDS NUMBER OF 70954000
|
|
DIMENSIONS 70955000
|
|
FIELD "QLINK" HOLDS LINK TO INFO 70956000
|
|
ENTRY FOR QUEUE ID 70957000
|
|
IF A SIZE PART IS SUPPLIED, CODE FOR BUILDING AN ABSENT, IND-70958000
|
|
EXABLE, NON SEGMENTED DESCRIPTOR IN THE SPACE RESERVED FOR THE 70959000
|
|
QUEUE ID IS EMITTED.NOTE POSSIBLE CONFLICT WITH ARRAY DESC. 70960000
|
|
EACH ALGORITHM IN THE QUEUE DECLARATION HAS AN INFO ENTRY OF 70961000
|
|
THE FOLLOWING FORM. 70962000
|
|
PARAMETER DESCRIPTION IN FIELD "PARADESC" 70963000
|
|
ALGORITHM KEY IN FIELD "ALGNO" 70964000
|
|
CLASS OF QALGID 70965000
|
|
TYPE OF ALGORIIHM IN TYPE FIELD 70966000
|
|
FIELD STANDF CONTAINS 0 (STANDARD ALGORITHMS) OR 1 70967000
|
|
THE CODE FOR EACH ALGORITHM IS GENERATED BY CALLS ON EXPRESSION 70968000
|
|
OR STATEMENT. THIS IS THE CODE ACCESSED BY THE PCW WHOSE ADDRESS70969000
|
|
IS IN THAT ADDL WORD OF THE QUEUE ID ASSOCIATED WITH THE 70970000
|
|
ALGORITHM 70971000
|
|
THE "ALGORITHM KEY" IS GENERATED AND USED AS FOLLOWS: 70972000
|
|
(1)IF THE ALGORITHM ID IS UNKNOWN AND IF IT IS A STAND-70973000
|
|
ARD ALGORITHM ID THEN THE ALGORITHM KEY IS 70974000
|
|
FOUND BY THE PROCEDURE STANDSEARCH 70975000
|
|
COUNTQALG IS SET TO STARTNSQ AT BLOCK ENTRY. 70976000
|
|
IF THE ALGORITHM ID IS NOT STANDARD THIS COUNTER IS 70977000
|
|
UPDATED AND USED AS THE ALGORITHM KEY 70978000
|
|
(2)IF THE ALGORITHM ID IS KNOWN AND IF ITS PREVIOUS 70979000
|
|
CLASS IS OTHER THAN QALGID THEN SYNTAX ERROR 70980000
|
|
IF ITS PREVIOUS CLASS IS QALGID THEN THE 70981000
|
|
ALGORITHM KEY IS OBTAINED FROM THE INFO ENTRY. 70982000
|
|
IF THIS ALGORITHM KEY MATCHES THAT IN ANY 70983000
|
|
QUEUE ADDL WORD THEN SYNTAX ERROR (MULTIPLE USE OF 70984000
|
|
ALGORITHM ID IN SAME QUEUE DECLARATION). 70985000
|
|
OTHERWISE A NEW ADDL ENTRY FOR THE ALGORITHM IS 70986000
|
|
MADE FOR THE QUEUE. NOTE THAT ONLY ONE INFO ENTRY 70987000
|
|
APPEARS FOR THE QUEUE ALGORITHM ID (AT ANY GIVEN 70988000
|
|
LEVEL) NO MATTER HOW MANY QUEUE DECLARATIONS USE 70989000
|
|
THAT ALGORITHM ID 70990000
|
|
THE LOCKED ALGORITHM IS HANDLED DIFFERENTLY. NO CODE IS GENER 70990100
|
|
-ATED AND THE ONLY ACTIONS ARE TO GET SPACE FOR THE LOCK CELL 70990200
|
|
(WHEN NECESSARY) AND TO PLACE THE ADDRESS OF THE SPACE IN THE 70990300
|
|
FIRST WORD OF ADDL FOR THE QUEUE 70990400
|
|
NOTE THAT QUEUE ARRAYS ARE HANDLED ESSENTIALLY AS QUEUE VARABLES70991000
|
|
NOTE ALSO THAT A QUEUE ARRAY DECLARATION WITHOUT A LINK PART 70992000
|
|
DOES NOT MEAN MUCH AND THAT A SIZE PART WITHIN A QUEUE DECLAR- 70993000
|
|
ATION IS RATHER STRANGE; 70994000
|
|
COMMENT *** THE FOLLOWING FACILITIES HAVE NOT YET BEEN IMPLEMENTED: 70995000
|
|
(1) OWN QUEUES; 70996000
|
|
BEGIN COMMENT (MCS 1); 70997000
|
|
LABEL FINI,RESIGN,ANOTHER,ENDALG,ENDING,ITEMS,QUIT,SIZE, 70998000
|
|
COMPILEALG,LEAVE; 70999000
|
|
LABEL HUNT; 70999500
|
|
REAL ALGTYPE;% HOLDS THE TYPE OF AN ALGORITHM 71000000
|
|
INTEGER QW, % LINK INTO INFO FOR QUEUE 71001000
|
|
LW, % LINK INTO INFO FOR QUEUE "LINK" 71002000
|
|
NOITEMS,% NUMBER OF ITEMS IN QUEUE 71003000
|
|
SPAZE, % ADDRESS OF SPACE FOR Q ID 71004000
|
|
QADDL, % LINK INTO ADDL FOR FIRST Q ADDL ENTRY 71005000
|
|
NEXTQADDL,% RUNNING LINK INTO Q ADDL ENTRIES 71006000
|
|
ALGCOUNT,% NO OF QUEUE ALGORITHMS 71007000
|
|
LASTITEM,% LINK TO INFO ENTRY OF LAST ITEM 71008000
|
|
ITEMINDEX,% INDEX OF ITEM IN ENTRY 71008500
|
|
LOCKADDRESS;% ADDRESS OF LOCK CELL IF ANY 71009000
|
|
INTEGER TI1,TI2; % SCRATCH; 71010000
|
|
BOOLEAN ARAY; % TRUE IF QUEUE ARRAY 71010220
|
|
BOOLEAN BADTOG; % TRUE WHEN BAD BOUND FOR QUEUE ARRAY 71010240
|
|
REAL GT2,GT3; % SCRATCH RENAME GLOBAL SCRATCH 771010300
|
|
DEFINE GT1 = QGT1#; % FIX SOME NOMENCLATURE 71010500
|
|
INTEGER N; %SCRATCH 71010800
|
|
DEFINE QEUEID = QUEUEID #; 71011000
|
|
INTEGER PNEXTADDL, %ALL THESE QUANTITIES USED FOR 71012000
|
|
PNEXTINFO, % STORING INFORMATION BEFORE 71013000
|
|
PLASTINFO; % COMPILATION OF Q ALQORITHM 71014000
|
|
DEFINE SPECPART = FORMALPARAPART#; 71015000
|
|
COMMENT FOLLOWING MUST BE REMOVED LATER; 71015300
|
|
FORMAT FMT1(" QINFO ", 10I9); 71015302
|
|
FORMAT FMT2 ( "Q1ADDL ",10I9); 71015304
|
|
FORMAT FMT3 (" QADDLITEM " ,10I9); 71015306
|
|
FORMAT FMT4 (" ITEMINFO ", 10I9); 71015308
|
|
FORMAT FMT6 (" ITEMINFO ", 10I9); 71015400
|
|
FORMAT FMT7 ( " ITEMADDL ",10I9); 71015402
|
|
FORMAT FMT8 (" ALGINFO " ,10I9); 71015404
|
|
FORMAT FMT9 (10I9); 71015405
|
|
INTEGER DT1,DT2,DT3,DT4,TEMPNO; 71015406
|
|
DEFINE DEBUG=IF DONSBUG THEN#; 71015407
|
|
REAL TD; 71015408
|
|
DEFINE 71015409
|
|
D1= DEBUG WRITE(LINE[DBL],FMT1,TD.ADDRESS,TD.CLASS,TD.TYPE,TD.LINKR, 71015410
|
|
TD.LINKC,TEMPNO,DT1,DT2,DT3,DT4)#, 71015412
|
|
D2= DEBUG WRITE(LINE[DBL],FMT2,TD.ADDRESS,TD.ALGNOF,TD.ITMNOF,TD.SIZEF 71015414
|
|
,TEMPNO,DT1,DT2,DT3,DT4)#, 71015416
|
|
D3 = DEBUG WRITE(LINE[DBL],FMT3,TD.LINK,TEMPNO,DT1,DT2,DT3,DT4)#, 71015418
|
|
D4 = DEBUG WRITE(LINE[DBL],FMT4,TD.ADDRESS,TD.ALGNO,TD.TYPE,TD.PARADESC 71015420
|
|
,TEMPNO,DT1,DT2,DT3,DT4)#, 71015440
|
|
D5=D1#, 71015460
|
|
D6 =DEBUG WRTTE(LINE[DBL],FMT6,TD.QINDEXF,TD.LINK,TEMPNO,DT1,DT2,DT3, 71015480
|
|
TD.CLASS,TD.TYPE,DT4)#, 71015500
|
|
D7 = DEBUG WRITE(LINE[DBL],FMT7,TD.NODIM,TD.QLINK,TEMPNO,DT1,DT2,DT3, 71015502
|
|
DT4)#, 71015504
|
|
D8 =DEBUG WRITE(LINE[DBL],FMT8,TD.PARADESC,TD.ALGNO,TD.CLASS,TD.TYPE, 71015506
|
|
TD.STANDF,TEMPNO,DT1,DT2,DT3,DT4)#, 71015508
|
|
D9 = DEBUG WRITE(LINE[DBL],FMT9,TEMPNO,DT1,DT2,DT3,DT4)#; 71015510
|
|
71016000
|
|
LOCKADDRESS~INVISIBLE~ALGCOUNT~NOITEMS~0; 71017000
|
|
ITEMINDEX~0; 71017500
|
|
IF (ARAY~ELCLASS=ARRAYV) THEN STEPIT; 71017550
|
|
IF ELCLASS ! UNKNOWNID THEN GO RESIGN; 71018000
|
|
GTB1~ENTER(0,LOCALTYPE,IF ARAY THEN QUEUEARRAYID ELSE QUEUEID71019000
|
|
,FALSE); 71019500
|
|
QW ~ LW ~ LASTINFO; 71020000
|
|
TI1 ~ -CURRENT; 71021000
|
|
COMMENT ACQUIRE INFO ENTRY FOR QID, SET UP PARAMETER TO GETSPACE FOR 71022000
|
|
NO ADDRESS PART; 71023000
|
|
IF TABLE(I+1) = COLON THEN 71024000
|
|
BEGIN COMMENT (MCS 2); 71025000
|
|
COMMENT A LINK ID IS SUPPLIED; 71026000
|
|
STEPIT; 71027000
|
|
IF STEPI ! UNKNOWNID THEN GO RESIGN; 71028000
|
|
GTB1~ENTER(0,LOCALTYPE,IF ARAY THEN REFARRAYID ELSE 71029000
|
|
REFID ,FALSE); 71029500
|
|
LW ~ LASTINFO; 71030000
|
|
IF ARAY THEN BEGIN INFO[LW.LINKR,LW.LINKC].LINK 71030500
|
|
~NEXTADDL;PUTNBUMP(1) END; 71030600
|
|
COMMENT LINK GIVES RISE TO REFERENCE ARRAY; 71030605
|
|
TI1 ~ CURRENT; 71031000
|
|
BADTOG~FALSE; 71031500
|
|
COMMENT ACQUIRE INFO ENTRY FOR LINK IO,SET UP PARAMETER TO GET-71032000
|
|
SPACE FOR POSSIBLE ADDRESS PART; 71033000
|
|
END MCS 2 LINK PART; 71034000
|
|
INFO[QW.LINKR,QW.LINKC].ADDRESS 71035000
|
|
~SPAZE~IF ARAY THEN QARRAYBOUND(TI1,BADTOG) ELSE 71036000
|
|
EMITDESC(TI1); 71036300
|
|
IF BADTOG THEN BEGIN FLAG(753);GO RESIGN END; 71036800
|
|
COMMENT QARRAYBOUND GOBBLES UP ARRAYBOUND AND BUILDS DESCRIPTOR, 71036803
|
|
EMITSPACE MERELY LEAVES HOLE IN STACK. THERE IS AN ERROR 71036805
|
|
IF BOUND SYNTAX INCORRECT; 71036808
|
|
INFO[LW.LINKR,LW.LINKC].ADDRESS ~ SPAZE; 71037000
|
|
71037500
|
|
COMMENT*** THE Q INFO ENTRY AND THE LINK INFO ENTRY (IF ANY) MUST HAVE 71038000
|
|
SAME ADDRESS SUPPLIED BY GETSPACE; 71039000
|
|
IF STEPI ! LFTPRN THEN GO QUIT; 71040000
|
|
TI1 ~ NEXTINFO; 71041000
|
|
71041500
|
|
TD~ INFO[LW.LINKR,LW.LINKC];DT1~TI1; D5; % REMOVE 71041600
|
|
ITEMS: IF(NOITEMS~SPECPART(TRUE))>32767 THEN 71042000
|
|
BEGIN FLAG(750); GO QUIT END; 71042500
|
|
COMMENT *** SPECPART ANALYSES ENTRY DESCRIPTION AND RETURNS NUMBER OF 71043000
|
|
ITEMS ENCOUNTERED. BUILDS UP CHAIN OF INFO ENTRIES CONCER- 71044000
|
|
NING ITEMS (POINTED AT BY TI1 ). FALSE SAYS CALL IS FROM 71045000
|
|
QUEUEDEC. INVISIBLE POINTS TO FIRST ENTRY FOR INVISIBLE IT- 71046000
|
|
EMS AT EXIT; 71047000
|
|
INFO[QW.LINKR,QW.LINKC].LINK~QADDL~NEXTADDL; 71048000
|
|
IF ARAY THEN PUTNBUMP(1); 71048500
|
|
QADDL~NEXTADDL; 71048800
|
|
ADDL[QADDL.LINKR,QADDL.LINKC]~0;%5500 KLUDGE REMOVE 6500 71048850
|
|
NEXTADDL~ NEXTADDL+1; 71049000
|
|
COMMENT MUST LEAVE HOLE FOR FIRST QADDL ENTRY; 71050000
|
|
FOR TI2~1 STEP 1 UNTIL NOITEMS DO 71051000
|
|
BEGIN COMMENT (MCS 3) PROCESS ITEMS; 71052000
|
|
IF TI1=INVISIBLE THEN INVISIBLE~NEXTADDL; 71052500
|
|
COMMENT INVISIBLE POINTS TO LINK TO FIRST INVISIBLE ITEM; 71052600
|
|
N~(IF(GT1~TAKE(TI1)).ALLBUTLINK!0 THEN GT1 ELSE 71053000
|
|
(GT1~TAKE(TI1~GT1.LINK))).LINK; 71053500
|
|
COMMENT *** NOTE KLUDGE FOR HOLE IN INFO.MAYBE CAN REMOVE LATER; 71053510
|
|
71054500
|
|
71055000
|
|
71056000
|
|
IF(GT2~GT1.CLASS) >PTRID AND GT2{ EVENTARRAYID THEN 71057000
|
|
BEGIN COMMENT (MCS 2A); 71058000
|
|
COMMENT ARRAY ITEMS HAVE ADDL ENTRIES SUPPLIED BY 71059000
|
|
SPECPART; 71060000
|
|
GT1.LINK~GT1.ADDRESS; 71061000
|
|
ADDL[GT1.LINKR,GT1.LINKC].QLINK~QW; 71062000
|
|
71062500
|
|
END MCS 2A 71063000
|
|
ELSE 71064000
|
|
GT1.LINK~QW; 71065000
|
|
IF GT2 = FORMALID THEN FLAG(900); %WCP 71065100
|
|
ERRORTOG ~ TRUE; %WCP 71065200
|
|
COMMENT WHEN ITEM IS OTHER THAN ARRAY 71066000
|
|
IT REQUIRES NO ADDL AND LINKS DIRECTLY TO Q71067000
|
|
INFO; 71068000
|
|
GT1.QINDEXF ~ ITEMINDEX; 71069000
|
|
GT1.ITMQAINDXF~TI2-1; 71069200
|
|
ITEMINDEX~ITEMINDEX+(IF(GT2=DPID OR GT2=EVENTID) 71069300
|
|
AND GT1.TYPE!FORMALNAMEQ THEN 2 ELSE 1); 71069350
|
|
COMMENT A DOUBLE PRECISION NUMBER TAKES TWO WORDS; 71069600
|
|
71069650
|
|
TD~TI1; D3; %REMOVE 71069660
|
|
PUT(GT1,TI1); 71070000
|
|
PUTNBUMP(TI1); 71071000
|
|
71071502
|
|
COMMENT QUEUE NOW POINTS TO ITEM; 71072000
|
|
TI1~ N; 71073000
|
|
END MCS 3 PROCESS ITEMS; 71074000
|
|
GT1.ITMNOF~NOITEMS; 71074500
|
|
GT1.SIZEF~ITEMINDEX; 71074502
|
|
ADDL[QADDL.LINKR,QADDL.LINKC]~GT1; 71074504
|
|
COMMENT*** SIZE MUST BE AVAILABLE TO ALGORITHMS; 71074510
|
|
LASTITEM~QADDL+NOITEMS; 71075000
|
|
COMMENT INVISIBLE AND LASTITEM USED IN DESTROYING INVISIBLE ITEM INFO71076000
|
|
AFTER PROCESSING ALGORITHMS; 71077000
|
|
SIZE: IF ELCLASS=LFTBRKT THEN 71078000
|
|
BEGIN COMMENT MCS 3A; 71079000
|
|
COMMENT A SIZE PART WAS BEEN SPECIFID AND SO WE MUST EMIT CODE TO 71079400
|
|
BUILD DESCRIPTOR; 71079410
|
|
COMMENT *** THIS PROBABLY WILL NOT WORK AT GLOBAL LEVEL; 71079412
|
|
STEPIT; 71079415
|
|
EMIT(ZERO); 71079600
|
|
EXPRESSION(ITYPE); 71079800
|
|
IF ITEMINDEX>1 THEN BEGIN COMMENT MCS 3B; 71079850
|
|
EMITNUM(ITEMINDEX); 71080000
|
|
71080200
|
|
COMMENT THE SIZE OF AN ENTRY IS NOW ON TOP OF THE STACK AND 71080300
|
|
THE REQUIRED NUMBER OF ENTRIES IS THE SECOND WORD IN 71080310
|
|
THE STACK; 71081000
|
|
EMIT(MULT) END MCS 3B; 71081500
|
|
COMMENT WE NOW HAVE THE SIZE OF THE REQUIRED AREA ON TOP OF THE71081600
|
|
STACK; 71081610
|
|
EMITR(39,20); 71082000
|
|
EMITNUM(5); 71082500
|
|
EMIT (STAG); 71083000
|
|
COMMENT WE NOW HAVE AN ABSENT,INDEXABLE DATA DESCRIPTOR ON TOP 71083100
|
|
OF THE STACK. WE MUST NOW STORE IT AT HOLE POINTED AT 71083110
|
|
BY SPAZE; 71083120
|
|
EMITN(SPAZE); EMIT (OVRD); 71084000
|
|
IF ELCLASS=RTBRKT THEN STEPIT ELSE GO HUNT; 71084500
|
|
COMMENT *** IS THIS CODE O.K.; 71085000
|
|
END MCS 3A SIZE PART PROCESSING; 71086000
|
|
71086500
|
|
IF ELCLASS!USINGV THEN GO TO ENDING ELSE 71087000
|
|
BEGIN COMMENT (MCS 4); 71088000
|
|
COMMENT AT THIS POINT WE PROCESS ALGORITHM PART; 71089000
|
|
NEXTQADDL ~ NEXTADDL; 71090000
|
|
ANOTHER: 71091000
|
|
IF STEPI=LOCKEDV THEN 71092000
|
|
BEGIN COMMENT MCS 3A; 71092300
|
|
COMMENT WE HAVE A LOCKING SPECIFICATION; 71092350
|
|
71092355
|
|
IF STEPI=WITHV THEN 71092400
|
|
BEGIN COMMENT MCS 3B; 71092500
|
|
CONTEXT~2; 71092600
|
|
71092650
|
|
IF STEPI!QUEUEID AND ELCLASS!QUEUEARRAYID 71092700
|
|
OR ELCLASS=UNKNOWNID 71092750
|
|
THEN BEGIN FLAG(751);GO LEAVE END; 71092780
|
|
GT1~TAKE(ELBAT[I]).LINK; 71092800
|
|
LOCKADDRESS~ GIT(IF ELCLASS=QUEUEID THEN71092900
|
|
GT1 ELSE GT1+1).ADDRESS; 71092950
|
|
COMMENT *** THE FIRST WORD OF ADDL FOR A QUEUE ARRAY71092980
|
|
CONTAINS INFORMATION ON BOUNDS; 71092985
|
|
IF LOCKADDRESS=0 THEN 71093000
|
|
BEGIN FLAG(751);GO LEAVE END; 71093050
|
|
COMMENT THE REFERENCED QUEUE DOES NOT HAVE LOCK;71093055
|
|
CONTEXT~0; 71093080
|
|
71093085
|
|
STEPIT; 71093088
|
|
END MCS 3B 71093100
|
|
ELSE 71093200
|
|
LOCKADDRESS~EMITSPACE(-CURRENT); 71093300
|
|
COMMENT A NEW LOCK CELL IS REQUIRED; 71093305
|
|
71093350
|
|
ADDL[QADDL.LINKR,QADDL.LINKC].ADDRESS 71093355
|
|
~LOCKADDRESS; 71093357
|
|
COMMENT LOCKADDRESS MUST BE AVAILABLE TO ALGORITHMS; 71093358
|
|
GO TO ENDALG 71093400
|
|
END MCS 3A; 71093500
|
|
GT1~0; %5500 FB KLUDGE REMOVE ON 6500 71093550
|
|
ALGCOUNT ~ ALGCOUNT+1; 71093600
|
|
71093650
|
|
IF ELCLASS!TOV THEN ALGTYPE~0 ELSE 71094000
|
|
BEGIN STEPIT; ALGTYPE~PROCD END; 71095000
|
|
IF ELCLASS = UNKNOWNID THEN 71096000
|
|
BEGIN COMMENT (MCS 5); 71097000
|
|
COMMENT *** THE ALGORITHM ID IS UNKNOWN, HENCE: 71098000
|
|
(1)IT IS STANDARD Q ALG ID NOT YET USED IN ANY OTHER71099000
|
|
Q DECLARATION AT THIS LEVEL OR 71100000
|
|
(2)IT IS FIRST APPEARANCE AT THIS LEVEL OF NON STAN-71101000
|
|
DARD Q ALG ID; 71102000
|
|
TB1~ENTER(0,LOCALTYPE,QALGID,FALSE); 71103000
|
|
GT2 ~ TAKE(LASTINFO); 71104000
|
|
IF(N~STANDSEARCH) =63 THEN 71105000
|
|
BEGIN COMMENT(MCS 6); 71106000
|
|
COMMENT IT IS A NON-STANDARD ALGORITHM; 71107000
|
|
N ~ COUNTQALG ~ COUNTQALG+ 1; 71108000
|
|
TI2~3; GT2.STANDF~1; 71109000
|
|
71109050
|
|
END MCS 6 71110000
|
|
ELSE 71111000
|
|
BEGIN COMMENT (MCS 7); 71112000
|
|
COMMENT IT IS A STANDARD ALGORITHM; 71113000
|
|
TI2 ~ GT1.ALGPD; 71114000
|
|
GT2.TYPE~GT1.ALGTIPE; 71114500
|
|
GT2.STANDF~0; 71115000
|
|
71115500
|
|
71116000
|
|
END MCS 7; 71117000
|
|
GT1.PARADESC ~ TI2; 71118000
|
|
GT2.PARADESC ~ TI2; 71119000
|
|
GT1.ALGNO ~ N; 71120000
|
|
GT2.ALGNO ~ N; 71121000
|
|
71121500
|
|
PUT(GT2,LASTINFO); 71122000
|
|
GT3~LASTINFO; 71122500
|
|
COMMENT INFO ENTRY FOR ALGORITHM NOW COMPLETE ; 71123000
|
|
END MCS 5 UNKNOWN ID 71124000
|
|
ELSE 71125000
|
|
BEGIN COMMENT (MCS 8); 71126000
|
|
COMMENT *** THE ALGORITHM IS KNOWN; 71127000
|
|
71127050
|
|
GT3~(GT2~TAKE(ELBAT[I])).ALGNO; 71128000
|
|
IF ELCLASS!QALGID THEN GO LEAVE; 71129000
|
|
COMMENT ONLY Q ALGORITHMS MAY APPEAR MORE THAN ONCE; 71130000
|
|
IF NEXTADDL ! NEXTQADDL THEN 71131000
|
|
FOR TI1~NEXTQADDL STEP 1 UNTIL NEXTADDL-1 DO 71132000
|
|
BEGIN COMMENT(MCS 9); 71133000
|
|
COMMENT THERE HAVE BEEN PREVIOUS ALGORITHMS. MUST 71134000
|
|
CHECK THAN NONE OF THEM HAS SAME KEY; 71135000
|
|
IF ADDL[TI1.LINKR,TI1.LINKC].ALGNO 71136000
|
|
= GT3 THEN 71137000
|
|
BEGIN FLAG(713);GO LEAVE END; 71138000
|
|
END MCS 9 ; 71139000
|
|
TI2~GT2.PARADESC; 71139500
|
|
GT1.ALGNO ~ GT3; 71140000
|
|
GT2.STANDF~0; 71140500
|
|
GT1.PARADESC~TI2; 71141000
|
|
GT3~ELBAT[I]; 71141050
|
|
71141500
|
|
END MCS 8 ; 71142000
|
|
COMMENT WE HAVE STILL TO STORE ALGORITHM TYPE INTO QUEUE ADDL 71143000
|
|
WORD FOR ALGORITHM AND (FOR NON-STANDARD ALGORITHMS) 71144000
|
|
INTO ALGORITHM INFO ENTRY.FOR STANDARD ALGORITHMS WE 71145000
|
|
CHECK THAT DECLARED AND IMPLICIT TYPES AGREE; 71146000
|
|
GT1.TYPE~ALGTYPE~IF STEPI = IFV THEN BTYPE ELSE 71147000
|
|
IF ELCLASS = RELOP AND ELBAT[I].DISP 71148000
|
|
= SAME THEN RTYPE ELSE 71148100
|
|
IF ELCLASS = RELOP AND ELBAT[I].DISP 71149000
|
|
= EQUL THEN ITYPE ELSE 71150000
|
|
IF ELCLASS=COMMA THEN 71151000
|
|
ALGTYPE ELSE 0; 71152000
|
|
71152050
|
|
IF (GTB1~ GT2.STANDF = 0) AND ALGTYPE!GT2.TYPE THEN 71153000
|
|
BEGIN FLAG(714); GO LEAVE END; 71154000
|
|
IF NOT GTB1 THEN INFO[GT3.LINKR,GT3.LINKC].TYPE 71154500
|
|
~ ALGTYPE; 71154530
|
|
COMMENT FOR A NON-STANDARD ALGORITHM,THE TYPE MUST BE ENTERED; 71154560
|
|
COMPILEALG: 71155000
|
|
71156000
|
|
71156500
|
|
GT1.ADDRESS~INSERTPCW; 71156800
|
|
PUTNBUMP(GT1); 71157000
|
|
ADDL[QADDL.LINKR,QADDL.LINKC].ALGNOF~ALGCOUNT; 71158000
|
|
71159000
|
|
71160000
|
|
IF CURRENT<31 THEN CURRENT~CURRENT+1 ELSE FLAG(627);71161000
|
|
STACKTOP[CURRENT]~MAXSTACK[CURRENT]+2; 71161500
|
|
71161800
|
|
MAXDISP ~ (GT1~STACKMASK[CURRENT]).MAXDISPF; 71162000
|
|
LLMASK ~ GT1.LLMASKF; 71163000
|
|
PNEXTADDL ~ NEXTADDL; PNEXTINFO ~ NEXTINFO; 71164000
|
|
PLASTINFO ~ LASTINFO; 71165000
|
|
COMMENT *** WHAT ELSE HAS TO BE STORED; 71166000
|
|
CONTEXT ~ 2; 71167000
|
|
IF TI2=1 OR TI2=3 THEN DIDDLENTER(REFID); 71168000
|
|
71168500
|
|
IF TI2=2 OR TI2=3 THEN DIDDLENTER(INTID); 71169000
|
|
7116930071169500
|
|
STEPIT; 71169500
|
|
COMMENT DIDDLENTER MAKES UP INFO ENTRIES AND GETSPACE FOR 71170000
|
|
IMPLIED PARAMETERS; 71171000
|
|
IF ALGTYPE ! PROCD 71172000
|
|
THEN BEGIN EXPRESSION(ALGTYPE);EMIT(RETN);END 71172200
|
|
ELSE IF ELCLASS=BEGINV 71172400
|
|
THEN 71173000
|
|
BEGIN 71173200
|
|
BEGINCTR~BEGINCTR+1; 71173400
|
|
IF GT1~TABLE(I+1)}MINDEC AND GT1 71174000
|
|
{MAXDEC 71174200
|
|
THEN BEGIN 71174400
|
|
GT1~BUMPL; 71174420
|
|
NOJUMPTOG~TRUE; 71174422
|
|
BLOCK; 71174430
|
|
NOJUMPTOG~FALSE; 71174432
|
|
EMITB(BRUN,GT1,PCL); 71174440
|
|
EMITB(BRUN,BUMPL,GT1); 71174442
|
|
EMITB(BRUN,GT1+7,L); 71174444
|
|
EMIT(EXIT); 71174450
|
|
END 71174460
|
|
ELSE BEGIN STEPIT; COMPOUNDTAIL; 71174600
|
|
EMIT(EXIT);END; 71174620
|
|
END 71174700
|
|
ELSE BEGIN STATEMENT;EMIT(EXIT);END; 71174800
|
|
NEXTADDL ~ PNEXTADDL; NEXTINFO ~ PNEXTINFO; 71175000
|
|
LASTINFO ~ PLASTINFO; 71176000
|
|
COMMENT *** WHAT ELSE HAS TO BE RESTORED; 71177000
|
|
CURRENT ~ CURRENT-1; 71178000
|
|
MAXDISP~(GT1~STACKMASK[CURRENT]).MAXDISPF; 71179000
|
|
LLMASK ~ GT1.LLMASKF; 71180000
|
|
71180452
|
|
PURGE(NEXTINFO); 71180500
|
|
71180550
|
|
CONTEXT ~ 0; 71181000
|
|
COMMENT FINISHED EMITTING CODE FOR ALGORITHM,MUST FIX UP JUMP; 71182000
|
|
71183000
|
|
ENDALG: IF ELCLASS=COLON THEN GO TO ANOTHER; 71184000
|
|
71184500
|
|
END MCS 4 PROCESSING OF ALGORITHMS; 71185000
|
|
COMMENT QUEUE IS NOW FINISHED APART FROM SOME CLEARING UP; 71186000
|
|
ENDING: GT1.ADDRESS ~ LOCKADDRESS; 71187000
|
|
GT1.ALGNOF ~ ALGCOUNT; 71188000
|
|
GT1.SIZEF~ITEMINDEX; 71188500
|
|
GT1.ITMNOF ~ NOITEMS; 71189000
|
|
71189500
|
|
PUTADDL(GT1,QADDL); 71190000
|
|
COMMENT INFO AND ADDL ENTRIES FOR QUEUE ARE NOW COMPLETE,LAST THING 71191000
|
|
WE MUST DO IS DESTROY INFO ENTRIES FOR ANY INVISIBLE ITEMS; 71192000
|
|
IF INVISIBLE ! 0 THEN DSTROYNVISIBLE(LASTITEM); 71193000
|
|
71193500
|
|
GO FINI; 71194000
|
|
RESIGN: 71195000
|
|
COMMENT ILLEGAL MULTIPLE USE OF IDENTIFIERS OR BAD BOUNDS; 71196000
|
|
FLAG (711); 71197000
|
|
DO UNTIL STEPI = LFTPRN; 71198000
|
|
ERRORTOG~TRUE; 71199000
|
|
GO TO ITEMS; 71200000
|
|
QUIT: 71201000
|
|
COMMENT MISSING ENTRY DESCRIPTION; 71202000
|
|
FLAG(712); 71203000
|
|
DO UNTIL STEPI=LFTBRKT OR ELCLASS 71204000
|
|
=USINGV; 71205000
|
|
ERRORTOG~TRUE; 71206000
|
|
IF ELCLASS = LFTBRKT THEN GO TO SIZE;71207000
|
|
GO TO ANOTHER; 71208000
|
|
LEAVE: 71209000
|
|
COMMENT ILLEGAL MULTIPLE USE OF IDENTIFIERS; 71210000
|
|
FLAG(711); 71211000
|
|
IF STEPI = IFV OR ELCLASS = COMMA OR 71212000
|
|
ELCLASS = RELOP AND 71212500
|
|
(GT1~ELBAT[I].DISP = SAME OR GT1 = EQUL) THEN 71213000
|
|
BEGIN ERRORTOG~TRUE; GO TO COMPILEALG END 71214000
|
|
ELSE 71215000
|
|
DO UNTIL STEPI = COLON OR TABLE(I+1)=SEMICOLON; 71216000
|
|
COMMENT WHAT ELSE CAN I DO; 71217000
|
|
IF ELCLASS= COLON THEN GO TO ANOTHER; 71218000
|
|
GO FINI; 71218050
|
|
HUNT: 71218100
|
|
COMMENT MISSING RIGHT BRACKET SIZE SPEC; 71218200
|
|
FLAG(752); 71218300
|
|
ERRORTOG~ TRUE; 71218400
|
|
DO UNTIL STEPI=USINGV OR ELCLASS 71218500
|
|
=SEMICOLON OR ELCLASS=COLON; 71218600
|
|
IF ELCLASS=COLON OR ELCLASS=USINGV 71218700
|
|
THEN GO TO ANOTHER; 71218800
|
|
FINI: END MCS 1 QUEUEDEC; 71219000
|
|
INTEGER PROCEDURE QARRAYBOUND(LEVEL,BADTOG);VALUE LEVEL,BADTOG; 71220000
|
|
INTEGER LEVEL; % PARAMETER TO GETSPACE 71220300
|
|
BOOLEAN BADTOG; % ERROR INDICATOR 71220600
|
|
COMMENT GOBBLES UP BOUNDS FOR QUEUE ARRAY AND BUILDS DESCRIPTOR,RETURNS 71221000
|
|
ADDRESS OF DESCRIPTOR; 71221300
|
|
BEGIN 71221600
|
|
LABEL QUIT; 71222000
|
|
LABEL FIN; 71222050
|
|
IF STEPI! LFTBRKT THEN GO QUIT ELSE STEPIT; 71222300
|
|
QARRAYBOUND~GT1~GETSPACE(LEVEL); 71222400
|
|
IF ABS (LEVEL)=GLOBAL THEN 71222600
|
|
BEGIN 71222800
|
|
IF ELCLASS!FACTOP THEN GT1.PDPRTSIZEF~THI; 71223000
|
|
PDPRT[PPINX]~GT1; 71223020
|
|
PDINX~PDINX+1; 71223055
|
|
STEPIT; 71223200
|
|
GO FIN; 71223300
|
|
END; 71223400
|
|
JUMPCHKX; 71223500
|
|
EMIT(ZERO); 71223600
|
|
IF ELCLASS ! FACTOP THEN 71223630
|
|
BEGIN 71223660
|
|
EXPRESSION(ITYPE); 71224000
|
|
EMIT(ONE); 71224300
|
|
EMIT(ADD); 71224600
|
|
EMITR(39,20); 71225000
|
|
EMITNUM(5); 71225300
|
|
END ELSE STEPIT; 71225350
|
|
EMIT(STAG); 71225600
|
|
FIN: 71225800
|
|
IF ELCLASS ! RTBRKT THEN 71226000
|
|
QUIT: BADTOG~TRUE; 71226300
|
|
END QARRAYBOUND; 71226600
|
|
PROCEDURE DIDDLENTER(K);VALUE K; REAL K; 71227000
|
|
COMMENT BUILDS AN ENTRY IN INFO AND GETS SPACE FOR THE IMPLICITLY 71228000
|
|
DECLARED QUEUE ALGORITHM FORMAL PARAMETER"ENTRY"(K IS REFID) OR 71229000
|
|
"INDEX"(K IS REALID), RETURNS SPACE ADDRESS; 71230000
|
|
BEGIN 71231000
|
|
INTEGER I; 71232000
|
|
INTEGER OCOUNT,OSCRAM; 71232500
|
|
REAL OACCUM0,OACCUM1,OACCUM2; 71232800
|
|
STREAM PROCEDURE DIDDLE(D,V); VALUE D,V; 71233000
|
|
COMMENT DIDDLE TRANSFERS "ENTRY" OR "INDEX" TO ACCUM; 71234000
|
|
BEGIN 71235000
|
|
DI~D;DI~DI-1;SI~LOC V;SI~SI+2;DS~6 CHR 71236000
|
|
END DIDDLE; 71237000
|
|
ACCUM[1]~0; 71237500
|
|
IF K=REFID THEN DIDDLE(ACCUMSTART,"5ENTRY") ELSE 71238000
|
|
DIDDLE(ACCUMSTART,"5INDEX"); 71239000
|
|
OCOUNT~COUNT;OSCRAM~SCRAM; 71239050
|
|
MOVECHARACTERS(24,ACCUM,0,OACCUM0,0); 71239080
|
|
COUNT~5; 71239500
|
|
SCRAM ~ ACCUM[1] MOD 125; 71239800
|
|
ACCUM[0] ~ 0; 71240000
|
|
COMMENT *** IS THIS REALLY NECESSARY; 71241000
|
|
71242000
|
|
GTB1~ENTER(0,FORMALVALUEP,K,FALSE); 71243000
|
|
INFO[LASTINFO.LINKR,LASTINFO.LINKC].ADDRESS 71244000
|
|
~GETSPACE(-CURRENT); 71244300
|
|
COUNT~OCOUNT;SCRAM~OSCRAM; 71244600
|
|
MOVECHARACTERS(24,OACCUM0,0,ACCUM,0); 71244900
|
|
END DIDDLENTER; 71245000
|
|
PROCEDURE DSTROYNVISIBLE (LASTITEM); VALUE LASTITEM; INTEGER LASTITEM; 71246000
|
|
COMMENT REMOVES INVISIBLE ITEMS FROM INFO ON FINISHING QUEUE DECLARATION71247000
|
|
COMPILATION. THE ITEMS ARE REMOVED BY DESTROYING THE FIELDS 71248000
|
|
CHRCNT AND ALFA IN THE SECOND WORD OF INFO.THERE MAY BE BETTER 71249000
|
|
WAYS; 71250000
|
|
BEGIN 71251000
|
|
INTEGER I; 71252000
|
|
71252500
|
|
FOR I ~ INVISIBLE STEP 1 UNTIL LASTITEM DO 71253000
|
|
INFO[(GT1~GIT(I)).LINKR,GT1.LINKC+1].PARTALFA~0; 71254000
|
|
END; 71255000
|
|
INTEGER PROCEDURE EMITSPACE(LEVEL); VALUE LEVEL ; INTEGER LEVEL; 71256000
|
|
BEGIN COMMENT PUTS HOLE IN STACK; 71257000
|
|
IF ABS(LEVEL)!GLOBAL THEN BEGIN JUMPCHKX;EMIT(ZERO);END; 71258000
|
|
EMITSPACE~GETSPACE(LEVEL); 71259000
|
|
END EMITSPACE; 71260000
|
|
INTEGER PROCEDURE EMITDESC(LEVEL); VALUE LEVEL;INTEGER LEVEL; 71260020
|
|
BEGIN COMMENT PUTS NULL IN STACK; 71260040
|
|
EMITDESC~GT1~GETSPACE(LEVEL); 71260045
|
|
IF ABS(LEVEL)! GLOBAL 71260060
|
|
THEN BEGIN 71260080
|
|
JUMPCHKX; 71260100
|
|
EMIT(ZERO); 71260120
|
|
EMITNUM(5); 71260130
|
|
EMIT(STAG); 71260140
|
|
EMIT1P(BSET,47); 71260160
|
|
END 71260180
|
|
ELSE 71260200
|
|
BEGIN 71260220
|
|
GT1.[8:1]~1; 71260240
|
|
PDPRT[PPINX]~GT1; 71260260
|
|
PDINX~PDINX+1; 71260280
|
|
END 71260300
|
|
END EMITDESC; 71260320
|
|
INTEGER PROCEDURE STANDSEARCH; 71261000
|
|
COMMENT IF ACCUM CONTAINS A STANDARD ALGORITHM RETURNS THE ALGORITHM KEY71262000
|
|
AND PLACES INFORMATION CONCERNING THE ALGORITHM IN GT1. OTHER- 71263000
|
|
WISE RETURNS 63. MAX NUMBER OF STANDARD Q ALGORITHMS THUS IS 63;71264000
|
|
BEGIN 71265000
|
|
INTEGER I; 71266000
|
|
DEFINE GT1 = QGT1#; %FIX UP SOME NOMENCLATURE 71266500
|
|
LABEL ON; 71267000
|
|
FOR I~0 STEP 1 UNTIL MAXQALG-1 DO 71268000
|
|
BEGIN 71269000
|
|
IF(GT1~QALGORYTHM[I]).PARTALFA = Q 71270000
|
|
THEN IF COUNT<5 71271000
|
|
THEN GO ON 71272000
|
|
ELSE IF CMPCHREQL(COUNT-4,ACCUM[2],QALGORYTHM 71273000
|
|
[I+1]) 71274000
|
|
THEN GO ON; 71275000
|
|
I ~ I+GT1.NOWORDS 71276000
|
|
END; 71277000
|
|
COMMENT NO EQUALITY; 71278000
|
|
GT1.ALGKEY ~ 63; 71279000
|
|
ON: STANDSEARCH ~ GT1.ALGKEY; 71280000
|
|
END STANDSEARCH; 71281000
|
|
71282000
|
|
PROCEDURE PICTUREDEC(S); VALUE S; BOOLEAN S; 72000000
|
|
COMMENT PICTUREDEC GENERATES THE EDIT STRINGS AND OTHER GOOD STUFF 72001000
|
|
FOR A PICTURE DECLARATION. THE PARAMETER, S, IS TRUE IF THE 72002000
|
|
EDIT-STRING ARRAY IS SAVE. THERE IS ONE ARRAY PER DECLARATION,72003000
|
|
SO AS TO REDUCE THE NUMBER OF DESCRIPTORS INVOLVED. 72004000
|
|
THE INFO FOR A LOCAL-TYPE PICTURE POINTS INTO ADDL, AT A 72005000
|
|
REPRESENTATION OF THE CODE TO BE GENERATED. IF THE FIELD 44:472006000
|
|
CONTAINS ZERO, THE PICTURE IS IN A TABLE, 1:18 IS THE ADDRESS 72007000
|
|
OF THE DESCRIPTOR, AND 19:24 IS THE INDEX. IF 44:4 IS NOT ZERO72008000
|
|
THE WORD REPRESENTS A MICRO-OP FOR IN-LINE CODE. SEE 72008100
|
|
EMITMICRO FOR THAT FORMAT. 72008200
|
|
BIT 43 IS ON FOR THE LAST WORD OF THE ENTRY.; 72008300
|
|
BEGIN 72009000
|
|
LABEL INN; 72009100
|
|
LABEL START, X, WAY,BACK; 72010000
|
|
ALPHA CRS,CU ,CNV; 72011000
|
|
INTEGER SZ; % PICTURES CHARACTER SIZE 72011100
|
|
INTEGER TL, CONTEX, TSEG ; 72012000
|
|
OWN COMMENT REMOVE WHEN UPLEVEL STUFF WORKS--MAYBE-----------;72013000
|
|
ALPHA CHAR, NCHR,CNT; 72014000
|
|
OWN INTEGER AD,PCINX; 72014100
|
|
DEFINE OWNBIT = BOOLEAN(AD.[1:1])#; 72014200
|
|
DEFINE GNCH = EXAMINE(BUMPNCR ELSE NCR)#, 72015000
|
|
CB = CRS.[40:8]#, COMMENT BLANK ; 72016000
|
|
CC = CRS.[32:8]#, COMMENT COMMA ; 72017000
|
|
CM = CRS.[24:8]#, COMMENT MINUS-SIGN ; 72018000
|
|
CN = CRS.[16:8]#, COMMENT PERIOD ; 72019000
|
|
CP = CRS.[ 8:8]#; COMMENT PLUS-SIGN ; 72020000
|
|
72021000
|
|
PROCEDURE GENMICRO(N,REPEAT,OP,P1,P2,P3); 72021010
|
|
VALUE N,REPEAT,OP,P1,P2,P3; 72021020
|
|
INTEGER N,REPEAT,OP,P1,P2,P3; 72021030
|
|
COMMENT GENMICRO IS CALLED TO DECIDE WHEN TO GENERATE 72021040
|
|
TABLE-EDIT VS IN-LINE-EDIT CODE; 72021050
|
|
BEGIN 72021060
|
|
DEFINE CLEANUP = IF EMITTING THEN 72021070
|
|
EMIT(ENDE)#, 72021080
|
|
72021090
|
|
EMITTING = MODE = 2#, 72021100
|
|
FIRSTIME = MODE = 0#, 72021110
|
|
BADNEWS = MODE = 3#, 72021120
|
|
IDUNNO = MODE = 1#; 72021130
|
|
REAL WORD; 72021140
|
|
OWN REAL MODE; 72021150
|
|
IF REPEAT < 65535 THEN 72021160
|
|
IF REPEAT < 0 THEN REPEAT ~ 65535 ELSE ELSE FLAG(921); 72021170
|
|
WORD ~ (OP-719)&P1[35:40:8]&P2[27:40:8]&P3[19:40:8] 72021180
|
|
&N [17:46:2]&REPEAT[1:32:16]; 72021190
|
|
IF N < 0 THEN 72021200
|
|
BEGIN 72021210
|
|
CLEANUP; 72021220
|
|
PLACE(GIT(NEXTADDL-1)&1[43:47:1],NEXTADDL-1); 72021230
|
|
MODE ~ 0 72021240
|
|
END ELSE 72021250
|
|
IF FIRSTIME OR BADNEWS OR REPEAT > 1020 THEN 72021260
|
|
BEGIN 72021270
|
|
CLEANUP; 72021280
|
|
PUTNBUMP(WORD); 72021290
|
|
MODE ~ 1 & REAL(REPEAT>1020 OR OWNBIT)[46:47:1]; 72021300
|
|
END ELSE 72021310
|
|
BEGIN 72021320
|
|
IF AD = 0 THEN AD ~ SEGNO ~ NEWSEG(PCINX); 72021330
|
|
IF MODE = 1 THEN 72021340
|
|
BEGIN 72021350
|
|
MODE ~ GIT(NEXTADDL ~ NEXTADDL - 1); 72021360
|
|
PUTNBUMP(0&AD[1:30:18] & L [19:24:24]); 72021370
|
|
EMITMICRO(MODE); 72021380
|
|
END; 72021390
|
|
MODE ~ 2; 72021400
|
|
EMITMICRO(WORD); 72021410
|
|
END; 72021420
|
|
END GENMICRO; 72021430
|
|
PROCEDURE REPEAT(N,OP,P1,P2,P3); 72022000
|
|
VALUE N,OP,P1,P2,P3 ; 72023000
|
|
INTEGER N,OP,P1,P2,P3 ; 72024000
|
|
COMMENT REPEAT LOOKS FOR AND CONSOLIDATES MULTIPLE OCCURANCES 72025000
|
|
OF (SOME OF THE) PICTURE CHARACTERS, SO AS TO REDUCE THE 72026000
|
|
AMOUNT OF CODE GENERATED. IT ALSO HANDLES REPEAT PARTS, 72027000
|
|
BY CONSOLIDATING THEM WITH THE REST. THE GLOBAL, CHAR, 72028000
|
|
CONTAINS THE CURRENT PICTURE CHARACTER, AND CNT IS THE 72029000
|
|
COUNTER. 72030000
|
|
N IS THE NUMBER OF PARAMS,P|, TO BE EMITTED. 72031000
|
|
OR IS THE OPERATOR. 72032000
|
|
P| ARE THE PARAMETERS TO THE OPERATOR; 72033000
|
|
BEGIN 72034000
|
|
CNT ~ 1; 72035000
|
|
DO IF NCHR = CHAR THEN 72036000
|
|
BEGIN CNT ~ CNT + 1; NCHR ~ GNCH END ELSE 72037000
|
|
IF NCHR = "(" THEN 72038000
|
|
BEGIN 72039000
|
|
BUMPNCR; 72040000
|
|
IF SCAN=FACTOP THEN 72041000
|
|
BEGIN 72041100
|
|
IF CNT > 1 THEN GENMICRO(N,CNT-1,OP,P1,P2,P3)72041200
|
|
;GENMICRO(N,-1,OP,P1,P2,P3); CNT ~ 0; 72041300
|
|
END DYNAMIC ELSE 72041400
|
|
IF RESULT = DIGIT THEN 72042000
|
|
BEGIN CONVERTINTO(THI,TLO); 72042100
|
|
IF CNT ~ CNT + THI - 1 > 1048575 THEN FLAG(756) 72043000
|
|
END ELSE FLAG(576); 72043100
|
|
DEBLANK; 72044000
|
|
IF CHR ! ")" THEN 72045000
|
|
BEGIN FLAG(757); NCHR~")" END ELSE 72046000
|
|
NCHR ~ GNCH; 72047000
|
|
END UNTIL NCHR ! "(" AND NCHR ! CHAR; 72048000
|
|
IF CNT>0 THEN GENMICRO(N,CNT,OP,P1,P2,P3); 72049000
|
|
END REPEAT; 72056000
|
|
ARRAY TEDOC[0:7,0:255]; 72057000
|
|
CONTEX ~ CONTEXT; 72058000
|
|
TL ~ L; 72059000
|
|
MOVECODE(TEDOC,EDOC); 72060000
|
|
L ~ AD ~ CONTEXT ~ 0; 72061000
|
|
TSEG ~ SEGNO; 72061100
|
|
IF ELBAT[I-1].CLASS = OWNV THEN AD ~ -0; 72061200
|
|
PCINX ~ ELBAT[I].LINK + 1; 72062000
|
|
SZ~ 6; CRS ~ "10.@3Q "; CU ~ "$"; 72063000
|
|
START: 72064000
|
|
IF STEPI ! UNKNOWNID THEN FLAG(758); 72065000
|
|
TB1 ~ ENTER(AD,LOCALTYPE,PCID,FALSE); 72066000
|
|
PUT(TAKE(LASTINFO) & NEXTADDL [33:33:15],LASTINFO); 72067000
|
|
IF STEPI ! LFTPRN THEN 72068000
|
|
BEGIN ERR(759); GO WAY END; 72069000
|
|
CHAR ~ EXAMINE(NCR) ; GO INN; 72069100
|
|
BACK: NCHR ~ GNCH; 72070000
|
|
DO BEGIN 72071000
|
|
CHAR ~ NCHR; 72072000
|
|
INN: 72072100
|
|
NCHR ~ GNCH; 72073000
|
|
CNV ~ IF SZ= 6 THEN NCHR ELSE 72073100
|
|
IF SZ= 8 THEN SPECIAL[NCHR].EBCDF ELSE 72073200
|
|
IF SZ= 7 THEN SPECIAL[NCHR].ASCF ELSE 72073300
|
|
IF NCHR > 9 THEN NCHR - 7 ELSE NCHR; 72073400
|
|
CASE CHAR OF 72074000
|
|
BEGIN 72075000
|
|
GO X; GO X; GO X; GO X; COMMENT 0->3; 72075100
|
|
BEGIN CU ~ 15; COMMENT 4 ; 72075200
|
|
SZ~ 4; CRS ~ " $}3+!}" 72075300
|
|
END 4; 72075400
|
|
GO X; COMMENT 5 ; 72075500
|
|
BEGIN CU ~ "$"; COMMENT 6 ; 72075600
|
|
SZ ~ 6; CRS ~ "10.@3Q "; 72075700
|
|
END 6; 72075800
|
|
BEGIN CU ~ 36; COMMENT 7 ; 72075900
|
|
SZ~ 7; CRS ~ "2-;@B |" 72076000
|
|
END 7; 72076100
|
|
BEGIN CU ~ 91; COMMENT 8 ; 72076200
|
|
SZ~ 8; CRS ~ "4Z@H6)0" 72076300
|
|
END 8; 72076400
|
|
REPEAT(0,MVNU,0,0,0); COMMENT 9 ; 72077000
|
|
GO X; GO X; GO X; COMMENT #->QUEST.; 72078000
|
|
GENMICRO(0,0,RSTF,0,0,0); COMMENT : ; 72079000
|
|
REPEAT(0,SFSC,0,0,0); COMMENT > ; 72080000
|
|
GO X; GO X; COMMENT }->+; 72081000
|
|
REPEAT(0,MCHR,0,0,0); COMMENT A ; 72082000
|
|
BEGIN CB ~ CNV; GO BACK END; COMMENT B ; 72083000
|
|
BEGIN CC ~ CNV; GO BACK END; COMMENT C ; 72084000
|
|
REPEAT(2,INSC,CB,CC,0); COMMENT D ; 72085000
|
|
REPEAT(3,MFLT,CB,CM,CP); COMMENT E ; 72086000
|
|
REPEAT(3,MFLT,CB,CU,CU); COMMENT F ; 72087000
|
|
GO X; GO X; COMMENT G->H; 72088000
|
|
REPEAT(1,INSU,CN,0,0); COMMENT I ; 72089000
|
|
GO X; GO X; GO X; COMMENT .->&; 72089500
|
|
BEGIN ERR(922); GO WAY END; COMMENT ( ; 72090000
|
|
REPEAT(0,SRSC,0,0,0); COMMENT < ; 72091000
|
|
GO X; GO X; COMMENT ~->|; 72092000
|
|
GENMICRO(2,0,ENDF,CU,CU,0); COMMENT J ; 72093000
|
|
GO X; GO X; COMMENT K->L; 72094000
|
|
BEGIN CM ~ CNV; GO BACK END; COMMENT M ; 72095000
|
|
BEGIN CN ~ CNV; GO BACK END; COMMENT N ; 72096000
|
|
GO X; COMMENT O ; 72097000
|
|
BEGIN CP ~ CNV; GO BACK END; COMMENT P ; 72098000
|
|
BEGIN COMMENT Q ; 72099000
|
|
REPEAT(0,SRDC,0,0,0); 72099100
|
|
GENMICRO(0,0,INOP,0,0,0); 72099200
|
|
END Q; 72100000
|
|
GENMICRO(2,0,ENDF,CM,CP,0); COMMENT R ; 72101000
|
|
GO X; GO X; GO X; COMMENT $->-; 72102000
|
|
BEGIN COMMENT ) ; 72103000
|
|
GENMICRO(-1,0,0,0,0,0); 72104000
|
|
72105000
|
|
BUMPNCR; 72106000
|
|
DEBLANK; 72107000
|
|
IF CHR = "," THEN GO START ELSE GO WAY; 72108000
|
|
END RIGHT PAREN; 72109000
|
|
GO X; GO X; ; GO X; COMMENT SEMI->/; 72110000
|
|
GENMICRO(2,0,INSG,CM,CP,0); COMMENT S ; 72111000
|
|
GO X; COMMENT T ; 72112000
|
|
BEGIN CU ~ CNV; GO BACK END; COMMENT U ; 72113000
|
|
GO X; GO X; COMMENT V->W; 72114000
|
|
REPEAT(0,SFDC,0,0,0); COMMENT X ; 72115000
|
|
GO X; COMMENT Y ; 72116000
|
|
REPEAT(1,MINS,CB,0,0); COMMENT Z ; 72117000
|
|
GO X; GO X; GO X; GO X; GO X; COMMENT ,->]; 72118000
|
|
DO BEGIN COMMENT " ; 72119000
|
|
CHAR ~ NCHR; 72120000
|
|
CNT ~ 1; 72121000
|
|
WHILE NCHR ~ GNCH = CHAR DO CNT ~ CNT + 1; 72122000
|
|
IF CHAR = """ THEN 72123000
|
|
BEGIN 72124000
|
|
CHAR ~ CHAR & CNT [1:47:1]; 72125000
|
|
CNT ~ CNT DIV 2 72126000
|
|
END; 72127000
|
|
IF CNT ! 0 THEN 72127900
|
|
GENMICRO(1,CNT,INSU,CNV,0,0); 72128000
|
|
CNV ~ IF SZ=6 THEN NCHR ELSE IF SZ=8 THEN 72129000
|
|
SPECIAL[NCHR].EBCDF ELSE IF SZ=7 THEN SPECIAL 72130000
|
|
[NCHR].ASCF ELSE IF NCHR>9 THEN NCHR-7 ELSE 72131000
|
|
NCHR; 72131100
|
|
END GOBBLING STRING UNTIL CHAR < 0; 72132000140621PK
|
|
END CASES OF PICTURE CHARACTERS 72133000
|
|
END LOOP OF PICTURE ANALYZER UNTIL FALSE; 72134000
|
|
X: COMMENT ERROR EXIT FROM CASE LOOP; 72135000
|
|
ERR(760); 72136000
|
|
WAY: 72137000
|
|
ELCLASS ~ SEMICOLON; 72137100
|
|
CONTEXT ~ CONTEX; 72138000
|
|
IF AD ! 0 THEN 72138100
|
|
BEGIN 72138200
|
|
WHILE L MOD 6 = 0 DO EMIT(NVLD); 72138300
|
|
PDPRT[PDINX.LINKR,PDINX.LINKC] ~ AD & TEMPADDR[23:35:13] 72139000
|
|
&(L DIV 6) [10:35:13] & REAL(S) [8:47:1] 72140000
|
|
& 4 [4:45:3]; 72141000
|
|
PDINX ~ PDINX + 1; 72142000
|
|
SEGNO ~ TSEG; 72142100
|
|
SEGMENT(PCINX, L DIV 6, EDOC); 72143000
|
|
END; 72143100
|
|
MOVECODE(TEDOC, EDOC); 72144000
|
|
L ~ TL 72145000
|
|
END PICTURE DECLARATION ROUTINE; 72146000
|
|
PROCEDURE INTERRUPTDEC; 79000000
|
|
COMMENT HANDLES THE INTERRUPT DECLARATION WHICH HAS THE FOLLOWING : 79001000
|
|
SYNTAX: 79002000
|
|
<INTERRUPT DECLARATION> ::= INTERRUPT <INTERRUPT LIST> 79003000
|
|
<INTERRUPT LIST> ::=<INTERRUPT SEGMENT>/<INTERRUPT LIST>, 79004000
|
|
<INTERRUPT SEGMENT> 79005000
|
|
<INTERRUPT SEGMENT>::= INTERRUPT IDENTIFIER:<ON PART> 79006000
|
|
<ON PART> ::=ON <EVENT DESIGNATOR>,<STATEMENT> 79007000
|
|
<INTERRUPT IDENTIFIER>::=<IDENTIFIER> 79008000
|
|
; 79008500
|
|
BEGIN 79009000
|
|
LABEL RESIGN,AGAIN,FINI,QUIT ; 79010000
|
|
INTEGER INTADDR %ADDRESS OF INTERRUPT 1ST WORD 79011000
|
|
; 79012000
|
|
DEFINE SOFTWAREINTERRUPTDEC =14 # 79013000
|
|
; 79014000
|
|
DO BEGIN 79015000
|
|
AGAIN: 79016000
|
|
IF STEPI!UNKNOWNID THEN FLAG(700); 79017000
|
|
GTB1~ENTER(0,LOCALTYPE,INTERRUPTID,FALSE); 79018000
|
|
GT1~EMITSPACE(-CURRENT); 79019000
|
|
79020000
|
|
COMMENT THE FIRST WORD OF AN INTERRUPT IS INITIALLY ZERO; 79021000
|
|
EMIT(MKST); 79022000
|
|
EMITN(SOFTWAREINTERRUPTDEC); 79023000
|
|
COMMENT CODE IS EMITTED FOR A CALL ON AN MCP PROCEDURE; 79024000
|
|
IF STEPI!COLON OR STEPI ! ONV THEN GO RESIGN; 79025000
|
|
CONTEXT~2; 79025500
|
|
IF STEPI=ANEVENT 79026000
|
|
THEN BEGIN EMITN (ELBAT[I].ADDRESS);EMIT(STFF);STEPIT;END 79027000
|
|
ELSE IF VARIABLE(FP)!EVTYPE 79028000
|
|
THEN FLAG(785) 79029000
|
|
ELSE INDXCHK; 79030000
|
|
COMMENT WE MUST HAVE AN EVENT DESIGNATOR OF ONE KIND OR ANOTHER. AN IRW79031000
|
|
OR AN INDEXED 00 POINTING TO EVENT IS NOW IN STACK; 79032000
|
|
IF ELCLASS!COMMA THEN GO QUIT ELSE STEPIT; 79033000
|
|
EMITBUZEVENT; 79033500
|
|
EMIT(ZERO); 79033650
|
|
COMMENT IN TOS AT THIS POINT-POINTER TO EVENT (IRW OR INDEXED DD),FIRST79033700
|
|
WORD OF EVENT (WITH DOUBLE TAG), ZERO; 79033750
|
|
INFO[LASTINFO.LINKR,LASTINFO.LINKC].ADDRESS~ INTADDR~INSERTPCW;79034000
|
|
COMMENT A PCW, REFERENCING THE NON-EXECUTABLE CODE, NOW FOLLOWS THE 79035000
|
|
FIRST INTERRUPT WORD IN THE STACK; 79036000
|
|
STATEMENT; 79038000
|
|
EMIT(EXIT); 79039000
|
|
JUMPCHKX; 79040000
|
|
EMITN(INTADDR); STUFF; 79041000
|
|
EMIT(ENTR); 79042000
|
|
COMMENT THIS COMPLETES CALL UPON SOFTWAREINTERRUPTDEC. TWO PARAMETERS 79043000
|
|
ARE PASSED BY NAME, THE FIRST ONE REFERENCING THE EVENT AND 79044000
|
|
THE SECOND REFERENCING THE INTERRUPT PCW.THE FIRST WORD OF 79045000
|
|
EVENT AND A HOLE FOR THE SECOND WORD ARE PASSED(SEPARATELY) BY 79045300
|
|
VALUE; 79045600
|
|
CONTEXT~0; 79046000
|
|
END UNTIL ELCLASS!COMMA; 79047000
|
|
GO FINI; 79047500
|
|
RESIGN: COMMENT MISSING COLON OR ON; 79048000
|
|
FLAG(786); 79049000
|
|
ERRORTOG~TRUE; 79050000
|
|
DO UNTIL STEPI=SEMICOLON; 79051000
|
|
GO FINI; 79052000
|
|
QUIT: COMMENT MISSING COMMA; 79053000
|
|
ERRORTOG~TRUE; 79054000
|
|
FLAG(787); 79055000
|
|
DO UNTIL STEPI=COMMA OR ELCLASS=SEMICOLON; 79056000
|
|
IF ELCLASS=COMMA THEN GO AGAIN; 79057000
|
|
FINI: 79058000
|
|
END INTERRUPTDEC; 79059000
|
|
COMMENT * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 80000000
|
|
SYNTAX CONTROLLERS 80001000
|
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;80002000
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%80003000
|
|
PROCEDURE DECLARATIONS; 80004000
|
|
COMMENT THIS ROUTINE HANDLES THE DECLARATION LIST OF A BLOCK HEAD, 80005000
|
|
BY EXAMINING THE DECLARATORS IN EACH, AND CALLING THE PROPER 80006000
|
|
ROUTINE. BECAUSE OF THE POSSIBILITY OF MULTIPLE DECLARATORS IN80007000
|
|
A DECLARATION(I.E.,"SAVE OWN REAL ARRAY"), WE USE A WIERD 80008000
|
|
ENCODING SCHEME TO REMEMBER THE (VALID) ONES WE HAVE SEEN. 80009000
|
|
THE BOOLEAN, SAVEBIT, IS TRUE IF WE HAVE SEEN "SAVE". THE 80010000
|
|
INTEGER, SEEN, REMEMBERS "OWN","QUEUE","EVENT", AND <TYPE>: 80011000
|
|
FOR <TYPE>, TYP REMEMBERS WHICH (OF "REAL","INTEGER",ETC). 80012000
|
|
AS "OWN" IS INDEPENDENT, IT HAS A BIT BY ITSELF, THE "1" BIT. 80013000
|
|
THE OTHERS, BEING MUTUALLY EXCLUSIVE, HAVE THE VALUES 6, 4, AND80014000
|
|
2, RESPECTIVELY; 80015000
|
|
BEGIN 80016000
|
|
BOOLEAN SAVEBIT; 80017000
|
|
INTEGER SEEN, TYP; 80018000
|
|
LABEL ON,ROUND,LTYPE,LEVENT,LQUE,LSAV,LOWN,LARRAY,LPROC,LFIELD,80019000
|
|
LDEFIN,LLABEL,LLAY,LPIX,LMON,LVALUE,AWAY; 80020000
|
|
LABEL LINTRP ; 80020500
|
|
% SPACE FOR SWITCH DEC 80022000
|
|
DEFINE BOTTOM = 68#; 80023000
|
|
SWITCH DECSW ~LTYPE ,LFIELD,LARRAY,LOWN ,LDEFIN,LLABEL,LPROC ,80024000
|
|
LSAV ,LLAY ,LEVENT,LQUE ,LINTRP,LPIX ,ON ,LMON ,LVALUE;80025000
|
|
DEFINE CSN = IF SEEN !0THEN FLAG(801) #, 80026000
|
|
CSB = IF SAVEBIT THEN FLAG(802)#, 80027000
|
|
C = CSB ELSE CSN #, 80028000
|
|
OWNBIT = BOOLEAN(SEEN)#; 80029000
|
|
ELCLASS ~ SEMICOLON; 80030000
|
|
ON: IF ELCLASS ! SEMICOLON THEN 80031000
|
|
BEGIN ERR(800); GO AWAY END; 80032000
|
|
ERRORTOG ~ TRUE; 80032100
|
|
SEEN ~ REAL(SAVEBIT ~ FALSE); 80033000
|
|
CONTEXT ~ 2; 80034000
|
|
ROUND: STEPIT; CONTEXT ~ 0; 80035000
|
|
IF SEPARATOG THEN 80035910
|
|
IF ELCLASS!SAVEV THEN IF ELCLASS!TYPEV THEN 80035920
|
|
IF ELCLASS!PROCV THEN BEGIN FLAG(838); GO ON END; 80035930
|
|
GO TO DECSW[ELCLASS - BOTTOM]; 80036000
|
|
IF ELCLASS ! UNKNOWNID THEN 80037000
|
|
IF NOT (SEEN ! 0 OR SAVEBIT) THEN GO AWAY; 80038000
|
|
IF SAVEBIT THEN 80039000
|
|
BEGIN ERR(801); GO AWAY END; 80040000
|
|
CASE SEEN OF BEGIN 80041000
|
|
BEGIN ERR(100); GO AWAY END; % NOTHING 80042000
|
|
BEGIN ERR(801); GO AWAY END; % OWN 80043000
|
|
IDLIST(CURRENT,LOCALTYPE,BOOID+TYP,TYP,TRUE);% TYPE 80044000
|
|
IDLIST(-GLOBAL,LOCALTYPE,BOOID+TYP,TYP,TRUE);% OWN TYPE 80045000
|
|
EVENTDEC(CURRENT); % EVENT 80046000
|
|
EVENTDEC(-GLOBAL); %OWN EVENT 80047000
|
|
QUEUEDEC(CURRENT); % QUEUE 80048000
|
|
QUEUEDEC(GLOBAL); % OWN QUEUE 80049000140621PK
|
|
END CASES OF MULTIPLE DECLARATORS; 80050000
|
|
GO ON; 80051000
|
|
LTYPE: IF SEEN > 1 THEN FLAG(801) ELSE SEEN ~ SEEN + 2; 80052000
|
|
TYP ~ TAKE(ELBAT[I]).LINK; 80053000
|
|
GO ROUND; 80054000
|
|
LEVENT: IF SEEN > 1 THEN FLAG(801) ELSE SEEN ~ SEEN + 4; 80055000
|
|
GO ROUND; 80056000
|
|
LQUE: IF SEEN > 1 THEN FLAG(801) ELSE SEEN ~ SEEN + 6; 80057000
|
|
GO ROUND; 80058000
|
|
LSAV: IF SEEN ! 0 OR SAVEBIT THEN FLAG(802); 80059000
|
|
IF TABLE(I+1) = NUMBER THEN 80059100
|
|
BEGIN I ~ I + 1; SAVEBIT ~ BOOLEAN(2|THI+1) END ELSE 80059200
|
|
SAVEBIT ~ TRUE; 80060000
|
|
GO ROUND; 80061000
|
|
LOWN: IF SEEN!0 THEN FLAG(803) ELSE 80062000
|
|
IF REAL(SEPARATOG)=4 THEN FLAG(840) ELSE SEEN~1; 80062500
|
|
GO ROUND; 80063000
|
|
LARRAY: ARRAYDEC(SAVEBIT,OWNBIT,IF SEEN{1 THEN REALARRAYID ELSE 80064000
|
|
IF SEEN{3 THEN BOOARRAYID+TYP ELSE 80065000
|
|
IF SEEN{5 THEN EVENTARRAYID ELSE 80066000
|
|
QUEUEARRAYID); 80067000
|
|
ARRAYDECTOG~ARRAYDECTOG OR BOOLEAN(2*CURRENT); 80067500
|
|
GO ON; 80068000
|
|
LPROC: 80069000
|
|
IF OWNBIT THEN FLAG(803); 80070000
|
|
IF SEEN > 3 THEN FLAG(801); 80071000
|
|
IF SEPARATOG THEN 80071100
|
|
IF SAVEBIT THEN 80071200
|
|
BEGIN FLAG(839); SAVEBIT~FALSE END; 80071300
|
|
PROCEDUREDEC(SAVEBIT,IF SEEN<2 THEN PROCID ELSE 80072000
|
|
BOOPROCID + TYP); 80073000
|
|
IF SEPARATOG THEN GO AWAY ELSE GO ON; 80074000
|
|
LFIELD: 80075000
|
|
C; FIELDEC; GO ON; 80076000
|
|
LDEFIN: 80077000
|
|
C; DEFINEDEC; GO ON; 80078000
|
|
LINTRP : 80078500
|
|
C;INTERRUPTDEC; GO ON; 80078800
|
|
LLABEL: 80079000
|
|
C; 80080000
|
|
STEPIT; 80081000
|
|
SEEN ~ NEXTINFO; 80082000
|
|
IDLIST(0 & CURRENT[30:42:6],F0RWARD,LABELID,-1,FALSE); 80083000
|
|
DO PUT((GT1 ~ TAKE(SEEN))&0[33:33:15],SEEN) 80084000
|
|
UNTIL SEEN ~ GT1.LINK } NEXTINFO; 80085000
|
|
GO ON; 80086000
|
|
LLAY: 80087000
|
|
C; LAYOUTDEC; GO ON; 80088000
|
|
LPIX: 80089000
|
|
IF SEEN > 1 THEN FLAG(801) ELSE 80090000
|
|
IF OWNBIT AND SAVEBIT THEN FLAG(802); 80090100
|
|
PICTUREDEC(SAVEBIT); 80090200
|
|
GO ON; 80090300
|
|
LMON: 80091000
|
|
C; MERRIMAC; GO ON; 80092000
|
|
LVALUE: 80093000
|
|
IF OWNBIT THEN FLAG(803); 80094000
|
|
IF SEEN > 3 THEN FLAG(801); 80095000
|
|
IF SEEN < 2 THEN TYP ~ REALV; 80096000
|
|
IF REAL(SEPARATOG)=4 THEN 80096300
|
|
BEGIN FLAG(841); GO ROUND END; 80096600
|
|
READONLYARRAYDEC(SAVEBIT,TYP); 80097000
|
|
GO ON; 80098000
|
|
AWAY: 80100000
|
|
END OF DECLARATIONS; 80101000
|
|
80102000
|
|
80103000
|
|
80103500
|
|
PROCEDURE STATEMENT; 80104000
|
|
COMMENT STATEMENT HANDLES ONE OF THEM PER CALL, USUALLY BY CALLING 80105000
|
|
THE PROPER PROCEDURE. SOME CASES, HOWEVER, IT HANDLES ITSELF, 80106000
|
|
USUALLY BY RECURSION; 80107000
|
|
BEGIN 80108000
|
|
INTEGER LO; 80109000
|
|
BOOLEAN B; 80110000
|
|
LABEL ERROR; 80111000
|
|
LABEL AROUND, LPROC, LABLE, SCNERR, LTPROC, LID, LARRAY, LREG, 80112000
|
|
LQUEUE, LCASE, LBEGIN, LDO, LIF, LGO, LFOR, LWHILE, 80113000
|
|
LDEC, AWAY, LSETID, LSCAN, LREPL; 80114000
|
|
LABEL LQALG, LTHRU; 80114500
|
|
LABEL LEVIN; 80114800
|
|
DEFINE BOTTOM = 4#; 80115000
|
|
SWITCH STMTSW~LPROC ,LABLE ,SCNERR,LTPROC,LTPROC,LTPROC,LTPROC,80116000
|
|
LTPROC,LTPROC,LTPROC,LID ,LID ,LID ,LID ,LID ,LID ,80117000
|
|
LID ,LARRAY,LARRAY,LARRAY,LARRAY,LARRAY,LARRAY,ERROR ,ERROR ,80118000
|
|
ERROR ,ERROR ,ERROR ,ERROR ,LQUEUE,LREG ,LQUEUE,ERROR ,ERROR ,80119000
|
|
ERROR ,ERROR, ERROR, LQALG ,ERROR ,LEVIN ,ERROR ,ERROR ,ERROR ,80120000
|
|
ERROR ,LCASE ,LBEGIN,LDEC ,LDO ,LIF ,LGO ,LTHRU ,LFOR ,80121000
|
|
LWHILE,LSCAN ,LREPL ,ERROR ,ERROR ,AWAY ,AWAY ,AWAY ,AWAY ,80122000
|
|
SCNERR,SCNERR,ERROR ,LDEC ,LDEC ,LDEC ,LDEC ,LDEC ,LDEC ,80123000
|
|
LDEC ,LDEC ,LDEC ,LDEC ,LDEC ,LDEC ,LDEC ,LDEC ,LDEC ,80123100
|
|
LDEC ; 80123200
|
|
AROUND: 80124000
|
|
IF ELCLASS { IDMAX THEN 80124100
|
|
IF ELCLASS ! LABELID THEN 80124110
|
|
IF ELBAT[I].LINK < NINFOO THEN COMMENT TRY FOR LABEL; 80124200
|
|
BEGIN 80124300
|
|
MOVE(9,ACCUM[1],SCRATCH); 80124400
|
|
IF TABLE(I+1) = COLON THEN 80124500
|
|
BEGIN 80124600
|
|
MOVE(9,SCRATCH,ACCUM[1]); 80124700
|
|
COUNT ~ ACCUM[1].CHRCNT; 80124750
|
|
IF NOT FUTZALABEL THEN GO TO LABLE 80124800
|
|
END END; 80124900
|
|
GO TO STMTSW[ELCLASS - BOTTOM]; 80125000
|
|
ERROR: 80125100
|
|
ERR(804); 80126000
|
|
GO AWAY; 80127000
|
|
LPROC: COMMENT PROCEDURE; 80128000
|
|
GT1 ~ PROCALL(FALSE,XTYPE); 80129000
|
|
GO AWAY; 80130000
|
|
LEVIN: COMMENT EVENT INTRINSIC; 80130100
|
|
IF GT1~TAKE(ELBAT[I]).KIND=HAPPENEDKEY OR GT1=AVAILABLEKEY 80130150
|
|
OR GT1=SECONDWORDKEY THEN FLAG(836); 80130155
|
|
FIXCALL~FALSE; 80130157
|
|
EVENTINTRINSIC; 80130200
|
|
GO AWAY; 80130250
|
|
LQALG: COMMENT QUEUE ALGORITHM; 80130300
|
|
QALGORITHM(0,0,FALSE); 80130310
|
|
GO AWAY; 80130320
|
|
LABLE: COMMENT LABELID; 80131000
|
|
LABELR; 80132000
|
|
GO AROUND; 80133000
|
|
SCNERR: COMMENT SCANNER ERROR; 80134000
|
|
ERR(101); 80135000
|
|
GO AWAY; 80136000
|
|
LTPROC: COMMENT TYPED PROCEDURE; 80137000
|
|
GT1 ~ PROCALL(FALSE,XTYPE); 80138000
|
|
COMMENT PROCALL MAY CALL VARIABLE OR GEN PROC. ENTRY; 80139000
|
|
GO AWAY; 80140000
|
|
LREG: COMMENT REGISTER; 80141000
|
|
LARRAY: COMMENT ARRAY; 80142000
|
|
LID: COMMENT VARIABLE; 80143000
|
|
GT1 ~ VARIABLE(FS); 80144000
|
|
GO AWAY; 80145000
|
|
LQUEUE: COMMENT QUEUE OR QUEUE ARRAY; 80146000
|
|
QSTMT; 80147000
|
|
GO AWAY; 80148000
|
|
LCASE: COMMENT "CASE"; 80149000
|
|
CASESTMT; 80150000
|
|
GO AWAY; 80151000
|
|
LBEGIN: COMMENT "BEGIN"; 80152000
|
|
BEGINCTR ~ BEGINCTR + 1; 80153000
|
|
IF GT1 ~ TABLE(I+1) } MINDEC AND GT1 { MAXDEC THEN 80154000
|
|
BLOCK ELSE 80155000
|
|
BEGIN 80156000
|
|
STEPIT; 80157000
|
|
COMPOUNDTAIL 80158000
|
|
END; 80159000
|
|
GO AWAY; 80160000
|
|
LDO: COMMENT "DO". COMPILE HERE; 80161000
|
|
LO ~ L; STEPIT; 80162000
|
|
STATEMENT; 80163000
|
|
IF ELCLASS ! UNTILV THEN 80164000
|
|
BEGIN ERR(806); GO AWAY END; 80165000
|
|
STEPIT; 80166000
|
|
BEXP; 80167000
|
|
IF B ~ L = LASTNOT THEN EMITNOT; 80168000
|
|
EMITB(IF B THEN BRTR ELSE BRFL,BUMPL,LO); 80169000
|
|
GO AWAY; 80170000
|
|
LIF: COMMENT "IF"; 80171000
|
|
IFSTMT; 80172000
|
|
GO AWAY; 80173000
|
|
LGO: COMMENT "GO"; 80174000
|
|
GOSTMT; 80175000
|
|
GO AWAY; 80176000
|
|
LFOR: COMMENT "FOR"; 80177000
|
|
FORSTMT; 80178000
|
|
GO AWAY; 80179000
|
|
LTHRU: COMMENT " THRU"; 80179100
|
|
THRUSTMT; 80179200
|
|
GO AWAY; 80179300
|
|
LWHILE: COMMENT "WHILE"; 80180000
|
|
STEPIT; LO ~ L; 80181000
|
|
BEXP; 80182000
|
|
IF ELCLASS ! DOV THEN 80183000
|
|
BEGIN ERR(807); GO AWAY END; 80184000
|
|
STEPIT; 80185000
|
|
IF LASTNOT = L THEN B ~ BOOLEAN(-L~L+2) 80186000
|
|
ELSE B ~ BOOLEAN(BUMPL); 80187000
|
|
STATEMENT; 80188000
|
|
EMITB(BRUN,BUMPL,LO); 80189000
|
|
EMITB(IF B.[1:1] THEN BRTR ELSE BRFL,ABS(REAL(B)),L); 80190000
|
|
GO AWAY; 80191000
|
|
LDEC: COMMENT DECLARATION; 80192000
|
|
FLAG(805); 80193000
|
|
LO ~ BUMPL; DECLARATIONS; 80194000
|
|
IF L = LO THEN L ~ L - 3 ELSE 80194100
|
|
BEGIN JUMPCHKNX; EMITB(BRUN,LO,L) END; 80194200
|
|
GO AWAY; 80195000
|
|
LSCAN: COMMENT "SCAN"; 80196000
|
|
SCANSTMT; 80197000
|
|
GO AWAY; 80198000
|
|
LREPL: COMMENT "REPLACE"; 80200000
|
|
REPLACESTMT; 80201000
|
|
GO AWAY; 80201100
|
|
AWAY: 80202000
|
|
END THE STATEMENT ROUTINE; 80203000
|
|
INTEGER PROCEDURE PRIMARY; 80204000
|
|
COMMENT PRIMARY COMPILES AN ARITHMETIC OR ARRAY PRIMARY; 80205000
|
|
BEGIN 80206000
|
|
REAL LT1,LT2; 80207000
|
|
LABEL ERROR, LDPROC, LAPROC, LIPROC, LDVAR, DT, LAVAR, AT, 80208000
|
|
LIVAR, IT, LARR, LREG, LNUM, LPAREN, SUBSCRIBE, LCASE, 80209000
|
|
SCNERR, LTYPE, DOTTY, ON, WAY; 80210000
|
|
LABEL LQALG; 80211500
|
|
LABEL LEVIN; 80211530
|
|
LABEL LWPROC,WT,LWVAR; 80211550
|
|
DEFINE BOTTOM = 6#; 80212000
|
|
SWITCH PRIMSW~SCNERR,ERROR ,LDPROC,LAPROC,LIPROC,ERROR ,LWPROC,80213000
|
|
ERROR ,ERROR ,LDVAR ,LAVAR , LIVAR ,LARR ,LWVAR ,LARR ,LARR ,80214000
|
|
LARR ,LARR ,LARR ,LARR ,LARR ,ERROR ,LARR ,LARR ,LARR ,80215000
|
|
LARR ,ERROR ,ERROR ,LREG ,ERROR ,ERROR ,ERROR ,LNUM ,LNUM ,80216000
|
|
ERROR ,LQALG ,ERROR ,LEVIN ,ERROR ,ERROR ,ERROR ,LPAREN,LCASE ,80217000
|
|
ERROR ,ERROR ,ERROR ,ERROR ,ERROR ,ERROR ,ERROR ,ERROR ,ERROR ,80218000
|
|
ERROR ,ERROR ,ERROR ,ERROR ,ERROR ,ERROR ,ERROR ,SCNERR,SCNERR,80219000
|
|
ERROR ,LTYPE ; 80219100
|
|
SWITCH PROCSW ~ DT, AT, IT, ERROR, WT; 80219200
|
|
GO TO PRIMSW[ELCLASS - BOTTOM]; 80220000
|
|
IF ELCLASS = 0 THEN FLAG(100) ELSE 80221000
|
|
ERROR: 80222000
|
|
FLAG(808); 80223000
|
|
GO WAY; 80224000
|
|
LEVIN: COMMENT EVTNTINTRINSIC; 80224020
|
|
IF GT1~TAKE(ELBAT[I]).KIND!SECONDWORDKEY AND 80224040
|
|
GT1!SETKEY AND GT1!RESETKEY THEN FLAG(836); 80224050
|
|
IF GT1=SETKEY OR GT1=RESETKEY THEN 80224055
|
|
BEGIN PRIMARY~LT1~BITFIDDLE(GT1=SETKEY); GO SUBSCRIBE END; 80224057
|
|
EVENTINTRINSIC; 80224060
|
|
GO TO AT; 80224080
|
|
LQALG: COMMENT QUEUE ALGORITHM; 80224200
|
|
IF ELBAT[I].TYPE!ITYPE THEN GO TO ERROR; 80224210
|
|
QALGORITHM(0,0,TRUE); 80224220
|
|
GO TO IT; 80224230
|
|
LDPROC: COMMENT D.P. PROC ID; 80225000
|
|
LAPROC: COMMENT REAL PROC ID; 80228000
|
|
LIPROC: COMMENT INTEGER PROC ID; 80231000
|
|
LWPROC: COMMENT WORD PROCEDURE ID; 80233200
|
|
GO TO PROCSW[GT1 ~ PROCALL(TRUE,ELCLASS-BOOPROCID)]; 80233400
|
|
COMMENT SOME PROCEDURES CHANGE TYPE ON YOU; 80233450
|
|
IF GT1 < 0 THEN GO TO LARR; 80233500
|
|
GO TO ERROR; 80233600
|
|
LDVAR: COMMENT DP ID; 80234000
|
|
IF (GT1~VARIABLE(FP))!DTYPE AND GT1!WTYPE THEN FLAG(810); 80235000
|
|
DT: 80236000
|
|
PRIMARY ~ DTYPE; 80237000
|
|
GO WAY; 80238000
|
|
LAVAR: COMMENT REAL ID; 80239000
|
|
IF (GT1~VARIABLE(FP))!ATYPE AND GT1!WTYPE THEN FLAG(810); 80240000
|
|
AT: 80241000
|
|
PRIMARY ~ ATYPE; 80242000
|
|
GO DOTTY; 80243000
|
|
LIVAR: COMMENT INTEGER ID; 80244000
|
|
IF (GT1~VARIABLE(FP))!ITYPE AND GT1!WTYPE THEN FLAG(810); 80245000
|
|
IT: 80246000
|
|
PRIMARY ~ ITYPE; 80247000
|
|
GO DOTTY; 80248000
|
|
LWVAR: COMMENT WORD ID; 80248300
|
|
GT1~VARIABLE(FP); 80248400
|
|
WT: PRIMARY~LT1~GT1; 80248500
|
|
GO DOTTY; 80248800
|
|
LARR: COMMENT ARITHMETIC ARRAY ID; 80249000
|
|
IF PRIMARY ~ VARIABLE(FP) = DTYPE THEN GO WAY ELSE GO DOTTY; 80250000
|
|
LREG: COMMENT REGISTER ID; 80251000
|
|
LT1 ~ ELBAT[I].ADDRESS; 80252000
|
|
IF STEPI ! ASSNOP THEN BEGIN FLAG(815); GO WAY END; 80253000
|
|
STEPIT; 80254000
|
|
PRIMARY ~ AEXP; 80255000
|
|
EMIT(DUPL); EMIT(RSDN); EMIT(LT1); 80256000
|
|
GO ON; 80257000
|
|
LNUM: COMMENT NUMBER; 80258000
|
|
80258100
|
|
IF DPTOG THEN 80259000
|
|
BEGIN EMITDP(THI,TLO); 80260000
|
|
PRIMARY ~ DTYPE; 80261000
|
|
STEPIT; 80261100
|
|
GO WAY 80262000
|
|
END DP; 80263000
|
|
EMITNUMBER(THI, REAL(THIFLAG)); 80264000
|
|
PRIMARY ~ IF THI.[1:8] = 0 THEN ITYPE ELSE ATYPE; 80265000
|
|
STEPIT; 80266000
|
|
GO ON; 80267000
|
|
LCASE: COMMENT "CASE"; 80268000
|
|
PRIMARY ~ LT1 ~ CASEXP; 80269000
|
|
GO SUBSCRIBE; 80270000
|
|
LPAREN: COMMENT A PARENTHETICAL EXPRESSION; 80272000
|
|
STEPIT; 80273000
|
|
PRIMARY ~ LT1 ~ AEXP; 80274000
|
|
IF ELCLASS ! RTPARN THEN BEGIN FLAG(809); GO WAY END; 80275000
|
|
STEPIT; 80275500
|
|
COMMENT THE EXPRESSION(S) IN THE PARENS MAY HAVE BEEN INDEXABLE, 80276000
|
|
AND MAY BE FOLLOWED HERE BY A SUBSCRIPT LIST; 80277000
|
|
SUBSCRIBE: 80278000
|
|
IF LT1 < XTYPE THEN 80279000
|
|
IF ELCLASS ! LFTBRKT THEN GO DOTTY ELSE 80280000
|
|
BEGIN COMMENT THE SUBSCRIPT LIST; 80281000
|
|
IF GT1 ~ SUBSCRIBER(0,LT1.[CF]) ! 0 THEN 80282000
|
|
BEGIN PRIMARY ~ LT1>1[33:CF]; 80283000
|
|
EMIT(NXLN); GO DOTTY 80284000
|
|
END; 80285000
|
|
IF PRIMARY ~ LT1 ~ LT1.[FF] = RTYPE THEN 80286000
|
|
BEGIN EMIT(INDX); EMIT(LOAD) END ELSE 80287000
|
|
IF LT1=WTYPE THEN BEGIN EMIT(INDX);EMIT(LODT) END ELSE 80287500
|
|
EMIT(NXLV); 80288000
|
|
END OF SUBSCRIPTED APRAY EXPRESSION; 80289000
|
|
IF LT1 = DTYPE THEN GO WAY ELSE GO DOTTY; 80290000
|
|
SCNERR: COMMENT OOPS; 80291000
|
|
FLAG(102); 80292000
|
|
GO DOTTY; 80293000
|
|
LTYPE: COMMENT A TYPE DECLARATOR; 80294000
|
|
IF LT1~TAKE(ELBAT[I]).LINK > PTRV OR LT1=BOOV THEN 80295000
|
|
BEGIN FLAG(811); STEPIT; GO TO LPAREN END; 80296000
|
|
IF STEPI ! LFTPRN THEN 80297000
|
|
BEGIN FLAG(812); GO WAY END; 80298000
|
|
STEPIT; 80299000
|
|
IF LT2 ~ EXPRSS = LT1 THEN FLAG(813) ELSE 80300000
|
|
IF ELCLASS ! COMMA THEN 80302000
|
|
IF LT1 = INTV THEN EMIT(NTGR) ELSE 80304000
|
|
IF LT1 = DPV THEN EMIT(XTND) ELSE 80305000
|
|
IF LT1 = REALV AND LT2 = DTYPE THEN EMIT(SNGL) ELSE ELSE 80306000
|
|
BEGIN STEPIT; 80307000
|
|
IF GT1~EXPRSS<XTYPE OR GT1>ITYPE AND GT1! WTYPE 80308000
|
|
THEN FLAG(814); 80308500
|
|
IF LT2 = PTYPE THEN 80309000
|
|
BEGIN 80310000
|
|
IF LT1 = REALV THEN EMIT(SISO) ELSE 80311000
|
|
BEGIN EMIT(ICVD); 80312000
|
|
EMIT(IF LT1 = INTV THEN NTGR ELSE XTND) 80313000
|
|
END END ELSE 80314000
|
|
IF LT1 ! DPV THEN FLAG(814) ELSE 80315000
|
|
IF GT1 = DTYPE THEN FLAG(814) ELSE EMIT(JOIN) 80316000
|
|
END; 80317000
|
|
PRIMARY ~ LT1; 80318000
|
|
IF ELCLASS ! RTPARN THEN FLAG(809); STEPIT; 80319000
|
|
IF LT1 = DTYPE THEN GO WAY; 80320000
|
|
DOTTY: 80321000
|
|
IF ELCLASS = PERIODV THEN 80322000
|
|
BEGIN PRIMARY ~ATYPE; 80323000
|
|
IF STEPI=TAGV 80323500
|
|
THEN BEGIN EMIT(RTAG); STEPIT END ELSE 80323800
|
|
IF GT1 ~ DOTIT = 0 THEN EMIT(DISO) ELSE 80324000
|
|
EMITI(GT1.[36:6],GT1.[42:6]) 80325000
|
|
END; 80326000
|
|
ON: 80327000
|
|
WHILE ELCLASS = AMPERSAND DO LAYITOUT(ATYPE); 80328000
|
|
WAY: 80329000
|
|
END PRIMARY; 80330000
|
|
INTEGER PROCEDURE BOOPRIM; 80331000
|
|
COMMENT THE BOOLEAN PRIMARY ROUTINE WILL COMPILE A BOOLEAN PRIMARY IF 80332000
|
|
IT CAN: OTHERWISE, IT CONTENTS ITSELF WITH A REFERENCE, 80333000
|
|
POINTER, OR ARITHMETIC EXPRESSION; 80334000
|
|
BEGIN 80335000
|
|
INTEGER T; 80336000
|
|
REAL QATIPE; 80336500
|
|
BOOLEAN GTB1; 80336550
|
|
LABEL LBPROC,LBARR,LBVAR,LTRUTH,LCASE,LPAREN,LB,LTYPE,LREF, 80337000
|
|
LPTR,LARITH,RC,DOTTY,ON,WAY,SCNERR,ERROR; 80338000
|
|
LABEL LSETID,LSTRNG,BOOTYPE; 80339000
|
|
LABEL LQALG; 80339500
|
|
LABEL LWPROC,LWARR,LWVAR; 80339550
|
|
LABEL LEVIN; 80339555
|
|
LABEL LRARR; 80339580
|
|
DEFINE BOTTOM = 6#; 80340000
|
|
SWITCH BPSWCH~SCNERR,LBPROC,LARITH,LBPROC,LARITH,LREF ,LWPROC,80341000
|
|
LPTR ,LBVAR ,LARITH,LARITH,LARITH,LREF ,LWVAR ,LPTR ,LBARR ,80342000
|
|
LARITH,LARITH,LARITH,LRARR ,LWARR ,ERROR ,LBARR ,LARITH,LARITH,80343000
|
|
LARITH,ERROR ,LREF ,LARITH,LREF ,LREF ,LTRUTH,LARITH,LARITH,80344000
|
|
ERROR ,LQALG ,ERROR ,LEVIN ,ERROR ,ERROR ,ERROR ,LPAREN,LCASE ,80345000
|
|
ERROR ,ERROR ,ERROR ,ERROR ,ERROR ,ERROR ,ERROR ,ERROR ,ERROR ,80346000
|
|
ERROR ,ERROR ,ERROR ,ERROR ,ERROR ,ERROR ,ERROR ,SCNERR,SCNERR,80347000
|
|
LARITH,LTYPE ; 80347100
|
|
T ~ BTYPE; 80348000
|
|
GO TO BPSWCH[ELCLASS - BOTTOM]; 80349000
|
|
IF ELCLASS = UNKNOWNID THEN FLAG(100) ELSE 80350000
|
|
ERROR: FLAG(817); 80351000
|
|
STEPIT; GO WAY; 80352000
|
|
SCNERR: FLAG(103); GO WAY; 80353000
|
|
LQALG: COMMENT QUEUE ALGORITHM; 80353200
|
|
IF (QATIPE~ ELBAT[I].TYPE)=PROCD THEN GO TO ERROR; 80353210
|
|
IF QATIPE = ITYPE THEN GO TO LARITH; 80353230
|
|
IF QATIPE = RTYPE THEN GO TO LREF; 80353240
|
|
COMMENT IT IS BOOLEAN TYPE QUEUE ALGORITHM; 80353260
|
|
QALGORITHM(0,0,TRUE); 80353270
|
|
GO DOTTY; 80353290
|
|
LWPROC: COMMENT WORD PROCEDURE; 80353295
|
|
80353298
|
|
LBPROC: COMMENT BOOLEAN PROCEDURE; 80354000
|
|
T ~ PROCALL(TRUE,ELCLASS-BOOPROCID); 80355000
|
|
IF (GTB1 ~ T>BTYPE AND T<RTYPE) OR T=BTYPE THEN GO DOTTY; 80356000
|
|
IF T=PTYPE THEN PTRCOMP; 80356050
|
|
IF T!WTYPE THEN GO DOTTY ELSE IF ELCLASS=RELOP AND 80356100
|
|
ELBAT[I].DISP=SAME THEN GO RC ELSE GO DOTTY; 80356150
|
|
LEVIN: COMMENT EVENT INTRINSIC; 80356200
|
|
IF GT1~TAKE(ELBAT[I]).KIND=SECONDWORDKEY THEN GO TO LARITH; 80356300
|
|
IF GT1= SETKEY OR GT1=RESETKEY THEN 80356320
|
|
BEGIN T ~ BITFIDDLE(GT1= SETKEY); GO TO LB END; 80356340
|
|
IF GT1!HAPPENEDKEY AND GT1!AVAILABLEKEY AND GT1!FIXKEY 80356400
|
|
THEN FLAG(837); 80356450
|
|
FIXCALL~TRUE; 80356500
|
|
EVENTINTRINSIC; 80356600
|
|
GO WAY; 80356650
|
|
LBARR: COMMENT BOOLEAN ARRAY; 80357000
|
|
IF T ~ VARIABLE(FP) < XTYPE THEN GO DOTTY ELSE GO ON; 80358000
|
|
LRARR: COMMENT REFERENCE ARRAY; 80358050
|
|
IF T~VARIABLE(FP) < XTYPE THEN ELSE GO ON; 80358080
|
|
T~ T.[FF]; GO TO DOTTY; 80358090
|
|
LWVAR: COMMENT WORD VARIABLE; 80358500
|
|
T~VARIABLE(FP); 80358550
|
|
GO TO DOTTY; 80358600
|
|
LBVAR: COMMENT BOOLEAN VARIABLE; 80359000
|
|
IF GT1~VARIABLE(FP)=BTYPE OR GT1=WTYPE THEN GO TO DOTTY; 80360000
|
|
FLAG(818); 80361000
|
|
GO WAY; 80362000
|
|
LTRUTH: COMMENT TRUTH VALUE-TRUE OR FALSE; 80364000
|
|
EMIT(ELBAT[I].ADDRESS); 80365000
|
|
STEPIT; 80366000
|
|
GO ON; 80367000
|
|
LCASE: COMMENT SOME SORT OF CASE EXPRESSION; 80368000
|
|
T ~ CASEXP; 80369000
|
|
GO TO LB; 80370000
|
|
LPAREN: COMMENT A PARENTHETICAL EXPRESSION; 80371000
|
|
STEPIT; 80372000
|
|
T ~ EXPRSS; 80373000
|
|
IF ELCLASS ! RTPARN THEN FLAG(819); 80374000
|
|
STEPIT; 80375000
|
|
LB: COMMENT CHECK FOR FLOATING SUBSCRIPT LIST; 80376000
|
|
IF T < XTYPE THEN 80377000
|
|
IF ELCLASS ! LFTBRKT THEN GO DOTTY ELSE 80378000
|
|
IF GT1 ~ SUBSCRIBER(0,T.[CF]) = 0 THEN T ~ T.[FF] ELSE 80379000
|
|
BEGIN T ~ T & GT1[33:CF]; GO DOTTY END; 80380000
|
|
COMMENT NOW DO WHAT IS APPROPRIATE FOR THE EXPR;80381000
|
|
GTB1~FALSE; 80381500
|
|
IF T = BTYPE THEN GO DOTTY; 80382000
|
|
IF T = RTYPE THEN GO DOTTY; 80383000
|
|
IF T = PTYPE THEN BEGIN PTRCOMP; GO TO DOTTY END; 80384000
|
|
IF T=WTYPE THEN GO DOTTY; 80384500
|
|
GTB1~TRUE; 80384550
|
|
GO DOTTY; 80385000
|
|
GO TO RC; 80386000
|
|
LTYPE: COMMENT A TYPE (DECLARATOR); 80387000
|
|
IF T~TAKE(ELBAT[I]).LINK=BOOV OR T=WDV THEN 80388000
|
|
BEGIN 80389000
|
|
IF STEPI ! LFTPRN THEN FLAG(820); 80390000
|
|
STEPIT; 80391000
|
|
IF GT1 ~ EXPRSS = ETYPE THEN EMIT(SNGT) ELSE 80392000
|
|
IF GT1 ! ATYPE THEN 80393000
|
|
IF GT1! WTYPE THEN 80393500
|
|
IF GT1!ITYPE AND T!WDV THEN FLAG(821); 80394000
|
|
IF ELCLASS ! RTPARN THEN FLAG(819); 80395000
|
|
STEPIT; 80396000
|
|
DOTTY: IF ELCLASS!PERIODV 80397000
|
|
THEN IF GTB1 80397020
|
|
THEN BEGIN T~ARITHCOMP(T);GO TO RC END 80397040
|
|
ELSE IF T=RTYPE OR T=PTYPE OR T=WTYPE THEN GO TO RC 80397060
|
|
ELSE GO TO ON; 80397080
|
|
IF STEPI=TAGV 80397500
|
|
THEN BEGIN EMIT(RTAG); STEPIT; END ELSE 80397800
|
|
IF GT1 ~ DOTIT = 0 THEN EMIT(DISO) ELSE 80398000
|
|
EMITI(GT1.[36:6],GT1.[42:6]); 80399000
|
|
IF T=WTYPE OR T=PTYPE OR T=RTYPE THEN 80399300
|
|
BEGIN T~ARITHCOMP(ATYPE); GO TO RC END; 80399400
|
|
IF GTB1 THEN BEGIN T~ARITHCOMP(T); GO TO RC END; 80399500
|
|
IF T } XTYPE THEN GO ON; 80400000
|
|
T ~ ARITHCOMP(ATYPE); 80401000
|
|
END ELSE 80402000
|
|
IF T = REFV THEN 80403000
|
|
LREF: COMMENT REFERENCE-TYPE STUFF; 80404000
|
|
BEGIN T~ REXP(TRUE); GO TO DOTTY END ELSE 80405000
|
|
IF T = PTRV THEN 80406000
|
|
LPTR: COMMENT POINTER-TYPE THINGS; 80407000
|
|
BEGIN T~ PEXP(TRUE); GO TO DOTTY END ELSE 80408000
|
|
LWARR: 80408500
|
|
LARITH: COMMENT ARITHMETIC-TYPE THINGS; 80409000
|
|
IF T ~ AEXP < XTYPE THEN GO WAY; 80410000
|
|
RC: COMMENT WE HAVE AN EXPRESSION, BUT IT IS NOT 80411000
|
|
BOOLEAN. WE STILL HAVE A CHANCE TO SAVE THE 80412000
|
|
DAY FOR DEAR OLD GEORGE, HOWEVER: IT MAY BE 80413000
|
|
A RELATION; 80414000
|
|
IF ELCLASS = INV THEN 80414100
|
|
BEGIN 80414200
|
|
IF T!ATYPE AND T!ITYPE AND T!PTYPE THEN FLAG(834); 80414300
|
|
MAKEARRAYROW; 80414400
|
|
IF ELCLASS = FORV THEN 80414420
|
|
BEGIN 80414430
|
|
STEPIT; 80414432
|
|
IF T ! PTYPE THEN 80414434
|
|
BEGIN EMIT(EXCH); EXPRESSION(ATYPE); 80414436
|
|
EMITPAIR(T~GETSTACK,OVRN); EMIT(EXSU); EMIT(SRSC); 80414438
|
|
EMIT(EXCH); EMITV(T); RTNSTACK(T); EMIT(EXCH); 80414440
|
|
END ELSE 80414442
|
|
BEGIN EXPRESSION(ATYPE); EMIT(EXCH) END; 80414444
|
|
EMIT(SWTD); EMIT(DLET); EMIT(RTFF); 80414450
|
|
T ~ BTYPE; 80414460
|
|
GO WAY; 80414470
|
|
END; 80414480
|
|
IF T ! PTYPE THEN BEGIN 80414490
|
|
EMIT(EXCH); EMIT2P(ISOL,DEFAULTSIZE-1,48); 80414500
|
|
COMMENT WRAP AROUND IS EXPECTED; 80414550
|
|
EMIT(EXCH); 80414590
|
|
END; 80414600
|
|
EMIT(ONE); EMIT(EXCH); 80414610
|
|
EMIT(SWTD); 80414650
|
|
EMIT(RTFF); 80414700
|
|
T ~ BTYPE; GO ON; 80414800
|
|
END; 80414900
|
|
IF ELCLASS!RELOP THEN GO TO ON; 80415000
|
|
COMMENT GEORGE WHO .....; 80415100
|
|
RELATION(T); 80416000
|
|
COMMENT ... BOOLE; 80416100
|
|
T ~ BTYPE; 80417000
|
|
ON: WHILE ELCLASS=AMPERSAND DO LAYITOUT(T); 80418000
|
|
WAY: BOOPRIM ~ T 80419000
|
|
END BOOLEAN PRIMARY; 80420000
|
|
PROCEDURE MAKEPOINTER; 80421000
|
|
BEGIN 80422000
|
|
LABEL XIT, NSR; 80423000
|
|
REAL ELBW, NUMDIMS; 80424000
|
|
IF STEPI ! LFTPRN THEN BEGIN ERR(826); GO TO XIT END; 80425000
|
|
MAKEARRAYROW; 80426000
|
|
IF ELCLASS ! COMMA THEN 80439100
|
|
BEGIN ELBW ~ DEFAULTSIZE DIV 2; I ~ I - 1; GO NSR END; 80439150
|
|
IF STEPI = NUMBER THEN 80439200
|
|
IF THI & 0[44:44:3]!0 OR ABS((ELBW~THI.[44:3])-3) > 1 THEN 80439300
|
|
FLAG(833) ELSE 80439400
|
|
NSR: BEGIN EMITNUM(ELBW); EMITR(42,3) END ELSE 80439500
|
|
IF ELCLASS ! FACTOP THEN 80439600
|
|
BEGIN IF GT1 ~ PEXP(TRUE) ! PTYPE AND GT1 ! WTYPE THEN 80439700
|
|
FLAG(833) ELSE EMITD(42,42,3); I~I-1 END; 80439750
|
|
IF STEPI = RTPARN THEN STEPIT ELSE FLAG(830); 80439800
|
|
XIT: 80441000
|
|
END MAKEPOINTER; 80442000
|
|
REAL PROCEDURE PTRPRIM(BOO); VALUE BOO; BOOLEAN BOO; %BOO IS A KLUDGE 80443000
|
|
BEGIN LABEL FONY; 80444000
|
|
IF ELCLASS = PTRID OR ELCLASS = WORDID THEN 80445000
|
|
BEGIN 80446000
|
|
IF (GT1~VARIABLE(FP)).[18:15]!PTYPE AND GT1!WTYPE 80447000
|
|
THEN BEGIN 80447100
|
|
IF GT1 = ITYPE THEN GT1 ~ ATYPE; 80447150
|
|
IF BOO AND PTRPRIM ~ GT1 = ATYPE THEN 80447200
|
|
GO FONY ELSE FLAG(822) END 80447300
|
|
END ELSE 80448000
|
|
IF ELCLASS}BOOPROCID AND ELCLASS{PTRPROCID THEN 80449000
|
|
BEGIN IF GT1~PROCALL(TRUE,ELCLASS-BOOPROCID)!PTYPE 80449500
|
|
AND GT1!WTYPE THEN FLAG(825) END ELSE 80449600
|
|
IF ELCLASS = LFTPRN THEN 80450000
|
|
BEGIN 80451000
|
|
STEPIT; GT1 ~ PEXP(FALSE); 80452000
|
|
IF ELCLASS = RTPARN THEN STEPIT ELSE FLAG(823); 80453000
|
|
END ELSE 80454000
|
|
IF ELCLASS = CASEV THEN 80455500
|
|
BEGIN 80456000
|
|
IF PTRPRIM ~ GT1 ~ CASEXP ! PTYPE OR GT1 ! WTYPE THEN 80457000
|
|
BEGIN IF GT1=ITYPE THEN PTRPRIM~GT1~ATYPE; 80457050
|
|
IF NOT (BOO AND GT1 = ATYPE) THEN FLAG(824); 80457100
|
|
END; 80457150
|
|
IF GT1 = WTYPE THEN PTRPRIM ~ PTYPE; GO FONY; 80457200
|
|
END ELSE 80458000
|
|
IF ELCLASS = TYPEV AND TAKE(ELBAT[I]).LINK = PTRV THEN 80459000
|
|
MAKEPOINTER ELSE 80460000
|
|
IF BOO THEN 80460100
|
|
IF GT1 ~AEXP = ATYPE OR GT1 = ITYPE THEN 80460200
|
|
BEGIN PTRPRIM~ATYPE;GO FONY END ELSE ERR(825) ELSE 80460250
|
|
ERR(825); 80461000
|
|
PTRPRIM ~ PTYPE; 80461050
|
|
FONY: 80461100
|
|
END PTRPRIM; 80462000
|
|
PROCEDURE WRITESVINFO(DF); 80472000
|
|
FILE DF; 80473000
|
|
BEGIN 80473500
|
|
LABEL DUMMY; 80473800
|
|
AY[0]~"SVINFO"&REAL(SVINFOTOG)[1:47:1]; 80474000
|
|
AY[1]~EXTRNLCNT&LASTEXT[18:33:15]; 80475000
|
|
AY[2]~(INFDX+60)DIV 30 + DKADDR; 80476000
|
|
AY[3]~STARTADDL&STARTINFO[18:33:15]; 80477000
|
|
FOR GT1~4 STEP 1 UNTIL 29 DO AY[GT1]~0; 80478000
|
|
WRITE(DF,30,AY[*]); 80479000
|
|
WRITEFILE(DF,INFD,0,INFDX); 80480000
|
|
REWIND(INFF); 80481000
|
|
FOR GT1~1 STEP 1 UNTIL INFFX DO 80482000
|
|
BEGIN 80483000
|
|
READ(INFF,30,AY[*]); 80484000
|
|
WRITE(DF,30,AY[*]); 80485000
|
|
END; 80486000
|
|
END OF WRITESVINFO; 80487000
|
|
PROCEDURE GLOBALDECLARATIONS; 85000000
|
|
COMMENT ................................................................85001000
|
|
: THIS IS THE ROUTINE WHICH HANDLS THE GLOBAL DECLARATIONS FOR THE :85002000
|
|
:SEPARATED COMPILATION. EXCEPT THE GLOBAL PROCEDURE DECLARATIONS, :85003000
|
|
:WHICH SHOULD HAVE THE SAME SYNTATICAL CONSTRUCTS AS IN THE FORWARD :85004000
|
|
:DECLARATIONS AND ARE STORED IN INFO AS LOCALTYPES, THE OTHER GLOBAL :85005000
|
|
:DECLARATIONS SHOULD HAVE THE SAME SYNTATICAL CONSTRUCTS AS THOSE IN :85006000
|
|
:THE FORMAL SPEC PART, AND ARE STORED IN INFO AS FORMALNAMES. :85007000
|
|
: -------- J. C. PAO 07/16/68 --------:85008000
|
|
:......................................................................;85009000
|
|
BEGIN 85010000
|
|
REAL MARK,T,PJ,GT1; 85011000
|
|
DEFINE ENTERINFO = 85011100
|
|
BEGIN 85011120
|
|
IF (GLOBLCNT~GLOBLCNT+1).[16:5]>2 THEN 85011140
|
|
FLAG(857); 85011160
|
|
TB1~ENTER(GLOBLCNT,FORMALNAMEP,T,FALSE); 85011180
|
|
GLOBALINDEX; 85011200
|
|
END#; 85011210
|
|
LABEL ON,ROUND,PROC,ARRAI,SKIP,ENTR,AWAY, 85011500
|
|
LTYPE,LFIELD,LARRAY,LOWN,LDFN,LLBL,LPROC,LSAVE,LLAY,LEVNT, 85012000
|
|
LQUE,LINTRP,LPIX,LMON,LVALUE; 85013000
|
|
SWITCH LDEC~LTYPE,LFIELD,LARRAY,LOWN,LDFN,LLBL,LPROC,LSAVE,LLAY, 85014000
|
|
LEVNT,LQUE,LINTRP,LPIX,ON,LMON,LVALUE; 85015000
|
|
ELCLASS~SEMICOLON; 85016000
|
|
I~I-1; 85017000
|
|
ON: IF ELCLASS!SEMICOLON THEN ERR(851); 85018000
|
|
ERRORTOG~TRUE; 85019000
|
|
CONTEXT~2; 85020000
|
|
ROUND: STEPIT; CONTEXT~0; 85021000
|
|
GO TO LDEC[ELCLASS-TYPEV+1]; 85022000
|
|
IF ELCLASS!BEGINV THEN 85023000
|
|
LOWN: 85024000
|
|
LSAVE: 85026000
|
|
LMON: 85027000
|
|
LVALUE: 85028000
|
|
LQUE: 85028200
|
|
LINTRP: 85028300
|
|
BEGIN 85029000
|
|
FLAG(850); 85030000
|
|
GO ON; 85031000
|
|
END ELSE GO AWAY; 85032000
|
|
LTYPE: T~TAKE(ELBAT[I]).LINK; 85033000
|
|
IF PJ~TABLE(I+1)=PROCV THEN 85034000
|
|
BEGIN 85035000
|
|
T~T+BOOPROCID; STEPIT; 85036000
|
|
PROC: PROCEDUREDEC(FALSE,T); GO ON; 85037000
|
|
END; 85038000
|
|
IF PJ=ARRAYV THEN 85039000
|
|
BEGIN 85040000
|
|
IF (T~T+BOOARRAYID)>WORDARRAYID THEN FLAG(850); 85040100
|
|
STEPIT; 85040200
|
|
GO TO ARRAI; 85040300
|
|
END; 85040400
|
|
IF PJ>IDMAX THEN 85040500
|
|
BEGIN 85040600
|
|
FLAG(850); GO TO SKIP; 85040700
|
|
END; 85040800
|
|
T~T+BOOID; GO TO ENTR; 85041000
|
|
LARRAY: T~REALARRAYID; GO TO ARRAI; 85042000
|
|
LDFN: DEFINEDEC; GO ON; 85043000
|
|
LLAY: LAYOUTDEC; GO ON; 85044000
|
|
LFIELD: FIELDEC; GO ON; 85045000
|
|
LLBL: T~LABELID; GO TO ENTR; 85048000
|
|
LPIX: T~PCID; GO TO ENTR; 85049000
|
|
LPROC: T~PROCID; GO TO PROC; 85054000
|
|
LEVNT: IF TABLE(I+1)=ARRAYV THEN 85055000
|
|
BEGIN 85056000
|
|
T~EVENTARRAYID; 85057000
|
|
STEPIT; 85058000
|
|
ARRAI: MARK~0; 85059000
|
|
DO 85060000
|
|
IF STEPI!UNKNOWNID THEN FLAG(852) ELSE 85061000
|
|
BEGIN 85062000
|
|
ENTERINFO; 85063000
|
|
PUT(TAKE(LASTINFO)&MARK[33:33:15],MARK~LASTINFO); 85064000
|
|
END UNTIL STEPI!COMMA; 85065000
|
|
IF ELCLASS!LFTBRKT THEN 85066000
|
|
BEGIN 85067000
|
|
FLAG(853); 85068000
|
|
SKIP: WHILE ELCLASS!SEMICOLON DO STEPIT; 85069000
|
|
GO ON; 85070000
|
|
END; 85071000
|
|
PJ~0; % TO COUNT DIMENSIONS OF THE ARRAYS SCANNED SO FAR.85072000
|
|
DO IF STEPI!FACTOP THEN FLAG(854) ELSE PJ~PJ+1 85073000
|
|
UNTIL STEPI!COMMA; 85074000
|
|
DO PUT((GT1~TAKE(MARK))&NEXTADDL[33:33:15],MARK) 85075000
|
|
UNTIL MARK~GT1.LINK=0; 85076000
|
|
PUTNBUMP(PJ); 85077000
|
|
IF ELCLASS!RTBRKT THEN 85078000
|
|
BEGIN FLAG(855); GO SKIP END; 85079000
|
|
IF STEPI=COMMA THEN GO TO ARRAI ELSE GO ON; 85080000
|
|
END OF ARRAY DECLARATIONS; 85081000
|
|
T~EVENTID; 85082000
|
|
ENTR: DO IF STEPI!UNKNOWNID THEN FLAG(856) ELSE 85083000
|
|
ENTERINFO 85083500
|
|
UNTIL STEPI!COMMA; 85085000
|
|
GO ON; 85086000
|
|
AWAY: 85087000
|
|
END OF GLOBALDECLARATIONS; 85088000
|
|
85089000
|
|
85090000
|
|
85091000
|
|
PROCEDURE SEPARATEDCOMPILING; 85100000
|
|
COMMENT ................................................................85101000
|
|
: THIS IS THE ROUTINE WHICH CONTROLS THE SEPARATED COMPILING. :85102000
|
|
: -------- J. C. PAO 07/19/68 --------:85103000
|
|
:......................................................................;85104000
|
|
BEGIN 85105000
|
|
LABEL COMPILING; 85106000
|
|
COMMENT IF SEPARATOG IS TRUE, IT IS NOT THE FIRST TIME ENTRY. THERE IS85107000
|
|
NO GLOBAL DECLARATIONS, BUT INSTEAD, WE HAVE TO RE-INITIALIZE ALL 85108000
|
|
THE PARAMETERS FOR THE SUCCESSIVE SEPARATED COMPILING; 85109000
|
|
IF SEPARATOG THEN 85110000
|
|
BEGIN 85111000
|
|
SEPSTR[ 0]~SEPSTR[ 0]+CARDCOUNT -(CARDCOUNT ~SEPSTR[ 1]); 85112000
|
|
SEPSTR[ 2]~SEPSTR[ 2]+SCANCOUNT -(SCANCOUNT ~SEPSTR[ 3]); 85113000
|
|
SEPSTR[ 4]~SEPSTR[ 4]+ERRORCOUNT-(ERRORCOUNT~SEPSTR[ 5]); 85114000
|
|
SEPSTR[ 6]~SEPSTR[ 6]+PDINX; 85115000
|
|
SEPSTR[ 7]~SEPSTR[ 7]+TOTALSEGSIZE; 85116000
|
|
SVINFO~SVINFOTOG; 85116500
|
|
DKADDR~1; 85117000
|
|
INFDX~INFFX~ 85117990
|
|
POOLX~POOLMOM~PDINX~TOTALSEGSIZE~SEPFX~SEPAX~GT2~0; 85118000
|
|
REWIND(SEPF); 85118500
|
|
REWIND(INFF); 85119000
|
|
DO TEMPSTACK[GT2]~0 UNTIL (GT2~GT2+1)>MAXTEMP; 85122000
|
|
TIME1~TIME(1); 85124000
|
|
TIME2~TIME(2); 85125000
|
|
GO COMPILING; 85126000
|
|
END; 85127000
|
|
COMMENT THIS IS FIRST TIME ENTRY, WE HAVE TO TAKE CARE OF THE GLOBAL 85128000
|
|
DECLARATIONS AND STORE THE PARAMETERS WHICH CONCERN THE GLOBALS; 85129000
|
|
GINFO~NEXTINFO; 85130000
|
|
GADDL~NEXTADDL; 85131000
|
|
GLOBALDECLARATIONS; % THIS COMPILED THE GLOBAL DECLARATIONS 85132000
|
|
IF (GT1~TAKE(GINFO)).CLASS=0 THEN GINFO~GT1.LINK; 85133000
|
|
SEPSTR[ 1]~CARDCOUNT; % SEPSTR[ 0]: ACCUMULATED CARDCOUNT 85134000
|
|
SEPSTR[ 3]~SCANCOUNT; % SEPSTR[ 2]: ACCUMULATED SCANCOUNT 85135000
|
|
SEPSTR[ 5]~ERRORCOUNT; % SEPSTR[ 4]: ACCUMULATED ERRORCOUNT 85136000
|
|
SEPSTR[ 8]~TIME1; 85137000
|
|
SEPSTR[ 9]~TIME2; 85138000
|
|
SEPARATOG~TRUE; % SEPARATED COMPILING OF THE OUTER MOST BLOCK 85139000
|
|
COMPILING: 85140000
|
|
COMMENT NOW WE ARE HERE TO DO SOME MORE INITIAL SETTINGS, THEN, COMES 85141000
|
|
TO THE BIG JOB --- SEPARATED COMPILING OF THE PROCEDURE. SINCE85141100
|
|
THE "SEPARATOG" IS TRUE, THE PROCEDURE "DECLARATIONS" WILL 85141200
|
|
COMPILE ONLY ONE PROCEDURE AT A TIME; 85141300
|
|
STACKTOP[0]~MAXSTACK[0]~2; 85142000
|
|
STACKTOP[2]~MAXSTACK[2]~GLOBLCNT.[36:12]; 85143000
|
|
DECLARATIONS; 85144000
|
|
IF ELCLASS!SEMICOLON THEN FLAG(858); 85145000
|
|
END OF SEPARATED COMPILING; 85146000
|
|
FILE SPO 11(1,10); 85149000
|
|
PROCEDURE PRINTAIL; 85150000
|
|
BEGIN 85151000
|
|
85152000
|
|
FORMAT GOOD ("||B6500 ESPOL: COMPILATION", 85153000
|
|
*(" OF PROCEDURE ",""",*A1,A*,"""),X1,A3), 85154000
|
|
BAD ("||B6500 ESPOL:"I4" ERRORS", 85155000
|
|
*(" IN COMPILING PROCEDURE ",""",*A1,A*,"""), 85156000
|
|
A1), 85157000
|
|
NED ("NO",*(". OF")," ERRORS DETECTED", 85158000
|
|
*("= "I4", SEE SEQ, NO. "2A4)/ 85159000
|
|
"CORE SIZE = "I6" WORDS."X6, 85160000
|
|
"D0-STACK SIZE = ("I6" + "I3") WORDS."/ 85161000
|
|
"PROGRAM HAD "I6" CARD IMAGES, WITH "I7 85162000
|
|
" SYNTACTIC ITEMS."/ 85163000
|
|
"COMPILATION TIME WAS "F8.1" SECONDS ELAPSED," 85164000
|
|
F8.1" SECONDS PROCESSING."/ 85165000
|
|
" RATE WAS "F8.1" CARDS/SEC."); 85166000
|
|
REAL STREAM PROCEDURE Z(N); VALUE N; 85167000
|
|
BEGIN 85168000
|
|
DI~LOC Z; DI~DI+7; SI~LOC N; DS~CHR; DI~DI-Z; DS~Z CHR; 85169000
|
|
END OF Z; 85170000
|
|
WRITE(LINE[DBL],NED,GT1~1&REAL(ERRORCOUNT = 0)[1:47:1], 85171000
|
|
GT1, FOR GT2 ~ GT1 STEP -3 WHILE GT2 > 0 DO 85172000
|
|
[ERRORCOUNT,REEL(LASTSEQUENCE+2,4), 85173000
|
|
REEL(LASTSEQUENCE+131074,4)],CORESIZE,PDINX, 85174000
|
|
S0,CARDCOUNT, SCANCOUNT,(TIME(1)-TIME1)/60, 85175000
|
|
GT1 ~(TIME(2)-TIME2)/60,CARDCOUNT/GT1); 85176000
|
|
IF ERRORCOUNT ! 0 THEN 85177000
|
|
WRITE(SPO,BAD,ERRORCOUNT, 85178000
|
|
GT1~1&REAL(NOT SEPARATOG)[1:47:1], 85179000
|
|
FOR GT2~GT1 STEP -1 WHILE GT2>0 DO 85180000
|
|
[GT4~REAL((GT3~SEPSTR[12]).[1:5]=7), 85181000
|
|
FOR GT5~GT4 STEP -1 WHILE GT5>0 DO GT3.[6:6], 85182000
|
|
GT3.[1:5]-GT4,Z(GT3)], 85183000
|
|
"*") ELSE 85184000
|
|
WRITE(SPO,GOOD, 85185000
|
|
GT1~1&REAL(NOT SEPARATOG)[1:47:1], 85186000
|
|
FOR GT2~GT1 STEP -1 WHILE GT2>0 DO 85187000
|
|
[GT4~REAL((GT3~SEPSTR[12]).[1:5]=7), 85188000
|
|
FOR GT5~GT4 STEP -1 WHILE GT5>0 DO GT3.[6:6], 85189000
|
|
GT3.[1:5]-GT4,Z(GT3)], 85190000
|
|
"OK~"); 85191000
|
|
IF SEPARATOG THEN WRITE(LINE[PAGE]); 85191500
|
|
END OF PRINT TAIL; 85192000
|
|
PROCEDURE SEPWRAPUP; 85193000
|
|
BEGIN 85194000
|
|
ARRAY PRT,DIR[0:29]; 85195000
|
|
LABEL PRNTAIL; 85196000
|
|
IF POOLX>0 THEN FLUSHPOOL; 85197000
|
|
COMMENT MAKE A PCW FOR THE OUTER MOST BLOCK AND PLACE IT ON THE TOP OF 85203000
|
|
D1-STACK, THEN CONVERT THE PDPRT INTO SEGMENT DESCRIPTORS AND PLACE 85204000
|
|
THEM INTO D1-STACK ACCORDING TO THEIR SEGMENT NUMBERS. 85205000
|
|
NOTE: NOTHING BUT ONE SEGMENT DECRIPTOR SHOULD BE IN PDPRT[*]; 85206000
|
|
GLOBALPCW(GETSPACE(-1).[36:12],2,0,0); 85207000
|
|
CORESIZE~(L+5) DIV 6; 85207100
|
|
IF ERRORCOUNT!0 THEN 85207200
|
|
BEGIN 85207300
|
|
CLOSE(TEMP,PURGE); 85207400
|
|
GO TO PRNTAIL; 85207500
|
|
END; 85207600
|
|
PRT[DIR[4]~PDINX]~PCW; 85208000
|
|
FOR N~0 STEP 1 WHILE N<PDINX DO 85209000
|
|
PRT[(GT1~PDPRT[N.LINKR,N.LINKC]).[36:12]-2] ~ 85210000
|
|
GT1.[23:13]>1[15:10:13]; 85211000
|
|
DIR[0]~DKADDR&(PDINX+1)[08:28:20]; 85212000
|
|
DIR[8].[1:7]~1; % THIS IDENTIFIES "ESPOL PROCEDURE" FILE. 85212500
|
|
WRITE(TEMP,30,PRT[*]); DKADDR~DKADDR+1; 85213000
|
|
DIR[11]~(N~DKADDR)&SEPLEVEL[01:43:5]; 85214000
|
|
WRITE(TEMP); DKADDR~DKADDR+1; 85215000
|
|
IF (GT1~SEPFX)>0 THEN 85216000
|
|
BEGIN 85217000
|
|
READ SEEK(SEPF[0]); 85218000
|
|
DO BEGIN 85219000
|
|
READ(SEPF,30,AY[*]); 85220000
|
|
WRITE(TEMP,30,AY[*]); 85221000
|
|
DKADDR~DKADDR + 1; 85222000
|
|
READ(SEPF); 85223000
|
|
END UNTIL (GT1~GT1-15){0 85224000
|
|
END; 85225000
|
|
IF SEPAX>0 THEN 85226000
|
|
BEGIN 85227000
|
|
WRITE(TEMP,30,SEPA[*]); 85228000
|
|
DKADDR~DKADDR+1; 85229000
|
|
END; 85230000
|
|
FOR GT1~5 STEP 1 UNTIL 29 DO SEPA[GT1]~0; 85231000
|
|
SEPA[ 0]~"SEPFILE"; 85232000
|
|
SEPA[ 1]~SEPFX+SEPAX.[24:23]; 85233000
|
|
SEPA[ 2]~GLOBLCNT; 85234000
|
|
SEPA[ 3]~NEXTINFO&GINFO[18:33:15]&(DKADDR-N)[01:31:17]; 85235000
|
|
WRITEFILE(TEMP,INFO,GINFO,NEXTINFO-1); 85236000
|
|
DKADDR~(NEXTINFO-GINFO+29) DIV 30 + DKADDR; 85237000
|
|
SEPA[ 4]~NEXTADDL&GADDL[18:33:15]&(DKADDR-N)[01:31:17]; 85238000
|
|
WRITEFILE(TEMP,ADDL,GADDL,NEXTADDL-1); 85239000
|
|
DKADDR~(NEXTADDL-GADDL+29) DIV 30 + DKADDR; 85240000
|
|
IF SVINFO THEN 85240100
|
|
BEGIN 85240200
|
|
WRITESVINFO(TEMP); 85240300
|
|
DIR[12]~DKADDR&REAL(SVINFOTOG)[1:47:1]; 85240400
|
|
END; 85240500
|
|
WRITE(TEMP[N],30,SEPA[*]); 85241000
|
|
REWIND(TEMP); 85242000
|
|
WRITE(TEMP,30,DIR[*]); 85243000
|
|
LOCK(TEMP,RELEASE); 85244000
|
|
IF NOT LISTOG.[46:1] THEN 85245000
|
|
PRNTAIL: PRINTAIL; 85246000
|
|
IF STEPI=ENDV THEN 85247000
|
|
BEGIN 85248000
|
|
COMPOUNDTAIL; % THIS WILL WRAP UP THE SCANNER 85249000
|
|
IF ERRORCOUNT~SEPSTR[4]+ERRORCOUNT!0 OR 85250000
|
|
NOT LISTOG.[46:1] THEN 85251000
|
|
BEGIN 85252000
|
|
CARDCOUNT ~ SEPSTR[ 0]+CARDCOUNT; 85253000
|
|
SCANCOUNT ~ SEPSTR[ 2]+SCANCOUNT; 85254000
|
|
PDINX ~ SEPSTR[ 6]+PDINX; 85255000
|
|
TOTALSEGSIZE ~ SEPSTR[ 7]+TOTALSEGSIZE; 85256000
|
|
TIME1 ~ SEPSTR[ 8]; 85257000
|
|
TIME2 ~ SEPSTR[ 9]; 85258000
|
|
SEPARATOG~FALSE; 85258500
|
|
PRINTAIL; 85259000
|
|
END ELSE 85260000
|
|
SEPARATOG~FALSE; 85261000
|
|
END ELSE I~I-1; 85262000
|
|
END OF SEPWRAPUP; 85263000
|
|
PROCEDURE EPUNCH(X,Y,A); VALUE X,Y; INTEGER X,Y; ARRAY A[0]; 85270000
|
|
COMMENT EPUNCH IS PART OF THE WRAPUP ACTION FOR DECKTOG. IT 85271000
|
|
TRANSLATES FROM EBCDIC CODE--FOUR BYTES PER WORD IN THE ARRAY 85272000
|
|
A--INTO EBCDIC CARD CODE(12 BITS PER COLUMN) AS A BINARY-CARD 85273000
|
|
IMAGE. THE GLOBAL 256-WORD ARRAY TA CONTAINS THE TRANSLATION 85274000
|
|
TABLE; 85275000
|
|
BEGIN 85276000
|
|
DEFINE U=LASTUSED#, T = SETSIZE#; 85277000
|
|
IF Y = 2 THEN X ~ X - 1; 85278000
|
|
DO FLOG((T ~ TA[(U~ A[X]).[16:8]]).[36:1], 85279000
|
|
TA[U.[40:8]] & TA[U.[32:8]] [24:36:12] 85280000
|
|
& T [1:37:11] & TA[U.[24:8]] [12:36:12], A[X]) 85281000
|
|
UNTIL X ~ X - 1 < 0; 85282000
|
|
WRITE(DECK,20,A[*]); 85283000
|
|
A[0] ~ 0; MOVE(19,A[0],A[1]); 85284000
|
|
END EPUNCH; 85285000
|
|
89900000
|
|
89901000
|
|
89902000
|
|
COMMENT * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 90000000
|
|
INITIALIZATION 90001000
|
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;90002000
|
|
PROCEDURE PROGRAM; 90002100
|
|
BEGIN LABEL NEXTPROCEDURE; 90002200
|
|
TIME1~TIME(1); TIME2~TIME(2); 90003000
|
|
BUMPWORD~229375; 90004000
|
|
CLCR~MKABS(CBUFF[9]); 90005000
|
|
LASTUSED~NXTELBT~1; 90006000
|
|
LASTSEQUENCE~MKABS(SEQNUMBER); 90007000
|
|
LISTOG~BOOLEAN(3); 90008000
|
|
BLANKOUT(2,SEQNUMBER); 90009000
|
|
BUMPCHAR~32768;% 90010000
|
|
ACCUMSTART~MKABS(ACCUM[1])&4[30:45:3]; 90011000
|
|
FILL STACKMASK[*] WITH 90012000
|
|
OCT1777700000, 90013000
|
|
OCT1777720000, 90014000
|
|
OCT0777710000, 90015000
|
|
OCT0777730000, 90016000
|
|
OCT0377704000, 90017000
|
|
OCT0377724000, 90018000
|
|
OCT0377714000, 90019000
|
|
OCT0377734000, 90020000
|
|
OCT0177702000, 90021000
|
|
OCT0177722000, 90022000
|
|
OCT0177712000, 90023000
|
|
OCT0177732000, 90024000
|
|
OCT0177706000, 90025000
|
|
OCT0177726000, 90026000
|
|
OCT0177716000, 90027000
|
|
OCT0177736000, 90028000
|
|
OCT0077701000, 90029000
|
|
OCT0077721000, 90030000
|
|
OCT0077711000, 90031000
|
|
OCT0077731000, 90032000
|
|
OCT0077705000, 90033000
|
|
OCT0077725000, 90034000
|
|
OCT0077715000, 90035000
|
|
OCT0077735000, 90036000
|
|
OCT0077703000, 90037000
|
|
OCT0077723000, 90038000
|
|
OCT0077713000, 90039000
|
|
OCT0077733000, 90040000
|
|
OCT0077707000, 90041000
|
|
OCT0077727000, 90042000
|
|
OCT0077717000, 90043000
|
|
OCT0077737000; 90044000
|
|
TEN[0]~1.0; COMMENT STARTING TO INITIALIZE THE POWERS OF TEN; 90045000
|
|
FOR I~1 STEP 1 UNTIL 68 DO 90046000
|
|
DOUBLE(TEN[I-1],ELBAT[I-1],10.0,0,|,~,TEN[I],ELBAT[I]); 90047000
|
|
FOR I~16 STEP 1 UNTIL 68 DO 90048000
|
|
IF BOOLEAN(ELBAT[I].[9:1])THEN TEN[I].[9:39]~TEN[I].[9:39]+1; 90049000
|
|
FILL OPS [*] WITH 90050000
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90051000
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90052000
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90053000
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90054000
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90055000
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90056000
|
|
0, 0, 0,"VALC", 0, 0, 0, 0, 0, 0, 90057000
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90058000
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90059000
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90060000
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90061000
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90062000
|
|
0, 0, 0, 0, 0, 0, 0,"NAMC","ADD ","SUBT", 90063000
|
|
"MULT","DIVD","IDIV","RDIV","NTIA","NTGR","LESS","GREQ","GRTR","LSEQ", 90064000
|
|
"EQUL","NEQL","CHSN","MULX","LAND","LOR ","LNOT","LEQV","SAME","VARI", 90065000
|
|
"BSET","DBST","FLTR","DFTR","ISOL","DISO","INSR","DINS","BRST","DBRS", 90066000
|
|
"BRFL","BRTR","BRUN","EXIT","STBR","NXLN","INDX","RETN","DBFL","DBTR", 90067000
|
|
"DBUN","ENTR","EVAL","NXLV","MKST","STFF","ZERO","ONE ","LT8 ","LT16", 90068000
|
|
"PUSH","DLET","EXCH","DUPL","STOD","STON","OVRD","OVRN", 0,"LOAD", 90069000
|
|
"LT48","MPCW","SCLF","DSLF","SCRT","DSRT","SCRS","DSRS","SCRF","DSRF", 90070000
|
|
"SCRR","DSRR","ICVD","ICVU","SNGT","SNGL","XTND","IMKS","TEED","PACD", 90071000
|
|
"EXSD","TWSD","TWOD","SISO","SXSN","ROFF","TEEU","PACU","EXSU","TWSU", 90072000
|
|
"TWOU","EXPU","RTFF","HALT","TLSD","TGED","TGTD","TLED","TEQD","TNED", 90073000
|
|
"TUND", 0,"TLSU","TGEU","TGTU","TLEU","TEQU","TNEU","TUNU", 0, 90074000
|
|
"CLSD","CGED","CGTD","CLED","CEQD","CNED", 0, 0,"CLSU","CGEU", 90075000
|
|
"CGTU","CLEU","CEQU","CNEU","NOOP","NVLD", 0, 0, 0, 0, 90076000
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90077000
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90078000
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90079000
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90080000
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90081000
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90082000
|
|
0, 0,"JOIN","SPLT","IDLE","SINT","EEXI","DEXI", 0, 0, 90083000
|
|
"SCNI","SCND", 0, 0,"WHOI","HEYU", 0, 0, 0, 0, 90084000
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90085000
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90086000
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90087000
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90088000
|
|
0, 0, 0, 0, 0,"NTGD", 0, 0, 0,"OCRX", 90089000
|
|
0, 0, 0, 0, 0,"LOG2", 0, 0, 0, 0, 90090000
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90091000
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90092000
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0,"IRWL", 90093000
|
|
"PCWL","MVST", 0, 0, 0, 0,"STAG","RTAG","RSUP","RSDN", 90094000
|
|
"RPRR","SPRR","RDLK","CBON","LODT","LLLU","SRCH", 0, 0, 0, 90095000
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90096000
|
|
0, 0, 0, 0,"USND","UABD","TWFD","TWTD","SWFD","SWTD", 90097000
|
|
0,"TRNS","USNU","UABU","TWFU","TWTU","SWFU","SWTU", 0, 0, 90098000
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90099000
|
|
0, 0, 0, 0, 0, 0,"SLSD","SGED","SGTD","SLED", 90100000
|
|
"SEQD","SNED", 0, 0,"SLSU","SGEU","SGTU","SLEU","SEQU","SNEU", 90101000
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90102000
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90103000
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90104000
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90105000
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90106000
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90107000
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90108000
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90109000
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90110000
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90111000
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90112000
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90113000
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90114000
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90115000
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90116000
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90117000
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90118000
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90119000
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90120000
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90121000
|
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90122000
|
|
"MINS","MFLT","SFSC","SRSC","RSTF","ENDF","MVNU","MCHR","INOP","INSG", 90123000
|
|
"SFDC","SRDC","INSU","INSC","ENDE", 90124000
|
|
0; 90125000
|
|
FILL SPECIAL[*] WITH OCT0600000000170000, % 0 90128000
|
|
OCT0610000000170400, % 1 90129000
|
|
OCT0620000000171000, % 2 90130000
|
|
OCT0630000000171400, % 3 90131000
|
|
OCT0640000000172000, % 4 90132000
|
|
OCT0650000000172400, % 5 90133000
|
|
OCT0660000000173000, % 6 90134000
|
|
OCT0670000000173400, % 7 90135000
|
|
OCT0700000000174000, % 8 90136000
|
|
OCT0710000000174400, % 9 90137000
|
|
OCT0430000530075401, % # 90138000
|
|
OCT1000000534076002, % @ 90139000
|
|
OCT0770000000067400, % 90140000
|
|
OCT0720000634075003, % : 90141000
|
|
OCT0760212700067000, % > 90142000
|
|
OCT0000211700064400, % } 90143000
|
|
OCT0530200420047000, % + 90144000
|
|
OCT1010000004140400, % A 90145000
|
|
OCT1020000004141000, % B 90146000
|
|
OCT1030000004141400, % C 90147000
|
|
OCT1040000004142000, % D 90148000
|
|
OCT1050000004142400, % E 90149000
|
|
OCT1060000004143000, % F 90150000
|
|
OCT1070000004143400, % G 90151000
|
|
OCT1100000004144000, % H 90152000
|
|
OCT1110000004144400, % I 90153000
|
|
OCT0560000544045410, % . 90154000
|
|
OCT1330000610070000, % [ 90155000
|
|
OCT0460000670050000, % & 90156000
|
|
OCT0500000300046400, % ( 90157000
|
|
OCT0740210700046000, % < 90158000
|
|
OCT1370000664044000, % ~ 90159000
|
|
OCT0000202704000000, % | 90160000
|
|
OCT1120000004150400, % J 90161000
|
|
OCT1130000004151000, % K 90162000
|
|
OCT1140000004151400, % L 90163000
|
|
OCT1150000004152000, % M 90164000
|
|
OCT1160000004152400, % N 90165000
|
|
OCT1170000004153000, % O 90166000
|
|
OCT1200000004153400, % P 90167000
|
|
OCT1210000004154000, % Q 90168000
|
|
OCT1220000004154400, % R 90169000
|
|
OCT0440000410055404, % $ 90170000
|
|
OCT0520000604056000, % * 90171000
|
|
OCT0550201420060000, % - 90172000
|
|
OCT0510000624056405, % ) 90173000
|
|
OCT0730000370057000, % ; 90174000
|
|
OCT0000213700044400, % { 90175000
|
|
OCT0400000010040000, % 90176000
|
|
OCT0570203704060400, % / 90177000
|
|
OCT1230000004161000, % S 90178000
|
|
OCT1240000004161400, % T 90179000
|
|
OCT1250000004162000, % U 90180000
|
|
OCT1260000004162400, % V 90181000
|
|
OCT1270000004163000, % W 90182000
|
|
OCT1300000004163400, % X 90183000
|
|
OCT1310000004164000, % Y 90184000
|
|
OCT1320000004164400, % Z 90185000
|
|
OCT0540000620065400, % , 90186000
|
|
OCT0450000540066006, % % 90187000
|
|
OCT0000215700054400, % ! 90188000
|
|
OCT0750214700077000, % = 90189000
|
|
OCT1350000630065000, % ] 90190000
|
|
OCT0420000240077407; % " 90191000
|
|
COMMENT HEADINGS FOR FOLLOWING TABLE ALGKEY TYPE PARADESC; 90192000
|
|
FILL QALGORYTHM [*] WITH"20T6INSE","RT ",% 0 NON 3 90193000
|
|
"21S6REMO","VE ",% 1 NON 2 90194000
|
|
"22T6DELI","NK ",% 2 NON 3 90195000
|
|
"23|8ALLO","CATE ",% 3 REF 0 90196000
|
|
"14K4NEXT", % 4 REF 2 90197000
|
|
"15K4LAST", % 5 REF 2 90198000
|
|
"26K5FIRS","T ",% 6 REF 2 90199000
|
|
"27L5PRIO","R ",% 7 REF 3 90200000
|
|
"2825EMPT","Y ",% 8 BOO 2 90201000
|
|
"1924FULL", % 9 BOO 2 90202000
|
|
"2#I#POPU","LATION ";% 10 INT 1 90203000
|
|
COMMENT *** SOME OF THE PARAMETER DESCRIPTORS ARE SUSPECT. THIS TABLE 90204000
|
|
MUST NOT BE CHANGED WITHOUT CHECKING PROCEDURE STANDSEARCH, 90205000
|
|
NOTE THAT FIRST CHARACTER IN FIRST WORD OF AN ENTRY 90206000
|
|
INDICATES NUMBER OF WORDS IN THAT ENTRY (1 OR 2); 90207000
|
|
FILL INFO[ 1,*] WITH 90208000
|
|
OCT0000220676300000,"23AND0", % 25690209000
|
|
OCT0000000436000000,"35ARRA","Y ", % 25890210000
|
|
OCT0000000312000000,"35BEGI","N ", % 26190211000
|
|
OCT0000314426000000,"37BOOL","EAN ", % 26490212000
|
|
OCT0000000560000000,"22BY00", % 26790213000
|
|
OCT0000000306000000,"24CASE", % 26990214000
|
|
OCT0000000416000000,"37COMM","ENT ", % 27190215000
|
|
OCT0000000446000000,"36DEFI","NE ", % 27490216000
|
|
OCT0000204706000000,"23DIV0", % 27790217000
|
|
OCT0000000322000000,"22DO00", % 27990218000
|
|
OCT0000316426000001,"36DOUB","LE ", % 28190219000
|
|
OCT0000000406000000,"24ELSE", % 28490220000
|
|
OCT0000000376000000,"23END0", % 28690221000
|
|
OCT0000223676000000,"23EQV0", % 28890222000
|
|
OCT0000000472000000,"35EVEN","T ", % 29090223000
|
|
OCT0000000646000000,"38EXTE","RNAL ", % 29390224000
|
|
OCT0000260232000000,"35FALS","E ", % 29690225000
|
|
OCT0000000432000000,"35FIEL","D ", % 29990226000
|
|
OCT0000000360000000,"24FILL", % 30290227000
|
|
OCT0000000342000000,"23FOR0", % 30490228000
|
|
OCT0000000652000000,"37FORW","ARD ", % 30690229000
|
|
OCT0000000332000000,"22GO00", % 30990230000
|
|
OCT0000000326000000,"22IF00", % 31190231000
|
|
OCT0000000676100000,"23IMP0", % 31390232000
|
|
OCT0000000526000000,"22IN00", % 31590233000
|
|
OCT0000207426000003,"37INTE","GER ", % 31790234000
|
|
OCT0000000502000000,"39INTE","RRUPT ", % 32090235000
|
|
OCT0000224702000000,"22IS00", % 32390236000
|
|
OCT0000000452000000,"35LABE","L ", % 32590237000
|
|
OCT0000000466000000,"36LAYO","UT ", % 32890238000
|
|
OCT0000000272000000,"36LOCK","ED ", % 33190239000
|
|
OCT0000205706000000,"23MOD0", % 33490240000
|
|
OCT0000000516000000,"37MONI","TOR ", % 33690241000
|
|
OCT0000222662000000,"23NOT0", % 33990242000
|
|
OCT0000000226000000,"24NULL", % 34190243000
|
|
OCT0000000656000000,"22OF00", % 34390244000
|
|
OCT0000000316000000,"22ON00", % 34590245000
|
|
OCT0000221676200000,"22OR00", % 34790246000
|
|
OCT0000000564000000,"39OVER","WRITE ", % 34990247000
|
|
OCT0000000442000000,"23OWN0", % 35290248000
|
|
OCT0000000506000000,"37PICT","URE ", % 35490249000
|
|
OCT0000000426000006,"37POIN","TER ", % 35790250000
|
|
OCT0000000456000000,"39PROC","EDURE ", % 36090251000
|
|
OCT0000000476000000,"35QUEU","E ", % 36390252000
|
|
OCT0000315426000002,"24REAL", % 36690253000
|
|
OCT0000000426000004,"39REFE","RENCE ", % 36890254000
|
|
OCT0000000356000000,"37REPL","ACE ", % 37190255000
|
|
OCT0000000462000000,"24SAVE", % 37490256000
|
|
OCT0000000512000000,"23SET0", % 37690257000
|
|
OCT0000000352000000,"24SCAN", % 37890258000
|
|
OCT0000000550000000,"24STEP", % 38090259000
|
|
OCT0000000364000000,"24SWAP", % 38290260000
|
|
OCT0000000602000000,"23TAG0", % 38490261000
|
|
OCT0000000640000000,"24THEN", % 38690262000
|
|
OCT0000000336000000,"24THRU", % 38890263000
|
|
OCT0000000556000000,"22TO00", % 39090264000
|
|
OCT0000261230000000,"24TRUE", % 39290265000
|
|
OCT0000000400000000,"35UNTI","L ", % 39490266000
|
|
OCT0000000576000000,"35USIN","G ", % 39790267000
|
|
OCT0000000346000000,"35WHIL","E ", % 40090268000
|
|
OCT0000000572000000,"24WITH", % 40390269000
|
|
OCT0000000426000005,"24WORD", % 40590270000
|
|
OCT0000000264000000,"35WORD","S ", % 40790271000
|
|
OCT0000000522000000,"35VALU","E ", % 41090272000
|
|
OCT0000243024500000,"24EXIT", % 41390273000
|
|
OCT0000516054500000,"36MYSE","LF ", % 41590274000
|
|
OCT0000506024500000,"35ALLO","W ", % 41890275000
|
|
OCT0000507024500000,"38DISA","LLOW ", % 42190276000
|
|
OCT0000504024500000,"35PAUS","E ", % 42490277000
|
|
OCT0000517024500000,"35HEYO","U ", % 42790278000
|
|
OCT0000505024500016,"35TIME","R ", % 43090279000
|
|
OCT0000326054500010,"35XSIG","N ", % 43390280000
|
|
OCT0000336040500000,"36TOGG","LE ", % 43690281000
|
|
OCT0000327040500000,"38OVER","FLOW ", % 43990282000
|
|
OCT0000247024500010,"36RETU","RN ", % 44290283000
|
|
OCT0000206054500010,"36ENTI","ER ", % 44590284000
|
|
OCT0000673054500010,"24ONES", % 44890285000
|
|
OCT0000613054500010,"38FIRS","TONE ", % 45090286000
|
|
OCT0000512054500010,"36SCAN","IN ", % 45390287000
|
|
OCT0150236050500010,"23ABS0", % 45690288000
|
|
OCT0150226050500010,"24NABS", % 45890289000
|
|
OCT0150236044500033,"24DABS", % 46090290000
|
|
OCT0150226044500033,"35DNAB","S ", % 46290291000
|
|
OCT0000607044500033,"38DINT","EGER ", % 46590292000
|
|
OCT0000337024500000,"24STOP", % 46890293000
|
|
OCT0000513024500020,"37SCAN","OUT ", % 47090294000
|
|
OCT0000000250300074,"24SIZE", % 47390295000
|
|
OCT0000000250000100,"24LOCK", % 47590296000
|
|
OCT0000000250000104,"24BUSY", % 47790297000
|
|
OCT0000000250000124,"36UNLO","CK ", % 47990298000
|
|
OCT0000000250000110,"24BUZZ", % 48290299000
|
|
OCT0000000250000120,"3@BUZZ","CONTROL ", % 48490300000
|
|
OCT0000000260000000,"35CAUS","E ", % 48790301000
|
|
OCT0000000260000001,"24WAIT", % 49090302000
|
|
OCT0000000260000012,"23SET0", % 49290303000
|
|
OCT0000000260000013,"35RESE","T ", % 49490304000
|
|
OCT0000000260000016,"23FIX0", % 49790305000
|
|
OCT0000000260000017,"24FREE", % 49990306000
|
|
OCT0000000260000024,"36ENAB","LE ", % 50190307000
|
|
OCT0000000260000025,"37DISA","BLE ", % 50490308000
|
|
OCT0000000260000036,"58HAPP","ENED ", % 50790309000
|
|
2; 90310000
|
|
FILL INFO[ 2,*] WITH 90311000
|
|
OCT0000000260000037,"39AVAI","LABLE ", % 51290312000
|
|
OCT0000000260000050,"3#SECO","NDWORD ", % 51590313000
|
|
OCT0000000260000062,"39STOR","EITEM ", % 51890314000
|
|
OCT0000000140500007,"39REGI","STERS ", % 52190315000
|
|
OCT0000002140500012,"35STAC","K ", % 52490316000
|
|
OCT0000002154500012,"39WORD","STACK ", % 52790317000
|
|
OCT0000002154500007,"3@STAC","KVECTOR ", % 53090318000
|
|
OCT0000004154500007,"36MEMO","RY ", % 53390319000
|
|
OCT0000004154500007,"21M000", % 53690320000
|
|
OCT0000657024500016,"39MOVE","STACK ", % 53890321000
|
|
OCT0000502044500020,"24JOIN", % 54190322000
|
|
OCT0000513024500012,"23IIO0", % 54390323000
|
|
OCT0000177054500001,"24NAME", % 54590324000
|
|
OCT0000672050500002,"38READ","LOCK ", % 54790325000
|
|
OCT0000000050500004,"36BINA","RY ", % 55090326000
|
|
OCT0000000050500003,"37DECI","MAL ", % 55390327000
|
|
OCT0000676054500023,"3#MASK","SEARCH ", % 55690328000
|
|
OCT0000675054500027,"3#LIST","LOOKUP ", % 55990329000
|
|
0; 90330000
|
|
FILL ADDL[0,*] WITH 0, 90331000
|
|
OCT0000000110300002, 90332000
|
|
OCT0000000104300003, 90333000
|
|
OCT0000000104300000, 90334000
|
|
OCT0000000110300005, 90335000
|
|
OCT0000000104300006, 90336000
|
|
OCT0000000104300000, 90337000
|
|
OCT0000000000000001, 90338000
|
|
OCT0000000000000001, 90339000
|
|
OCT0000000104300000, 90340000
|
|
OCT0000000000000002, 90341000
|
|
OCT0000000140300001, 90342000
|
|
OCT0000000104300000, 90343000
|
|
OCT0000000000000056, 90344000
|
|
OCT0000000000000001, 90345000
|
|
OCT0000000110300000, 90346000
|
|
OCT0000000000000002, 90347000
|
|
OCT0000000104300000, 90348000
|
|
OCT0000000104300000, 90349000
|
|
OCT0000000000000003, 90350000
|
|
OCT0000000104300000, 90351000
|
|
OCT0000000104300000, 90352000
|
|
OCT0000000140300001, 90353000
|
|
OCT0000000000000003, 90354000
|
|
OCT0000000110300000, 90355000
|
|
OCT0000000140300001, 90356000
|
|
OCT0000000104300000, 90357000
|
|
OCT0000000000000001, 90358000
|
|
OCT0000000100300000, 90359000
|
|
0; 90360000
|
|
NEXTADDL~30; 90399000
|
|
%***THE PRECEDING CARD IS --NOT-- SUPPLIED BY OPTAB/BLDR*** 90399001
|
|
COMMENT NOW LINK UP INFO AND STACKHEAD; 91000000
|
|
NEXTINFO ~ 257; GT1 ~ 0; 91001000
|
|
WHILE GT1 ~ TAKE(NEXTINFO ~ NEXTINFO + GT1.CONL) ! 0 DO 91002000
|
|
IF GT2 ~ GT1.ALFACNT ! 0 THEN 91003000
|
|
PUT(GT1 & STACKHEAD[SCRAM ~ GT2 MOD 125][3:33:15], 91004000
|
|
STACKHEAD[SCRAM] ~ NEXTINFO); 91005000
|
|
COMMENT AND PUT QUESTION MARKS IN OPS FOR UNDEFINED OPERATORS; 91006000
|
|
FOR GT1~0 STEP 1 UNTIL 767 DO IF OPS[GT1]=0 THEN OPS[GT1]~ 91007000
|
|
3195660; 91008000
|
|
OPS[768] ~ "LINK"; 91009000
|
|
FIRSTINFO ~ NEXTINFO; 91009100
|
|
CONTEXT ~ 2; 91010000
|
|
MAXDISP ~ 2023; 91011000
|
|
COUNTQALG~STARTNSQ; 91011500
|
|
SAVED ~ TRUE; 91013000
|
|
LASTADDL ~ - 32767; 91013100
|
|
GT2 ~ 0; COMMENT INITIALIZE DEFINED TO STANDARD IDS.; 91014000
|
|
FOR GT1 ~ 0 STEP 10 UNTIL 80 91015000
|
|
DO DEFINFO[GT1] ~ "3A 0"&(GT2~GT2+1)[30:42:6]&12[36:42:6]; 91016000
|
|
ERRORTOG ~ MACRO ~ TRUE; 91017000
|
|
SEPARATOG~SVINFOTOG~BOOLEAN(-2); % AVAILABLE FOR SETTING 91017900
|
|
I~0; NCR~READACARD; 91018000
|
|
STEPIT; 91018100
|
|
IF REAL(SEPARATOG)<0 THEN 91018200
|
|
BEGIN 91018300
|
|
SEPARATOG~FALSE; 91018400
|
|
IF ELCLASS!BEGINV THEN 91018500
|
|
DO UNTIL STEPI=BEGINV; 91018600
|
|
WRITE(TEMP); 91018700
|
|
STACKTOP[0]~S0; 91018730
|
|
SEGNO~5; 91018760
|
|
END ELSE 91018900
|
|
BEGIN 91019000
|
|
COMMENT IN THE SEPARATED COMPILING, THE OUTER MOST BLOCK OF THE MAIN 91019001
|
|
PROCEDURE IS GIVEN RUNNING LEVEL "SEPLEVEL". WHICH IS 3 OR 91019002
|
|
HIGHER. GLOBALS ARE GIVEN D2-STACK REFERENCES FROM (2,2) AND 91019003
|
|
UP. REFERENCES TO D0, D1 AND D2 STACKS ARE SAME AS IN THE 91019004
|
|
NORMAL COMPILATION. DURING BINDING PROCESS, THE "GLOBLCNT" 91019005
|
|
TELLS THE DIFFERENCE OF GLOBALS FROM LOCALS IN THE D2-STACK; 91019006
|
|
GLOBLCNT~1&2[33:45:3]; 91019100
|
|
CURRENT~SEPLEVEL-1; 91019200
|
|
END; 91019300
|
|
TEMPADDR~STATE~ 91019900
|
|
BEGINCTR ~ SCANCOUNT ~ 1; 91020000
|
|
FIRSTX ~ LASTX ~ FIRSTMT ~ -1; 91023000
|
|
POOLX ~ 0 ; 91025000
|
|
STARTINFO~NINFOO~NEXTINFO; 91026000
|
|
STARTADDL~NEXTADDL; 91027000
|
|
IF SVINFOTOG THEN SVINFO~TRUE ELSE SVINFOTOG~FALSE; 91028000
|
|
91028100
|
|
91028200
|
|
COMMENT * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 92000000
|
|
COMPILE THE OUTER BLOCK, AND THEY THAT DWELL THEREIN 92001000
|
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;92002000
|
|
IF REAL(SEPARATOG)=2 THEN 92002100
|
|
BEGIN 92002200
|
|
NEXTPROCEDURE: 92002300
|
|
DO BEGIN 92002350
|
|
SEPARATEDCOMPILING; 92002400
|
|
SEPWRAPUP; 92002500
|
|
END UNTIL NOT SEPARATOG; 92002550
|
|
GO TO ENDOFITALL; 92002600
|
|
END; 92002700
|
|
DECLARATIONS; 92003000
|
|
FIRSTATEMENT; 92004000
|
|
COMPOUNDTAIL; 92005000
|
|
IF SVINFO THEN 92005100
|
|
BEGIN 92005150
|
|
WRITEFILE(INFF,INFO,STARTINFO,NEXTINFO-1); 92005200
|
|
WRITEFILE(INFF,ADDL,STARTADDL,NEXTADDL-1); 92005250
|
|
INFD[(INFDX~INFDX+2).LINKR,INFDX.LINKC]~ 92005300
|
|
(GTI1~(NEXTINFO-STARTINFO+29)DIV 30+INFFX)& 92005350
|
|
INFFX[18:33:15]; 92005400
|
|
INFD[(INFDX~INFDX+1).LINKR,INFDX.LINKC]~ 92005450
|
|
(NEXTINFO-1)&STARTINFO[18:33:15]; 92005500
|
|
INFD[(INFDX~INFDX+1).LINKR,INFDX.LINKC]~ 92005550
|
|
(NEXTADDL-1)&STARTADDL[18:33:15]; 92005600
|
|
INFFX~(NEXTADDL-STARTADDL+29) DIV 30 + GTI1; 92005650
|
|
END; 92005700
|
|
PURGE(256); 92006000
|
|
END PROGRAM; 92007000
|
|
PROGRAM; 92899000
|
|
BEGIN COMMENT THE WRAPUP BLOCK; 92900000
|
|
DEFINE PRT = INFO#, TAG=ADDL#, DISK=CODE#, 92901000
|
|
Z = RESULT#, R=COUNT#, J=CONTEXT#, 92901100
|
|
STACKSIZE = CSZ#, MOM=MAXCSZ#, AD=QGT1#, 92901200
|
|
X = KLASSF#, ROW=LINKR#, COL=LINKC#; 92901300
|
|
PROCEDURE RITE(A,X,TX,N,AT); VALUE X,TX,N,AT; ARRAY A[0,0]; 92902000
|
|
INTEGER X,TX,N,AT; 92903000
|
|
BEGIN 92904000
|
|
LABEL INN,ON; 92904100
|
|
DEFINE BITS = (IF SB THEN DS ~ SET ELSE DS ~ RESET; SKIP SB)#; 92905000
|
|
DEFINE BUMP = IF B ~ B + 1 } 6 THEN 92906000
|
|
BEGIN B ~ B - 6; W ~ W + 1 END BUMP#,D=ELBAT[W],B#, 92907000
|
|
I = SCRAM #, 92907100
|
|
G(G1)=TAG[G1.LINKR,G1.LINKC]#, 92907200
|
|
AA(AA1)=A[AA1.LINKR,AA1.LINKC]#, 92907300
|
|
W = GT3#, B = GT4#, BYTES= 8 BITS#; 92908000
|
|
STREAM PROCEDURE INSERTBYTE(V,W,B); VALUE V,B; 92909000
|
|
BEGIN SI~LOC W; SI~SI-2; SKIP 4 SB; DI~W; B(SKIP 8 DB); BYTES 92910000
|
|
END INSERTBYTE; 92911000
|
|
BOOLEAN STREAM PROCEDURE UNEQUAL(A,B); 92911100
|
|
BEGIN SI ~ A; DI ~ B; IF 8 SC ! DC THEN TALLY~1; UNEQUAL~TALLY 92911200
|
|
END UNEQUAL; 92911300
|
|
STREAM PROCEDURE MOVEBYTES(N,F,FS,T,TS); VALUE N,FS,TS; 92912000
|
|
BEGIN SI ~F; FS(SKIP 8 SB); DI~T; TS(SKIP 8 DB); N(BYTES) END; 92913000
|
|
IF DECKTOG THEN 92913310
|
|
BEGIN 92913320
|
|
I ~ X; 92913330
|
|
ON: 92913340
|
|
IF I ~ I + 1 { N THEN 92913350
|
|
IF TX < 0 THEN GO INN ELSE 92913360
|
|
IF G[X] = G[I] THEN 92913370
|
|
INN: 92913380
|
|
IF NOT UNEQUAL(AA[X],AA[I]) THEN GO ON; 92913390
|
|
IF NOT TB1 ~ I - X > 10 THEN I ~ MIN(X + 10, N)ELSE X~X+1;92913400
|
|
ELBAT[0] ~ (I - X).[28:16] & (1 - REAL(TB1)) [28:47:1] 92913410
|
|
& 11 [21:44:4]; 92913420
|
|
ELBAT[1] ~ 0 & AT[20:28:20] & (I-X) [16:44:4]; 92913430
|
|
AT ~ AT + I - X; 92913440
|
|
W ~ 1; B ~ 5; 92913450
|
|
DO BEGIN 92913460
|
|
INSERTBYTE(IF TX<0 THEN 243 ELSE G[X]+240, D); 92913470
|
|
IF B ~ B + 1 = 6 THEN BEGIN B ~ 2; W~W+1 END; 92913480
|
|
R ~ 0; 92913490
|
|
DO BEGIN 92913500
|
|
MOVEBYTES(Z ~ 6-MAX(R,B),AA[X],R,D); 92913510
|
|
IF B~B+Z=6 THEN BEGIN B~2; W~W+1 END; 92913520
|
|
END UNTIL R~R+Z } 6; 92913530
|
|
END UNTIL X~X+1 } I OR TB1; 92913540
|
|
IF TB1 THEN 92913542
|
|
BEGIN ELBAT[3].[32:16]~62357; MOVE(4,LBUFF[5],ELBAT[4]); 92913544
|
|
W ~ 7; B ~ 5; X ~ I; AT ~ AT + 1; 92913546
|
|
END SMEAR CARD CODE COPYING; 92913548
|
|
EPUNCH(W,B,ELBAT); 92913550
|
|
IF I < N THEN GO ON; 92913560
|
|
W ~ B ~ 0; 92913570
|
|
END DECKTOG ACTION ELSE 92913580
|
|
WHILE N > 0 DO 92914000
|
|
BEGIN 92915000
|
|
IF TX } 0 THEN 92916000
|
|
BEGIN 92917000
|
|
MOVEBYTES(1,TAG[TX.LINKR,TX.LINKC],5,D); 92918000
|
|
TX ~ TX + 1; 92919000
|
|
END ELSE 92920000
|
|
INSERTBYTE(3,D); 92921000
|
|
BUMP; 92922000
|
|
INSERTBYTE(0,D); BUMP; 92923000
|
|
MOVEBYTES(6,A[X.LINKR,X.LINKC],0,D); 92924000
|
|
X ~ X + 1; 92925000
|
|
W ~ W + 1; 92926000
|
|
N ~ N - 1; 92927000
|
|
IF W > 30 THEN 92928000
|
|
BEGIN 92929000
|
|
WRITE(DISK[DKADDR],30,ELBAT[*]); 92930000
|
|
MOVE(45,ELBAT[30],ELBAT[0]); 92931000
|
|
W ~ W -30; DKADDR ~ DKADDR + 1; 92932000
|
|
END N LOOP; 92933000
|
|
END W LOOP; 92933100
|
|
END RITE; 92939000
|
|
PROCEDURE M12(N,A,S,B,X); VALUE N,S,X; ARRAY A[*],B[*,*]; 92940000
|
|
INTEGER N,S,X; 92941000
|
|
BEGIN 92942000
|
|
MOVE(GT1~MIN(256-X.LINKC,N),A[S],B[X.LINKR,X.LINKC]); 92943000
|
|
IF N ~ N - GT1 > 0 THEN 92944000
|
|
MOVE(N,A[S+GT1],B[(X~X+GT1).LINKR,X.LINKC]) 92945000
|
|
END M12; 92946000
|
|
PROCEDURE M22(N,A,AX,B,BX); VALUE N,AX,BX; INTEGER N,AX,BX; 92947000
|
|
ARRAY A,B[0,0]; 92948000
|
|
BEGIN 92949000
|
|
INTEGER P; 92950000
|
|
DO BEGIN 92951000
|
|
MOVE(P~MIN(256-AX.LINKC,256-BX.LINKC,N), 92952000
|
|
A[AX.LINKR,AX.LINKC],B[BX.LINKR,BX.LINKC]); 92953000
|
|
AX ~ AX + P; BX ~ BX+P; 92954000
|
|
END UNTIL N ~ N - P { 0; 92955000
|
|
END M22; 92956000
|
|
LABEL DD; 92957000
|
|
COMMENT * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 93000000
|
|
GIVE IT TO THE OUTSIDE WORLD---MAYBE 93001000
|
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *;93002000
|
|
IF POOLX > 0 THEN FLUSHPOOL; 93002100
|
|
WHILE L MOD 6 ! 0 DO EMIT(NVLD); 93003000
|
|
EDOC[(L~L DIV 6).ROW,L.COL] ~ CORESIZE~(J~(STACKSIZE~STACKTOP 93004000
|
|
[0]) + SAVESIZE) + L; 93005000
|
|
EDOC[L.ROW,L.COL].[09:17]~EDOC[L.ROW,L.COL] + 1; 93005100
|
|
DKADDR ~ 366; L ~ L+ 1; 93005200
|
|
COMMENT DKADDR IS NOW THE STARTING DISKADDRESS IN THE CODE 93006000
|
|
FILE OF OVERLAYABLE STUFF. 93007000
|
|
CORESIZE IS THE AMOUNT OF SAVE CORE. 93008000
|
|
J IS THE START OF THE OUTER-BLOCK CODE SEGMENT. 93009000
|
|
STACKSIZE IS THE SIZE OF THE LEVEL-ZERO START, AND 93010000
|
|
THE START OF SAVE DATA. 93011000
|
|
L IS NOW THE NUMBER OF WORDS IN THE SAVE CODE SEGMENT; 93012000
|
|
PRT[0,0] ~ 0; M22(J-1,PRT,0,PRT,1); 93012100
|
|
TAG[0,0] ~ 0; M22(J-1,TAG,0,TAG,1); 93012200
|
|
IF FIRSTX < 0 THEN FIRSTX ~ FIRSTMT; 93012900
|
|
GLOBALPCW(3,SEGNO,FIRSTX,1); 93013000
|
|
IF SVINFO THEN 93013010
|
|
INFD[(GTI1~INFDX-3).LINKR,GTI1.LINKC]~PCW; 93013020
|
|
FLOG(1,0&REAL(NOT FALSE)[8:28:20],PRT[0,4]); TAG[0,4] ~ 5; 93013040
|
|
FLOG(1,J&L[8:23:20],PRT[0,SEGNO]); TAG[0,SEGNO]~3; 93013100
|
|
PRT[0,0] ~ -(0&CORESIZE[10:31:17]); 93013200
|
|
FLOG(1,CORESIZE+1&CORESIZE[10:31:17],PRT[0,1]); 93013230
|
|
TAG[0,0] ~ TAG[0,1] ~ 3; 93013300
|
|
SAVEL ~ IF SAVEL ! 0 THEN (SAVEL+5) DIV 6 ELSE 4; 93013400
|
|
INZCODE[0,0].[10:17] ~ INZCODE[SAVEL.ROW,SAVEL.COL] ~ SAVEL; 93013500
|
|
T ~ 8190 - CORESIZE - SAVEL ~ SAVEL + 1; 93013600
|
|
INZCODE[SAVEL.ROW,SAVEL.COL] ~ 0& SAVEL ~T[7:28:20]&1[27:47:1];93013700
|
|
PRT[0,6] ~ CORESIZE & 1[6:47:1]; 93013800
|
|
IF ERRORCOUNT!0 OR NOT LISTOG.[46:1] THEN PRINTAIL; 93014000
|
|
X ~ I ~ STACKSIZE; 93035000
|
|
IF ERRORCOUNT ! 0 THEN GO TO ENDOFITALL; 93036000
|
|
CLOSE(LINE); 93037000
|
|
IF DECKTOG THEN 93038000
|
|
BEGIN 93039000
|
|
FILL TA[*] WITH 93040000
|
|
COMMENT INTERNAL TO EBCDIC CARD CODE; 93041000
|
|
OCT5403,OCT4401,OCT4201,OCT4101,OCT4041,OCT4021,OCT4011,OCT4005,93042000
|
|
OCT4003,OCT4403,OCT4203,OCT4103,OCT4043,OCT4023,OCT4013,OCT4007,93043000
|
|
OCT6403,OCT2401,OCT2201,OCT2101,OCT2041,OCT2021,OCT2011,OCT2005,93044000
|
|
OCT2003,OCT2403,OCT2203,OCT2103,OCT2043,OCT2023,OCT2013,OCT2007,93045000
|
|
OCT3403,OCT1401,OCT1201,OCT1101,OCT1041,OCT1021,OCT1011,OCT1005,93046000
|
|
OCT1003,OCT1403,OCT1203,OCT1103,OCT1043,OCT1023,OCT1013,OCT1007,93047000
|
|
OCT7403,OCT0401,OCT0201,OCT0101,OCT0041,OCT0021,OCT0011,OCT0005,93048000
|
|
OCT0003,OCT0403,OCT0203,OCT0103,OCT0043,OCT0023,OCT0013,OCT0007,93049000
|
|
OCT0000,OCT5401,OCT5201,OCT5101,OCT5041,OCT5021,OCT5011,OCT5005,93050000
|
|
OCT5003,OCT4402,OCT4202,OCT4102,OCT4042,OCT4022,OCT4012,OCT4006,93051000
|
|
OCT4000,OCT6401,OCT6201,OCT6101,OCT6041,OCT6021,OCT6011,OCT6005,93052000
|
|
OCT6003,OCT2402,OCT2202,OCT2102,OCT2042,OCT2022,OCT2012,OCT2006,93053000
|
|
OCT2000,OCT1400,OCT3201,OCT3101,OCT3041,OCT3021,OCT3011,OCT3005,93054000
|
|
OCT3003,OCT1402,OCT6000,OCT1102,OCT1042,OCT1022,OCT1012,OCT1006,93055000
|
|
OCT7000,OCT7401,OCT7201,OCT7101,OCT7041,OCT7021,OCT7011,OCT7005,93056000
|
|
OCT7003,OCT0402,OCT0202,OCT0102,OCT0042,OCT0022,OCT0012,OCT0006,93057000
|
|
OCT5402,OCT5400,OCT5200,OCT5100,OCT5040,OCT5020,OCT5010,OCT5004,93058000
|
|
OCT5002,OCT5001,OCT5202,OCT5102,OCT5042,OCT5022,OCT5012,OCT5006,93059000
|
|
OCT6402,OCT6400,OCT6200,OCT6100,OCT6040,OCT6020,OCT6010,OCT6004,93060000
|
|
OCT6002,OCT6001,OCT6202,OCT6102,OCT6042,OCT6022,OCT6012,OCT6006,93061000
|
|
OCT3402,OCT3400,OCT3200,OCT3100,OCT3040,OCT3020,OCT3010,OCT3004,93062000
|
|
OCT3002,OCT3001,OCT3202,OCT3102,OCT3042,OCT3022,OCT3012,OCT3006,93063000
|
|
OCT7402,OCT7400,OCT7200,OCT7100,OCT7040,OCT7020,OCT7010,OCT7004,93064000
|
|
OCT7002,OCT7001,OCT7202,OCT7102,OCT7042,OCT7022,OCT7012,OCT7006,93065000
|
|
OCT5000,OCT4400,OCT4200,OCT4100,OCT4040,OCT4020,OCT4010,OCT4004,93066000
|
|
OCT4002,OCT4001,OCT5203,OCT5103,OCT5043,OCT5023,OCT5013,OCT5007,93067000
|
|
OCT3000,OCT2400,OCT2200,OCT2100,OCT2040,OCT2020,OCT2010,OCT2004,93068000
|
|
OCT2002,OCT2001,OCT6203,OCT6103,OCT6043,OCT6023,OCT6013,OCT6007,93069000
|
|
OCT1202,OCT3401,OCT1200,OCT1100,OCT1040,OCT1020,OCT1010,OCT1004,93070000
|
|
OCT1002,OCT1001,OCT3203,OCT3103,OCT3043,OCT3023,OCT3013,OCT3007,93071000
|
|
OCT1000,OCT0400,OCT0200,OCT0100,OCT0040,OCT0020,OCT0010,OCT0004,93072000
|
|
OCT0002,OCT0001,OCT7203,OCT7103,OCT7043,OCT7023,OCT7013,OCT7007,93073000
|
|
0; 93074000
|
|
FILL ELBAT[*] WITH 9307450093074000
|
|
"F340A220","F3","FEFE9544","A200F301",%CARD 1 OF LDR 93075000
|
|
"DFDFDFDF","DFF70000","00784004","F3800FFF", 93075100
|
|
"F00000F3","06002095","4BA34012","2000F000", 93075200
|
|
"06F3B241","20029C04","F304B795","4AB7A1F3", 93075300
|
|
"20009810","1808F39E","064020BA","A2F3A004", 93075400
|
|
"F3002096","06954AF3","A12000B3","2021F392",%CARD 2 93075500
|
|
"00069340","26F3BB40","06B9A1A0","F304B5B5", 93075600
|
|
"B00020F3","AE401000","2040F30F","95BCABDF", 93075700
|
|
"DFF34040","40404040","F7000A00","384025F7", 93075800
|
|
"28","254040","40404040","40404040", 93075900
|
|
"F5800000","F0203540","000000F0","2033F3A2", 93076000
|
|
"0001F020","29F30024","0002954B","F3FEFE95", 93076100
|
|
"44A200F3","02960695","4AA1F300","01402FBD", 93076200
|
|
"B7F3B79A","2714B69A","F32B0140","23BDB6F3", 93076300
|
|
"A0000DB6","D4A3F3DF","A3404040","40401220", 93076400
|
|
"F5880000","602005F3","40000040","4F300",%XFR CARD 93076500
|
|
0,"BC402FB0","A6F3BA40","2FB1A695", 93076600
|
|
"F3B7D4A3","40000040","4004F300","9800", 93076700
|
|
"25404040"; 93076800
|
|
FOR T~0 STEP 1 UNTIL 74 DO 93080000
|
|
ELBAT[T] ~(C ~ ELBAT[T]).[44:4] & C [40:36:4] & C[36:32:4]93081000
|
|
&C[32:26:4] &C[28:20:4] &C[24:14:4] &C[20:8:4] 93082000
|
|
&C[16:2:4] + C.[43:1] &C[43:37:1] &C[39:31:1] 93083000
|
|
&C[35:25:1] &C[31:19:1] &C[27:13:1] &C[23:7:1] 93084000
|
|
&C[19:1:1] | 9; 93085000
|
|
EPUNCH(19,6,ELBAT); MOVE(40,ELBAT[20],ELBAT[0]); 93090000
|
|
EPUNCH(19,6,ELBAT); MOVE(20,ELBAT[40],ELBAT[0]); 93091000
|
|
EPUNCH(19,6,ELBAT); MOVE(14,ELBAT[60],LBUFF[0]); 93092000
|
|
END DECKTOG PRELIMINARIES; 93099000
|
|
WHILE PDINX ~ PDINX - 1 } 0 DO 93100000
|
|
BEGIN AD ~ T ~ 0; 93101000
|
|
MOM ~ (C ~ PDPRT[PDINX.LINKR,PDINX.LINKC]).[36:12]; 93102000
|
|
CASE C.[2:3] OF 93103000
|
|
BEGIN 93104000
|
|
BEGIN COMMENT CASE 0 = DATA DESCRIPTOR; 93105000
|
|
DD: 93105100
|
|
IF C.[23:13] ! 0 THEN 93106000
|
|
IF BOOLEAN(C.[8:1]) THEN 93107000
|
|
BEGIN 93108000
|
|
READ SEEK(TEMP[C.[23:13]]); 93109000
|
|
AD ~ X; 93110000
|
|
J ~ C.[10:13]; 93111000
|
|
FOR I ~ 0 STEP 30 UNTIL J - 1 DO 93112000
|
|
BEGIN READ(TEMP,30,ELBAT[*]); 93113000
|
|
M12(T~MIN(30,J-I),ELBAT,0,PRT,X); 93114000
|
|
X ~ X + 1; 93115000
|
|
END; 93116000
|
|
END SAVE ARRAYS ELSE 93117000
|
|
BEGIN 93118000
|
|
READ SEEK(TEMP[C.[23:13]]); 93119000
|
|
AD ~ DKADDR; 93121000
|
|
J ~ (C.[10:13] + 29) DIV 30; 93122000
|
|
WHILE J ~ J - 1 } 0 DO 93123000
|
|
BEGIN 93124000
|
|
READ(TEMP,30,ELBAT[*]); 93125000
|
|
WRITE(CODE[DKADDR],30,ELBAT[*]); 93126000
|
|
DKADDR ~ DKADDR + 1; 93127000
|
|
END END NONSAVE ARRAYS ELSE 93128000
|
|
COMMENT TEMP ADDRESS = 0; 93129000
|
|
IF C.[8:1]=1 AND C.[10:13]!0 THEN 93129100
|
|
X ~ (AD ~ X) + C.[10:13]; 93130000
|
|
AD ~ AD & C[15:10:13] & C[7:6:1] & C[4:7:1]; 93131000
|
|
AD.[28:2] ~3|REAL(C.[8:1]=0 AND C.[23:13]!0); 93131010
|
|
AD.[1:1] ~ REAL(C.[10:13]=0); 93131100
|
|
FLOG(C.[8:1],AD,PRT[MOM.LINKR,MOM.LINKC]); 93132000
|
|
T ~ 5 93133000
|
|
END DATA DESCRIPTOR; 93134000
|
|
COMMENT CASE 1 IS ALSO DATA DESCRIPTOR; 93135000
|
|
GO TO DD; 93135100
|
|
COMMENT CASE 2 = D. P. VARIABLE; 93136000
|
|
T ~ TAG[(MOM+1).LINKR,(MOM+1).LINKC] ~ 2; 93137000
|
|
COMMENT CASE 3 = PTR VARIABLE; 93138000
|
|
BEGIN 93139000
|
|
PRT[MOM.LINKR,MOM.LINKC] ~ 0; 93140000
|
|
T ~ 5 93141000
|
|
END POINTER VARIABLE; 93142000
|
|
; COMMENT CASE 4 IS NULL; 93143000
|
|
; COMMENT CASE 5 IS NULL; 93144000
|
|
COMMENT CASE 6 = SEGMENT DESCRIPTOR; 93145000
|
|
BEGIN 93146000
|
|
READ SEEK(TEMP[C.[23:13]]); 93147000
|
|
AD ~ DKADDR; 93148000
|
|
J ~ (C.[10:13]+29) DIV 30; 93149000
|
|
WHILE J ~ J-1 } 0 DO 93150000
|
|
BEGIN 93151000
|
|
READ(TEMP,30,ELBAT[*]); 93152000
|
|
WRITE(CODE[DKADDR],30,ELBAT[*]); 93153000
|
|
DKADDR ~ DKADDR + 1; 93154000
|
|
END; 93155000
|
|
PRT[MOM.LINKR,MOM.LINKC]~AD&C[15:10:13]& 93156000
|
|
1[2:47:1]; 93156001
|
|
T ~ 3 93157000
|
|
END SEGMENT DESCRIPTOR; 93158000
|
|
COMMENT CASE 7 = PROGRAM CONTROL WORD; 93159000
|
|
BEGIN 93160000
|
|
PRT[MOM.LINKR,MOM.LINKC] ~ C.[24:12] & 93161000
|
|
((T~C.[7:17])DIV 6)[15:35:13]& 93162000
|
|
(I MOD 6) [12:9:3] & C[28:6:1] & 93163000
|
|
1[33:47:1]; 93164000
|
|
T ~ 7 93165000
|
|
END PCW CASE; 93166000140608PK
|
|
END CASES OF PDPRT ENTRIES; 93167000
|
|
TAG[MOM.LINKR,MOM.LINKC] ~ T 93168000
|
|
END ANALYSIS OF PDPRT ENTRIES; 93169000
|
|
PRT[0,2] ~ X ~ DKADDR + 1; 93200000
|
|
GT3 ~ GT4 ~ DKADDR ~ ELBAT[0] ~ 0; 93201000
|
|
MOVE(50,ELBAT[0],ELBAT[1]); 93202000
|
|
RITE(PRT,0,0,STACKSIZE + SAVESIZE,0); 93202100
|
|
RITE(EDOC,0,-1,L,STACKSIZE + SAVESIZE); 93202200
|
|
RITE(INZCODE,0,-1,8190-CORESIZE,STACKSIZE+SAVESIZE+L); 93202250
|
|
WHILE GT3 | 6 + GT4 > 0 DO 93202300
|
|
BEGIN 93203000
|
|
WRITE(DISK[DKADDR],30,ELBAT[*]); 93204000
|
|
MOVE(45,ELBAT[30],ELBAT[0]); 93205000
|
|
GT3 ~ GT3 - 30; 93205050
|
|
DKADDR ~ DKADDR + 1; 93205100
|
|
END; 93205200
|
|
IF SVINFO THEN 93220000
|
|
BEGIN 93221000
|
|
READ SEEK(DISK[DKADDR~X]); 93221500
|
|
WRITESVINFO(DISK); 93222000
|
|
REWIND(DISK); 93223000
|
|
READ(DISK,30,AY[*]); 93224000
|
|
AY[0].[28:20]~X; 93225000
|
|
WRITE(DISK,30,AY[*]); 93226000
|
|
END; 93227000
|
|
IF DECKTOG THEN 93228000
|
|
BEGIN 93229000
|
|
MOVE(14,LBUFF[0],ELBAT[0]); 93230000
|
|
ELBAT[4] ~ SEGNO.[34:6] &(FIRSTX DIV 6)[23:35:13] 93240000
|
|
& 33 [36:42:6] & (I ~ FIRSTX MOD 6)[20:45:3]; 93241000
|
|
ELBAT[5].[16:8] ~ SEGNO; 93242000
|
|
EPUNCH(13,6,ELBAT); 93243000
|
|
END PUNCHING TRANSFER CARD ELSE 93244000
|
|
LOCK(DISK); 93500000
|
|
END OF THE WRAPUP BLOCK; 94000000
|
|
ENDOFITALL: 94001000
|
|
% 94001500
|
|
CLOSE(TAPE); 94001600
|
|
IF NEWTOG THEN 94010000
|
|
BEGIN 94011000
|
|
FILL SEPA[*] WITH "END;END."," L A S T"," C A R D"," I M A G", 94012000
|
|
" E O N N"," E W T ","A P E "," ", 94013000
|
|
" ","99999999"; 94014000
|
|
WRITE(NEWTAPE,10,SEPA[*]); 94015000
|
|
END; 94016000
|
|
END OF ESPOL COMPILER. . . . . . 98888888
|
|
99999980
|