i am unable to post my entire code in one post. So splitting it into 2 posts.
Please look at my code suggest the changes.
----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN
MVSGPSVC TITLE 'MVS/XA GENERAL PURPOSE SVC - IGC0025B ' 00010011
* PRINT OFF,NOGEN 00020000
MACRO 00030000
PROLOG 00040000
*---------------------------------------------------------------------- 00050000
* * 00060000
* NAME.......... MVSGPSVC (MVS GENERAL PURPOSE SVC) * 00070000
* * 00080000
* FUNCTION...... MULTIFUCTION TYPE-3 USER SVC * 00090000
* (SEE DESCRIPTION BELOW) * 00100000
* * 00110000
* ATTRIBUTES.... REENTRANT REUSEABLE * 00120000
* * 00130000
* MODE:......... RMODE=24 AMODE=31 (MVS/XA COMPATIBLE) * 00140009
* * 00150000
* DEPENDENCIES.. "IOSVSUCB" UCB SCAN SERVICE ROUTINE OF * 00160000
* EITHER MVS SP1.3 OR SP2.1 (AND HIGHER) * 00170000
* THIS DEPENDENCY MAY BE ELIMINATED FOR * 00180000
* SYSTEMS PRIOR TO SP1.3 BY DROPPING THE * 00190000
* UCB SCAN ROUTINE IF NOT NEEDED. * 00200000
* * 00210000
*---------------------------------------------------------------------- 00220000
SPACE 1 00230000
*********************************************************************** 00240000
* * 00250000
* DESCRIPTION: * 00260000
* PERFORM SEVERAL FUNCTIONS AS AN SVC WHICH ARE * 00270000
* CONTROLLED BY ENTRY POINT INDICATOR PASSED IN * 00280000
* R15. THE TYPE OF FUNCTIONS CONTAINED HEREIN * 00290000
* ARE THOSE PECULIAR TO EITHER THE MACHINE OR THE * 00300000
* OPERATING SYSTEM WHICH HAVE A POSSIBILITY OF * 00310000
* FOR CHANGE. BY INCLUDING THSES TYPE OF FUNCTIONS * 00320000
* IN A CENTRAL PLACE (HERE), WHEN CHANGES ARE REQUIRED * 00330000
* THEY MAY BE GLOBALLY CHANGED VIA A SINGLE CHANGE * 00340000
* (HERE). * 00350000
* * 00360000
* ENTRY CODES ARE AS FOLLOWS: * 00370000
* R15=1 - USER SVC TEST VIA LOAD AND BRANCH * 00380000
* R15=2 - DATE, DAY OF WEEK, TIME * 00390000
* R15=3 - SET APF AUTHORIZATION * 00400000
* R15=4 - RESET APF AUTHORIZATION * 00410000
* R15=5 - SMFWTM * 00420000
* R15=6 - UCB LOOKUP (MVS/XA COMPATIBLE) * 00430000
* R15=7 - JCT LOOKUP (CURRENT ASID ONLY), TSUID INFO * 00440000
* R15=8 - JES JOBID ADDRESS * 00450000
* R15=9 - JES INPUT DEVICE ADDRESS * 00460000
* R15=10 - FULL SCREEN TPUT CLEAR * 00470000
* R15=11 - CALENDAR TO JULIAN DATE CONVERT (FWW) * 00480000
* R15=12 - JULIAN TO CALENDAR DATE CONVERT (FWW) * 00490000
* R15=13 - JULIAN DATE DIFFERENCE CALCULATION (FWW) * 00500000
* R15=14 - UNUSED AT THIS TIME (A B) * 00510000
* R15=15 - UNUSED AT THIS TIME (TEMP USE FOR RACF) * 00520000
* R15=16 - UNUSED AT THIS TIME (OPEN) * 00530000
* R15=17 - UNUSED AT THIS TIME (OPEN) * 00540000
* R15=18 - UNUSED AT THIS TIME (OPEN) * 00550000
* R15=19 - UNUSED AT THIS TIME (OPEN) * 00560000
* * 00570000
* NOTE. * 00580000
* BECAUSE WE ARE AN SVC, THERE IS NO NEED TO SAVE * 00590000
* THE USERS REGISTER (THE SYSTEM HAS ALREADY SAVED * 00600000
* THEM). ALSO, CERTAIN REGISTERS HAVE BEEN PRIMED * 00610000
* FOR US AS FOLLOWS: * 00620000
* * 00630000
* R0 = SAME AS WHEN SVC WAS ISSUED (AT ENTRY TO EXIT) * 00640000
* R1 = SAME AS WHEN SVC WAS ISSUED (AT ENTRY TO EXIT) * 00650000
* R2 = UNPREDICTABLE * 00660000
* R3 = CVT ADDRESS * 00670000
* R4 = TCB ADDRESS(CURRENT) * 00680000
* R5 = SVRB ADDRESS (OURS) * 00690000
* R6 = ENTRY POINT (OUR BASE REG) * 00700000
* R7 = ASCB ADDRESS (CURRENT) * 00710000
* R8 = UNPREDICTABLE * 00720000
* R9 = UNPREDICTABLE * 00730000
* R10 = UNPREDICTABLE * 00740000
* R11 = UNPREDICTABLE * 00750000
* R12 = UNPREDICTABLE * 00760000
* R13 = SAME AS WHEN SVC WAS ISSUED (AT ENTRY TO EXIT) * 00770000
* R14 = RETURN REGISTER (TO SVC RETURN HANDLER) * 00780000
* R15 = SAME AS WHEN SVC WAS ISSUED (AT ENTRY TO EXIT) * 00790000
* * 00800000
* THIS ROUTINE IS LINKEDITED AS AN SVC (TYPE 3) TO * 00810000
* BE INCLUDED VIA 'MLPA' AT IPL TIME. BECAUSE THIS * 00820000
* IS AN SVC, IT MUST REMAIN RE-ENTERABLE. * 00830000
* * 00840000
*********************************************************************** 00850000
MEND 00860000
MACRO 00870000
JCTGET 00880001
.* 00890001
.* FIND OUR JCT (RELEASE DEPENDENT) DKM 00900001
.* 00910000
GBLA &I 00920000
&I SETA &SYSNDX 00930000
.* 00940000
USING JESCT,R2 00950002
USING SSCT,R5 00960002
USING SSVT,R8 00970002
USING SJB,R11 00980005
SPACE 1 00990002
LA R15,16 ASSUME BADNESS, RC=16 01000000
L R2,CVTJESCT ADDR OF JESCT FROM CVT 01010000
CLC JESCTID,=CL4'JEST' VALIDATE CONTROL BLOCK 01020000
BNER R14 INVALID, ERROR RETURN 01030000
SPACE 1 01040000
ICM R5,15,JESSSCT ADDR OF SSCT (1ST SSCT FROM JESCT) 01050000
JCT@&I DS 0H 01060000
BZR R14 INVALID ERROR RETURN, RC=16 01070000
SPACE 1 01080000
CLC SSCTID,=CL4'SSCT' VALIDATE CONTROL BLOCK 01090000
BNER R14 INVALID, ERROR RETURN, RC=16 01100000
CLC SSCTSNAM,=CL4'JES2' CHECK FOR MATCHING SUBSYSTEM NAME 01110000
BE JCT#&I YES, CONTINUE 01120000
SPACE 1 01130000
ICM R5,15,SSCTSCTA GET NEXT SUBSYSTEM SSCT 01140000
B JCT@&I CHECK NEXT 01150000
SPACE 3 01160000
JCT#&I DS 0H 01170000
ICM R8,15,SSCTSUS2 ADDRESS OF SSVT FROM SSCT 01180000
BZR R14 INVALID ERROR RETURN, RC=16 01190000
USING HCCT,R8 01200000
SPACE 1 01210000
LA R15,4 LIGHTEN UP A BIT ... 01220000
ICM R9,15,CCTHASP CHECK IF HASP IS STILL UP 01230000
BNZR R4 RETURN CODE = 4, EXIT 01240000
ICM R9,15,CCTHAVT ADDRESS OF JES2 HAVT 01250000
BNPR R4 NOT THERE, HASP NOT UP, RC=4 01260000
USING PSA,R0 PSA ADDRESS 01270002
L R7,PSAAOLD ADDRESS OF CURRENT ASCB 01280000
LH R15,ASCBASID GET ASID FROM ASCB 01290000
SLL R15,2 MULTIPLY BY 4 01300000
AR R9,R15 ADDRESS OF OUR HAVT ENTRY 01310000
SPACE 1 01320000
* ------------------------------------------------------------------- * 01330000
* CHAIN TO THE SJB VIA THE HASB * 01340000
* ------------------------------------------------------------------- * 01350000
ICM R11,15,0(R9) ADDRESS OF HASB FROM JES2 HAVT 01360000
BNPR R4 NOT THERE, SPECIAL SYSTEM TASK 01370000
USING HASB,R11 ESTABLISH ADDRESSABILITY 01380000
CLC HSBID,=C'HASB' VALIDATE HASB 01390000
BNER R4 INVALID, RETURN 01400000
ICM R11,15,HSBSJB ADDRESS OF SJB FROM HASB 01410000
DROP R11 DROP USING ON HSB 01420000
BNPR R4 NOT THERE, SPECIAL SYSTEM TASK 01430000
USING SJB,R11 ESTABLISH ADDRESSABILITY 01440000
SPACE 1 01450000
CLC SJBID,=CL4'SJB' VALIDATE SJB CONTROL BLOCK 01460000
BNER R14 INVALID, RETURN 01470000
SPACE 1 01480000
ICM R15,15,SJBSJB ADDRESS OF DEPENDENT SJB 01490000
BZ JCTNB&I NONE, NOT BATCH 01500000
LR R11,R15 INITIATOR'S DEPENDENT SJB 01510000
SPACE 1 01520000
JCTNB&I DS 0H 01530000
L R10,SJBJCT JOBS JCT 01540000
LA R15,16 ONE MORE VALIDATION ... 01550000
CLC JCTID,=CL4'JCT ' VALID JCT?? 01560000
BNER R14 NO? OUTTA HERE... 01570000
SR R15,R15 SET HAPPY CAMPER MODE 01580000
MEND 01590000
EJECT 01600000
*********************************************************************** 01610000
* * 01620000
* INITIAL ENTRY POINT (DRIVER FOR SUBROUTINES). * 01630000
* THIS ROUTINE CHECKS FOR A VALID ENTRY POINT INDICATOR * 01640000
* PASSED IN R15. IF IT IS VALID, R6 IS SET TO THE * 01650000
* APPROPRIATE ENTRY POINT ADDRESS AND CONTROL IS PASSED * 01660000
* TO TO THE ROUTINE. IF IT IS INVALID, IT MERELY RETURNS * 01670000
* TO THE CALLER VIA R14. * 01680000
* * 01690000
* DATA AREAS REQUIRED BY A SINGLE ROUTINE SHOULD BE INCLUDED * 01700000
* AT THE END OF THAT ROUTINE (FOR ADDRESSABILIY REASONS). * 01710000
* THOSE THAT ARE USED BY MULTIPLE ROUTINES SHOULD BE INCLUDED * 01720000
* AT THE END OF THE LAST ROUTINE TO USE IT (OR AT THE END * 01730000
* OF THE CODE). BY DOING THIS, EACH ROUTINE IS ALMOST * 01740000
* INDEPENDENT OF OTHER FUNCTIONS AND THUS MAY BE REMOVED * 01750000
* OR OTHERS ADDED WITH LITTLE CONCERN FOR DUPLICATION AND/OR * 01760000
* RELATIONAL DEPENDENCIES. * 01770000
* * 01780000
*********************************************************************** 01790000
MVSGPSVC AMODE 31 01800009
MVSGPSVC RMODE ANY 01810010
MVSGPSVC CSECT 01820000
USING MVSGPSVC,R6 USE R6 FOR CSECT BASE REGISTER 01830000
USING CVT,R3 PERPETUAL USE R3 FOR CVT DSECT BASE REG 01840000
USING TCB,R4 PERPETUAL USE R4 FOR TCB DSECT BASE REG 01850000
USING ASCB,R7 PERPETUAL USE R7 FOR ASCB DSECT BASE REG 01860000
LTR R15,R15 CHECK FOR POSITIVE EP INDICATOR 01870000
BNP NOP IF NOT POSITIVE, GO TO NOP 01880000
LA R2,EPCNT LOAD R2 WITH NO OF VALID EP'S 01890000
CR R15,R2 CHECK FOR VALID EP INDICATOR 01900000
BH NOP IF INVALID, GO TO NOP 01910000
SLL R15,2 MULTIPLY EP INDICATOR BY 4 01920000
L R6,EPTABLE-4(R15) SET R6=A(ROUTINE ENTRY POINT) 01930000
BR R6 GO TO APPROPRIATE ENTRY POINT 01940000
NOP BR R14 RETURN TO SVC HANDLER 01950000
* 01960000
EPTABLE DC A(SVCTEST) 1 SVCTEST ROUTINE 01970000
DC A(TIME) 2 TIME ROUTINE 01980000
DC A(AUTHSET) 3 AUTHSET ROUTINE 01990000
DC A(AUTHRSET) 4 AUTHRSET ROUTINE 02000000
DC A(SMFWTM) 5 SMFWTM ROUTINE 02010000
DC A(UCBLOOK) 6 UCBLOOK ROUTINE 02020000
DC A(JCTLOOK) 7 JCTLOOK ROUTINE 02030000
DC A(JESJOBID) 8 JESJOBID ROUTINE 02040000
DC A(JESINDEV) 9 JESINDEV ROUTINE 02050000
DC A(CLEAR) 10 TSO CLEAR SCREEN ROUTINE 02060000
DC A(CALJUL) 11 DATE CONVERSION ROUTINE 02070000
DC A(JULCAL) 12 DATE CONVERSION ROUTINE 02080000
DC A(JULDIF) 13 DATE DIFFERENCE ROUTINE 02090000
DC A(NOP) 14 (UNUSED AT THIS TIME) 02100000
DC A(XACF) 15 (UNUSED AT THIS TIME) 02110000
DC A(NOP) 16 (UNUSED AT THIS TIME) 02120000
DC A(NOP) 17 (UNUSED AT THIS TIME) 02130000
DC A(NOP) 18 (UNUSED AT THIS TIME) 02140000
DC A(NOP) 19 (UNUSED AT THIS TIME) 02150000
EPCNT EQU (*-EPTABLE)/4 NUMBER OF VALID ENTRY POINTS 02160000
LTORG 02170000
DROP R6 DROP USE OF R6 BASE REGISTER 02180000
*********************************************************************** 02190000
* * 02200000
* THE FOLLOWING ARE THE MVS GP SVC SUBROUTINES * 02210000
* * 02220000
*********************************************************************** 02230000
EJECT 02240000
*********************************************************************** 02250000
* * 02260000
* THIS ROUTINE SETS UP THE ENVIRONMENT TO TEST USER * 02270000
* WRITTEN SVC'S. IN ORDER TO USE THIS FUNCTION, A DRIVER * 02280000
* PROGRAM MUST BE USED WHICH WILL POINT R1 AT A FOUR WORD * 02290000
* LIST WHICH CONTAINS THE ENTRY POINT OF THE PRELOADED SVC * 02300000
* MODULE FOLLOWED BY VALUES FOR R15/0/1 AS THEY SHOULD BE * 02310000
* AT ENTRY TO THE SVC. THIS ROUTINE MERELY LOADS R6 WITH * 02320000
* WORD0, R15 WITH WORD1, R0 WITH WORD2, R1 WITH WORD3, AND * 02330000
* BRANCHES ON R6. * 02340000
* * 02350000
* REGISTERS UPON ENTRY. * 02360000
* R0 = IGNORED * 02370000
* R1 = ADDRESS OF 4 WORD AREA, FULLWORD ALLIGNED * 02380000
* A(BASE) A(PARM-R15) A(PARM-R1) A(PARM-R0) * 02390000
* R15 = 1 * 02400000
* * 02410000
* REGISTERS UPON RETURN. * 02420000
* R0 = DETERMINED BY SVC UNDER TEST * 02430000
* R1 = DETERMINED BY SVC UNDER TEST * 02440000
* R15 = DETERMINED BY SVC UNDER TEST * 02450000
* * 02460000
*********************************************************************** 02470000
SVCTEST DS 0H SVCTEST ENTRY 02480000
USING SVCTEST,R6 BASE FOR SUBROUTINE 02490000
USING PSCB,R10 ESTABLISH ADDRESSABILITY 02500000
USING IEZJSCB,R11 ESTABLISH ADDRESSABILITY 02510000
L R11,TCBJSCB GET JSCB ADDRESS 02520000
ICM R15,15,ASCBTSB GET TSB ADDRESS 02530000
BZ SVCTERR NO TSB = BATCH, NOT SUPPORTED 02540000
L R10,JSCBPSCB GET PSCB ADDRESS 02550000
TM PSCBATR1,X'80' CHECK FOR OPER CAPABILITY 02560000
BZ SVCTERR NO, INVALID REQUEST 02570000
L R6,0(R1) SET UP BASE FOR TEST ROUTINE 02580000
LM R15,R1,4(R1) SET UP R15,R0,R1 FOR TEST ROUTINE 02590000
BR R6 BRANCH TO PRELOADED SVC 02600000
SVCTERR L R15,=F'-1' SET RETURN CODE 02610000
LR R0,R15 COPY TO R0 02620000
LR R1,R15 AND TO R1 02630000
BR R14 AND GIVE IT TO HIM 02640000
LTORG 02650000
DROP R10 DROP DSECT ADDRESSABILITY 02660000
DROP R11 DROP DSECT ADDRESSABILITY 02670000
DROP R6 DROP USE OF R6 BASE REGISTER 02680000
EJECT 02690000
*********************************************************************** 02700000
* * 02710000
* THIS ROUTINE SUPPLIES THE REQUESTOR WITH THE DATE, DAY * 02720000
* OF WEEK, AND TIME. IF THE CURRENT TIME IS NEEDED, REG1 * 02730000
* UPON ENTRY MUST BE A POSITIVE ADDRESS AND POINT TO A 5 * 02740000
* WORD AREA ALLIGNED ON A DOUBLEWORD. IF TIME IS TO BE * 02750000
* OBTAINED FROM A PREVIOUS STCK INSTRUCTION, REG1 UPON * 02760000
* ENTRY MUST BE NEGATIVE AND ITS COMPLIMENT MUST POINT TO * 02770000
* A 7 WORD AREA ALLIGNED ON A DOUBLEWORD, THE FIRST 2 * 02780000
* WORDS CONTAINING THE STCK DATA. THE STORAGE AREA * 02790000
* POINTED TO BY REG1 IS CHECKED FOR VALIDITY AND * 02800000
* ALLIGNMENT. * 02810000
* * 02820000
* REGISTERS UPON ENTRY. * 02830000
* CURRENT TIME REQUEST. * 02840000
* R0 = UNUSED * 02850000
* R1 = ADDRESS OF 5 WORD AREA, DOUBLEWORD ALLIGNED * 02860000
* R15 = 2 * 02870000
* STCK DATA SUPPLIED. * 02880000
* R0 = UNUSED * 02890000
* R1 = COMPLIMENT OF ADDRESS OF 7 WORD AREA, * 02900000
* DOUBLEWORD ALLIGNED * 02910000
* R15 = 2 * 02920000
* * 02930000
* REGISTERS UPON RETURN. * 02940000
* AREA VALID AND PROPERLY ALLIGNED. * 02950000
* R0 = UNCHANGED * 02960000
* R1 = UNCHANGED * 02970000
* R15 = 0 * 02980000
* RETURN AREA. * 02990000
* +0 = MM/DD/YY DATE * 03000000
* +8 = X DAY OF WEEK OFFSET (0=MONDAY) * 03010000
* +9 = HH.MM.SS.TH TIME * 03020000
* AREA NOT VALID OR NOT PROPERLY ALLIGNED. * 03030000
* R0 = UNCHANGED * 03040000
* R1 = UNCHANGED * 03050000
* R15 = 8 * 03060000
* RETURN AREA. * 03070000
* UNCHANGED * 03080000
* * 03090000
*********************************************************************** 03100000
TIME DS 0H TIME ENTRY 03110000
USING TIME,R6 BASE FOR SUBROUTINE 03120000
USING RBBASIC,R5 ESTABLISH ADDRESSABILITY 03130000
USING TWORK,R15 ESTABLISH ADDRESSABILITY 03140000
TIME1000 LR R8,R1 SET R8=A(PASSED AREA) 03150000
LR R15,R1 SET R15=A(ANSWER AREA) 03160000
LTR R8,R8 CHECK FOR NEGATIVE 03170000
BNM TIME1100 IF NOT NEGATIVE, GO TO TIME1100 03180000
LCR R8,R8 SET ADDRESS POSITIVE 03190000
LA R15,8(R8) SET R15=A(ANSWER AREA) 03200000
TIME1100 SR R9,R9 RESET R9 FOR DOUBLE SHIFT 03210000
SRDL R8,3 SHIFT FOR ALLIGNMENT TEST 03220000
LTR R9,R9 CHECK R9 FOR ANY BITS ON 03230000
BNZ TIMERT08 IF ANY ON, NOT ALLIGNED, GO TO 8 RT 03240000
SRDL R8,29 SHIFT REST FOR USE AS ADDRESS 03250000
L R5,RBLINK SET R5=A(PREVIOUS RB) 03260000
IC R8,RBOPSW+1 SET R9=REQUESTOR'S PROTECT KEY 03270000
SRL R8,3 SHIFT OUT UNUSED BITS 03280000
BAL R2,TIME1900 LINK TO VALIDITY CHECK ROUTINE 03290000
LA R9,23(R15) SET R8=A(LAST BYTE IN AREA) 03300000
BAL R2,TIME1900 LINK TO VALIDITY CHECK ROUTINE 03310000
B TIME2000 GO TO TIME2000 03320000
TIME1900 LRA R9,0(R9) LOAD REAL ADDRESS INTO R9 03330000
BNZ TIMERT08 IF INVALID, GO TO 8 RETURN 03340000
LTR R8,R8 CHECK FOR REQUESTOR IN KEY0 03350000
BZR R2 IF KEY0, RETURN TO INVOKING AREA 03360000
SRL R9,4 SHIFT TO ZERO UNWANTED REAL BITS 03370000
SLL R9,4 RESTORE WITH BITS 28-31=0 03380000
SR R10,R10 RESET R10 FOR SUBSEQUENT ISK 03390000
ISK R10,R9 INSERT STORAGE KEY INTO R10 03400000
SRL R10,3 SHIFT OUT UNUSED BITS FOR COMPARE 03410000
CR R8,R10 CHECK FOR KEY MATCH 03420000
BER R2 IF EQUAL, RETURN TO INVOKING AREA 03430000
B TIMERT08 IF NO MATCH, GO TO 8 RETURN 03440000
TIME2000 LCR R8,R1 SET R8=0-R1 03450000
BNM TIME2110 IF NOT NEG, R1 NEG, GO TO TIME2110 03460000
TIME2100 STCK TW00L08 STORE CLOCK IN TW00L08 03470000
L R8,CVTTZ SET R8=CVTTZ, TIME ZONE DIFFERENTIAL 03480000
B TIME2120 GO TO TIME2120 03490000
TIME2110 MVC TW00L08,0(R8) MOVE PASSED STCK DATA TO TW00L08 03500000
SR R8,R8 SET R8=0, TIME ZONE DIFFERENTIAL 03510000
TIME2120 A R8,TW00L04 ADD STCK DATA WORD 0 TO R8 03520000
L R9,TW04L04 SET R9=STCK DATA WORD 1 03530000
SRDL R8,12 SET R8,R9=TIME IN MICROSECONDS 03540000
AL R9,CTIF5000 ADD 5000 MSECS FOR ROUNDING 03550000
BC 12,TIME2130 IF NO CARRY, GO TO TIME2130 03560000
AH R8,CTIH0001 ADD 1 TO R8 FOR CARRY 03570000
TIME2130 D R8,CTIF060M SET R8=REM MSECS, R9=MINS 03580000
SR R10,R10 RESET R10 FOR SUBSEQUENT DIVIDE 03590000
LR R11,R8 SET R8=REM MSECS 03600000
D R10,CTIF010K SET R11=HSECS 03610000
CVD R11,TW00L08 CONVERT HSECS TO DECIMAL 03620000
UNPK TW16L04,TW00L08 UNPACK INTO BYTE 16 03630000
MVC TW15L02,TW16L02 MOVE SECS TO ANSWER AREA 03640000
SR R8,R8 RESET R8 FOR SUBSEQUENT DIVIDE 03650000
D R8,CTIF0060 SET R8=REM MINS, R9=HRS 03660000
CVD R8,TW00L08 CONVERT MINS TO DECIMAL 03670000
UNPK TW12L02,TW00L08 UNPACK MINS INTO ANSWER AREA 03680000
SR R8,R8 RESET R8 FOR SUBSEQUENT DIVIDE 03690000
D R8,CTIF0024 SET R8=REM HRS, R9=DAYS 03700000
CVD R8,TW00L08 CONVERT HRS TO DECIMAL 03710000
UNPK TW09L02,TW00L08 UNPACK HRS INTO ANSWER AREA 03720000
TIME2200 SR R10,R10 RESET R10 FOR SUBSEQUENT DIVIDE 03730000
LR R11,R9 SET R11=DAYS 03740000
D R10,CTIF0007 SET R10=DAY OF WEEK OFFSET 03750000
STC R10,TW08L01 SAVE BINARY OFFSET IN ANSWER AREA 03760000
TIME2300 SH R9,CTIH0365 SUBTRACT 365 DAYS FOR 1900 03770000
BNM TIME2310 IF NOT NEG, GO TO TIME2310 03780000
AH R9,CTIH0365 ADD 365 DAYS FOR 1900 03790000
SLDL R8,32 SET R8=JDAY-1, R9=00, YEAR 03800000
B TIME2340 GO TO TIME2340 03810000
TIME2310 SR R8,R8 RESET R8 FOR SUBSEQUENT DIVIDE 03820000
D R8,CTIF1461 SET R8=JDAY (4YR), R9=4YR COUNT-1 03830000
SLL R9,2 SET R9=YR-1 03840000
LA R9,1(R9) SET R9=YR 03850000
LA R12,3 SET R12=3, BCT COUNT 03860000
TIME2320 SH R8,CTIH0365 SUBTRACT 1 YR'S DAYS 03870000
BM TIME2330 IF NEG, GO TO TIME2330 03880000
LA R9,1(R9) INCREMENT R9, YR 03890000
BZ TIME2340 IF R8=0, GO TO TIME2340 03900000
BCT R12,TIME2320 GO BACK TO TIME2320 AT MOST 2 TIMES 03910000
B TIME2340 AFTER 2ND TIME, GO TO TIME2340 03920000
TIME2330 AH R8,CTIH0365 ADD TO MAKE NEG POS 03930000
TIME2340 LA R8,1(R8) MAKE JDAY RELATIVE TO 1 03940000
CVD R9,TW00L08 CONVERT YR TO DECIMAL 03950000
UNPK TW06L02,TW06L02 UNPACK YEAR 03960000
ICM R11,3,TW06L02 SAVE UNPACKED YR IN R11 03970000
LA R12,TDTBLNLP SET R12=A(NON-LEAP YEAR TABLE) 03980000
SLL R9,30 SHIFT OUT BITS 0-29 03990000
LTR R9,R9 CHECK FOR ANY REMAINING BITS 04000000
BNZ TIME2350 IF ANY LEFT, GO TO TIME2350 04010000
LA R12,TDTBLLP SET R12=A(LEAP YEAR TABLE) 04020000
TIME2350 SR R10,R10 RESET R10 FOR SUBSEQUENT IC'S 04030000
TIME2360 IC R10,0(R9,R12) SET R10=DA/MO FROM TABLE 04040000
LA R9,1(R9) INCREMENT R9, MONTH 04050000
SR R8,R10 SUBTRACT DA/MO FROM R8 DA 04060000
BP TIME2360 IF STILL POS, GO TO TIME2360 04070000
AR R8,R10 ADD DA/MO TO MAKE POS 04080000
CVD R8,TW00L08 CONVERT DA TO DECIMAL 04090000
UNPK TW06L02,TW06L02 UNPACK DA 04100000
ICM R11,12,TW06L02 SAVE UNPACKED DA IN R11 04110000
CVD R9,TW00L08 CONVERT MO TO DECIMAL 04120000
UNPK TW00L02,TW06L02 UNPACK MO INTO ANSWER AREA 04130000
STCM R11,12,TW03L02 STORE DA INTO ANSWER AREA 04140000
STCM R11,3,TW06L02 STORE YR INTO ANSWER AREA 04150000
MVZ TW01L19,TW00L19 MOVE ALL F ZONES TO ANSWER AREA 04160000
MVI TW02L01,C'/' MOVE '/' BETWEEN DATE MM DD 04170000
MVI TW05L01,C'/' MOVE '/' BETWEEN DATE DD YY 04180000
NI TW08L01,X'0F' AND OFF F ZONE 04190000
MVI TW11L01,C'.' MOVE '.' BETWEEN TIME HH MM 04200000
MVI TW14L01,C'.' MOVE '.' BETWEEN TIME MM SS 04210000
MVI TW17L01,C'.' MOVE '.' BETWEEN TIME SS TH 04220000
TIMERT00 SR R15,R15 SET RETURN CODE=0 04230000
BR R14 RETURN TO SVC HANDLER 04240000
TIMERT08 LA R15,8 SET RETURN CODE=8 04250000
BR R14 RETURN TO SVC HANDLER 04260000
CTIF0007 DC F'7' 04270000
CTIF0024 DC F'24' 04280000
CTIF0060 DC F'60' 04290000
CTIF1461 DC F'1461' 04300000
CTIF5000 DC F'5000' 04310000
CTIF010K DC F'10000' 04320000
CTIF060M DC F'60000000' 04330000
CTIH0001 DC H'1' 04340000
CTIH0365 DC H'365' 04350000
TDTBLLP DC AL1(31,29,31,30,31,30,31,31,30,31,30,31) 04360000
TDTBLNLP DC AL1(31,28,31,30,31,30,31,31,30,31,30,31) 04370000
LTORG 04380000
DROP R5 DROP USE OF R5 DSECT BASE REGISTER 04390000
DROP R6 DROP USE OF R6 BASE REGISTER 04400000
DROP R15 DROP USE OF R15 DSECT BASE REGISTER 04410000
EJECT 04420000
*********************************************************************** 04430000
* * 04440000
* THIS ROUTINE WILL PROVIDE MODESET AUTHORIZATION. IT IS * 04450000
* THEN THE USER'S RESPONSIBILITY TO ISSUE A MODESET MACRO * 04460000
* IN ORDER TO GAIN SUPERVISOR STATE OR KEY ZERO. UPON * 04470000
* ENTRY REGISTER ONE MUST POINT TO THE CHARACTERS 'AUTH'. * 04480000
* FOR TIME SHARING USERS ONLY, THE ISSUER OF THE SVC * 04490000
* (CALLER) MUST EITHER HAVE OPER CAPABILITY OR RESIDE IN * 04500000
* THE LINK PACK AREA (OR MLPA). THIS IS TO INSURE THAT * 04510000
* TSO USERS DO NOT ATTEMPT TO VIOLATE OUR SECURITY BY * 04520000
* INVOKING EITHER DIRECTLY OR UNDER TEST. * 04530000
* * 04540000
* REGISTERS UPON ENTRY. * 04550000
* R0 = UNUSED * 04560000
* R1 = ADDRESS 'AUTH' LITERAL * 04570000
* R15 = 3 * 04580000
* * 04590000
* REGISTERS UPON RETURN. * 04600000
* R1 UPON ENTRY ==> C'AUTH' AND (USER HAS OPER OR NON TSO) * 04610000
* R0 = UNCHANGED * 04620000
* R1 = UNCHANGED * 04630000
* R15 = 0 * 04640000
* JSCBOPTS, BIT 7 SET * 04650000
* R1 UPON ENTRY NOT ==> C'AUTH' OR INVALID TSO USER * 04660000
* R0 = UNCHANGED * 04670000
* R1 = UNCHANGED * 04680000
* R15 = 8 * 04690000
* VIOLATION MESSAGE WRITTEN TO OPERATOR * 04700000
* * 04710000
*********************************************************************** 04720000
AUTHSET DS 0H AUTHSET ENTRY 04730000
USING WTO,R1 ESTABLISH ADDRESSABILITY 04740000
USING RBBASIC,R5 ESTABLISH ADDRESSABILITY 04750000
USING AUTHSET,R6 BASE FOR SUBROUTINE 04760000
USING PSCB,R10 ESTABLISH ADDRESSABILITY 04770000
USING IEZJSCB,R11 ESTABLISH ADDRESSABILITY 04780000
USING TIOT,R12 ESTABLISH ADDRESSABILITY 04790000
LR R8,R0 SAVE R0 IN R8 04800000
LR R9,R1 SAVE R1 IN R9 04810000
CLC AUTH,0(R1) CHECK FOR R1 POINTING AT 'AUTH' 04820000
BNE AUTSRT08 IF NOT, GO TO 8 RETURN 04830000
L R11,TCBJSCB SET R11=A(JSCB) 04840000
ICM R15,15,ASCBTSB SET R15=A(TSB) 04850000
BZ AUTSRT00 IF NOT TSO, GO TO 0 RETURN 04860000
L R10,JSCBPSCB SET R10=A(PSCB) 04870000
TM PSCBATR1,X'80' CHECK FOR OPER CAPABILITY 04880000
BO AUTSRT00 IF OPER, GO TO 0 RETURN 04890000
L R5,RBLINK SET R5=A(PREVIOUS RB) 04900000
L R15,RBOPSW+4 GET INTERUPT ADDRESS FROM RB PSW 04910000
TM CVTDCB,X'80' IS THIS MVS XA ? 04920000
BO AUTCHK01 YES, CHECK ADDRESS 04930000
AUTCHK00 LA R15,0(R15) CLEAR HIGH ORDER BYTE 04940000
C R15,CVTSHRVM CHECK FOR REQ FROM CSA OR ABOVE 04950000
BL AUTSRT08 BELOW CSA, INVALID REQUEST 04960000
B AUTSRT00 ABOVE, ALLOW REQUEST 04970000
AUTCHK01 TM RBOPSW+4,X'80' EXECUTING IN 31 BIT MODE? 04980000
BZ AUTCHK00 NO, CHECK ADDRESS 04990000
N R15,MASK31 STIP HIGH ORDER BIT 05000000
C R15,CVTSHRVM CHECK FOR REQ FROM CSA OR ABOVE 05010000
BL AUTSRT08 BELOW CSA, INVALID REQUEST 05020000
* L R10,CVTVSTGX ADDRESS OF XA STG MAP 05030000
L R10,X'4AC'(R3) ( COMPATIBILITY WITH SP1.3 ) 05040000
* USING CVTVSTGX,R10 ADDRESSABILITY 05050000
* C R15,CVTEMLPE CHECK IF BEYOND EXTENDED MLPA 05060000
C R15,X'4C'(R10) ( COMPATIBILITY WITH SP1.3 ) 05070000
BH AUTSRT08 ABOVE EXTENDED MLPA, INVALID REQ 05080000
AUTSRT00 OI JSCBOPTS,X'01' SET MODESET AVAILABLE BIT 05090000
SR R15,R15 SET R15=0, RETURN CODE 05100000
BR R14 RETURN TO SVC HANDLER 05110000
AUTSRT08 LA R0,256 SET R0=256, GETMAIN LENGTH 05120000
GETMAIN R,LV=(0) GET STORAGE FOR WTO 05130000
LR R2,R1 SAVE AREA ADDRESS IN R2 05140000
MVC WTO(CAUWTOLN),CAUWTO MOVE WTO DATA TO GOTTEN AREA 05150000
L R12,TCBTIO SET R12=A(TIOT) 05160000
MVC WTOMSG+30(8),TIOCNJOB MOVE JOBNAME TO WTOMSG 05170000
WTO MF=(E,(1)) ISSUE WTO 05180000
LA R0,256 SET R0=256, FREEMAIN LENGTH 05190000
LR R1,R2 SET R1=A(GOTTEN AREA) 05200000
FREEMAIN R,LV=(0),A=(1) FREE GOTTEN STORAGE 05210000
LR R0,R8 RESTORE ORIGINAL R0 FROM R8 05220000
LR R1,R9 RESTORE ORIGINAL R1 FROM R9 05230000
LA R15,8 SET R15=8, RETURN CODE 05240000
BR R14 RETURN TO SVC HANDLER 05250000
CAUWTO DC 0F'0',AL2(CAUWTOLN-4),XL2'8000' TEXT LENGTH, MCS CODES 05260000
DC CL50'SECURITY VIOLATION ATTEMPT BY XXXXXXXX - NOTIFY TE' 05270000
DC CL15'CHNICAL SUPPORT' 05280000
DC XL4'4000C080' DESCRIPTOR CODES, ROUT CODES 05290000
CAUWTOLN EQU *-CAUWTO 05300000
AUTH DC CL4'AUTH' 05310000
DS 0F 05320000
MASK31 DC X'7FFFFFFF' 05330000
MVSGPSVC CSECT 05340000
LTORG 05350000
DROP R1 DROP USE OF R1 BASE REGISTER 05360000
DROP R5 DROP USE OF R5 BASE REGISTER 05370000
DROP R6 DROP USE OF R6 BASE REGISTER 05380000
DROP R10 DROP USE OF R10 BASE REGISTER 05390000
DROP R11 DROP USE OF R11 BASE REGISTER 05400000
DROP R12 DROP USE OF R12 BASE REGISTER 05410000
EJECT 05420000
*********************************************************************** 05430000
* * 05440000
* THIS ROUTINE WILL DISALLOW MODESET AUTHORIZATION. * 05450000
* * 05460000
* REGISTERS UPON ENTRY. * 05470000
* R0 = UNUSED * 05480000
* R1 = UNUSED * 05490000
* R15 = 4 * 05500000
* * 05510000
* REGISTERS UPON RETURN. * 05520000
* R0 = UNCHANGED * 05530000
* R1 = UNCHANGED * 05540000
* R15 = 0 * 05550000
* JSCBOPTS, BIT 7 RESET * 05560000
* * 05570000
*********************************************************************** 05580000
AUTHRSET DS 0H AUTHRSET ENTRY 05590000
USING AUTHRSET,R6 BASE FOR SUBROUTINE 05600000
USING IEZJSCB,R11 ESTABLISH ADDRESSABILITY 05610000
L R11,TCBJSCB SET R11=A(JSCB) 05620000
NI JSCBOPTS,X'FE' RESET MODESET AVAILABLE BIT 05630000
SR R15,R15 SET R15=0, RETURN CODE 05640000
BR R14 RETURN TO SVC HANDLER 05650000
LTORG 05660000
DROP R6 DROP USE OF R6 BASE REGISTER 05670000
DROP R11 DROP USE OF R11 BASE REGISTER 05680000
EJECT 05690000
*********************************************************************** 05700000
* * 05710000
* THIS ROUTINE ISSUES THE SMFWTM (SMF WRITE MACRO) FOR A * 05720000
* SMF RECORD POINTED TO BY R1. IT CAN BE USED BY ANY * 05730000
* MODULE WITHOUT HAVING TO BE AUTHORIZED TO OBTAIN * 05740000
* SUPERVISOR MODE. * 05750000
* * 05760000
* REGISTERS UPON ENTRY. * 05770000
* R0 = UNUSED * 05780000
* R1 = ADDRESS OF SMF RECORD * 05790000
* R15 = 5 * 05800000
* * 05810000
* REGISTERS UPON RETURN. * 05820000
* R0 = UNCHANGED * 05830000
* R1 = UNCHANGED * 05840000
* R15 = 0 WRITTEN WITHOUT ERROR * 05850000
* R15 = 4 NOT WRITTEN, WOULD NOT FIT IN EMPTY D.S. * 05860000
* R15 = 8 NOT WRITTEN, RDW LENGTH LESS THAN 18 * 05870000
* R15 = 16 NOT WRITTEN, MAN=NONE OR BOTH D.S. FULL * 05880000
* R15 = 20 NOT WRITTEN, IEFU83 SUPPRESSED WRITE * 05890000
* * 05900000
*********************************************************************** 05910000
SMFWTM DS 0H SMFWTM ENTRY 05920000
USING SMFWTM,R6 BASE FOR SUBROUTINE 05930000
LR R8,R0 SAVE R0 IN R8 05940000
LR R9,R1 SAVE R1 IN R9 05950000
SMFWTM (1) WRITE SMF RECORD POINTED TO BY R1 05960000
LR R0,R8 RESTORE R0 FROM R8 05970000
LR R1,R9 RESTORE R1 FROM R9 05980000
BR R14 RETURN TO SVC HANDLER 05990000
LTORG 06000000
DROP R6 DROP USE OF R6 BASE REGISTER 06010000
EJECT 06020000
*********************************************************************** 06030000
* * 06040000
* THIS ROUTINE SUPPLIES THE REQUESTOR WITH THE UCB * 06050000
* ADDRESS OF THE UCB WHOSE EBCDIC VALUE IS PASSED IN THE * 06060000
* LOW ORDER THREE BYTES OF R0. * 06070000
* * 06080000
* REGISTERS UPON ENTRY. * 06090000
* R0 = EBCDIC UCB NAME ('.1A8' = X'..F1C1F8') * 06100000
* R1 = UNUSED * 06110000
* R15 = 6 * 06120000
* * 06130000
* REGISTERS UPON RETURN. * 06140000
* UCB FOUND. * 06150000
* R0 = EBCDIC UCB NAME IN LOW ORDER 3 BYTES * 06160000
* R1 = ADDRESS OF UCB * 06170000
* R15 = 0 * 06180000
* UCB NOT FOUND. * 06190000
* R0 = -1 * 06200000
* R1 = -1 * 06210000
* R15 = 8 * 06220000
* * 06230000
*********************************************************************** 06240000
UCBLOOK DS 0H UCBLOOK ENTRY 06250000
USING UCBLOOK,R6 BASE FOR SUBROUTINE 06260000
USING UCBDSECT,R11 ESTABLISH ADDRESSABILITY 06270000
USING UCBWORK,R13 ESTABLISH ADDRESSABILITY 06280000
LR R8,R0 SAVE R0 IN R8 06290000
LR R9,R1 SAVE R1 IN R9 06300000
LR R12,R14 SAVE R14 IN R12 06310000
LA R0,UCBWORKE-UCBWORK SET SIZE FOR GETMAIN 06320000
GETMAIN R,LV=(0) GET SOME STORAGE 06330000
LR R13,R1 ADDRESS OF UCBWORK TO BASE REG 06340000
XC UCBWORKS(UCBWORKE-UCBWORK),UCBWORK CLEAR WORK AREA 06350000
LA R1,UCBWORKS ADDRESS OF WORK AREA FOR UCB SCAN 06360000
ST R1,UCBPARML PLACE INTO PARM LIST 06370000
LA R1,UCBDEVCL ADDRESS OF DEVICE CLASS (NULL) 06380000
ST R1,UCBPARML+4 PLACE INTO PARM LIST 06390000
LA R1,UCBADDR ADDRESS OF RETURN FIELD 06400000
ST R1,UCBPARML+8 PLACE INTO PARM LIST 06410000
OI UCBPARML+8,128 SET HIGH ORDER BIT 06420000
* 06430000
* SCAN EACH UCB VIA IOSVSUCB AND CHECK FOR REQUESTED NAME 06440000
* 06450000
UCBLOOP EQU * 06460000
LA R1,UCBPARML PARAMETER LIST FOR IOSUCBSV 06470000
L R15,CVTUCBSC UCB SERVICE ROUTINE ADDRESS 06480000
BALR R14,R15 CALL UCB SERVICE ROUTINE 06490000
LTR R15,R15 ANY UCB FOUND? 06500000
BNZ UCBERR NO, REQUESTED NOT FOUND 06510000
L R9,UCBADDR PICK UP UCB ADDR 06520000
CLM R8,7,13(R9) RIGHT UCB ? 06530000
BNE UCBLOOP NO - CHECK NEXT ENTRY 06540000
SR R10,R10 FOUND, RESET RETCODE 06550000
B UCBDONE AND EXIT 06560000
UCBERR L R8,=F'-1' NOT FOUND 06570000
L R9,=F'-1' NOT FOUND 06580000
LA R10,8 NOT FOUND 06590000
UCBDONE LA R0,UCBWORKE-UCBWORK SET SIZE FOR GETMAIN 06600000
LA R1,UCBWORK SET R1=A(GETMAIN AREA) 06610000
FREEMAIN R,LV=(0),A=(1) FREE GOTTEN STORAGE 06620000
LR R0,R8 RESTORE ORIGINAL R0 FROM R8 06630000
LR R1,R9 RESTORE ORIGINAL R1 FROM R9 06640000
LR R14,R12 RESTORE ORIGINAL R14 FROM R12 06650000
LR R15,R10 SET R15=RETURN CODE 06660000
BR R14 RETURN TO SVC HANDLER 06670000
LTORG 06680000
UCBDEVCL DC XL1'00' UCB DEVICE CLASS (ALL DEVICES) 06690000
UCBWORK DSECT 06700000
UCBSAVE DS 18F REG SAVE AREA FOR IOSVSUCB 06710000
UCBADDR DS F ADDRESS OF RETURNED UCB 06720000
UCBPARML DS A IOSVSUCB PARM - ADDR OF UCBWORK 06730000
DS A IOSVSUCB PARM - ADDR OF DEVICE CLASS 06740000
DS A IOSVSUCB PARM - UCB ADDRESS POINTER 06750000
DS F IOSVSUCB RETURNED UCB ADDRESS 06760000
UCBWORKS DS XL100 IOSVSUCB WORK AREA 06770000
UCBWORKE EQU * END OF UCBWORK 06780000
MVSGPSVC CSECT 06790000
DROP R6 DROP USE OF R6 BASE REGISTER 06800000
DROP R11 DROP USE OF R11 DSECT BASE REGISTER 06810000
EJECT 06820000
----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN