[comp.os.vms] Making shareable images

SUTTON@BRANDEIS.BITNET (04/13/88)

I have managed to do exactly what I think you might be trying to do.  I
don't think that you are supposed to put the IMAGES into the library.
Below is a subroutine from a command procedure which I use to create
shareables for a graphics package I wrote. After the two files
POLYPLOT_SHR.OLB and POLYPLOT_SHR.EXE are created by this routine, a logical
name must be defined to point to the .EXE file (in this case it's
POLYPLOT_SHR, see the "NAME =" clause of the linker options file). It is
assumed that the "normal" object library, POLYPLOT.OLB, is present.

When you link your program with the shareables you say something like:
    $ LINK PROGRAM,SYS$UTIL:POLYPLOT_SHR/LIBRARY
When your program is run, it will use the .EXE file pointed to by the
logical you set (POLYPLOT_SHR in this case).  This means that the logical
either needs to be defined for each login or put someplace like the system
or group logical name table.

SUTTON@BRANDEIS.BITNET

$ POLYPLOT_SHR_BLD: SUBROUTINE
$     !********************************************************************
$     ! The process of creating POLYPLOT_SHR.OLB was done under the guidance
$     ! of the volume, Guide to Creating Modular Procedures on VAX/VMS,
$     ! and John Lavagnino.  --- Mark Sutton, October 23, 1986 ---
$     !********************************************************************
$     !
$     WRITE SYS$OUTPUT ">>>>>>>>>>>>>>>>>POLYPLOT_SHR_BLD<<<<<<<<<<<<<<<<<"
$     IF F$SEARCH("POLYPLOT.OLB",).NES."" THEN GOTO ELSE6
$         WRITE SYS$OUTPUT "POLYPLOT.OLB is not present in this directory.  It"
$         WRITE SYS$OUTPUT "must be present in order for me to make a"
$         WRITE SYS$OUTPUT "shareable image and shareable image library."
$         WRITE SYS$OUTPUT "--------------------------------------------------"
$         GOTO END_IF6
$     ELSE6:
$         WRITE SYS$OUTPUT "Compiling transfer vector..."
$         MACRO/OBJECT=POLYPLOT_VECTOR.OBJ SYS$INPUT
;
        .TITLE  POLYPLOT_VECTOR
        .IDENT  /1-001/
;
; --- Mark Sutton, October 23, 1986 ---
; This MACRO program was lifted verbatim from pages 5-9 and 5-10 of:
;       Guide to Creating Modular Procedures on VAX/VMS
;
        .MACRO  ROUTINE NAME
        .EXTRN          NAME
        .ALIGN  QUAD
        .TRANSFER       NAME
        .MASK           NAME
        JMP             NAME+2
        .ENDM
;
        .PSECT  $$$$POLYPLOT_VECTOR  PIC, USR, CON, REL, LCL, SHR, -
                            EXE, RD, NOWRT, QUAD
