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 | PRT CLASS A - | 00189000 * | CH | PCH SPOOLID - | 00190000 * | | RDR ALL > - | 00191000 * | | - | 00192000 * | | - | 00193000 * | | - | 00194000 * | | | 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 * AND 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