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 -------