         MACRO                                                          00200020
&NAME    PLINK &LOAD=,&EPLIST=,&CALL=,&SIZE=,                          C00400020
               &DELETE=,&RETURN=,&MF=                                   00600020
.*                                                                      00800020
.* MACRO NAME: PLINK                                                    01000020
.*                                                                      01200020
.* STATUS:     CHANGE LEVEL 001                                         01400020
.*                                                                      01600020
.* FUNCTION:   TO PROVIDE THE LINKAGE NECESSARY TO EXECUTE THE PLINK    01800020
.*             MODULE. THE MACRO GENERATES A PARAMETER LIST AND/OR      02000020
.*             LOADS REGISTER 15 WITH THE ADDRESS OF THE PLINK MODULE   02200020
.*             AND REGISTER 1 WITH THE ADDRESS OF A PARAMETER LIST.     02400020
.*                                                                      02600020
.* REGISTER 15 RETURN CODE:    (SET BY LOAD AND DELETE FUNCTIONS ONLY.) 02800020
.*                                                                      03000020
.*             CODE       MEANING                                       03200020
.*                                                                      03400020
.*              00       THE REQUESTED FUNCTION HAS BEEN ACCOMPLISHED   03600020
.*                       SUCCESSFULLY.                                  03800020
.*                                                                      04000020
.*              04       THE PLINK FACILITY IS NOT AVAILABLE.           04200020
.*                                                                      04400020
.*              08       AN ERROR OTHER THAN THOSE DESCRIBED HAS        04600020
.*                       OCCURRED.                                      04800020
.*                                                                      05000020
.*              0C       LOAD - THE REQUESTED MODULE IS NOT AVAILABLE   05200020
.*                       IN THE SYSTEM.                                 05400020
.*                       DELETE - THE SPECIFIED MODULE IS NOT IN CORE.  05600020
.*                                                                      05800020
.*              10       LOAD - THERE IS NOT ENOUGH CORE AVAILABLE.     06000020
.*                       DELETE - NEVER RETURNS THIS CODE.              06200020
.*                                                                      06400020
.* PARAMETERS AND/OR KEYWORDS:                                          06600020
.*                                                                      06800020
.*             LOAD(SUBLIST)-THE ENTRY POINT NAMES OF MODULES TO BE     07000020
.*                 LOADED. IF MORE THAN ONE, SEPARATED BY COMMAS AND    07200020
.*                 ENCLOSED IN PARENTHESES.                             07400020
.*                                                                      07600020
.*             EPLIST-THE ADDRESS OF A LIST WHERE ENTRY POINT ADDRESSES 07800020
.*                    OF THE LOADED MODULES WILL BE STORED. MUST        08000020
.*                    ACCOMPANY THE LOAD PARAMETER.                     08200020
.*                                                                      08400020
.*             SIZE-  INTEGER DEFINING THE TOTAL AMOUNT OF CORE IN 1K   08600020
.*                                                                      08800020
.*                    MULTIPLES REQUIRED TO RUN TEST.                   09000020
.*             CALL-  MODULE TO TRANSFER CONTROL TO; TWO FORMS ALLOWED, 09200020
.*                                                                      09400020
.*                    1. ADDRESS- LOCATION CONTAINING THE ENTRY POINT.  09600020
.*                                                                      09800020
.*                    2. (15)   - INDICATES REGISTER 15 CONTAINS THE    10000020
.*                                ADDRESS. R15 MUST HAVE BEEN LOADED    10200020
.*                                PRIOR TO INVOKING PLINK.              10400020
.*                                                                      10600020
.* NOTE:       CALL=(15) CANNOT BE USED WHEN LOADING OR DELETING IN THE 10800020
.*             SAME PLINK AS CALL.                                      11000020
.*                                                                      11200020
.*             DELETE(SUBLIST)-SAME COMMENTS AS APPLY TO LOAD.          11400020
.*                                                                      11600020
.*             RETURN=YES- INDICATES CONTROL IS TO BE RETURNED TO THE   11800020
.*                         CALLING MODULE. ITS REGISTERS ARE RESTORED   12000020
.*                         AND A BRANCH IS MADE TO THE ADDRESS STORED   12200020
.*                         IN REGISTER 14.                              12400020
.*                                                                      12600020
.*             MF= E,ADDRESS/(1) INDICATES THE EXECUTE FORM OF THE      12800020
.*                 MACRO WITH THE PARAMETER LIST ADDRESS EITHER         13000020
.*                 SPECIFIED OR PREVIOUSLY LOADED IN REGISTER 1.        13200020
.*                                                                      13400020
.*                                                                      13600020
.*             MF= L  INDICATES THE LIST FORM OF THE MACRO WITH NO      13800020
.*                    EXECUTABLE CODE GENERATED.                        14000020
.*                                                                      14200020
.* RESTRICTIONS: LOAD AND RETURN MAY NOT BE SPECIFIED IN THE SAME       14400020
.*               MACRO.                                                 14600020
.*               CALL AND RETURN MAY NOT BE SPECIFIED IN THE SAME       14800020
.*               MACRO.                                                 15000020
.*                                                                      15200020
.*                                                                      15400020
.* WARNING:    IF CALL OR RETURN AND LOAD OR DELETE ARE USED IN THE     15600020
.*             SAME MACRO AND THE RETURN CODE IS NOT ZERO, A BRANCH     15800020
.*             WILL BE MADE AROUND THE RETURN OR CALL INSTRUCTIONS.     16000020
.*                                                                      16200020
.* CONTROL BITS SET BY THIS MACRO:                                      16400020
.*                                                                      16600020
.*             L&SYSNDX DC B'&L1&C&B&B&D&R&B&S'                         16800020
.*                            |  | | | | | | |                          17000020
.*                            |  | 0 0 | | 0 |                          17200020
.*                            |  |     | |   SIZE                       17400020
.*                            |  |     | RETURN                         17600020
.*                            |  |     DELETE                           17800020
.*                               CALL                                   18000020
.*                            LOAD                                      18200020
.*                                                                      18400020
.* GLOBALS SET OR RESET BY THIS MACRO:                                  18600020
.*                                                                      18800020
.*             &CR AND &MOD(255)                                        19000020
.*                                                                      19200020
.* GLOBALS EXAMINED BY THIS MACRO: NONE                                 19400020
.*                                                                      19600020
.* SYMBOLS GENERATED BY THIS MACRO: NONE                                19800020
.*                                                                      20000020
.* MNOTES ISSUED BY THIS MACRO:                                         20200020
.*                                                                      20400020
.*             MNOTE 8,'DELETE AND RETURN INVALID.'                     20600020
.*                                                                      20800020
.*             MNOTE 8,'DELETE AND CALL INVALID.'                       21000020
.*                                                                      21200020
.*             MNOTE 8,'DELETE AND LOAD INVALID.'                       21400020
.*                                                                      21600020
.*             MNOTE 8,'LOAD AND RETURN INVALID.'                       21800020
.*                                                                      22000020
.*             MNOTE 8,'CALL AND RETURN INVALID.'                       22200020
.*                                                                      22400020
.*             MNOTE 8,'THERE IS NO LIST EXPANSION FOR CALL.'           22600020
.*                                                                      22800020
.*             MNOTE 8,'THERE IS NO LIST EXPANSION FOR RETURN.'         23000020
.*                                                                      23200020
.*             MNOTE 8,'ENTRY POINT LIST ADDRESS MISSING.'              23400020
.*                                                                      23600020
.*             MNOTE 8,'NO MACRO OPERANDS SELECTED.'                    23800020
.*                                                                      24000020
.*             MNOTE 8,'REG 15 CANNOT BE USED FOR CALL ADDRESS WHEN     24200020
.*                      LOAD OR DELETE ARE SPECIFIED.'                  24400020
.*                                                                      24600020
.* REASONS:    ABOVE MNOTES ARE SELF EXPLANATORY.                       24800020
.*                                                                      25000020
.* EXAMPLE:                                                             25200020
.*                                                                      25400020
.* *******************************************                          25600020
.* *  NAME  * OPERATION *       OPERAND      *                          25800020
.* *******************************************                          26000020
.* *        *           *                    *                          26200020
.* * SYMBOL *   PLINK   * LOAD=(SUBLIST),    *                          26400020
.* *        *           * EPLIST=ADDR,       *                          26600020
.* *        *           * SIZE=INTEGER,      *                          26800020
.* *        *           * CALL=ADDR/(15),   *                           27000020
.* *        *           * DELETE=(SUBLIST),  *                          27200020
.* *        *           * RETURN=YES,        *                          27400020
.* *        *           * MF=(E,ADDR/(1))    *                          27600020
.* *        *           *   =L               *                          27800020
.* *        *           *                    *                          28000020
.*                                                                      28200020
         GBLA  &CR                                                      28400020
         GBLC  &MOD(255)                                                28600020
         LCLA  &C1,&C2,&CTR,&N                                          28800020
         LCLB  &L1,&C,&B,&D,&R,&S,&E                                    29000020
         LCLC  &FILEN                                                   29200020
