ibm:vm370-lib:cp:dmkvmd.assemble_src
Table of Contents
DMKVMD Source
References
- Fixes Applied : 0
- This Source Date : Friday, July 13, 1979
- Last Fix ID : [Unmodified]
Source Listing
- DMKVMD.ASSEMBLE.txt
- VMD TITLE 'DMKVMD (CP) VM/370 - RELEASE 6' 00001000
- ISEQ 73,80 @V67CAH7 00002000
- *. 00003000
- * 00004000
- * MODULE NAME - 00005000
- * 00006000
- * DMKVMD 00007000
- * 00008000
- * FUNCTION - 00009000
- * 00010000
- * DMKVMD DUMPS VIRTUAL MACHINES TO SPOOL BLOCKS IN BINARY FORM. 00011000
- * THE OUTPUT IS READ BY DIAGNOSE X14. 00012000
- * THE PRIMARY USER IS IPCS. 00013000
- * 00014000
- * ORIGIN/S&D CODE - @V67CAH7 00015000
- * 00016000
- * COMMAND - 00017000
- * 00018000
- * VMDUMP (FORMAT VMTYPE) (TO * ) (( )(-|:(HEXLOC2))) 00019000
- * (TO USERID) (( )( ( END ))) 00020000
- * (SYSTEM ) ((HEXLOC1) ) 00021000
- * (( 0 )( . (BYTECNT))) 00022000
- * (( )( ( END ))) 00023000
- * (DSS) (*DUMPID) 00024000
- * 00025000
- * ATTRIBUTES - 00026000
- * 00027000
- * REENTRANT, PAGEABLE, CALLED VIA SVC 8 00028000
- * 00029000
- * ENTRY POINT - 00030000
- * 00031000
- * DMKVMDEP - ENTRY POINT 00032000
- * 00033000
- * ENTRY CONDITIONS - 00034000
- * 00035000
- * GPR9 - ADDRESS OF THE COMMAND LINE. 00036000
- * GPR11 - ADDRESS OF THE USERS VMBLOK. 00037000
- * GPR12 - ADDRESS OF THE ENTRY POINT. 00038000
- * GPR13 - ADDRESS OF THE STANDARD SAVE AREA. 00039000
- * 00040000
- * EXIT CONDITIONS - 00041000
- * 00042000
- * NORMAL - GPR2 = 0 00043000
- * ERROR - GPR2 = ERROR MESSAGE CODE NUMBER 00044000
- EJECT 00045000
- * 00046000
- * CALLS TO OTHER ROUTINES - 00047000
- * 00048000
- * DMKCKSPL - CHECKPOINT DUMP FILE 00049000
- * DMKCVTBH - CREATE PRINTABLE HEX FROM BINARY FOR ERROR MSG 00050000
- * DMKCVTDT - GET CURRENT DATE AND TIME FOR SFBLOK 00051000
- * DMKCVTHB - TO CONVERT COMMAND LINE PRINTABLE HEX TO BINARY 00052000
- * DMKERMSG - WRITE ERROR MESSAGES 00053000
- * DMKFREE - TO GET STORAGE FOR SFBLOK AND BIT MAP 00054000
- * DMKFRET - TO FREE STORAGE...BIT MAP, IF ERROR ALSO SFBLOK 00055000
- * DMKPGTSG - TO GET SPOOL SPACE 00056000
- * DMKPGTVG - GET A VIRTUAL PAGE 00057000
- * DMKPGTVR - RELEASE VIRTUAL PAGES 00058000
- * DMKPTRAN - TO BRING USER AND SYSTEM PAGES INTO STORAGE 00059000
- * DMKPTRUL - UNLOCK PAGES IN REAL STROAGE 00060000
- * DMKRPAGT - READ IN SPOOL RECORDS 00061000
- * DMKRPAPT - WRITE OUT SPOOL RECORDS 00062000
- * DMKRSPDP - NEW DUMP QUEUE 00063000
- * DMKRSPID - OBTAIN SFBLOK ID 00064000
- * DMKRSPRD - ADD DUMP TO READER QUEUE 00065000
- * DMKSCNFD - TO LOCATE THE NEXT ARGUMENT IN THE COMMAND LINE 00066000
- * DMKSPLDL - DELETE SPOOL FILES 00067000
- * DMKSYSDU - USERID OF SYSTEM DUMP DISPOSITION 00068000
- * DMKUDRFU - TO CHECK THE VALIDITY OF A USERID 00069000
- * 00070000
- * TABLES/WORKAREAS 00071000
- * 00072000
- * SFBLOK 00073000
- * SAVEAREA 00074000
- * PSA 00075000
- * VMBLOK 00076000
- * BITMAP - CREATED TEMPORARILY IN STORAGE 00077000
- * KEY MAP - CREATED TEMPORARILY IN SYSTEM VIRTUAL PAGES IN STOR 00078000
- * OUTPUT BUFFER WHERE SPOOL BLOCKS ARE BUILT PRIOR TO WRITING 00079000
- * TO DASD STORAGE 00080000
- * 00081000
- * REGISTER USAGE - 00082000
- * 00083000
- * R0 = WORK REGISTER 00084000
- * R1 = SOMETIME BASE OF BITMAP...LOTS OF TIME WORK REG 00085000
- * R2 = VIRTUAL PAGES BASE...IT'S A REAL ADDRESS 00086000
- * R3 = RANGE POINTER ...POINTS TO RANGE SPECIFICATION BEING PROCESSED 00087000
- * R4 = CURRENT ADDRESS OF VIRTUAL PAGE, BEING DUMPED 00088000
- * R5 = SFBLOK POINTER 00089000
- * R6 = VIRTUAL PAGES INDEX INTO R2 00090000
- * R7 = PROGRAMS BAL REGISTER 00091000
- * R8 = SPOOL INDEX INTO R10 00092000
- * R9 = BUFFER POINTER...LATER BASE FOR BITMAP AND WORKAREA 00093000
- * R10 = SPOOL RECORD BASE OR SPLINK BASE 00094000
- * R11 = VMBLOK POINTER 00095000
- * R12 = PROGRAMS BASE REGISTER 00096000
- * R13 = PROGRAMS SAVEAREA AND SAVEWRK'S 00097000
- * R14 = WORK REGISTER 00098000
- * R15 = WORK REGISTER 00099000
- EJECT 00100000
- * 00101000
- * NOTES - NONE 00102000
- * 00103000
- * OPERATION - 00104000
- * 00105000
- * THIS MODULE IS CALLED BY THE COMMAND ANALYSIS ROUTINE DMKCFM. 00106000
- * INITIALLY THE PARAMETERS OF THE COMMAND ARE EXAMINED, AND 00107000
- * INDICATORS OR ADDRESSES STORED. THEN THREE PAGES OF SPOOL 00108000
- * SPACE ARE RESERVED FOR THE DMPINREC AND DMPKEY1 AND 2 RECORDS. 00109000
- * NEXT, THE ADDRESSES REQUESTED ARE DUMPED TO SPOOL SPACE, WHILE 00110000
- * THE KEYS ARE SAVED AND A BIT MAP CREATED. AFTER ALL ADDRESSES 00111000
- * ARE DUMPED, THE DMPINREC AND KEY RECORDS ARE BUILT. LAST, THE 00112000
- * SPACES ARE FREED UP AND A RETURN IS ISSUED. 00113000
- * 00114000
- * DETAILED OPERATION - 00115000
- * 00116000
- * 1. ZERO WORK AREAS. 00117000
- * 2. GET SFBLOK SPACE, ZERO IT, MOVE SFBFNAME 'VMDUMP' IN. 00118000
- * 3. GET NEXT ENTRY ON COMMAND LINE, IF NONE PRESENT GO TO 9. 00119000
- * 4. CHECK IF ENTRY IS 'TO', IF NOT CONTINUE. ELSE, VERIFY 00120000
- * 'TO' AND NEXT PARAMETER AS ITS SPECIFICATION AND GO TO 3. 00121000
- * 5. CHECK IF ENTRY IS 'SYSTEM', IF NOT CONTINUE. ELSE, VERIFY 00122000
- * AND GO TO 3. 00123000
- * 6. CHECK IF ENTRY IS 'FORMAT', IF NOT CONTINUE. ELSE, VERIFY 00124000
- * 'FORMAT' AND ITS PARAMETER, AND GO TO 3. 00125000
- * 7. CHECK IF ENTRY IS 'DSS', IF NOT CONTINUE. ELSE SET 00126000
- * INDICATOR AND GO TO 3. 00127000
- * 8. CHECK IF ENTRY IS '*', IF NOT GO TO 10. ELSE, TAKE REST OF 00128000
- * COMMAND LINE UP TO 100 CHARACTERS AS COMMENT. 00129000
- * 9. FULL LINE IS SEARCHED. VERIFY THAT 'TO' IS SPECIFIED OR 00130000
- * TAKE DEFAULT. VERIFY THAT A RANGE IS SPECIFIED OR DEFAULT 00131000
- * TO 0-END. GO TO 11. 00132000
- * 10.1 ENTRY IS ASSUMED TO BE A RANGE. DETERMINE IF ENTRY IS 00133000
- * SINGLE ENTRY, ADDRESS AND BYTECOUNT, OR ADDRESS TO 00134000
- * ANOTHER ADDRESS. 00135000
- * 10.2 VERIFY NUMBERS AND TAKE DEFAULTS IF NECESSARY. 00136000
- * 10.3 ROUND ADDRESSES TO PAGE BOUNDARIES AND SAVE THEM. GO TO 3. 00137000
- * 11. ORDER ADDRESS RANGES IN ASCENDING ORDER. MERGE ADDRESS 00138000
- * RANGES TOGETHER IF POSSIBLE. 00139000
- * 12. FINISH BUILDING SFBLOK AND ADD IT TO DUMP IN PROCESS QUEUE. 00140000
- * 13. GET BITMAP SPACE AND ZERO IT OUT. 00141000
- * 14. GET SPACE FOR BUILDING SPOOL RECORDS IN MAIN STORAGE, AND 00142000
- * ZERO IT OUT. GET MAIN STORAGE SPACE FOR 2 KEY PAGES AND 00143000
- * ZERO THEM OUT. 00144000
- * 15. WRITE 3 DUMMY SPOOL BLOCKS. THESE WILL LATER BE BUILT INTO 00145000
- * DMPINREC, DMPKYREC 1 AND 2. 00146000
- * 16. DUMP ADDRESS RANGES IN SPOOL BLOCK FORM. UPDATING BIT MAP 00147000
- * (INDICATOR OF PAGES DUMPED) AND KEY MAPS CONCURRENTLY. 00148000
- * SEVERAL BAL ROUTINES ARE USED TO ASSIST: 17, 18, 19. 00149000
- * 17. GETPAGE ROUTINE, BRINGS PAGE INTO STORAGE, GETS KEYS FOR 00150000
- * PAGE, UPDATES KEY MAPS, AND RETURNS. 00151000
- * 18. WRSPOOL ROUTINE, UPDATES SPLINK AND WRITES SPOOL RECORD 00152000
- * OUT TO DASD. 00153000
- * 19. GETCCPD ROUTINE, GETS CCPD FOR NEXT SPOOL RECORD, AND 00154000
- * RETURNS IF CCPD IS AVAILABLE. ELSE, COMPLETE SPLINK CHAIN 00155000
- * WITH CURRENT RECORD POINTING BACK TO FIRST RECORD, TAKE 00156000
- * SFBLOK OFF DUMP QUEUE AND ADD IT TO DELETE QUEUE. GO TO 24. 00157000
- * 20. ALL DONE DUMPING USERS DEFINED STORAGE. IF VMDUMP REQUESTED 00158000
- * 'DSS', DUMP DISCONTIGUOUS SAVED SEGMENTS IF EXISTANT. 00159000
- * 21. READ IN RECORD 1, BUILD DMPINREC IN IT, WRITE IT OUT. 00160000
- * BUILDING MUST WAIT TILL HERE BECAUSE IT CONTAINS BITMAP. 00161000
- * 22. READ IN RECORDS 2, 3, AND 4, PUT KEY DATA IN THEM, WRITE 00162000
- * THEM OUT. DMPKYREC 1 AND 2. 00163000
- * 23. REMOVE COMPLETED DUMPS SFBLOK FROM DUMP IN PROGRESS QUEUE 00164000
- * AND ADD IT TO END OF READER QUEUE. 00165000
- * 24. FREE UP GOTTEN MAIN STORAGE SPACE, IF ENTERED HERE FROM 19, 00166000
- * GO TO 25. ELSE END PROGRAM. 00167000
- * 25. ERROR ROUTINES... 00168000
- * 00169000
- * ERROR MESSAGES - 00170000
- * 00171000
- * DMKVMD009E - INVALID RANGE - 'RANGE' 00172000
- * DMKVMD013E - CONFLICTING OPTIONS - 'OPTION' 00173000
- * DMKVMD020E - USERID MISSING OR INVALID 00174000
- * DMKVMD033E - HEXLOC MISSING OR INVALID 00175000
- * DMKVMD038E - PARAMETER FOR 'OPTION' OPTION MISSING OR INVALID 00176000
- * DMKVMD053E - 'USERID' NOT IN CP DIRECTORY 00177000
- * DMKVMD146E - DUMP FAILED, SPOOLING ERROR 00178000
- * DMKVMD160E - HEXLOC 'HEXLOC' EXCEEDS STORAGE 00179000
- * 00180000
- *. 00181000
- EJECT 00182000
- COPY OPTIONS @V67CAH7 00183000
- COPY LOCAL @V67CAH7 00184000
- DMKVMD CSECT @V67CAH7 00185000
- MODID DC C'DMKVMD ' @V67CAH7 00186000
- SPACE 2 00187000
- USING PSA,R0 @V67CAH7 00188000
- USING RANGES,R3 @V67CAH7 00189000
- USING VMBLOK,R11 @V67CAH7 00190000
- USING SAVEAREA,R13 @V67CAH7 00191000
- USING BUFFER,R9 @V67CAH7 00192000
- SPACE 2 00193000
- EXTRN DMKCKSPL,DMKCVTBH,DMKCVTDT,DMKCVTHB,DMKERMSG @V67CAH7 00194000
- EXTRN DMKFREE,DMKFRET,DMKPGTSG,DMKPGTVG,DMKPGTVR @V67CAH7 00195000
- EXTRN DMKPTRUL,DMKRPAGT,DMKRPAPT,DMKRSPDP,DMKRSPID @V67CAH7 00196000
- EXTRN DMKRSPRD,DMKSCNFD,DMKSPLDL,DMKSYSDU,DMKUDRFU @V67CAH7 00197000
- EJECT 00198000
- *********************************************************************** 00199000
- * * 00200000
- * 1.2.3. ENTRY * 00201000
- * * 00202000
- *********************************************************************** 00203000
- SPACE 2 00204000
- DMKVMDEP RELOC @V67CAH7 00205000
- SPACE 2 00206000
- XC SAVEWRK1,SAVEWRK1 * ZERO WORK @V67CAH7 00207000
- XC SAVEWRK2(32),SAVEWRK2 * AREA @V67CAH7 00208000
- LA R3,SAVEWRK2 ESTABLISH RANGE POINTER @V67CAH7 00209000
- SPACE 2 00210000
- LA R0,SFBSIZE * GET SPACE FOR @V67CAH7 00211000
- CALL DMKFREE * SFBLOK @V67CAH7 00212000
- LR R5,R1 SAVE POINTER TO SFBLOK @V67CAH7 00213000
- USING SFBLOK,R5 @V67CAH7 00214000
- XC SFBLOK(SFBSIZE*8),SFBLOK ZERO GOTTEN AREA @V67CAH7 00215000
- MVC SFBFNAME(7),=C'VMDUMP ' PUT DEFAULT NAME IN @V67CAH7 00216000
- MVC SFBFNAME+7(17),SFBFNAME+6 * TYPE AREA @V67CAH7 00217000
- MVC SFBUSER,BLANKS BLANK OUT USERID FIELD @V67CAH7 00218000
- SPACE 2 00219000
- GETNEXT DS 0H @V67CAH7 00220000
- CALL DMKSCNFD GET NEXT FIELD 00221000
- SPACE 00222000
- * DMKSCNFD FINDS THE ENTRIES WITHIN THE COMMAND LINE, AT EXIT R0 HAS 00223000
- * LENGTH OF ENTRY AND R1 POINTS TO ENTRYS FIRST BYTE 00224000
- SPACE 00225000
- BNZ LINEDONE IF LINE COMPLETELY READ...BRANCH @V67CAH7 00226000
- EJECT 00227000
- *********************************************************************** 00228000
- * * 00229000
- * 4. IS PARAMETER = TO ? * 00230000
- * * 00231000
- *********************************************************************** 00232000
- SPACE 2 00233000
- * 00234000
- CHKTO DS 0H @V67CAH7 00235000
- C R0,F2 COMPARE LENGTH TO 2 @V67CAH7 00236000
- BNE CHKSYSTM NO...NOT 'TO' @V67CAH7 00237000
- CLC 0(2,R1),=C'TO' * IS THIS 'TO' PARAMETER @V67CAH7 00238000
- BNE CHKSYSTM * NO...CHECK FOR FORMAT @V67CAH7 00239000
- TM SAVEWRK1,SETTO * 'TO' BEEN FOUND BEFORE @V67CAH7 00240000
- BO VMD013 * YES...ERROR ROUTINE @V67CAH7 00241000
- OI SAVEWRK1,SETTO SET 'TO' FOUND INDICATOR ON @V67CAH7 00242000
- CALL DMKSCNFD * GET THE 'TO' REQUEST 00243000
- BNZ VMD020 * IF NO ENTRY..ERROR @V67CAH7 00244000
- * R0 HAS LENGTH..R1 HAS ADDRESS OF ENTRY FOLLOWING 'TO' 00245000
- C R0,F1 * IS ENTRY'S LENGTH 1 BYTE? @V67CAH7 00246000
- BNE NOTSELF * NO..BRANCH AROUND * CHECK @V67CAH7 00247000
- CLI 0(R1),C'*' * IS ENTRY = '*' @V67CAH7 00248000
- BNE NOTSELF * NO...BRANCH AROUND @V67CAH7 00249000
- * ENTRY IS '*' 00250000
- MVC SFBUSER,VMUSER GET THIS USERS ID @V67CAH7 00251000
- B GETNEXT BRANCH BACK @V67CAH7 00252000
- * CONTINUE CHECK OF FIELD..IT'S NOT THIS USER...(*) 00253000
- NOTSELF DS 0H @V67CAH7 00254000
- C R0,F8 * IS LENGTH GT 8 BYTES? @V67CAH7 00255000
- BH VMD020 * YES..ERROR BRANCH @V67CAH7 00256000
- SPACE 00257000
- SLR R2,R2 * INDICATE ONLY WANT CC SET @V67CAH7 00258000
- CALL DMKUDRFU CHECK VALIDITY OF USERID 00259000
- BNZ VMD053 NOGOOD..BR TO ERROR ROUTINE @V67CAH7 00260000
- LR R8,R0 SETUP FOR EXECUTE...R0=NONO @V67CAH7 00261000
- BCTR R8,0 -1 FOR MVC LENGTH @V67CAH7 00262000
- EX R8,EXMOVE1 MOVE 'TO' USERID TO SFBUSER @V67CAH7 00263000
- B GETNEXT @V67CAH7 00264000
- SPACE 00265000
- EXMOVE1 MVC SFBUSER(*-*),0(R1) MOVE IT...VIA EXECUTE @V67CAH7 00266000
- EJECT 00267000
- *********************************************************************** 00268000
- * * 00269000
- * 5. IS PARAMETER = 'SYSTEM'? * 00270000
- * * 00271000
- *********************************************************************** 00272000
- SPACE 2 00273000
- CHKSYSTM DS 0H @V67CAH7 00274000
- C R0,F6 * IS LENGTH = 6 @V67CAH7 00275000
- BNE CHKFORM * NO...BRANCH @V67CAH7 00276000
- CLC 0(6,R1),=C'SYSTEM' * YES...IS PARAMETER=SYSTEM @V67CAH7 00277000
- BNE CHKFORM * NO...BRANCH @V67CAH7 00278000
- TM SAVEWRK1,SETTO * YES...* IS THIS FIRST @V67CAH7 00279000
- * * 'SYSTEM' OR 'TO' 00280000
- BO VMD013 * NO..ERROR,BRANCH @V67CAH7 00281000
- OI SAVEWRK1,SETTO * YES..SET IND ON @V67CAH7 00282000
- L R1,=A(DMKSYSDU) GET POINTER TO SYSTEM USERID @V67CAH7 00283000
- MVC SFBUSER,0(R1) MOVE SYSTEM CPDUMP USERID IN @V67CAH7 00284000
- B GETNEXT GO BACK, NEXT NEXT PARAMETER @V67CAH7 00285000
- EJECT 00286000
- *********************************************************************** 00287000
- * * 00288000
- * 6. IS PARAMETER = FORMAT ? * 00289000
- * * 00290000
- *********************************************************************** 00291000
- SPACE 2 00292000
- * R0 HAS LENGTH, R1 HAS ADDRESS OF ENTRY 00293000
- CHKFORM DS 0H @V67CAH7 00294000
- C R0,F6 * IS ENTRY 6 BYTES LONG? @V67CAH7 00295000
- BNE CHKDSS * NO...CHECK FOR ASTERISK @V67CAH7 00296000
- CLC 0(6,R1),=C'FORMAT' * IS ENTRY = FORMAT @V67CAH7 00297000
- BNE CHKDSS * NO,BR TO ASTERISK CHECK @V67CAH7 00298000
- SPACE 00299000
- TM SAVEWRK1,SETFORM * IS THIS 2ND FORMAT? @V67CAH7 00300000
- BO VMD013 * YES..ERROR, BRANCH @V67CAH7 00301000
- OI SAVEWRK1,SETFORM SET FORMAT FOUND INDICATOR @V67CAH7 00302000
- SPACE 00303000
- CALL DMKSCNFD * GET FORMAT'S ENTRY 00304000
- BNZ VMD038 * DOESN'T EXIST...ERROR @V67CAH7 00305000
- SPACE 00306000
- * R0 HAS LENGTH, R1 HAS ADDRESS OF ENTRY FOLLOWING 'FORMAT' 00307000
- C R0,F8 * IS ENTRY GT 8 BYTES @V67CAH7 00308000
- BH VMD038 * YES...ERROR,BRANCH @V67CAH7 00309000
- FORMOK DS 0H @V67CAH7 00310000
- LR R8,R0 * NO...ENTRY OK @V67CAH7 00311000
- BCTR R8,0 -1 FOR MVC INST @V67CAH7 00312000
- EX R8,EXMOVE2 MOVE IT INTO SFBFTYPE @V67CAH7 00313000
- B GETNEXT AND GET NEXT PARAMETER @V67CAH7 00314000
- SPACE 2 00315000
- EXMOVE2 MVC SFBFTYPE(*-*),0(R1) MOVE VIA EXECUTE..TO SFBLOK @V67CAH7 00316000
- EJECT 00317000
- *********************************************************************** 00318000
- * * 00319000
- * 7. IS PARAMETER = DSS ? * 00320000
- * * 00321000
- *********************************************************************** 00322000
- SPACE 2 00323000
- CHKDSS DS 0H @V67CAH7 00324000
- C R0,F3 * IS LENGTH 3 BYTES @V67CAH7 00325000
- BNE CHKASTER * NO...BRANCH @V67CAH7 00326000
- CLC 0(3,R1),=C'DSS' YES...* IS ENTRY 'DSS'? @V67CAH7 00327000
- BNE CHKASTER * NO...BRANCH @V67CAH7 00328000
- L R8,VMSIZE * IS VMSIZE GT @V67CAH7 00329000
- C R8,VMSTOR * VMSTOR? @V67CAH7 00330000
- BNH VMD013 * NO...ERROR,BRANCH @V67CAH7 00331000
- * * YES...USER HAS SOME 00332000
- * * TYPE OF SAVED SYSTEM 00333000
- OI SAVEWRK1,SETDSS * ...INDICATE DSS FOUND @V67CAH7 00334000
- B GETNEXT GO GET NEXT ENTRY @V67CAH7 00335000
- EJECT 00336000
- *********************************************************************** 00337000
- * * 00338000
- * 8. IS PARAMETER = * (ASTERISK) ? * 00339000
- * * 00340000
- *********************************************************************** 00341000
- SPACE 2 00342000
- * R0 HAS LENGTH, R1 HAS ADDRESS OF ENTRY 00343000
- CHKASTER DS 0H @V67CAH7 00344000
- CLI 0(R1),C'*' * IS THIS A COMMENT? @V67CAH7 00345000
- BNE CHKRANGE * NO..GO CHECK RANGE @V67CAH7 00346000
- SPACE 00347000
- * ***DETERMINE MESSAGE LENGTH FROM * TO END 00348000
- * R9 POINTS TO BUFFER 00349000
- * BYTES LEFT = (BUFFER LEFT + THIS FIELD) 00350000
- L R14,BUFCNT * GET LENGTH LEFT IN BUFFER @V67CAH7 00351000
- AR R0,R14 * ADD TO FIELD WORKING WITH @V67CAH7 00352000
- BCTR R0,0 -1 FOR * @V67CAH7 00353000
- LA R1,1(,R1) MOVE POINTER PAST * @V67CAH7 00354000
- SPACE 00355000
- LA R14,L'DMPDMPID * ESTABLISH 100 FOR COMPARE @V67CAH7 00356000
- CR R0,R14 * IS LENGTH GT 100? @V67CAH7 00357000
- BNH COMMOK * NO...LENGTH IS OK, BRANCH @V67CAH7 00358000
- LR R0,R14 * YES..SET LENGTH TO 100=MAX @V67CAH7 00359000
- SPACE 00360000
- * SAVE R0,R1 FOR BUILDING OF COMMENT IN DMPINREC 00361000
- COMMOK DS 0H @V67CAH7 00362000
- ST R0,SAVEWRK8 * SAVE LENGTH OF ENTRY @V67CAH7 00363000
- ST R1,SAVEWRK9 * SAVE ADDRESS OF ENTRY @V67CAH7 00364000
- EJECT 00365000
- *********************************************************************** 00366000
- * * 00367000
- * 9. HAVE THE USERID AND RANGE DEFAULTS BEEN SATISFIED? * 00368000
- * * 00369000
- *********************************************************************** 00370000
- SPACE 2 00371000
- * ROUTINE TO ENTER WHEN FULL LINE IS SEARCHED OR COMMENT FOUND 00372000
- SPACE 00373000
- LINEDONE DS 0H @V67CAH7 00374000
- TM SAVEWRK1,SETTO * HAS TO/SYSTEM BEEN FOUND @V67CAH7 00375000
- BO GOTTO * YES...SKIP GETTING USERID @V67CAH7 00376000
- MVC SFBUSER,VMUSER * NO...PUT USER INTO SFBLOK @V67CAH7 00377000
- GOTTO DS 0H @V67CAH7 00378000
- LA R14,SAVEWRK2 ESTABLISH ADDR OF FIRST RANGE @V67CAH7 00379000
- CR R3,R14 * HAS A RANGE BEEN BUILT? @V67CAH7 00380000
- BH ORDERANG * YES...BRANCH @V67CAH7 00381000
- OI SAVEWRK1+1,DSSONLY TEMPORARLY SET @V67CAH7 00382000
- TM SAVEWRK1,SETDSS IF 'DSS' REQUESTED @V67CAH7 00383000
- * DON'T DEFAULT TO 0-END 00384000
- BO DSSHUH DSS REQUESTED...BRANCH @V67CAH7 00385000
- NI SAVEWRK1+1,X'FF'-DSSONLY TURN OFF IF NOT ALONE @V67CAH7 00386000
- SLR R14,R14 ZERO FOR LOW RANGE @V67CAH7 00387000
- ST R14,RANGELOW PUT IT IN LOW POSITION @V67CAH7 00388000
- L R14,VMSTOR USE VMSTOR FOR HIGH RANGE @V67CAH7 00389000
- BCTR R14,0 -1 @V67CAH7 00390000
- ST R14,RANGEHI PUT IN HIGH POSITION @V67CAH7 00391000
- LA R3,RANGENXT UPDATE RANGE POINTER @V67CAH7 00392000
- B ORDERANG @V67CAH7 00393000
- EJECT 00394000
- *********************************************************************** 00395000
- * * 00396000
- * 10. RANGE ROUTINE * 00397000
- * * 00398000
- *********************************************************************** 00399000
- SPACE 2 00400000
- * ASSUMING PARAMETER IS A RANGE OF ADDRESSES 00401000
- * HERE DETERMINE TYPE OF RANGE SPECIFICATION 00402000
- CHKRANGE DS 0H @V67CAH7 00403000
- LA R14,SAVEWRK8 SET END OF RANGES ADDRESS @V67CAH7 00404000
- CR R3,R14 * HAVE THREE RANGES BEEN FOUND @V67CAH7 00405000
- BNL VMD009 * YES...BR TO ERROR ROUTINE @V67CAH7 00406000
- * R0 HAS LENGTH, R1 HAS ADDRESS OF FIELD...SAVE THESE ORIGINAL NUMBERS 00407000
- ST R0,SFBDATE * SAVED LENGTH @V67CAH7 00408000
- ST R1,SFBDATE+4 * SAVED ADDRESS @V67CAH7 00409000
- RANGLOOP DS 0H @V67CAH7 00410000
- NI SAVEWRK1,X'FF'-DOT-DASH-BLANK TURN OFF SWITCHS @V67CAH7 00411000
- * IS RANGE DASH 00412000
- OI SAVEWRK1,DASH * TURNON DASH FOUND INDICATOR @V67CAH7 00413000
- CLI 0(R1),C'-' * IS THIS A SET OF RANGES? @V67CAH7 00414000
- BE RANGESET * YES...BRANCH @V67CAH7 00415000
- CLI 0(R1),COLON * IS THIS A SET OF RANGES? @V67CAH7 00416000
- BE RANGESET * YES...BRANCH @V67CAH7 00417000
- NI SAVEWRK1,X'FF'-DASH * NO...TURN DASH OFF @V67CAH7 00418000
- SPACE 00419000
- * IS RANGE DOT...ADDRESS.BYTECOUNT 00420000
- OI SAVEWRK1,DOT * TURN DOT FOUND ON @V67CAH7 00421000
- CLI 0(R1),C'.' * IS THIS RANGE.BYTECOUNT? @V67CAH7 00422000
- BE RANGESET * YES...BRANCH @V67CAH7 00423000
- NI SAVEWRK1,X'FF'-DOT * NO...TURN DOT OFF @V67CAH7 00424000
- SPACE 00425000
- * IS THIS SINGLE ADDRESS OR END OF INPUT LINE? 00426000
- OI SAVEWRK1,BLANK * TURN BLANK FOUND 'ON' @V67CAH7 00427000
- CLI 0(R1),C' ' * IS THIS BLANK @V67CAH7 00428000
- BE RANGESET * YES...BRANCH @V67CAH7 00429000
- CLI 0(R1),X'15' * IS THIS LINE END @V67CAH7 00430000
- BE RANGESET * YES...BRANCH @V67CAH7 00431000
- * FAILED ON FINDING ADDRESS SEPARATOR 00432000
- * UPDATE POINTERS TO NEXT POSITION 00433000
- LA R1,1(,R1) ADD ONE TO POSITION POINTER @V67CAH7 00434000
- BCT R0,RANGLOOP DECREMENT FIELD LENGTH BY 1 @V67CAH7 00435000
- * AND CONTINUE CHECK IF ANY FIELD LEFT 00436000
- * IF NONE LEFT...DEFAULT TO BLANK 00437000
- EJECT 00438000
- * NOW VERIFY RANGE NUMBERS OR TAKE DEFAULTS 00439000
- SPACE 00440000
- RANGESET DS 0H @V67CAH7 00441000
- ST R0,SFBTIME * SAVE LENGTH OF 2ND PART @V67CAH7 00442000
- ST R1,SFBTIME+4 * SAVE ADDRESS OF 2ND PART @V67CAH7 00443000
- * RESOLVE LENGTH AND ADDRESS OF FIRST ADDRESS OF FIELD 00444000
- L R0,SFBDATE THIS GETS ORIGINAL COUNT @V67CAH7 00445000
- S R0,SFBTIME ORIG COUNT - RESIDUAL COUNT @V67CAH7 00446000
- L R1,SFBDATE+4 ORIGINAL ADDRESS.. @V67CAH7 00447000
- * R0 NOW HAS LENGTH OF 1ST FIELD, R1 HAS ADDRESS OF 1ST FIELD 00448000
- LTR R0,R0 IS LENGTH = 0 (DUE TO DOT @V67CAH7 00449000
- * OR DASH AS FIRST CHARACTER) 00450000
- BNZ CHKNUM NO...BRANCH TO VERIFY NUMBER @V67CAH7 00451000
- SLR R1,R1 YES..SET LOW RANGE TO DEFAULT=0 @V67CAH7 00452000
- B DONTCHK SKIP VERIFY @V67CAH7 00453000
- CHKNUM DS 0H @V67CAH7 00454000
- BAL R7,FIELDCHK VERIFY ADDR...ON RETURN R1 HAS @V67CAH7 00455000
- * ADDRESS IN BINARY 00456000
- DONTCHK DS 0H @V67CAH7 00457000
- ST R1,RANGELOW SAVE LOW ADDRESS OF RANGE @V67CAH7 00458000
- TM SAVEWRK1,BLANK IS THIS SINGLE FIELD? @V67CAH7 00459000
- BO STROUND * YES...R1 SET TO LOW ADDRESS @V67CAH7 00460000
- * * MAKE THIS HIGH ADDRESS ALSO 00461000
- L R0,SFBTIME RESTORE POINTERS TO @V67CAH7 00462000
- L R1,SFBTIME+4 SECOND ADDRESS @V67CAH7 00463000
- * R0,R1 RANGE INCLUDES SEPARATION CHARACTER...NOW ELIMINATE IT 00464000
- LA R1,1(,R1) ADD 1 TO ADDRESS POINTER @V67CAH7 00465000
- BCTR R0,0 SUBTRACT ONE FROM LENGTH @V67CAH7 00466000
- LTR R0,R0 * IS THERE NO SECOND OPERAND @V67CAH7 00467000
- BNH SYSSIZE * YES...GET SYSTEM SIZE FOR HIGH @V67CAH7 00468000
- C R0,F3 * IS 2ND ADDR 3 BYTES LONG @V67CAH7 00469000
- BNE VERIFY2 * NO...BRANCH @V67CAH7 00470000
- CLC 0(3,R1),=C'END' * YES...IS 2ND ADDRESS='END' @V67CAH7 00471000
- BNE VERIFY2 * NO...BRANCH TO VERIFY 2ND @V67CAH7 00472000
- SYSSIZE DS 0H @V67CAH7 00473000
- L R1,VMSTOR SET HIGH TO SYSTEM SIZE @V67CAH7 00474000
- BCTR R1,0 SUBTRACT 1 FROM SYSTEM SIZE @V67CAH7 00475000
- B STROUND GO STORE HIGH/ROUND BOTH @V67CAH7 00476000
- VERIFY2 DS 0H @V67CAH7 00477000
- BAL R7,FIELDCHK VERIFY 2ND ADDRESS @V67CAH7 00478000
- * ON RETURN R1= BINARY ON THE 2ND ADDRESS 00479000
- EJECT 00480000
- * CHECK RANGE TYPES 00481000
- SPACE 00482000
- TM SAVEWRK1,DOT * IS THIS ADDRESS.BYTECOUNT? @V67CAH7 00483000
- BO CHKDOT * YES...BRANCH @V67CAH7 00484000
- * THIS IS DASH TYPE RANGE 00485000
- C R1,RANGELOW * IS HEXLOC2 LT HEXLOC1? @V67CAH7 00486000
- BNL STROUND * NO...BRANCH @V67CAH7 00487000
- SPACE 00488000
- * * YES...SET UP FOR ERROR 009 00489000
- L R8,RANGELOW SAVE RANGELOW IN REGISTER @V67CAH7 00490000
- CALL DMKCVTBH R1 HAS BINARY NUMBER ALREADY 00491000
- STCM R0,3,SAVEWRK2+7 * SAVE SECOND @V67CAH7 00492000
- STCM R1,15,SAVEWRK2+9 * PRINTABLE ADDRESS @V67CAH7 00493000
- MVI SAVEWRK2+6,C'-' MOVE DASH BETWEEN @V67CAH7 00494000
- LR R1,R8 GET FIRST RANGE @V67CAH7 00495000
- CALL DMKCVTBH CONVERT YE OF LITTLE FAITH 00496000
- STCM R0,3,SAVEWRK2 * SAVE FIRST @V67CAH7 00497000
- STCM R1,15,SAVEWRK2+2 * PRINTABLE ADDRESS @V67CAH7 00498000
- LA R0,13 * SETUP FOR @V67CAH7 00499000
- LA R1,SAVEWRK2 * DMKERMSG @V67CAH7 00500000
- B VMD009 * NOW READY TO BRANCH @V67CAH7 00501000
- SPACE 2 00502000
- * THIS IS DOT TYPE RANGE 00503000
- CHKDOT DS 0H @V67CAH7 00504000
- A R1,RANGELOW ADD BYTECOUNT TO ADDRESS @V67CAH7 00505000
- BCTR R1,0 -1 FOR NON-COUNTED 1ST BYTE @V67CAH7 00506000
- C R1,VMSTOR * IS RESULT GT SYSTEMSIZE @V67CAH7 00507000
- BL STROUND * LOW...OK, BRANCH @V67CAH7 00508000
- BH VMD160 * HIGH...ERROR, BRANCH @V67CAH7 00509000
- BCTR R1,0 * EQUAL...SUBTRACT ONE @V67CAH7 00510000
- EJECT 00511000
- *********************************************************************** 00512000
- * * 00513000
- * 10.3 STORE AND ROUND OFF RANGES * 00514000
- * * 00515000
- *********************************************************************** 00516000
- SPACE 2 00517000
- * AT ENTRY R1 HAS HIGH NUMBER OF RANGE 00518000
- STROUND DS 0H @V67CAH7 00519000
- N R1,XPAGNUM ROUND TO PAGE BOUNDARY @V67CAH7 00520000
- * BY THE WAY XPAGNUM = X00FFF000 00521000
- ST R1,RANGEHI STORE HIGH ADDRESS @V67CAH7 00522000
- NC RANGELOW,XPAGNUM ROUND LOW TO PAGE BOUND @V67CAH7 00523000
- LA R3,RANGENXT UPDATE RANGE POINTER @V67CAH7 00524000
- B GETNEXT BRANCH TO GET NEXT PARAMETER @V67CAH7 00525000
- SPACE 3 00526000
- *********************************************************************** 00527000
- * * 00528000
- * FIELD CHECK * 00529000
- * * 00530000
- *********************************************************************** 00531000
- SPACE 2 00532000
- * FIELDCHK VERIFIES A FIELD OF PRINTABLE HEX CHARACTERS DEFINED BY 00533000
- * R0 AS LENGTH AND R1 AS POINTER TO FIELD...EITHER BRANCHES TO 00534000
- * ERROR MESSAGES FOR BAD DATA OR RETURNS R1 WITH BINARY OF THE 00535000
- * NUMBER FOR GOOD DATA 00536000
- FIELDCHK DS 0H @V67CAH7 00537000
- C R0,F6 * MORE THAN 6 CHARACTERS @V67CAH7 00538000
- BH VMD033 * YES...ERROR, BRANCH @V67CAH7 00539000
- CALL DMKCVTHB CONVERT TO BINARY, R1 HAS BINARY 00540000
- * ON RETURN 00541000
- BNZ VMD033 NUMBER BAD...ERROR BRANCH @V67CAH7 00542000
- SPACE 00543000
- C R1,VMSTOR * IS NUMBER GT USERS SYSTEM SIZE @V67CAH7 00544000
- BLR R7 * LOW...GOOD NUMBER, RETURN @V67CAH7 00545000
- BH VMD160 * HIGH...ERROR, BRANCH @V67CAH7 00546000
- BCTR R1,0 * EQUAL...SUBTRACT 1 @V67CAH7 00547000
- BR R7 * AND RETURN @V67CAH7 00548000
- EJECT 00549000
- SPACE 2 00550000
- *********************************************************************** 00551000
- * * 00552000
- * 11. CONSOLIDATE RANGES ROUTINE * 00553000
- * * 00554000
- *********************************************************************** 00555000
- SPACE 2 00556000
- * ORDER...ORDER RANGE GROUPS TO BE IN ASCENDING ORDER 00557000
- SPACE 00558000
- ORDERANG DS 0H @V67CAH7 00559000
- S R3,F8 POINT TO LAST RANGE BUILT @V67CAH7 00560000
- LA R6,SAVEWRK2 POINTER1 TO POINT TO FIRST ENTRY @V67CAH7 00561000
- P2SET DS 0H @V67CAH7 00562000
- LR R7,R6 POINTER2 EQUALS POINTER1 @V67CAH7 00563000
- UPP2 DS 0H @V67CAH7 00564000
- LA R7,RANGENXT-RANGES(,R7) POINTER2 TO NEXT RANGE @V67CAH7 00565000
- CR R7,R3 * IS POINTER2 PAST LAST RANGE @V67CAH7 00566000
- BH UPPOINT1 * YES...BRANCH @V67CAH7 00567000
- CLC RANGELOW-RANGES(4,R6),RANGELOW-RANGES(R7) @V67CAH7 00568000
- * SHOULD THE RANGES BE REVERSED? 00569000
- BNH UPP2 NO...BRANCH @V67CAH7 00570000
- * POINTER1'S DATA IS GT POINTER2'S...REVERSE THEM 00571000
- XC RANGELOW-RANGES(8,R6),RANGELOW-RANGES(R7) @V67CAH7 00572000
- XC RANGELOW-RANGES(8,R7),RANGELOW-RANGES(R6) @V67CAH7 00573000
- XC RANGELOW-RANGES(8,R6),RANGELOW-RANGES(R7) @V67CAH7 00574000
- B UPP2 @V67CAH7 00575000
- UPPOINT1 DS 0H @V67CAH7 00576000
- LA R6,RANGENXT-RANGES(,R6) UPDATE P1 TO NEXT RANGE @V67CAH7 00577000
- CR R6,R3 * POINTER1 PAST END OF RANGES @V67CAH7 00578000
- BL P2SET * NO...BRANCH BACK @V67CAH7 00579000
- EJECT 00580000
- * MERGE...MERGE THE RANGES TOGETHER IF POSSIBLE 00581000
- SPACE 00582000
- LA R6,SAVEWRK2-8 ESTABLISH P1 TO BEFORE 1ST RGE @V67CAH7 00583000
- LR R8,R3 ESTABLISH MOVABLE END PTR = R8 @V67CAH7 00584000
- MUPP1 DS 0H @V67CAH7 00585000
- LA R6,RANGENXT-RANGES(,R6) UPDATE PTR1=NEXT RANGE @V67CAH7 00586000
- LA R7,RANGENXT-RANGES(,R6) RANGE FOLLOWING PTR1 @V67CAH7 00587000
- * IN POINTER2 00588000
- ENDCHK DS 0H @V67CAH7 00589000
- CR R6,R8 * IS POINTER1 AT LAST RANGE @V67CAH7 00590000
- BNL MERGDONE * YES...DONE,BRANCH @V67CAH7 00591000
- * REMEMBER THEY ARE ALREADY IN ASCENDING ORDER 00592000
- L R14,RANGELOW-RANGES(,R7) *ESTABLISH ABUTTING @V67CAH7 00593000
- S R14,F4096 *PAGE ADDRESS IN R14 @V67CAH7 00594000
- C R14,RANGEHI-RANGES(,R6) *RANGES ABUT/OVERLAP? @V67CAH7 00595000
- BH MUPP1 *NO..BRANCH @V67CAH7 00596000
- CLC RANGEHI-RANGES(4,R6),RANGEHI-RANGES(R7) DOES @V67CAH7 00597000
- * FIRST RANGE ENCOMPASS RANGE 2 00598000
- BNL MERGED * YES...BRANCH @V67CAH7 00599000
- MVC RANGEHI-RANGES(4,R6),RANGEHI-RANGES(R7) MERGE @V67CAH7 00600000
- SPACE 2 00601000
- * NOW MOVE FOLLOWING RANGES UP BEHIND MERGED ONE 00602000
- SPACE 00603000
- * DETERMINE LENGTH OF DATA TO MOVE 00604000
- MERGED DS 0H @V67CAH7 00605000
- LA R0,RANGENXT-RANGES(,R7) POINT R0 TO NEXT RANGE @V67CAH7 00606000
- LA R14,RANGENXT-RANGES-1(,R8) @V67CAH7 00607000
- * POINT TO LAST CHAR OF RANGES 00608000
- SR R14,R0 * HOW MANY BYTES TO MOVE? @V67CAH7 00609000
- BNP UPMEND * NONE...BRANCH @V67CAH7 00610000
- EX R14,EXMOVE3 EXECUTE A MOVE TO BRING @V67CAH7 00611000
- * FOLLOWING RANGES UP AGAINST MERGED ONE 00612000
- UPMEND DS 0H @V67CAH7 00613000
- S R8,F8 MOVE MOVABLE END POINTER TO @V67CAH7 00614000
- * POINT TO LAST RANGE 00615000
- B ENDCHK CHECK IF AT LAST RANGE @V67CAH7 00616000
- SPACE 00617000
- * MERGE RANGES 00618000
- EXMOVE3 MVC RANGELOW-RANGES(*-*,R7),RANGENXT-RANGES(R7) @V67CAH7 00619000
- SPACE 00620000
- MERGDONE DS 0H @V67CAH7 00621000
- LA R3,SAVEWRK2 REESTABLISH RANGE POINTER @V67CAH7 00622000
- DROP R9 DON'T NEED BUFFER ANYMORE...IT WILL BE @V67CAH7 00623000
- * RELOADED CORRECTLY FROM SAVEAREA AT EXIT 00624000
- SPACE 2 00625000
- * R3 IS RANGE POINTER POINTING TO FIRST RANGE 00626000
- * R8 IS END POINTER STILL...KEEP IT TILL GET BITMAP STORAGE 00627000
- SPACE 00628000
- *********************************************************************** 00629000
- * * 00630000
- * DONE ANALYZING COMMAND * 00631000
- * * 00632000
- *********************************************************************** 00633000
- EJECT 00634000
- *********************************************************************** 00635000
- * * 00636000
- * 12. BUILD SFBLOK AND PUT ON DUMP IN PROGRESS QUEUE (DMKRSPDP). * 00637000
- * RESERVE 3 PAGES FOR DMPINREC AND DMPKEYS...THEN BUILD RECORDS OF * 00638000
- * DUMP, RETURN AND BUILD DMPINREC AND KEY RECORDS. * 00639000
- * BUILD BIT MAP AND KEYMAP IN STORAGE (2 PAGES FOR KEYMAP). * 00640000
- * * 00641000
- *********************************************************************** 00642000
- SPACE 2 00643000
- * SET UP SFBLOK 00644000
- SPACE 00645000
- MVI SFBTYPE,TYP1403 PRINTER FILE TYPE @V67CAH7 00646000
- * THIS ROUTINE GETS THE TIME AND DATE 00647000
- LA R1,SFBDATE * SETUP DATE @V67CAH7 00648000
- LA R2,SFBTIME * AND TIME @V67CAH7 00649000
- CALL DMKCVTDT * AND FILL THEM IN 00650000
- MVC SFBCOPY,F1+2 SET NUMBER COPIES TO 1 @V67CAH7 00651000
- OI SFBFLAG,SFBDUMP SET DUMP INDICATOR ON @V67CAH7 00652000
- MVC SFBORIG,VMUSER DEFINE WHOSE DUMP IT IS @V67CAH7 00653000
- MVC SFBRECSZ,F4096+2 RECSIZE=X1000 (2 BYTES) @V67CAH7 00654000
- MVI SFBCLAS,C'V' SET CLASS TO BE 'V' @V67CAH7 00655000
- MVI SFBMISC1+1,C'V' USE THIS TO DISTINGUISH @V67CAH7 00656000
- * BETWEEN CP DUMPS AND VM DUMPS 00657000
- MVC SFBDIST,VMDIST PICK UP DIST FROM DUMPER @V67CAH7 00658000
- SPACE 2 00659000
- * THIS ROUTINE IS A COPY OF DMKSPL'S (GETID) 00660000
- GETID DS 0H @V67CAH7 00661000
- L R14,=A(DMKRSPID) ADDR OF UNIQUE SPOOLID @V67CAH7 00662000
- LH R1,0(,R14) NEXT AVAILABLE SPOOLID @V67CAH7 00663000
- STH R1,SFBFILID SAVE IN SFBLOK @V67CAH7 00664000
- LA R1,1(,R1) UPDATE BY ONE @V67CAH7 00665000
- CH R1,MAXFILE ID REACHED MAX NUMBER? @V67CAH7 00666000
- BNH STOREID * NO @V67CAH7 00667000
- LA R1,1 * YES...START AT ONE @V67CAH7 00668000
- STOREID DS 0H STORE NEXT SPOOLID @V67CAH7 00669000
- STH R1,0(,R14) BACK IN RSPID @V67CAH7 00670000
- SPACE 00671000
- * HERE ADD SFBLOK TO DUMP QUEUE 00672000
- L R14,=A(DMKRSPDP) * ROUTINE @V67CAH7 00673000
- L R1,0(,R14) * TO ADD @V67CAH7 00674000
- ST R1,SFBPNT * SFBLOK TO @V67CAH7 00675000
- ST R5,0(,R14) * DUMP Q AS FIRST ENTRY @V67CAH7 00676000
- EJECT 00677000
- *********************************************************************** 00678000
- * * 00679000
- * 13. GET BITMAP * 00680000
- * * 00681000
- *********************************************************************** 00682000
- SPACE 2 00683000
- * GET SPACE FOR BIT MAP 00684000
- SPACE 2 00685000
- LA R0,BITMAPSZ * GET BIT MAP SIZE @V67CAH7 00686000
- CALL DMKFREE * AND RESERVE SPACE 00687000
- LR R9,R1 * AND MAKE R9=BASE OF BITMAP @V67CAH7 00688000
- USING BITMAP,R9 @V67CAH7 00689000
- SPACE 2 00690000
- * ZERO OUT BITMAP 00691000
- SPACE 00692000
- LR R0,R1 'TO' ADDRESS @V67CAH7 00693000
- LA R1,BITMAPSZ*8 'TO' LENGTH @V67CAH7 00694000
- SLR R7,R7 * ZERO 2ND BYTE COUNT... @V67CAH7 00695000
- * SINCE THE COUNT IS ZERO..THE ADDRESS ISN'T 00696000
- * CHECKED...SO REG6 NEEDN'T BE SET 00697000
- MVCL R0,R6 ZERO BITMAP @V67CAH7 00698000
- SPACE 00699000
- ST R8,LASTRANG SAVE LAST RANGE POINTER @V67CAH7 00700000
- EJECT 00701000
- *********************************************************************** 00702000
- * * 00703000
- * 14. GET MAIN STORAGE SPACE * 00704000
- * * 00705000
- *********************************************************************** 00706000
- SPACE 2 00707000
- * GET AND LOCK IN REAL STORAGE A VIRTUAL PAGE 00708000
- SPACE 00709000
- CALL DMKPGTVG GET VIRTUAL PAGE... X00710000
- R1 ON RETURN IS VIRTUAL ADDRESS 00711000
- ST R1,SPOLADDR SAVE VIRT ADDR OF INT SPOOLREC @V67CAH7 00712000
- TRANS 2,1,OPT=(BRING,LOCK,DEFER,SYSTEM) 00713000
- * NOW HAVE 4K SPACE TO BUILD SPOOL BLOCKS IN...REAL ADDR POINTER=R2 00714000
- LR R10,R2 USE R10 AS SPLINK BASE @V67CAH7 00715000
- USING SPLINK,R10 @V67CAH7 00716000
- * ZERO OUT PAGE 00717000
- LR R0,R10 POINTER TO 1ST OPERAND @V67CAH7 00718000
- L R1,F4096 LENGTH OF 1ST FIELD @V67CAH7 00719000
- SLR R7,R7 * ZERO SECOND OPERAND COUNT @V67CAH7 00720000
- MVCL R0,R6 ZERO WHOLE PAGE @V67CAH7 00721000
- SPACE 00722000
- LA R1,1 * SET NUMBER OF RECORDS @V67CAH7 00723000
- ST R1,SPRECNUM * TO 1 FOR ALL RECORDS @V67CAH7 00724000
- EJECT 00725000
- * GET SPACE FOR KEYS...2 PAGES 00726000
- CALL DMKPGTVG GET A PAGE OF SYSTEM VIRTUAL 00727000
- ST R1,KEYVIRT1 SAVE VIRTUAL ADDR OF KEY PAGE1 @V67CAH7 00728000
- TRANS 2,1,OPT=(BRING,LOCK,DEFER,SYSTEM) LOCK IT 00729000
- ST R2,BITKEY1 SAVE LOCKED 4K PAGES' REAL ADDR @V67CAH7 00730000
- * NOW ZERO THAT PAGE 00731000
- LR R0,R2 ADDRESS OF PAGE TO R0 @V67CAH7 00732000
- L R1,F4096 LENGTH OF FIRST FIELD @V67CAH7 00733000
- SLR R15,R15 * ZERO SECOND OPERAND COUNT @V67CAH7 00734000
- MVCL R0,R14 ZERO WHOLE PAGE @V67CAH7 00735000
- SPACE 00736000
- CALL DMKPGTVG GET A PAGE OF SYSTEM VIRTUAL 00737000
- ST R1,KEYVIRT2 SAVE VIRT ADDR OF KEY PAGE 2 @V67CAH7 00738000
- TRANS 2,1,OPT=(BRING,LOCK,DEFER,SYSTEM) LOCK IT 00739000
- ST R2,BITKEY2 SAVE LOCKED 4K PAGES' REAL ADDR @V67CAH7 00740000
- * NOW ZERO THAT PAGE 00741000
- LR R0,R2 ADDRESS OF PAGE TO R0 @V67CAH7 00742000
- L R1,F4096 LENGTH OF FIRST FIELD @V67CAH7 00743000
- SLR R15,R15 * ZERO SECOND OPERAND COUNT @V67CAH7 00744000
- MVCL R0,R14 ZERO WHOLE PAGE @V67CAH7 00745000
- EJECT 00746000
- *********************************************************************** 00747000
- * * 00748000
- * 15,16 DO ACTUAL DUMPING * 00749000
- * * 00750000
- *********************************************************************** 00751000
- SPACE 2 00752000
- * WRITE 3 BLANK SPOOL RECORDS 00753000
- * 00754000
- BAL R7,GETCCPD GET FIRST CCPD... @V67CAH7 00755000
- * ON RETURN R1 CONTAINS IT 00756000
- ST R1,SFBSTART SAVE ORIGINAL POINTER @V67CAH7 00757000
- * 00758000
- ST R1,SPNXTPAG TEMPORARILY PUT CCPD @V67CAH7 00759000
- * IN FORWARD SPLINK POINTER 00760000
- SLR R6,R6 * ZERO FIRST @V67CAH7 00761000
- ST R6,CURRENT * BACKWARD POINTER @V67CAH7 00762000
- SPACE 00763000
- LA R6,3 COUNTER TO CREATE 3 BLANK BLOCKS @V67CAH7 00764000
- BLKSPOOL DS 0H @V67CAH7 00765000
- BAL R7,GETCCPD GET NEXT SPOOL RECORD CCPD @V67CAH7 00766000
- BAL R7,WRSPOOL GO UPDATE SPLINK/WRITE SPOOL REC @V67CAH7 00767000
- BCT R6,BLKSPOOL IF NOT THREE WRITTEN..RETURN @V67CAH7 00768000
- SPACE 2 00769000
- * GET LOW PAGE RANGE AND PUT ADDRESS IN R4 00770000
- SPACE 00771000
- L R4,RANGELOW FIRST PAGE ADDRESS TO BRING IN @V67CAH7 00772000
- BAL R7,GETPAGE @V67CAH7 00773000
- SR R6,R6 VIRTUAL PAGE INDEX = 0 @V67CAH7 00774000
- * R2 AND R6 DEFINE VIRTUAL PAGE POSITIONS...R2= BASE, R6=INDEX 00775000
- * R10 AND R8 DEFINE SPOOL BLOCK POSITION...R10 = BASE, R8 = INDEX 00776000
- LA R8,4*SPSIZE+TAGSIZE @V67CAH7 00777000
- * * STARTING DISPLACEMENT INTO RECORD 4 EQUALS 00778000
- * * THE FOUR SPLINKS AND TAGSIZE 00779000
- SPACE 2 00780000
- * BEFORE ENTERING FOLLOWING CODE...REMEMBER THAT R6 IS VIRTUAL PAGE 00781000
- * INDEX INDICATING THE NUMBER OF BYTES ALREADY TAKEN FROM THE PAGE. 00782000
- * R8, THE SPOOL INDEX, INDICATES THE NUMBER OF BYTES WRITTEN TO THE 00783000
- * 4K SPOOL RECORD. 00784000
- MOVECHK DS 0H @V67CAH7 00785000
- L R1,F4096 SET SUBTRACTION REGISTER UP @V67CAH7 00786000
- * * IS VIRTUAL PAGE INDEX GT SPOOL INDEX? 00787000
- CR R6,R8 @V67CAH7 00788000
- BH FILSPOOL * YES...BRANCH @V67CAH7 00789000
- * * NO...SPOOL INDEX IS GREATER OR EQUAL 00790000
- * * INDICATING THERE ARE FEWER 00791000
- * * OR EQUAL BYTES LEFT IN SPOOL 00792000
- * * THAN BYTES AVAILABLE IN 00793000
- * * VIRTUAL PAGE. 00794000
- SR R1,R8 * SUB SPOOL INDEX FROM 4096 @V67CAH7 00795000
- * * THIS WILL BE HOW MUCH TO MOVE. 00796000
- B MOVE4 * BRANCH AND DO MOVE @V67CAH7 00797000
- EJECT 00798000
- FILSPOOL DS 0H * YES... @V67CAH7 00799000
- * * PAGE INDEX GREATER INDICATING 00800000
- * * LESS BYTES ARE AVAILABLE ON THE 00801000
- * * VIRT PAGE THAN SPOOL COULD USE. 00802000
- SR R1,R6 * SUBT PAGE INDEX FROM 4096 @V67CAH7 00803000
- * * THIS IS MAXIMUM BYTE COUNT THAT 00804000
- * * THAT CAN BE MOVED 00805000
- MOVE4 DS 0H @V67CAH7 00806000
- LA R14,0(R6,R2) THIS IS 'FROM' ADDRESS FOR MOVE @V67CAH7 00807000
- LR R15,R1 LENGTH OF MOVE FOR MVCL 2ND PARM @V67CAH7 00808000
- LA R0,0(R8,R10) THIS IS 'TO' ADDRESS @V67CAH7 00809000
- SPACE 00810000
- * R1 ALREADY HAS LENGTH IN IT...FOR MVCL 1ST LENGTH PARAMETER 00811000
- SPACE 00812000
- AR R6,R1 * ADD MOVED LENGTH @V67CAH7 00813000
- AR R8,R1 * TO BOTH INDEXES @V67CAH7 00814000
- MVCL R0,R14 THIS IS IT...BUILD SPOOL RECORD @V67CAH7 00815000
- C R6,F4096 * IS VIRT PAGE COMPLETELY MOVED? @V67CAH7 00816000
- BNE FULLSPOL * NO...BRANCH @V67CAH7 00817000
- SPACE 00818000
- * AT THIS POINT VIRTUAL PAGE IS EXPENDED...GET A NEW OR END 00819000
- SPACE 00820000
- CALL DMKPTRUL UNLOCK PAGE R2 POINTS AT...R2=REAL ADDR 00821000
- SLR R6,R6 ZERO VIRTUAL PAGE INDEX @V67CAH7 00822000
- SPACE 2 00823000
- * UPDATE BIT MAP ROUTINE 00824000
- SPACE 00825000
- LR R15,R4 * GET CURRENT PAGE DUMPED @V67CAH7 00826000
- SRL R15,12 PAGE NUMBER @V67CAH7 00827000
- LA R14,7 * GET LOW ORDER 3 BITS @V67CAH7 00828000
- NR R14,R15 * OF PAGE NUMBER @V67CAH7 00829000
- SRL R15,3 GET BYTE DISPLACEMENT IN BITMAP @V67CAH7 00830000
- IC R14,BITTRANS(R14) GET CORRECT MASK TO 'OR' @V67CAH7 00831000
- LA R15,BITMAP(R15) GET PROPER INDEX INTO BITMAP @V67CAH7 00832000
- EX R14,BITSET SET BIT FOR PROPER PAGE @V67CAH7 00833000
- SPACE 00834000
- * DONE WITH BITMAP UPDATE 00835000
- EJECT 00836000
- * NOW UPDATE CURRENT PAGE AND RANGE POINTERS 00837000
- SPACE 00838000
- UPADDR DS 0H @V67CAH7 00839000
- A R4,F4096 UPDATE CURRENT POINTER @V67CAH7 00840000
- C R4,RANGEHI * IS CURRENT ADDRESS PTR @V67CAH7 00841000
- * * GT HIGH RANGE 00842000
- BNH PRESPCHK * NO...BRANCH @V67CAH7 00843000
- LA R3,RANGENXT * YES...UPDATE RANGE PTR @V67CAH7 00844000
- UPRANGE DS 0H @V67CAH7 00845000
- L R4,RANGELOW UPDATE CURRENT PAGE DUMP POINTER @V67CAH7 00846000
- C R3,LASTRANG * IS RANGE PTR PAST ALL RANGES @V67CAH7 00847000
- BH ALLDUMP1 * YES..BRANCH @V67CAH7 00848000
- PRESPCHK DS 0H @V67CAH7 00849000
- BAL R7,GETPAGE * NO...GET NEXT VIRTUAL PAGE @V67CAH7 00850000
- SPACE 00851000
- FULLSPOL DS 0H @V67CAH7 00852000
- C R8,F4096 * IS SPOOL RECORD FILLED? @V67CAH7 00853000
- BL MOVECHK * NO...BRANCH @V67CAH7 00854000
- SPACE 00855000
- * THE SPOOL BLOCK IS BUILT...UPDATE SPLINK...WRITE OUT 00856000
- SPACE 00857000
- BAL R7,GETCCPD * YES..GET NEXT CCPD @V67CAH7 00858000
- BAL R7,WRSPOOL * ..UPDATE SPLINK,WRITE OUT @V67CAH7 00859000
- B MOVECHK * AND GO GET NEXT @V67CAH7 00860000
- SPACE 00861000
- * BELOW IS A BRANCHED AROUND AREA 00862000
- SPACE 00863000
- * SET PROPER BIT TO INDICATE PAGE IS DUMP 00864000
- * THE IMMEDIATE FIELD IS REPLACED BY 'EX' 00865000
- BITSET OI 0(R15),X'00' @V67CAH7 00866000
- EJECT 00867000
- GETPAGE DS 0H @V67CAH7 00868000
- SPACE 00869000
- * BRING PAGE POINTED TO BY CURPAGE INTO STORAGE AND LOCK, THEN 00870000
- * PUT IT'S REAL ADDRESS INTO R2 00871000
- SPACE 00872000
- LR R1,R4 LOAD CURRENT PAGE TO DUMP INTO R1 @V67CAH7 00873000
- TRANS 2,1,OPT=(BRING,LOCK,DEFER) GET USERS VIRT PAGE 00874000
- * AT EXIT OF TRANS...R2 WILL BE REAL STORAGE ADDRESS OF VIRTUAL PAGE 00875000
- BZ GETKEY GOT PAGE....BRANCH @V67CAH7 00876000
- SPACE 00877000
- * THE ONLY INCORRECT CODE THAT CAN HAPPEN IS CC=2 DUE TO DSS PROCESSING 00878000
- * AND INDICATES THAT THE SEGMENT IS INVALID BUT STILL WITHIN 'VMSIZE' 00879000
- SPACE 00880000
- B UPADDR BRANCH TO TRY NEXT PAGE OF RANGE @V67CAH7 00881000
- SPACE 00882000
- * ROUTINE TO GET KEYS FOR EACH 2K AND PUT THEM INTO KEYMAP 00883000
- * FIRST GET SWAPTABLE KEYS 00884000
- GETKEY DS 0H @V67CAH7 00885000
- L R1,VMSEG OBTAIN SEGMENT TABLE BASE @V67CAH7 00886000
- LR R14,R4 VIRTUAL ADDR TO WORK REG @V67CAH7 00887000
- SRDL R14,16 GET SEGMENT NUMBER ONLY @V67CAH7 00888000
- SLL R14,2 SEGMENT NUMBER * 4 @V67CAH7 00889000
- LA R1,0(R14,R1) POINT TO CORRECT SEG ENTRY @V67CAH7 00890000
- * SEGMENT IS ALWAYS VALID BECAUSE ITS PAGE IS IN STORAGE 00891000
- L R1,0(,R1) PAGE TABLE POINTER @V67CAH7 00892000
- LA R1,16*L'PAGCORE+(SWPFLAG-SWPVM)(,R1) @V67CAH7 00893000
- * GET SWAPTABLE ORIGIN 00894000
- SR R14,R14 ZERO WORK REGISTER @V67CAH7 00895000
- SLDL R14,4 MOVE PAGE NUMBER IN @V67CAH7 00896000
- SLL R14,3 MULTIPLY BY 8 (SIZE OF EACH @V67CAH7 00897000
- * SWAPTABLE ENTRY) 00898000
- * R14 NOW HAS CORRECT DISPLACEMENT INTO SWAPTABLE FOR THIS 00899000
- * VIRTUAL PAGE... R1 HAS BASE TO SWAPTABLE 00900000
- IC R15,SWPKEY1-SWPFLAG(R14,R1) 1ST SWAPTABLE KEY @V67CAH7 00901000
- SLL R15,8 MOVE IT TO HIGHER ORDER @V67CAH7 00902000
- IC R15,SWPKEY2-SWPFLAG(R14,R1) 2ND SWAPTABLE KEY @V67CAH7 00903000
- * R15 NOW HAS BOTH SWAPTABLE KEYS 00904000
- EJECT 00905000
- * NOW GET REAL STORAGE KEYS 00906000
- SPACE 00907000
- SLR R1,R1 ZERO WORK REGISTER @V67CAH7 00908000
- ISK R1,R2 PUT STORAGE KEY INTO R1 @V67CAH7 00909000
- SLL R1,8 SAVE KEY IN HIGHER ORDER @V67CAH7 00910000
- LA R14,2048(,R2) GET NEXT 2K ADDRESS AND @V67CAH7 00911000
- ISK R1,R14 PUT 2ND 2K'S KEY IN R1 LOW ORDER @V67CAH7 00912000
- * NOW R1 HAS KEYS TO REAL STORAGE 00913000
- TM VMOSTAT,VMSHR * IS THIS A SHARE SYSTEM? @V67CAH7 00914000
- BZ NONSHR * NO...BRANCH @V67CAH7 00915000
- N R1,=A(X'0E0E') SHUT OFF PHONY KEY OF SHARED @V67CAH7 00916000
- NONSHR DS 0H @V67CAH7 00917000
- OR R1,R15 PUT REAL AND VIRT KEY TOGETHER @V67CAH7 00918000
- L R14,=A(X'FEFE') SET UP FOR 'ECMODE' @V67CAH7 00919000
- TM VMPSTAT,VMV370R * IS THIS MACHINE ECMODE ON? @V67CAH7 00920000
- BO MODESET * YES...BRANCH @V67CAH7 00921000
- L R14,=A(X'F8F8') SET FOR BCMODE @V67CAH7 00922000
- MODESET DS 0H @V67CAH7 00923000
- NR R1,R14 SHUTOFF WHATEVER IS NECESSARY @V67CAH7 00924000
- * R1 NOW HAS TWO CORRECT KEYS AS HALFWORD 00925000
- SPACE 00926000
- * NOW GET PLACE IN KEY MAP TO PUT KEYS 00927000
- LR R14,R4 * GET PAGE NUMBER @V67CAH7 00928000
- SRL R14,11 * TIMES 2 IN WORK REG @V67CAH7 00929000
- * * OK SINCE R4 IS ALWAYS 00930000
- * * ROUNDED TO PAGE BOUNDARY 00931000
- * R14 NOW HAS PROPER INDEX INTO KEYMAP..IF IT WAS CONTIGUOUS FOR 2PAGES 00932000
- * ALSO, REMEMBER THAT WE ARE WORKING WITH HALFWORDS 00933000
- CH R14,F4096+2 * IS THIS FOR 2ND KEY PAGE? @V67CAH7 00934000
- BL FIRSTPG * NO...BRANCH @V67CAH7 00935000
- * * YES... 00936000
- SECONDPG DS 0H @V67CAH7 00937000
- S R14,F4096 FORCE SECOND PAGE TO BEGINNING @V67CAH7 00938000
- L R15,BITKEY2 GET KEYMAP2 ADDRESS @V67CAH7 00939000
- B UPKEYMAP BRANCH @V67CAH7 00940000
- SPACE 00941000
- FIRSTPG DS 0H @V67CAH7 00942000
- L R15,BITKEY1 GET KEYMAP1 ADDRESS @V67CAH7 00943000
- UPKEYMAP DS 0H @V67CAH7 00944000
- STH R1,0(R14,R15) STORE KEYS GOTTEN @V67CAH7 00945000
- BR R7 RETURN @V67CAH7 00946000
- EJECT 00947000
- SPACE 2 00948000
- WRSPOOL DS 0H @V67CAH7 00949000
- SPACE 00950000
- * THIS ROUTINE UPDATES SPLINK BY: 00951000
- * 1.MOVING CURRENT TO SPLINK BACKWARD POINTER 00952000
- * 2.MOVE FORWARD SPLINK POINTER TO CURRENT 00953000
- * 3.MOVE NEXTCCPD TO FORWARD SPLINK POINTER 00954000
- * THEN WRITE OUT SPOOL RECORD TO CURRENT'S POSITION AND UPDATE SFBLAST, 00955000
- * AND RESET SPOOL INDEX TO 16 (RIGHT AFTER SPLINK) 00956000
- SPACE 00957000
- ST R2,SVREG2 PRESERVE VIRT PAGE PTR @V67CAH7 00958000
- MVC SPPREPAG,CURRENT CURRENT TO BACKWARD @V67CAH7 00959000
- MVC CURRENT,SPNXTPAG FORWARD TO CURRENT @V67CAH7 00960000
- MVC SPNXTPAG,NEXTCCPD NEXT TO FORWARD @V67CAH7 00961000
- L R0,CURRENT * SETUP FOR WRITE TO DASD @V67CAH7 00962000
- * * PUT CCPD INTO R0 00963000
- L R1,SPOLADDR * SYSTEM VIRT ADDRESS, @V67CAH7 00964000
- * * THIS GETS RESOLVED TO 00965000
- * * THE REAL ADDRESS 00966000
- * * (NOW IN R10) BY DMKRPAPT 00967000
- CALL DMKRPAPT,PARM=(SYSTEM) WRITE OUT SPOOL RECORD 00968000
- MVC SFBLAST,CURRENT UPDATE SFBLOK @V67CAH7 00969000
- L R8,SFBRECNO * ROUTINE TO @V67CAH7 00970000
- LA R8,1(R8) * ADD ONE TO @V67CAH7 00971000
- ST R8,SFBRECNO * RECORD COUNTER @V67CAH7 00972000
- LA R8,16 INITIALIZE SPOOL INDEX @V67CAH7 00973000
- * AFTER SPLINK 00974000
- L R2,SVREG2 RESET POINTER... @V67CAH7 00975000
- BR R7 RETURN @V67CAH7 00976000
- EJECT 00977000
- GETCCPD DS 0H @V67CAH7 00978000
- SPACE 00979000
- * THIS ROUTINE RESERVES A SPOOL AREA PAGE AND PUTS ITS CCPD IN NEXTCCPD 00980000
- * IF NO SPOOL AREA SPACE IS AVAILABLE THE DUMP IS PURGED AND AN ERROR 00981000
- * MESSAGE ISSUED. 00982000
- SPACE 00983000
- CALL DMKPGTSG GET NEW CCPD 00984000
- ST R1,NEXTCCPD ON RETURN R1 HAS CCPD, SAVE @V67CAH7 00985000
- LTR R1,R1 * IF R1=0, CCPD NOT AVAIL @V67CAH7 00986000
- BNZR R7 * OK...RETURN @V67CAH7 00987000
- * CAN'T GET SPOOL BLOCK, APPEND DUMP TO DELETE CHAIN 00988000
- SPACE 00989000
- * MUST MAKE LAST SPLINK FORWARD POINTER (SPNXTPT) POINT TO FIRST 00990000
- * SPLINK RECORD SO IT CAN BE PROPERLY DELETED 00991000
- ICM R14,15,SFBSTART PICK UP FIRST SPLINK PTR @V67CAH7 00992000
- BZ ERROR146 IF THIS IS 1ST TRY TO GET @V67CAH7 00993000
- * CCPD...DON'T WRITE ANY SPLINKS 00994000
- ST R14,NEXTCCPD NOT FIRST ATTEMPT... @V67CAH7 00995000
- * POINT LAST TO FIRST SPLINK REC 00996000
- BAL R7,WRSPOOL WRITE LAST RECORD CORRECTLY @V67CAH7 00997000
- * SO DMKSPLCR CAN DELETE ALL SPOOLRECS 00998000
- SPACE 00999000
- * FIND SFBLOK ON DMKRSPDP 01000000
- ERROR146 DS 0H @V67CAH7 01001000
- L R14,=A(DMKRSPDP) GET PTR TO DUMP ANCHOR @V67CAH7 01002000
- NEXTSF DS 0H @V67CAH7 01003000
- ICM R1,15,SFBPNT-SFBLOK(R14) GET NEXT SFBLOK PTR @V67CAH7 01004000
- BZ BLOWUP1 NONEXISTANT...ERROR, BRANCH @V67CAH7 01005000
- CR R1,R5 * IS THIS DESIRED SFBLOK? @V67CAH7 01006000
- BE UPCHAIN * YES...BRANCH @V67CAH7 01007000
- LR R14,R1 * NO...SAVE OLD POINTER @V67CAH7 01008000
- B NEXTSF GO GET NEXT SFBLOK @V67CAH7 01009000
- * FOUND PROPER SFBLOK... R1 POINTS TO IT, R14 POINTS TO PREVIOUS SFBLOK 01010000
- UPCHAIN DS 0H @V67CAH7 01011000
- L R1,SFBPNT PUT SFBLOKS FORWARD PTR IN R1 @V67CAH7 01012000
- ST R1,SFBPNT-SFBLOK(,R14) GO AROUND DESIRED SFBLOK @V67CAH7 01013000
- * DESIRED SFBLOK NOW REMOVED FROM DUMP IN PROGRESS CHAIN 01014000
- * DELETE IT 01015000
- LR R7,R5 SFBLOK POINTER TO REG 7 @V67CAH7 01016000
- CALL DMKSPLDL CALL FUMIGATOR 01017000
- B VMD146 GET OUT...AND GIVE MESSAGE @V67CAH7 01018000
- EJECT 01019000
- *********************************************************************** 01020000
- * * 01021000
- * 20. PROCESS DISCONTIGIOUS SAVED SEGMENTS * 01022000
- * AND ANY SAVED SYSTEM WHICH EXCEEDS VMSTOR * 01023000
- * * 01024000
- *********************************************************************** 01025000
- SPACE 2 01026000
- * SAFE TO WAIT TILL NOW TO DUMP DSS..IT'S ALWAYS ABOVE DEFINED STORAGE 01027000
- SPACE 01028000
- ALLDUMP1 DS 0H @V67CAH7 01029000
- TM SAVEWRK1,SETDSS * WAS 'DSS' SPECIFIED @V67CAH7 01030000
- BNO ALLDUMP2 * NO...FINISHED, BRANCH @V67CAH7 01031000
- SPACE 2 01032000
- * 'DSS' BEING SPECIFIED MEANS THAT DISCONTIGUOUS SAVED SEGMENTS (DSS), 01033000
- * OR ANY SAVED SYSTEMS MUST BE DUMPED 01034000
- SPACE 01035000
- S R3,F8 BACK UP, OVERLAY LAST RANGE @V67CAH7 01036000
- DSSHUH DS 0H @V67CAH7 01037000
- NI SAVEWRK1,X'FF'-SETDSS TURN OFF DSS INDICATOR @V67CAH7 01038000
- L R1,VMSIZE * IS VMSIZE GT VMSTOR @V67CAH7 01039000
- SPACE 01040000
- * ROUND VMSIZE TO IT'S PAGE BOUNDARY 01041000
- BCTR R1,0 REDUCE VALUE BY 1 @V67CAH7 01042000
- N R1,XPAGNUM AND ROUND TO PAGE BOUNDARY @V67CAH7 01043000
- ST R1,RANGEHI SAVE HIGH VALUE @V67CAH7 01044000
- SPACE 01045000
- * ROUND VMSTOR TO PAGE AFTER 'END' REQUEST 01046000
- L R1,VMSTOR GET VMSTOR IN A REGISTER @V67CAH7 01047000
- BCTR R1,0 AND REDUCE BY 1 @V67CAH7 01048000
- N R1,XPAGNUM AND ROUND DOWN TO PREV PAGE @V67CAH7 01049000
- A R1,F4096 AND ADD ONE PAGE @V67CAH7 01050000
- ST R1,RANGELOW SAVE LOW VALUE @V67CAH7 01051000
- SPACE 01052000
- TM SAVEWRK1+1,DSSONLY * HERE DUE TO DSS ONLY? @V67CAH7 01053000
- BO ORDERANG * YES...BRANCH @V67CAH7 01054000
- B UPRANGE * NO...GO TO DUMP ROUTINE @V67CAH7 01055000
- SPACE 2 01056000
- EJECT 01057000
- ALLDUMP2 DS 0H @V67CAH7 01058000
- MVC NEXTCCPD,SFBSTART CREATE LOOP OF SPOOLRECS @V67CAH7 01059000
- BAL R7,WRSPOOL WRITE OUT LAST RECORD @V67CAH7 01060000
- * ALL DONE DUMPING VIRTUAL PAGES 01061000
- SPACE 01062000
- * FREE UP VIRTUAL PAGE FOR SPOOL BLOCK...R10 POINTS TO REAL ADDRESS 01063000
- LR R2,R10 GET REAL ADDR IN R2 @V67CAH7 01064000
- CALL DMKPTRUL UNLOCK PAGE 01065000
- SPACE 01066000
- DROP R10 NOW UNLOCKED.. @V67CAH7 01067000
- * R2 WILL BE FLOATING BASE 01068000
- USING SPLINK,R2 R2 AS SPOOL BASE @V67CAH7 01069000
- SPACE 3 01070000
- *********************************************************************** 01071000
- * * 01072000
- * 21. BUILD DMPINREC * 01073000
- * * 01074000
- *********************************************************************** 01075000
- SPACE 2 01076000
- MVC NEXTCCPD(4),SFBSTART SET TO GET DMPINREC @V67CAH7 01077000
- BAL R7,GETSPOOL GET DMINREC @V67CAH7 01078000
- * R2 HAS REAL ADDRESS OF PAGE 01079000
- LA R3,SPSIZE+TAGSIZE(R2) ESTABLISH R3 AS BASE @V67CAH7 01080000
- * FOR BUILDING DMPINREC 01081000
- USING DMPINREC,R3 @V67CAH7 01082000
- * ACTUAL BUILDING STARTS HERE 01083000
- MVC DMPGPRS(16*4),VMGPRS MOVE GENERAL REGISTERS @V67CAH7 01084000
- TM VMPSTAT,VMV370R * IS ECMODE 'ON' @V67CAH7 01085000
- BO ECMODEON * YES... BRANCH @V67CAH7 01086000
- MVC DMPCRS(4),VMVCR0 * NO...GET SINGLE REG @V67CAH7 01087000
- B BLDDUMP2 * AND BRANCH @V67CAH7 01088000
- ECMODEON DS 0H @V67CAH7 01089000
- L R1,VMECEXT ECMODE = ON... @V67CAH7 01090000
- * GET ECBLOK POINTER 01091000
- USING ECBLOK,R1 ECBLOK ADDRESSABILITY @V67CAH7 01092000
- MVC DMPCRS(16*4),EXTCR0 GET CONTROL REGISTERS @V67CAH7 01093000
- DROP R1 DONE USING ECBLOK @V67CAH7 01094000
- EJECT 01095000
- BLDDUMP2 DS 0H @V67CAH7 01096000
- CLI SFBFTYPE,C' ' * IS SFBFTYPE UNFILLED? @V67CAH7 01097000
- BNE BLDDUMP3 * NO...IS FILLED..BRANCH @V67CAH7 01098000
- MVC SFBFTYPE(4),=C'FILE' * YES...FILL WITH 'FILE' @V67CAH7 01099000
- B BLDDUMP4 SKIP MOVING TO DMPIN @V67CAH7 01100000
- SPACE 01101000
- BLDDUMP3 DS 0H @V67CAH7 01102000
- MVC DMPVMTYP,SFBFTYPE PUT REQUESTED NAME IN @V67CAH7 01103000
- SPACE 01104000
- BLDDUMP4 DS 0H @V67CAH7 01105000
- MVC DMPFPRS(4*8),VMFPRS FLOATING POINT REGS @V67CAH7 01106000
- MVC DMPCPUID,CPUID HARDWARE CPUID @V67CAH7 01107000
- STCK DMPTODCK TIME FOR DMPINREC @V67CAH7 01108000
- MVC DMPSYSRV,VMSTOR VIRT MACH DEFINED SIZE @V67CAH7 01109000
- MVC DMPSYSRM,VMSIZE VIRT MACHINE REAL SIZE, @V67CAH7 01110000
- * INCLUDES ANY DSS 01111000
- MVC DMPPSW,VMPSW GET VIRTUAL MACHINE PSW @V67CAH7 01112000
- MVC DMPPGMAP(256),BITBYTES * MOVE BITMAP @V67CAH7 01113000
- MVC DMPPGMAP+256(256),BITBYTES+256 * IN TWO PARTS @V67CAH7 01114000
- SPACE 2 01115000
- * MOVE COMMENT TO DMPINREC 01116000
- SPACE 01117000
- ICM R8,15,SAVEWRK8 * IS THERE A COMMENT? @V67CAH7 01118000
- BNH BLDDUMP5 * NO...BRANCH @V67CAH7 01119000
- MVI DMPDMPID,C' ' * YES... BLANK OUT @V67CAH7 01120000
- * * FULL COMMENT AREA 01121000
- MVC DMPDMPID+1(L'DMPDMPID-1),DMPDMPID @V67CAH7 01122000
- BCTR R8,0 * SET LENGTH FOR MVC @V67CAH7 01123000
- L R1,SAVEWRK9 * SET PTR TO COMMENT @V67CAH7 01124000
- EX R8,EXMOVE5 * MOVE TO DMPINREC @V67CAH7 01125000
- SPACE 2 01126000
- * WRITE OUT DMPINREC, SINCE UPPER 256 BYTES AREN'T USED IGNORE THEM 01127000
- SPACE 01128000
- BLDDUMP5 DS 0H @V67CAH7 01129000
- L R0,NEXTCCPD CCPD ADDRESS @V67CAH7 01130000
- MVC NEXTCCPD,SPNXTPAG GET CCPD OF RECORD 2 @V67CAH7 01131000
- L R1,SPOLADDR VIRTUAL ADDRESS @V67CAH7 01132000
- CALL DMKRPAPT,PARM=(SYSTEM) WRITE OUT DMPINREC 01133000
- EJECT 01134000
- *********************************************************************** 01135000
- * * 01136000
- * 22. BUILD KEY PAGES ON SPOOL * 01137000
- * * 01138000
- *********************************************************************** 01139000
- SPACE 2 01140000
- * THIS ROUTINE BUILDS THE DMPKYREC'S FROM THE IN STORAGE KEY DATA 01141000
- * R8 = SPOOL RECORD INDEX...R2 = SPOOL RECORD BASE 01142000
- * R3 = KEY RECORD INDEX 01143000
- * BITKEY1 IS POINTER TO FIRST PAGE OF KEYS 01144000
- * BITKEY2 IS POINTER TO SECOND PAGE OF KEYS 01145000
- BAL R7,GETSPOOL GET REC 2...R2 AS BASE @V67CAH7 01146000
- * IF ANY DMPINREC IS LEFT TO BUILD...HERE IS WHERE TO PUT INTO REC2 01147000
- LA R8,2*SPSIZE+TAGSIZE SPOOL REC INDEX SETTING @V67CAH7 01148000
- SPACE 01149000
- * FILL RECORD 2 WITH KEY DATA 01150000
- SPACE 01151000
- L R15,F4096 * DETERMINE LENGTH @V67CAH7 01152000
- SR R15,R8 * OF MOVE @V67CAH7 01153000
- LR R3,R15 SAVE MOVE LENGTH @V67CAH7 01154000
- LA R14,0(R8,R2) TO ADDRESS FOR MVCL @V67CAH7 01155000
- L R0,BITKEY1 FROM ADDRESS FOR MVCL @V67CAH7 01156000
- LR R1,R15 FROM LENGTH @V67CAH7 01157000
- MVCL R14,R0 MOVE IT... @V67CAH7 01158000
- SPACE 01159000
- * WRITE OUT RECORD 2 01160000
- SPACE 01161000
- L R0,NEXTCCPD RECORD 2'S CCPD @V67CAH7 01162000
- MVC NEXTCCPD,SPNXTPAG GET CCPD OF RECORD 3 @V67CAH7 01163000
- L R1,SPOLADDR VIRT ADDR IN STORAGE @V67CAH7 01164000
- CALL DMKRPAPT,PARM=(SYSTEM) PUT RECORD 2 ON DASD 01165000
- SPACE 01166000
- * RECORD 3 01167000
- BAL R7,GETSPOOL READ IN REC3..R2=BASE @V67CAH7 01168000
- SPACE 01169000
- * THE FIRST INTERNAL PAGE OF KEY DATA ISN'T WRITTEN YET, WRITE REST NOW 01170000
- * R8 HAS NUMBER OF BYTES LEFT TO WRITE. 01171000
- SPACE 01172000
- LA R14,SPSIZE(R2) 'TO' ADDRESS @V67CAH7 01173000
- L R0,BITKEY1 * 'FROM' @V67CAH7 01174000
- AR R0,R3 * ADDRESS @V67CAH7 01175000
- * LENGTH OF MOVE IS EQUAL TO AMOUNT NOT MOVED INTO RECORD 2 01176000
- LR R1,R8 LENGTH OF MOVE @V67CAH7 01177000
- LR R15,R8 TO LENGTH OF MOVE @V67CAH7 01178000
- MVCL R14,R0 MOVE REMAINDER OF @V67CAH7 01179000
- * INTERNAL KEY PAGE 1 01180000
- SPACE 2 01181000
- * KEY 1 PAGE BUILT ON SPOOL RECORDS 01182000
- EJECT 01183000
- * NOW MOVE INTERNAL KEY PAGE 2 01184000
- LA R8,SPSIZE(R8) ESTABLISH SPOOL INDEX @V67CAH7 01185000
- LA R14,0(R8,R2) TO ADDRESS @V67CAH7 01186000
- L R0,BITKEY2 FROM ADDRESS @V67CAH7 01187000
- L R15,F4096 * DETERMINE LENGTH @V67CAH7 01188000
- SR R15,R8 * TO MOVE @V67CAH7 01189000
- LR R1,R15 FROM LENGTH @V67CAH7 01190000
- LR R3,R15 SAVE LENGTH OF BITKEY2 @V67CAH7 01191000
- MVCL R14,R0 FILL REMAINDER OF REC3 @V67CAH7 01192000
- L R0,NEXTCCPD RECORD 3'S CCPD @V67CAH7 01193000
- MVC NEXTCCPD,SPNXTPAG GET CCPD OF RECORD 4 @V67CAH7 01194000
- L R1,SPOLADDR REAL ADDR IN STORAGE @V67CAH7 01195000
- CALL DMKRPAPT,PARM=(SYSTEM) WRITE RECORD 3 TO DASD 01196000
- SPACE 01197000
- * RECORD 4 01198000
- BAL R7,GETSPOOL GET RECORD 4 @V67CAH7 01199000
- L R15,F4096 * LENGTH OF MOVE @V67CAH7 01200000
- SR R15,R3 * TO RECORD 4 @V67CAH7 01201000
- LA R14,SPSIZE(R2) TO ADDRESS @V67CAH7 01202000
- L R0,BITKEY2 * FROM @V67CAH7 01203000
- AR R0,R3 * ADDRESS @V67CAH7 01204000
- LR R1,R15 FROM LENGTH @V67CAH7 01205000
- MVCL R14,R0 MOVE DATA TO RECORD 4 @V67CAH7 01206000
- * ALL KEY DATA MOVED NOW... 01207000
- L R0,NEXTCCPD GET RECORD4'S CCPD @V67CAH7 01208000
- L R1,SPOLADDR VIRT ADDRESS OF REC 4 @V67CAH7 01209000
- CALL DMKRPAPT,PARM=(SYSTEM) WRITE RECORD4 TO DASD 01210000
- EJECT 01211000
- *********************************************************************** 01212000
- * * 01213000
- * 23. MOVE BUILT DUMP TO READER QUEUE * 01214000
- * * 01215000
- *********************************************************************** 01216000
- SPACE 2 01217000
- * SFBLOK NOW EXISTS ON DUMP IN PROGRESS QUEUE (DMKRSPDP). 01218000
- * MOVE IT TO RDR QUEUE ON DMKRSPRD. 01219000
- * R5 POINTS TO SFBLOK ON DMKRSPDP CHAIN...FOLLOW CHAIN UNTIL GET TO 01220000
- * CORRECT SFBLOK (EQUAL ADDRESS TO R5), REMOVE IT FROM CHAIN, 01221000
- * ADD IT TO RDR CHAIN. 01222000
- L R14,=A(DMKRSPDP) POINT TO ANCHOR @V67CAH7 01223000
- GETSF DS 0H @V67CAH7 01224000
- ICM R1,15,SFBPNT-SFBLOK(R14) GET 1ST SFBLOK PTR @V67CAH7 01225000
- BNZ GETSF2 NO PTR PRESENT..BOMB @V67CAH7 01226000
- BLOWUP1 DS 0H @V67CAH7 01227000
- ABEND 1 ...THIS SHOULDN'T HAPPEN 01228000
- GETSF2 DS 0H @V67CAH7 01229000
- CR R1,R5 * IS THIS DESIRED SFBLOK? @V67CAH7 01230000
- BE GOTSF * YES...BRANCH @V67CAH7 01231000
- LR R14,R1 * NO...UPDATE PTR TO PREV SFBLOK @V67CAH7 01232000
- B GETSF BRANCH TO TRY AGAIN @V67CAH7 01233000
- SPACE 01234000
- GOTSF DS 0H @V67CAH7 01235000
- * NOW R14=POINTER TO SFBLOK BEFORE DESIRED ONE, R1=POINTER TO SFBLOK 01236000
- MVC SFBPNT-SFBLOK(L'SFBPNT,R14),SFBPNT-SFBLOK(R1) @V67CAH7 01237000
- * REMOVES SFBLOK FROM QUEUE 01238000
- SPACE 01239000
- * ADD SFBLOK TO BACK OF READER QUEUE...FIND LAST ENTRY 01240000
- L R14,ARSPRD ANCHOR TO READER CHAIN @V67CAH7 01241000
- NEXTRDR DS 0H @V67CAH7 01242000
- LR R2,R14 SAVE LAST ADDRESS @V67CAH7 01243000
- ICM R14,15,SFBPNT-SFBLOK(R2) GET FORWARD POINTER @V67CAH7 01244000
- BNZ NEXTRDR IF NOT PAST END...GET NEXT @V67CAH7 01245000
- * R2 HAS LAST ENTRY ON RDR CHAIN 01246000
- ST R5,SFBPNT-SFBLOK(,R2) ADD SFBLOK TO RDR CHAIN @V67CAH7 01247000
- ST R14,SFBPNT-SFBLOK(,R5) 0 FORWARD PTR... @V67CAH7 01248000
- * MIGHT HAVE PICKED POINTER UP IN DUMP QUEUE 01249000
- SPACE 2 01250000
- * CHECKPOINT DUMP FILE 01251000
- SPACE 01252000
- LR R7,R5 SET SFBLOK PTR AS DMKCKS WANTS @V67CAH7 01253000
- CALL DMKCKSPL,PARM=ADDSFB+RDRCHN 01254000
- EJECT 01255000
- *********************************************************************** 01256000
- * * 01257000
- * 24. FREE WORK AREAS * 01258000
- * * 01259000
- *********************************************************************** 01260000
- SPACE 01261000
- * SPOLADDR POINTS TO SYSTEM VIRTUAL ADDRESS OF SPOOL PAGE 01262000
- FREEALL DS 0H @V67CAH7 01263000
- L R1,SPOLADDR GET VIRTUAL ADDRESS IN R1 @V67CAH7 01264000
- CALL DMKPGTVR RELEASE PAGE (SPOOL BLOCK) 01265000
- SPACE 01266000
- * FREE UP TWO PAGES FOR KEYS 01267000
- L R2,BITKEY1 REAL ADDRESS OF FIRST KEY PAGE @V67CAH7 01268000
- CALL DMKPTRUL UNLOCK IT 01269000
- L R1,KEYVIRT1 GET VIRTUAL ADDRESS TO RELEASE @V67CAH7 01270000
- CALL DMKPGTVR RELEASE FIRST KEY PAGE 01271000
- SPACE 01272000
- L R2,BITKEY2 REAL ADDRESS OF 2ND KEY PAGE @V67CAH7 01273000
- CALL DMKPTRUL UNLOCK IT 01274000
- L R1,KEYVIRT2 VIRTUAL ADDRESS OF 2ND KEY PAGE @V67CAH7 01275000
- CALL DMKPGTVR RELEASE 2ND KEY PAGE 01276000
- SPACE 01277000
- * FREE BITMAP SPACE 01278000
- LA R0,BITMAPSZ GET NUMBER OF DOUBLE WORDS @V67CAH7 01279000
- LR R1,R9 ADDR OF AREA TO BE GIVENUP @V67CAH7 01280000
- CALL DMKFRET RID THY SELF OF EXCESSES 01281000
- TM SAVEWRK1,ER146PRO * THIS FOR ERROR61 PROCESS @V67CAH7 01282000
- BO VMD146B * YES...BR TO ISSUE MESSAGE @V67CAH7 01283000
- SPACE 01284000
- * COMMAND COMPLETE 01285000
- MSG 'COMMAND COMPLETE' * ISSUE MESSAGE THAT 01286000
- CALL DMKQCNWT,PARM=NORET * COMMAND IS COMPLETED 01287000
- * END PROGRAM 01288000
- EXIT 01289000
- EJECT 01290000
- SPACE 2 01291000
- GETSPOOL DS 0H @V67CAH7 01292000
- SPACE 01293000
- * GETS SPOOL BLOCK WHOSE CCPD IS IN NEXTCCPD 01294000
- SPACE 01295000
- L R0,NEXTCCPD * SETUP FOR @V67CAH7 01296000
- L R1,SPOLADDR * DMKRPA @V67CAH7 01297000
- CALL DMKRPAGT,PARM=(SYSTEM+BRING) GET DMPINREC 01298000
- BZR R7 RETURN @V67CAH7 01299000
- OI SAVEWRK1+1,FLOATSP IND SPOOL BLOCK=UNLOCK @V67CAH7 01300000
- B ERROR146 PROB GETIN PAGE...ERROR @V67CAH7 01301000
- SPACE 4 01302000
- EXMOVE5 MVC DMPDMPID(*-*),0(R1) MOVE COMMENT TO DMPINREC @V67CAH7 01303000
- EJECT 01304000
- *********************************************************************** 01305000
- * * 01306000
- * 25. ERROR ROUTINES * 01307000
- * * 01308000
- *********************************************************************** 01309000
- SPACE 2 01310000
- VMD009 DS 0H THIS ERROR IS PREVIOUSLY SETUP WITHIN PROG @V67CAH7 01311000
- LA R2,009 SET ERROR CODE FOR INVALID RANGE @V67CAH7 01312000
- B CALLERM @V67CAH7 01313000
- SPACE 2 01314000
- VMD013 DS 0H @V67CAH7 01315000
- LA R2,13 ERROR CODE, CONFLICTING OPTION @V67CAH7 01316000
- * REGS 0,1 ALREADY SETUP AT ENTRY 01317000
- B CALLERM BRANCH TO ERROR WRITER @V67CAH7 01318000
- SPACE 2 01319000
- VMD020 DS 0H @V67CAH7 01320000
- LA R2,20 ERROR CODE,USERID MISSING/INVALID @V67CAH7 01321000
- B NOVAR BRANCH TO ERROR WRITER @V67CAH7 01322000
- SPACE 2 01323000
- VMD033 DS 0H @V67CAH7 01324000
- LA R2,33 ERROR CODE, HEXLOC MISSING/INVALID @V67CAH7 01325000
- B NOVAR BRANCH @V67CAH7 01326000
- SPACE 2 01327000
- VMD038 DS 0H @V67CAH7 01328000
- LA R2,38 ERROR CODE, PARAMETER MISSING @V67CAH7 01329000
- MVC SAVEWRK2(8),MSG38 BUILD MESSAGE MODIFIER @V67CAH7 01330000
- LA R1,SAVEWRK2 POINT TO DATA @V67CAH7 01331000
- LA R0,8 LENGTH OF DATA @V67CAH7 01332000
- B CALLERM BRANCH @V67CAH7 01333000
- SPACE 2 01334000
- VMD053 DS 0H @V67CAH7 01335000
- LA R2,53 ERROR CODE, USERID NOT IN DIRECT @V67CAH7 01336000
- * REGS 0,1 ALREADY SETUP AT ENTRY 01337000
- B CALLERM BRANCH TO WRITE ERROR MSG @V67CAH7 01338000
- EJECT 01339000
- VMD146 DS 0H @V67CAH7 01340000
- TM SAVEWRK1+1,FLOATSP * SPOOL BLOCK BEEN FREED @V67CAH7 01341000
- BO VMD146A * YES...BRANCH @V67CAH7 01342000
- * FREE UP VIRTUAL PAGE FOR SPOOL BLOCK...R10 POINTS TO REAL ADDRESS 01343000
- LR R2,R10 GET REAL ADDR IN R2 @V67CAH7 01344000
- CALL DMKPTRUL UNLOCK PAGE 01345000
- VMD146A DS 0H @V67CAH7 01346000
- OI SAVEWRK1,ER146PRO SET ER146 PROCESSING IND @V67CAH7 01347000
- B FREEALL GO FREE AREAS @V67CAH7 01348000
- VMD146B DS 0H @V67CAH7 01349000
- LA R2,146 ERROR CODE, SPOOLING ERROR @V67CAH7 01350000
- B NOVAR BRANCH @V67CAH7 01351000
- SPACE 2 01352000
- VMD160 DS 0H @V67CAH7 01353000
- LA R2,160 ERROR CODE, HEXLOC EXCEEDS STORAGE @V67CAH7 01354000
- CALL DMKCVTBH R1 POINTS TO ADDR GT STORAGE SIZE 01355000
- STCM R0,3,SAVEWRK2 * BUILD BUFFER @V67CAH7 01356000
- STCM R1,15,SAVEWRK2+2 * AREA @V67CAH7 01357000
- LA R0,6 * ESTABLISH LENGTH @V67CAH7 01358000
- LA R1,SAVEWRK2 * AND POINTER @V67CAH7 01359000
- B CALLERM BRANCH TO WRITE ERROR MSG @V67CAH7 01360000
- SPACE 4 01361000
- NOVAR DS 0H @V67CAH7 01362000
- SR R1,R1 ZERO PARM REGISTER @V67CAH7 01363000
- SPACE 2 01364000
- * SETUP AND EXECUTE ERROR MESSAGE 01365000
- CALLERM DS 0H @V67CAH7 01366000
- ICM R0,14,MODID+3 INSERT MODULE ID @V67CAH7 01367000
- TM SAVEWRK1,ER146PRO IS THIS DUE TO ERROR61 @V67CAH7 01368000
- BO PUTERMSG YES...SKIP MOST OF SETUP @V67CAH7 01369000
- ICM R2,B'1000',X40FFS FLAG TO FRET BUFFER @V67CAH7 01370000
- LA R3,SFBSIZE LENGTH OF SFBLOK @V67CAH7 01371000
- SLL R3,24 SHIFT NUMB TO HI ORDER BYTE @V67CAH7 01372000
- AR R3,R5 ADD ADDR OF SFBLOK @V67CAH7 01373000
- * TO LOW ORDER 01374000
- PUTERMSG DS 0H @V67CAH7 01375000
- CALL DMKERMSG 01376000
- EJECT 01377000
- SPACE 2 01378000
- * DEFINED STORAGE 01379000
- SPACE 01380000
- BITTRANS DC X'8040201008040201' @V67CAH7 01381000
- MAXFILE DC H'9900' @V67CAH7 01382000
- MSG38 DS 0CL8 @V67CAH7 01383000
- DC C' ' 1ST OPTIONAL FIELD=IGNORE IT @V67CAH7 01384000
- DC X'00' FIELD DELIMITER @V67CAH7 01385000
- DC C'FORMAT' 2ND OPTIONAL FIELD @V67CAH7 01386000
- SPACE 2 01387000
- * MY EQUATES 01388000
- SPACE 01389000
- * SAVEWRK1 SETTINGS 01390000
- * INDICATES: 01391000
- SPACE 01392000
- SETTO EQU X'01' A 'TO' OR 'SYSTEM' ENTRY FOUND @V67CAH7 01393000
- SETFORM EQU X'02' A 'FORMAT' ENTRY FOUND @V67CAH7 01394000
- ER146PRO EQU X'04' ERROR 146 PROCESSING HAPPENING @V67CAH7 01395000
- DASH EQU X'10' A DASH FOUND FOR THIS ENTRY @V67CAH7 01396000
- DOT EQU X'20' A DOT FOUND FOR THIS ENTRY @V67CAH7 01397000
- BLANK EQU X'40' A BLANK FOUND FOR THIS ENTRY @V67CAH7 01398000
- * DASH,DOT,BLANK ARE RESET FOR EACH RANGE ENTRY 01399000
- SETDSS EQU X'80' 'DSS' SPECIFIED ON VMDUMP, @V67CAH7 01400000
- * REQUESTS DUMPING DISCONTIGIOUS SAVED SEGMENTS 01401000
- SPACE 2 01402000
- * SAVEWRK1+1 SETTINGS 01403000
- * INDICATES: 01404000
- SPACE 01405000
- FLOATSP EQU X'01' FLOATING INTERNAL SPOOL BLOCK @V67CAH7 01406000
- DSSONLY EQU X'02' DSS SPECIFIED ALONE...DON'T @V67CAH7 01407000
- * FORCE 0-END DEFAULT 01408000
- SPACE 2 01409000
- TAGSIZE EQU 240 SIZE OF TAG SPACE TO SAVE @V67CAH7 01410000
- COLON EQU X'7A' A 'COLON' @V67CAH7 01411000
- EJECT 01412000
- SPACE 2 01413000
- * MY DSECTS 01414000
- SPACE 01415000
- RANGES DSECT DSECT TO BUILD INSTORAGE RANGES IN SEQUENCE @V67CAH7 01416000
- RANGELOW DS 1F RANGE LOW ADDRESS @V67CAH7 01417000
- RANGEHI DS 1F RANGE HIGH ADDRESS @V67CAH7 01418000
- RANGENXT EQU * UPDATE MECHANISM @V67CAH7 01419000
- SPACE 01420000
- BITMAP DSECT MAP PUT IN DMPINREC TO INDICATE PAGES @V67CAH7 01421000
- BITBYTES DS 512X DUMPED...EACH BIT INDICATES ONE PAGE. @V67CAH7 01422000
- * 0 = NOT DUMPED, 1 = DUMPED 01423000
- * FIRST BIT OF FIRST BYTE IS FOR PAGE 0, 01424000
- * AND THEY GO SEQUENTIALLY FROM THERE. 01425000
- BITKEY1 DS F REAL ADDRESS OF KEY PAGE 1 @V67CAH7 01426000
- BITKEY2 DS F REAL ADDRESS OF KEY PAGE 2 @V67CAH7 01427000
- CURRENT DS F HOLDS THE CURRENT SPOOL RECS CCPD @V67CAH7 01428000
- NEXTCCPD DS F HOLDS THE NEXT SPOOL RECORDS CCPD @V67CAH7 01429000
- SPOLADDR DS F HOLDS THE SPOOL RECS,SYSTEM VIRT. ADDR @V67CAH7 01430000
- KEYVIRT1 DS F SYSTEM VIRTUAL ADDR OF FIRST KEY PAGE @V67CAH7 01431000
- KEYVIRT2 DS F SYSTEM VIRTUAL ADDR OF 2ND KEY PAGE @V67CAH7 01432000
- LASTRANG DS F END OF RANGE POINTER...POINTER TO @V67CAH7 01433000
- * LAST RANGE REALLY 01434000
- SVREG2 DS F STORAGE FOR REG2 WHEN ITS NEEDED @V67CAH7 01435000
- BITMAPSZ EQU ((*-BITMAP)+7)/8 @V67CAH7 01436000
- EJECT 01437000
- SPACE 2 01438000
- COPY EQU @V67CAH7 01439000
- COPY DEVTYPES @V67CAH7 01440000
- PSA 01441000
- COPY VMBLOK @V67CAH7 01442000
- COPY SAVE @V67CAH7 01443000
- COPY SPOOL @V67CAH7 01444000
- COPY CONBUF @V67CAH7 01445000
- COPY DMPBLOKS @V67CAH7 01446000
- COPY CORE @V67CAH7 01447000
- END DMKVMD @V67CAH7 01448000
ibm/vm370-lib/cp/dmkvmd.assemble_src.txt ยท Last modified: 2023/08/06 13:37 by Site Administrator