CSU TITLE 'DMKCSU (CP) VM/370 - RELEASE 6' 00001000
ISEQ 73,80 VALIDATE SEQUENCING OF INPUT 00002000
*. 00003000
* MODULE NAME - 00004000
* 00005000
* DMKCSU 00006000
* 00007000
* FUNCTION - 00008000
* 00009000
* DMKCSU CONTAINS THE CHANGE COMMAND FOR CLASS G 00010000
* AND CLASS D USERS. 00011000
* 00012000
* ATTRIBUTES - 00013000
* 00014000
* REENTRANT, PAGEABLE, CALLED VIA SVC 00015000
* 00016000
* ENTRY POINTS - 00017000
* 00018000
* DMKCSUCH - CHANGE COMMAND 00019000
* 00020000
* ENTRY CONDITIONS - 00021000
* 00022000
* GPR9 = ADDRESS OF THE COMMAND LINE BUFFER; MUST BE PRESERVED 00023000
* FOR CALLS TO DMKSCNFD 00024000
* GPR12 = ADDRESS OF ENTRY POINT 00025000
* GPR13 = ADDRESS OF SAVEAREA 00026000
* 00027000
* EXIT CONDITIONS - 00028000
* 00029000
* NORMAL - 00030000
* GPR2 = 0 00031000
* 00032000
* ERROR - 00033000
* 00034000
* GPR2 = CONTAINS THE BINARY MESSAGE NUMBER 00035000
* - EITHER AN OPTION IS ILLEGAL OR SOME CONDITION 00036000
* EXISTS THAT MAKES IT IMPOSSIBLE TO EXECUTE THE COMMAND 00037000
* A MESSAGE IS TYPED TO DESCRIBE THE ERROR; THE ERROR 00038000
* MESSAGES THAT MAY OCCUR ARE LISTED WITH EACH COMMAND 00039000
EJECT 00040000
* 00041000
* CALLS TO OTHER ROUTINES - 00042000
* 00043000
* DMKSCNFD - SCAN THE COMMAND LINE BUFFER FOR OPTIONS 00044000
* DMKSTKIO - TO STACK A IOBLOK 00045000
* DMKSPLDL - DELETE PURGED FILES FROM THE SYSTEM 00046000
* DMKCVTDB - CONVERT DECIMAL SPOOLID NUMBERS TO BINARY 00047000
* DMKCVTBD - CONVERT BINARY TO DECIMAL 00048000
* DMKERMSG - WRITE ERROR MESSAGES 00049000
* DMKCSOSD - TO START PUNCH OR PRINTER 00050000
* DMKSCNAU - TO LOCATE USERID VMBLOK 00051000
* DMKQCNWT - TO WRITE A MESSAGE AT CONSOLE 00052000
* DMKUDRFU - TO VERIFY A USER 00053000
* DMKFREE - TO OBTAIN A BLOCK OF FREE STORAGE 00054000
* DMKFRET - TO RETURN A BLOCK OF STORAGE 00055000
* DMKCKSPL - CHECKPOINT THE SFBLOK 00056000
* DMKRPAGT - READ IN THE FIRST DASD SPOOL FILE BUFFER 00057000
* DMKRPAPT - WRITE OUT THE FIRST DASD SPOOL FILE BUFFER 00058000
* DMKPGTVG - GET A PAGE OF VIRTUAL SYSTEM SPACE 00059000
* DMKPGTVR - RELEASE A PAGE OF VIRTUAL SYSTEM SPACE 00060000
* EXTERNAL REFERENCES - 00061000
* 00062000
* DMKRSPRD - (ARSPRD) READER FILE CHAIN ANCHOR 00063000
* DMKRSPPR - (ARSPPR) PRINTER FILE CHAIN ANCHOR 00064000
* DMKRSPPU - (ARSPPU) PUNCH FILE CHAIN ANCHOR 00065000
* DMKRSPDL - SPOOL DELETE CHAIN ANCHOR 00066000
* DMKVIOIN - IOBIRA FOR IOBLOK 00067000
* 00068000
* TABLES / WORKAREAS - 00069000
* 00070000
* IOBLOK 00071000
* VDEVBLOK AND SFBLOKS ARE UPDATED, ALTERED OR DELETED 00072000
* 00073000
* THE SAVEWRK FIELDS IN THE STANDARD SAVEAREA ARE USED BY THE 00074000
* OPTION PROCESSING SUBROUTINES FOR THE FOLLOWING VALUES - 00075000
* 00076000
* SAVEWRK1 - FILE OUTPUT CLASS (1 BYTE) 00077000
* SAVEWRK1+1 - NUMBER OF COPIES (1 BYTE) 00078000
* SAVEWRK1+2 - SPOOLID NUMBER (HALF-WORD) 00079000
* SAVEWRK2,3 - USERID OF FILE'S OWNER 00080000
* SAVEWRK4 - ADDRESS OF HOLDING AREA (48 BYTES) 00081000
* SAVEWRK5 - USE VARIES WITH COMMAND 00082000
* SAVEWRK6,7 - SAVE AREA FOR R0,R1 SCAN OPTIONS 00083000
* SAVEWRK8,9 - USE VARIES WITH COMMAND 00084000
* 00085000
* HLDSECT - INTERNAL WORK AREA 00086000
* 00087000
* REGISTER USAGE - 00088000
* 00089000
* ALL SUBROUTINES IN THE MODULE CONFORM GENERALLY TO THIS USAGE; 00090000
* ANY INDIVIDUAL DEVIATIONS OR EXTENSIONS ARE LISTED WITH THE 00091000
* COMMAND DESCRIPTION 00092000
* 00093000
* GPR0 = LENGTH OF OPTION - RETURNED FROM DMKSCNFD 00094000
* GPR1 = ADDRESS OF OPTION - RETURNED FROM DMKSCNFD 00095000
* GPR2 = SCRATCH 00096000
* GPR3 = INTERNAL LINKAGE - 2ND LEVEL 00097000
* GPR4 = INTERNAL LINKAGE - 1ST LEVEL 00098000
* GPR5 = DEVICE TYPE FLAGS - LOGICAL SUM OF TYPES 00099000
* GPR6 = POINTER TO PREVIOUS SFBLOK ON CHAIN 00100000
* GPR7 = SFBLOK BASE 00101000
* GPR8 = VDEVBLOK BASE 00102000
* GPR9 = INPUT COMMAND LINE ADDRESS 00103000
* GPR10 = ADDRESS OF IOBLOK 00104000
* GPR11 = VMBLOK BASE 00105000
* GPR12 = DMKCSU BASE 00106000
* GPR13 = SAVEAREA BASE 00107000
* GPR14 = EXTERNAL LINKAGE 00108000
* GPR15 = EXTERNAL LINKAGE 00109000
* 00110000
* NOTES - 00111000
* 00112000
* NONE 00113000
* 00114000
* OPERATION - 00115000
* 00116000
* EACH COMMAND PROCESSOR IS ENTERED VIA A CALL FROM DMKCFM. THE 00117000
* PROCESSING LOGIC IS EMBODIED IN A SERIES OF INTERNAL CALLS TO 00118000
* A SET OF OPTION PROCESSORS AND LIST SCANNERS. IN GENERAL, 00119000
* THE OPTION PROCESSORS ARE CALLED WHEN IT IS KNOWN, EITHER BY 00120000
* POSITION OR KEYWORD, WHAT TYPE OF OPTION MUST APPEAR NEXT ON 00121000
* THE COMMAND LINE. THE OPTION PROCESSORS SCAN FOR THE NEXT 00122000
* FIELD, VERIFY ITS VALIDITY, AND SET UP INFORMATION FOR USE BY 00123000
* THE LIST SCANNERS. SINCE THE OPERATIONAL DESCRIPTION OF EACH 00124000
* OF EACH COMMAND PROCESSOR REFERENCES THESE SUBROUTINES, A LIST 00125000
* OF THEIR NAMES AND FUNCTIONS IS GIVEN HERE; A DESCRIPTION OF 00126000
* THE OPERATIONAL LOGIC AND REGISTER SETS FOR EACH SUBROUTINE 00127000
* APPEAR AT THE END OF THE MODULE 00128000
* 00129000
* OPTION PROCESSORS - 00130000
* 1. GETUSER - SAVE THE USER ID OF THE FILE'S OWNER 00131000
* 2. GETYPE - SAVE THE FILE TYPE (OR DEVICE TYPE) 00132000
* 3. GETCOPY - LOCATE AND SAVE THE NUMBER OF COPIES REQUESTED 00133000
* 4. GETNAME - LOCATE AND SAVE THE FILE NAME (AND TYPE) 00134000
* 5. GETID - LOCATE AND SAVE THE SPOOLID OR CLASS 00135000
* 6. GETCLASS - LOCATE AND VERIFY THE CLASS REQUESTED (2ND LEVEL 00136000
* ROUTINE) 00137000
* 7. GETCHARS - SAVE AND VERIFY CHARS VALUE SPECIFIED 00138000
* 8. GETFLASH - SAVE AND VERIFY FLASH VALUES SPECIFIED 00139000
* 9. GETCMOD - SAVE AND VERIFY COPY MOD NAME 00140000
* 10. GETFCB - SAVE AND VERIFY FCB NAME SPECIFIED 00141000
* 00142000
* LIST SCANNING ROUTINES - 00143000
* 2. GETFILE - LOCATE THE NEXT FILE OF THE CORRECT CLASS, ID, 00144000
* AND OWNER 00145000
* 3. GETCHAIN - LOCATE THE NEXT FILE CHAIN TO SEARCH (2ND 00146000
* LEVEL ROUTINE) 00147000
* 4. SETPEND - LOCATE AN AVAILABLE VIRTUAL READER AND 00148000
* POST AN PENDING DEVICE END INTERRUPT 00149000
* 00150000
*. 00151000
EJECT 00152000
COPY OPTIONS 00153000
SPACE 2 00154000
COPY LOCAL OPTIONS 00155000
DMKCSU CSECT 00156000
SPACE 3 00157000
EXTRN DMKSCNFD 00158000
EXTRN DMKCKSPL @V304298 00159000
EXTRN DMKCVTDB,DMKCVTBD,DMKSPLDL 00160000
EXTRN DMKUDRFU,DMKERMSG 00161000
EXTRN DMKCSOSD,DMKSCNAU 00162000
EXTRN DMKVIOIN,DMKSTKIO @VM01016 00163000
EXTRN DMKRPAGT,DMKRPAPT,DMKPGTVG,DMKPGTVR @V60B9BA 00164000
SPACE 3 00165000
USING PSA,R0 00166000
USING SFBLOK,R7 00167000
USING VDEVBLOK,R8 @VA08042 00168000
USING BUFFER,R9 00169000
USING VMBLOK,R11 00170000
USING SAVEAREA,R13 00171000
EJECT 00172000
*. 00173000
* SUBROUTINE NAME - 00174000
* 00175000
* DMKCSUCH 00176000
* 00177000
* FUNCTION - 00178000
* 00179000
* TO CHANGE ONE OR MORE OF THE CHARACTERISTICS OF A CLOSED SPOOL 00180000
* FILE. THE CLASS,NUMBER OF COPIES, DISTRIBUTION CODE, 00181000
* HOLD,NOHOLD AND/OR FILE NAME AND TYPE. 00182000
* MULTIPLE FILES MAY BE CHANGED BY USING THE 'CLASS' OR 00183000
* 'ALL' OPTION FOR SPOOLID. 00184000
* 00185000
* COMMAND LINE FORMAT - 00186000
* 00187000
* +--------+---------------------------------------------------+ 00188000
* | CHANGE | <USERID> PRT CLASS A <CLASS B> <HOLD|NOHOLD> - | 00189000
* | CH | <SYSTEM> PCH SPOOLID <COPY NN> <DIST DISTCODE> - | 00190000
* | | RDR ALL <NAME FNAME <FTYPE>> - | 00191000
* | | <NAME DSNAME> - | 00192000
* | | <SYS|NOSYS> - | 00193000
* | | <FLASH FFFF GG> <MODIFY MMMM> <FCB BBBB> - | 00194000
* | | <CHARS CCCC> | 00195000
* +--------+---------------------------------------------------+ 00196000
* 00197000
* READER PRINTER PUNCH CLASS ALL 00198000
* R RDR P PRT PU PCH CL ALL 00199000
* 00200000
* NAME COPY HOLD NOHOLD DIST 00201000
* NA CO HO NOH DI 00202000
* 00203000
* FLASH MODIFY FCB CHARS 00204000
* FL MO FCB CH 00205000
* 00206000
* <USERID> AND <SYSTEM> ARE CLASS D USER OPTIONS 00207000
* 00208000
* DIST-CODE - 1 TO 8 CHARACTERS 00209000
* FNAME - 1 TO 8 CHARACTERS 00210000
* FTYPE - 1 TO 8 CHARACTERS 00211000
* DSNAME - 1 TO 24 CHARACTERS 00212000
* FFFF - 1 TO 4 CHARACTERS 00213000
* GG - 1 TO 99 00214000
* CCCC - 1 TO 4 CHARACTERS 00215000
* BBBB - 1 TO 4 CHARACTERS 00216000
* MMMM - 1 TO 4 CHARACTERS 00217000
* 00218000
* OPERATION - 00219000
* 00220000
* 1. IF CLASS D USER, CALL GETUSER. 00221000
* 2. CALL GETYPE - LOCATE AND VALIDATE TYPE OPTION; 00222000
* IF TYPE = ALL, EXIT GIVING ERROR MSG006E. 00223000
* 3. CALL GETID - TO LOCATE AND VALIDATE ID OPTION; 00224000
* IF NONE, EXIT GIVING ERROR MSG027E. 00225000
* 4. CH01-CALL DMKSCNFD TO LOCATE NEXT OPTION; 00226000
* IF NONE, GO TO STEP 10. 00227000
* 5. CH02-IF OPTION = 'CLASS' CALL GETCLASSB TO LOCATE AND 00228000
* VALIDATE CLASS CHARACTER AND GO TO STEP 4. 00229000
* 6. CH03 IF OPTION = 'COPY', CALL GETCOPY TO LOCATE AND 00230000
* VALIDATE NUMBER OF COPIES, GO TO STEP 4. 00231000
* 7. CH05-IF OPTION = 'DIST', CALL DMKSCNFD TO LOCATE 00232000
* DIST-CODE; IF NONE OR INVALID, EXIT GIVING 00233000
* ERROR MSG032E; SAVE DIST-CODE IN SAVEWRK8,9 AND 00234000
* GO TO STEP 4: OTHERWISE, CONTINUE. 00235000
* 7A. CH05A-IF OPTION ='FLASH',CALL GETFLASH TO LOCATE AND 00236000
* VALIDATE THE OVERLAY NAME AND NUMBER OF 00237000
* COPIES TO BE FLASHED AND GO TO STEP 4;ELSE CONT. 00238000
* 7B. CH05B-IF OPTION='CHARS',CALL GETCHARS TO LOCATE AND 00239000
* VALIDATE THE CHARACTER ARRANGEMENT TABLE SPECIFIED. 00240000
* THEN GO TO STEP 4; OTHERWISE CONTINUE. 00241000
* 7C. CH05C-IF OPTION='MODIFY',CALL GETCMOD TO LOCATE AND 00242000
* VALIDATE THE COPY MODIFICATION NAME AND 00243000
* GO TO STEP 4; OTHERWISE CONTINUE. 00244000
* 8. CH07-IF OPTION = 'NAME', CALL GETNAME TO LOCATE 00245000
* SAVE FNAME AND FTYPE: GO TO STEP 4. 00246000
* 8A. CH16A-IF OPTION='FCB',CALL GETFCB TO LOCATE AND 00247000
* VALIDATE THE FCB SPECIFIED AND 00248000
* GO TO STEP 4; OTHERWISE CONTINUE. 00249000
* 9. CH04,CH06-IF OPTION = 'HOLD' AND/OR 'NOHOLD' SET 00250000
* FLAG IN SAVEWRK5 AND GO TO STEP 4. 00251000
* OTHERWISE, EXIT GIVING ERROR MSG003E. 00252000
* 10. CH08-IF NO OPTIONS, EXIT GIVING ERROR MSG026E. 00253000
* CALL GETFILE - FET SPOOL FILE: 00254000
* IF NONE AND SEARCH IS BY SPOOLID, EXIT GIVING 00255000
* ERROR MSG042E: OTHERWISE EXIT. 00256000
* 11. CH09-CH14-UPDATE THE SPOOL FILE BLOK WITH 00257000
* THE DATA ABTAINED FROM THE COMMAND LINE. 00258000
* IN ADDITION, IF ANY PARAMETERS HAVE BEEN SPECIFIED 00259000
* WHICH REQUIRE MODIFICATION OF THE FIRST DASD 00260000
* SPOOL FILE BUFFER, READ THAT IN, MODIFY IT, AND 00261000
* WRITE IT BACK OUT TO DASD. 00262000
* IF READER FILE, BAL R4 SETPEND TO POST INTERRUPT. 00263000
* IF SEARCH IS BY CLASS GO TO STEP 10: IF OUTPUT 00264000
* FILE TYPE CALL DMKCSOSD TO START PUNCH OR PRINTER. 00265000
* 00266000
* 00267000
* RESPONSE - 00268000
* 00269000
* NNNN FILES CHANGED 00270000
* NO 00271000
* 00272000
* ERROR MESSAGES - 00273000
* 00274000
* DMKCSU003E INVALID OPTION - (OPTION) 00275000
* DMKCSU006E INVALID DEVICE TYPE - (TYPE) 00276000
* DMKCSU008E INVALID SPOOLID - (SPOOLID) 00277000
* DMKCSU013E CONFLICTING OPTION - (OPTION) 00278000
* DMKCSU026E OPERAND MISSING OR INVALID 00279000
* DMKCSU027E SPOOLID MISSING OR INVALID 00280000
* DMKCSU028E CLASS MISSING OR INVALID 00281000
* DMKCSU029E FNAME FTYPE MISSING OR INVALID 00282000
* DMKCSU030E COPIES MISSING OR INVALID 00283000
* DMKCSU032E DISTCODE MISSING OR INVALID 00284000
* DMKCSU035E DEVICE TYPE MISSING OR INVALID 00285000
* DMKCSU042E SPOOLID NNNN DOES NOT EXIST 00286000
*. 00287000
EJECT 00288000
ID DC CL8'DMKCSU' MODULE NAME 00289000
SPACE 2 00290000
DMKCSUCH RELOC 00291000
SPACE 00292000
BAL R4,CLEAR CLEAR SAVEWRK1,4-9,SAVEWRK2-3 TO 00293000
* VMUSER AND SAVEWRK5(2) TO FFS 00294000
MVC SAVEWRK8(8),BLANKS BLANK AREA FOR DIST CODE 00295000
TM VMCLEVEL,VMCLASSD CLASS D USER ?? 00296000
BZ CH00 NO -- 00297000
L R3,FFS INDICATE TEST FOR USERID AND SYSTEM 00298000
BAL R4,GETUSER GET USERID @V200930 00299000
SPACE 00300000
* BITS DEFINED IN SAVEWRK5+3 00301000
* 00302000
* X'40' AT LEAST ONE OPTION PRESENT 00303000
* X'20' HOLD OPTION PRESENT 00304000
* X'10' NOHOLD OPTION PRESENT 00305000
* X'08' A FIRST DASD BUFFER FIELD HAS BEEN SPECIFIED 00306000
* X'04' MULTIPLE COPIES IN 1 TRANSMISSION FOR 3800 PRESENT 00307000
* X'02' SYS OPTION 00308000
* X'01' NOSYS OPTION 00309000
CH00 EQU * 00310000
LA R0,HLDSIZE SIZE OF LOCAL WORK AREA @V60B9BA 00311000
CALL DMKFREE GET THE SPACE NEEDED @V60B9BA 00312000
ST R1,SAVEWRK4 SAVE THE POINTER TO IT @V60B9BA 00313000
XC 0(HLDSIZE*8,R1),0(R1) CLEAR IT @V60B9BA 00314000
BAL R4,GETYPE GET DEVICE TYPE @V200930 00315000
SPACE 00316000
EX R5,CLIALL TYPE = ALL ?? 00317000
BE MSG006E YES - INVALID 00318000
SPACE 00319000
BAL R4,GETID GET SPOOL ID @V200930 00320000
BNZ MSG027E NO OPTIONS FOUND 00321000
SPACE 00322000
* SCAN FOR 'CLASS' 'COPY' 'HOLD' 'NOHOLD' 'DIST' 'NAME' 00323000
* 00324000
CH01 EQU * 00325000
CALL DMKSCNFD LOCATE NEXT OPTION. 00326000
BNZ CH07A PROCESS OPTIONS 00327000
SPACE 00328000
CH02 EQU * 00329000
LR R14,R0 GET COUNT 00330000
BCTR R14,0 -1 00331000
C R0,F1 LENGTH = 1 00332000
BE MSG003E YES - INVALID OPTION 00333000
SPACE 00334000
OI SAVEWRK5+3,X'40' INDICATE AT LEAST ONE OPTION 00335000
EX R14,CLCCLASS OPTION = CLASS ?? 00336000
BNE CH03 NO- 00337000
CLI SAVEWRK5+2,X'00' CLASS PRESENT ?? 00338000
BNE MSG013E YES -- CONFLICTING OPTION 00339000
SPACE 00340000
BAL R3,GTCLASSB GET CLASS B AND VERIFY AND SAVE 00341000
* SAVEWRK5+2(1) 00342000
B CH01 00343000
SPACE 00344000
CH03 EQU * 00345000
EX R14,CLCCOPY OPTION = COPY ?? 00346000
BNE CH04 NO- 00347000
CLI SAVEWRK1+1,X'00' COPIES PRESENT ?? 00348000
BNE MSG013E YES -- CONFLICTING OPTION 00349000
SPACE 00350000
BAL R4,GETCOPY GET COPY @V200930 00351000
B CH01 GO LOCATE NEXT OPTION 00352000
SPACE 00353000
CH04 EQU * 00354000
EX R14,CLCHOLD OPTION = HOLD ?? 00355000
BNE CH05 NO -- 00356000
TM SAVEWRK5+3,X'30' HOLD OR NOHOLD SET ?? 00357000
BNZ MSG013E YES -- CONFLICTING OPTION 00358000
OI SAVEWRK5+3,X'20' INDICATE HOLD OPTION 00359000
B CH01 00360000
SPACE 00361000
CH05 EQU * 00362000
EX R14,CLCDIST OPTION = DIST ?? 00363000
BNE CH05A NO -- @V60B9BA 00364000
CLI SAVEWRK8,C' ' DIST CODE PRESENT ?? 00365000
BH MSG013E YES -- CONFLICTING OPTION 00366000
CALL DMKSCNFD GET DIST CODE 00367000
BNZ MSG032E MISSING DIST CODE 00368000
C R0,F8 IS LENGTH CORRECT 00369000
BH MSG032E DIST CODE INVALID 00370000
LR R14,R0 COUNT 00371000
BCTR R14,0 -1 00372000
EX R14,MVCDIST AND MOVE TO SAVEWRK8,9 00373000
B CH01 00374000
SPACE 00375000
CH05A L R4,SAVEWRK4 GET THE WORK AREA @V60B9BA 00376000
USING HLDAREA,R4 ADDRESSIBILITY @V60B9BA 00377000
EX R14,CLCFLASH TEST FOR FLASH @V60B9BA 00378000
BNE CH05B XFER IF NOT FLASH @V60B9BA 00379000
CLI HLDFLASH,X'00' FLASH PRESENT? @V60B9BA 00380000
BNE MSG013E YES - CONFLICTING OPTION @V60B9BA 00381000
BAL R4,GETFLASH GET FLASH PARAMETERS @V60B9BA 00382000
B CH01 SCAN FOR NEXT PARAMETER @V60B9BA 00383000
SPACE 00384000
CH05B EX R14,CLCCHARS TEST FOR CHARS @V60B9BA 00385000
BNE CH05C XFER IF NOT CHARS @V60B9BA 00386000
CLI HLDCHARS,X'00' CHARS PRESENT? @V60B9BA 00387000
BNE MSG013E YES - CONFLICTING OPTION @V60B9BA 00388000
BAL R4,GETCHARS GET CHARS PARAMETER @V60B9BA 00389000
B CH01 SCAN FOR NEXT PARAMETER @V60B9BA 00390000
SPACE 00391000
CH05C EX R14,CLCCMOD TEST FOR MODIFY @V60B9BA 00392000
BNE CH06 XFER IF NOT FLASH @V60B9BA 00393000
CLI HLDCMOD,X'00' MODIFY PRESENT ? @V60B9BA 00394000
BNE MSG013E YES - CONFLICTING OPTION @V60B9BA 00395000
BAL R4,GETCMOD GET MODIFY PARAMETER @V60B9BA 00396000
B CH01 SCAN FOR NEXT PARAMETER @V60B9BA 00397000
SPACE 00398000
CH06 EQU * @VM08881 00399000
EX R14,CLCNAME OPTION = NAME ?? @VM08881 00400000
BNE CH07 NO, TEST FOR 3 CHAR TYPES @VM08881 00401000
BAL R4,GETNAME GET FILE NAME AND FILE TYPE @VM08881 00402000
CALL DMKSCNFD NEXT ARG PLEASE @VM08881 00403000
BZ MSG003E WASN'T SUPPOSED TO BE ONE @VM08881 00404000
B CH07A PROCESS WHAT WE HAVE @VM08881 00405000
SPACE 00406000
CH07 EQU * @VM08881 00407000
C R0,F3 LENGTH = 3 00408000
BL MSG003E NO - LESS THAN 3, ERROR @VM08713 00409000
EX R14,CLCNOHLD NOHOLD ?? 00410000
BNE CH16A NO - @V60B9BA 00411000
TM SAVEWRK5+3,X'30' NOHOLD OR HOLD SET ?? 00412000
BNZ MSG013E YES -- CONFLICTING OPTION 00413000
OI SAVEWRK5+3,X'10' SET NOHOLD 00414000
B CH01 00415000
CH16A EX R14,CLCFCB IS IT FCB OPTION @V60B9BA 00416000
BNE CH16 XFER IF NOT @V60B9BA 00417000
CLI HLDFCB,X'00' BEEN SPECIFIED BEFORE ? @V60B9BA 00418000
BNE MSG013E YES - CONFLICTING OPTIONS @V60B9BA 00419000
BAL R4,GETFCB LOCATE AND VERIFY FCB @V60B9BA 00420000
B CH01 GET NEXT OPTION @V60B9BA 00421000
DROP R4 NO LONGER NEEDED @V60B9BA 00422000
SPACE 00423000
CH16 EX R14,CLCSYS TEST FOR SYS @V200930 00424000
BNE CH17 NO @V200930 00425000
TM VMCLEVEL,VMCLASSD THIS A CLASS D USER ? @VA04090 00426000
BNO MSG003E NO, INVALID OPTION @VA04090 00427000
TM SAVEWRK5+3,X'03' SYS OR NOSYS ALREADY ?? @V200930 00428000
BNZ MSG013E YES @V200930 00429000
OI SAVEWRK5+3,X'02' SYS OPTION @V200930 00430000
B CH01 GET NEXT OPTION @V200930 00431000
CH17 EX R14,CLCNOSYS TEST FOR NOSYS @V200930 00432000
BNE MSG003E NO, INVALID @V200930 00433000
C R0,F5 IS IT LESS THAN 'NOSYS' @VM08713 00434000
BL MSG003E YUP, ERROR @VM08713 00435000
TM VMCLEVEL,VMCLASSD THIS A CLASS D USER ? @VA04090 00436000
BNO MSG003E NO, INVALID OPTION @VA04090 00437000
TM SAVEWRK5+3,X'03' SYS OR NOSYS ALREADY ?? @V200930 00438000
BNZ MSG013E YES @V200930 00439000
OI SAVEWRK5+3,X'01' NOSYS OPTION @V200930 00440000
B CH01 GET NEXT @V200930 00441000
SPACE 00442000
CH07A EQU * 00443000
BAL R4,COUNT ZERO COUNT FIELD 00444000
TM SAVEWRK5+3,X'40' ANY OPTIONS ?? 00445000
BZ MSG026E MISSING OPERANDS 00446000
ST R7,SAVEWRK6 SAVE CHAIN ANCHOR @V304298 00447000
SPACE 00448000
CH08 EQU * 00449000
SLR R10,R10 NOT COUNT ONLY IN GETFILE @VA08376 00450000
BAL R4,GETFILE GET NEXT SPOOL FILE @V200930 00451000
LTR R7,R7 SPOOL FILE FOUND ?? 00452000
BNZ CH09 YES -- 00453000
CLC SAVEWRK1+2(2),ZEROES SEARCH BY SPOOLID ?? 00454000
BNE MSG042E YES -- SPOOLID NOT FOUND 00455000
B CH14 ALL DONE - 00456000
SPACE 00457000
CH09 EQU * 00458000
OI SFBFLAG,SFBINUSE TELL EVERYONE WE HAVE THE FILE @VA08075 00459000
BAL R4,COUNT UPDATE FILE COUNT 00460000
CLI SAVEWRK5+2,X'00' NEW CLASS PRESENT ?? 00461000
BE CH09A NO 00462000
MVC SFBCLAS(1),SAVEWRK5+2 MOVE IN NEW SFBCLASS 00463000
SPACE 00464000
CH09A EQU * 00465000
CLI SAVEWRK1+1,X'00' NEW COPY PRESENT ?? 00466000
BE CH10 NO --- 00467000
MVC SFBCOPY+1(1),SAVEWRK1+1 MOVE IN NEW COPY 00468000
SPACE 00469000
CH10 EQU * 00470000
TM SAVEWRK5+3,X'20' HOLD ?? 00471000
BZ CH10B NO -- 00472000
OI SFBFLAG,SFBUHOLD SET USER HOLD STATUS 00473000
CH10B TM SAVEWRK5+3,X'10' NOHOLD ?? 00474000
BZ CH11 NO -- 00475000
NI SFBFLAG,X'FF'-SFBUHOLD RESET USER HOLD STATUS 00476000
CH11 TM SAVEWRK5+3,X'02' SYS OPTION ?? @V200930 00477000
BZ CH10C NO, TEST FOR NOSYS @V200930 00478000
OI SFBFLAG,SFBSHOLD SET SYS HOLD @V200930 00479000
CH10C TM SAVEWRK5+3,X'01' NOSYS OPTION ?? @V200930 00480000
BZ CH11A NO, CONT @V200930 00481000
NI SFBFLAG,X'FF'-SFBSHOLD RESET SYS HOLD @V200930 00482000
CH11A DS 0H @V200930 00483000
CLI SAVEWRK8,C' ' NEW DISTRIBUTION CODE PRESENT ?? 00484000
BE CH12 NO -- 00485000
MVC SFBDIST(8),SAVEWRK8 MOVE IN NEW DIST CODE 00486000
SPACE 00487000
CH12 EQU * 00488000
L R14,SAVEWRK4 ADDRESS OF FNAME FTYPE 00489000
CLI 0(R14),X'00' FNAME FTYPE PRESENT ?? @V60B9BA 00490000
BE CH12A NO --- CONT @V60B9BA 00491000
MVC SFBFNAME(24),0(R14) MOVE FNAME FTYPE FROM COMMAND LINE 00492000
SPACE 00493000
CH12A TM SAVEWRK5+3,X'08' ANYTHING IN SPLINK CHANGED? @V60B9BA 00494000
BZ CH13 XFER IF NOT @V60B9BA 00495000
SPACE 00496000
* THE FIRST DASD BUFFER MUST NOW BE READ IN TO UPDATE ANY FIELDS 00497000
* THAT MIGHT HAVE BEEN CHANGED. 00498000
SPACE 00499000
L R4,SAVEWRK4 POINT TO WORK AREA @V60B9BA 00500000
USING HLDAREA,R4 ADDRESSIBILITY @V60B9BA 00501000
CALL DMKPGTVG RESERVE SYSTEM VIRT PAGE @V60B9BA 00502000
ST R1,HLDPTR SAVE THE ADDRESS OF IT @V60B9BA 00503000
L R0,SFBSTART DASD ADDRESS OF 1ST BUFFER @V60B9BA 00504000
CALL DMKRPAGT,PARM=(BRING+SYSTEM) BRING IT IN @V60B9BA 00505000
BNZ MSG424E PAGING ERROR - QUIT @V60B9BA 00506000
USING SPLINK,R2 ADDRESSIBILITY TO SPLINK @V60B9BA 00507000
CLI SAVEWRK1+1,X'00' NEW COPY PRESENT ? @V60B9BA 00508000
BE CH12C XFER IF NOT @V60B9BA 00509000
TM SAVEWRK5+3,X'04' SPECIAL COPY SET ? @V60B9BA 00510000
BZ CH12B XFER IF NOT @V60B9BA 00511000
OI SPFLAG1,SPCOPYFG SET IT THEN @V60B9BA 00512000
B CH12C AND CONTINUE @V60B9BA 00513000
CH12B NI SPFLAG1,X'FF'-SPCOPYFG RESET THE FLAG @V60B9BA 00514000
SPACE 00515000
CH12C CLI HLDCHARS,X'00' NEW CHARS PRESENT ? @V60B9BA 00516000
BE CH12D XFER IF NOT @V60B9BA 00517000
MVC SPCHAR,HLDCHARS MOVE IN THE NEW VALUE @V60B9BA 00518000
CLC SPCHAR,=C'NULL' NULL VALUE SPECIFIED ? @V60B9BA 00519000
BNE CH12D XFER IF NOT @V60B9BA 00520000
MVC SPCHAR,ZEROES NULLIFY PREVIOUS SETTING @V60B9BA 00521000
SPACE 00522000
CH12D CLI HLDFCB,X'00' NEW FCB PRESENT ? @V60B9BA 00523000
BE CH12E XFER IF NOT @V60B9BA 00524000
MVC SPFCB,HLDFCB MOVE IN THE NEW VALUE @V60B9BA 00525000
CLC SPFCB,=C'NULL' NULL VALUE SPECIFIED? @V60B9BA 00526000
BNE CH12E XFER IF NOT @V60B9BA 00527000
MVC SPFCB,ZEROES NULLIFY PREVIOUS SETTING V60B9BA 00528000
SPACE 00529000
CH12E CLI HLDFLASH,X'00' NEW FLASH PRESENT ? @V60B9BA 00530000
BE CH12F XFER IF NOT @V60B9BA 00531000
MVC SFBFLASH,HLDFLASH MOVE IN THE FLASH NAME @V60B9BA 00532000
MVC SPFLSHC,HLDFLSHC MOVE IN THE FLASH COUNT @V60B9BA 00533000
CLI SPFLSHC,X'00' NEW COUNT ZERO ? @V60B9BA 00534000
BNE CH12F XFER IF NOT @V60B9BA 00535000
XC SFBFLASH,SFBFLASH NULLIFY THE FLASH NAME @V60B9BA 00536000
SPACE 00537000
CH12F CLI HLDCMOD,X'00' NEW MODIFY PRESENT ? @V60B9BA 00538000
BE CH12G XFER IF NOT @V60B9BA 00539000
MVC SPCMOD,HLDCMOD MOVE IT IN @V60B9BA 00540000
CLC SPCMOD,=C'NULL' NULL VALUE SPECIFIED ? @V60B9BA 00541000
BNE CH12G XFER IF NOT @V60B9BA 00542000
MVC SPCMOD,ZEROES NULLIFY PREVIOUS SETTING @V60B9BA 00543000
SPACE 00544000
DROP R2 00545000
CH12G L R0,SFBSTART DASD ADDR OF 1ST BUFFER @V60B9BA 00546000
L R1,HLDPTR ADDR OF SYSTEM VIRT PAGE @V60B9BA 00547000
CALL DMKRPAPT,PARM=SYSTEM WRITE IT OUT @V60B9BA 00548000
L R1,HLDPTR ADDR OF SYSTEM VIRT PAGE @V60B9BA 00549000
SR R0,R0 DUMMY DASD ADDRESS @V60B9BA 00550000
CALL DMKRPAGT,PARM=SYSTEM RELEASE CORE PAGE @V60B9BA 00551000
CALL DMKPGTVR RETURN SYSTEM VIRT PAGE @V60B9BA 00552000
SPACE 00553000
DROP R4 @V60B9BA 00554000
CH13 DS 0H @VA07708 00555000
CALL DMKCKSPL,PARM=CHGSFB CHECKPOINT @VA07708 00556000
EX R5,TMRDR READER FILE ? @VA07708 00557000
BZ CH13C NO - CHECK FOR MORE @VA01375 00558000
CH13A TM SAVEWRK5+3,X'11' NOHOLD OR NOSYS ?? @VA01375 00559000
BNZ CH13B YES - POST DEVICE END INTERRUPT @VA01375 00560000
CLI SAVEWRK5+2,X'00' CLASS PRESENT ?? @VA01375 00561000
BE CH13C NO - CHECK FOR MORE FILES @VA01375 00562000
CH13B EQU * @VA07456 00563000
TM SFBFLAG,SFBUHOLD+SFBSHOLD HELD FILE ?? @VA07456 00564000
BNZ CH13C YES DO NOT GEN AN INTERUPT @VA07456 00565000
BAL R4,SETPEND POST READER WITH D. E. @VA07456 00566000
CH13C DS 0H ANY MORE ? @VA07708 00567000
NI SFBFLAG,255-SFBINUSE WE ARE DONE WITH FILE @VA08075 00568000
CLC SAVEWRK1+2(2),ZEROES SEARCH BY SPOOLID ? @V304298 00569000
BNE CH14 XFER IF SO @V304298 00570000
LR R2,R7 SAVE CURRENT SFBLOK @V304298 00571000
L R7,SAVEWRK6 START AT TOP OF CHAIN @V304298 00572000
CH13D L R7,0(R7) GET NEXT SPOOL FILE @V304298 00573000
LTR R7,R7 ANY AROUND? @V304298 00574000
BZ CH14 XFER IF NOT @V304298 00575000
CR R7,R2 BACK TO CURRENT ONE? @V304298 00576000
BE CH08 XFER IF SO @V304298 00577000
B CH13D TRY AGAIN IF NOT @V304298 00578000
CH14 EX R5,TMRDR TYPE = RDR ?? 00579000
BO CH14B YES -- EXIT 00580000
TM SAVEWRK5+3,X'11' NOHOLD OR NOSYS ?? @V200930 00581000
BNZ CH14A YES, START PERHAPS @V200930 00582000
CLI SAVEWRK5+2,X'00' CLASS PRESENT ?? 00583000
BE CH14B NO -- EXIT 00584000
CH14A EQU * 00585000
CALL DMKCSOSD START PUNCH OR PRINTER 00586000
* IF NOT ACTIVE 00587000
CH14B B CSUEXIT 00588000
SPACE 3 00589000
* ***EXECUTED INSTRUCTIONS*** 00590000
CLIALL CLI =AL1(CSURDR+TYPPRT+TYPPUN),X'00' MASK = READER PRINTER 00591000
* PUNCH 00592000
TMRDR TM =AL1(CSURDR),X'00' MASK = READER 00593000
TMPRT TM =AL1(TYPPRT),X'00' MASK = PRINTER 00594000
TMPUN TM =AL1(TYPPUN),X'00' MASK = PUNCH 00595000
SPACE 00596000
CNTMSG EQU * NUMBER OF FILES PROCESSED MESSAGE 00597000
MSGCNT DC CL5' ' PLACE FOR COUNT OR NO 00598000
MSGFILE DC CL6' ' FOR FILES OR FILE 00599000
MSGCMD DC CL11' ' PLACE FOR COMMAND @VA04869 00600000
CNTMSGL EQU *-CNTMSG LENGTH OF MESSAGE 00601000
DS 0H 00602000
EJECT 00603000
*. 00604000
**************************************** 00605000
* 00606000
* SUBROUTINES 00607000
* 00608000
**************************************** 00609000
* 00610000
* 00611000
* 00612000
* OPERATION OF GETUSER - 00613000
* 00614000
* 1. CALL DMKSCNFD TO LOCATE USERID: 00615000
* IF NONE, EXIT GIVING ERROR MSG020E. 00616000
* 2. IF GPR3 = FFS AND OPTION = 'SYSTEM', RETURN TO CALLER 00617000
* 3. CALL DMKUDRFU: VERIFY USERID. 00618000
* IF INVALID AND GPR3 = FFS, RETURN TO CALLER 00619000
* IF INVALID OR MISSING EXIT GIVING ERROR MSG020E. 00620000
* 4. MOVE USERID TO SAVEWRK2,3 AND RETURN TO CALLER. 00621000
*. 00622000
SPACE 3 00623000
GETUSER EQU * HERE TO MOVE USERID TO SAVEWRK2,3 00624000
SPACE 00625000
GU01 EQU * 00626000
C R3,FFS TEST FOR 'SYSTEM' OR 1ST USERID ? 00627000
BNE *+10 NO -- 00628000
MVC SAVEWRK6(8),BUFNXT-BUFFER(R9) SAVE SCAN POINTERS 00629000
CALL DMKSCNFD LOCATE USERID 00630000
BZ GU02 OPTION PRESENT 00631000
C R3,FFS TEST FOR SYSTEM ?? 00632000
BE GU02C YES -- 00633000
B MSG020E USERID MISSING 00634000
SPACE 00635000
GU02 MVC SAVEWRK2(8),BLANKS RESET USERID SAVE AREA 00636000
C R0,F8 LENGTH GREATER THAN EIGHT ?? 00637000
BNH GU02A 00638000
C R3,FFS TEST FOR 'SYSTEM' OR FIRST USERID ?? 00639000
BE GU02C YES -- 00640000
B MSG007E INVALID USERID MESSAGE 00641000
SPACE 00642000
GU02A C R3,FFS TEST FOR 'SYSTEM' ?? 00643000
BNE GU02B NO -- 00644000
C R0,F6 LENGTH OF 'SYSTEM' 00645000
BNE GU02B NO -- WRONG LENGTH 00646000
CLC =C'SYSTEM',0(R1) OPTION = 'SYSTEM' ?? 00647000
BNE GU02B NO -- CONT 00648000
BALR R3,R4 RESET GPR3 AND RETURN 00649000
SPACE 00650000
GU02B SR R2,R2 PARM REG 00651000
CALL DMKUDRFU VERIFY USER 00652000
BZ GU03 VALID USERID 00653000
TM SAVEWRK5+3,X'40' IS IT A RECLAIM FUNCTION ?? @V200930 00654000
BZ GU02D NO, CONT @V200930 00655000
C R0,F3 IS IT 3 CHARS ?? @V200930 00656000
BNE GU02D NO, CONT @V200930 00657000
CLC 0(3,R1),=CL3'ALL' IS IT ALL OPTION ?? @V200930 00658000
BNE GU02D NO, CONT @V200930 00659000
BALR R3,R4 RETURN WITH USERID BLANK @V200930 00660000
GU02D DS 0H @V200930 00661000
C R3,FFS CLASS D WITH USERID ?? 00662000
BNE MSG053E NO -- INDICATE ERROR 00663000
GU02C MVC SAVEWRK2(8),VMUSER MOVE IN CLASS D USERID 00664000
MVC BUFNXT-BUFFER(8,R9),SAVEWRK6 RESET SCAN POINTERS 00665000
BR R4 RETURN TO CALLER 00666000
GU03 LR R14,R0 COUNT 00667000
BCTR R14,0 -1 00668000
EX R14,MVCID MOVE USER ID FROM COMMAND LINE TO 00669000
* SAVEWRK2,3 00670000
BALR R3,R4 RESET GPR3 AND RETURN TO CALLER 00671000
SPACE 00672000
MVCID MVC SAVEWRK2(0),0(R1) ***EXECUTED*** 00673000
SPACE 3 00674000
CLEAR XC SAVEWRK4(24),SAVEWRK4 CLEAR SAVEWRK AREA 00675000
XC SAVEWRK1(4),SAVEWRK1 00676000
MVC SAVEWRK2(8),VMUSER MOVE IN USERID 00677000
MVC SAVEWRK5(2),FFS SET TO X'FFFF' 00678000
BR R4 RETURN TO CALLER 00679000
SPACE 3 00680000
COUNT EQU * HERE TO UPDATE FILE COUNT 00681000
LH R14,SAVEWRK5 GET COUNT 00682000
LA R14,1(R14) UPDATE BY ONE AND 00683000
STH R14,SAVEWRK5 STORE 00684000
BR R4 RETURN TO CALLER 00685000
EJECT 00686000
*. 00687000
* 00688000
* OPERATION OF GETYPE - 00689000
* 00690000
* 1. CALL DMKSCNFD TO LOCATE DEVICE TYPE FIELD 00691000
* 2. IF OPTION = 'READER', 'PRINT', 'PUNCH' OR 'ALL', SET 00692000
* GPR5 = APPROPRIATE DEVICE TYPE AND GO TO STEP 3. 00693000
* IF OPTION = 'ALL', SET GPR5 EQUAL TO CSURDR+TYPPRT+ 00694000
* TYPPUN, AND GO TO STEP 3. 00695000
* IF TEST FOR SYSTEM OR 1ST USERID, EXIT GIVING MSG003E. 00696000
* OTHERWISE EXIT GIVING MSG0006E. 00697000
* 3. SET GPR6 TO FFS, CALL GETCHAIN (GPR6 WILL BE FILLED BY 00698000
* GETCHAIN WITH THE APPROPRIATE FILE CHAIN ANCHOR) 00699000
* 4. EXIT 00700000
*. 00701000
SPACE 3 00702000
GETYPE EQU * 00703000
SPACE 00704000
GT01 LA R5,CSURDR+TYPPRT+TYPPUN SET FOR ALL TYPE 00705000
CALL DMKSCNFD LOCATE DEVICE TYPE FIELD 00706000
STM R0,R1,SAVEWRK6 SAVE COUNT AND ADDRESS OF TYPE 00707000
BZ GT02 OPTION PRESENT 00708000
C R3,FFS CLASS D USER ?? 00709000
BE MSG026E YES -- OPERAND MISSING 00710000
B MSG035E DEVICE TYPE MISSING 00711000
SPACE 00712000
GT02 EQU * 00713000
* GPR1 ADDRESS OF TYPE 00714000
LR R14,R0 GET OPTION COUNT 00715000
BCTR R14,0 -1 00716000
C R0,F2 COUNT LENGTH OF 2 00717000
BE GT02A VALID FOR PUNCH 00718000
BL GT02B VALID FOR READER PRINTER 00719000
EX R14,CLCALL ALL ?? 00720000
BE DEVIC YES 00721000
LA R5,CSURDR SET R5 TO READER TYPE 00722000
EX R14,CLCRDR RDR ?? 00723000
BE DEVIC YES 00724000
LA R5,TYPPRT PRINTER MASK 00725000
EX R14,CLCPRT PRT ?? 00726000
BE DEVIC YES - 00727000
SPACE 00728000
LA R5,TYPPUN SET GPR5 TO PUNCH TYPE 00729000
EX R14,CLCPCH PCH ?? 00730000
BE DEVIC YES 00731000
GT02A LA R5,TYPPUN PUNCH MASK 00732000
EX R14,CLCPUN PUNCH ?? 00733000
BE DEVIC YES - 00734000
SPACE 00735000
GT02B LA R5,TYPPRT SET GPR5 TO PRINTER TYPE 00736000
EX R14,CLCPRINT PRINTER ?? 00737000
BE DEVIC YES - 00738000
SPACE 00739000
LA R5,CSURDR TYPE MASK FOR READER 00740000
EX R14,CLCREAD READER ?? 00741000
BE DEVIC 00742000
C R3,FFS TEST FOR 'SYSTEM' OR 1ST USERID ? 00743000
BE MSG003E YES -- INVALID OPTION 00744000
B MSG006E INVALID DEVICE TYPE 00745000
SPACE 00746000
DEVIC EQU * HERE TO SET UP FILE POINTER 00747000
SPACE 00748000
GT05 L R6,FFS SET 1ST TIME SWITCH FOR GETCHAIN 00749000
BAL R3,GETCHAIN GET NEXT ORDERED CHAIN @V200930 00750000
SPACE 00751000
GT06 CR R2,R2 SET CC = ZERO 00752000
BR R4 RETURN TO CALLER 00753000
SPACE 3 00754000
SPACE 3 00755000
CLCALL CLC 0(0,R1),=C'ALL ' COMPARE FOR ALL 00756000
CLCRDR CLC 0(0,R1),=C'RDR ' COMPARE FOR RDR 00757000
CLCPCH CLC 0(0,R1),=C'PCH ' COMPARE FOR PCH 00758000
CLCPRT CLC 0(0,R1),=C'PRT ' COMPARE FOR PRT 00759000
CLCPRINT CLC 0(0,R1),=C'PRINTER ' COMPARE FOR PRINTER 00760000
CLCPUN CLC 0(0,R1),=C'PUNCH ' COMPARE FOR PUNCH 00761000
CLCREAD CLC 0(0,R1),=C'READER ' COMPARE FOR READER 00762000
CLCCLASS CLC 0(0,R1),=C'CLASS ' COMPARE FOR CLASS 00763000
CLCHOLD CLC 0(0,R1),=C'HOLD ' COMPARE FOR HOLD 00764000
CLCNOHLD CLC 0(0,R1),=C'NOHOLD ' COMPARE FOR NOHOLD 00765000
CLCSYS CLC 0(0,R1),=C'SYS ' COMPARE FOR SYS @V200930 00766000
CLCNOSYS CLC 0(0,R1),=C'NOSYS ' COMPARE FOR NOSYS @V200930 00767000
CLCCOPY CLC 0(0,R1),=C'COPY ' COMPARE FOR COPY 00768000
CLCNAME CLC 0(0,R1),=C'NAME ' COMPARE FOR NAME 00769000
CLCDIST CLC 0(0,R1),=C'DIST ' COMPARE FOR DIST 00770000
MVCDIST MVC SAVEWRK8(0),0(R1) MOVE DIST CODE 00771000
CLCCHARS CLC 0(0,R1),=C'CHARS ' COMPARE FOR CHARS @V60B9BA 00772000
CLCFLASH CLC 0(0,R1),=C'FLASH ' COMPARE FOR FLASH @V60B9BA 00773000
CLCCMOD CLC 0(0,R1),=C'MODIFY ' COMPARE FOR MODIFY @V60B9BA 00774000
CLCFCB CLC 0(0,R1),=C'FCB ' COMPARE FOR FCB @V60B9BA 00775000
EJECT 00776000
*. 00777000
* OPERATION OF GETCLASS - 00778000
* 00779000
* 1. CALL DMKSCNFD TO LOCATE THE DESIRED CLASS 00780000
* 2. VERIFY THAT ONLY ONE CLASS IS GIVEN, AND TRT THE CLASS 00781000
* AGAINST A TABLE OF VALID CLASSES TO VERIFY ITS VALIDITY; 00782000
* THE FUNCTION TABLE IS SET TO STORE THE VALID CLASS IN GPR2 00783000
* IF CLASS IS MISSING OR INVALID, EXIT GIVING MSG028E. 00784000
* 3. IF ENTRY IS GTCLASSB, STORE CLASS IN SAVEWRK8, 00785000
* OTHERWISE STORE THE CLASS IN SAVEWRK1 AND EXIT. 00786000
* 4. NOTE THAT GETCLASS IS A 2ND LEVEL ROUTINE; LINKAGE IS VIA 00787000
* GPR3 00788000
*. 00789000
SPACE 3 00790000
GTCLASSB MVI SAVEWRK5+2,X'FF' INDICATE CLASS NOT SPOOLID 00791000
GETCLASS EQU * HERE TO LOCATE AND VERIFY CLASS 00792000
SPACE 00793000
GCL01 CALL DMKSCNFD 00794000
BNZ MSG028E CLASS MISSING - EXIT 00795000
SPACE 00796000
GCL02 C R0,F1 MUST BE ONLY ON CLASS COUNT=1 00797000
BNE MSG028E NO-- 00798000
CLI 0(R1),C'A' CLASS LOWER THAN A 00799000
BL MSG028E YES - INVALID CLASS 00800000
ST R2,TEMPR2 SAVE GPR2 00801000
TRT 0(1,R1),CLTABLE CLASS VALID ?? 00802000
BH GCL03 VALID 00803000
B MSG028E NO - INVALID CLASS 00804000
SPACE 00805000
GCL03 CLI SAVEWRK5+2,X'FF' STORE CLASS IN SAVEWRK5+2 ?? 00806000
BNE GCL04 NO STORE IN SAVEWRK1 00807000
STC R2,SAVEWRK5+2 SAVE CLASS CHARACTER 00808000
B GCL05 00809000
SPACE 00810000
GCL04 EQU * 00811000
STC R2,SAVEWRK1 SAVE CLASS 00812000
GCL05 CR R1,R1 CC = ZERO 00813000
L R2,TEMPR2 RESTORE GPR2 00814000
BR R3 RETURN TO CALLER 00815000
SPACE 3 00816000
ORG *-193 00817000
CLTABLE EQU * 00818000
ORG 00819000
DC C'ABCDEFGHI' 00820000
DC XL7'00' 00821000
DC C'JKLMNOPQR' 00822000
DC XL8'00' 00823000
DC C'STUVWXYZ' 00824000
DC XL6'00' 00825000
DC C'0123456789' 00826000
DC XL6'00' 00827000
DS 0H 00828000
SPACE 00829000
EJECT 00830000
*. 00831000
* 00832000
* OPERATION OF GETFILE - 00833000
* 00834000
* 1. UPON ENTRY, GPR7 = ADDRESS OF A POINTER TO THE NEXT SFBLOK 00835000
* TO TEST 00836000
* 2. LOAD GPR7 WITH POINTER TO NEXT BLOK; IF ZERO, EXIT 00837000
* 3. IF SAVEWRK2,3 EQUALS ZERO OR SFBUSER, GO TO STEP 4; 00838000
* OTHERWISE GO TO STEP 6 00839000
* 4. IF SAVEWRK1(1) EQUALS ZERO OR SFBCLAS,GO TO STEP 5; 00840000
* OTHERWISE GO TO STEP 6 00841000
* 5. IF SAVEWRK1+2(2) EQUALS ZERO OR SFBFILID, EXIT 00842000
* 5.5 IF SWITCH = X'FF', COUNT THE NUMBER OF SPOOL 00843000
* FILE BLOCKS. 00844000
* 6. IF NO MATCH, GO TO STEP 2 00845000
*. 00846000
SPACE 00847000
GETFILE EQU * HERE TO LOCATE THE REQUESTED FILE 00848000
* OR TO GET A COUNT OF THE NUMBER OF FILES TO 00849000
* BE TRANSFERRED, R10 FF IS SWITCH 00850000
SPACE 00851000
GF01 EQU * GPR7 = POINTER TO NEXT SFBLOK 00852000
GF02 LR R6,R7 SFBLOK PRESENT ?? 00853000
L R7,0(R7) 00854000
LTR R7,R7 00855000
BCR 8,R4 NO -RETURN TO CALLER WITH GPR7 ZERO 00856000
SPACE 00857000
GF03 TM SFBFLAG,SFBINUSE FILE IN USE ?? 00858000
BO GF02 GET NEXT FILE 00859000
CLI SAVEWRK2,X'40' USERID PRESENT ?? 00860000
BNH GF04 NO -- USE ALL FILES 00861000
CLC SAVEWRK2(8),SFBUSER USERID EQUALS ?? 00862000
BNE GF02 NO 00863000
SPACE 00864000
GF04 CLI SAVEWRK1,X'00' SEARCH BY CLASS ?? 00865000
BE GF05 NO 00866000
CLC SAVEWRK1(1),SFBCLAS CLASS EQUALS ?? 00867000
BNE GF02 NO - 00868000
SPACE 00869000
GF05 CLC SAVEWRK1+2(2),ZEROES SEARCH BY SPOOLID 00870000
BE TOTAL NO @VA06206 00871000
CLC SAVEWRK1+2(2),SFBFILID SPOOLID EQUAL ?? 00872000
BNE GF02 NO - 00873000
TOTAL EQU * @VA06206 00874000
C R10,X2048BND ARE WE COUNTING ? (FROM TR05A) @VA08042 00875000
BNE GF06 NOT TODAY @VA07375 00876000
LH R14,SAVEWRK7 GET THE COUNT @VA06206 00877000
LA R14,1(R14) UPDATE BY ONE @VA06206 00878000
STH R14,SAVEWRK7 STORE IT AWAY @VA06206 00879000
B GF02 KEEP ON TRUCKING @VA06206 00880000
SPACE 00881000
GF06 EQU * 00882000
BR R4 RETURN TO CALLER 00883000
EJECT 00884000
*. 00885000
* OPERATION OF GETCOPY - 00886000
* 00887000
* 1. CALL DMKSCNFD TO LOCATE NUMBER OF COPIES 00888000
* 2. CONVERT DECIMAL NUMBER TO BINARY, AND VERIFY THAT 00889000
* IT IS LESS THAN 100 00890000
* IF COPIES IS MISSING OR INVALID, EXIT GIVING MSG030E 00891000
* 3. STORE NUMBER OF COPIES IN SAVEWRK1+1(1) 00892000
*. 00893000
SPACE 3 00894000
GETCOPY EQU * HERE TO LOCATE NUMBER OF COPIES AND CONVERT TO BINARY 00895000
CALL DMKSCNFD LOCATE NUMBER OF COPIES 00896000
BNZ MSG030E NUMBER OF COPIES MISSING 00897000
OI SAVEWRK5+3,X'08' WE MUST UPDATE 1ST DASD BUFFER @VA10719 00897100
CLI 0(R1),C'*' SPECIAL COPY FOR 3800 ? @V60B9BA 00898000
BNE GETCOPY2 XFER IF NOT @V60B9BA 00899000
OI SAVEWRK5+3,X'04' SET THE FLAG @V60B9BA 00900000
BCTR R0,0 DECREMENT THE COUNT @V60B9BA 00902000
LTR R0,R0 IT IS ZERO ? @V60B9BA 00903000
BZ MSG030E NUMBER OF COPIES INVALID @V60B9BA 00904000
LA R1,1(R1) POINT PAST THE ASTERISK @V60B9BA 00905000
GETCOPY2 C R0,F2 LENGTH GREATER THAN 2 ?? 00906000
BH MSG030E YES - INVALID COPIES 00907000
CALL DMKCVTDB CONVERT TO BINARY 00908000
BNZ MSG030E INVALID NUMBER OF COPIES 00909000
SPACE 00910000
CH R1,=H'99' LARGER THAN 99 ?? 00911000
BH MSG030E YES - 00912000
LTR R1,R1 COPY EQUAL ZERO 00913000
BNP MSG030E 00914000
STC R1,SAVEWRK1+1 SAVE NUMBER OF COPIES 00915000
BR R4 RETURN TO CALLER 00916000
SPACE 00917000
EJECT 00918000
*. 00919000
* OPERATION OF GETNAME - 00920000
* 00921000
* 1. CALL DMKFREE FOR A 24 BYTE AREA FOR FNAME AND FTYPE 00922000
* AND SAVE IN SAVEWRK4 00923000
* 2. CALL DMKSCNFD TO LOCATE FNAME AND MOVE TO ADDRESS 00924000
* IN SAVEWRK4, IF FNAME IS MISSING OR IVALID, EXIT 00925000
* GIVING MSG029E. IF FNAME IS GREATER THAN 8 BYTES RETURN; 00926000
* 3. CALL DMKSCNFD TO LOCATE FTYPE, IF NONE, RETURN; 00927000
* MOVE FTYPE TO ADDRESS IN SAVEWRK4+11 AND RETURN. 00928000
* 00929000
*. 00930000
SPACE 3 00931000
GETNAME EQU * HERE TO LOCATE FNAME FTYPE 00932000
SPACE 00933000
GN01 L R2,SAVEWRK4 POINT TO THE WORK AREA @V60B9BA 00934000
MVI 0(R2),C' ' CLEAR 00935000
MVC 1(23,R2),0(R2) AREA TO BLANKS 00936000
SPACE 00937000
GN02 CALL DMKSCNFD LOCATE FNAME 00938000
BNZ MSG029E FNAME MISSING 00939000
LR R14,R0 GET LENGTH COUNT 00940000
BCTR R14,R0 -1 FOR MOVE 00941000
C R0,F24 LENGTH OVER 24 BYTES ?? 00942000
BH MSG029E YES - INVALID 00943000
SPACE 00944000
EX R14,MVCFNAME MOVE FNAME AND MAYBE FTYPE 00945000
C R14,F7 LENGTH OVER 8 BYTES ?? 00946000
BCR 2,R4 YES - RETURN NO FTYPE 00947000
SPACE 00948000
GN03 CALL DMKSCNFD LOCATE FTYPE 00949000
BCR 7,R4 NO FTYPE PRESENT - RETURN 00950000
EJECT 00951000
LR R14,R0 GET LENGTH OF FTYPE 00952000
BCTR R14,R0 -1 FOR MOVE 00953000
C R14,F7 OVER 8 CHARACTERS ?? 00954000
BH MSG029E YES - INVALID FOR FTYPE 00955000
EX R14,MVCFTYPE MOVE FTYPE 00956000
BR R4 RETURN TO CALLER 00957000
SPACE 2 00958000
MVCFNAME MVC 0(0,R2),0(R1) MOVE FNAME 00959000
MVCFTYPE MVC 12(0,R2),0(R1) MOVE FTYPE 00960000
EJECT 00961000
*. 00962000
* OPERATION OF GETID - 00963000
* 00964000
* 1. CALL DMKSCNFD TO LOCATE THE SPOOLID; ACCEPTABLE ID'S ARE - 00965000
* - A SPOOLID NUMBER 00966000
* - THE KEYWORD 'CLASS' FOLLOWED BY A VALID SPOOL CLASS 00967000
* - THE KEYWORD 'ALL' 00968000
* 2. SET SAVEWRK1, SAVEWRK1+2(2) = 0 00969000
* 3. IF OPTION = 'ALL', EXIT TO CALLER 00970000
* 4. IF OPTION = 'CL', CALL GETCLASS AND SAVE THE CLASS 00971000
* RETURNED IN GPR2 IN SAVEWRK1; THEN EXIT 00972000
* 5. IF OPTION = A SPOOLID NUMBER, CONVERT TO BINARY AND STORE 00973000
* IN SAVEWRK1+2(2) 00974000
* 6. RETURN TO CALLER. 00975000
*. 00976000
SPACE 3 00977000
GETID EQU * HERE TO LOCATE SPOOLID 00978000
SPACE 00979000
GI01 MVI SAVEWRK1,X'00' SET TO ALL 00980000
XC SAVEWRK1+2(2),SAVEWRK1+2 00981000
SPACE 00982000
GI02 CALL DMKSCNFD LOCATE SPOOLID 00983000
STM R0,R1,SAVEWRK6 SAVE COUNT AND ADDRESS 00984000
BCR 7,R4 NO MORE FILID, RETURN WITH CC 00985000
* NON-ZERO 00986000
SPACE 00987000
LR R14,R0 COUNT 00988000
BCTR R14,0 -1 00989000
C R0,F2 MIN FOR CLASS 00990000
BL GI05 NO - MUST BE FILE ID 00991000
BE GI04 YES - MIN FOR CLASS 00992000
SPACE 00993000
GI03 EX R14,CLCALL IS IT ALL ?? 00994000
BE GI06 YES GO TO RETURN 00995000
SPACE 00996000
GI04 EX R14,CLCCLASS IS IT CLASS ?? 00997000
BNE GI05 NO 00998000
BAL R3,GETCLASS GET CLASS AND VERIFY @V200930 00999000
B GI06 GO RETURN 01000000
SPACE 01001000
GI05 EQU * OPTION MUST BE FILED 01002000
C R0,F4 LENGTH GREATER THAN 4 ? 01003000
BH GI05A YES -- INVALID SPOOLID 01004000
CALL DMKCVTDB CONVERT TO BINARY 01005000
BZ VALID VALID SPOOLID 01006000
GI05A LM R0,R1,SAVEWRK6 RESTORE COUNT AND ADDRESS 01007000
C R3,FFS TEST FOR 'SYSTEM' OR 1ST USERID ? 01008000
BE MSG003E YES -- DMKCSU003E 01009000
B MSG008E INVALID SPOOLID 01010000
VALID STH R1,SAVEWRK1+2 SAVE BINARY VALUE (SPOOLID) 01011000
LTR R1,R1 SPOOLID ZERO ?? 01012000
BZ GI05A YES -- INVALID 01013000
SPACE 01014000
GI06 CR R12,R12 SET CC ZERO 01015000
BR R4 RETURN TO CALLER 01016000
EJECT 01017000
*. OPERATION OF GETCHARS - 01018000
* 01019000
* 1. CALL DMKSCNFD TO LOCATE CHARS SPECIFIED 01020000
* 2. IF MISSING OR GREATER THAN 4 CHARACTERS, EXIT 01021000
* GIVING MSG245E. 01022000
* 3. STORE VALUE IN HLDCHARS. 01023000
*. 01024000
SPACE 3 01025000
GETCHARS CALL DMKSCNFD LOCATE CHARS VALUE @V60B9BA 01026000
BNZ MSG245E CHARS PARAMETER MISSING @V60B9BA 01027000
C R0,F4 LENGTH GREATER THAN 4 ? @V60B9BA 01028000
BH MSG245E YES - INVLALID @V60B9BA 01029000
L R3,SAVEWRK4 WORKAREA ADDRESSIBILITY @V60B9BA 01030000
MVC HLDCHARS-HLDAREA(4,R3),BLANKS INITIALIZE @V60B9BA 01031000
LR R2,R0 EXECUTE FROM R2 @V60B9BA 01032000
BCTR R2,0 LESS ONE FOR EXECUTE INST @V60B9BA 01033000
EX R2,MVCCHARS SAVE THE CHARS VALUE @V60B9BA 01034000
OI SAVEWRK5+3,X'08' MUST UPDATE 1ST DASD BUFFER @V60B9BA 01035000
BR R4 RETURN TO CALLER @V60B9BA 01036000
SPACE 01037000
MVCCHARS MVC HLDCHARS-HLDAREA(0,R3),0(R1) @V60B9BA 01038000
EJECT 01039000
*. 01040000
* OPERATION OF GETFLASH - 01041000
* 01042000
* 1. CALL DMKSCNFD TO GET FLASH OVERLAY NAME. 01043000
* 2. IF MISSING OR GREATER THAN 4 CHARS EXIT 01044000
* GIVING MSG243E. 01045000
* 3. SAVE FLASH OVERLAY NAME IN HLDFLASH. 01046000
* 4. CALL DMKSCNFD TO GET FLASH COUNT. 01047000
* 5. IF MISSING OF NOT BETWEEN 0 AND 99, EXIT 01048000
* GIVING MSG243E. 01049000
* 6. SAVE FLASH COUNT IN HLDFLSHC. 01050000
*. 01051000
SPACE 3 01052000
GETFLASH CALL DMKSCNFD LOCATE FLASH OVERLAY NAME @V60B9BA 01053000
BNZ MSG243E FLASH NAME MISSING @V60B9BA 01054000
C R0,F4 GREATER THAN 4 CHARS ? @V60B9BA 01055000
BH MSG243E INVALID IF SO @V60B9BA 01056000
L R3,SAVEWRK4 ADDRESSIBILITY TO WORK AREA @V60B9BA 01057000
MVC HLDFLASH-HLDAREA(4,R3),BLANKS INITIALIZE @V60B9BA 01058000
LR R2,R0 WHERE TO EX FROM @V60B9BA 01059000
BCTR R2,0 DECREMENT FOR EXECUTE @V60B9BA 01060000
EX R2,MVCFLASH SAVE THE FLASH NAME @V60B9BA 01061000
CALL DMKSCNFD LOCATE FLASH COUNT @V60B9BA 01062000
BNZ MSG243E FLASH COUNT MISSING @V60B9BA 01063000
C R0,F2 LENGTH GREATER THAN 2 @V60B9BA 01064000
BH MSG243E INVALID IF SO @V60B9BA 01065000
CALL DMKCVTDB CONVERT TO BINARY @V60B9BA 01066000
BNZ MSG243E INVALID FLASH COUNT @V60B9BA 01067000
CH R1,=H'99' LARGER THAN 99 ? @V60B9BA 01068000
BH MSG243E XFER IF SO @V60B9BA 01069000
STC R1,HLDFLSHC-HLDAREA(R3) SAVE THE COUNT @V60B9BA 01070000
OI SAVEWRK5+3,X'08' MUST UPDATE 1ST DASD BUFFER @V60B9BA 01071000
BR R4 RETURN TO CALLER @V60B9BA 01072000
SPACE 01073000
MVCFLASH MVC HLDFLASH-HLDAREA(0,R3),0(R1) @V60B9BA 01074000
EJECT 01075000
*. 01076000
* OPERATION OF GETCMOD - 01077000
* 01078000
* 1. CALL DMKSCNFD TO LOCATE MODIFY VALUE. 01079000
* 2. IF MISSING OR GREATER THAN 4 CHARACTERS, 01080000
* EXIT GIVING MSG253E. 01081000
* 3. SAVE THE MODIFY VALUE IN HLDCMOD. 01082000
*. 01083000
SPACE 3 01084000
GETCMOD CALL DMKSCNFD LOCATE MODIFY VALUE @V60B9BA 01085000
BNZ MSG253E ERROR IF MISSING @V60B9BA 01086000
C R0,F4 MORE THAN 4 CHARACTERS ? @V60B9BA 01087000
BH MSG253E INVALID IF SO @V60B9BA 01088000
L R3,SAVEWRK4 POINT TO WORK AREA @V60B9BA 01089000
MVC HLDCMOD-HLDAREA(4,R3),BLANKS INITIALIZE @V60B9BA 01090000
LR R2,R0 COUNT FOR EXECUTE @V60B9BA 01091000
BCTR R2,0 DECREMENT FOR EXECUTE @V60B9BA 01092000
EX R2,MVCCMOD SAVE THE MODIFY VALUE @V60B9BA 01093000
OI SAVEWRK5+3,X'08' MUST UPDATE 1ST DASD BUFFER @V60B9BA 01094000
BR R4 RETURN TO CALLER @V60B9BA 01095000
SPACE 01096000
MVCCMOD MVC HLDCMOD-HLDAREA(0,R3),0(R1) @V60B9BA 01097000
EJECT 01098000
*. 01099000
* OPERATION OF GETFCB - 01100000
* 01101000
* 1. CALL DMKSCNFD TO LOCATE FCB VALUE. 01102000
* 2. IF MISSING OR GREATER THAN 4 CHARACTERS, 01103000
* EXIT GIVING MSG246E. 01104000
* 3. SAVE THE FCB VALUE IN HLDFCB. 01105000
*. 01106000
SPACE 3 01107000
GETFCB CALL DMKSCNFD LOCATE FCB VALUE @V60B9BA 01108000
BNZ MSG246E ERROR IF MISSING @V60B9BA 01109000
C R0,F4 GREATER THAN 4 CHARS ? @V60B9BA 01110000
BH MSG246E XFER IF SO @V60B9BA 01111000
L R3,SAVEWRK4 POINT TO WORK AREA @V60B9BA 01112000
MVC HLDFCB-HLDAREA(4,R3),BLANKS INITIALIZE @V60B9BA 01113000
LR R2,R0 GET THE COUNT IN R2 @V60B9BA 01114000
BCTR R2,0 DECREMENT FOR EXECUTE @V60B9BA 01115000
EX R2,MVCFCB SAVE THE FCB VALUE @V60B9BA 01116000
OI SAVEWRK5+3,X'08' MUST UPDATE 1ST DASD BUFFER @V60B9BA 01117000
BR R4 RETURN TO CALLER @V60B9BA 01118000
SPACE 01119000
MVCFCB MVC HLDFCB-HLDAREA(0,R3),0(R1) @V60B9BA 01120000
EJECT 01121000
*. 01122000
* OPERATION OF GETCHAIN - 01123000
* 01124000
* 1. IF GPR5 = 0, SET GPR6 = 0 AND EXIT; 01125000
* 2. IF GPR6 = FFS, GO TO STEP 6; 01126000
* 3. IF GPR5 HAS CSURDR BIT ON,REMOVE BIT, GO TO STEP 7; 01127000
* 4. IF GPR5 HAS TYPPRT BIT ON,REMOVE BIT, GO TO STEP 8; 01128000
* 5. REMOVE TYPPUN BIT IN GPR5, SET GPR6 TO ZERO, EXIT 01129000
* 6. IF GPR5 HAS CSURDR BIT ON, LOAD GPR6 WITH ARSPRD, EXIT; 01130000
* 7. IF GPR5 HAS TYPPRT BIT ON, LOAD GPR6 WITH ARSPPR, EXIT; 01131000
* 8. IF GPR5 HAS TYPPUN BIT ON, LOAD GPR6 WITH ARSPPU,EXIT; 01132000
* 9. SET GPR6 = 0, EXIT 01133000
*. 01134000
SPACE 3 01135000
GETCHAIN EQU * HERE TO GET NEXT FILE CHAIN ANCHOR POINTER 01136000
SPACE 01137000
GC01 LTR R5,R5 FILE TYPE ZERO ?? 01138000
BNZ GC02 NO-- 01139000
SR R6,R6 YES - ZERO GPR6 01140000
BR R3 RETURN TO CALLER 01141000
SPACE 01142000
GC02 C R6,FFS 1ST TIME SWITCH ON ?? 01143000
BE GC06 YES - DO NOT RESET ANY BITS, JUST 01144000
* LOAD GPR6 01145000
SPACE 01146000
GC03 LR R6,R5 SAVE R5 FOR CHANGE COMPARE 01147000
N R5,=A(255-CSURDR) REMOVE READER BIT 01148000
CR R6,R5 WAS IT ON ?? 01149000
BNE GC07 NO 01150000
SPACE 01151000
GC04 N R5,=A(255-TYPPRT) REMOVE PRINTER BIT 01152000
CR R6,R5 WAS IT ON ?? 01153000
BNE GC08 NO 01154000
SPACE 01155000
GC05 SR R5,R5 REMOVE PUNCH BIT 01156000
SR R6,R6 SET GPR6 TO ZERO 01157000
BR R3 RETURN TO CALLER - END OF CHAIN 01158000
SPACE 01159000
GC06 L R7,ARSPRD LOAD READER FILE CHAIN POINTER 01160000
* ANCHOR 01161000
EX R5,TMRDR READER BIT ON ?? 01162000
BCR 7,R3 YES - RETURN TO CALLER 01163000
SPACE 01164000
GC07 L R7,ARSPPR LOAD PRINTER FILE CHAIN POINTER 01165000
* ANCHOR 01166000
EX R5,TMPRT PRINTER BIT ON ?? 01167000
BCR 7,R3 YES - RETURN TO CALLER 01168000
SPACE 01169000
GC08 L R7,ARSPPU LOAD PUNCH FILE CHAIN POINTER ANCHOR 01170000
EX R5,TMPUN PUNCH BIT ON ?? 01171000
BCR 7,R3 YES - RETURN TO CALLER 01172000
GC09 SLR R6,R6 SET GPR6 = ZERO - ALL DONE @VA01375 01173000
SLR R7,R7 .. @VA01375 01174000
BR R3 RETURN TO CALLER @VA01375 01175000
EJECT 01176000
*. 01177000
* OPERATOR OF SETPEND - 01178000
* 01179000
* 1. IF SPOOL FILE (SFBLOK) IS IN USER HOLD STATUS; 01180000
* RETURN TO CALLER. 01181000
* 2. LOCATE AN AVAILABLE VIRTUAL READER, CONSTRUCT AN 01182000
* IOBLOK CONTAINING A DEVICE END INTERRUPT AND STACK IT 01183000
* FOR THE OPPROPRIATE VIRTUAL DEVICE VIA CALL TO 01184000
* DMKSTKIO. 01185000
*. 01186000
SPACE 3 01187000
SETPEND EQU * HERE TO POST PENDIN INTERRUPT @VM01016 01188000
SPACE 01189000
USING VCHBLOK,R6 @VM01016 01190000
USING VCUBLOK,R9 @VM01016 01191000
USING IOBLOK,R10 @VM01016 01192000
SPACE 01193000
ST R11,TEMPR3 SAVE CALLERS VMBLOK POINTER @VA04139 01194000
CLC SFBUSER,VMUSER ONLY THE OWNER GETS THE INT. @VA04139 01195000
BE SAMEUSER BRANCH IF SAME USER, ALL OK! @VA04139 01196000
LA R0,8 SET UP TO ... @VA04139 01197000
LA R1,SFBUSER FIND THE VMBLOK OF... @VA04139 01198000
CALL DMKSCNAU THE USER TO GET THE INT. @VA04139 01199000
BNZR R4 IF NOT LOGED ON RETURN @VA04139 01200000
ST R11,TEMPR3 RESAVE CALLERS VMBLOK POINTER @VA04139 01201000
CHARGE SWITCH,1 SWITCH TIMING TO RECEIVER @V407510 01202000
SAMEUSER STM R4,R5,TEMPR4 SAVE CALLERS REGS @VA04139 01203000
SR R1,R1 CLEAR CHANNEL TABLE INDEX @VM01016 01204000
LA R4,2 GET GENERAL INDEX INCREMENT @VM01016 01205000
LA R5,30 GET GENERAL COMPARAND FOR BXLE @VM01016 01206000
SPACE 01207000
NEXTCH LH R6,VMCHTBL(R1) GET INDEX TO NEXT VIRTUAL CHANNEL@VM01016 01208000
LTR R6,R6 IS THERE ONE AT THIS ADDRESS @VM01016 01209000
BM CHINDEX NO -- @VM01016 01210000
A R6,VMCHSTRT POINT TO VCHBLOK @VM01016 01211000
SR R2,R2 CLEAR CU TABLE INDEX @VM01016 01212000
NEXTCU LH R9,VCHCUTBL(R2) GET INDEX TO VIRTUAL CU BLOK @VM01016 01213000
LTR R9,R9 IS THERE ONE AT THIS ADDRESS ? @VM01016 01214000
BM CUINDEX NO -- @VM01016 01215000
A R9,VMCUSTRT POINT TO VCUBLOK @VM01016 01216000
SR R3,R3 CLEAR DEVICE BLOK TABLE INDEX @VM01016 01217000
NEXTDEV LH R8,VCUDVTBL(R3) GET INDEX TO DEVICE BLOK @VM01016 01218000
LTR R8,R8 IS THERE ONE AT THIS ADDRESS @VM01016 01219000
BM DEVINDEX NO -- @VM01016 01220000
A R8,VMDVSTRT POINT TO DEVICE BLOK @VM01016 01221000
SPACE 01222000
CLI VDEVTYPC,CLASURI INPUT DEVICE @VM01016 01223000
BNE DEVINDEX NO - @VM01016 01224000
TM VDEVTYPE,TYPRDR IS IT THE RIGHT TYPE ?? @VM01016 01225000
BZ DEVINDEX NO -- @VM01016 01226000
TM VDEVSTAT,X'FF' ANY STATUS PENDING ?? @VM01016 01227000
BNZ DEVINDEX YES, CHECK NEXT DEVICE @VM01016 01228000
CLI VDEVCLAS,C'*' ALL CLASS READER ? @VM01016 01229000
BE TSTBUSY YES, TEST FOR ACTIVE DEVICE @VM01016 01230000
CLC VDEVCLAS(1),SFBCLAS FILE CLASS SAME AS DEVICE ? @VM01016 01231000
BNE DEVINDEX NO - @VM01016 01232000
TSTBUSY ICM R14,B'1111',VDEVSPL IS THE DEVICE BUSY ?? @VM01016 01233000
BZ RDRPEND NO -- FINALLY FOUND A DEVICE @VM01016 01234000
SPACE 01235000
DEVINDEX BXLE R3,R4,NEXTDEV INDEX TO NEXT DEVICE ON CONTROL @VM01016 01236000
* UNIT 01237000
CUINDEX BXLE R2,R4,NEXTCU INDEX TO NEXT CONTROL UNIT ON @VM01016 01238000
* CHANNEL 01239000
CHINDEX BXLE R1,R4,NEXTCH INDEX TO NEXT CHANNEL ON MACHINE @VM01016 01240000
LM R3,R5,TEMPR3 GET CALLERS R11(IN R3), R4 & R5 @VA04139 01241000
B INTEXIT RETURN @VA04139 01242000
SPACE 01243000
RDRPEND EQU * HERE TO QUEUE DEVICE END @VM01016 01244000
LH R2,VDEVADD GET FULL ADDRESS OF DEVICE @VM01016 01245000
LH R5,VCUADD .. @VM01016 01246000
OR R2,R5 .. @VM01016 01247000
AH R2,VCHADD .. @VM01016 01248000
LM R3,R5,TEMPR3 GET CALLERS R11(IN R3), R4 & R5 @VA04139 01249000
LA R0,IOBSIZE BUILD IOBLOK @VM01016 01250000
CALL DMKFREE .. @VM01016 01251000
LR R10,R1 ADDRESS OF IOBLOK @VM01016 01252000
XC IOBLOK(IOBSIZE*8),IOBLOK CLEAR BLOK @VM01016 01253000
ST R10,IOBLINK INDICATE ORIGINAL COPY @VM01016 01254000
MVI IOBCSW+4,DE FAKE DEVICE END CSW @VM01016 01255000
ST R11,IOBUSER MOVE USER ADDRESS OF VMBLOK @VM01016 01256000
MVC IOBIRA,=A(DMKVIOIN) RETURN ADDRESS @VM01016 01257000
STH R2,IOBVADD PUT ADDRESS IN IOBLOK @VM01016 01258000
OI VDEVSTAT,VDEVPEND SET PENDING FLAG @VM01016 01259000
MVC VDEVCSW(8),IOBCSW MOVE IN DEVICE END CSW @VM01016 01260000
CALL DMKSTKIO GO STACK IO @VM01016 01261000
INTEXIT CLR R11,R3 ORIGINAL CALLER? @VA04139 01262000
BER R4 YES- RETURN @VA04139 01263000
CHARGE SWITCH,3 SWITCH BACK TO CALLER @V407510 01264000
BR R4 RETURN TO CALLER @VM01016 01265000
DROP R6 @VM01016 01266000
DROP R9 @VM01016 01267000
DROP R10 @VM01016 01268000
SPACE 3 01269000
********************************** 01270000
* 01271000
* ERROR EXITS FROM DMKCSU 01272000
* 01273000
********************************** 01274000
SPACE 2 01275000
MSG003E EQU * HERE IF INVALID OPTION FOR THIS @VA01375 01276000
* COMMAND 01277000
LA R2,003 ERROR MSG DMKCSU003E @VA01733 01278000
B EXIT8 EXIT TO ERROR MODULE 01279000
SPACE 2 01280000
MSG006E EQU * HERE IF DEVICE TYPE IS INVALID 01281000
LA R2,006 ERROR MSG DMKCSU006E 01282000
LM R0,R1,SAVEWRK6 COUNT AND ADDRESS OF INVALID TYPE 01283000
B EXIT8 EXIT TO ERROR MODULE 01284000
SPACE 2 01285000
MSG007E EQU * HERE IF USERID IS INVALID 01286000
LA R2,007 ERROR MSG DMKCSU007E 01287000
B EXIT8 01288000
SPACE 2 01289000
MSG008E EQU * HERE IF SPOOLID IS INVALID 01290000
LA R2,008 ERROR MSG DMKCSU008E 01291000
LM R0,R1,SAVEWRK6 COUNT AND ADDRESS OF SPOOLID 01292000
B EXIT8 EXIT TO ERROR MODULE 01293000
SPACE 2 01294000
MSG013E EQU * HERE IF OPTION IS CONFLICTING 01295000
LA R2,013 ERROR MSG DMKCSU013E 01296000
B EXIT8 .. 01297000
SPACE 2 01298000
MSG020E EQU * HERE IF USERID IS MISSING OR INVALID 01299000
LA R2,020 ERROR MSG DMKCSU020E 01300000
B EXIT8R1 EXIT TO ERROR MODULE 01301000
SPACE 2 01302000
MSG026E EQU * HERE IF OPERAND MISSING OR INVALID 01303000
LA R2,026 ERROR MSG DMKCSU026E 01304000
B EXIT8R1 EXIT TO ERROR MODULE 01305000
SPACE 2 01306000
MSG027E EQU * HERE IF SPOOLID MISSING OR INVALID 01307000
LA R2,027 ERROR MSG DMKCSU027E 01308000
B EXIT8R1 01309000
SPACE 2 01310000
MSG028E EQU * HERE IF CLASS IS MISSING OR INVALID 01311000
LA R2,028 ERROR MSG DMKCSU028E 01312000
B EXIT8R1 01313000
SPACE 01314000
MSG029E EQU * HERE IF FNAME FTYPE MISSING OR INVALID 01315000
LA R2,029 ERROR MSG DMKCSU029E 01316000
B EXIT8R1 EXIT TO ERROR MODULE 01317000
SPACE 2 01318000
MSG030E EQU * HERE IF COPIES IS MISSING OR INVALID 01319000
LA R2,030 ERROR MSG DMKCSU030E 01320000
B EXIT8R1 EXIT TO ERROR MODULE 01321000
SPACE 2 01322000
MSG032E EQU * HERE IF DISTCODE IS MISSING OR INVALID 01323000
LA R2,032 ERROR MSG DMKCSU032E 01324000
B EXIT8R1 EXIT TO ERROR MODULE 01325000
SPACE 2 01326000
MSG035E EQU * HERE IF DEVICE TYPE MISSING OR INVALID 01327000
LA R2,035 ERROR MSG DMKCSU035E 01328000
B EXIT8R1 EXIT TO ERROR MODULE 01329000
SPACE 2 01330000
MSG042E EQU * HERE IF SPOOL FILE NOT FOUND 01331000
LH R1,SAVEWRK1+2 GET SPOOLID OF FILE 01332000
BAL R2,CVTBD AND CONVERT 01333000
LA R2,042 ERROR MSG DMKCSU032E 01334000
B EXIT8R0 01335000
SPACE 2 01336000
MSG053E EQU * HERE IF USERID NOT IN CP DIRECTORY 01337000
LA R2,053 ERROR MSG DMKCSU053E 01338000
B EXIT8 01339000
SPACE 2 01340000
MSG243E EQU * HERE IF FLASH MISSING OR INVALID @V60B9BA 01341000
LA R2,243 ERROR MSG DMKCSP243E @V60B9BA 01342000
B EXIT8R1 EXIT TO ERROR MODULE @V60B9BA 01343000
SPACE 2 01344000
MSG245E EQU * HERE IF CHARS MISSING OR INVALID @V60B9BA 01345000
LA R2,245 ERROR MSG DMKCSP245E @V60B9BA 01346000
B EXIT8R1 EXIT TO ERROR MODULE @V60B9BA 01347000
SPACE 2 01348000
MSG246E EQU * HERE IS FCB MISSING OR INVALID @V60B9BA 01349000
LA R2,246 ERROR MSG DMKCSP246E @V60B9BA 01350000
B EXIT8R1 EXIT TO ERROR MODULE @V60B9BA 01351000
SPACE 2 01352000
MSG253E EQU * HERE IS MODIFY MISSING OR INVALID @V60B9BA 01353000
LA R2,253 ERROR MSG DMKCSP253E @V60B9BA 01354000
B EXIT8R1 EXIT TO ERROR MODULE @V60B9BA 01355000
SPACE 2 01356000
MSG424E L R4,SAVEWRK4 ADDRESS THE WORK AREA @V60B9BA 01357000
L R1,HLDPTR-HLDAREA(R4) DASD BUFFER VIRT ADDR @V60B9BA 01358000
CALL DMKPGTVR RELEASE THE PAGE @V60B9BA 01359000
LA R2,424 MSG NUM FOR PAGING ERROR @V60B9BA 01360000
B EXIT8R1 EXIT TO ERROR MODULE @V60B9BA 01361000
SPACE 2 01362000
CVTBD EQU * HERE TO CONVERT BINARY TO DECIMAL 01363000
CALL DMKCVTBD 01364000
BR R2 01365000
SPACE 01366000
SPACE 2 01367000
EJECT 01368000
**************************************** 01369000
* 01370000
* FINAL EXIT BACK TO DMKCFM 01371000
* 01372000
**************************************** 01373000
SPACE 3 01374000
CSUEXIT EQU * HERE FOR NORMAL EXIT FROM DMKCSU 01375000
SR R2,R2 CLEAR ERROR REGISTER 01376000
B EXIT1 NOW EXIT 01377000
SPACE 2 01378000
EXIT8R1 SR R1,R1 01379000
EXIT8R0 SR R0,R0 01380000
EXIT8 ICM R0,14,ID+3 MOVE IN MODULE ID 01381000
EXIT1 LR R3,R0 SAVE GPR 0-2 01382000
LR R4,R1 .. 01383000
LTR R5,R2 ANY ERRORS?? @V2A3663 01384000
BNZ REGXIT YES - REGULAR EXIT PLEASE @V2A3663 01385000
TM VMMLVL2,VMMIMSG NO - SUPPRESS INFO MSGS? @V2A3663 01386000
BZ NOMSG YES @V2A3663 01387000
REGXIT EQU * NO @V2A3663 01388000
LH R1,SAVEWRK5 GET FILE COUNT 01389000
LTR R1,R1 PROCESSING STARTED ?? 01390000
BM NOMSG NO -- NO MESSAGE 01391000
MVC MSGCNT(4),=C' NO ' SET MESSAGE 01392000
BZ NOCNT NO FILE MSG 01393000
CALL DMKCVTBD CONVERT COUNT FOR MSG 01394000
STCM R1,15,MSGCNT STORE COUNT IN MESSAGE 01395000
NOCNT MVC MSGFILE(5),=C'FILES' .. 01396000
C R1,=C'0001' ONE FILE ?? 01397000
BNE *+8 NO 01398000
MVI MSGFILE+4,C' ' CHANGE FILES TO FILE 01399000
MVC MSGCMD+3(8),BLANKS BLANK COMMAND NAME AREA @VA04869 01400000
MVC MSGCMD(8),VMCOMND MOVE IN COMMAND NAME 01401000
MVI MSGCMD+6,C'D' CHANGE CHANGE TO CHANGED @VA04869 01402000
MSGLEN LA R0,CNTMSGL SET UP MSG LENGTH @VA04869 01403000
LA R1,CNTMSG ADDRESS OF MESSAGE 01404000
CALL DMKQCNWT,PARM=NORET WRITE MESSAGE 01405000
NOMSG EQU * 01406000
L R1,SAVEWRK4 ADDRESS OF 24 BYTE AREA 01407000
LTR R1,R1 ADDRESS PRESENT ?? 01408000
BZ EXIT2 NO --- 01409000
LA R0,HLDSIZE LENGTH OF AREA @V60B9BA 01410000
CALL DMKFRET RETURN AREA TO FREE STORAGE 01411000
EXIT2 LR R0,R3 RESTORE REG 0-2 01412000
LR R1,R4 .. 01413000
LR R2,R5 .. 01414000
LTR R2,R2 ERROR CODE PRESENT ?? 01415000
BNZ ERREXIT YES -- 01416000
EXIT3 EXIT - EXIT -- NO ERROR @V60B9BA 01417000
SPACE 01418000
ERREXIT EQU * HERE TO CALL ERROR MESSAGE MODULE 01419000
CALL DMKERMSG EXIT TO MESSAGE MODULE 01420000
SPACE 01421000
* MODULE DMKERMSG WILL GIVE SVC16 AND RETURN CONTROL TO DMKCFM 01422000
EJECT 01423000
**************************************** 01424000
* 01425000
* MESSAGES AND CONSTANTS 01426000
* 01427000
**************************************** 01428000
SPACE 2 01429000
LTORG 01430000
EJECT 01431000
CSURDR EQU X'20' 01432000
SPACE 3 01433000
HLDAREA DSECT , LOCAL WORK AREA @V60B9BA 01434000
HLDFNAM DS CL12 FILENAME @V60B9BA 01435000
HLDFTYP DS CL12 FILETYPE @V60B9BA 01436000
ORG HLDFNAM @V60B9BA 01437000
HLDFILE DS CL24 FULL 24 CHAR NAME @V60B9BA 01438000
HLDCHARS DS CL4 CHARS OPTION @V60B9BA 01439000
HLDFCB DS CL4 FCB OPTION @V60B9BA 01440000
HLDFLASH DS CL4 FLASH OVERLAY NAME @V60B9BA 01441000
HLDCMOD DS CL4 COPY MODIFICATION NAME @V60B9BA 01442000
HLDFLSHC DS 1X FLASH COUNT @V60B9BA 01443000
DS 3X RESERVED @V60B9BA 01444000
HLDPTR DS 1A VIRTUAL ADDR FOR SPLINK @V60B9BA 01445000
HLDSIZE EQU (*-HLDAREA)/8 SIZE IN DOUBLE WORDS @V60B9BA 01446000
SPACE 2 01447000
PSA , @V306638 01448000
COPY CONBUF @V306638 01449000
COPY DEVTYPES @V306638 01450000
COPY EQU @V306638 01451000
COPY IOBLOKS @V306638 01452000
COPY RBLOKS @V306638 01453000
COPY SAVE @V306638 01454000
COPY SPOOL @V306638 01455000
COPY UDIRECT @V306638 01456000
COPY VBLOKS @V306638 01457000
COPY VMBLOK @V306638 01458000
END 01459000