MACRO 00050002 SGIEF017 00100002 .* CHANGE LEVEL = 07/11/74 @Z30ANSF 00105003 .* = 12/01/76 @ZA15758 00106003 .* @YM04048 00110002 .*A000000-999999 Y02670 00120002 COPY SGIEF020 00150002 LCLA &I,&J,&K,&L,&GENTBI(300),&GENTBX(300) 00200002 LCLA &F,&NMTBX(300),&M,&X,&Z,&H 00250002 LCLC &XXX,&CMASK,&YYY 00300002 LCLB &B(300),&W,&T,&MASK(1917),&FLGS(3),&ALTMASK(1917) 00350003 .* @ZA15758 00360003 .* 00400002 .* GENERAL COMMENTS. 00450002 .* THIS MACRO PRODUCES THE NMTAB,GENTAB,MASKTAB,AND 00500002 .* GRPTAB SECTIONS OF EDTTAB. AT THE TOP LEVEL, 00550002 .* PROCESSING IS A SIMPLE SEQUENCE OF CLOSED SUBROUTINE 00600002 .* CALLS AS SHOWN BELOW. THE SUBROUTINE WORKINGS ARE 00650002 .* DESCRIBED AT TOP OF EACH SUBROUTINE. 00700002 .* 00750002 .* (SUBROUTINES ARE ASSIGNED MNEMONIC NAMES AS COMMENTS. THEY 00800002 .* APPEAR IN THIS LISTING IN ALPHABETIC SEQUENCE OF THESE 00850002 .* NAMES.) 00900002 .* 00950002 .*.MAIN1 01000002 ACTR 21000000 @ZA15758 01020003 .MAIN2 AGO .A100 CALL GRPTABMAKER 01100002 .MAIN3 AGO .C100 CALL GENTABMAKER 01150002 .MAIN4 AGO .D100 CALL NMTABMAKER 01200002 .MAIN5 AGO .E100 CALL MASKTABMAKER 01250002 .MAIN6 MEXIT 01300002 .********************************************************************** 01350002 .* GENTABMAKER 01400002 .********************************************************************** 01450002 .* 01500002 .* PROCEDURE - 01550002 .* 01600002 .* (GENERATE TABLE HDR) 01650002 .* DO I=1 BY 1 WHILE NMTBX(I+1) NE 0; 01700002 .* (GENERATE COMMENTARY FOR SEGMENT) 01750002 DO J=NMTBX(1) BY 1 TO NMTBX(I+1); 01800002 .* (GENERATE GENERIC ENTRY) 01850002 .* END; 01900002 .* END; 01950002 .* (TABLE CLEANUP) 02000002 .* RETURN; 02050002 .* 02100002 .********************************************************************** 02150002 .* 02200002 .* IMPLEMENTATION 02250002 .* 02300002 .C100 ANOP 02350002 TITLE 'EDTTAB - GENERIC SECTION' 02400002 GENTAB DC A(NRGENTS) HEADER 02450002 DC A(GENTLEN) SEGMENT 02500002 GENTSTRT DS 0A 02550002 **************************** BEGIN TABLE BODY *********************** 02600002 &L SETA 0 INITIALIZE ENTRY CTR 02650002 &I SETA 0 ASSIGN CLAUSE 02700002 .C101 ANOP ** DO ON NAMES ** 02750002 &I SETA &I+1 BY CLAUSE 02800002 AIF (&NMTBX(&I+1) EQ 0).C105 WHILE CLAUSE 02850002 AIF (&GPFXT(&I) GT 256).C102 02900002 &XXX SETC '&NAME(&GPFXT(&I))' 02950002 AGO .C103 03000002 .C102 AIF (&GPFXT(&I) GT 1024).C102A 03050002 &XXX SETC '&ENAME(&GPFXT(&I)-256)' 03100002 AGO .C103 03150002 .C102A ANOP 03200002 &XXX SETC '&GNAME(&GPFXT(&I)-1024)' 03250002 .C103 ANOP 03300002 *********************************************************************** 03350002 SPACE 3 03400002 *********************************************************************** 03450002 MNOTE *,' SEGMENT FOR ''&XXX'' ' 03500002 * 03550002 &J SETA &NMTBX(&I) ASSIGN CLAUSE 03600002 &K SETA &NMTBX(&I+1) (SETUP SIMPLFIES TO CLAUSE 03650002 .C104 AIF (&J EQ &K).C101 TO CLAUSE 03700002 *---------------------------------------------------------------------* 03750002 MNOTE *,' ENTRY FOR &NAME(&GENTBI(&J)) ' 03800002 * 03850002 &F SETA &GENTBI(&J) 03900002 &F SETA &TYPLIST(&F)*X'10000'+&HLFLIST(&F) 03950002 DC F'&F' INTERNAL CODE 04000002 DC A(&GENTBX(&J+1)-&GENTBX(&J)) NR OF GRPS OF THIS GENERIC. 04050002 &F SETA &GENTBX(&J)-1 04100002 DC A(&F*GRPTLEN+GRPTSTRT) PTR TO FIRST GRP PTR 04150002 &L SETA &L+1 BUMP ENTRY CTR 04200002 &J SETA &J+1 BY CLAUSE 04250002 AGO .C104 04300002 .C105 ANOP 04350002 NRGENTS EQU &L 04400002 GENTLEN EQU (*-GENTSTRT)/NRGENTS 04450002 ****************************** END OF TABLE ************************ 04500002 AGO .MAIN4 04550002 .********************************************************************** 04600002 .* GRPTABMAKER 04650002 .********************************************************************** 04700002 .* 04750002 .* COMMENT - 04800002 .* 04850002 .* THIS ROUTINE BUILDS THE GRPTAB SECTION OF EDTTAB. IN 04900002 .* VARIABLES VX-VY ARE STORED THE (X,Y) COORDINATES OF ONE 04950002 .* VALUES IN A GROUP-TO-NAME INCIDENCE MATRIX HAVING A COLUMN 05000002 .* FOR EVERY NAME THAT WILL APPEAR IN NAMTAB. (THE MATRIX 05050002 .* EXISTS PHYSICALLY ONLY IN(X,Y) COORDINATE FORM). GRPTAB 05100002 .* MUST CONTAIN EXACTLY ONE ENTRY FOR EACH OF THE COORDINATE 05150002 .* PAIRS. HOWEVER, BOTH ROWS AND COLUMNS MUST BE PERMUTED SO 05200002 .* THAT BOTH APPEAR IN GENERIC-PRECEDENCE ORDER. 05250002 .* 05300002 .* GPFXT CONTAINS THE CORRECT SEQUENCE OF Y-VALUES DESIRED, 05350002 .* GXT CONTAINS THE SEQUENCE OF X-VALUES DESIRED. 05400002 .* 05450002 .* 05500002 .* 05550002 .* 05600002 .* 05650002 .* 05700002 .* 05750002 .* COLUMNS ARE SELECTED BY LOOPING ON GPFXT. THE COLUMN IS 05800002 .* CONSTRUCTED IN'MASK'USING X,Y VALUES WHERE Y EQUALS THE 05850002 .* INDEX CURRENTLY IN GPFXT; THEN; TABLE ENTRIES ARE GENERATED 05900002 .* FOR EACH ONE-BIT IN'MASK', USING GXT FOR ORDER OF SELECTION. 05950002 .* 06000002 .* AS EACH COLUMN IS SELECTED, A COMMENT IS GENERATED WITH 06050002 .* THE UNITNAME ASSOCIATED WITH THE COLUMN. 06100002 .* 06150002 .* AS GROUP ENTRIES ARE GENERATED, THEIR GENERIC-ASSOCIATION 06200002 .* IS CHECKED USING 'GGXREF'. EACH TIME A NEW GENERIC IS 06250002 .* RECOGNIZED, A COMMENT IS GENERATED. 06300002 .* 06350002 .* WHILE THE TABLE IS BEING CONSTRUCTED, INDEX VALUES ARE SAVED 06400002 .* IN 'NMTBX','GENTBX', AND 'GENTBI' WHICH WILL BECOME THE 06450002 .* POINTER ENTRIES IN GENTAB AND NAMTAB WHEN THEY ARE GENERATED 06500002 .* BY LATER ROUTINES. 06550002 .* NOTE:Y-VALUES IN THE RANGE 513-767 06600002 .* 06650002 .* 06700002 .* SIGNIFY THAT THE X-VALUES ARE TO BE 06750002 .* ASSOCIATED WITH THE Y-VALUES LESS 512. 06800002 .* THESE ARE GROUPS ELIGIBLE FOR GENERIC 06850002 .* UNITNAMES WHICH ACTUALLY BELONG TO 06900002 .* OTHER GENERIC UNITNAMES. 06950002 .* 07000002 .* Y-VALUES GREATER THAN 1024 SIGNIFY 07050002 .* GENERATED-GENERIC NAMES, THOSE IN THE 07100002 .* RANGE 257-511 SIGNIFY ESOTERIC NAMES. 07150002 .* 07200002 .********************************************************************** 07250002 .* 07300002 .* 07350002 .* PROCEDURE - 07400002 .* 07450002 .* (GENERATE TITLE AND HEADER FIELDS 07500002 .* K=1 07550002 .* L=0 07600002 .* DO I=1 BY 1 WHILE GPFXT(I) NE 0; 07650002 .* NMTBX(I) = K; 07700002 .* DO J=1 BY 1 WHILE VY(J) NE 0 WHERE VY(J) EQ GPFXT(I); 07750002 .* MASK(VX(J)) = 1; 07800002 .* END; 07850002 .* DO J=1 BY 1 WHILE GXT(J) NE 0 WHERE MASK(GXT(J)) EQ 1; 07900002 .* MASK(GXT(J))=0; 07950002 .* L=L+1 08000002 .* IF GENTBI(K) NE GGXREF(GXT(J)); 08050002 .* IF L GT 1; 08100002 .* K=K+1; 08150002 .* GENTBI(K)=GGXREF(GXT(J)); 08200002 .* GENTBX(K)=L; 08250002 .* (GENERATE MNOTE WITH GENERIC ID OF NEXT SECTION 08300002 .* (GENERATE GROUP ENTRY) 08350002 .* END; 08400002 .* END; 08450002 .* (GENERATE TABLE CLEANUP) 08500002 .* RETURN; 08550002 .* 08600002 .* 08650002 .********************************************************************** 08700002 .* 08750002 .* IMPLEMENTATION - 08800002 .* 08850002 .A100 ANOP 08900002 TITLE 'EDTTAB - GROUP POINTER SECTION' 08950002 GRPTAB DC A(GRPTENT) 09000002 DC A(GRPTLEN) 09050002 GRPTSTRT DS 0F 09100002 &K SETA 1 GRPTABMAKER INITIALIZATION 09150002 &L SETA 0 09200002 .********************************** START OUTER DO ****************** 09250002 &I SETA 0 INITIALIZATION 09300002 .A101 ANOP BRANCH POINT 09350002 &I SETA &I+1 BY CLAUSE 09400002 AIF (&GPFXT(&I) EQ 0).A900 WHILE CLAUSE 09450002 AIF (&GPFXT(&I) LT 256).A102 CHOOSE NAME FROM 09500002 AIF (&GPFXT(&I) LT 1024).A103 PROPER ARRAY -- 09550002 &XXX SETC '&GNAME(&GPFXT(&I)-1024)' * GENERATED GENERIC 09600002 AGO .A104 09650002 .A102 ANOP 09700002 &XXX SETC '&NAME(&GPFXT(&I))' * GENERIC 09750002 AGO .A104 09800002 .A103 ANOP 09850002 &XXX SETC '&ENAME(&GPFXT(&I)-256)' * ESOTERIC 09900002 .A104 ANOP 09950002 *********************************************************************** 10000002 SPACE 3 10050002 *********************************************************************** 10100002 * 10150002 MNOTE *,' BEGIN SECTION FOR UNITNAME ''&XXX'' ' 10200002 &NMTBX(&I) SETA &K+1 (SAVE FOR NMTAB ENTRY) 10250002 .*************************** START FIRST INNER DO ******************* 10300002 &J SETA 0 10350002 .A201A ANOP 10400002 &J SETA &J+1 10450002 AIF (&VY(&J) EQ 0).A200 WHILE CALUSE -WHERE ON NXT LINE. 10500002 AIF (&VY(&J) NE &GPFXT(&I) AND &VY(&J)-512 NE &GPFXT(&I)).A2*10550002 01A 10600002 &MASK(&VX(&J)) SETB 1 (MARK THIS GROUP INCLUDED) 10650002 AGO .A201A ** BOTTOM OF DO ** 10700002 .A200 ANOP 10750002 .*************************** START SECOND INNER DO ****************** 10800002 &T SETB 1 SIGNAL NEW NAME START 10850002 &J SETA 0 10900002 .A201 ANOP 10950002 &J SETA &J+1 BY CAUSE 11000002 AIF (&GXT(&J) EQ 0).A101 WHILE CLAUSE 11050002 AIF (NOT &MASK(&GXT(&J))).A201 WHERE CLAUSE 11100002 &MASK(&GXT(&J)) SETB 0 (CLEAN OUT MASK FOR NXT I-VALUE USE) 11150002 &L SETA &L+1 (BUMP GRPTAB ENTRY COUNTER 11200002 AIF (&T).A2AAA (NEW GRP IF NEW NAME) 11250002 AIF (&GENTBI(&K) EQ &GGXREF(&GXT(&J))).A203 (Q.)SAME GENERIC 11300002 .A2AAA ANOP 11350002 &T SETB 0 CLEAR NEW NAME SWITCH 11400002 AIF (&L EQ 1).A202 11450002 &K SETA &K+1 (BUMP GENTAB ENTRY COUNTER) 11500002 .A202 ANOP 11550002 &GENTBI(&K) SETA &GGXREF(&GXT(&J)) (SAVE GENERIC ID FOR GENTAB) 11600002 &GENTBX(&K) SETA &L (SAVE PTR FOR GENTAB) 11650002 *---------------------------------------------------------------------* 11700002 * 11750002 MNOTE *,' SEGMENT FOR GENERIC &NAME(&GGXREF(&GXT(&J))) FOLLOWS' 11800002 * 11850002 .A203 ANOP 11900002 MNOTE *,'........ GROUP &J ENTRY ............................' 11950002 DC A(&J*GDTLEN-GDTLEN+GDTSTRT) 12000002 AGO .A201 12050002 .********************************** END INNER DO ******************** 12100002 .********************************** END OUTER DO 12150002 .* 12200002 .* CLEANUP FOR GRPTAB 12250002 .* 12300002 .A900 ANOP 12350002 GRPTENT EQU &L 12400002 GRPTLEN EQU (*-GRPTSTRT)/GRPTENT 12450002 &K SETA &K+1 12500002 &L SETA &L+1 12550002 &GENTBX(&K) SETA &L 12600002 &NMTBX(&I) SETA &K 12650002 &NMTBX(1) SETA &NMTBX(1)-1 FIX FIRST ENTRY 12700002 ************************************ END OF GROUP TABLE ************** 12750002 AGO .MAIN3 12800002 .********************************************************************** 12850002 .* MASKTABMAKER 12900002 .********************************************************************** 12950002 .* 13000002 .* COMMENT - 13050002 .* 13100002 .* THIS ROUTINE PRODUCES THE MASKTAB SECTION OF EDTTAB. 13150002 .* PROCESSING IS SIMILAR TO THAT IN GRPTABMAKER (WHICH SEE). 13200002 .* ESSENTIALLY, THE PROCESSING CONSISTS OF GENERATING THE 13250002 .* BIT MATRIX VERSION OF THE GROUP-TO-NAME INCIDENCE MATRIX 13300002 .* STORED IN VX-VY. 13350002 .* 13400002 .* WHEREAS GRPTABMAKER GENERATES A TABLE ENTRY FOR EACH 13450002 .* ONE-VALUE, THIS ROUTINE GENERATES A TABLE ENTRY FOR EACH 13500002 .* COLUMN. THE ENTRY CONSISTS OF A BIT STRING REPRESENTATION 13550002 .* OF THE COLUMN. IN ADDITION, SPECIAL ENTRIES ARE FORMED 13600002 .* FOR GENERICS WHICH ALLOW SUBSTITUTION OF OTHER GENERICS. 13650002 .* THESE ARE REPRESENTATIONS OF THE GROUP INCIDENCE WITH 13700002 .* RESPECT TO ONLY THE NATIVE GENERIC. 13750002 .* 13800002 .* ROW-COLUMN PERMUTATION IS PERFORMED AS IN GRPTABMAKER. 13850002 .********************************************************************** 13900002 .* 13950002 .* 14000002 .* PROCEDURE - 14050002 .* 14100002 .* (GENERATE TABLE TOP) 14150002 .* DO I=1 BY 1 WHILE GPFXT(I) NE 0; 14200002 .* DO J=1 BY 1 WHILE VY(J) NE 0 WHERE VY(J) EQ (EITHER 14250002 .* GPFXT(I) OR SAME+512) 14300002 .* IF GPFXT(I)+512 EQ VY(J); 14350002 .* ALTMASK(VX(J)) = 1; 14400002 .* B(I) = 1; 14450002 .* MASK(VX(J)) = 1; 14500002 .* T= B(I); 14550002 .* END; 14600002 .* (GENERATE COMMENTARY) 14650002 .* A: (GENERATE SYMBOL FIELD FOR TABLE ENTRY) 14700002 .* CMASK = NULL; 14750002 .* DO J=1 BY 48 WHILE GXT(J) NE 0; 14800002 .* DO K=J BY 1 TO J+47 WHILE GXT(K) NE 0; 14850002 .* IF NOT T; 14900002 .* CMASK = CMASK (CATENATED TO MASK(GXT(K))); 14950002 .* MASK(GXT(K)) = 0; 15000002 .* ELSE 15050002 .* CMASK = CMASK (CATENATED TO MASK(GXT(K)) AND 15100002 .* NOT ALTMASK(GXT(K)) ) ; 15150002 .* ALTMASK(GXT(K)) = 0; 15200002 .* END; 15250002 .* (GENERATE MASK SEGMENT FROM CMASK) 15300002 .* END; 15350002 .* IF T; 15400002 .* T=O; GOTO A; 15450002 .* END; 15500002 .* (TABLE CLEANUP) 15550002 .* 15600002 .********************************************************************** 15650002 .* 15700002 .* IMPLEMENTATION - 15750002 .* 15800002 .E100 ANOP 15850002 TITLE 'EDTTAB - NAME GROUPMASK SECTION ' 15900002 * 15950002 * THIS SECTION CONTAINS A MASK FOR EVERY UNITNAME IN SYSTEM 16000002 * PLUS ALTERNATE MASKS FOR ANY GENERICS ELIGIBLE FOR OTHER THAN 16050002 * THEIR NATIVE TYPE. EACH MASK CONTAINS A BIT POSITION FOR EVERY 16100002 * DEVICE-GROUP IN THE SYSTEM. 16150002 * BIT=1 - GROUP IS ELIGIBLE FOR THE NAME 16200002 * 16250002 * O - GROUP IS NOT ELIGIBLE 16300002 * NOTE: 16350002 * ALTERNATE MASKS DESCRIBE ONLY THE NATIVE UNITS. 16400002 * 16450002 * THE INDEX OF A BIT POSITION (LEFT 1-ORIGIN) IS THE 16500002 * SAME AS GROUP ID ASSIGNED TO THE ASSOCIATED GROUP IN 16550002 * THE GROUP DESCRIPTOR SECTION OF EDTTAB 16600002 * 16650002 *********************************************************************** 16700002 MASKTAB DC A(MASKENT) HEADER 16750002 DC A(MSKSIZE) SEGMENT 16800002 MSKTSTRT DS 0A 16850002 **************************** BEGIN TABLE BODY *********************** 16900002 * 16950002 *********************************************************************** 17000002 &M SETA 0 INIT FOR TABLE ENTRY COUNTER 17050002 &I SETA 0 ASSIGN CLAUSE FOR OUTER DO 17100002 .E101 ANOP TOP OF DO 17150002 &I SETA &I+1 BY CLAUSE 17200002 AIF (&GPFXT(&I) EQ 0).E307 WHILE CLAUSE 17250002 &B(&I) SETB 0 (CLEAR ALTERNATE MASK SWITCH) 17300002 &J SETA 0 ASSIGN CLAUSE, 1'ST INNER DO 17350002 .E201 ANOP TOP OF DO 17400002 &J SETA &J+1 BY CLAUSE 17450002 AIF (&VY(&J) EQ 0).E203 WHILE CAUSE 17500002 AIF (&VY(&J) EQ &GPFXT(&I)).E202 WHERE CLAUSE 17550002 AIF (&VY(&J) NE &GPFXT(&I)+512).E201 WHERE CLAUSE 17600002 &B(&I) SETB 1 FLAG FOR ALTERNATE MASK 17650002 &ALTMASK(&VX(&J)) SETB 1 * * 17700002 .E202 ANOP * MARK APPROPRIATE MASK * 17750002 &MASK(&VX(&J)) SETB 1 * * 17800002 AGO .E201 END DO 17850002 .E203 ANOP 17900002 &T SETB (&B(&I)) 17950002 AIF (&GPFXT(&I) LT 256).E300A 18000002 AIF (&GPFXT(&I) LT 1024).E300B 18050002 &XXX SETC '&GNAME(&GPFXT(&I)-1024)' 18100002 AGO .E300C 18150002 .E300A ANOP 18200002 &XXX SETC '&NAME(&GPFXT(&I))' 18250002 AGO .E300C 18300002 .E300B ANOP 18350002 &XXX SETC '&ENAME(&GPFXT(&I)-256)' 18400002 .E300C ANOP 18450002 * 18500002 MNOTE *,' MASK(S) FOR ''&XXX'' (IF 2 MASKS,FIRST IS ALTERNATE)' 18550002 * 18600002 .E300 ANOP 18650002 &M SETA &M+1 COUNT ENTRIES 18700002 &L SETA &GPFXT(&I)+&T*512 18750002 M&L DS 0C 18800002 &CMASK SETC '' 18850002 &J SETA 1-48 18900002 .E301 ANOP 18950002 &J SETA &J+48 19000002 AIF (&GXT(&J) EQ 0).E305 WHILE CLAUSE 19050002 &K SETA &J-1 19100002 .E302 ANOP 19150002 &K SETA &K+1 19200002 AIF (&GXT(&K) EQ 0).E304 WHILE CLAUSE 19250002 AIF (&K GT &J+47).E304 TO CLAUSE 19300002 AIF (&T).E303 19350002 &CMASK SETC '&CMASK'.'&MASK(&GXT(&K))' 19400002 &MASK(&GXT(&K)) SETB 0 (CLEAN UP FOR NEXT USAGE) 19450002 AGO .E302 19500002 .E303 ANOP 19550002 &W SETB (&MASK(&GXT(&K)) AND NOT &ALTMASK(&GXT(&K))) 19600002 &CMASK SETC '&CMASK'.'&W' 19650002 &ALTMASK(&GXT(&K)) SETB 0 (CLEAN UP FOR NEXT USAGE) 19700002 AGO .E302 19750002 .E304 ANOP 19800002 &L SETA K'&CMASK 19850002 DC BL.&L'&CMASK' 19900002 &CMASK SETC '' 19950002 AGO .E301 20000002 .E305 AIF (NOT &T).E306 (IF WE JUST DID ALTERNATE MASK) 20050002 &T SETB 0 (THEN REPEAT WHOLE MASK BUILD ) 20100002 AGO .E300 (WITH MAIN MASK. ) 20150002 .E306 AGO .E101 ELSE PROCESS NEXT NAME. 20200002 .E307 ANOP 20250002 .* 20300002 .* TABLE CLEANUP 20350002 .* 20400002 MASKENT EQU &M 20450002 MSKSIZE EQU (*-MSKTSTRT)/MASKENT 20500002 .* 20550002 **************************** END OF MASK TABLE ********************** 20600002 AGO .MAIN6 20650002 .*************************** END MASKTABMAKER *********************** 20700002 .********************************************************************** 20750002 .* NMTABMAKER 20800002 .********************************************************************** 20850002 .* 20900002 .* PROCEDURE - 20950002 .* 21000002 .* (GENERATE TABLE HDR) 21050002 .* DO I=1 BY 1 WHILE NMTBX(I+1) NE 0; 21100002 .* (GENERATE TABLE ENTRY) 21150002 .* END; 21200002 .* (TABLE CLEANUP) 21250002 .* RETURN; 21300002 .* 21350002 .********************************************************************** 21400002 .* 21450002 .* IMPLEMENTATION - 21500002 .* 21550002 .* 21600002 .D100 ANOP 21650002 TITLE 'EDTTAB - NAME LOOKUP SECTION' 21700002 NMTAB DC A(NRNAMES) HEADER 21750002 DC A(NMTBLEN) SEGMENT 21800002 ************************************** BEGIN TABLE BODY ************* 21850002 NMTBSTRT DS 0A 21900002 &I SETA 0 ASSIGN CLAUSE 21950002 .D101 ANOP 22000002 &I SETA &I+1 BY CLAUSE 22050002 AIF (&NMTBX(&I+1) EQ 0).D103 WHILE CLAUSE 22100002 *---------------------------------------------------------------------* 22150002 AGO .M100 CALL NMENTRYGENERATOR 22200002 .D102 AGO .D101 LOOP 22250002 .D103 ANOP 22300002 NRNAMES EQU &I-1 22350002 NMTBLEN EQU (*-NMTBSTRT)/NRNAMES 22400002 ****************************** END OF TABLE *********************** 22450002 AGO .MAIN5 22500002 .********************************************************************** 22550002 .* NMENTRYGENERATOR 22600002 .********************************************************************** 22650002 .* 22700002 .* COMMENT - 22750002 .* 22800002 .* THIS SUBRTN PRODUCES ONE ENTRY FOR NMTAB, AS FOLLOWS: 22850002 .* 22900002 .* NAME FIELD - RETRIEVED FROM NAME IF GENERIC, 22950002 .* FROM ENAME IF ESOTERIC,FROM GNAME IF GEN'ED GENRIC 23000002 .* CODE FIELD - IF GENERIC, FROM TYPLIST/HLFLIST PAIR. 23050002 .* IF ESOTERIC, THE LEFT HALF IS THE ENAME INDEX, 23100002 .* WHILE THE RIGHT HALF IS THE LOGICAL OR OF 23150002 .* HLFLIST VALUES OF ALL GENERIC TYPES IN THE NAME, 23200002 .* WITH LEAST SIGNIFICANT BYTE SET TO ZERO. 23250002 .* 23300002 .* THE OR OPERATION IS DONE IN THE LOOP AT .M103 23350002 .* THIS DO USES THE GROUP MASK FOR THE NAME TO 23400002 .* FIND WHICH DEVICE GROUPS ARE REPRESENTED, THEN 23450002 .* ALL REPRESENTED GROUPS ARE LOOKED UP IN GGXREF TO 23500002 .* FIND THE GENERIC ID, WHICH FINALLY LOCATES THE 23550002 .* HLFLIST VALUE. 23600002 .* 23650002 .* GENT PTR FLD - PRODUCED FROM NMTBX VALUES 23700002 .* NR OF TYPES - DITTO 23750002 .* FLAGS FIELD - PRODUCED FROM VAM, ALT, &MLT VARIABLES. 23800002 .* MASK PTRS - COMPUTED FROM NAME CODES 23850002 .* 23900002 .* 23950002 .* 24000002 .********************************************************************** 24050002 .* 24100002 .* PROCEDURE - 24150002 .* 24200002 .* (OMITTED FOR THIS ROUTINE BECAUSE CONTROL LOGIC IS 24250002 .* VERY SIMPLE. THE COMPUTATIONS ARE FAIRLY COMPLEX, 24300002 .* BUT CAN BE FOLLOWED FROM THE EXPLANATION ABOVE.) 24350002 .* 24400002 .********************************************************************** 24450002 .* IF NAME IS GEN'ED GENERIC RETRIEVE CODE FROM 24500002 .* GKLIST. 24550002 .* 24600002 .* 24650002 .* IMPLEMENTATION - 24700002 .* 24750002 .M100 ANOP 24800002 &H SETA &GPFXT(&I) 24850002 &FLGS(1) SETB (&VAM(&I)) 24900002 &FLGS(2) SETB (&ALT(&I)) 24950002 &FLGS(3) SETB (&MLT(&I)) 25000002 .* 25050002 .* FIND OUT WHICH CLASS OF ENTRY THIS IS AND 25100002 .* PLACE NAME IN XXX 25150002 .* PLACE UNTERNAL CODE IN M 25200002 .* 25250002 AIF (&H GT 256).M102 25300002 .* 25350002 .* ORDINARY GENERIC ENTRY PROCESSING. (CODES 1-255) 25400002 .* 25450002 &XXX SETC '&NAME(&H)' 25500002 &M SETA &TYPLIST(&H)*X'10000'+&HLFLIST(&H) 25550002 AGO .M109 25600002 .M102 AIF (&H GT 512).M105 25650002 .* 25700002 .* ESOTERIC NAME ENTRY PROCESSING. (CODES 257-511) 25750002 .* 25800002 &XXX SETC '&ENAME(&GPFXT(&I)-256)' 25850002 &M SETA 0 25900002 &J SETA 0 25950002 .M103 ANOP 26000002 &J SETA &J+1 26050002 AIF (&VY(&J) EQ 0).M104 26100002 AIF (&VY(&J) NE &H).M103 26150002 .* 26200002 .* NOTE 26250002 .* 26300002 .* HLFLIST CONTAINS THE LOW HALFWORD OF A GENERIC TYPE'S 26350002 .* INTERNAL CODE. THE FIRST BYTE OF THIS HALFWORD HAS ONLY 26400002 .* ONE BIT SET. THE FOLLOWING 3 INSTRUCTIONS 'OR' TOGETHER 26450002 .* THESE BIT SETTINGS FOR ALL GENERIC TYPES ASSOCIATED WITH 26500002 .* THIS ESOTERIC ENTRY. FIRST THE DESIRED BIT IS PLACED IN X. 26550002 .* THEN,THAT POSITION OF THE ACCUMULATOR (M), IS PLACED IN THE 26600002 .* LOW BIT POSITION OF Z. FINALLY, THE X-VALUE IS ADDED TO M 26650002 .* IF THE BIT POSITION IS NOT ALREADY SET (AS INDICATED BY Z). 26700002 .* (THE INNERMOST EXPRESSION EVALUATES TO 1 IF THE BIT WAS 26750002 .* ALREADY SET, 0 IF NOT. THUS, THE WHOLE EXPRESSION IS 26800002 .* M+X-X OR M+X-0 ). 26850002 .* 26900002 &X SETA &HLFLIST(&GGXREF(&VX(&J)))/X'0100'*X'100' 26950002 &Z SETA &M/&X (X IS AN EXACT POWER OF 2, ONLY ONE BIT ON) 27000002 &M SETA &M+(&X-(&Z-&Z/2*2)*&X) (LOGICAL SUM ALL COMPONENT CODES) 27050002 AGO .M103 27100002 .M104 ANOP 27150002 &M SETA (&H-256)*X'10000'+&M 27200002 AGO .M109 27250002 .* 27300002 .* GENERATED-GENERIC PROCESSING. (CODES 1025-1279) 27350002 .* 27400002 .M105 ANOP 27450002 &XXX SETC '&GNAME(&H-1024)' 27500002 &M SETA &GKLIST(&H-1024) 27550002 AGO .M109 27600002 .* 27650002 .* FINALLY,PRODUCE THE ENTRY DATA FOR THIS NAME ENTRY 27700002 .* 27750002 .M109 ANOP 27800002 DC CL8'&XXX' LOOKUP NAME FOR THIS ENTRY 27850002 DC F'&M' INTERNAL CODE FOR THIS ENTRY 27900002 DC A(M&H) MAIN MASK 27920002 &M SETA (&NMTBX(&I+1)-&NMTBX(&I)) 27950002 DC F'&M' NR OF GENERICS INCLUDED UNDER THIS NAME 28000002 &M SETA (&NMTBX(&I)-1) 28050002 DC A(GENTSTRT+GENTLEN*&M) PTR TO 1'ST REL. ENTRY IN GENTAB 28100002 &YYY SETC '&FLGS(1)'.'&FLGS(2)'.'&FLGS(3)' 28110002 &M SETA K'&YYY 28120002 DC BL.&M'&YYY' FLAG SETTINGS 28130002 DS 0F PAD OUT TO WORD BOUNDARY 28140002 AIF (NOT &FLGS(2)).M110 28150002 &M SETA &H+512 28200002 DC A(M&M) ALTERNATE 28300002 AGO .M111 28350002 .M110 ANOP 28400002 DC A(0) NO ALTERNATE FOR THIS ENTRY 28500002 .M111 ANOP 28550002 AGO .D102 RETURN TO MAIN LOOP FOR NXT ENTRY 28800002 .* 28850002 MEND 28900002