$! $! Make shareable image out of PBMPLUS libraries. This command procedure $! takes no arguments, but must be placed in the top-level PBMPLUS directory. $! $! It uses the following input library files: $! $! [.PBM]LIBPBM.OLB,[.PGM]LIBPGM.OLB,[.PPM]LIBPPM.OLB,[.PNM]LIBPNM.OLB $! $! This procedure generates the following files if missing or out-of-date: $! $! TRANSVEC.OBJ Object file containing transfer vector for PBMPLUSSHR. $! PBMPLUSSHR.EXE Shareable image file for PBM libraries. $! PBMPLUSSHR.OPT Linker options file for linking utility program against $! the PBMPLUSSHR.EXE shareable image. $! $ instruct = 0 $ proc = f$environment("PROCEDURE") $ proc_cdt = f$cvtime(f$file(proc,"CDT")) $ if f$search("TRANSVEC.OBJ") .EQS. "" THEN GOTO NEW_TRANSVEC $ if f$cvtime(f$file("TRANSVEC.OBJ","CDT")) .GTS. PROC_CDT THEN GOTO TRANSVEC_DONE $ NEW_TRANSVEC: $ instruct = 1 $ Write SYS$Output "Making new transvec.obj..." $ Macro /NoList /Object = TRANSVEC.OBJ Sys$Input ; PMBPLUS_TRANSFER_VECTOR ; This routine defines a transfer vector for use in creating shareable image ; ; define macro to make transfer vector entry for a given routine. Entry mask ; is obtained from routine we are transfering to. Jump to word past entry ; since these are VAX procedures (written in FORTRAN). ; .MACRO TRANSFER_ENTRY routine ; .TRANSFER routine .MASK routine JMP routine + 2 ; .ENDM TRANSFER_ENTRY ; .TITLE PBMPLUS_TRANSFER_VECTOR .IDENT /01/ .PSECT PBMPLUS_XVEC PIC,USR,CON,REL,LCL,SHR,EXE,RD,NOWRT,NOVEC ; ; Simply go through iap procedures and declare transfer vector ; entry points for them. New procedure must be added to the END ; of this list. ; TRANSFER_VECTOR: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Library LIBPBM ;Module ARGPROC TRANSFER_ENTRY BACKGROUND_PROCESS TRANSFER_ENTRY GETOPT TRANSFER_ENTRY GETREDIRECTION TRANSFER_ENTRY SET_OUTFILE_BINARY ;Module LIBPBM1 TRANSFER_ENTRY PBM_INIT TRANSFER_ENTRY PM_ALLOCARRAY TRANSFER_ENTRY PM_ALLOCROW TRANSFER_ENTRY PM_BITSTOMAXVAL TRANSFER_ENTRY PM_CLOSE TRANSFER_ENTRY PM_ERROR TRANSFER_ENTRY PM_FREEARRAY TRANSFER_ENTRY PM_FREEROW TRANSFER_ENTRY PM_INIT TRANSFER_ENTRY PM_KEYMATCH TRANSFER_ENTRY PM_MAXVALTOBITS TRANSFER_ENTRY PM_MESSAGE TRANSFER_ENTRY PM_OPENR TRANSFER_ENTRY PM_OPENW TRANSFER_ENTRY PM_PERROR TRANSFER_ENTRY PM_READBIGLONG TRANSFER_ENTRY PM_READBIGSHORT TRANSFER_ENTRY PM_READLITTLELONG TRANSFER_ENTRY PM_READLITTLESHORT TRANSFER_ENTRY PM_USAGE TRANSFER_ENTRY PM_WRITEBIGLONG TRANSFER_ENTRY PM_WRITEBIGSHORT TRANSFER_ENTRY PM_WRITELITTLELONG TRANSFER_ENTRY PM_WRITELITTLESHORT TRANSFER_ENTRY PM_READ_UNKNOWN_SIZE ;Module LIBPBM2 TRANSFER_ENTRY PBM_READMAGICNUMBER TRANSFER_ENTRY PBM_READPBM TRANSFER_ENTRY PBM_READPBMINIT TRANSFER_ENTRY PBM_READPBMINITREST TRANSFER_ENTRY PBM_READPBMROW ;Module LIBPBM3 TRANSFER_ENTRY PBM_WRITEPBM TRANSFER_ENTRY PBM_WRITEPBMINIT TRANSFER_ENTRY PBM_WRITEPBMROW ;Module LIBPBM4 TRANSFER_ENTRY PBM_GETC TRANSFER_ENTRY PBM_GETINT TRANSFER_ENTRY PBM_GETRAWBYTE ;Module LIBPBM5 TRANSFER_ENTRY PBM_DEFAULTFONT TRANSFER_ENTRY PBM_DISSECTFONT TRANSFER_ENTRY PBM_DUMPFONT TRANSFER_ENTRY PBM_LOADFONT TRANSFER_ENTRY PBM_LOADBDFFONT TRANSFER_ENTRY MK_ARGVN ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Library LIBPGM ;Module LIBPGM1 TRANSFER_ENTRY PGM_INIT TRANSFER_ENTRY PGM_READPGM TRANSFER_ENTRY PGM_READPGMINIT TRANSFER_ENTRY PGM_READPGMINITREST TRANSFER_ENTRY PGM_READPGMROW ;Module LIBPGM2 TRANSFER_ENTRY PGM_WRITEPGM TRANSFER_ENTRY PGM_WRITEPGMINIT TRANSFER_ENTRY PGM_WRITEPGMROW ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Library LIBPPM ; ;Module LIBPPM1 TRANSFER_ENTRY PPM_INIT TRANSFER_ENTRY PPM_READPPM TRANSFER_ENTRY PPM_READPPMINIT TRANSFER_ENTRY PPM_READPPMINITREST TRANSFER_ENTRY PPM_READPPMROW ;Module LIBPPM2 TRANSFER_ENTRY PPM_WRITEPPM TRANSFER_ENTRY PPM_WRITEPPMINIT TRANSFER_ENTRY PPM_WRITEPPMROW ;Module LIBPPM3 TRANSFER_ENTRY PPM_ADDTOCOLORHASH TRANSFER_ENTRY PPM_ADDTOCOLORHIST TRANSFER_ENTRY PPM_ALLOCCOLORHASH TRANSFER_ENTRY PPM_COLORHASHTOCOLORHIST TRANSFER_ENTRY PPM_COLORHISTTOCOLORHASH TRANSFER_ENTRY PPM_COMPUTECOLORHASH TRANSFER_ENTRY PPM_COMPUTECOLORHIST TRANSFER_ENTRY PPM_FREECOLORHASH TRANSFER_ENTRY PPM_FREECOLORHIST TRANSFER_ENTRY PPM_LOOKUPCOLOR ;Module LIBPPM4 TRANSFER_ENTRY PPM_COLORNAME TRANSFER_ENTRY PPM_PARSECOLOR ;Module LIBPPM5 TRANSFER_ENTRY PPMD_CIRCLE TRANSFER_ENTRY PPMD_FILL TRANSFER_ENTRY PPMD_FILLEDRECTANGLE TRANSFER_ENTRY PPMD_FILL_DRAWPROC TRANSFER_ENTRY PPMD_FILL_INIT TRANSFER_ENTRY PPMD_LINE TRANSFER_ENTRY PPMD_POINT_DRAWPROC TRANSFER_ENTRY PPMD_POLYSPLINE TRANSFER_ENTRY PPMD_SETLINECLIP TRANSFER_ENTRY PPMD_SETLINETYPE TRANSFER_ENTRY PPMD_SPLINE3 ;Module BITIO TRANSFER_ENTRY PM_BITINIT TRANSFER_ENTRY PM_BITFINI TRANSFER_ENTRY PM_BITREAD TRANSFER_ENTRY PM_BITWRITE ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Library LIBPNM ;Module LIBPNM1 TRANSFER_ENTRY PNM_INIT TRANSFER_ENTRY PNM_READPNM TRANSFER_ENTRY PNM_READPNMINIT TRANSFER_ENTRY PNM_READPNMROW ;Module LIBPNM2 TRANSFER_ENTRY PNM_WRITEPNM TRANSFER_ENTRY PNM_WRITEPNMINIT TRANSFER_ENTRY PNM_WRITEPNMROW ;Module LIBPNM3 TRANSFER_ENTRY PNM_BACKGROUNDXEL TRANSFER_ENTRY PNM_BACKGROUNDXELROW TRANSFER_ENTRY PNM_BLACKXEL TRANSFER_ENTRY PNM_INVERTXEL TRANSFER_ENTRY PNM_PROMOTEFORMAT TRANSFER_ENTRY PNM_PROMOTEFORMATROW TRANSFER_ENTRY PNM_WHITEXEL ;Module LIBPNM4 TRANSFER_ENTRY MEM_CREATE TRANSFER_ENTRY MEM_FREE TRANSFER_ENTRY PR_DUMP TRANSFER_ENTRY PR_LOAD_COLORMAP TRANSFER_ENTRY PR_LOAD_HEADER TRANSFER_ENTRY PR_LOAD_IMAGE ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; allocate extra space to allow for code modifications without changing ; the size of the shared image. ; .BLKB 2048-<.-TRANSFER_VECTOR> ; Reserve 4 pages. ; .END $ TRANSVEC_DONE: $! $! Create new options file if needed. $! $ if f$search("PBMPLUSSHR.OPT") .EQS. "" THEN GOTO NEW_OPTFILE $ if f$cvtime(f$file("PBMPLUSSHR.OPT","CDT")) .GTS. PROC_CDT THEN GOTO OPTFILE_DONE $ NEW_OPTFILE: $ instruct = 1 $ write sys$output "Making new pbmplusshr.opt..." $ CREATE PBMPLUSSHR.OPT PBMplusShr /Share Sys$Share:VAXCRTL /Share PSECT_ATTR = ARGPROC_VERSION,GBL,NOSHR PSECT_ATTR = OPTARG,GBL,NOSHR PSECT_ATTR = OPTERR,GBL,NOSHR PSECT_ATTR = OPTIND,GBL,NOSHR PSECT_ATTR = OPTOPT,GBL,NOSHR PSECT_ATTR = PGM_PBMMAXVAL,GBL,NOSHR PSECT_ATTR = PNM_PBMMAXVAL,GBL,NOSHR PSECT_ATTR = PPM_PBMMAXVAL,GBL,NOSHR $! $ OPTFILE_DONE: $! $ if f$search("PBMPLUSSHR.EXE") .EQS. "" THEN GOTO NEW_SHAREABLE $ EXE_CDT = f$cvtime(f$file_attributes("PBMPLUSSHR.EXE","CDT")) $ if EXE_CDT .LTS. PROC_CDT THEN GOTO NEW_SHAREABLE $ if f$cvtime(f$file("[.PBM]LIBPBM.OLB","RDT")) .GTS. EXE_CDT THEN GOTO NEW_SHAREABLE $ if f$cvtime(f$file("[.PGM]LIBPGM.OLB","RDT")) .GTS. EXE_CDT THEN GOTO NEW_SHAREABLE $ if f$cvtime(f$file("[.PPM]LIBPPM.OLB","RDT")) .GTS. EXE_CDT THEN GOTO NEW_SHAREABLE $ if f$cvtime(f$file("[.PNM]LIBPNM.OLB","RDT")) .GTS. EXE_CDT THEN GOTO NEW_SHAREABLE $ GOTO SHAREABLE_DONE $ NEW_SHAREABLE: $ instruct = 1 $ write sys$output "Making new pbmplusshr.exe..." $ Link /Map = PBMPLUSHSR.MAP /Share = SYS$DISK:[]PBMPLUSSHR.EXE Sys$Input/Option COLLECT=FIRST,PBMPLUS_XVEC COLLECT=GLOBALS1,PGM_PBMMAXVAL,PNM_PBMMAXVAL,PPM_PBMMAXVAL COLLECT=GLOBALS2,ARGPROC_VERSION,OPTARG,OPTERR,OPTIND,OPTOPT TRANSVEC.OBJ [.PBM]LIBPBM/LIB,[.PGM]LIBPGM/LIB,[.PPM]LIBPPM/LIB [.PNM]LIBPNM/LIB,SYS$SHARE:VAXCRTL/SHARE UNSUPPORTED = 1 ! force demand zero pages GSMATCH=LEQUAL,2,1 ! Major ID = 2, minor ID = 2 PSECT_ATTR = ARGPROC_VERSION,NOSHR PSECT_ATTR = OPTARG,NOSHR PSECT_ATTR = OPTERR,NOSHR PSECT_ATTR = OPTIND,NOSHR PSECT_ATTR = OPTOPT,NOSHR PSECT_ATTR = PGM_PBMMAXVAL,NOSHR PSECT_ATTR = PNM_PBMMAXVAL,NOSHR PSECT_ATTR = PPM_PBMMAXVAL,NOSHR !PSECT_ATTR = ,LCL,NOSHR $! $ SHAREABLE_DONE: $ if .NOT. instruct then write sys$output "All PBMPLUSSHR files up to date." $ if .NOT. instruct then exit $status $ create sys$output Define the logical name PBMPLUSSHR as "disk:[dir]PBMPLUSSHR", where disk and [dir] are the disk and directory containing the shareable image PBMPLUSSHR.EXE and linker options file PBMPLUSSHR.OPT. You can then link an executable against the image with the command LINK program.OBJ,PBMplusShr/Option $ exit $status