*/* 00400003 MACRO 00800020 &NAME IKJEBESV ®,&CODE,&ID,&CODEREG=YES,&COMMREG=(1) 01600020 .*C104000 YM2624 01650001 .*A716000,946000-995000 @Y30NQKC 01850003 .*D136000-472000,112000-120000 @Y30NQKC 02050003 .* 02400020 .* THIS MACRO IS USED BY ALL EDIT SUBCOMMANDS AND SERVICE ROUTINES 03200020 .* TO CONTROL PROLOG CODE GENERATED. THE BASIC SECTION OF THIS 04000020 .* MACRO IS THE OS/360 SAVE MACRO INSTRUCTION. IN ADDITION, THIS 04800020 .* MACRO WILL GENERATE A BALR AND USING ON REGISTER 11 AND WILL 05600020 .* CROSS CHAIN SAVE AREAS. 06400020 .* 08000020 LCLA &A,&B,&C 08800020 LCLC &E,&F,&G,&H 09600020 AIF ('®' EQ '').E1 YM2624 10400001 &A SETA ((K'&ID+2)/2)*2+4 12800020 .CONTA AIF (T'®(1) NE 'N').E3 48000020 AIF ('&CODE' EQ 'T').CONTC 48800020 AIF ('&CODE' NE '').E2 49600020 &A SETA ®(1)*4+20 50400020 AIF (&A LE 75).CONTD 51200020 &A SETA &A-64 52000020 .CONTD AIF (N'® NE 2).CONTE 52800020 STM ®(1),®(2),&A.(13) SAVE REGISTERS. 53600020 AGO .BASE 54400020 .CONTE AIF (N'® NE 1).E3 55200020 ST ®(1),&A.(0,13) SAVE REGISTER. 56000020 AGO .BASE 56800020 .CONTC AIF (®(1) GE 14 OR ®(1) LE 2).CONTF 57600020 STM 14,15,12(13) SAVE REGISTERS. 58400020 &A SETA ®(1)*4+20 59200020 AIF (N'® NE 2).CONTG 60000020 STM ®(1),®(2),&A.(13) SAVE REGISTERS. 60800020 AGO .BASE 61600020 .CONTG AIF (N'® NE 1).E3 62400020 ST ®(1),&A.(0,13) SAVE REGISTER. 63200020 AGO .BASE 64000020 .CONTF AIF (N'® NE 2).CONTH 64800020 STM 14,®(2),12(13) SAVE REGISTERS. 65600020 AGO .BASE 66400020 .CONTH AIF (N'® NE 1).E3 67200020 STM 14,®(1),12(13) SAVE REGISTERS. 68000020 .BASE ANOP 68800020 AIF ('&CODEREG' EQ 'NO').SKPBASE 69600020 BALR BASEREG,0 - ESTABLISH ADDRESSABILITY FOR THIS 70400020 USING *,BASEREG - ROUTINE. 71200020 MODID BRANCH=YES @Y30NQKC 71600003 .SKPBASE ANOP 72000020 AIF ('&COMMREG' NE '(1)').COMM1 72800020 LR COMMREG,1 - INITIALIZE COMMUNICATION AREA 73600020 * POINTER. 74400020 AGO .COMM3 75200020 .COMM1 AIF ('&COMMREG'(1,1) NE '(').COMM2 76000020 LR COMMREG,&COMMREG INITIALIZE COMMUNICATION AREA 76800020 * POINTER. 77600020 AGO .COMM3 78400020 .COMM2 ANOP 79200020 AIF ('&COMMREG' EQ 'NO').COMM3 80000020 L COMMREG,&COMMREG INITIALIZE COMMUNICATION AREA 80800020 * POINTER. 81600020 .COMM3 ANOP 82400020 L 15,(CANXTSVA-IKJEBECA)(COMMREG) ADDRESS OF NEXT 83200020 * AVAILABLE SAVE AREA. 84000020 ST 13,4(,15) - CROSS CHAIN PREVIOUS AND CURRENT 84800020 ST 15,8(,13) - SAVE AREAS. 85600020 LR 13,15 - INITIALIZE SAVE AREA POINTER. 86400020 LA 15,72(,13) - OBTAIN ADDRESS OF NEXT SAVE AREA 87200020 ST 15,(CANXTSVA-IKJEBECA)(COMMREG) AND SAVE. 88000020 MEXIT 88800020 .E1 MNOTE 12,'REGISTER PARAMETER NOT SPECIFIED.' 89600020 MEXIT 90400020 .E2 MNOTE 12,'INVALID CODE SPECIFIED.' 91200020 MEXIT 92000020 .E3 MNOTE 12,'INVALID REGISTER SPECIFICATION.' 92800020 MEXIT 93600020 MEND 94400020 **/ 94430003 *% IKJEBESV: MACRO KEYS( 94440003 * DATAREG, /* IS THE BASEREG DECLARED AND 94450003 * RESTRICTED BY CODED AND USED 94460003 * TO ADDRESS CASCWKA */ 94470003 * OPTIONS, /* OPTIONS FOR PLS PROC STMT */ 94480003 * CODEREG, /* CONTROLS CODEREG OR NOCODE- 94490003 * REG ON THE PROC STMT. */ 94500003 * COMMREG, /* IDENTIFIES THE REGISTER 94510003 * POINTING TO IKJEBECA ON 94520003 * ENTRY TO THE MODULE. */ 94530003 * GEN /* CONTROLS PROC AND ENTRY 94540003 * CODE GENERATION. */ 94550003 * ); 94560003 * 94570003 * /* ALABEL LABEL ON THIS MACRO INVOCA- 94580003 * TION USED AS THE PROC NAME */ 94590003 * 94600003 * DECLARE 94610003 * EBESVGEN CHAR EXT, /* CNTL AMNT GENERATED */ 94620003 * ALINE CHAR, /* A LINE OF TEXT FOR DOC */ 94630003 * PLSAUTODATA CHAR, /* FOR PLS PROC OPTION ... */ 94640003 * /* ... AUTODATA */ 94650003 * WORKAREA CHAR, /* AREA FOR AUTOMATIC DATA */ 94660003 * PROCOPTN CHAR, /* OPTIONS FOR PLS PROC STMT */ 94670003 * EHAREGS CHAR EXT, /* DECLARE REGS BY EPILOG */ 94680003 * EHAUNIQUE CHAR EXT, /* EDIT DECLARES */ 94690003 * J FIXED, /* WORK VARIABLE */ 94700003 * DOCCOMCOLALT FIXED EXT, /* ALTERNAT DOCCOMCOL */ 94710003 * DOCCOMCOL FIXED EXT; /* COMMENT COL FOR ANSTEXT */ 94720003 * 94730003 * IF DOCCOMCOL ^> 0 /* COMMENT COL NOT SET */ 94740003 * THEN /* YES-COMMENT SET FOR LEFT */ 94750003 * DOCCOMCOL = 38; /* SET DEFAULT TO RIGHT SIDE */ 94760003 * 94770003 * IF MACLABEL ^= '' 94780003 * THEN DO; 94790003 * TYPE = MACLABEL(LENGTH(MACLABEL)-3: 94800003 * LENGTH(MACLABEL)-1); 94810003 * WORKAREA = 'CASCWKA'; 94820003 * 94830003 * IF TYPE = 'ELE' 94840003 * THEN WORKAREA = 'CASRWKA'; 94850003 * 94860003 * IF TYPE = 'EPE' 94870003 * THEN WORKAREA = 'CASRWKA'; 94880003 * 94890003 * IF TYPE = 'PE1' 94900003 * THEN WORKAREA = 'CASRWKA'; 94910003 * END; 94920003 * 94930003 * 94940003 * IF EBESVGEN = '' /* FIRST TIME THRU */ 94950003 * THEN /* YES */ 94960003 * IF GEN(1) = 'ALL' /* WANT TO GEN ALL */ 94970003 * THEN /* YES */ 94980003 * EBESVGEN = 'ALL'; /* THEN SAY SO */ 94990003 * ELSE /* FIRST TIME GEN 'PROC' */ 95000003 * EBESVGEN = 'PROC'; /* SAY TO GEN PROC ONLY */ 95010003 * ELSE /* NO, SECOND TIME THRU */ 95020003 * IF EBESVGEN = 'ALL' /* IS EVERYTHING GEND */ 95030003 * THEN /* YES */ 95040003 * RETURN; /* NOTHING TO DO BUT RET */ 95050003 * ELSE /* NO, GEN SAV REG CODE */ 95060003 * GO TO THECODE; /* GEN THE SAVE REG CODE */ 95070003 * 95080003 * IF OPTIONS ^= '' /* NON NULL STRING */ 95090003 * THEN DO; /* TRUE */ 95100003 * PROCOPTN = OPTIONS; 95110003 * PROCOPTN = PROCOPTN(2:LENGTH(PROCOPTN)-1) || ','; 95120003 * END; 95130003 * 95140003 * PLSAUTODATA = 'AUTODATA(' || WORKAREA || 'L),'; 95150003 * 95160003 * IF WORKAREA ^= '' 95170003 * THEN 95180003 * PROCOPTN = PROCOPTN || PLSAUTODATA ; 95190003 * 95200003 * PROCOPTN = PROCOPTN || 'ID,NOSAVEAREA,NODATAREG,REENTRANT'; 95210003 * 95220003 * IF CODEREG(1) = 'NO' /* IS NO CODEREG WANTED */ 95230003 * THEN /* YES */ 95240003 * PROCOPTN = PROCOPTN || ',NOCODEREG'; /* ADD TO LIST */ 95250003 * 95260003 * ELSE /* CODEREG IS WANTED */ 95270003 * IF NUMBER(CODEREG) = 1 /* CODEREG(YES) */ 95280003 * THEN /* YES */ 95290003 * PROCOPTN = PROCOPTN || ',CODEREG(11)';/* ADD TO LIST*/ 95300003 * 95310003 * ELSE /* DEFAULT OR (YES,R1,R2,..) */ 95320003 * IF CODEREG = '' /* IS DEFAULT REQUESTED */ 95330003 * THEN /* YES-DEFAULT OF REG 11 */ 95340003 * PROCOPTN = PROCOPTN || ',CODEREG(11)'; 95350003 * 95360003 * ELSE DO; /* NO-WANT DEFAULT PLUS */ 95370003 * PROCOPTN = PROCOPTN || ',CODEREG' || CODEREG; 95380003 * J = INDEX(PROCOPTN,CODEREG(1)); /* FIND 'YES' */ 95390003 * PROCOPTN = PROCOPTN(1:J-1) || '11' || 95400003 * PROCOPTN(J+LENGTH(CODEREG(1)):LENGTH(PROCOPTN)); 95410003 * END; 95420003 * 95430003 * IF MACLABEL ^= '' /* PROC NAME GIVEN */ 95440003 * THEN /* YES */ 95450003 * ANS(MACLABEL) COL(2); 95460003 * 95470003 * ANS('PROCEDURE OPTIONS (') COL(MACCOL); 95480003 * ANS( PROCOPTN || ');') COL(MACCOL+2); 95490003 * 95500003 * IF EBESVGEN = 'PROC' /* GEN 'PROC' ONLY */ 95510003 * THEN /* YES */ 95520003 * RETURN; /* RETURN TO CALLER */ 95530003 * 95540003 * THECODE: 95550003 * IF GEN(1) = 'ENTRY' /* WANT SECONDARY ENTRY POINT */ 95560003 * THEN DO; /* YES-WANT AN ENTRY STMT */ 95570003 * ANS(MACLABEL) COL(MACLMAR); 95580003 * ANS('ENTRY;') COL(MACCOL); 95590003 * END; 95600003 * 95610003 * IF COMMREG(1) ^= '' /* IS THERE PTR TO CA */ 95620003 * THEN DO; /* YES */ 95630003 * ALINE = 'COMMREG = ' || COMMREG(1) || ';'; 95640003 * DOCCOMCOLALT = LENGTH(ALINE) + MACCOL + 3; 95650003 * ANS(ALINE || '? DOC (GET ADDR OF IKJEBECA);') 95660003 * RESCAN COL(MACCOL); 95670003 * END; 95680003 * 95690003 * ELSE DO; /* NO - USE DEFAULT */ 95700003 * ANS('RESPECIFY (GPR01P) RSTD;') COL(MACCOL); 95710003 * ALINE = 'COMMREG = GPR01P;'; 95720003 * DOCCOMCOLALT = LENGTH(ALINE) + MACCOL + 1; 95730003 * ANS(ALINE || '? DOC (GET ADDR OF IKJEBECA);') 95740003 * COL(MACCOL); 95750003 * ANS('RESPECIFY (GPR01P) UNRSTD;') COL(MACCOL); 95760003 * 95770003 * IF INDEX(EHAREGS,'01P') = 0 /* GPR01P NOT DECLARED*/ 95780003 * THEN /* TRUE */ 95790003 * EHAREGS = EHAREGS || '01P'; 95800003 * END; 95810003 * 95817003 * IF INDEX(EHAREGS,'15P') = 0 /* GPR15P NOT DECLARED */ 95824003 * THEN /* TRUE */ 95831003 * EHAREGS = EHAREGS || '15P'; 95840003 * 95850003 * IF INDEX(EHAREGS,'13P') = 0 /* GPR15P NOT DECLARED */ 95860003 * THEN /* TRUE */ 95870003 * EHAREGS = EHAREGS || '13P'; 95880003 * 95890003 * IF INDEX(EHAUNIQUE,'CASAVPTR') = 0 /* SAVE AREA PTR NOT DCLD */95900003 * THEN /* TRUE */ 95910003 * EHAUNIQUE = EHAUNIQUE || '#CASAVPTR PTR(31) BASED#' || 95920003 * '@SAVE AREA PTR FOR IKJEBESV@'; 95930003 * 95940003 * IF INDEX(EHAUNIQUE,'COMMREG') = 0 /* COMMREG NOT DECLD */95950003 * THEN /* TRUE */ 95960003 * EHAUNIQUE = EHAUNIQUE || '#COMMREG REG(9) PTR(31) RSTD#' ||95970003 * '@POINTER TO EDIT COMMO AREA@'; 95980003 * 95990003 * IF INDEX(EHAUNIQUE,DATAREG(1)) = 0 /* DATAREG NOT DCL */ 96000003 * THEN /* TRUE */ 96010003 * EHAUNIQUE = EHAUNIQUE || 96020003 * '#' || DATAREG(1) || 96030003 * ' REG(10) PTR(31) RSTD#' || 96040003 * '@BASEREG FOR EDIT SUBCOMMAND WORK AREA@'; 96050003 * 96060003 * ANS('RESPECIFY (GPR13P,GPR15P) RSTD;') SKIP(2) COL(MACCOL); 96070003 * 96080003 * ALINE = 'GPR15P = CANXTSVA;'; 96090003 * DOCCOMCOLALT = LENGTH(ALINE) + MACCOL + 3; 96100003 * ANS(ALINE || '? DOC (SAVE AREA FOR THIS MODULE); ') 96110003 * COL(MACCOL); 96120003 * 96130003 * ALINE = 'EVAL(GPR15P + 4) -> CASAVPTR = GPR13P;'; 96140003 * DOCCOMCOLALT = LENGTH(ALINE) + MACCOL + 3; 96150003 * ANS(ALINE || '? DOC (SET THIS SAVEAREA BKWD PTR); ') 96160003 * COL(MACCOL); 96170003 * 96180003 * ALINE = 'EVAL(GPR13P + 8) -> CASAVPTR = GPR15P;'; 96190003 * DOCCOMCOLALT = LENGTH(ALINE) + MACCOL +3; 96200003 * ANS(ALINE || '? DOC (SET CALLER FWD PTR); ') COL(MACCOL); 96210003 * 96220003 * ALINE = 'GPR13P = GPR15P;'; 96230003 * DOCCOMCOLALT = LENGTH(ALINE) + MACCOL + 3; 96240003 * ANS(ALINE || '? DOC (NEW SAVEAREA ADDR); ') COL(MACCOL); 96250003 * 96260003 * ALINE = 'CANXTSVA = GPR13P + 72;'; 96270003 * DOCCOMCOLALT = LENGTH(ALINE) + MACCOL + 3; 96280003 * ANS(ALINE || '? DOC (UPDATE NEX-SAVE-AREA PTR); ') COL(MACCOL);96290003 * 96300003 * ANS('RESPECIFY (GPR13P,GPR15P) UNRSTD;') COL(MACCOL); 96310003 * 96320003 * IF DATAREG(1) ^= '' /* IS THERE VALUE FOR DATAREG */ 96330003 * THEN DO; /* YES - GEN ADDRESSABILITY */ 96340003 * 96350003 * ALINE = DATAREG(1) || ' = ADDR(' || WORKAREA || ');'; 96360003 * DOCCOMCOLALT = LENGTH(ALINE) + MACCOL + 3; 96370003 * ANS(ALINE || '? DOC (SET BASE REG FOR WORK AREA); ') 96380003 * SKIP(2) COL(MACCOL); 96390003 * 96400003 * ALINE = 'GEN( USING @DATD,' || DATAREG(1) || ');'; 96410003 * DOCCOMCOLALT = LENGTH(ALINE) + MACCOL + 3; 96420003 * ANS(ALINE || '? DOC (SET ADDRESSABILITY TO CASCWKA); ') 96430003 * COL(MACCOL); 96440003 * END; 96450003 * 96460003 * DOCCOMCOLALT = 0; /* RESET TO ZERO */ 96470003 *% END IKJEBESV; 96480003