%TITLE 'NETLIB_GET_VERSION' MODULE NETLIB_GET_VERSION (IDENT='V1.0', ADDRESSING_MODE (EXTERNAL=GENERAL), MAIN=NETLIB_GET_VERSION) = BEGIN !++ ! FACILITY: NETLIB ! ! ABSTRACT: abstract ! ! MODULE DESCRIPTION: ! ! description ! ! AUTHOR: M. Madison ! ! Copyright (c) 2008, Matthew Madison. ! ! All rights reserved. ! ! Redistribution and use in source and binary forms, with or without ! modification, are permitted provided that the following conditions ! are met: ! ! * Redistributions of source code must retain the above ! copyright notice, this list of conditions and the following ! disclaimer. ! * Redistributions in binary form must reproduce the above ! copyright notice, this list of conditions and the following ! disclaimer in the documentation and/or other materials provided ! with the distribution. ! * Neither the name of the copyright owner nor the names of any ! other contributors may be used to endorse or promote products ! derived from this software without specific prior written ! permission. ! ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ! "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ! LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ! A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ! OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ! SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ! LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ! DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ! THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ! (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ! OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ! ! CREATION DATE: 23-APR-1998 ! ! MODIFICATION HISTORY: ! ! 23-APR-1998 V1.0 Madison Initial coding. !-- LIBRARY 'SYS$LIBRARY:STARLET'; FORWARD ROUTINE NETLIB_GET_VERSION, get_version_routine, find_image_symbol; EXTERNAL ROUTINE LIB$SIG_TO_RET, LIB$FIND_IMAGE_SYMBOL, LIB$SET_SYMBOL; EXTERNAL LITERAL LIB$_KEYNOTFOU; %SBTTL 'NETLIB_GET_VERSION' GLOBAL ROUTINE NETLIB_GET_VERSION = BEGIN !++ ! FUNCTIONAL DESCRIPTION: ! ! description ! ! RETURNS: cond_value, longword (unsigned), write only, by value ! ! PROTOTYPE: ! ! NETLIB_GET_VERSION ! ! IMPLICIT INPUTS: None. ! ! IMPLICIT OUTPUTS: None. ! ! COMPLETION CODES: ! ! SS$_NORMAL: normal successful completion. ! ! SIDE EFFECTS: ! ! None. !-- LOCAL dsc : BLOCK [DSC$K_S_BLN,BYTE], buf : VECTOR [64,BYTE], len : WORD, rtnptr, status; dsc [DSC$B_DTYPE] = DSC$K_DTYPE_T; dsc [DSC$B_CLASS] = DSC$K_CLASS_S; dsc [DSC$W_LENGTH] = %ALLOCATION (buf); dsc [DSC$A_POINTER] = buf; status = get_version_routine (rtnptr); IF .status THEN status = (.rtnptr)(dsc, len) ELSE if .status EQL LIB$_KEYNOTFOU THEN BEGIN BIND old = %ASCID'NETLIB V2.1 or earlier' : BLOCK [,BYTE]; dsc [DSC$W_LENGTH] = .old [DSC$W_LENGTH]; CH$MOVE (.dsc [DSC$W_LENGTH], .old [DSC$A_POINTER], .dsc [DSC$A_POINTER]); status = SS$_NORMAL; END ELSE dsc [DSC$W_LENGTH] = 0; IF .status THEN BEGIN dsc [DSC$A_POINTER] = CH$PLUS (buf, 7); dsc [DSC$W_LENGTH] = 1; END; LIB$SET_SYMBOL (%ASCID'NETLIB_OLD_V_TAG', dsc); IF .status THEN BEGIN dsc [DSC$A_POINTER] = CH$PLUS (buf, 8); dsc [DSC$W_LENGTH] = .len - 8; END; LIB$SET_SYMBOL (%ASCID'NETLIB_OLD_VERSION', dsc); SS$_NORMAL END; ! NETLIB_GET_VERSION %SBTTL 'get_version_routine' ROUTINE get_version_routine (rtnptr_a) = BEGIN !++ ! FUNCTIONAL DESCRIPTION: ! ! description ! ! RETURNS: cond_value, longword (unsigned), write only, by value ! ! PROTOTYPE: ! ! x ! ! IMPLICIT INPUTS: None. ! ! IMPLICIT OUTPUTS: None. ! ! COMPLETION CODES: ! ! SS$_NORMAL: normal successful completion. ! ! SIDE EFFECTS: ! ! None. !-- ENABLE LIB$SIG_TO_RET; find_image_symbol (%ASCID'NETLIB_SHRXFR', %ASCID'NETLIB_VERSION', .rtnptr_a) END; ! get_version_routine %SBTTL 'find_image_symbol' ROUTINE find_image_symbol (img_a, sym_a, val_a) = BEGIN !++ ! FUNCTIONAL DESCRIPTION: ! ! description ! ! RETURNS: cond_value, longword (unsigned), write only, by value ! ! PROTOTYPE: ! ! x ! ! IMPLICIT INPUTS: None. ! ! IMPLICIT OUTPUTS: None. ! ! COMPLETION CODES: ! ! SS$_NORMAL: normal successful completion. ! ! SIDE EFFECTS: ! ! None. !-- LIB$FIND_IMAGE_SYMBOL (.img_a, .sym_a, .val_a) END; ! find_image_symbol END ELUDOM