MACRO 00050002 &NAME SETFRR &OPT,&FRRAD=,&PARMAD=,&WRKREGS=,&RELATED=,&CLEAR= 00650004 * MACDATE 75295 00670004 .* 00700002 .********************************************************************** 00750002 .* * 00800002 .* THE SETFRR MACRO EXPANSION GENERATES CODE WHICH MANIPULATES * 00850002 .* A STACK. * 00900002 .* THERE ARE TWO STACKS WHICH CAN BE MANIPULATED VIA THE SETFRR * 00902002 .* MACRO * 00904002 .* 1. A STACK FOR FRRS RUNNING IN SUPERVISOR CONTROL MODE * 00906002 .* 2. A STACK FOR FRRS RUNNING IN NON-SUPERVISOR CONTROL MODE * 00908002 .* * 00908102 .* THE HEADER FORMAT FOR EACH OF THESE STACKS IS AS FOLLOWS * 00908402 .* * 00908502 .* NON-SUPERVISOR CONTROL STACK HEADER FORMAT * 00908802 .* * 00910002 .* *********************************************** * 00950002 .* * ADDRESS OF STACK - 32 BYTES * * 01000002 .* *********************************************** * 01050002 .* * ADDRESS OF LAST ENTRY IN THE STACK * * 01100002 .* *********************************************** * 01150002 .* * LENGTH OF EACH ENTRY IN THE STACK (32) * * 01200002 .* *********************************************** * 01210002 .* *ADDRESS OF CURRENT FRR ADDRESS IN THE STACK * * 01220002 .* *(INITIALIZED TO THE ADDRESS OF STACK - 32) * * 01230002 .* *********************************************** * 01240002 .* * 01242002 .* SUPERVISOR CONTROL STACK HEADER FORMAT * 01242402 .* * 01242802 .* *********************************************** * 01243202 .* * ADDRESS OF STACK * * 01243602 .* *********************************************** * 01293602 .* * ADDRESS OF LAST ENTRY IN THE STACK * * 01343602 .* *********************************************** * 01393602 .* * LENGTH OF EACH ENTRY IN THE STACK (32) * * 01403602 .* *********************************************** * 01413602 .* *ADDRESS OF CURRENT FRR ADDRESS IN THE STACK * * 01423602 .* *(INITIALIZED TO THE ADDRESS OF THE STACK ) * * 01433602 .* *********************************************** * 01435602 .* * 01437602 .* PRIOR TO ISSUING SETFRR THE USER MUST HAVE PERFORMED THE FOLLOWING * 01439602 .* 1. ESTABLISHED ADDRESSABILITY TO THE PSA(THE FIRST * 01441602 .* INSTRUCTION GENERATED BY THE SETFRR EXPANSION REFERENCES * 01442002 .* THE PSACSTK FIELD OF THE PSA) * 01442402 .* * 01442802 .* 2. HAVE ISSUED THE FRR STACK MAPPING MACRO(IHAFRRS) * 01443202 .* * 01443302 .********************************************************************** 01443602 LCLC &R1 01446604 LCLC &R2 01449604 LCLC &R3 01452604 LCLC &R4 01455604 .* VERIFY VALID OPTION SPECIFIED FOR CLEAR KEYWORD 01458604 .C1 AIF ('&CLEAR' EQ '' OR '&CLEAR' EQ 'Y' OR '&CLEAR' EQ 'N').C2 01461604 AIF ('&CLEAR' EQ 'YES' OR '&CLEAR' EQ 'NO').C2 01464604 MNOTE *,'INVALID CLEAR OPTION, CLEAR=YES ASSUMED' 01467604 AGO .C2 01470604 .C4 MNOTE 8,'** PARMAD MUST BE SPECIFIED WITH CLEAR OPTION' 01473604 MEXIT 01476604 .C2 AIF ('&CLEAR' NE '' AND '&PARMAD' EQ '').C4 01479604 AIF ('&WRKREGS' EQ '').MSG1 CHECK TO SEE IF 01493602 .* WORK REGISTERS 01850002 .* ARE SPECIFIED 02450002 AIF ('&WRKREGS'(1,1) NE '(' OR N'&WRKREGS NE 2).MSG2 03050002 .* IF &WRKREGS IS 03650002 .* SPECIFIED BUT 04250002 .* INVALIDLY ISSUE 04850002 .* ERROR MESSAGE. 05450002 .* SET UP LOCAL CHARACTER FOR USE IN EXPANSIONS 05500004 &R1 SETC '&WRKREGS(1)' 05550004 &R2 SETC '&WRKREGS(2)' 05600004 &R3 SETC '&PARMAD(1)' 05650004 &R4 SETC '&FRRAD(1)' 05700004 .* OTHERWISE CHECK 06050002 .* &OPT FOR A VALID 06650002 .* OPTION 07250002 AIF ('&OPT' EQ 'A' OR '&OPT' EQ 'R').ADREP 07850002 AIF ('&OPT' EQ 'D' OR '&OPT' EQ 'P').EXPAND 08450002 AIF ('&OPT' EQ 'F').FLUSH 08460002 MNOTE 12,'INVALID OPTION &OPT SPECIFIED' 09050002 .* MESSAGE STATING 09650002 .* INVALID OPTION 10250002 AGO .END STOP EXPANSION 10850002 .ADREP AIF ('&FRRAD' EQ '').MSG3 ISSUE MESSAGE IF 11450002 .* &FRRAD IS NOT 12050002 .* SPECIFIED FOR 12650002 .* THE ADD/REPLACE 13250002 .* OPTION 13850002 AGO .EXPAND1 13900002 .EXPAND ANOP BEGIN EXPANSION 14450002 AIF ('&FRRAD' NE '' AND '&PARMAD' NE '').WARN 14500002 AIF ('&FRRAD' NE '' OR '&PARMAD' NE '').WARN 14550002 AGO .EXPAND1 14600002 .WARN MNOTE *,'FRRAD AND/OR PARMAD SPECIFIED FOR DELETE/PURGE' 14650002 MNOTE *,'FRRAD AND/OR PARMAD IGNORED-DELETE/PURGE HONORED' 14700002 .EXPAND1 ANOP 14750002 &NAME L &R1,PSACSTK-PSA(0,0) ADDRESS OF CURRENT STACK 15650004 AIF ('&OPT' EQ 'P').PURGE GO EXPAND FOR A 16850002 .* PURGE OF THE FRR 17450002 .* STACK 18050002 AIF ('&OPT' EQ 'A').ADD GO TO ADD ROUTINE 18100004 L &R2,FRRSCURR-FRRS(0,&R1) ADDR OF CURRENT ELEMENT 18650004 CL &R2,FRRSEMP-FRRS(0,&R1) IS THE FRR STACK EMPTY 18700004 AIF ('&OPT' EQ 'R').BRANCH IF OPTION IS 23450002 .* REPLACE EXPAND 24050002 .* AT .BRANCH 24650002 BE *+12 YES, DO NOT DELETE ENTRY 25250004 SL &R2,FRRSELEN-FRRS(0,&R1) DECREMENT CURRENT ADDRESS 25300004 AGO .UPDATE 28250002 .ADD LA &R2,32(0,0) LENGTH OF FRR STACK ENTRY 28300004 AL &R2,FRRSCURR-FRRS(0,&R1) COMPUTE NEXT ENTRY ADDRESS 28350004 CL &R2,FRRSLAST-FRRS(0,&R1) WILL STACK OVERFLOW 28400004 BH PSALSFCC-PSA(0,0) YES, ISSUE 07D ABEND 28450004 AGO .COMMON1 31850004 .BRANCH BNE *+12 NO, SKIP UPDATE 32450004 .COMMON AL &R2,FRRSELEN-FRRS(0,&R1) COMPUTE NEXT ENTRY ADDR 32500004 .COMMON1 ST &R2,FRRSCURR-FRRS(0,&R1) UPDATE CURRENT ENTRY ADDR 32550004 AIF ('&FRRAD'(1,1) EQ '(').STFRR 37900002 AIF (T'&FRRAD EQ 'N').MSG4 37950002 L &R1,&FRRAD LOAD FRR ENTRY ADDRESS 38000004 ST &R1,FRRSFRRA-FRRSENTR(0,&R2) ADD ADDRESS TO THE STACK 38030004 AGO .PMCHK 38150002 .STFRR ST &R4,FRRSFRRA-FRRSENTR(0,&R2) ADD ADDRESS TO STACK 38200004 .PMCHK AIF ('&PARMAD' EQ '' ).END 38450004 .* DETERMINE IF PARMS ARE SPECIFIED 38500004 AIF ('&PARMAD'(1,1) EQ '(').LPARM 39700002 AIF (T'&PARMAD EQ 'N').MSG4 39710002 AIF ('&OPT' EQ 'R' AND '&CLEAR' EQ 'Y').C5 39713004 AIF ('&OPT' EQ 'R' AND '&CLEAR' EQ 'YES').C5 39716004 AIF ('&OPT' NE 'A').NOZERO1 IS THIS THE 39720002 .* ADD OPTION 39730002 .* YES DO FOLLOWING 39740002 AIF ('&CLEAR' EQ 'N' OR '&CLEAR' EQ 'NO').NOZERO1 39741004 .C5 XC FRRSPARM-FRRSENTR(24,&R2),FRRSPARM-FRRSENTR(&R2) 39742004 * ZERO FRR PARM AREA 39762004 .NOZERO1 LA &R2,FRRSPARM-FRRSENTR(0,&R2) RETURN PARM AREA 39782004 ST &R2,&PARMAD ADDRESS TO USER 39802004 AGO .END 39850002 .LPARM ANOP 39860002 AIF ('&OPT' EQ 'R' AND '&CLEAR' EQ 'Y').C6 39870004 AIF ('&OPT' EQ 'R' AND '&CLEAR' EQ 'YES').C6 39880004 AIF ('&OPT' NE 'A').NOZERO2 IS THIS THE 39900002 .* ADD OPTION 39950002 .* YES DO FOLLOWING 40000002 AIF ('&CLEAR' EQ 'N' OR '&CLEAR' EQ 'NO').NOZERO2 40005004 .C6 XC FRRSPARM-FRRSENTR(24,&R2),FRRSPARM-FRRSENTR(&R2) 40010004 * ZERO FRR PARM AREA 40050004 .NOZERO2 LA &R3,FRRSPARM-FRRSENTR(0,&R2) ADDRESS OF PARM AREA 40250004 AGO .END 42050002 .PURGE L &R2,FRRSEMP-FRRS(0,&R1) LOAD EMPTY STACK ADDRESS 42650004 .UPDATE ST &R2,FRRSCURR-FRRS(0,&R1) UPDATE CURRENT STACK ENTRY 43250004 AGO .END 44450002 .FLUSH ANOP 44460002 &NAME L &R1,PSASTAK-PSA(0,0) NORMAL STACK PTR 44480004 ST &R1,PSASTAK-PSA+FRRSCURR-FRRS(0,0) PURGE STACK 44510004 MVI PSASTAK-PSA+FRRSRTMW-FRRS(0),X'00' ZERO RECURSION BYTE 44522004 AGO .END 44530002 .MSG1 MNOTE 12,'WORK REGISTERS NOT SPECIFIED' 45050002 AGO .END 45650002 .MSG2 MNOTE 8,'WORK REGISTERS SPECIFIED INCORRECTLY' 46250002 MNOTE 8,'SPECIFY AS FOLLOWS - WRKREGS=(REGISTER,REGISTER)' 47450002 AGO .END 48050002 .MSG3 MNOTE 8,'FRR ADDRESS NOT SPECIFIED FOR ADD/REPLACE' 48650002 AGO .END 48700002 .MSG4 MNOTE 8,'ADDRESS SPECIFIED FOR FRRAD/PARMAD IS SELF-DEFINING' 48750002 .END MEND 49250002