10 ! ----- VALID_FILE.FUN ----- ! -------------------------------------------------------------------- ! ----- PASSED: ----- ! ----- FILE_SPEC = Passed File Specification ----- ! -------------------------------------------------------------------- ! ----- RETURNS: ----- ! ----- VALID_FILE() = -1 (True) if FILE_SPEC exists ----- ! ----- 0 (False) if invalid FILE_SPEC or ----- ! ----- FILE_SPEC does not exist ----- ! ----- or any system service err ----- ! -------------------------------------------------------------------- ! ! ----- 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) Requires FABDEF.INC and NAMDEF.INC Include Files ----- ! FUNCTION LONG VALID_FILE(STRING FILE_SPEC) OPTION TYPE = EXPLICIT ! ENSURE EVERYTHING IS DECLARED %LET %DEBUG = 0% ! 1 IF DEBUG ON, 0 IF NO DEBUG DECLARE LONG CONSTANT TRUE = (1% = 1%) DECLARE LONG CONSTANT FALSE = NOT TRUE ! ----- FAB AND NAM DEFINITIONS REQUIRED FOR SYS$PARSE ----- %INCLUDE "FABDEF.INC" %INCLUDE "NAMDEF.INC" DECLARE FABDEF FAB ! DEFINE THE FAB BLOCK DECLARE NAMDEF NAM ! DEFINE THE NAM BLOCK DECLARE LONG SYS_STATUS ! SYSTEM SERVICE EXIT STATUS ! ----- FIXED-LENGTH STRINGS PASSED TO/FROM RMS ----- MAP (FPARSE) STRING PASSED_SPEC = 255%, & STRING EXPANDED_SPEC = 255%, & STRING RESULT_SPEC = 255% EXTERNAL LONG FUNCTION SYS$PARSE! $PARSE SYSTEM SERVICE EXTERNAL LONG FUNCTION SYS$SEARCH ! $SEARCH SYSTEM SERVICE %IF %DEBUG = 1% %THEN PRINT "VALID_FILE DEBUG>FILE_SPEC=>"; FILE_SPEC; "<" %END %IF PASSED_SPEC = FILE_SPEC ! STORE PASSED FILE SPEC EXPANDED_SPEC = "" ! CLEAR EXPANDED FILE SPEC RESULT_SPEC = "" ! CLEAR RESULTING FILE SPEC ! ----- SET UP THE FAB BLOCK ----- FAB::FAB$B_BID = FAB$C_BID ! FAB BLOCK IDENTIFIER FAB::FAB$B_BLN = FAB$C_BLN ! FAB BLOCK LENGTH FAB::FAB$L_FNA = LOC(PASSED_SPEC) ! LOCATION OF PASSED FILE SPEC FAB::FAB$B_FNS = LEN(FILE_SPEC) ! LENGTH OF PASSED FILE SPEC FAB::FAB$L_NAM = LOC(NAM) ! LOCATION OF NAM BLOCK ! ----- SET UP THE NAM BLOCK ----- NAM::NAM$B_BID = NAM$C_BID ! NAM BLOCK IDENTIFIER NAM::NAM$B_BLN = NAM$C_BLN ! NAM BLOCK LENGTH NAM::NAM$B_RSS = NAM$C_MAXRSS ! SIZE OF RESULTING SPEC NAM::NAM$L_RSA = LOC(RESULT_SPEC) ! LOCATION OF RESULTING SPEC NAM::NAM$B_ESS = NAM$C_MAXRSS ! SIZE OF EXPANDED SPEC NAM::NAM$L_ESA = LOC(EXPANDED_SPEC) ! LOCATION OF EXPANDED SPEC SYS_STATUS = SYS$PARSE(FAB) ! GET INITIAL FILE INFORMATION IF (SYS_STATUS AND 1%) = 0% THEN %IF %DEBUG = 1% %THEN PRINT "VALID_FILE DEBUG>SYS$PARSE"; & " ERROR SYS_STATUS="; SYS_STATUS %END %IF VALID_FILE = FALSE ! RETURN 0 (FALSE) IF ERROR ELSE %IF %DEBUG = 1% %THEN PRINT "VALID_FILE DEBUG>RESULT_SPEC=>"; & RESULT_SPEC; "<" PRINT "VALID_FILE DEBUG>"; & "EXPANDED_SPEC=>"; EXPANDED_SPEC; "<" %END %IF ! ----- GET THE REST OF THE FILE INFORMATION ----- SYS_STATUS = SYS$SEARCH(FAB) IF (SYS_STATUS AND 1%) = 0% THEN %IF %DEBUG = 1% %THEN PRINT "VALID_FILE DEBUG>"; & "SYS$SEARCH ERROR"; & " SYS_STATUS="; SYS_STATUS %END %IF ! ----- RETURN 0 (FALSE) IF ERROR ----- VALID_FILE = FALSE ELSE %IF %DEBUG = 1% %THEN PRINT "VALID_FILE DEBUG>"; & "RESULT_SPEC=>"; & RESULT_SPEC; "<" PRINT "VALID_FILE DEBUG>"; & "EXPANDED_SPEC=>"; & EXPANDED_SPEC; "<" %END %IF ! ----- RETURN -1 (TRUE) IF SUCCESS ----- VALID_FILE = TRUE END IF END IF END FUNCTION