&L1      SETB  (T'&LOAD NE 'O')   SET TO 1 IF PARAMETER EXISTS.         29400020
&C       SETB  (T'&CALL NE 'O')                                         29600020
&D       SETB  (T'&DELETE NE 'O')                                       29800020
&R       SETB  (T'&RETURN NE 'O')                                       30000020
&S       SETB  (T'&SIZE NE 'O')                                         30200020
&E       SETB  (T'&EPLIST NE 'O')                                       30400020
.*                                                                      30600020
.* TEST FOR INVALID COMBINATIONS                                        30800020
.*                                                                      31000020
         AIF   (&L1+&R GT 1).ERR1                                       31200020
         AIF   (&C+&R GT 1).ERR2                                        31400020
         AIF   (&L1+&D GT 1).ERR8                                       31600020
         AIF   (&C+&D GT 1).ERR9                                        31800020
         AIF   (&D+&R GT 1).ERR10                                       32000020
.*                                                                      32200020
         AIF   (T'&NAME NE 'O').N1                                      32400020
&FILEN   SETC  'A&SYSNDX'                                               32600020
         AGO   .N2                                                      32800020
.N1      ANOP                                                           33000020
&FILEN   SETC  '&NAME'                                                  33200020
.*                                                                      33400020
.N2      AIF   (&CR NE 0).T2                                            33600020
&CR      SETA  1                                                        33800020
.*                                                                      34000020
.T2      ANOP                                                           34200020
&C1      SETA  N'&LOAD            C1=# OF LOAD MODULES                  34400020
&C2      SETA  N'&DELETE          C2=# OF DELETE MODULES                34600020
.*                                                                      34800020
         AIF   (T'&MF EQ 'O').STD .GO TO STD FORM IF MF OMITTED         35000020
         AIF   ('&MF(1)' EQ 'E').EXEC .GOTO EXEC FORM IF MF=E           35200020
         AIF   ('&MF(1)' EQ 'L').LISTA .GOTO LIST FORM IF MF=L          35400020
.*                                                                      35600020
.STD     AIF   (&L1 NE 0).LOADA . TEST FOR LOAD PARAM.                  35800020
         AGO   .DELA .            NO, TRY DELETE                        36000020
.LOADA   AIF   (&L1+&C GT 1).LOADC . IS IT LOAD&CALL?                   36200020
.LOADB   ANOP                                                           36400020
&FILEN   L     R15,#TABLE         TABLE OF EXECUTIVE ENTRY POINTS       36600020
&FILEN   SETC  ' '                                                      36800020
         L     R15,28(R15)        ENTRY TO TRANSIENT MANAGER            37000020
         LA    R14,R&SYSNDX       RETURN ADDRESS                        37200020
         CNOP  2,4                                                      37400020
         BALR  R1,R15                                                   37600020
         AGO   .LISTB             SET UP PARAMETER LIST                 37800020
.LOADC   AIF   ('&CALL'(1,1) NE '(').LOADB  CHECK FOR REGISTER 15       38000020
         AGO   .ERR7                                                    38200020
.*                                                                      38400020
.DELA    ANOP                                                           38600020
         AIF   (&D EQ 0).CALLA                                          38800020
         AGO   .LOADB                                                   39000020
.CALLA   ANOP                                                           39200020
         AIF   (&C NE 1).RETC                                           39400020
.CALLB   AIF   ('&CALL'(1,1) EQ '(').CALLC                              39600020
&FILEN   L     R15,&CALL                                                39800020
&FILEN   SETC  ' '                                                      40000020
         BALR  R14,R15                                                  40200020
         MEXIT                                                          40400020
.CALLC   ANOP                                                           40600020
&FILEN   L     R15,0(R15)                                               40800020
&FILEN         SETC ' '                                                 41000020
&FILEN   BALR  R14,R15            BRANCH TO ADDRESS IN R15              41200020
         MEXIT                                                          41400020
.*                                                                      41600020
.EXEC    ANOP                                                           41800020
         AIF   (N'&MF GE 2).EXECA                                       42000020
         AIF   (&C EQ 1).CALLB                                          42200020
.RETC    ANOP                                                           42400020
         AIF   (&R EQ 0).ERR6                                           42600020
&FILEN   L     R13,4(R13)         GET OLD SAVE AREA ADDRESS             42800020
&FILEN   SETC  ' '                                                      43000020
         LM    R14,R12,12(R13)    RESTORE CALLING PROGRAM'S REGISTERS.  43200020
         BR    R14                RETURN                                43400020
         MEXIT                                                          43600020
.EXECA   AIF   ('&MF(2)'(1,1) EQ '(').R1                                43800020
&FILEN   LA    R1,&MF(2) .        LOAD R1 WITH PARAMETER LIST ADDRESS.  44000020
&FILEN   SETC  ' '                                                      44200020
.R1      ANOP                                                           44400020
&FILEN   L     R15,#TABLE                                               44600020
&FILEN   SETC  ' '                                                      44800020
         L     R15,28(R15)                                              45000020
         BALR  R14,R15                                                  45200020
         AIF   (&C EQ 0).EXECB                                          45400020
         AIF   ('&CALL'(1,1) EQ '(').ERR7                               45600020
.CALLD   ANOP                                                           45800020
         LTR   R15,R15            TEST RETURN CODE                      46000020
         BNZ   E&SYSNDX           IF NOT ZERO, BRANCH AROUND CALL       46200020
         L     R15,&CALL                                                46400020
         BALR  R14,R15                                                  46600020
E&SYSNDX EQU   *                                                        46800020
         MEXIT                                                          47000020
.EXECB   ANOP                                                           47200020
         AIF   (&R EQ 1).RETB                                           47400020
         MEXIT                                                          47600020
.RETB    ANOP                                                           47800020
         LTR   R15,R15            TEST RETURN CODE                      48000020
         BNZ   E&SYSNDX                                                 48200020
         L     R13,4(R13)         GET CALLING MODULES SAVE AREA         48400020
         LM    R14,R12,12(R13)    RESTORE REGISTERS                     48600020
         BR    R14                RETURN TO CALLING MODULE              48800020
E&SYSNDX EQU   *                                                        49000020
         MEXIT                                                          49200020
.LISTA   ANOP                                                           49400020
         AIF   (&C EQ 1).ERR3                                           49600020
         AIF   (&R EQ 1).ERR4                                           49800020
.*                                                                      50000020
.LISTB   ANOP                                                           50200020
&FILEN   DC    A(P&SYSNDX) .      OLTEP PARAMETER LIST ADDRESS          50400020
&FILEN   SETC  ' '                                                      50600020
         DC    A(L&SYSNDX) .      POINTER TO CONTROL BYTE               50800020
         AIF   (&L1 EQ 0).LISTC                                         51000020
         DC    A(L&SYSNDX+4) .    POINTER TO LOAD MODULE LIST           51200020
         AIF   (&E EQ 0).ERR5                                           51400020
         DC    A(&EPLIST) .       ENTRY POINT LIST ADDRESS              51600020
         AGO   .LISTD                                                   51800020
.LISTC   ANOP                                                           52000020
         DC    A(0)                                                     52200020
         DC    A(0)                                                     52400020
.LISTD   ANOP                                                           52600020
         AIF   (&D EQ 0).LISTE                                          52800020
         DC    A(D&SYSNDX)        POINTER TO LIST OF DELETED MODULES    53000020
         AGO   .DELC                                                    53200020
.LISTE   ANOP                                                           53400020
         DC    A(0)                                                     53600020
.DELC    ANOP                                                           53800020
P&SYSNDX DC    B'00000000' .      INDICATORS FOR TRANSIENT MANAGER      54000020
         DC    AL1(1) .           MACRO LEVEL                           54200020
         DC    CL2'28' .          IDENTITY OF MACRO EXPANSION           54400020
L&SYSNDX DC    B'&L1&C&B&B&D&R&B&S' .    CONTROL BYTE                   54600020
         AIF   (T'&SIZE EQ 'O').QA                                      54800020
         DC    AL1(&SIZE)         CORE NEEDED IN 1K MULTIPLES           55000020
         AGO   .QB                                                      55200020
.QA      ANOP                                                           55400020
         DC    AL1(0)             CORE NEEDED IN 1K MULTIPLES           55600020
.QB      ANOP                                                           55800020
         DC    AL1(&C1)           # OF LOAD MODULES                     56000020
         DC    AL1(&C2)           # OF DELETED MODULES                  56200020
         AIF   (&L1 EQ 0).DELB                                          56400020
&CTR     SETA  1                                                        56600020
.P2      ANOP                                                           56800020
         DC    CL8'&LOAD(&CTR)'                                         57000020
.P3      ANOP                                                           57200020
&N       SETA  1                                                        57400020
.P4      AIF   ('&LOAD(&CTR)' EQ '&MOD(&N)').EX2                        57600020
         AIF   (&N EQ &CR).EX3                                          57800020
&N       SETA  &N+1                                                     58000020
         AGO   .P4                                                      58200020
.EX3     ANOP                                                           58400020
         EXTRN &LOAD(&CTR)                                              58600020
&MOD(&CR) SETC '&LOAD(&CTR)'                                            58800020
&CR      SETA  &CR+1                                                    59000020
.EX2     ANOP                                                           59200020
         AIF   (&CTR EQ &C1).DELB                                       59400020
&CTR     SETA  &CTR+1                                                   59600020
         AGO   .P2                                                      59800020
.DELB    AIF   (&D EQ 0).DELD                                           60000020
D&SYSNDX EQU   *                                                        60200020
&CTR     SETA  1                                                        60400020
.PA      ANOP                                                           60600020
         DC    CL8'&DELETE(&CTR)'                                       60800020
         AIF   (&CTR EQ &C2).DELD                                       61000020
&CTR     SETA  &CTR+1                                                   61200020
         AGO   .PA                                                      61400020
.DELD    ANOP                                                           61600020
R&SYSNDX DS    0H                 RETURN ON HALFWORD BOUNDARY           61800020
.*                                                                      62000020
         AIF   (&C EQ 0).RETA                                           62200020
         AGO   .CALLD                                                   62400020
.RETA    ANOP                                                           62600020
         AIF   (&R EQ 1).RETB                                           62800020
         AIF   (&L1+&C+&D+&R EQ 0).ERR6                                 63000020
         MEXIT                                                          63200020
.ERR1    MNOTE 8,'LOAD AND RETURN INVALID.'                             63400020
         MEXIT                                                          63600020
.ERR2    MNOTE 8,'CALL AND RETURN INVALID.'                             63800020
         MEXIT                                                          64000020
.ERR3    MNOTE 8,'THERE IS NO LIST EXPANSION FOR CALL.'                 64200020
         MEXIT                                                          64400020
.ERR4    MNOTE 8,'THERE IS NO LIST EXPANSION FOR RETURN.'               64600020
         MEXIT                                                          64800020
.ERR5    MNOTE 8,'ENTRY POINT LIST ADDRESS MISSING.'                    65000020
         MEXIT                                                          65200020
.ERR6    MNOTE 8,'NO MACRO OPERANDS HAVE BEEN CHOSEN.'                  65400020
         MEXIT                                                          65600020
.ERR7    MNOTE 8,'REG 15 CANNOT BE USED FOR CALL ADDRESS WHEN LOAD OR  C65800020
                DELETE ARE SPECIFIED.'                                  66000020
         MEXIT                                                          66200020
.ERR8    MNOTE 8,'DELETE AND LOAD INVALID.'                             66400020
         MEXIT                                                          66600020
.ERR9    MNOTE 8,'DELETE AND CALL INVALID.'                             66800020
         MEXIT                                                          67000020
.ERR10   MNOTE 8,'DELETE AND RETURN INVALID.'                           67200020
         MEXIT                                                          67400020
         MEND                                                           67600020
