mirror of
https://github.com/retro-software/B5500-software.git
synced 2026-01-11 23:42:42 +00:00
Correct bad line endings in the repository files that caused problems between checking out in Windows vs Linux clients.
10174 lines
904 KiB
Plaintext
10174 lines
904 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
|