*AINDMUSATT -- ATTACH A LOAD MODULE 00000205 C*********************************************************************** C COPYRIGHT ATLANTIC RICHFIELD COMPANY 1991 * C*********************************************************************** *TITLE USATT -- ATTACH A LOAD MODULE 00000304 *A AUTHOR W. E. SUMNER 00000400 *A DESIGNER W. E. SUMNER 00000500 *A LANGUAGE IBM ASSEMBLER 00000600 *A WRITTEN 6-16-87 00000700 * REVISED 09-01-87 REM. MODIFY TO USE EDP MACROS. 00000800 *A 00000900 *A 00001000 *A CALL USATT (PGM, IRC, ECB, PARAM1, PARAM2, ...) 00001100 *A 00001200 *A IN/OUT ARGUMENT TYPE DESCRIPTION 00001300 *A 00001400 *A IN PGM C8 PROGRAM NAME TO LINK. 00001500 *A OUT IRC I4 RETURN CODE FROM ATTACH MACRO. 00001600 *A OUT ECB 2I4 2 WORD ARRAY 00001700 *A WORD 1: EVENT CONTROL BLOCK FOR WAITING 00001800 *A ON NEW TASK. 00001900 *A WORD 2: ADR(TASK CONTROL BLOCK OF 00002000 *A SUBTASK. 00002100 *A IN PARAM1 PARAMETERS TO BE PASSED TO THE ATTACHED 00002200 *A PROGRAM. 00002300 *A 00002400 *A 00002500 *A THIS ROUTINE ATTACHES PROGRAM "PGM". 00002600 *AEND 00002700 *TITLE USWAIT -- WAIT ON THE ECB OF THE ATTACHED SUBTASK 00002800 *A AUTHOR W. E. SUMNER 00002900 *A DESIGNER W. E. SUMNER 00003000 *A LANGUAGE IBM ASSEMBLER 00003100 *A WRITTEN 6-16-87 00003200 *A 00003300 *A 00003400 *A CALL USWAIT (ECB) 00003500 *A 00003600 *A IN/OUT ARGUMENT TYPE DESCRIPTION 00003700 *A 00003800 *A IN ECB I4 EVENT CONTROL BLOCK FOR WAITING 00003900 *A 00004000 *A 00004100 *A THIS ROUTINE WAITS ON THE INPUT ECB. 00004200 *AEND 00004300 *TITLE USDET -- DETACH THE SUBTASK 00004400 *A AUTHOR W. E. SUMNER 00004500 *A DESIGNER W. E. SUMNER 00004600 *A LANGUAGE IBM ASSEMBLER 00004700 *A WRITTEN 6-16-87 00004800 *A 00004900 *A 00005000 *A CALL USDET (ECB) 00005100 *A 00005200 *A IN/OUT ARGUMENT TYPE DESCRIPTION 00005300 *A 00005400 *A IN ECB 2I4 EVENT CONTROL BLOCK / TASK CONTROL BLOCK 00005500 *A 00005600 *A 00005700 *A THIS ROUTINE WAITS ON THE INPUT ECB. 00005800 *AEND 00005900 * 00006000 EJECT 00006100 PRINT GEN 00006200 USATT START 0 00006300 B 12(R15) 00006400 ENTRY USWAIT 00006500 USWAIT B 8(R15) 00006600 ENTRY USDET 00006700 USDET B 4(R15) 00006800 USING *,15 00006900 STM R14,R12,12(R13) 00007000 SR R2,R2 00007100 IC R2,3(,R15) 00007200 AR R15,R2 00007300 LA R15,SAVEAREA 00007400 DROP R15 00007500 ST R15,8(,R13) 00007600 ST R13,4(,R15) 00007700 LR R13,R15 00007800 USING SAVEAREA,R13 00007900 B SAVEAREA+72 00008000 CNOP 0,4 00008100 DC AL1(5),CL5'USATT' 00008200 SAVEAREA DS 18F 00008300 * 00008400 B *(R2) 00008500 B USDET$ 00008600 B USWAIT$ 00008700 B USATT$ 00008800 * 00008900 * --------------------------------- 00009000 * ROUTINE TO ATTACH A PROGRAM AND PASS CONTROL TO IT AS A SUBTASK 00009100 * REQ, REQ, REQ, OPT , OPT , OPT 00009200 * CALL USATT(PGM, IRC, ECB, PARAM1, PARAM2, ...) 00009300 * PGM = 8-CHARACTER PROGRAM NAME TO LINK 00009400 * IRC = FULLWORD INTEGER RETURN-CODE FROM ATTACH MACRO 00009500 * ECB = EVENT CONTROL BLOCK FOR WAITING ON NEW TASK -- WORD 1 00009600 * ADR(TASK CONTROL BLOCK -- SUBTASK) ----------- WORD 2 00009700 * PARAM1 = PARAMETERS TO BE PASSED TO THE ATTACHED PROGRAM 00009800 * 00009900 USATT$ L R2,0(R1) . R2 = A(PGM NAME) 00010000 L R3,4(R1) . R3 = A(RETURN CODE FROM LINK) 00010100 XC 0(4,R3),0(R3) . CLEAR RETURN CODE TO ZERO 00010200 L R4,8(R1) . R4 = A(EVENT CTL BLOCK) 00010300 XC 0(8,R4),0(R4) . CLEAR ECB/TCBADR DOUBLEWORD 00010400 LA R1,12(R1) . R1 = A(PARAMETERS FOR PROGRAM) 00010500 * ----------------------------------- 00010600 * ATTACH THE MODULE, DON'T ABEND 00010700 * 00010800 ATTACH EPLOC=(2),ECB=(4),SZERO=NO 00010900 ST R1,4(R4) . SAVE ADR(TASK CTL BLOCK) 00011000 ST R15,0(R3) . SAVE RETURN CODE 00011100 STDRET . RETURN TO CALLER 00011200 * =================================== 00011300 EJECT 00011400 * --------------------------------- 00011500 * ROUTINE TO WAIT FOR AN ECB 00011600 * REQ 00011700 * CALL USWAIT(ECB) 00011800 * ECB = EVENT CONTROL BLOCK FOR WAITING 00011900 * 00012000 USWAIT$ L R2,0(R1) . R2 = A(PGM NAME) 00012100 WAIT ECB=(2) . WAIT UNTIL ECB IS POSTED 00012200 STDRET 00012300 * =================================== 00012400 EJECT 00012500 * --------------------------------- 00012600 * ROUTINE TO DETACH A SUBTASK 00012700 * REQ 00012800 * CALL USDET(ECB) 00012900 * ECB = EVENT CONTROL BLOCK / TASK CTL BLOCK ADR 00013000 * 00013100 USDET$ L R2,0(R1) . R2 = A(ECB/TCBADR) DOUBLEWORD 00013200 LA R2,4(R2) . R2 = ADR(WORD CONTAINING TCBADR) 00013300 DETACH (2) . ELIMINATE THIS SUBTASK 00013400 STDRET 00013500 COPY S1REG 00013600 LTORG 00013700 END 00013800