PREQ REGISTER ASSIGNMENT N1CHAR* . THIS SECTION PARSES A CHARACTER DIRECTIVE . FORMS RECOGNIZED ARE . CHARACTER *INTEGER ; WHERE INTEGER IS SIZE DEFAULT . FOR REST OF STATEMENT . CHARACTER *(EXPRESSION) ; WHERE EXPRESSION IS SIZE DEFAULT . FOR REST OF STATEMENT . CHARACTER NAME*LENGTH . CHARACTER NAME(DIMENSION INFO)*LENGTH . $(1) . S,H1 B1,CRFLD . FLAG THAT CHARACTER DIRECTIVE APPEARED LMJ B11,GX J CHE1 . IMPROPER END OF STATEMENT TNE,M A0,'*' J CHQA . SCAN DEFAULT LENGTH SZ FNXT CH302 SZ CHXA . USE AS FLAG FOR EXPLICIT LENGTH?_ SZ CHMODE . CLEAR ATTRIBUTES LMJ B11,GIT . IDENTIFIER NOT FOUND WHERE EXPECTED J CH300 . END OF STATEMENT TE,M A2,3 J CHE3 . IDENTIFIER NOT FOUND WHERE EXPECTED LMJ B11,SETT . SET TYPE IN MODE WORD +CHTYPE . TYPE OF CHARACTER CONSTANT L FNXT,R8 . SKIP DELIMITER S A1,SYMVG . SAVE POINTER TO IDENTIFIER L,S3 A4,2,A1 . GET MODE FIELD AND,M A4,7 TNE,M A5,5 J CH206 . DUMMY ARGUMENT OK TE,M A5,1 . TEST DEFINE TNE,M A5,2 . TEST EXTERNAL FUNCTION J CH206J JZ A5,CH206 . ALREADY SET AS VARIABLE TE,M A5,7 J CHE4 . CANT BE SET TO CHARACTER L A0,GXX TNE,M A0,'(' J CH313 L,M A4,060 S,S3 A4,2,A1 . MARK AS CHARACTER IDENTIFIER SZ,S2 2,A1 . CLEAR BITS SET WHEN UNDEFINED CH206 . L A0,GXX . LAST DELIMITER TNE,M A0,'(' J CH313 . GET DIMENSION INFORMATION CH305 TNE,M A0,'*' J CH200 . SCAN OFF LENGTH INFO CH210 L A1,SYMVG . SYM POINTER TO VARIABLE L,H2 A2,3,A1 . SEE IF DIMENSION POINTER EXISTS JZ A2,CH220 . NO DYNAMIC SPACE YET L,S2 A4,2,A1 . PREPARE TO EXTRACT NUMBER OF DIMENSION AND,M A4,7 . NUMBER OF DIMENSIONS A A2,A5 . GET LOCATION TO SAVE CHARACTER INFO AT CH230 L A4,CHXA . EXPLICIT LENGTH TNZ A4 L A4,CHXD . IMPLICIT LENGTH S A4,1,A2 SZ 2,A2 . CLEAR SUBSTRING CHAIN HEAD FOR PHASE V L A5,(0660200,0) . CHARACTER INFO HEADER TZ FDASQT . TEST ACTIVE ASCII A A5,(0100,0) . 6603 IS ASCII A A5,CHMODE . ADD IN ATTRIBUTES S A5,0,A2 S,H1 A2,SYMVG . SAVE LOCATION OF CHARACTER PACKET L,S3 A4,2,A1 . TEST FOR CHARACTER FUNCTION AND,M A4,5 . TEST FOR DUMMY ARGUMENT TNE,M A5,0 J CH231F TE,M A4,062 J CH230F . NO IT WAS NOT A FUNCTION CH231F L,S1 A4,1,A2 . TEST IF LENGTH IS CONSTANT TE,M A4,3 J CH230G . NO GENERATE ERROR MESSAGE S,H1 A1,3,A2 . SAVE SYM POINTER TO FUNCTION LENGTH CH230F L A0,GXX . RESTORE NEXT DELIMITER TNE,M A0,'/' J CH341 . TRY FOR SOME DATA TZ FEOS J PH301 TE,M A0,',' . ONLY VALID DELIMITER LMJ B11,ERR2 L FNXT,R8 . DISCARD COMMA J CH302 . TRY FOR ANOTHER IDENTIFIER CH230G LMJ B11,PERR FORM6 1,41,0 . NEEDS CONSTANT LENGTH L A4,(030100,0) . SET LENGTH TO ZERO S A4,1,A2 J CH302 CH313 LMJ B11,DIMT . DETERMINE IF DIMENSION OK S A1,SYMVG . SAVE SYM FOR GLD L,M A5,1 . SET BIT FOR VARIABLE S,S3 A5,CHMODE LMJ B11,GLD . PARSE OFF DIMENSION INFO J CHE1 . ERROR CH205 LMJ B11,GX . GET NEXT DELIMITER J CHE1 J CH305 CH200 LMJ B11,CHXL . GET LENGTH J CH210 . ADD CHARACTER LENGTH TO DIMENSION INF CH220 L,H2 A0,N1CHQQ . NUMBER DYNAMIC WORDS NEEDED LMJ B11,PRQEST . GET SPACE FROM PERMANENT POOL SLJ SYMOF SSL A0,18 S,H2 A0,3,A1 . SET POINTER IN SYM TABLE L A2,A0 J CH230 . THIS SECTION PROCESSES A LENGTH FOR THE CHARACTER STATEMENT . THIS SECTION IS ENTERED WHEN AN ASTERISK IS FOUND CHXL S B11,CHLXT . SAVE EXIT LMJ B11,GX J CHE1 . ILLEGAL END OF STATEMENT TE,M A0,'(' J CHXLA . NO EXPRESSION INVOLVED L A0,MAUNQ . GET UNIQUE NAME FOR LENGTH A,M A0,1 S A0,MAUNQ L,M A3,3 LMJ B11,MACEBD . CONVERT TO CHARACTERS S A2,GITV L A2,MAUPFX . FIRST TWO CHARACTER S,S2 A2,GITV . OF UNIQUE NAME SSL A2,6 S,S1 A2,GITV . SIMULATE S,T1 LMJ B11,GLS . PLACE IN SYMBOL TABLE NOP S,H2 A1,CHXA . SAVE SYMBOL TABLE POINTER L,M A2,020000 . VARIABLE ID S,H1 A2,CHXA . MAKE LENGTH LOOK LIKE VARIABLE L,M A2,010 S,S3 A2,2,A1 . SET TO INTEGER VARIABLE L,M A12,0,A1 . FORM DEFINITION POINT FOR NAME LMJ B11,GENDP2 L A0,CHXA . FILE ITEM REPRESENTING NAME OF LENGTH L A1,FXL . EXECUTABLE STATEMENT FLAG S A1,CHFXL . SAVE FLAG S R15,FXL . ALLOW EXPRESSIONS LMJ B11,SCIOX . SCAN EXPRESSION REPRESENTING LENGTH L A1,CHFXL S A1,FXL . RESTORE FLAG L FNXT,R8 . SKIP CLOSING PARENTHESIS LMJ B11,GX . GET NEXT CHARACTER NOP SZ FNXT AN,M B5,1 . REMOVE UNWANTED DUMMY CHXY L B11,CHLXT J 0,B11 CHXLA SZ FNXT . REREAD LAST CHARACTER LMJ B11,GIT J CHE1 . ILLEGAL END OF STATEMENT TE,M A2,4 . TEST FOR INTEGER CONSTANT J CHE2 . IMPROPER SYNTAX L A5,GITV SLJ SCR49S . FORM FILE ITEM FROM CONSTANT S A1,CHXA J CHXY CH206J L,M A5,2 . BIT FOR FUNCTION S,S3 A5,CHMODE J CH206 CHQA . GET DEFAULT LENGTH LMJ B11,CHXL . SCAN LENGTH L A0,CHXA . FILE ITEM FOR LENGTH L FNXT,R8 . DISCARD COMMA S A0,CHXD . SAVE AS DEFAULT LENGTH J CH302 . GET NAME OF IDENTIFIER CH300 J PH301 . PROCESS NEXT STATEMENT CHE1 LMJ B11,PERR FORM6 0,4,0 J PH301 . SKIP TO NEXT STATEMENT CHE2 LMJ B11,PERR . IMPROPER SYNTAX FORM6 1,20,0 J PH301 CHE3 LMJ B11,PERR . IDENTIFIER NOT FOUND WHERE EXPECTED FORM6 1,274,0 J PH301 CHE4 LMJ B11,PERR . VARIABLE CANT APPEAR IN CHARACTER FORM6 1,275,0 J PH301 $(2) CHXA +020000,0 . CONVERT LENGTH TO VARIABLE ITEM CHFXL +0 . SAVE EXECTABLE STATEMENT FLAG CHXD +0 . DEFAULT ITEM FOR GROUP CHTYPE +6 MODE FOR CHARACTER VARIABLES CHLXT +0 . EXIT TO LENGTH SECTION CHMODE +0 . CONTAINS ATTRIBUTES ABOUT IDENTIFIER N1CHQQ* +4,4 . NUMBER WORDS OF CHARACTER INFO END