MACRO &NAME WLINK &TYPE,&RPREF=R,&FRPREF=FR,&SV=SVAREA,&ENTRY=YES, X &BASE=,&CARG=CARG,&CNV=NO,&MAXARG=,&MAXRET=0 .* .* WRITTEN BY DAVE EDWARDS, NOV 1972 .* .* WATFIV LINKAGE MACRO FOR USE BY AN ASSEMBLY LANGUAGE .* ROUTINE WHICH IS CALLED BY A WATFIV ROUTINE .* .* *** NOTICE: THIS SOURCE FILE IS PROVIDED ON AN "AS IS" BASIS, .* WITHOUT ANY SUPPORT OR WARRANTY. IF YOU USE IT, YOU DO SO .* AT YOUR OWN RISK. YOU MAY USE IT FOR ANY PURPOSE YOU WANT. .* .* &NAME IF '&TYPE' IS 'CSECT' OR 'ENTRY', &NAME IS .* 1 TO 6 CHAR CSECT OR ENTRY POINT NAME .* OTHERWISE &NAME IS AN OPTIONAL LABEL .* &TYPE ONE OF THE FOLLOWING - .* CSECT GENERATE CSECT ENTRY LINKAGE .* ENTRY GENERATE ENTRY POINT LINKAGE .* RETURN GENERATE RETURN LINKAGE AND SAVE AREA .* ARGS GENERATE CALL TO ARGLIST CONVERSION ROUTINE .* &RPREF,&FRPREF REGISTER PREFIXES .* &BASE LABEL FOR REG 11 BASE POINT. THIS BASE POINT .* IS DEFINED WHEN '&TYPE'='CSECT' AND IS REFERRED .* TO WHEN '&TYPE'='ENTRY' .* &SV LABEL FOR 19-WORD SAVE AREA. LAST WORD IS .* USED BY WATFIV TRACEBACK ROUTINE .* &ENTRY FOR '&TYPE'='ENTRY', OMIT ENTRY STATEMENT .* IF '&ENTRY'='NO' .* &CARG LABEL PREFIX FOR ARGUMENTS FOR CONVERSION ROUTINE .* &CNV FOR '&TYPE'='CSECT' OR 'ENTRY', OMIT CALL TO .* CONVERSION ROUTINE IF '&CNV'='NO' .* &MAXARG MAX NO. OF WORDS IN CONVERTED ARGLIST. IF OMITTED, .* ARGS FOR CONVERSION ROUTINE ARE NOT GENERATED .* &MAXRET MAX NO. OF STATEMENT-NUMBER ARGUMENTS .* .* NOTES (1) REGISTERS 11 AND 12 SHOULD NOT BE ALTERED .* (2) THIS ENTRY AND RETURN LINKAGE IS COMPATIBLE .* WITH FORTRAN 'G' LINKAGE .* (3) THIS CODING IS INDEPENDENT OF DISPLS IN STARTA .* .* LCLC &R,&FR,&NN &R SETC '&RPREF' &FR SETC '&FRPREF' &NN SETC '&SYSNDX' .* .* AIF ('&TYPE' NE 'ENTRY').B7 AIF (K'&NAME EQ 0 OR K'&NAME GT 6).NAMERR &NAME DC 0H'0' ENTRY POINT AIF ('&ENTRY' EQ 'NO').B2 ENTRY &NAME AGO .B2 .B7 AIF ('&TYPE' NE 'CSECT').B1 AIF (K'&NAME EQ 0 OR K'&NAME GT 6).NAMERR &NAME CSECT .B2 USING *,&R.15 TEMPORARY BASE REG B ST&NN DC AL1(7) NM&NN DC CL7'&NAME' ST&NN STM &R.14,&R.12,12(&R.13) SAVE REGISTERS AIF ('&TYPE' NE 'ENTRY').B11 DROP &R.11 L &R.11,=A(&BASE) DROP &R.15 USING &BASE,&R.11 .B11 LA &R.10,&SV LINK SAVE AREAS ST &R.13,4(0,&R.10) ST &R.10,8(0,&R.13) LR &R.13,&R.10 LA &R.10,NM&NN-2 SET NAME PTR FOR TRACEBACK ST &R.10,&SV+72 AIF ('&TYPE' EQ 'ENTRY').B10 BAL &R.11,GO&NN SET ISN PTR AND BASE DROP &R.15 USING *,&R.11 &BASE DC H'0' ISN FOR TRACEBACK GO&NN DC 0H'0' .B10 AIF ('&CNV' NE 'NO').B4 .* .* .B1 AIF ('&TYPE' NE 'ARGS').B3 &NAME ST &R.1,&CARG STORE ARGLIST POINTER AGO .B5 .B4 ST &R.1,&CARG STORE ARGLIST POINTER .B5 L &R.15,=V(W5ARG#) CALL ARGLIST CONVERSION RTN LA &R.1,&CARG BALR &R.14,&R.15 AIF ('&MAXARG' EQ '').B3 B AR&NN BRANCH AROUND STORAGE &CARG DC A(0) ARG LIST FOR CONVERSION RTN DC A(&CARG.FT) ADDR OF NEW ARGLIST DC A(&CARG.MX) ADDR OF MAX ARGS DC A(&CARG.LN) ADDR OF LENGTH LIST DC A(&CARG.RT) ADDR OF RETURN ADDR LIST DC A(&CARG.MR) ADDR OF MAX RET. ADDRS &CARG.MX DC A(&MAXARG) MAX NO. OF NEW ARGS &CARG.MR DC A(&MAXRET) MAX NO. OF RET.ADDRS &CARG.FT DS (&MAXARG)F NEW ARG LIST &CARG.LN DS (&MAXARG)F LENGTH LIST &CARG.RT DS (&MAXRET)F RETURN ADDR LIST AR&NN DC 0H'0' .* .* .B3 AIF ('&TYPE' NE 'RETURN').OUT &NAME SDR &FR.6,&FR.6 ZERO FL-PT REG 6 L &R.13,4(0,&R.13) RETURN LINKAGE LM &R.2,&R.12,28(&R.13) L &R.14,12(0,&R.13) MVI 12(&R.13),X'FF' SR &R.15,&R.15 BR &R.14 &SV DC 19F'0' EXTRA WORD IS FOR TRACEBACK AGO .OUT .* .* .NAMERR MNOTE 8,'WLINK MACRO - INVALID NAME &NAME' .* .* .OUT MEND