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