ibm:vm370-lib:cp:dmknmt.assemble_src
Table of Contents
DMKNMT Source
References
- Fixes Applied : 0
- This Source Date : Thursday, December 14, 1978
- Last Fix ID : [Unmodified]
Source Listing
- DMKNMT.ASSEMBLE.txt
- NMT TITLE 'DMKNMT (CP) VM/370 - RELEASE 6' 00001000
- ISEQ 73,80 VALIDATE INPUT SERIALIZATION 00002000
- *. 00003000
- * 00004000
- * MODULE NAME - 00005000
- * 00006000
- * DMKNMT (IMAGELIB) 00007000
- * 00008000
- * FUNCTION - 00009000
- * 00010000
- * CONSTRUCT AN IMAGE LIBRARY FROM TEXT FILES ON USER DISKS 00011000
- * AND CREATE OR REPLACE THAT IMAGE LIBRARY VIA DIAG CODE X'74' 00012000
- * A CONTROL FILE IS USED TO CONSTRUCT THE IMAGE LIBRARY. 00013000
- * 00014000
- * ATTRIBUTES - 00015000
- * 00016000
- * DISK RESIDENT AS 'IMAGELIB', LOADED INTO CMS USER AREA, 00017000
- * CALLED VIA SVC 202, SERIALLY RESUABLE 00018000
- * 00019000
- * ENTRY POINTS - 00020000
- * 00021000
- * DMKNMTBL - PERFORM THE ABOVE-DESCRIBED FUNCTION 00022000
- * 00023000
- * ENTRY CONDITIONS - 00024000
- * 00025000
- * GPR1 -> STANDARD CMS PLIST 00026000
- * ONE ARGUMENT IS ALLOWED - THE IMAGE LIBRARY NAME 00027000
- * THE FORMAT IS: 00028000
- * +-----------+-----------------------+ 00029000
- * | IMAGELIB | IMAGELIB | 00030000
- * +-----------+-----------------------+ 00031000
- * 00032000
- * EXIT CONDITIONS - 00033000
- * 00034000
- * NORMAL 00035000
- * R15 = 0 00036000
- * THE IMAGE LIBRARY HAS BEEN UPDATED AS REQUESTED 00037000
- * ERROR 00038000
- * R15 = 4 CONTROL FILE NOT FOUND OR IN ERROR 00039000
- * R15 = 8 SPECIFIC IMAGE NON-EXISTENT 00040000
- * R15 = 12 SPECIFIC IMAGE CAUSED LOAD ERROR 00041000
- * R15 = 16 INSUFFICIENT VIRTUAL STORAGE 00042000
- * R15 = 20 THE IMAGE LIBRARY IS CURRENTLY ACTIVE 00043000
- * R15 = 100+(FSREAD RC) ERROR IN FSREAD 00044000
- * IN THESE CASES THE IMAGE LIBRARY IS NOT UPDATED 00045000
- * 00046000
- * CALLS TO OTHER ROUTINES - 00047000
- * 00048000
- * FSSTATE - SEE IF CNTRL AND TEXT FILES EXIST 00049000
- * FSREAD - READ IN THE CNTRL FILE 00050000
- * CMS LOAD - LOAD THE TEXT FILE INTO THE TRANSIENT AREA 00051000
- * 00052000
- * TABLES / WORKAREAS - 00053000
- * 00054000
- * NONE 00055000
- * 00056000
- * REGISTER USAGE - 00057000
- * 00058000
- * GPR0 = TEMPORARY WORK REGISTER 00059000
- * GPR1 = PLIST REGISTER AND TEMP. WORK REGISTER 00060000
- * GPR2 = SOURCE ADDRESS FOR MVCL 00061000
- * GPR3 = SOURCE LENGTH FOR MVCL 00062000
- * GPR4 = TARGET ADDRESS FOR MVCL 00063000
- * GPR5 = TARGET LENGTH FOR MVCL 00064000
- * GPR6 = CURRENT END OF IMAGE LIBRARY IN STORAGE 00065000
- * GPR7 = POINTER TO NEXT AVAILABLE DIRECTORY ENTRY 00066000
- * GPR8 = RUNNING COUNTER FOR NUMBER OF DRCTRY ENTRIES 00067000
- * GPR9 = STARTING ADDRESS OF THE IMAGELIB IN STORAGE 00068000
- * GPR10 = UNUSED 00069000
- * GPR11 = UNUSED 00070000
- * GPR12 = DMKNMT MODULE BASE 00071000
- * GPR13 = UNUSED 00072000
- * GPR14 = BALR RETURN ADDRESS AND SCRATCH REGISTER 00073000
- * GPR15 = BALR BRANCH ADDRESS AND SCRATCH REGISTER 00074000
- * 00075000
- * NOTES - 00076000
- * 00077000
- * A MAXIMUM OF 3 PAGES OF DIRECTORY IS ALLOWED 00078000
- * THE STARTING POINT FOR THE DATA AREA WOULD HAVE TO BE 00079000
- * CHANGED TO INCREASE THIS MAXIMUM. 00080000
- * 00081000
- * THE MAXIMUM SIZE OF A IMAGELIB MEMBER IS 8192 BYTES. THIS 00082000
- * REPRESENTS A RESTRICTION ONLY IN THE CASE OF A COPY 00083000
- * MODIFICATION WHERE IT IS 8 BYTES LESS THAN THE 00084000
- * HARDWARE MAXIMUM. 00085000
- * 00086000
- * OPERATION - 00087000
- * 00088000
- * 1. VERIFY THE EXISTENCE OF THE CNTRL FILE. IF IT DOES 00089000
- * NOT EXIST, EXIT WITH RC=4 AND NO MESSAGE. 00090000
- * OTHERWISE, CONTINUE. 00091000
- * CREATE A DUMMY DIRECTORY ENTRY WHICH WILL BE USED 00092000
- * TO HOLD THE NUMBER OF ENTRIES AND SET THE START 00093000
- * OF DATA TO BE 3 PAGES PAST THE START OF THE DIRECTORY. 00094000
- * THIS ALLOW FOR A MAXIMUM OF 3 PAGES OF DIRECTORY. 00095000
- * 00096000
- * 2. READ THE NEXT LINE IN THE CNTRL FILE. IF END OF FILE, 00097000
- * GO TO STEP 6. OTHERWISE CONTINUE. 00098000
- * 00099000
- * 3. IF THE TEXT FILE DOES NOT EXIST, EXIT WITH DMKNMT248E. 00100000
- * 00101000
- * 4. LOAD THE INDICATED TEXT FILE INTO THE TRANSIENT AREA. 00102000
- * IF ERROR, EXIT WITH ERROR MESSAGE DMKNMT249E. 00103000
- * 00104000
- * 5. ALLOWING 3 PAGES FOR THE DIRECTORY AREA, CREATE A 00105000
- * NEW DIRECTORY ENTRY AFTER THE LAST, AND MOVE THE 00106000
- * FILE FROM THE TRANSIENT AREA INTO THE NEXT AVAILABLE 00107000
- * LOCATION IN THE USER AREA. IF IT EXCEEDS AVAILABLE 00108000
- * STORAGE, EXIT WITH DMKNMT256E. OTHERWISE, UPDATE 00109000
- * THE POINTERS TO THE NEXT AVAILABLE DIRECTORY ENTRY 00110000
- * AND NEXT AVAILABLE DATA AREA. THEN GO TO STEP 2. 00111000
- * 00112000
- * 6. ENTER THE TOTAL NUMBER OF MEMBERS INTO THE FIRST 00113000
- * DUMMY ENTRY, MOVE THE DATA AREA SO THAT IT 00114000
- * IMMEDIATELY FOLLOWS THE DIRECTORY, AND ALTER THE 00115000
- * DISPLACEMENTS IN EACH DIRECTORY ENTRY. 00116000
- * 00117000
- * 7. ISSUE DIAGNOSE X'74' TO SAVE THE NAMED SYSTEM. 00118000
- * IF THE RETURN CODE IS 0, ISSUE DMKNMT247I. 00119000
- * OTHERWISE, ISSUE DMKNMT254E. 00120000
- * 00121000
- * 8. RETURN TO CALLER WITH APPROPRIATE RETURN CODE. 00122000
- * 00123000
- * RESPONSE - 00124000
- * 00125000
- * NONE 00126000
- * 00127000
- * ERROR MESSAGES - 00128000
- * 00129000
- * DMKNMT247I 3800 NAMED SYSTEM (NAME) CREATED 00130000
- * DMKNMT248E SPECIFIED IMAGE (NAME) NON-EXISTENT 00131000
- * DMKNMT249E ERROR LOADING IMAGE (NAME) 00132000
- * DMKNMT256E INSUFFICIENT VIRTUAL STORAGE 00133000
- * DMKNMT254E ERROR SAVING (IMAGELIB) - RC = (RC) 00134000
- * 00135000
- *. 00136000
- EJECT 00137000
- DMKNMT CSECT LOADER CONTROL ONLY @V60B9BA 00138000
- ENTRY DMKNMTBL @V60B9BA 00139000
- USING NUCON,R0 @V60B9BA 00140000
- SPACE 3 00141000
- DMKNMTBL DS 0H @V60B9BA 00142000
- IMAGELIB EQU * NAME OF THE MODULE @V60B9BA 00143000
- LR R12,R15 SET UP OUR BASE REGISTER @V60B9BA 00144000
- USING DMKNMTBL,R12 ADDRESSIBILITY @V60B9BA 00145000
- ST R14,SAVE14 SAVE OUR RETURN REGISTER @V60B9BA 00146000
- CLI 8(R1),X'FF' ANY PARAMETERS PASSED? @V60B9BA 00147000
- BE ERR004 ERROR IF NOT @V60B9BA 00148000
- MVC CNTRLFN,8(R1) MOVE IN THE IMAGELIB NAME @V60B9BA 00149000
- MVC CNTRLFM(2),=C'* ' SEARCH ALL DISKS @V60B9BA 00150000
- LA R2,CNTRLFN SET UP CNTRL FILE @V60B9BA 00151000
- FSSTATE (R2),ERROR=ERR004 DOES IT EXIST? @V60B9BA 00152000
- * ERROR IF NOT @V60B9BA 00153000
- MVC CNTRLFM(2),FSTFMODE-FSTFNAME(R1) GET THE MODE @V60B9BA 00154000
- GETMAIN R,LV=8 GET STORAGE FOR AN ADDRESS @V60B9BA 00155000
- LR R7,R1 HOLD THE START OF GETMAIN @V60B9BA 00156000
- FREEMAIN R,LV=8,A=(1) GIVE IT BACK @V60B9BA 00157000
- LA R7,4095(R7) GO TO NEXT PAGE @V60B9BA 00158000
- N R7,=X'00FFF000' ROUND TO PAGE BDY @V60B9BA 00159000
- LR R9,R7 KEEP START IN R9 TROUGHOUT @V60B9BA 00160000
- L R6,THREEPGS WHERE WE START MEMBERS @V60B9BA 00161000
- ALR R6,R7 ... @V60B9BA 00162000
- SPACE 2 00163000
- USING PDEBLOK,R7 ADDRESSIBILITY @V60B9BA 00164000
- MVC PDEIMAG,CNTRLFN IMAGELIB NAME @V60B9BA 00165000
- MVC PDEDIRLN,THREEPGS TEMPORARY DRCTRY LENGTH @V60B9BA 00166000
- SR R8,R8 NUMBER OF DIRECTORY ENTRIES @V60B9BA 00167000
- LA R7,PDESIZE(R7) POINT TO FIRST REAL ENTRY @V60B9BA 00168000
- SPACE 00169000
- * LOOP THROUGH EACH RECORD IN THE CONTROL FILE 00170000
- SPACE 00171000
- RDLOOP LA R2,CNTRLFN POINT TO FILE NAME @V60B9BA 00172000
- FSREAD (R2),ERROR=RDERR,BUFFER=MEMNAME,BSIZE=8 @V60B9BA 00173000
- AFTERRD MVC TXTNAME,MEMNAME SAVE THE NAME HERE ALSO @V60B9BA 00174000
- LA R2,TXTNAME FILE FOR STATE @V60B9BA 00175000
- FSSTATE (R2),ERROR=NOTEXT SEE IF IT EXISTS @V60B9BA 00176000
- LA R1,LDPLIST SET UP TO LOAD INTO THE @V60B9BA 00177000
- SVC 202 ... TRANSIENT AREA @V60B9BA 00178000
- DC AL4(LDERR) ERROR ADDRESS @V60B9BA 00179000
- USING MHDBLOK,R2 MEMBER HEADER @V60B9BA 00180000
- L R2,TRANS START OF TRANSIENT AREA @V60B9BA 00181000
- * SOURCE ADDRESS FOR MVCL @V60B9BA 00182000
- LH R3,MHDLEN LENGTH OF DATA AREA @V60B9BA 00183000
- LA R3,MHDSIZE(R3) PLUS HEADER SIZE @V60B9BA 00184000
- * SOURCE LENGTH FOR MVCL @V60B9BA 00185000
- LA R3,7(R3) ROUND TO NEXT DOUBLEWORD @V60B9BA 00186000
- N R3,=X'FFFFFFF8' ... @V60B9BA 00187000
- DROP R2 NO LONGER NEEDED @V60B9BA 00188000
- LR R4,R6 TARGET ADDRESS FOR MVCL @V60B9BA 00189000
- LR R5,R3 TARGET LENGTH FOR MVCL @V60B9BA 00190000
- LR R1,R6 GET STARTING ADDRESS @V60B9BA 00191000
- SLR R1,R9 GET DISPLACEMENT FROM START @V60B9BA 00192000
- ST R1,PDEDISP SAVE IT IN DRCTRY ENTRY @V60B9BA 00193000
- ST R5,PDELGTH LENGTH OF MEMBER @V60B9BA 00194000
- MVC PDENAME,MEMNAME NAME OF MEMBER @V60B9BA 00195000
- ALR R6,R5 WHERE IT WILL END IN STORAGE@V60B9BA 00196000
- C R6,FREELOWE WILL WE GO TOO FAR? @V60B9BA 00197000
- BH RANOUT XFER IF SO @V60B9BA 00198000
- MVCL R4,R2 MOVE THE DATA IN @V60B9BA 00199000
- LA R8,1(R8) ONE MORE MEMBER IN IMAGELIB @V60B9BA 00200000
- LA R7,PDESIZE(R7) NEXT AVAILABLE ENTRY @V60B9BA 00201000
- B RDLOOP READ NEXT LINE IN CNTRL FILE@V60B9BA 00202000
- SPACE 2 00203000
- RDERR C R15,=F'12' END OF FILE ? @V60B9BA 00204000
- BE RDEOF XFER IF SO @V60B9BA 00205000
- C R15,=F'8' INCORRECT LENGTH? @V60B9BA 00206000
- BE AFTERRD XFER BACK IF SO @V60B9BA 00207000
- B BADCNTRL BAD CONTROL FILE OTHERWISE @V60B9BA 00208000
- RDEOF LA R2,CNTRLFN FILE NAME FOR CLOSE @V60B9BA 00209000
- FSCLOSE (R2) @V60B9BA 00210000
- ST R8,PDENUM-PDEBLOK(R9) NUMBER OF MEMBERS @V60B9BA 00211000
- L R3,THREEPGS CALCULATE WHERE DIRECTORY @V60B9BA 00212000
- AR R3,R9 ... ENDS TO TEST FOR @V60B9BA 00213000
- SR R3,R7 ... OVERLAP @V60B9BA 00214000
- BM RANOUT NO GOOD, DIRECTORY TOO BIG @V60B9BA 00215000
- LR R4,R7 TARGET ADDRESS FOR COMPRESS @V60B9BA 00216000
- LR R0,R7 FIND DIRECTORY LENGTH @V60B9BA 00217000
- SLR R0,R9 ... @V60B9BA 00218000
- ST R0,PDEDIRLN-PDEBLOK(R9) SAVE IT @V60B9BA 00219000
- LR R2,R9 GET SOURCE ADDRESS FOR MVCL @V60B9BA 00220000
- AL R2,THREEPGS ... @V60B9BA 00221000
- LR R3,R6 END OF IMAGE LIBRARY @V60B9BA 00222000
- SLR R3,R2 SOURCE LENGTH FOR MVCL @V60B9BA 00223000
- LR R5,R3 TARGET LENGTH @V60B9BA 00224000
- MVCL R4,R2 DO THE MOVE @V60B9BA 00225000
- SPACE 00226000
- * ADJUST DISPLACEMENTS IN DIRECTORY ENTRIES 00227000
- SPACE 00228000
- LA R2,PDESIZE(R9) FIRST REAL ENTRY @V60B9BA 00229000
- LA R4,PDESIZE INCREMENT @V60B9BA 00230000
- L R5,PDEDIRLN-PDEBLOK(R9) GET COMPARAND @V60B9BA 00231000
- ALR R5,R9 ..... @V60B9BA 00232000
- BCTR R5,0 ... @V60B9BA 00233000
- LR R0,R9 CALCULATE THE AMOUNT @V60B9BA 00234000
- AL R0,THREEPGS ... BY WHICH THE DISPS @V60B9BA 00235000
- SLR R0,R7 ... MUST BE ALTERED @V60B9BA 00236000
- DSPLOOP L R1,PDEDISP-PDEBLOK(R2) OLD DISPLACEMENT @V60B9BA 00237000
- SLR R1,R0 ALTER IT @V60B9BA 00238000
- ST R1,PDEDISP-PDEBLOK(R2) SAVE NEW DISPLACEMENT @V60B9BA 00239000
- BXLE R2,R4,DSPLOOP TRY NEXT ONE @V60B9BA 00240000
- SLR R6,R0 NEW END OF THE IMAGE LIBRARY@V60B9BA 00241000
- SPACE 00242000
- * SAVE THE IMAGE LIBRARY 00243000
- SPACE 00244000
- LM R0,R1,CNTRLFN NAME OF THE IMAGELIB @V60B9BA 00245000
- LR R2,R9 START OF THE IMAGELIB @V60B9BA 00246000
- LR R3,R6 END OF THE IMAGELIB @V60B9BA 00247000
- SLR R3,R9 NUMBER OF BYTES TO SAVE @V60B9BA 00248000
- ICM R3,B'1000',=X'04' THE SAVE OPERATION @V60B9BA 00249000
- DIAG R0,R2,X'0074' ISSUE DIAGNOSE 74 @V60B9BA 00250000
- LTR R2,R2 ANY ERRORS? @V60B9BA 00251000
- BNZ DIAGERR XFER IF SO @V60B9BA 00252000
- SPACE 00253000
- LINEDIT TEXT='DMKNMT247I 3800 NAMED SYSTEM ........ CREATED', *00254000
- SUB=(CHARA,CNTRLFN),DISP=ERRMSG @V60B9BA 00255000
- SR R15,R15 ZERO ERROR RETURN CODE @V60B9BA 00256000
- RETURN L R14,SAVE14 GET RETURN ADDRESS @V60B9BA 00257000
- BR R14 RETURN TO CALLER @V60B9BA 00258000
- SPACE 00259000
- DIAGERR LINEDIT TEXT='DMKNMT254E ERROR SAVING ........ - RC = ....', *00260000
- SUB=(CHARA,CNTRLFN,DEC,(2)),DISP=ERRMSG,RENT=NO @VMI0083 00261000
- C R2,=F'20' IMAGELIB TOO BIG? @VMI0083 00262000
- BNE DIAGERR2 XFER IF NOT @VMI0083 00263000
- LINEDIT TEXT='DMKNMT257E RESIDUAL BYTE COUNT = ........ (HEX)'*00264000
- ,SUB=(HEX,(3)),DISP=ERRMSG @VMI0083 00265000
- DIAGERR2 LA R15,20 RETURN CODE = 20 @VMI0083 00266000
- B RETURN RETURN TO CALLER @V60B9BA 00267000
- SPACE 00268000
- RANOUT LINEDIT TEXT='DMKNMT256E INSUFFICIENT VIRTUAL STORAGE', *00269000
- DISP=ERRMSG @V60B9BA 00270000
- LA R15,16 RETURN CODE = 16 @V60B9BA 00271000
- B RETURN RETURN TO CALLER @V60B9BA 00272000
- SPACE 00273000
- LDERR LINEDIT TEXT='DMKNMT249E ERROR LOADING IMAGE ........', *00274000
- SUB=(CHARA,MEMNAME),DISP=ERRMSG @V60B9BA 00275000
- LA R15,12 RETURN CODE = 12 @V60B9BA 00276000
- B RETURN RETURN TO CALLER @V60B9BA 00277000
- SPACE 00278000
- NOTEXT LINEDIT TEXT='DMKNMT248E SPECIFIED IMAGE ........ NON-EXISTENT*00279000
- ',SUB=(CHARA,TXTNAME),DISP=ERRMSG @V60B9BA 00280000
- LA R15,8 RETURN CODE = 8 @V60B9BA 00281000
- B RETURN RETURN TO CALLER @V60B9BA 00282000
- SPACE 00283000
- BADCNTRL EQU * @V60B9BA 00284000
- ERR004 LA R15,4 RETURN CODE = 4 @V60B9BA 00285000
- B RETURN RETURN TO CALLER @V60B9BA 00286000
- EJECT 00287000
- * LOCAL DATA AREAS 00288000
- SPACE 00289000
- DS 0D @V60B9BA 00290000
- CNTRLFN DC CL8' ' CNTRL FILE FILENAME @V60B9BA 00291000
- CNTRLFT DC CL8'CNTRL' CNTRL FILE FILETYPE @V60B9BA 00292000
- CNTRLFM DC CL8'*' CNTRL FILE FILETYPE @V60B9BA 00293000
- SPACE 00294000
- THREEPGS DC A(X'3000') MAXIMUM DIRECTORY SIZE @V60B9BA 00295000
- SPACE 00296000
- DS 0D @V60B9BA 00297000
- LDPLIST DC CL8'LOAD' FOR LOADING THE REQUIRED @V60B9BA 00298000
- MEMNAME DC CL8' ' .. MEMBER NAME INTO THE @V60B9BA 00299000
- DC CL8'(' .. CMS TRANSIENT AREA @V60B9BA 00300000
- DC CL8'ORIGIN' ... @V60B9BA 00301000
- DC CL8'TRANS' ... @V60B9BA 00302000
- DC 8X'FF' FENCE @V60B9BA 00303000
- SPACE 00304000
- TXTNAME DC CL8' ' NAME OF MEMBER @V60B9BA 00305000
- DC CL8'TEXT' FOR STATE ON TEXT FILE @V60B9BA 00306000
- DC CL8'*' .. @V60B9BA 00307000
- SPACE 00308000
- TRANS DC A(X'E000') START OF CMS TRANSIENT AREA @V60B9BA 00309000
- SAVE14 DS 1F RETURN REGISTER SAVE AREA @V60B9BA 00310000
- EJECT 00311000
- PDEBLOK DSECT , @V60B9BA 00312000
- PDENAME DS CL8 MEMBER NAME @V60B9BA 00313000
- PDEDISP DS 1F RBA OF START OF MEMBER @V60B9BA 00314000
- PDELGTH DS 1F LENGTH OF MEMBER IN BYTES @V60B9BA 00315000
- ORG PDENAME FIRST DUMMY ENTRY @V60B9BA 00316000
- PDEIMAG DS CL8 NAME SYSTEM NAME @V60B9BA 00317000
- PDEDIRLN DS 1F LENGTH OF DIRECTORY IN BYTES@V60B9BA 00318000
- PDENUM DS 1F NUMBER OF MEMBERS @V60B9BA 00319000
- PDESIZE EQU *-PDEBLOK SIZE OF ENTRY IN BYTES @V60B9BA 00320000
- SPACE 3 00321000
- MHDBLOK DSECT , HEADER OF ALL MEMBERS @V60B9BA 00322000
- MHDNAME DS CL4 LAST PART OF MEMBER NAME @V60B9BA 00323000
- DS 1H RESERVED @V60B9BA 00324000
- MHDLEN DS 1H LENGTH OF DATA PART OF MEMBE@V60B9BA 00325000
- MHDSIZE EQU *-MHDBLOK SIZE OF HEADER IN BYTES @V60B9BA 00326000
- EJECT 00327000
- FSTD 00328000
- COPY EQU @V60B9BA 00329000
- COPY DEVTYPES @V60B9BA 00330000
- NUCON , @V60B9BA 00331000
- END 00332000
ibm/vm370-lib/cp/dmknmt.assemble_src.txt ยท Last modified: 2023/08/06 13:37 by Site Administrator