10 ! ----- TRNLNM.FUN ----- ! ! ----- FUNCTION TO TRANSLATE A LOGICAL NAME ----- ! ! ---------- PASSED: ---------- ! ! ----- TO_BE_XLATED (STRING) Contains the Logical Name to be ! ----- Translated ! ! ---------- RETURNED: ---------- ! ! ----- TRNLNM (LONG) Function returns exit status from ! ----- SYS$TRNLNM System Service (SS$_NOLOGNAM if ! ----- no logical name translation was found, ! ----- SS$_NORMAL if successfully translated a ! ----- logical name, or any other exit status if any ! ----- unexpected error occurs) ! ! ----- TRANSLATED_NAME (STRING) If TRNLNM returns SS$_NORMAL, this ! ----- variable will contain the equivalence name ! ! ----- Last Change 05/01/89 by Brian Lomasky ----- ! ! ----- Teradyne, Inc., 179 Lincoln Street, Boston, MA 02111 ----- ! ----- (617) 482-2706, x3259 ----- ! ! ----- Neither Brian Lomasky nor Teradyne, Inc. implicitly or ----- ! ----- explicitly implies this program is usable in any way. ----- ! ----- This program is released to the public domain in an ----- ! ----- "AS-IS" condition. ----- ! ! ----- Restrictions: ----- ! ----- 1) Requires VAX BASIC V2.4 or later. ----- ! ----- 2) Must be linked with LNMDEF ----- ! FUNCTION LONG TRNLNM(STRING TO_BE_XLATED, STRING TRANSLATED_NAME) OPTION TYPE = EXPLICIT %LET %DEBUG = 0% ! 1 IF DEBUG MODE, 0 IF NOT ! ----- SYSTEM SERVICE ERROR CODES AND FUNCTION VALUES ----- EXTERNAL LONG CONSTANT LNM$_STRING ! RETURN LOGICAL NAME STRING EXTERNAL LONG CONSTANT SS$_NOLOGNAM ! NO LOGICAL NAME TRANS EXTERNAL LONG CONSTANT SS$_NORMAL ! SUCCESS STATUS RECORD TRNBUF ! $TRNLNM RECORD WORD BUFFER_LENGTH1 WORD ITEM_CODE1 LONG BUFFER_ADDRESS1 LONG RETURN_LENGTH_ADDRESS1 LONG LIST_TERMINATOR END RECORD TRNBUF DECLARE WORD LOG_LENGTH ! LENGTH OF LOGICAL NAME DECLARE STRING NAME_TO_TRANS ! NAME TO BE TRANSLATED DECLARE LONG SYS_STATUS ! SYSTEM STATUS VALUE DECLARE TRNBUF TRNITEM ! EQUATE $TRNLNM RECORD EXTERNAL LONG FUNCTION & SYS$TRNLNM ! TRANSLATE LOGICAL NAME ! ----- MAPPED VARIABLES FOR $TRNLNM SYSTEM SERVICE ----- MAP (TRNDSC) & STRING LOG_NAME = 255% ! LOGICAL NAME FROM $TRNLNM ! ----- STORE DATA FOR $TRNLNM --- TRNITEM::BUFFER_LENGTH1 = 255% TRNITEM::ITEM_CODE1 = LNM$_STRING TRNITEM::BUFFER_ADDRESS1 = LOC(LOG_NAME) TRNITEM::RETURN_LENGTH_ADDRESS1 = LOC(LOG_LENGTH) TRNITEM::LIST_TERMINATOR = 0% ! ----- CONVERT STRING TO BE TRANSLATED TO UPPERCASE, ----- ! ----- REMOVE ANY SPACES, TABS, OR CONTROL CHARS ----- NAME_TO_TRANS = EDIT$(TO_BE_XLATED, 38%) ! ----- TRY TO TRANSLATE LOGICAL NAME ----- SYS_STATUS = SYS$TRNLNM(, "LNM$DCL_LOGICAL", & NAME_TO_TRANS, , TRNITEM) %IF %DEBUG = 1% %THEN PRINT "DEBUG>Try to translate: "; NAME_TO_TRANS; "*" PRINT "DEBUG>SYS_STATUS from $TRNLNM="; SYS_STATUS %END %IF SELECT SYS_STATUS CASE SS$_NOLOGNAM ! IF NO LOGICAL EQUIVALENT: %IF %DEBUG = 1% %THEN PRINT "DEBUG>SYS_STATUS=SS$_NOLOGNAM" %END %IF TRANSLATED_NAME = "" CASE SS$_NORMAL %IF %DEBUG = 1% %THEN PRINT "DEBUG>SYS_STATUS=SS$_NORMAL" PRINT "DEBUG>LOG_LENGTH="; LOG_LENGTH PRINT "DEBUG>LOG_NAME(1:25)="; & LEFT(LOG_NAME, 25%) %END %IF ! ----- EXTRACT LOGICAL NAME ----- IF LOG_LENGTH > 0% THEN TRANSLATED_NAME = LEFT(LOG_NAME, LOG_LENGTH) ELSE TRANSLATED_NAME = "" END IF CASE ELSE %IF %DEBUG = 1% %THEN PRINT "DEBUG>SYS_STATUS=unexpected error" %END %IF TRANSLATED_NAME = "" END SELECT TRNLNM = SYS_STATUS ! RETURN SUCCESS STATUS END FUNCTION