SCT TITLE 'DMSSCT (CMS) VM/370 - RELEASE 6' 00001000
SPACE 2 00002000
*. 00003000
* 00004000
* 00005000
* MODULE NAME: 00006000
* 00007000
* DMSSCT (SOCNTRL) 00008000
* 00009000
* FUNCTION: 00010000
* 00011000
* TO HANDLE OS NOTE, POINT, CHECK AND FIND (TYPE C) MACROES 00012000
* DMSSCT ALSO HANDLES QSAM I/O ERRORS FOR DMSSQS 00013000
* AND PDS (PARTITIONED DATA SET) AND KEYS ERRORS FOR 00014000
* DMSSOP. 00015000
* 00016000
* ATTRIBUTES: 00017000
* 00018000
* REENTRANT, NUCLEUS RESIDENT 00019000
* 00020000
* ENTRY POINTS: 00021000
* 00022000
* DMSSCTNP - OS NOTE, POINT OR FIND (TYPE C) MACRO 00023000
* DMSSCTCK - OS CHECK MACRO 00024000
* DMSSCTCE - DMSSQS, DMSSOP 00025000
* 00026000
* ENTRY CONDITIONS: 00027000
* 00028000
* DMSSCTNP - OS NOTE, POINT OR FIND (TYPE C) MACRO 00029000
* DMSSCTCK - OS CHECK MACRO 00030000
* DMSSCTCE - R2 - A(DCB) 00031000
* R6 - A(DECB) 00032000
* R11 - A(FCB) 00033000
* R12 - A(DMSSCTCK) 00034000
* R13 - A(SAVE AREA) 00035000
* 00036000
* 00037000
* EXIT CONDITIONS: 00038000
* 00039000
* NOTE, POINT AND FIND - 00040000
* CONTROL IS RETURNED TO THE USER 00041000
* 00042000
* CHECK AND DMSSCTCE - 00043000
* IF NO ERROR FLAGS ARE SET IN THE ECB OR DECB, CONTROL 00044000
* IS RETURNED TO THE USER. IF THE ECB INPUT 00045000
* END-OF-DATA (EODAD) FLAG IS SET, CONTROL IS GIVEN TO 00046000
* THE EODAD ROUTINE. IF OTHER DECB OR ECB ERROR FLAGS 00047000
* ARE SET, THE ERROR ANALYSIS (SYNAD) ROUTINE IS GIVEN 00048000
* CONTROL, OR, IF NO ERROR ANALYSIS ROUTINE IS 00049000
* PROVIDED, ERROR MSG DMSSCT120S IS TYPED OUT AND 00050000
* THE TASK IS ABNORMALLY TERMINATED. 00051000
* 00052000
* CALLS TO OTHER ROUTINES: 00053000
* 00054000
* NOTE, POINT AND FIND - DMSROS 00055000
* CHECK AND DMSSCTCE - EODAD ROUTINE, SYNAD ROUTINE, DMSSVT, 00056000
* DMSSAB, DMSERR 00057000
* 00058000
* EXTERNAL REFERENCES: 00059000
* 00060000
* IHADECB, IHADCB, OPSECT, NUCON, FCBSECT 00061000
* 00062000
* TABLES/WORKAREAS: 00063000
* 00064000
* NONE 00065000
* 00066000
* REGISTER USAGE: 00067000
* 00068000
* NOTE AND POINT - R0,R3-R10,R10,R12,R14 - WORK 00069000
* R1 - A(DECB) 00070000
* R2 - A(DCB) 00071000
* R11 - A(FCB) 00072000
* R13 - A(SAVE AREA) 00073000
* R15 - A(DMSSCT) 00074000
* 00075000
* FIND - R12 - A(DMSSCT) 00076000
* R15 - A(FCB) 00077000
* R1 - A(DCB) 00078000
* 00079000
* CHECK AND DMSSCTCE - R0,R1,R3-R5,R7-R10,R14,R15-WORK 00080000
* R2 - A(DCB) 00081000
* R6 - A(DECB) 00082000
* R11 - A(FCB) 00083000
* R12 - A(DMSSCTCK) 00084000
* R13 - A(SAVE AREA) 00085000
* 00086000
* OPERATION OF DMSSCT MACRO SIMULATION ROUTINES: 00087000
* 00088000
* *NOTE (BSAM, BDAM) 00089000
* 00090000
* OPERATION: 00091000
* 00092000
* UPON ENTRY TO NOTE, A CHECK IS MADE TO DETERMINE IF 00093000
* THE DCB REFERS TO AN OS DISK. IF IT DOES, DMSROS IS 00094000
* CALLED TO GET THE CURRENT TTR AND CONTROL IS RETURNED 00095000
* TO THE USER. OTHERWISE, A CHECK IS MADE TO SEE IF A POINT 00096000
* WAS JUST ISSUED. IF NOT, THE ITEM NUMBER OF NEXT 00097000
* RECORD TO BE PROCESSED IS LOADED FROM FCBITEM INTO 00098000
* REGISTER 1, REGISTER 1 IS DECREMENTED BY 1 AND 00099000
* CONTROL IS RETURNED TO THE USER. IF A POINT WAS JUST 00100000
* ISSUED, REGISTER 1 IS LOADED WITH THE VALUE IN 00101000
* DCBFDAD AND CONTROL IS RETURNED TO THE USER. 00102000
* 00103000
* *CHECK (BDAM, BSAM, BPAM) 00104000
* 00105000
* OPERATION: 00106000
* 00107000
* CHECK IS CALLED BY DMSSQS, DMSSOP, AND OS CHECK MACROES. 00108000
* UPON ENTRY, THE 00109000
* DECB OR ECB IS TESTED FOR I/O ERRORS. IF THERE ARE 00110000
* NO ERRORS, CONTROL IS RETURNED TO THE USER. IF AN 00111000
* ECB END-OF-DATA-SET FLAG IS ON, THE EODAD ROUTINE IS 00112000
* GIVEN CONTROL. IF AN EODAD ROUTINE IS NOT SPECIFIED OR 00113000
* IF THE ERROR WAS OTHER THAN END OF FILE, THE SYNAD 00114000
* ROUTINE IS GIVEN CONTROL. IF NO SYNAD ROUTINE IS 00115000
* SPECIFIED, THE SYNADAF, DMSERR, AND SYNADRLS MACROES 00116000
* ARE USED TO TYPE OUT ERROR MSG. DMSSCT120S AND THE TASK IS 00117000
* ABENDED WITH A SYSTEM CODE. 00118000
* 00119000
* *POINT (BSAM, BDAM, BPAM) 00120000
* 00121000
* OPERATION: 00122000
* 00123000
* THE POINT ROUTINE IS CALLED BY THE USER. UPON ENTRY, 00124000
* A CHECK IS MADE TO DETERMINE IF THE DCB REFERS TO 00125000
* AN OS DISK. IF IT DOES, DMSROS IS CALLED TO RESET 00126000
* THE CURRENT TTR, CKCONCAT IS CALLED AND CONTROL IS 00127000
* RETURNED TO THE CALLER. OTHERWISE, 00128000
* THE RELATIVE BLOCK ADDRESS IS LOADED INTO A REGISTER 00129000
* AND RIGHT ADJUSTED. IF THE RIGHTMOST BYTE OF THE 00130000
* BLOCK ADDRESS IS NOT SET TO ONE, A ONE IS SUBTRACTED 00131000
* FROM THE REGISTER. THE CONTENTS OF THE REGISTER ARE 00132000
* STORED IN THE LAST TWO BYTES OF DCBFDAD AND A 'P' IS 00133000
* STORED IN THE FIRST BYTE. THEN CKCONCAT IS CALLED AND 00134000
* CONTROL IS RETURNED TO THE USER. 00135000
* 00136000
* CKCONCAT: UPON ENTRY, A CHECK IS MADE TO DETERMINE 00137000
* IF THE FCB MACLIB CONCAT BIT IS ON. IF NOT, CONTROL IS 00138000
* RETURNED TO THE CALLER. IF IT IS, DCBRELAD+3 IS USED 00139000
* TO SET THE CORRECT OS FST OR OS PDS POINTER IN THE 00140000
* FCB AND CONTROL IS RETURNED TO THE CALLER. 00141000
* 00142000
* *FIND (TYPE C) (BPAM) 00143000
* 00144000
* OPERATION: 00145000
* 00146000
* FIND (TYPE C) MOVES SPECIFIED TTR TO THE ITEM NO. FIELD 00147000
* OF THE FCB AND CALLS CKCONCAT. THEN IF THE DCB DOES 00148000
* NOT REFER TO AN OS DISK, CONTROL IS RETURNED TO THE 00149000
* CALLER. IF THE DCB REFERS TO AN OS DISK, DMSROS IS 00150000
* CALLED TO UPDATE THE TTR AND CONTROL IS RETURNED TO 00151000
* THE CALLER. 00152000
* 00153000
* 00154000
*. 00155000
* 00156000
EJECT 00157000
* 00158000
* 00159000
* 00160000
DMSSCT START 0 00161000
ENTRY DMSSCTNP,DMSSCTCK,DMSSCTCE 00162000
SPACE 00163000
USING IHADECB,R1 00164000
USING IHADCB,R2 00165000
USING OPSECT,R8 00166000
USING NUCON,R0 00167000
USING FCBSECT,R11 00168000
USING DMSSCT,R12 BASE REG V0313 00169000
USING DMSSCT,R15 00170000
EJECT 00171000
* 00172000
* NOTE/POINT COMMON ENTRY 00173000
* 00174000
DMSSCTNP DS 0H NOTE: 0(R15) 00175000
B NOTE 00176000
CR R1,R0 IS THIS A CALL FOR FIND 00177000
BE FINDC YES 00178000
DROP R15 USE R12 AS BASE REG V0313 00179000
* 00180000
POINT STM R14,R12,12(R13) SAVE REGS 00181000
L R12,16(,R13) SETUP BASE REG V0313 00182000
LR R2,R1 GET V(DCB) 00183000
L R11,DCBDEBAD GET ADDR OF DEB 00184000
SH R11,=AL2(IHADEB-FCBINIT) GET ADDR OF FCB 00185000
LA R5,NTPT2 GET RETURN ADDR @V201122 00186000
TM FCBINIT,FCBOS IS THIS AN OS DATA SET @V201122 00187000
BO CALLROS YES, GO TO DMSROS @V201122 00188000
LR R4,R0 00189000
L R5,0(R4) GET ITEM NO. 00190000
CLI FCBDEV,FCBTAP IS DEVICE TAPE 00191000
BE LESS1 YES, THEN DON'T SHIFT TTR 00192000
SRL R5,8 00193000
CLI 3(R4),X'01' SHOULD WE ADD ONE 00194000
BNE LESS1 NO, DON'T ADD ONE P3036 00195000
AH R5,FCBCOUT YES, ADD ONE BLOCK TO PTR P3036 00196000
LESS1 BCTR R5,R0 SUBTRACT ONE FROM TTR 00197000
STPTR STH R5,FCBOP ALLIGN ITEM NO. 00198000
MVC DCBFDAD+6(2),FCBOP MOVE IT INTO DCBFDAD 00199000
MVI DCBFDAD,C'P' INDICATE POINT 00200000
NI DCBOFLGS,X'7F' 00201000
BAL R14,CKCONCAT CHECK FOR PDS CONCATONATION V0313 00202000
B NTPT2 RETURN 00203000
NOTE DS 0H 00204000
STM R14,R12,12(R13) SAVE REGS IN CALLERS SAVEAREA 00205000
L R12,16(,R13) SETUP BASE REG V0313 00206000
* 00207000
* SOME HOUSEKEEPING 00208000
* 00209000
LR R2,R1 GET V(DCB) 00210000
L R11,DCBDEBAD GET ADDR OF DEB 00211000
SH R11,=AL2(IHADEB-FCBINIT) GET ADDR OF FCB 00212000
* EXECUTE "NOTE": RECORD PRESENT I/O POINTERS 00213000
SR R0,R0 INDICATE NOTE @V201122 00214000
LA R5,SETR1 SET RETURN ADDRESS @V201122 00215000
TM FCBINIT,FCBOS IS THIS AN OS FCB @V201122 00216000
BNO GETITEM NO, DON'T GO TO DMSROS @V201122 00217000
CALLROS DMSKEY NUCLEUS @V201122 00218000
L R15,ADMSROS GET ADDRESS OF DMSROS @V201122 00219000
BAL R14,16(R15) BAL TO DMSROS @V201122 00220000
DMSKEY RESET @V201122 00221000
BR R5 RETURN TO CALLER @V201122 00222000
GETITEM EQU * GET ITEM NO. @V201122 00223000
LH R0,FCBITEM GET FCBITEM 00224000
N R0,HALFWORD 00225000
CLI DCBFDAD,C'P' WAS A POINT ISSUED 00226000
BNE SETCOUT NO, GO SAVE ITEM NO. 00227000
CLC DCBFDAD+6(2),=XL2'FFF8' WAS THIS POINT ISSUED BY EOB 00228000
BE SETCOUT YES, THEN IGNORE 00229000
MVC FCBOP+1(3),DCBFDAD+5 ALLIGN ITEM NO. 00230000
LH R3,FCBOP+2 GET ITEM NO. 00231000
LA R0,1(R3) ADD ONE TO IT 00232000
SETCOUT LR R3,R0 SAVE ITEM NO. 00233000
SH R0,FCBCOUT GET ITEM NO. OF LAST BLK 00234000
BNM ALIGN BRANCH ZERO OR POSITIVE @VA09010 00235000
LR R0,R3 DO NOT ADJUST FOR LAST BLK 00236000
ALIGN CLI FCBDEV,FCBTAP IS DEVICE TAPE 00237000
BE SETR1 YES, THEN SET R1 IN SAVE AREA 00238000
SLL R0,8 SHIFT TTR LEFT 8 FOR DISK 00239000
SETR1 ST R0,24(,R13) SET R1 IN SAVE AREA 00240000
NTPT2 EQU * EXIT FROM 'NOTE' OR 'POINT' ... 00241000
ST R13,FCBR13 00242000
LM R14,R12,12(R13) RESTORE REGS 00243000
BR 14 RETURN 00244000
HALFWORD DC F'65535' 00245000
EJECT 00246000
* "CHECK": DETERMINE STATUS OF PREVIOUS READ/WRITE OPERATION 00247000
* 00248000
DMSSCTCK DS 0H 00249000
STM R14,R12,12(R13) SAVE REGS IN CALLER SAVEAREA 00250000
USING DMSSCTCK,R12 00251000
USING IHADECB,R6 00252000
SPACE 00253000
SPACE 00254000
LR R12,R15 SETUP BASE REG 00255000
LR R6,R1 SETUP DECB REG 00256000
L R2,DECDCBAD GET V(DCB) 00257000
CK1 TM DECSDECB,X'40' TEST ECB COMPLETION BIT 00258000
BZ POSTERR SET ERROR BYTE 00259000
CLI DECSDECB+3,0 TEST FOR I/O ERRORS 00260000
BNE CK2 ERRORS. GOSH! 00261000
CKRET EQU * 00262000
LM R14,R12,12(R13) RESTORE USER6S REGS 00263000
BR R14 RETURN TO USER 00264000
POSTERR MVI DECSDECB+3,254 SET NOT COMPLETE ERROR CODE 00265000
CK2 L R11,DCBDEBAD GET ADDR OF DEB IN FCB 00266000
SH R11,=AL2(IHADEB-FCBINIT) GET ADDR OF FCB 00267000
L R4,DECIOBPT GET ADDR OF IOB 00268000
SH R4,=H'8' GET ADDR OF IOB PREFIX 00269000
MVC IOBIOFLG(1),IOBBFLG(R4) GET PROPER IOB FLG 00270000
DMSSCTCE EQU * 00271000
LA R7,64 SET OUTPUT CODE 00272000
TM IOBIOFLG,IOBOUT OUTPUT? 00273000
BO GETSYNAD YES, USE ERROR EXIT 00274000
LA R7,128 SET INPUT CODE 00275000
CLI DECSDECB+3,X'0C' END-OF-FILE? 00276000
BNE GETSYNAD PRINT I/O ERROR MSG 00277000
L R1,DCBEODAD GET ADDR OF EOF RTN 00278000
LA R15,0(R1) CLEAR HIGH ORDER BYTE 00279000
CH R15,=H'1' IS EOF RTN SPECIFIED ? 00280000
BNH GETSYNAD NO, ABEND V0277 00281000
LM R0,R12,20(R13) RESTORE REGS V0277 00282000
BALR R14,R15 CALL EXIT ROUTINE V0277 00283000
LM R14,R12,12(R13) RESTORE V0277 00284000
BR R14 RETURN TO CALLER V0277 00285000
GETSYNAD L R1,DCBSYNAD GET SYNAD ADDR 00286000
TM FCBIOSW,FCBCLOSE WAS ERROR DURING CLOSE @VA06290 00287000
BO CKABEND YES, THEN DIE @VA06290 00288000
LA R15,0(R1) ZERO HIGH ORDER BYTE @VA07120 00289000
CH R15,=H'1' IS SYNAD ROUTINE SPECIFIED 00290000
BH CKTYPE NO, ABEND 00291000
CKABEND LA R15,SYNABEND GET ADDR OF ABEND ROUTINE 00292000
CKTYPE ST R6,20(R13) SET R0 TO A(DECB) 00293000
TM DCBCIND2,1 BSAM? 00294000
BZ SYNADRTN YES, CONTINUE 00295000
L R8,AOPSECT GET ADDR OF CMSOP 00296000
XC 0(32,R8),0(R8) CLEAR FIRST 32 BYTES 00297000
MVC CMSOP(4),DECSDECB SETUP STATUS BITS 00298000
LA R9,16(R8) GET ADDR OF FAKE CCW 00299000
ST R9,FILENAME USE IT FOR ADDR OF CCW 00300000
MVC 14(2,R8),IOBCSW+6 SET LENGTH IN CSW 00301000
ST R8,20(R13) SET R0 TO A(STATUS BITS) 00302000
MVI 20(R13),8 SET DISPLACEMENT TO CCW ADDR 00303000
SYNADRTN ST R2,24(R13) SET DCB ADDR IN REG1 SAVE AREA 00304000
STC R7,24(R13) SET I/O CODE IN SAVE AREA 00305000
CLC DECSDECB+1(2),=XL2'2000' IS THIS NO SPACE FOUND 00306000
BNE ERREXIT NO, THEN CONTINUE 00307000
MVI 24(R13),X'41' YES, THEN SIGNAL NO SPACE FOUND 00308000
ERREXIT EQU * 00309000
LM R0,R12,20(R13) RESTORE REGS 00310000
BALR R14,R15 CALL EXIT ROUTINE 00311000
LM R14,R1,12(R13) RESTORE BDAM REGS V0213 00312000
TM X'1A'(R1),DA DCBDSORG= DA SPECIFIED V0300 00313000
BCR 1,R14 YES, RETURN TO CALLER V0213 00314000
LM R14,R12,12(R13) RESTORE REGS 00315000
BR R14 RETURN TO USER 00316000
SYNABEND BALR R14,R0 SETUP BASE REG 00317000
USING *,R14 00318000
SYNADAF ACSMETH=BSAM 00319000
LA R4,54(R1) SET ADDR OF MSG. 00320000
DMSERR MF=I,NUM=120,LET=S,SUB=(CHARA,(R4)), X00321000
TEXT='.............................' 00322000
SYNADRLS 00323000
ABEND 1 00324000
DROP R14 00325000
EJECT 00326000
FINDC STM R14,R12,12(R13) SAVE REGS 00327000
LR R12,R15 SETUP BASE REG 00328000
USING DMSSCT,R12 00329000
LR R2,R1 SET DCB BASE REG V0313 00330000
L R11,DCBDEBAD GET DEB ADDRESS V0313 00331000
SH R11,=AL2(IHADEB-FCBINIT) GET FCB ADDRESS V0313 00332000
MVC FCBITEM(2),DCBRELAD+1 SET ITEM NO. V0313 00333000
BAL R14,CKCONCAT CHECK FOR CONCATONATION V0313 00334000
TM FCBINIT,FCBOS OS FCB? @V201122 00335000
BNO FINDCRET NO, RETURN TO CALLER @V201122 00336000
L R6,DCBRELAD SAVE CONCAT BYTE @V201122 00337000
MVI DCBRELAD+3,0 SETUP FOR POINT @V201122 00338000
LA R0,DCBRELAD GET ADDR OF TTR @V201122 00339000
BAL R5,CALLROS BRANCH TO OS POINT @V201122 00340000
STC R6,DCBRELAD+3 RESTORE CONCAT @V201122 00341000
FINDCRET LM R14,R12,12(R13) RESTORE REGS @V201122 00342000
SR R15,R15 RETURN 00343000
BR R14 RETURN TO CALLER 00344000
CKCONCAT TM FCBINIT,FCBCATML CONCATONATION SPECIFIED V0313 00345000
BCR 14,R14 NO, RETURN V0313 00346000
SR R6,R6 ZERO REG FOR INSERT V0313 00347000
IC R6,DCBRELAD+3 GET CONCAT NO. V0313 00348000
NI FCBINIT,255-FCBOS TURN OFF FCB OS SWITCH @V201122 00349000
L R15,MACDIRC(R6) GET ADDRESS OF FCB OR PDS @V201122 00350000
LTR R15,R15 OS FCB? @V201122 00351000
BNM GETMACNM NO, GET MACLIB NAME @V201122 00352000
OI FCBINIT,FCBOS TURN ON FCB OS SWITCH @V201122 00353000
ST R15,FCBOSFST SET OS FST POINTER @V201122 00354000
BR R14 RETURN TO CALLER @V201122 00355000
GETMACNM SLL R6,1 MULTIPLY BY 2 @V201122 00356000
ST R15,FCBPDS SET NEW PDS ADDRESS @V201122 00357000
LA R5,MACLIBL(R6) GET ADDR OF NAME IN MAC LIST @V201122 00358000
MVC FCBDSNAM(8),0(R5) SET FCB TO NEW PDS NAME V0313 00359000
BR R14 RETURN TO CALLER V0313 00360000
EJECT 00361000
********************************************************************** 00362000
* 00363000
* DCB LAYOUT 00364000
* 00365000
********************************************************************** 00366000
DCBD DSORG=(PS) 00367000
EJECT 00368000
NUCON 00369000
CMSCB 00370000
IO 00371000
EJECT 00372000
REGEQU 00373000
UTSAV EQU IOBCSW 00374000
NOTEWD EQU SAVER14 00375000
END 00376000