.TITLE TRANSFER ; ; One of the advantages to using shareable images is that ; under proper conditions, you can modify and recreate the shareable ; image without having to re-link the executable images that ; reference it. The key to doing this is to make sure that each ; referenced location (universal symbol and overlayed PSECT) is at the ; exact same offset from the base as before. This is required because ; the linker records only this offset for references into the shareable ; image. The use of transfer vectors make it easy to have immobile code ; entry points. ; ; Every referenced subroutine in the PLOT10GKS library is listed ; with a separate transfer vector below. ; ; The order of the vectors must never change! ; New entries must be added at the end. ; The entire module must be in a unique PSECT name. ; ; THE following lines must be included in the options file (P10GKS.OPT) to ; force the linker to place the transfer vectors at the beginning ; of the shareable image. ; ; CLUSTER = ; COLLECT = , ; ; To allow the image activator to bring in a different version ; of the executable image, include the line: ; ; GSMATCH = LEQUAL, , ; ; Change the minor version number after each change (e.g. 1000 to 1001) ; Change the major version number only when the shareable image ; is no longer downward compatible (e.g. 1 to 2) ; .PSECT TRANSFER_VECTOR PIC, SHR, WRT, QUAD .TRANSFER ADD_BRACES .MASK ADD_BRACES JMP ADD_BRACES+2 RET .ALIGN QUAD .TRANSFER ADD_NODE .MASK ADD_NODE JMP ADD_NODE+2 RET .ALIGN QUAD .TRANSFER ADD_NODE_TO_DISPLAY .MASK ADD_NODE_TO_DISPLAY JMP ADD_NODE_TO_DISPLAY+2 RET .ALIGN QUAD .TRANSFER ADJUST_NODE_POINTERS .MASK ADJUST_NODE_POINTERS JMP ADJUST_NODE_POINTERS+2 RET .ALIGN QUAD .TRANSFER APPEND_NODE .MASK APPEND_NODE JMP APPEND_NODE+2 RET .ALIGN QUAD .TRANSFER CHANGE_DIRECTORY .MASK CHANGE_DIRECTORY JMP CHANGE_DIRECTORY+2 RET .ALIGN QUAD .TRANSFER CHANGE_OPTIONS .MASK CHANGE_OPTIONS JMP CHANGE_OPTIONS+2 RET .ALIGN QUAD .TRANSFER CHANGE_SPEC .MASK CHANGE_SPEC JMP CHANGE_SPEC+2 RET .ALIGN QUAD .TRANSFER CHANGE_UIC .MASK CHANGE_UIC JMP CHANGE_UIC+2 RET .ALIGN QUAD .TRANSFER CHECK_DIRECTORY .MASK CHECK_DIRECTORY JMP CHECK_DIRECTORY+2 RET .ALIGN QUAD .TRANSFER CHECK_DIRECTORY_MOVE .MASK CHECK_DIRECTORY_MOVE JMP CHECK_DIRECTORY_MOVE+2 RET .ALIGN QUAD .TRANSFER CHECK_DIR_SPEC .MASK CHECK_DIR_SPEC JMP CHECK_DIR_SPEC+2 RET .ALIGN QUAD .TRANSFER CREATE_DIRECTORY .MASK CREATE_DIRECTORY JMP CREATE_DIRECTORY+2 RET .ALIGN QUAD .TRANSFER CRT .MASK CRT JMP CRT+2 RET .ALIGN QUAD .TRANSFER DEFINE_PASTE_BOARD .MASK DEFINE_PASTE_BOARD JMP DEFINE_PASTE_BOARD+2 RET .ALIGN QUAD .TRANSFER DEFINE_SMG_LAYOUT .MASK DEFINE_SMG_LAYOUT JMP DEFINE_SMG_LAYOUT+2 RET .ALIGN QUAD .TRANSFER DELETE_DIRECTORY .MASK DELETE_DIRECTORY JMP DELETE_DIRECTORY+2 RET .ALIGN QUAD .TRANSFER DELETE_FILES .MASK DELETE_FILES JMP DELETE_FILES+2 RET .ALIGN QUAD .TRANSFER DELETE_NODE .MASK DELETE_NODE JMP DELETE_NODE+2 RET .ALIGN QUAD .TRANSFER DIR_TO_FILE .MASK DIR_TO_FILE JMP DIR_TO_FILE+2 RET .ALIGN QUAD .TRANSFER DRAW_SCREEN .MASK DRAW_SCREEN JMP DRAW_SCREEN+2 RET .ALIGN QUAD .TRANSFER ERROR_MESSAGE .MASK ERROR_MESSAGE JMP ERROR_MESSAGE+2 RET .ALIGN QUAD .TRANSFER EXIT_SWING .MASK EXIT_SWING JMP EXIT_SWING+2 RET .ALIGN QUAD .TRANSFER FILE_TO_DIR .MASK FILE_TO_DIR JMP FILE_TO_DIR+2 RET .ALIGN QUAD .TRANSFER FILL_IN_SPEC .MASK FILL_IN_SPEC JMP FILL_IN_SPEC+2 RET .ALIGN QUAD .TRANSFER FIND_NODE .MASK FIND_NODE JMP FIND_NODE+2 RET .ALIGN QUAD .TRANSFER FREE_NODE .MASK FREE_NODE JMP FREE_NODE+2 RET .ALIGN QUAD .TRANSFER GET_AND_PARSE_FOREIGN_CMD .MASK GET_AND_PARSE_FOREIGN_CMD JMP GET_AND_PARSE_FOREIGN_CMD+2 RET .ALIGN QUAD .TRANSFER GET_DEFAULT_DIRECTORY .MASK GET_DEFAULT_DIRECTORY JMP GET_DEFAULT_DIRECTORY+2 RET .ALIGN QUAD .TRANSFER GET_FILE_NAME .MASK GET_FILE_NAME JMP GET_FILE_NAME+2 RET .ALIGN QUAD .TRANSFER GET_FILE_UIC .MASK GET_FILE_UIC JMP GET_FILE_UIC+2 RET .ALIGN QUAD .TRANSFER GET_LOCATION .MASK GET_LOCATION JMP GET_LOCATION+2 RET .ALIGN QUAD .TRANSFER GET_XAB .MASK GET_XAB JMP GET_XAB+2 RET .ALIGN QUAD .TRANSFER HARDCOPY .MASK HARDCOPY JMP HARDCOPY+2 RET .ALIGN QUAD .TRANSFER HELP .MASK HELP JMP HELP+2 RET .ALIGN QUAD .TRANSFER LENSTR .MASK LENSTR JMP LENSTR+2 RET .ALIGN QUAD .TRANSFER LOAD_DISPLAY .MASK LOAD_DISPLAY JMP LOAD_DISPLAY+2 RET .ALIGN QUAD .TRANSFER LOAD_NODES .MASK LOAD_NODES JMP LOAD_NODES+2 RET .ALIGN QUAD .TRANSFER MODIFY_FILE_PROT .MASK MODIFY_FILE_PROT JMP MODIFY_FILE_PROT+2 RET .ALIGN QUAD .TRANSFER MOVE_NODE .MASK MOVE_NODE JMP MOVE_NODE+2 RET .ALIGN QUAD .TRANSFER PD_BAR_CHOICE .MASK PD_BAR_CHOICE JMP PD_BAR_CHOICE+2 RET .ALIGN QUAD .TRANSFER PD_DRAW_BAR .MASK PD_DRAW_BAR JMP PD_DRAW_BAR+2 RET .ALIGN QUAD .TRANSFER PD_GET_CHOICE .MASK PD_GET_CHOICE JMP PD_GET_CHOICE+2 RET .ALIGN QUAD .TRANSFER PD_LIST_CHOICE .MASK PD_LIST_CHOICE JMP PD_LIST_CHOICE+2 RET .ALIGN QUAD .TRANSFER PD_LOAD_BAR .MASK PD_LOAD_BAR JMP PD_LOAD_BAR+2 RET .ALIGN QUAD .TRANSFER PD_UNDRAW_BAR .MASK PD_UNDRAW_BAR JMP PD_UNDRAW_BAR+2 RET .ALIGN QUAD .TRANSFER PRINT_MESSAGE .MASK PRINT_MESSAGE JMP PRINT_MESSAGE+2 RET .ALIGN QUAD .TRANSFER RECORD_STRUCTURE .MASK RECORD_STRUCTURE JMP RECORD_STRUCTURE+2 RET .ALIGN QUAD .TRANSFER RENAME_DIRECTORY .MASK RENAME_DIRECTORY JMP RENAME_DIRECTORY+2 RET .ALIGN QUAD .TRANSFER RESET_TERMINAL .MASK RESET_TERMINAL JMP RESET_TERMINAL+2 RET .ALIGN QUAD .TRANSFER SET_DEFAULT_DIRECTORY .MASK SET_DEFAULT_DIRECTORY JMP SET_DEFAULT_DIRECTORY+2 RET .ALIGN QUAD .TRANSFER SET_NOTAB .MASK SET_NOTAB JMP SET_NOTAB+2 RET .ALIGN QUAD .TRANSFER SM_ALLOW_REPAINT .MASK SM_ALLOW_REPAINT JMP SM_ALLOW_REPAINT+2 RET .ALIGN QUAD .TRANSFER SM_REPAINT_SCREEN .MASK SM_REPAINT_SCREEN JMP SM_REPAINT_SCREEN+2 RET .ALIGN QUAD .TRANSFER SWING .MASK SWING JMP SWING+2 RET .ALIGN QUAD .TRANSFER TRANSLATE_LOGICAL .MASK TRANSLATE_LOGICAL JMP TRANSLATE_LOGICAL+2 RET .ALIGN QUAD .TRANSFER UPDATE_SCREEN .MASK UPDATE_SCREEN JMP UPDATE_SCREEN+2 RET .ALIGN QUAD .TRANSFER UPDATE_WINDOW1 .MASK UPDATE_WINDOW1 JMP UPDATE_WINDOW1+2 RET .ALIGN QUAD .TRANSFER XABGET .MASK XABGET JMP XABGET+2 RET .ALIGN QUAD .TRANSFER XABSET .MASK XABSET JMP XABSET+2 RET .END