10	! ----- F$PARSE.FUN -----
	! --------------------------------------------------------------------
	! ----- PASSED: -----
	! -----		FILE_SPEC = Passed File Specification -----
	! --------------------------------------------------------------------
	! ----- RETURNS: -----
	! -----		F$PARSE() = Fully-Expanded File Specification -----
	! -----			    (format of dev:[dir]file.ext) -----
	! -----			    or Null String if Invalid FILE_SPEC -----
	! --------------------------------------------------------------------
	!
	! ----- 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 STRING F$PARSE(STRING FILE_SPEC)
		OPTION TYPE = EXPLICIT		! ENSURE EVERYTHING IS DECLARED

		! ----- 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

		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
			F$PARSE = ""		! RETURN NULL STRING IF ERROR
		ELSE
			! ----- RETURN THE FULLY PARSED SPECIFICATION -----
			! ----- LESS ANY SPACES, TABS, OR NULLS -----
			F$PARSE = EDIT$(EXPANDED_SPEC, 6%)
		END IF
	END FUNCTION
