An update on the previous post

My intent is to create new console display commands. As MVS3.8J predates the ability to define new commands in the mpflist (actually it predates the mpflist the only option is to modify the appropriate source files for the operating system.

Found the source that needs to be modified

Making progress in reading through the MVS3.8J source files; so far I am fairly sure

  • The console commands are all routed through IEE0403D (in MVSSRC.SYM101.F12) which then calls the appropriate module
  • The module that manages the display commands is IEE3503D (in MVSSRC.SYM101.F13), somewhere to start from
  • The sysgen macro SGIEF441 is apparently used to assemble those and all the many interwined dependant modules into lpalib

Complications identified

  • I do not particularly want to do a new sysgen (well I do, but thats to gen new devices for another issue) so knowning the relevant sysgen macro is SGIEF441 is just commented here for others who may want to look at doing this properly
  • IEE3503D is an alias to IGC0003D, and apparently linked into that program rather than being a standalone module (have not found where the source for IGC0003D lives yet), the SYS1.LPALIB entry for IEE3503D is an alias to IGC0003D
  • also IEE0003D (the SVC34 handler) (which is not in sys1.lpalib,sys1.svclib or sys1.linklib) … is apparently also an alias to IGC0003D also (from somewhere, only comments in various source modules indicate that however), so IGC0003D is a bad thing to break
  • all these interconnecting modules branch to each other with the “R R15,V(module)” then “BR R15” method, so they are either all linked in together or absolutely must be in memory (need to read another manual, or play and find out)
  • did I mention all these are sysgen’ed, and all (apart from IEE0003D I cannot find in a load library) live in the primary LPA area

This has the potential to be as messy as when I was fiddling about replacing SVC modules; but I learnt a little from that :-). Whether it can be applied here I guess I will find out.

Current implementation plan

The easiest way forward I can see is for me (as I don’t want to do a new sysgen just for this, and I want to back out easily when (when not if) I break it is to

  1. find a way to identify all the modules linked into IGC0003D
  2. customise IEE3503D source code to link to my custom command handler before it branches to the program that spits out the “invalid command” console message (returning safely back if it is not one I handle to continue to the invalid command), store in a custom load library
  3. relink IGC0003D with all the modules I found linked into it (todo) but replacing the IEE3503D procedure in IGC0003D with mine and store the new IGC0003D in a custom load library
  4. adjust my MLPA list member (well create a new one) to include the new module and IPL with the CLPA and MLPA options to bring it in
  5. undoubtably followed by an IPL with CLPA and my old mlpa member to get back to a working system :-) and months of debugging

Or, depending on whether I find BR R15,V(progname) requires the progname to be in the same linked module or just in memory I might try removing the alias to IGC0003D and MLPA’ing in my copy. I expect that to break things but is certainly the fastest way to break things :-).

However, where did I put my doco on using MLPA… I think in mvs3.8J modules MLPA’ed in must also live in sys1.lpalib or sys1.svclib anyway so I may have to replace the existing program (after backing up the system of course).

Current possible diversions

My current method of searching for source using existing utilities is one large job file that kicks off three jobs (due to mvs3.8j limit of 254 jobsteps I need three jobs) to perform a ‘pdsscan’ to locate members containing text strings I am looking for; one file scanned per job step and lots of output to wade through from a text prrinter file (impossible to view the output via Q due to so many jobsteps).

I need a program that takes a datatset prefix (ie: mvssrc or sys1), searches the catalogs to find all the datasets, reads the vtoc entry for the datasets to see if they are either dsorg=po+recfm=fb/f or dsorg=ps+recfm=fb/f (ie: ignore load libraries and vsam files etc), search for matching text in the files (different method depending on po or ps dataset of course), and therefore creates one output report to look at containing only datasets and members that matched. One report is easier to look through that 200+ saying no match found.

I find myself needing this program more and more often as I start trying to find out what connects where in all the OS source files. You can expect to find one in my website download section in a few weeks.

Current activites

It is a lovely sunny day outside. But as Teodora would not be the slightest bit interested in going on a picnic with me no matter how nice the weather I will stick to staying inside and coding; at least assemblers still talk to me.

  • cloned a copy of my test mvs3.8j system to break
  • extracted IEE3503D, want to see how many unresolved external modules a linkedit will throw out as a starting point
  • started work on the file scanning programi; I thing I’m going to need it
  • and trying to work out what live rodent the damn cat has just let lose in the house this time, scream

About mark

At work, been working on Tandems for around 30yrs (programming + sysadmin), plus AIX and Solaris sysadmin also thrown in during the last 20yrs; also about 5yrs on MVS (mainly operations and automation but also smp/e work). At home I have been using linux for decades. Programming background is commercially in TAL/COBOL/SCOBOL/C(Tandem); 370 assembler(MVS); C, perl and shell scripting in *nix; and Microsoft Macro Assembler(windows).
This entry was posted in MVS3.8J. Bookmark the permalink.