/* REXX | | Name: VSMAP | | Author: David Alcock | | Purpose: Show the Virtual Storage Map of a OS/390 (MVS) | | Written: 21 November 1997 | | Update: 30 August 1999 - Howard Sherman | Added "Length" field | Removed "Private Region Below The Line" comment | | Tested: OS/390 v1.2 (should work MVS/XA and higher) | */ NUMERIC DIGITS 10 call get_vsmap /* Call inline routine and obtain V/S map */ if vsmap.0 == 0 then do say "%VSMAP is OS/390 (MVS) dependent and can't run on "address() exit end if address() == "TSO" then , /* "clrscrn" Installation dependant - Clear the screen */ call get_smfid /* Call inline routine to obtain the SMFID */ say "Virtual Storage Map - SMFID="smfid say " " say left("Start",8) left("End",8) left("Name",15) left("Length",9) say left("-",8,"-") left("-",8,"-") left("-",15,"-") left("-",9,"-") do i = vsmap.0 to 1 by -1 if word(vsmap.i,2) <> 0 then , say word(vsmap.i,1) word(vsmap.i,2) , left(word(vsmap.i,3),15), get_length(vsmap.i) if i = 12 then say "--------- 16 Meg line -----------" end /*gdapvtsz = c2d(storage(d2x(cvtgda + o_GDAPVTSZ),4)) */ /*gdapvtsz = gdapvtsz/1024 */ /*say " " */ /*say "The Private region below the line:" gdapvtsz"K" */ exit /*--------------------------------------------------------------------- | Routine: Get SMFID | Author: David Alcock dalcock@csw.com davea@ticnet.com | Returns: smfid in variable smfid ------------------------------------------------------------------- */ Get_SMFID: if address() == "TSO" then , if sysvar(systsoe) > "2040" then do /* At v2.5 or higher? */ smfid = mvsvar(syssmfid) /* Yes, use IBM func */ return end cvt = storage(10,4) dcvt = c2d(cvt) smca = storage(c2x(d2c(dcvt+x2d(c5))),3) dsmca = c2d(smca) smfid = storage(c2x(d2c(dsmca+x2d(10))),4) return /*--------------------------------------------------------------------- | Routine: Get Virtual Storage Map | Author: David Alcock @20-Nov-1997 dalcock@csw.com davea@ticnet.com | Returns: vsmap. array with VSM storage areas ------------------------------------------------------------------- */ get_vsmap: select when address() == "TSO" then nop when address() == "MVS" then nop otherwise vsmap.0 = 0 return end vsmap.0 = 19 /* number of VSM areas */ /* | Set offsets in control blocks (taken from DA$ADATA output) */ o_CVTGDA = 560 ; o_CVTSMEXT = 1196 o_CVTMLPAS = 8 ; o_CVTMLPAE = 12 o_CVTEMLPE = 76 ; o_CVTEMLPS = 72 o_CVTEFLPE = 68 ; o_CVTEFLPS = 64 o_CVTEPLPE = 60 ; o_CVTEPLPS = 56 o_CVTERWNE = 52 ; o_CVTERWNS = 48 o_CVTRWNE = 36 ; o_CVTRWNS = 32 o_CVTRONE = 44 ; o_CVTRONS = 40 o_CVTPLPAE = 28 ; o_CVTPLPAS = 24 o_CVTFLPAE = 20 ; o_CVTFLPAS = 16 o_CVTREAL = 284 o_GDAEPVT = 168 ; o_GDAEPVTS = 172 o_GDAECSA = 124 ; o_GDAECSAS = 128 o_GDACSA = 108 ; o_GDACSASZ = 112 o_GDAESQA = 152 ; o_GDAESQAS = 156 o_GDASQA = 144 ; o_GDASQASZ = 148 o_GDAVR = 192 ; o_GDAPVTSZ = 164 /* | Locate global areas */ cvt = c2d(storage(10,4)) /* -> CVT */ cvtgda = c2d(storage(D2X(cvt + o_CVTGDA),4)) /* -> GDA */ cvtsmext = c2d(storage(D2X(cvt + o_CVTSMEXT),4)) /* -> CVTSMEXT */ /* | Area number 19 - Ext-Private */ gdaepvt = c2d(storage(D2X(cvtgda + o_GDAEPVT),4)) vsmap.19 = right(D2X(gdaepvt),8,'0') "7FFFFFFF" , 'Ext-Private' /* | Area number 18 - Ext-CSA */ gdaecsa = c2d(storage(D2X(cvtgda + o_GDAECSA),4)) end = (gdaecsa + c2d(storage(D2X(cvtgda + o_GDAECSAS),4))) - 1 vsmap.18 = right(D2X(gdaeCSA),8,'0') right(d2x(end),8,'0') , 'Ext-CSA' /* | Area number 17 - Ext-MLPA */ cvtemlps = c2d(storage(D2X(cvtsmext + o_CVTEMLPS),4)) cvtemlpe = c2d(storage(d2x(cvtsmext + o_CVTEMLPE),4)) vsmap.17 = right(d2x(cvtemlps),8,'0') right(d2x(cvtemlpe),8,'0') , 'Ext-MLPA' /* | Area number 16 - Ext-FLPA */ cvteflps = c2d(storage(D2X(cvtsmext + o_CVTEFLPS),4)) cvteflpe = c2d(storage(d2x(cvtsmext + o_CVTEFLPE),4)) vsmap.16 = right(d2x(cvteflps),8,'0') right(d2x(cvteflpe),8,'0') , 'Ext-FLPA' /* | Area number 15 - Ext-PLPA */ cvteplps = c2d(storage(D2X(cvtsmext + o_CVTEPLPS),4)) cvteplpe = c2d(storage(d2x(cvtsmext + o_CVTEPLPE),4)) vsmap.15 = right(d2x(cvteplps),8,'0') right(d2x(cvteplpe),8,'0') , 'Ext-PLPA' /* | Area number 14 - Ext-SQA */ gdaesqa = c2d(storage(D2X(cvtgda + o_GDAESQA),4)) end = (gdaesqa + c2d(storage(D2X(cvtgda + o_GDAESQAS),4))) - 1 vsmap.14 = right(D2X(gdaesqa),8,'0') right(d2x(end),8,'0') , 'Ext-SQA' /* | Area number 13 - Ext-R/W Nucleus */ cvterwns = c2d(storage(D2X(cvtsmext + o_CVTERWNS),4)) cvterwne = c2d(storage(d2x(cvtsmext + o_CVTERWNE),4)) vsmap.13 = right(d2x(cvterwns),8,'0') right(d2x(cvterwne),8,'0') , 'Ext-R/W_Nucleus' /* | Area number 12 - Ext-R/O Nucleus */ end = cvterwns - 1 vsmap.12 = "01000000" right(d2x(end),8,'0') , 'Ext-R/O_Nucleus' /* | Area number 11 - R/O Nucleus */ cvtrons = c2d(storage(D2X(cvtsmext + o_CVTRONS),4)) cvtrone = c2d(storage(d2x(cvtsmext + o_CVTRONE),4)) vsmap.11 = right(d2x(cvtrons),8,'0') "00FFFFFF" , 'R/O-Nucleus' /* | Area number 10 - R/W Nucleus */ cvtrwns = c2d(storage(D2X(cvtsmext + o_CVTRWNS),4)) cvtrwne = c2d(storage(d2x(cvtsmext + o_CVTRWNE),4)) vsmap.10 = right(d2x(cvtrwns),8,'0') right(d2x(cvtrwne),8,'0') , 'R/W-Nucleus' /* | Area number 9 - SQA */ gdasqa = c2d(storage(D2X(cvtgda + o_GDASQA),4)) end = (gdasqa + c2d(storage(D2X(cvtgda + o_GDASQASZ),4))) - 1 vsmap.9 = right(D2X(gdasqa),8,'0') right(d2x(end),8,'0') , 'SQA' /* | Area number 8 - PLPA */ cvtplpas = c2d(storage(D2X(cvtsmext + o_CVTPLPAS),4)) cvtplpae = c2d(storage(D2X(cvtsmext + o_CVTPLPAE),4)) vsmap.8 = right(D2X(cvtplpas),8,'0') right(d2x(cvtplpae),8,'0') , 'PLPA' /* | Area number 7 - FLPA */ cvtflpas = c2d(storage(D2X(cvtsmext + o_CVTFLPAS),4)) cvtflpae = c2d(storage(D2X(cvtsmext + o_CVTFLPAE),4)) vsmap.7 = right(D2X(cvtflpas),8,'0') right(d2x(cvtflpae),8,'0') , 'FLPA' /* | Area number 6 - MLPA */ cvtmlpas = c2d(storage(D2X(cvtsmext + o_CVTMLPAS),4)) cvtmlpae = c2d(storage(D2X(cvtsmext + o_CVTMLPAE),4)) vsmap.6 = right(D2X(cvtmlpas),8,'0') right(d2x(cvtmlpae),8,'0') , 'MLPA' /* | Area number 5 - CSA */ gdacsa = c2d(storage(D2X(cvtgda + o_GDACSA),4)) end = (gdacsa + c2d(storage(D2X(cvtgda + o_GDACSASZ),4))) - 1 vsmap.5 = right(D2X(gdacsa),8,'0') right(d2x(end),8,'0') , 'CSA' /* | Area number 4 - Private */ gdavr = c2d(storage(D2X(cvtgda + o_GDAVR),4)) end = (gdacsa-1) vsmap.4 = right(D2X(gdavr),8,'0') right(d2x(end),8,'0') , 'Private' /* | Area number 3 - Private V=R */ cvtreal = c2d(storage(D2X(cvt + o_CVTREAL),4)) end = cvtreal - 1 vsmap.3 = right(D2X(gdavr),8,'0') right(d2x(end),8,'0') , 'Private_(V=R)' /* | Area number 2 - System Area */ vsmap.2 = "00001000" "00004FFF" "System_Area" /* | Area number 1 - PSA */ vsmap.1 = "00000000" "00000FFF" "PSA" return get_length: ARG start end comment length = (X2D(end) - X2D(start) + 1) % 1024 return RIGHT(length"K",9) /*--------------------------------------------------------------------- | END END END END END - End of VSMAP exec - END END END END END ------------------------------------------------------------------- */