;
; Add new routines only to the bottom of the list!!!
;
        ROUTINE ALIN
        ROUTINE AUTHOR
        ROUTINE AXIS
        ROUTINE BASELINE
        ROUTINE CARC
        ROUTINE CIRCLE
        ROUTINE CIRC_VECLIP
        ROUTINE CLEAR
        ROUTINE CLRMAP
        ROUTINE COLLAPSE
        ROUTINE COMPACT
        ROUTINE CONVEX
        ROUTINE COPIES
        ROUTINE COVER_CIRC_VECLIP
        ROUTINE COVER_VECLIP
        ROUTINE CURSOR
        ROUTINE CURVE
        ROUTINE CWINDOW
        ROUTINE C_COVER
        ROUTINE DASHLN
        ROUTINE DEFCLR
        ROUTINE DEFPAT
        ROUTINE DEFPEN
        ROUTINE DEVICE
        ROUTINE DEVTYPE
        ROUTINE DRIVER
        ROUTINE DRIVER1
        ROUTINE DRIVER2
        ROUTINE DRIVER3
        ROUTINE DRIVER4
        ROUTINE DRIVER5
        ROUTINE DRIVER6
        ROUTINE DRIVER7
        ROUTINE DRIVER8
        ROUTINE DRWPEN
        ROUTINE ELLIPS
        ROUTINE EXPAND_SPEC
        ROUTINE FACTOR
        ROUTINE GET_AP
        ROUTINE GRID
        ROUTINE INSERT
        ROUTINE IRAM
        ROUTINE LINE
        ROUTINE LNMASK
        ROUTINE MULTI_VEC
        ROUTINE NEWPEN
        ROUTINE NORMAL
        ROUTINE NUMBER
        ROUTINE NXTVU
        ROUTINE OFFSET
        ROUTINE OUTP
        ROUTINE PAPER
        ROUTINE PENCLR
        ROUTINE PLOT
        ROUTINE PLOTS
        ROUTINE PLT3D
        ROUTINE RECT
        ROUTINE RESETPEN
        ROUTINE ROTATE
        ROUTINE R_COVER
        ROUTINE SCALE
        ROUTINE SETFNT
        ROUTINE SETFONT
        ROUTINE SETLENGTH
        ROUTINE SETMSG
        ROUTINE SETPAT
        ROUTINE SHIFT
        ROUTINE SING_VEC
        ROUTINE SYMBCLR
        ROUTINE SYMBOL
        ROUTINE TONCLR
        ROUTINE TONE
        ROUTINE TONFLG
        ROUTINE TRANS_PT
        ROUTINE UP2CAS
        ROUTINE UPDATE
        ROUTINE VECLIP
        ROUTINE VPINIT
        ROUTINE VPOPT
        ROUTINE VPORT
        ROUTINE VTEC
        ROUTINE WHERE
        ROUTINE WINDOW
        ROUTINE XSYMBL
;
        .END
;
$
$         WRITE SYS$OUTPUT "LINKing shareable image..."
$         LINK/SHAREABLE=POLYPLOT_SHR.EXE SYS$INPUT/OPTIONS
!
NAME = POLYPLOT_SHR
IDENTIFICATION = "Version 1.0"
!
! Increase the second number by one for each new routine added
GSMATCH = LEQUAL,1,1
!
PSECT_ATTR = $PDATA,PIC,EXE
PSECT_ATTR = $MACRO,PIC,EXE
PSECT_ATTR = $TOKEN,PIC,EXE
!
! If new routines add any more common blocks, give them PSECT_ATTR's of LCL
! and NOSHR
PSECT_ATTR = MSPLOT,LCL,NOSHR
PSECT_ATTR = DEVICE,LCL,NOSHR
PSECT_ATTR = FONTS,LCL,NOSHR
PSECT_ATTR = NXTV1,LCL,NOSHR
PSECT_ATTR = PLT3B,LCL,NOSHR
PSECT_ATTR = STUFF,LCL,NOSHR
!
! New common block names should be added to CLUSTER3
COLLECT = CLUSTER1,$$$$POLYPLOT_VECTOR,$CODE,$PDATA
COLLECT = CLUSTER2,$LOCAL,$BLANK
COLLECT = CLUSTER3,MSPLOT,DEVICE,FONTS,NXTV1,PLT3B,STUFF,XSYMBL
!
POLYPLOT_VECTOR.OBJ
POLYPLOT.OLB/LIBRARY
!
$
$         WRITE SYS$OUTPUT "Creating shareable image library..."
$         LIBRARY/CREATE/SHAREABLE POLYPLOT_SHR.OLB POLYPLOT_SHR.EXE
$         PURGE POLYPLOT_SHR.OLB,POLYPLOT_SHR.EXE
$         DELETE POLYPLOT_VECTOR.OBJ;*
$         WRITE SYS$OUTPUT "Whew!!! Finished."
$         WRITE SYS$OUTPUT "--------------------------------------------------"
$     END_IF6:
$ ENDSUBROUTINE