[mod.computers.vax] SMG symbols in FORSYSDEF -- a clarification

Thx-1138@SRI-KL.ARPA:WILLIAMS@EDWARDS-2060.ARPA (Williams@Edwards-2060) (08/05/86)

Salutations again!

	I've been asked to clarify the "boo-boo" I mentioned that
exists in the VMS 4.4 STARLETSD.TLB library, that causes the $SMGDEF
symbols to disappear in the FORSYSDEF.TLB library.  This message is
rather lengthy (SORRY), so you may wish to skip it if you aren't
interested in getting SMG to work from FORTRAN.  (Note that below I
describe a way to fix an already broken FORSYSDEF.TLB that is better 
than the method I described in my previous message...)

--------------------------------------------------------------------
	It took a little digging in my notes and some playing around
on the machine, but here is what happened (happens):

	STARLETSD.TLB is not a 'real' text library, but rather a
hybrid animal whose modules can be used to feed SDL, the symbol
definition monster that exists on all VMS systems.  Anyway, if you
extract the SMGDEF module out of this library and process it through
SDL, you will find that this particular module contains TWO SMGDEF
MODULE DEFINITIONS!  The first $SMGDEF definition is the one we all
know and love.  The second $SMGDEF definition defines the SMG
messages--the definition I refer to as SMGMSGDEF.

	When any 4.x Fortran KITINSTAL runs, it runs through some
automated magic that extracts a bunch of modules out of STARLETSD.TLB,
turns them into Fortran-edible files, and then strings them together
into the FORSYSDEF.TLB library.  The problem is that the second
definition of $SMGDEF overrides the first definition of $SMGDEF.
Hence, the $SMGDEF module in FORSYSDEF.TLB ends up containing the SMG
message symbols, and not all the wizziness for border painting and the
like.

	I mentioned above that I have developed a better way to
restore the true $SMGDEF symbols in FORSYSDEF.TLB, rather than the way
I previously described of simply reusing the $SMGDEF module from a
previous FORSYSDEF.TLB.  The 'use the old one' approach works as long
as no one needs to use the SMG symbols that are new to VMS 4.4 (like
SMG$K_TRM_PLUS_SIGN, SMG$K_TRM_ZERO, all the SMG$GET_KEYBOARD_ATTRIBUTES
symbols among them), but this 'improved' way is a bit involved:

1. The starting point here is Fortran v4.x installed on VMS 4.4, with
a bashed SYS$LIBRARY:FORSYSDEF.TLB.

2. Dig out your last Fortran distribution and get the parts you need:
    $! Get the saveset uploaded onto a REAL disk to play with it
    $!
    $@Sys$Update:VMSInstal FORT04x CSA1: OPTIONS G DRA1:[MYDIR]
    $!
    $! Get the pieces we need
    $!
    $Backup/Log FORT04x.A/Save/Select=(SDLFortra.Exe) DRA1:[MYDIR]

The SDLFORTRA.EXE is a file that SDL will need to convert the generic
STARLETSD.TLB format into a Fortran includable format.

3. Get the SMG stuff out of STARLETSD and push it through SDL
    $!
    $Library/Ext=SMGDEF Sys$Library:Starletsd.Tlb/Out=DRA1:[MYDIR]SMGGEN.SDL
    $Define Sdl$Share DRA1:[MYDIR]
    $Define SdlFortra DRA1:[MYDIR]Sdlfortra.Exe
    $SDL/NoParse/Lang=(Fortra=DRA1:[MYDIR]SMGGEN.FOR) DRA1:[MYDIR]SMGGEN.SDL

4. Now you must haul SMGGEN.FOR into your favorite editor and break it into
SMGDEF.FOR and SMGMSGDEF.FOR.  The 'real' $SMGDEF is the first one, the second
$SMGDEF is really $SMGMSGDEF.  (You can edit-up the comments in the SMGMSGDEF
part that call it SMGDEF, but I didn't bother.)

5. Now you can put these two modules into your FORSYSDEF.TLB, and the world
will once again be safe for humanity.
    $!
    $Library/Replace Sys$Library:FORSYSDEF.TLB SMGDEF.FOR/Module=$SMGDEF
    $Library/Replace Sys$Library:FORSYSDEF.TLB SMGMSGDEF.FOR/Module=$SMGMSGDEF

6. If your users ask you what you did, dazzle 'em...

				Hope this helps!
					-Marc
-------