*. MAINTSKEL REV 2.3 07/01/77 *. *. *. QUEUE <ELEMENT> <VERSION> <SGS-NAME> <SGS-NUMBER> *. *. <SGS-NAME> AND <SGS-NUMBER> REFER TO A PARTICULAR *. MAP, PROCESS, DESCRIBE, OR TOC SGS, OR *. A PARTICULAR PCF OR TCF ENTRY. THIS PROCEDURE *. ESTABLISHES THE PROCESSOR AND NON-DEFAULT OPTIONS (IF ANY) *. FOR SOME ELEMENT AND PASSES THE INFORMATION TO MAKESGS. *. THIS ASSUMES THAT MAP SGSSES ARE PROCESSED FIRST. *. OTHERWISE, ALL KINDS OF BAD THINGS WILL HAPPEN IN TERMS OF *. PROCESSING TOO MANY MAPS. *. *DEFINE QUEUE *CLEAR FOUND *INCREMENT I TO [DOLIST,1] WHILE FOUND IS CLEAR *PROCESS DOSEARCH [#1] [#2] [DOLIST,1,I,1] *LOOP *IF FOUND IS CLEAR *IF [#3] = MAP *PROCESS MAKESGS [#1] [#2] MAP MAP [#4] *ELSE *. DIDN'T COME FROM MAP SGS. SEE IF DESCRIBE. *IF [#3] = DESCRIBE OR [#3] = PROCESS *IF [#3] = DESCRIBE OR [[#3],[#4]] > 1 *PROCESS MAKESGS [#1] [#2] [[#3],[#4],2,1] [#3] [#4] *SET FOUND *END *END *IF FOUND IS CLEAR *. NOT FROM DESCRIBE. SEE IF IT HAS A DESCRIBE. *INCREMENT DUMMY TO [DESCRIBE] WHILE FOUND IS CLEAR *IF COLUMN SEARCH FROM DESCRIBE,DUMMY,1,1 FOR [#1] *IF [DESCRIBE,CARD,1] > 1 *IF [DESCRIBE,CARD,1,2] = [#2] *SET FOUND TO CARD *ELSE *SET DUMMY TO CARD *END *ELSE *IF [#2] = 'NO' *SET FOUND TO CARD *ELSE *SET DUMMY TO CARD *END *END *ELSE *SET FOUND TO -1 *END *LOOP *IF VALUE OF FOUND > 0 *PROCESS MAKESGS [#1] [#2] [DESCRIBE,FOUND,2,1] DESCRIBE [*FOUND] *ELSE *. NO DESCRIBE. TRY TOC. *CLEAR FOUND *INCREMENT DUMMY TO [TOC] WHILE FOUND IS CLEAR *IF COLUMN SEARCH FROM TOC,DUMMY,1,1 FOR [#1] *IF [TOC,CARD,3,1] < +5 *IF [TOC,CARD,2,1] = [#2] *SET FOUND TO CARD *ELSE *IF [#2] = 'NO' AND [TOC,CARD,2,1] = '''' *SET FOUND TO CARD *ELSE *SET DUMMY TO CARD *END *END *ELSE *SET DUMMY TO CARD *END *ELSE *SET FOUND TO -1 *END *LOOP *IF VALUE OF FOUND > 0 *SET THING TO [TOC,FOUND,3,1]+TOCNO-2 *IF VALUE OF THING < VALUE OF TOCNO *SET THING TO [TOC,FOUND,3,2]+TOCNO1 *END *PROCESS MAKESGS [#1] [#2] [PROCESSOR,THING,1,1] 0 0 *ELSE *. WELL, IT'S NOT DESCRIBED ANYWHERE. USE DEFAULT. *PROCESS MAKESGS [#1] [#2] [LANGUAGE,1,1,1] 0 0 *END *END *END *END *END *END *EJECT *. *. DOSEARCH <NAME> <VERSION> <DO-SGS> *. *. SEE IF ELEMENT ALREADY APPEARS IN A LIST. *. *DEFINE DOSEARCH *CLEAR EXIT *INCREMENT DUMMY TO [[#3]] WHILE EXIT IS CLEAR *IF COLUMN SEARCH FROM [#3],DUMMY,1,1 FOR [#1] *IF [[#3],CARD,1,2] = [#2] *SET FOUND *SET EXIT *ELSE *SET DUMMY TO CARD *END *ELSE *SET EXIT *END *LOOP *END *EJECT *. *. MAKESGS <ELT> <VER> <SUBTYPE> [<SGS-TYPE> <SGS-NUMBER> / 0 0] *. *. WHERE THE LAST TWO ARGUMENTS TELL OF A MAP OR DESCRIBE OR LANGUAGE *. SGS GIVING OPTIONS AND NON-STANDARD OUTPUT NAME, PERHAPS. *. THIS PROCEDURE CREATES THE DOFIRST, DOPROC, DOLANG, AND DOMAP SGSSES. *. *DEFINE MAKESGS *. FIND PROPER PROCESSOR SGS AND CORRESPONDING STANDARD PROCESSOR SGS. *IF COLUMN SEARCH FROM PROCESSOR,1,1,1 FOR [#3] *SET INDEX TO CARD *ELSE #MSG,N MAKESGS ERROR: PROCESSOR [#3] DOES NOT EXIST! (@ELT ASSUMED) *SET INDEX TO +ELTNOF *END *IF [BACKREF,INDEX,1,1] = +MAPNO AND NOT [#4] = MAP AND [MAP] > 0 *SET INDEX TO +ELTNOF *END *SET INDEX2 TO [BACKREF,INDEX,1,1] *IF VALUE OF INDEX2 = -1 *SET INDEX2 TO +ELTNO *END *CLEAR FFRST *IF NOT [FIRST,1,1,1] = 'NO' *INCREMENT IFRST TO [FIRST] WHILE FFRST IS CLEAR *IF [FIRST,IFRST,1,1] = SUBTYPE *IF [FIRST,IFRST,2,1] = [#3] *CREATE SGS: DOFIRST [#1],[#2] [*INDEX],[*INDEX2] [#4],[#5] *SET FFRST *END *ELSE *IF [FIRST,IFRST,1,1] = ELEMENT *IF [FIRST,IFRST,2,1] = [#1] *IF [FIRST,IFRST,2] = 1 *IF [#2] = 'NO' *CREATE SGS: DOFIRST [#1],[#2] [*INDEX],[*INDEX2] [#4],[#5] *SET FFRST *END *ELSE *IF [FIRST,IFRST,2,2] = [#2] *CREATE SGS: DOFIRST [#1],[#2] [*INDEX],[*INDEX2] [#4],[#5] *SET FFRST *END *END *END *ELSE #MSG,N MAKESGS ERROR: IMPROPER 'FIRST' SGS. *END *END *LOOP *END *IF NOT VALUE OF FFRST > 0 *IF +INDEX2=+PDPNO OR +INDEX2=+ASMPNO OR +INDEX2=+COBPNO OR +INDEX2=+FORPNO ; OR +INDEX2=+MASMPNO *CREATE SGS: DOPROC [#1],[#2] [*INDEX],[*INDEX2] [#4],[#5] *ELSE *IF VALUE OF INDEX2 = VALUE OF MAPNO *CREATE SGS: DOMAP [#1],[#2] [*INDEX],[*INDEX2] [#4],[#5] *ELSE *CREATE SGS: DOLANG [#1],[#2] [*INDEX],[*INDEX2] [#4],[#5] *END *END *END *END *EJECT *. *. FSCAN TAKES ONE ARGUMENT, P OR T, REPRESENTING PCF OR TCF ENTRIES. *. FOR EACH SGS BY THE GIVEN NAME, IT CREATES A 'DOIT' SGS. *. IT AVOIDS DUPLICATE DOIT ENTRIES. *. *DEFINE FSCAN *INCREMENT I TO [[#1]] *IF [[#1],I] = 1 *PROCESS QUEUE [[#1],I,1,1] 'NO' [#1] [*I] *ELSE *PROCESS QUEUE [[#1],I,1,1] [[#1],I,2,1] [#1] [*I] *END *LOOP *END *. *. *. COPYNAME <FROM> <TO> *. *. TO SET UP DEFAULT VALUE FOR *SOME* OF THE FILES, *. THIS COPIES SOME SGS SUCH AS SI TO CREATE ANOTHER. *. *DEFINE COPYNAME *IF [[#1]] > 0 AND [[#2]] = 0 *IF [[#1],1,1]>1 *CREATE SGS: [#2] [[#1],1,1,1],[[#1],1,1,2] *ELSE *CREATE SGS: [#2] [[#1],1,1,1] *END *END *END *. *. *. COMPNAME <SGS1> <SGS2> *. *. COMPARES WHETHER THE FILE-NAMING SGSSES ARE THE SAME. *. SETS VALUE OF 'EQUAL' ACCORDINGLY. *. *DEFINE COMPNAME *CLEAR EQUAL *IF [[#1],1,1,1] = [[#2],1,1,1] AND [[#1],1,1] = [[#2],1,1] *IF [[#1],1,1] = 1 *SET EQUAL *ELSE *IF [[#1],1,1,2] = [[#2],1,1,2] *SET EQUAL *END *END *END *END *EJECT *. *. FILENAME <SGS-NAME> *. *. IN EDIT MODE, EDIT THE FILENAME OR QUALIFIER*FILENAME *. FROM THE SPECIFIED FILE SGS (SI, RO, A0, ETC.) *. *DEFINE FILENAME [[#1],1,1,1]& *IF [[#1],1,1] > 1 "[[#1],1,1,2]& *END *END *. *. *. ELTNAME <SGS-NAME> <SGS-NUMBER> *. *. IN EDIT MODE, EDIT THE ELEMENT OR ELEMENT/VERSION *. FROM FIELD 1 OF THE SPECIFIED SGS. *. *DEFINE ELTNAME [[#1],[#2],1,1]& *IF NOT [[#1],[#2],1,2] = 'NO' /[[#1],[#2],1,2]& *END *END *EJECT *. *. MAPCOR <DO-NAME> <DO-NUMBER> *. *. IF PROCESSING A 'MAP' ELEMENT, 'LEVEL' SGS MAY SPECIFY *. 'EQU' DIRECTIVES TO BE INSERTED IN THE ELEMENT. *. *DEFINE MAPCOR *IF [#1] = DOMAP AND [LEVEL] > 0 *IF [LEVEL,1] > 3 *INCREMENT CORA FROM 3 TO [LEVEL,1] BY 2 *IF [LEVEL,1,CORA,1] = [[#1],[#2],1,1] *IF [[#1],[#2],1,2] = 'NO' *SET CORE TO 1 *ELSE *SET CORE TO 2 *END *IF [LEVEL,1,CORA] = [*CORE] *IF [*CORE] = 2 AND [LEVEL,1,CORA,2] = [[#1],[#2],1,2] OR [*CORE] = 1 *SET CORC TO [*CORA]+1 [LEVEL,1,CORC,1] *INCREMENT CORB TO [LEVEL,1,1] EQU [LEVEL,1,2,CORB]/[LEVEL,1,1,CORB] *LOOP *END *END *END *LOOP *END *END *END *EJECT *. *. GET <DO-NAME> *. *. FIND ALL SGSSES OF TYPE [#1] (DOFIRST, DOPROC, DOLANG, DOMAP) *. AND PUT OUT SUITABLE CONTROL CARDS, DELETING THE SGS *. AFTERWARDS. IF THERE IS AN ALPHA SGS, PUT THINGS OUT ALPHABETICALLY. *. *DEFINE GET *INCREMENT DUMMY TO [[#1]] *CLEAR QUITI *SET D TO 1 *INCREMENT I TO [[#1]] WHILE QUITI IS CLEAR *IF [ALPHA] > 0 *IF [[#1],I,1,1] < [[#1],D,1,1] *SET D TO I *ELSE *IF [[#1],I,1,1] = [[#1],D,1,1] *IF NOT [[#1],D,1,2] = 'NO' *IF [[#1],I,1,2] = 'NO' OR [[#1],I,1,2] < [[#1],D,1,2] *SET D TO I *END *END *END *END *ELSE *SET QUITI *END *LOOP I *IF [MERGE] = 0 *EDIT ON & *IF NOT [PROCESSOR,[[#1],D,2,1],1,1] = DOC *. *. EDIT A HEADING FOR NON-DOC ELEMENTS *. #HDG,P & *IF [PROGRAM] *INCREMENT W TO [PROGRAM,1] & *INCREMENT Z TO [PROGRAM,1,W] [PROGRAM,1,W,Z]& *LOOP *LOOP *END *IF [LEVEL] LEVEL & *INCREMENT Z TO [LEVEL,1,1] [LEVEL,1,1,Z]& *IF [*Z]=1 R& *ELSE *IF [*Z] < [LEVEL,1,1] -& *END *END *LOOP *END & *PROCESS ELTNAME [#1] [*D] *EDIT OFF *ELSE *. *. FOR DOC ELEMENTS, TURN OFF HEADING *. #HDG,N *END *EDIT ON & #& *SET DOIT21 TO [[#1],D,2,1] *SET DOIT22 TO [[#1],D,2,2] *IF [PROCESSOR,DOIT21] > 3 *. FILENAME GIVEN [PROCESSOR,DOIT21,4,1]& *IF [PROCESSOR,DOIT21,4] > 1 *. QUALIFIER ALSO "[PROCESSOR,DOIT21,4,2]& *END .& *END *IF [PROCESSOR,DOIT21] > 2 *. EXPLICIT PROCESSOR NAME [PROCESSOR,DOIT21,3,1]& *IF [PROCESSOR,DOIT21,3] > 1 *. VERSION GIVEN. /[PROCESSOR,DOIT21,3,2]& *END *ELSE *. NO EXPLICIT PROCESSOR NAME. [PROCESSOR,DOIT22,1,1]& *END *. END OF PROCESSOR NAME! *CLEAR COMMA *CLEAR GOTOPTS *IF [[#1],D,3,1] = MAP OR [[#1],D,3,1] = DESCRIBE ; OR [[#1],D,3,1] = PROCESS *PROCESS USEROPTS [[#1],D,3,1] [[#1],D,3,2] *END *IF GOTOPTS IS CLEAR *. NOT FROM MAP OR DESCRIBE. DEFAULT OPTIONS. *IF [PROCESSOR,DOIT21,1,2] *IF NOT [PROCESSOR,DOIT21,1,2] = '''' *PROCESS OPTIONS [PROCESSOR,DOIT21,1,2] *END *ELSE *IF [PROCESSOR,DOIT22,1,2] *IF NOT [PROCESSOR,DOIT22,1,2] = '''' *PROCESS OPTIONS [PROCESSOR,DOIT22,1,2] *END *END *END *END *IF UOPT IS SET *PROCESS OPTIONS U *END *IF [[#1],D,3,1] = MAP AND NOT [LIST,1,1,1] = NONE *SET LISTIT *END *CLEAR LISTIT *IF [LIST,1,1,1] = ALL *SET LISTIT *ELSE *IF [LIST,1,1,1] = PCF *PROCESS LOOKFOR P [#1] *SET LISTIT TO GOTCF *ELSE *IF [LIST,1,1,1] = TCF *PROCESS LOOKFOR T [#1] *SET LISTIT TO GOTCF *ELSE *IF [LIST,1,1,1] = BOTH *PROCESS LOOKFOR P [#1] *SET LISTIT TO GOTCF *IF LISTIT IS SET *PROCESS LOOKFOR T [#1] *SET LISTIT TO GOTCF *END *ELSE *IF [LIST,1,1,1] = EITHER *PROCESS LOOKFOR P [#1] *SET LISTIT TO GOTCF *IF LISTIT IS CLEAR *PROCESS LOOKFOR T [#1] *SET LISTIT TO GOTCF *END *END *END *END *END *END *. NOW LISTIT TELLS WHETHER TO LIST. *. SET TYPE TO PROPER SUBFIELD OF PROCESSOR SGS: *. 3 = NO LISTING, 4 = SHORT LISTING, 5 = LONG LISTING. *SET TYPE TO 3 . ASSUME NO LISTING *IF LISTIT IS SET *SET TYPE TO 4 . IF LISTING, ASSUME SHORT *IF [LIST,1,1]>1 *IF [LIST,1,1,2]=LONG *SET TYPE TO 5 . SET FOR LONG *ELSE *IF [LIST,1,1,2]=NOT *SET TYPE TO 3 . SET FOR NONE *END *END *END *END *IF [PROCESSOR,DOIT21,1,TYPE] *IF NOT [PROCESSOR,DOIT21,1,TYPE] = '''' *PROCESS OPTIONS [PROCESSOR,DOIT21,1,TYPE] *END *ELSE *IF [PROCESSOR,DOIT22,1,TYPE] *IF NOT [PROCESSOR,DOIT22,1,TYPE] = '''' *PROCESS OPTIONS [PROCESSOR,DOIT22,1,TYPE] *END *END *END & *. END OF OPTION FIELD! *IF [PROCESSOR,DOIT21,2] > 1 *PROCESS SPECS [*D] [*DOIT21] [[#1],D,3,1] [#1] *ELSE *PROCESS SPECS [*D] [*DOIT22] [[#1],D,3,1] [#1] *END *EDIT OFF *. END OF PROCESSOR CARD *ELSE *. MERGE SET: PUT OUT *ELTNAME *EDIT ON & "& *PROCESS ELTNAME [#1] [*D] *EDIT OFF *END *CLEAR FOUND *IF [CORRECT] > 0 *CLEAR EXIT *INCREMENT AA TO [CORRECT] WHILE EXIT IS CLEAR *IF COLUMN SEARCH FROM CORRECT,AA,1,1 FOR [[#1],D,1,1] *IF [CORRECT,CARD,1] > 1 *IF [CORRECT,CARD,1,2] = [[#1],D,1,2] *SET FOUND *SET EXIT *ELSE *SET AA TO CARD *END *ELSE *IF [[#1],D,1,2] = 'NO' *SET FOUND *SET EXIT *ELSE *SET AA TO CARD *END *END *ELSE *SET EXIT *END *LOOP *END *IF FOUND IS SET *EDIT ON #ADD,E & *IF [CORRECT,CARD] > 3 [CORRECT,CARD,4,1]& *IF [CORRECT,CARD,4] > 1 "[CORRECT,CARD,4,2]& *END .& *END [CORRECT,CARD,3,1]& *IF [CORRECT,CARD,3] > 1 /[CORRECT,CARD,3,2] *END *ELSE *IF [APPLY,1,1,1] = BOTH *IF [[#1],D,1,2] = 'NO' *IF [UPDATE] > 0 *IF NOT [[#1],D,1,1] HAS PERM CORRECTIONS *CREATE PERM: [[#1],D,1,1] *END *CORRECT,PK [[#1],D,1,1] *PROCESS MAPCOR [#1] [*D] *END *ELSE *CORRECT [[#1],D,1,1] *PROCESS MAPCOR [#1] [*D] *END *END *ELSE *IF [UPDATE] > 0 *IF NOT [[#1],D,1,1]/[[#1],D,1,2] HAS PERM CORRECTIONS *CREATE PERM: [[#1],D,1,1]/[[#1],D,1,2] *END *CORRECT,PK [[#1],D,1,1]/[[#1],D,1,2] *PROCESS MAPCOR [#1] [*D] *END *ELSE *CORRECT [[#1],D,1,1]/[[#1],D,1,2] *PROCESS MAPCOR [#1] [*D] *END *END *END *ELSE *IF [APPLY,1,1,1] = PCF *IF [[#1],D,1,2] = 'NO' *CORRECT [[#1],D,1,1] PERM *PROCESS MAPCOR [#1] [*D] *END *ELSE *CORRECT [[#1],D,1,1]/[[#1],D,1,2] PERM *PROCESS MAPCOR [#1] [*D] *END *END *ELSE *IF [APPLY,1,1,1] = TCF *IF [[#1],D,1,2] = 'NO' *CORRECT [[#1],D,1,1] TEMP *PROCESS MAPCOR [#1] [*D] *END *ELSE *CORRECT [[#1],D,1,1]/[[#1],D,1,2] TEMP *PROCESS MAPCOR [#1] [*D] *END *END *END *END *END *END *REMOVE SGS [#1],[*D] *LOOP DUMMY *END *EJECT *. *. OPTIONS <STRING> *. *. ADDS SPECIFIED OPTIONS TO CONTROL STATEMENT. PROVIDES *. COMMA IF NEEDED. *. *DEFINE OPTIONS *IF NOT [#1] = 'NO' *IF COMMA IS CLEAR ,& *SET COMMA *END [#1]& *END *END *. *. *. USEROPTS <SGSNAME> <SGS-NUMBER> *. *. ADDS OPTIONS GIVEN ON SPECIFIED MAP, PROCESS, OR DESCRIBE SGS. *. *DEFINE USEROPTS *IF [[#1],[#2],2] > 1 *PROCESS OPTIONS [[#1],[#2],2,2] *SET GOTOPTS *END *END *EJECT *. *. LOOKFOR <P OR T> <SGS-TYPE> *. *. RETURNS WITH GOTCF SET IFF THE CURRENT ELEMENT [[#2],D,...] *. APPEARS IN THE NAMED CHANGE FILE. *. *DEFINE LOOKFOR *CLEAR GOTCF *INCREMENT I TO [[#1]] WHILE GOTCF IS CLEAR *IF COLUMN SEARCH FROM [#1],1,1,1 FOR [[#2],D,1,1] *IF [[#1],CARD] = 1 *IF [[#2],D,1,2] = 'NO' *SET GOTCF TO CARD *END *ELSE *IF [[#1],CARD,2,1] = [[#2],D,1,2] *SET GOTCF TO CARD *END *END *ELSE *SET GOTCF TO -1 *END *LOOP *IF VALUE OF GOTCF < 0 *CLEAR GOTCF *END *END *EJECT *. *. SPECS <DOIT-NUMBER> <PROCESSOR-NUMBER> <DESCRIBE OR MAP OR 0> <SGS *. *. EDIT OUT THE SPEC FIELDS ON PROCESSOR CARD. *. *DEFINE SPECS *CLEAR COMMA *INCREMENT I FROM 2 TO [PROCESSOR,[#2],2] *SET RPTNAM *IF [PROCESSOR,[#2],2,I] = SO *SET RPTNAM TO OKSO *ELSE *IF [PROCESSOR,[#2],2,I] = PO *SET RPTNAM TO 1-UOPT *END *END *IF RPTNAM IS SET *INCREMENT I TO COMMA ,& *LOOP *CLEAR COMMA *PROCESS FILENAME [PROCESSOR,[#2],2,I] .& *IF VALUE OF I = 3 AND NOT [#3] = 0 *SET SPECT TO [[#4],[#1],3,2] *IF [[#3],SPECT] > 2 *CLEAR RPTNAM [[#3],SPECT,3,1]& *IF [[#3],SPECT,3] > 1 /[[#3],SPECT,3,2]& *END *END *END *IF RPTNAM IS SET *PROCESS ELTNAME [#4] [#1] *END *END *SET COMMA TO COMMA+1 *LOOP *END *EJECT *. *. INITIALIZATION *. *CREATE SGS: DOLIST DOFIRST DOLANG DOPROC DOMAP *. *. THE 'NUMS' SGSSES ARE USED TO CREATE VARIABLES WHICH TELL *. MAINTSKEL WHERE CERTAIN STANDARD PROCESSOR SUBTYPES ARE *. LOCATED *. *CREATE SGS: NUMS PDP,PDPNO *CREATE SGS: NUMS ASMP,ASMPNO *CREATE SGS: NUMS COBP,COBPNO *CREATE SGS: NUMS FORP,FORPNO *CREATE SGS: NUMS MASMP,MASMPNO *CREATE SGS: NUMS ELT,ELTNO *CREATE SGS: NUMS MAP,MAPNO *. *. THE FOLLOWING 'PROCESSOR' SGS CARDS MUST BE ARRANGED IN ORDER *. OF ELEMENT SUBTYPE FOR 'SELECT TOC' AND OTHER FEATURES TO *. OPERATE CORRECTLY. *. *CREATE SGS: PROCESSOR PDP,'NO',N,LJ,LJ PDP,PI,PO PDP . 2 *CREATE SGS: PROCESSOR MASMP,'NO',N,SEV,LEV MASMP,PI,PO MASM . 2 *CREATE SGS: PROCESSOR ASMP,'NO',N,LJ,LJ ASMP,PI,PO PDP . 2 *SET TOCNO TO [PROCESSOR] *CREATE SGS: PROCESSOR COBP,C,N,LJ,LJ COBP,PI,PO PDP . 3 *CREATE SGS: PROCESSOR FORP,F,N,LJ,LJ FORP,PI,PO PDP . 4 *CREATE SGS: PROCESSOR SYM,'NO',N,LJ,LJ SYM,SI,SO ELT . 1-00 *SET TOCNO1 TO [PROCESSOR] *CREATE SGS: PROCESSOR ELT,'NO',N,LJ,LJ ELT,SI,SO ELT . 1-01 *IF [MASM] *CREATE SGS: PROCESSOR MASM,Q,EQ,SEQV,LEQV MASM,SI,RO,SO MASM . 1-02 *ELSE *CREATE SGS: PROCESSOR ASM,'NO',E,SJ,LJ ASM,SI,RO,SO ASM . 1-02 *END *CREATE SGS: PROCESSOR COB,'NO',N,S,L COB,SI,RO,SO COB . 1-03 *CREATE SGS: PROCESSOR FOR,'NO',N,S,L FOR,SI,RO,SO FOR . 1-04 *CREATE SGS: PROCESSOR ALG,'NO',N,S,L ALG,SI,RO,SO ALG . 1-05 *CREATE SGS: PROCESSOR MAP,'NO','NO',SJ,LJ MAP,SI,AO,SO MAP . 1-06 *CREATE SGS: PROCESSOR DOC,'NO',NT,SRD,SRD DOC,SI,SO DOC . 1-07 *CREATE SGS: PROCESSOR SEC,'NO',N,LJ,LJ SEC,SI,SO ELT . 1-10 *CREATE SGS: PROCESSOR SSG,'NO',N,LJ,LJ SSG,SI,SO ELT . 1-11 *CREATE SGS: PROCESSOR APL,'NO',N,LJ,LJ APL,SI,SO ELT . 1-12 *CREATE SGS: PROCESSOR BAS,'NO',N,LJ,LJ BAS,SI,SO ELT . 1-13 *CREATE SGS: PROCESSOR LSP,'NO',N,LJ,LJ LSP,SI,SO ELT . 1-14 *CREATE SGS: PROCESSOR PLS,'NO',N,SE,LE PLS,SI,RO,SO PLUS . 1-15 *CREATE SGS: PROCESSOR PL1,'NO',N,S,L PL1,SI,RO,SO PL1 . 1-16 *. *IF [APPLY] = 0 *CREATE SGS: APPLY BOTH *END *IF [SELECT] = 0 *CREATE SGS: SELECT EITHER *END *IF [SELECT,1,1,1] = TOC AND [TOC] = 0 #MSG,N 'SELECT TOC' REQUIRES '<FILE>./TOC' IN SPEC 2 OF @SSG CALL. #!!! *CREATE SGS: TOC DUMMY DUMMY 1,1 *END *IF [LIST] = 0 *CREATE SGS: LIST ALL,SHORT *END *IF [LANGUAGE] = 0 *CREATE SGS: LANGUAGE ASM *END *IF NOT [FIRST] *CREATE SGS: FIRST SUBTYPE DOC *END *. *EJECT *. *. SET UP BACKREF SGSSES TO FIND STANDARD PROCESSORS. *INCREMENT I TO [PROCESSOR] *CLEAR QUITI *CLEAR SAVE *IF [PROCESSOR,I] > 1 *SET I1 TO 2 *ELSE *SET I1 TO 1 *END *INCREMENT J TO [PROCESSOR] WHILE QUITI IS CLEAR *IF COLUMN SEARCH FROM PROCESSOR,J,1,1 FOR [PROCESSOR,I,I1,1] *SET SAVE TO CARD *SET J TO CARD *ELSE *SET QUITI *END *LOOP *IF SAVE IS CLEAR *SET SAVE TO -1 *ELSE *IF [PROCESSOR,SAVE] = 1 *SET SAVE TO -1 *END *END *CREATE SGS: BACKREF [*SAVE] *IF [NUMS] AND NOT VALUE OF SAVE = -1 *IF COLUMN SEARCH FROM NUMS,1,1,1 FOR [PROCESSOR,SAVE,2,1] *SET [NUMS,CARD,1,2] TO SAVE *REMOVE SGS NUMS,CARD *END *END *LOOP *IF [NUMS] #MSG,N INTERNAL ERROR - NUMS = [NUMS] *END *IF COLUMN SEARCH FROM PROCESSOR,1,1,1 FOR ELT *SET ELTNOF TO CARD *ELSE #MSG,N INTERNAL ERROR - PROCESSOR ELT SGS NOT FOUND *END *EJECT *. *IF [MERGE] = 0 *. *. SET UP FILES. *IF [SI] = 0 *CREATE SGS: SI TPF$ *END *. *PROCESS COPYNAME SI RI *PROCESS COPYNAME SI PI *. *CLEAR UOPT *IF [SO] > 0 *IF [SO,1,1,1] = 'U' *SET UOPT *END *END *IF UOPT IS SET OR [SO] = 0 *CLEAR OKSO *ELSE *SET OKSO *END *. *IF [RO] = 0 *PROCESS COPYNAME SO PO *END *PROCESS COPYNAME RO PO *IF [PO] > 0 *IF [PO,1,1,1] = 'TEMP' *REMOVE SGS PO,1 *END *END *IF [PO] = 0 #ASG,T PROCFILE$. *CREATE SGS: PO PROCFILE$ *END *. *IF OKSO IS SET *PROCESS COPYNAME SO RO *ELSE *PROCESS COPYNAME RI RO *END *PROCESS COPYNAME RO AO *EJECT *. *. MOVE ELEMENTS AS NECESSARY. *CLEAR EQUAL *PROCESS COMPNAME RI RO *IF EQUAL IS CLEAR *EDIT ON #COPY,RC & *PROCESS FILENAME RI .,& *PROCESS FILENAME RO .& *EDIT OFF *END *PROCESS COMPNAME PI PO *IF EQUAL IS CLEAR AND NOT [PO,1,1,1] = 'U' *IF [TOC] *INCREMENT A TO [TOC] *IF [TOC,A,3,1] = 2 *EDIT ON #COPY,SC & *PROCESS FILENAME PI .[TOC,A,1,1]/[TOC,1,2,1],& *PROCESS FILENAME PO .& *EDIT OFF *END *LOOP *ELSE *IF [DESCRIBE] *INCREMENT A TO [DESCRIBE] *IF [DESCRIBE,A,2,1]=ASMP OR [DESCRIBE,A,2,1]=FORP OR [DESCRIBE,A,2,1]=COBP ; OR [DESCRIBE,A,2,1]=MASMP OR [DESCRIBE,A,2,1]=PDP *EDIT ON #COPY,S & *PROCESS FILENAME PI *IF [DESCRIBE,A]>2 *SET B TO 3 *ELSE *SET B TO 1 *END .[DESCRIBE,A,B,1]& *IF [DESCRIBE,A,B]>1 /[DESCRIBE,A,B,2]& *END ,& *PROCESS FILENAME PO .& *EDIT OFF *END *LOOP *ELSE #MSG DON'T KNOW WHAT PROCS TO COPY! #!!! *END *END *END *EDIT ON & #USE ASM$PF,& *IF [PO,1,1,1] = 'U' *PROCESS FILENAME PI *ELSE *PROCESS FILENAME PO *END *EDIT OFF *EDIT ON & #USE MASM$PF,& *IF [PO,1,1,1] = 'U' *PROCESS FILENAME PI *ELSE *PROCESS FILENAME PO *END *EDIT OFF *EDIT ON & #USE COB$PF,& *IF [PO,1,1,1] = 'U' *PROCESS FILENAME PI *ELSE *PROCESS FILENAME PO *END *EDIT OFF *EDIT ON & #USE FOR$PF,& *IF [PO,1,1,1] = 'U' *PROCESS FILENAME PI *ELSE *PROCESS FILENAME PO *END *EDIT OFF *. END SETUP FOR NON-MERGE CASE. *ELSE *. SET UP CHANGE-FILE MERGING. *EDIT ON & #ELT,IQ & *IF [MERGE,1] > 1 [MERGE,1,2,1]& *IF [MERGE,1,2] > 1 "[MERGE,1,2,2]& *END .& *END [MERGE,1,1,1]& *IF [MERGE,1,1] > 1 /[MERGE,1,1,2]& *END *EDIT OFF *END *EJECT *. *. *. *. PASS 0 *INCREMENT IMAP TO [MAP] *IF NOT [MAP,IMAP,1,1] = 'NO' *IF [MAP,IMAP,1]>1 *PROCESS QUEUE [MAP,IMAP,1,1] [MAP,IMAP,1,2] MAP [*IMAP] *ELSE *PROCESS QUEUE [MAP,IMAP,1,1] 'NO' MAP [*IMAP] *END *END *LOOP *INCREMENT IPRO TO [PROCESS] *IF [PROCESS,IPRO,1] > 1 *PROCESS QUEUE [PROCESS,IPRO,1,1] [PROCESS,IPRO,1,2] PROCESS [*IPRO] *ELSE *PROCESS QUEUE [PROCESS,IPRO,1,1] 'NO' PROCESS [*IPRO] *END *LOOP *IF [SELECT,1,1,1] = TCF OR [SELECT,1,1,1] = EITHER *PROCESS FSCAN T *END *IF [SELECT,1,1,1] = PCF OR [SELECT,1,1,1] = EITHER *PROCESS FSCAN P *END *IF [SELECT,1,1,1] = DESCRIBE *INCREMENT DESNO TO [DESCRIBE] *IF [DESCRIBE,DESNO,1] > 1 *PROCESS QUEUE [DESCRIBE,DESNO,1,1] [DESCRIBE,DESNO,1,2] DESCRIBE [*DESNO] *ELSE *PROCESS QUEUE [DESCRIBE,DESNO,1,1] 'NO' DESCRIBE [*DESNO] *END *LOOP *END *IF [SELECT,1,1,1] = TOC *INCREMENT TOCNO TO [TOC] *IF [TOC,TOCNO,3,1] < 5 *IF [TOC,TOCNO,2,1] = '' '' *PROCESS QUEUE [TOC,TOCNO,1,1] 'NO' TOC [*TOCNO] *ELSE *PROCESS QUEUE [TOC,TOCNO,1,1] [TOC,TOCNO,2,1] TOC [*TOCNO] *END *END *LOOP *END *IF [SELECT,1,1,1] = BOTH *INCREMENT PNO TO [P] *CLEAR FOUND *INCREMENT TNO TO [T] WHILE FOUND IS CLEAR *IF COLUMN SEARCH FROM T,TNO,1,1 FOR [P,PNO,1,1] *IF NOT [T,CARD] = [P,PNO] *SET TNO TO CARD *ELSE *IF [T,CARD] = 1 *SET FOUND TO CARD *ELSE *IF [T,CARD,2,1] = [P,PNO,2,1] *SET FOUND TO CARD *ELSE *SET TNO TO CARD *END *END *END *ELSE *SET FOUND TO -1 *END *LOOP *IF VALUE OF FOUND > 0 *IF [P,PNO] > 1 *PROCESS QUEUE [P,PNO,1,1] [P,PNO,2,1] P [*PNO] *ELSE *PROCESS QUEUE [P,PNO,1,1] 'NO' P [*PNO] *END *END *LOOP *END *. *. END OF SELECT ! ! *. *. *EJECT *. *. BEGIN PASS 1: PROCS. *. *PROCESS GET DOFIRST *PROCESS GET DOPROC *PROCESS GET DOLANG *IF [MERGE] = 0 AND [DOMAP] > 0 *EDIT ON & #PREP & *PROCESS FILENAME RO . *END *PROCESS GET DOMAP *IF [DOPROC] > 0 OR [DOLANG] > 0 OR [DOMAP] > 0 OR [DOFIRST] > 0 #MSG,N INTERNAL ERROR:[DOPROC] DOPROCS, [DOLANG] DOLANG, ; [DOMAP] DOMAPS, [DOFIRST] DOFIRSTS *END #HDG,N