REXXFUN2 AMODE 31 REXXFUN2 RMODE ANY * --------------------------------------------------------------------- * REXX demo: Writing External Function Code * determines current time and sets the * REXX variables HOUR, MINUTE, AND SECOND * Invocation sample: res = REXXFUN2() * --------------------------------------------------------------------- REXXFUN2 CSECT R0 EQU 0 ADDRESS OF ENVIRONMENT BLOCK R1 EQU 1 PARAMETER REGISTER R2 EQU 2 ADDR. OF EXT. FUNCT. PAR. LIST R3 EQU 3 R6 EQU 6 R7 EQU 7 WORK REGISTER R8 EQU 8 ADDRESS OF ARGUMENT LIST R9 EQU 9 ADDRESS OF EVALUATION BLOCK R10 EQU 10 BASE REGISTER R11 EQU 11 ADDRESS OF SHARED VARIABLE BLOCK R12 EQU 12 R13 EQU 13 ADDRESS OF CALLER SAVEAREA R14 EQU 14 ADDRESS OF CALLER RETURN POINT R15 EQU 15 RETURN CODE * -------------start of module processing------------------------------ STM R14,R12,12(R13) BALR R10,R0 USING *,R10 BASE REG 10 B GOON EYECAT1 DC CL16'****REXXFUN2****' * -------------initialization------------------------------------------ GOON LA R11,SAVEALL SAVE AREA HANDLING ST R13,4(R11) SAVE AREA HANDLING ST R11,8(R13) SAVE AREA HANDLING LR R13,R11 SAVE AREA HANDLING LR R2,R1 USING EFPL,R2 POINT TO PARMLIST ST R0,ENVB_PTR ADDRESS OF ENVIRONMENT BLOCK * -------------time handling------------------------------------------- STCK TOD STORE TIME-OF-DAY VALUE LM R0,R1,TOD GETIME STANDARD,CLOCK=YES CREATE PACKED DECIMAL HHMMSS ST R1,PCKDTIME UNPK UNPKTIME,PCKDTIME CONVERT INTO CHARACTERS OI UNPKTIME+7,X'F0' * -------------determine address of module ARXEXCOM-------------------- L R15,ENVB_PTR USING ENVBLOCK,R15 L R15,ENVBLOCK_IRXEXTE REXX VECTOR OF EXTERNAL ENTRIES USING ARXEXTE,R15 L R15,ARXEXCOM ST R15,MODADDR ADDRESS OF MODULE ARXEXCOM * -------------store values into REXX variables------------------------ LA R11,SHVSTOR USING SHVBLOCK,R11 LA R3,HOUR_VAR ST R3,SHVNAMA ADDRESS OF VARIABLE NAME 'HOUR' MVC SHVNAML,=F'4' LENGTH OF VARIABLE NAME 'HOUR' LA R3,UNPKTIME+2 ST R3,SHVVALA ADDRESS OF HOUR-VALUE MVC SHVVALL,=F'2' LENGTH OF HOUR-VALUE BAL R6,SETUPPRM SET UP ARXEXCOM PARAMETERS BALR R14,R15 INVOKE ARXEXCOM LA R3,MINU_VAR ST R3,SHVNAMA ADDR. OF VARIABLE NAME 'MINUTE' MVC SHVNAML,=F'6' LENGTH OF VARIABLE NAME 'MINUTE' LA R3,UNPKTIME+4 ST R3,SHVVALA ADDRESS OF MINUTE-VALUE MVC SHVVALL,=F'2' LENGTH OF MINUTE-VALUE BAL R6,SETUPPRM SET UP ARXEXCOM PARAMETERS BALR R14,R15 INVOKE ARXEXCOM LA R3,SECO_VAR ST R3,SHVNAMA ADDR. OF VARIABLE NAME 'SECOND' MVC SHVNAML,=F'6' LENGTH OF VARIABLE NAME 'SECOND' LA R3,UNPKTIME+6 ST R3,SHVVALA ADDRESS OF SECOND-VALUE MVC SHVVALL,=F'2' LENGTH OF SECOND-VALUE BAL R6,SETUPPRM SET UP ARXEXCOM PARAMETERS BALR R14,R15 INVOKE ARXEXCOM * -------------function result processing------------------------------ L R9,EFPLEVAL SAVE EVALUATION BLOCK POINTER LA R7,RESULT RETURN VALUE L R9,0(R9) POINT TO EVALBLOCK USING EVALBLOCK,R9 LA R6,X'00000001' SET REPLY LENGTH ST R6,EVALBLOCK_EVLEN STORE REPLY LENGTH IN EVALBLOCK MVC EVALBLOCK_EVDATA(5),0(R7) * -------------end of module processing-------------------------------- L R13,4(R13) LM R14,R12,12(R13) RETURN TO CALLER SR R15,R15 SET R15 TO ZERO BR R14 * -------------set up parameter list for ARXEXCOM---------------------- SETUPPRM MVI SHVCODE,C'S' ' SET VARIABLE FROM GIVEN VALUE MVC PRMLIST1,=F'0' MVC PRMLIST2,=F'0' MVC PRMLIST3,=F'0' MVC PRMLIST4,=F'0' MVC PRMLIST5,=F'0' MVC PRMLIST6,=F'0' LA R7,ARXNAM ST R7,PRMLIST1 LA R7,SHVSTOR ADDRESS OF SHARED VARIABLE AREA ST R7,PRMLIST4 LA R7,ENVB_PTR ADDRESS OF ENVIRONMENT BLOCK ST R7,PRMLIST5 LA R7,TEMPRC ADDRESS OF TEMPORARY RETURN CODE ST R7,PRMLIST6 OI PRMLIST6,X'80' END OF PARAMETER LIST L R0,ENVB_PTR LA R1,PRMLIST1 L R15,MODADDR BR R6 BACK TO CALLER * -------------data---------------------------------------------------- DS 0F SAVEALL DS 18F SAVE AREA ENVB_PTR DS F ADDRESS OF ENVIRONMENT BLOCK TOD DS CL8 AREA FOR TIME-OF-DAY CLOCK PCKDTIME DS CL4 UNPKTIME DS CL8 MODADDR DS F ADDRESS OF MODULE ARXEXCOM HOUR_VAR DC C'HOUR' NAME OF REXX VARIABLE TO SET MINU_VAR DC C'MINUTE' NAME OF REXX VARIABLE TO SET SECO_VAR DC C'SECOND' NAME OF REXX VARIABLE TO SET SHVSTOR DS 32X'00' AREA FOR SHARED VARIABLE BLOCK RESULT DC C'0' RESULT AREA TEMPRC DC F'0' DS 0D ARXNAM DC CL8'ARXEXCOM' DS 0D PARAMETER LIST FOR ARXEXCOM PRMLIST1 DC F'0' PRMLIST2 DC F'0' PRMLIST3 DC F'0' PRMLIST4 DC F'0' PRMLIST5 DC F'0' PRMLIST6 DC F'0' LTORG DS 0F ARXEFPL EXTERNAL FUNCTION PARAMETER LIST ARXEVALB EVALUATION BLOCK ARXENVB REXX ENVIRONMENT BLOCK ARXSHVB SHARED VARIABLE BLOCK ARXEXTE REXX VECTOR OF EXTERNAL ENTRIES END