RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page   0

TABLE OF CONTENTS   



   (1)      49  DECLARATIONS

   (3)     188  RM$XPFN  -  FILENAME EXPANSION CONTROL ROUTINE

   (6)     637  PARSE_STRING  -  PARSE INDIVIDUAL FILENAME STRI

   (12)   1399  NEXT_FIELD  -  SUBROUTINE TO SCAN STRING FOR TE

   (13)   1661  CHECK_FIELD  -  CHECK FOR VALID FIELD AND COPY 

   (14)   1877  RM$EXPSTRING  -  BUILD EXPANDED OR RESULTANT NA

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page   1

045                                                                                                                              (1)



                                     0000     1 	$BEGIN RM0XPFN,045,F$RMSOPEN0,<EXPAND FILENAME STRING>

                                     0000     2 ;

                                     0000     3 ;

                                     0000     4 ; COPYRIGHT (C) 1977, 1978

                                     0000     5 ; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASSACHUSETTS 01754

                                     0000     6 ;

                                     0000     7 ; THIS SOFTWARE IS FURNISHED  UNDER A LICENSE FOR USE ONLY ON A SINGLE

                                     0000     8 ; COMPUTER  SYSTEM AND  MAY BE  COPIED ONLY WITH  THE INCLUSION OF THE

                                     0000     9 ; ABOVE COPYRIGHT NOTICE.  THIS SOFTWARE, OR ANY OTHER COPIES THEREOF,

                                     0000    10 ; MAY NOT BE PROVIDED OR  OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON

                                     0000    11 ; EXCEPT FOR USE ON SUCH SYSTEM AND TO ONE WHO AGREES TO THESE LICENSE

                                     0000    12 ; TERMS.  TITLE TO AND  OWNERSHIP OF THE  SOFTWARE  SHALL AT ALL TIMES

                                     0000    13 ; REMAIN IN DEC.

                                     0000    14 ;

                                     0000    15 ; THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE

                                     0000    16 ; AND SHOULD  NOT BE CONSTRUED  AS A COMMITMENT  BY DIGITAL  EQUIPMENT

                                     0000    17 ; CORPORATION.

                                     0000    18 ;

                                     0000    19 ; DEC ASSUMES  NO  RESPONSIBILITY  FOR  THE USE OR  RELIABILITY OF ITS

                                     0000    20 ; SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DEC.

                                     0000    21 ;

                                     0000    22 ;++

                                     0000    23 ; FACILITY: RMS32

                                     0000    24 ;

                                     0000    25 ; ABSTRACT:

                                     0000    26 ;	THIS MODULE EXPANDS THE USER-SUPPLIED

                                     0000    27 ;	FILENAME STRING BY THE TRANSLATION OF

                                     0000    28 ;	LOGICAL NAMES AND APPLICATION OF DEFAULTS.

                                     0000    29 ;

                                     0000    30 ; ENVIRONMENT:

                                     0000    31 ;		STAR PROCESSOR RUNNING STARLET EXEC.

                                     0000    32 ;

                                     0000    33 ; AUTHOR: L F LAVERDURE,	 CREATION DATE: 1-MAR-77

                                     0000    34 ;

                                     0000    35 ; MODIFIED BY:

                                     0000    36 ;

                                     0000    37 ;	R A NEWELL,      17-AUG-78  9:44	; MAKE CORRECT FIX FOR WC VER

                                     0000    38 ;	R A NEWELL,      16-AUG-78  15:18	; GET RID OF STAR FOR WILDCARD VERSION

                                     0000    39 ;	L F LAVERDURE,      8-AUG-78  17:37	; FIX NETWORK PARSES

                                     0000    40 ;						; A) STICKY PARSE

                                     0000    41 ;						; B) EXPLICIT DEFAULT DIRECTORY

                                     0000    42 ;						; C) NON-USER LOGICAL NAME

                                     0000    43 ;	R A NEWELL,      2-AUG-78  15:55

                                     0000    44 ;	L F LAVERDURE,   06-JUL-78  11:13

                                     0000    45 ;	J A KRYCKA,	 06-JUL-78  14:22

                                     0000    46 ; 01	- 

                                     0000    47 ;--

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page   2

045             DECLARATIONS                                                                                                     (1)



                                     0000    49 	.SBTTL	DECLARATIONS

                                     0000    50 ;

                                     0000    51 ; INCLUDE FILES:

                                     0000    52 ;

                                     0000    53 

                                     0000    54 ;

                                     0000    55 ; MACROS:

                                     0000    56 ;

                                     0000    57 	$FABDEF

                                     0000    58 	$IFBDEF

                                     0000    59 	$NAMDEF

                                     0000    60 	$FWADEF

                                     0000    61 	$TRNLOGDEF

                                     0000    62 	$LOGDEF

                                     0000    63 	$PSLDEF

                                     0000    64 	$SSDEF

                                     0000    65 	$NWADEF

                                     0000    66 	.LIST MEB

                                     0000    67 

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page   3

045             DECLARATIONS                                                                                                     (1)



                                     0000    69 ;

                                     0000    70 ; THIS MACRO GENERATES A CALL TO THE CHECK_FIELD SUBROUTINE,

                                     0000    71 ; BUILDING IN-LINE ARGUMENTS TO SPECIFY DESIRED CHECKS AND

                                     0000    72 ; OPERATIONS AND THE FIXED PARAMETERS NECESSARY TO CARRY

                                     0000    73 ; THEM OUT

                                     0000    74 ;

                                     0000    75 ; THE CHECKS=   PARAMETER SPECIFIES WHICH BITS IN THE R2

                                     0000    76 ;		OUTPUT FROM NXTFLD MUST NOT BE ON, WHETHER

                                     0000    77 ;		THE FIELD IS THE NAME OR TYPE FIELD, AND WHETHER

                                     0000    78 ;		RETURN IS TO BE MADE IN-LINE ON AN ERROR RATHER

                                     0000    79 ;		THAN POPPING THE RETURN PC AND BRANCHING TO PRSERR

                                     0000    80 

                                     0000    81 ;

                                     0000    82 ; THE MAXSIZ=   PARAMETER SPECIFIES THE MAXIMUM LENGTH OF THE

                                     0000    83 ;		FIELD

                                     0000    84 ;

                                     0000    85 ; THE FIELD=    PARAMETER SPECIFIES THE FWA OFFSET TO THE

                                     0000    86 ;		STRING DESCRIPTOR FOR THE FIELD AND THE BIT

                                     0000    87 ;		IN THE FWA FLAGS LONGWORD

                                     0000    88 ;

                                     0000    89 ; THE ERR=      PARAMETER DEFINES THE ERROR CODE TO BE OUTPUT

                                     0000    90 ;		IF THIS FIELD IS IN ERROR

                                     0000    91 ;

                                     0000    92 	.MACRO	CHKFLD	CHECKS,FIELD,MAXSIZ=63,ERR,DISP=W

                                     0000    93 		BSB'DISP	CHECK_FIELD

                                     0000    94 		.WORD	CHECKS

                                     0000    95 		.BYTE	MAXSIZ

                                     0000    96 		.BYTE	FWA$V_'FIELD

                                     0000    97 		.BYTE	FWA$Q_'FIELD

                                     0000    98 		RMSERR_WORD	ERR

                                     0000    99 	.ENDM	CHKFLD

                                     0000   100 ;

                                     0000   101 ; THIS MACRO GENERATES A CALL TO THE RM$PRSFLD

                                     0000   102 ; SUBROUTINE, BUILDING IN-LINE BYTE OFFSETS TO 

                                     0000   103 ; ROUTINES TO HANDLE THE CASES WHERE THE INPUT

                                     0000   104 ; STRING WAS NULL OR DID NOT CONTAIN A TERMINATOR

                                     0000   105 ; (ALLOWS FORWARD BRANCHING ONLY)

                                     0000   106 ;

                                     0000   107 	.MACRO	NXTFLD	EOS,NULL,DISP=W,?L

                                     0000   108 		BSB'DISP	NEXT_FIELD

                                     0000   109 L:		.BYTE	EOS-L			; OFFSET TO EOS ROUTINE

                                     0000   110 		.BYTE	NULL-L-1		; OFFSET TO NULL ROUTINE

                                     0000   111 	.IF DF EOS

                                     0000   112 	.IF LE	<EOS-L>

                                     0000   113 	.ERROR	;OFFSET TO EOS IS NEGATIVE - NOT ALLOWED;

                                     0000   114 	.ENDC

                                     0000   115 	.ENDC

                                     0000   116 	.IF DF NULL

                                     0000   117 	.IF LE	<NULL-L-1>

                                     0000   118 	.ERROR	; OFFSET TO NULL IS NEGATIVE - NOT ALLOWED;

                                     0000   119 	.ENDC

                                     0000   120 	.ENDC

                                     0000   121 	.ENDM	NXTFLD

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page   4

045             DECLARATIONS                                                                                                     (1)



                                     0000   123 ;

                                     0000   124 ; EQUATED SYMBOLS:

                                     0000   125 ;

                           00000020  0000   126 	FOP=FAB$L_FOP*8		; BIT OFFSET TO FOP

                           00000010  0000   127 	WC=FWA$B_WILDFLGS*8	; BIT OFFSET TO WILD CARD FLAGS

                                     0000   128 	WCNTV_MASK=<1@<FWA$V_WC_NAME-WC>>!-

                                     0000   129 		    <1@<FWA$V_WC_TYPE-WC>>!-

                           00000038  0000   130 		    <1@<FWA$V_WC_VER-WC>>	; WILD NAME, TYPE, OR VER MASK

                                     0000   131 ;

                                     0000   132 ; NOTE: THESE SYMBOLS ARE USED BY THE NXTFLD AND CHKFLD ROUTINES

                                     0000   133 ;

                           00000000  0000   134 	V_NULL	    = 0			; FIELD CONTAINS NO CHARACTERS

                           00000001  0000   135 	V_ALPHA     = 1			; FIELD CONTAINS UPPERCASE ALPHAS

                           00000002  0000   136 	V_NUMERIC   = 2			; FIELD CONTAINS NUMERICS

                           00000003  0000   137 	V_NOT_OCTAL = 3			; FIELD CONTAINS '8' OR '9'

                           00000004  0000   138 	V_$_        = 4			; FIELD CONTAINS '$' OR '_'

                           00000005  0000   139 	V_WILD      = 5			; FIELD CONTAINS A  '*'

                           00000006  0000   140 	V_MINUS     = 6			; FIELD CONTAINS LEADING '-'

                           00000007  0000   141 	V_NAMTYP    = 7			; THIS FIELD IS EITHER A

                                     0000   142 					; FILENAME OR TYPE (INPUT

                                     0000   143 					; TO CHKFLD ONLY)

                           00000008  0000   144 	V_NOTERM    = 8			; FIELD TERMINATED BY END-

                                     0000   145 					; OF-STRING RATHER THAN

                                     0000   146 					; TERMINATOR

                           00000009  0000   147 	V_INVALID   = 9			; FIELD CONTAINED ONE OR

                                     0000   148 					; MORE ILLEGAL CHARACTERS

                                     0000   149 					; OR NON-LEADING MINUS SIGN

                           0000000A  0000   150 	V_ACS 	    = 10		; NODENAME FIELD CONTAINED AN

                                     0000   151 					; ACCESS CONTROL STRING APPEARING

                                     0000   152 					; AS AN EMBEDDED QUOTED STRING

                                     0000   153 					; (OUTPUT FROM NXTFLD ONLY)

                           0000000F  0000   154 	V_RETURN_ON_ERR = 15		; CHECK FIELD SUBROUTINE IS TO

                                     0000   155 					; RETURN AN ERROR RATHER THAN POP

                                     0000   156 					; RETURN PC AND BRANCH TO PRSERR

                                     0000   157 ;

                                     0000   158 ; MASK VERSIONS

                                     0000   159 ;

                           00000001  0000   160 	M_NULL	= 1@V_NULL

                           00000002  0000   161 	M_ALPHA	= 1@V_ALPHA

                           00000004  0000   162 	M_NUMERIC = 1@V_NUMERIC

                           00000008  0000   163 	M_NOT_OCTAL = 1@V_NOT_OCTAL

                           00000010  0000   164 	M_$_	= 1@V_$_

                           00000020  0000   165 	M_WILD	= 1@V_WILD

                           00000040  0000   166 	M_MINUS = 1@V_MINUS

                           00000080  0000   167 	M_NAMTYP= 1@V_NAMTYP

                           00008000  0000   168 	M_RETURN_ON_ERR= 1@V_RETURN_ON_ERR

                                     0000   169 ;

                                     0000   170 ; OTHER DEFINITIONS:

                                     0000   171 ;

                           0000001B  0000   172 	ESCAPE	=	27		; ASCII ESCAPE CHARACTER

                           0000003B  0000   173 	SEMICOLON =	59		; ASCII VALUE FOR ;

                           00000061  0000   174 	LOWERCASE_A =	97		; ASCII VALUE FOR LOWER CASE A

                           0000007A  0000   175 	LOWERCASE_Z =	122		; ASCII VALUE FOR LOWER CASE Z

                                     0000   176 ;

                                     0000   177 ; OWN STORAGE:

                                     0000   178 ;

         3A 4B 53 49 44 24 53 59 53  0000   179 DISK:	.ASCII	/SYS$DISK:/		; DEFAULT DEVICE STRING

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page   5

045             DECLARATIONS                                                                                                     (1)



                           00000009  0009   180 DISKSZ=.-DISK

                                     0009   181 	$NEWPSECT	F$RMSOPEN0NAM

                                     0009       		.SAVE

                                 00000000       		.PSECT	F$RMSOPEN0NAM,GBL,NOWRT

                                 0C  0000   182 EXPARGL: .BYTE	NAM$L_ESA		; ARG LIST FOR RM$EXPSTRING

                                     0001   183 	RMSERR_WORD	ESA

                               0000' 0001       		.WORD	RMS$_ESA&^XFFFF

                                     0003   184 	RMSERR_WORD	ESS

                               0000' 0003       		.WORD	RMS$_ESS&^XFFFF

                                     0005   185 	$PSECT_RESTORE

                                 00000009       		.RESTORE

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page   6

045             DECLARATIONS                                                                                                     (3)



                                     0009   187 

                                     0009   188 	.SBTTL RM$XPFN  -  FILENAME EXPANSION CONTROL ROUTINE

                                     0009   189 ;++

                                     0009   190 ; FUNCTIONAL DESCRIPTION:

                                     0009   191 ;

                                     0009   192 ; THIS MODULE CONSISTS OF FOUR MAJOR PARTS:

                                     0009   193 ;

                                     0009   194 ;	1.  RM$XPFN	-	HIGH-LEVEL CONTROL ROUTINE TO SELECT

                                     0009   195 ;				AND VERIFY THE VARIOUS STRINGS TO

                                     0009   196 ;				BE USED TO EXPAND THE FILENAME

                                     0009   197 ;	2.  PARSE_STRING -	MEDIUM-LEVEL ROUTINE TO PARSE AN

                                     0009   198 ;				INDIVIDUAL STRING INTO ITS 

                                     0009   199 ;				CONSTITUENT PARTS, TRANSLATING

                                     0009   200 ;				LOGICAL NAMES, AND MERGING THE

                                     0009   201 ;				RESULTS INTO THE EXPANDED STRING

                                     0009   202 ;	3.  NEXT_FIELD	-	LOW-LEVEL SUBROUTINE TO SCAN THE

                                     0009   203 ;				INPUT STRING, ISOLATING A SUB-STRING

                                     0009   204 ;				(FIELD) TERMINATED BY A DELIMITING

                                     0009   205 ;				CHARACTER AND RETURNING INFORMATION

                                     0009   206 ;				ABOUT THE CONTENTS OF THAT FIELD

                                     0009   207 ;	4.  CHECK_FIELD	-	LOW-LEVEL SUBROUTINE THAT WORKS

                                     0009   208 ;				WITH THE OUTPUT OF NEXT_FIELD,

                                     0009   209 ;				PERFORMING CHECKS AND OTHER

                                     0009   210 ;				FUNCTIONS AS DIRECTED BY PARSE_STRING.

                                     0009   211 ;

                                     0009   212 ; THE HIGH-LEVEL CONTROL ROUTINE, RM$XPFN PERFORMS THE

                                     0009   213 ; FOLLOWING FUNCTIONS:

                                     0009   214 ;

                                     0009   215 ;	1.  PROBES THE FILENAME STRING AND CALLS PARSE_STRING TO

                                     0009   216 ;	    PARSE IT

                                     0009   217 ;

                                     0009   218 ;	2.  IF NOT ALL FILENAME FIELDS (DEVICE,DIRECTORY,FILENAME,

                                     0009   219 ;	    FILETYPE, AND FILE VERSION) ARE PRESENT APPLIES DEFAULTS

                                     0009   220 ;	    IN THE ORDER:

                                     0009   221 ;

                                     0009   222 ;		- DEFAULT FILENAME STRING (IF ANY)

                                     0009   223 ;		- RELATED FILE (IF ANY) FOR FILENAME AND/OR FILETYPE ONLY

                                     0009   224 ;		- DEFAULT DEVICE BY APPLYING THE LOGICAL NAME 'SYS$DISK:'

                                     0009   225 ;		  (ONLY IF NODE NOT SPECIFIED)

                                     0009   226 ;		- DEFAULT FILE DIRECTORY AS CURRENTLY ESTABLISHED

                                     0009   227 ;		  (BY LOGIN OR THE SET DEFAULT COMMAND) (ONLY IF

                                     0009   228 ;		  NODE NOT SPECIFIED)

                                     0009   229 ;

                                     0009   230 ;	3.  IF A NAM BLOCK IS SPECIFIED AND IT INCLUDES AN EXPANDED

                                     0009   231 ;	    STRING BUFFER, THE EXPANDED STRING WILL BE COPIED TO

                                     0009   232 ;	    THE BUFFER.

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page   7

045             RM$XPFN  -  FILENAME EXPANSION CONTROL ROUTINE                                                                   (3)



                                     0009   234 ;

                                     0009   235 ; CALLING SEQUENCE:

                                     0009   236 ;

                                     0009   237 ;	BSBW	RM$XPFN

                                     0009   238 ;

                                     0009   239 ; INPUT PARAMETERS:

                                     0009   240 ;

                                     0009   241 ;	R9	IFAB ADDRESS

                                     0009   242 ;	R8	FAB ADDRESS

                                     0009   243 ;

                                     0009   244 ; IMPLICIT INPUTS:

                                     0009   245 ;

                                     0009   246 ;	THE CONTENTS OF THE FAB AND RELATED NAM BLOCK IF ANY,

                                     0009   247 ;	IN PARTICULAR THE FIELDS FNA,FNS,DNA,DNS,RLF,NAM

                                     0009   248 ;		- IF RLF SPECIFIED, NAM IN THE RELATED FAB AND

                                     0009   249 ;		  RSA AND RSL IN THE NAM BLOCK

                                     0009   250 ;		- IF NAM, ESA AND ESS

                                     0009   251 ;

                                     0009   252 ;	ALSO, THE CONTENTS OF THE VARIOUS LOGICAL NAME TABLES,

                                     0009   253 ;	ESPECIALLY WITH RESPECT TO THE VARIOUS SYSTEM-DEFINED

                                     0009   254 ;	NAMES.

                                     0009   255 ;

                                     0009   256 ;	ALSO, THE CURRENT DEFAULT DIRECTORY STRING.

                                     0009   257 ;

                                     0009   258 ;	FWA INPUTS:

                                     0009   259 ;

                                     0009   260 ;	FWA$Q_XLTBUF1	- DESCRIPTOR OF 63-CHAR FWA SCRATCH BUFFER

                                     0009   261 ;	FWA$Q_XLTBUF2	- DESCRIPTOR OF 63-CHAR FWA SCRATCH BUFFER

                                     0009   262 ;	FWA$Q_NODE	- DESCRIPTOR OF 40-CHAR FWA BUFFER

                                     0009   263 ;	FWA$Q_DEVICE	- DESCRIPTOR OF 15-CHAR FWA BUFFER

                                     0009   264 ;	FWA$Q_DIR1	- DESCRIPTOR OF 9-CHAR FWA BUFFER

                                     0009   265 ;	FWA$Q_DIR2	- DESCRIPTOR OF 9-CHAR FWA BUFFER

                                     0009   266 ;	FWA$Q_DIR2+8	- DESCRIPTOR OF 9-CHAR FWA BUFFER

                                     0009   267 ;	FWA$Q_DIR2+16	- DESCRIPTOR OF 9-CHAR FWA BUFFER

                                     0009   268 ;	FWA$Q_DIR2+24	- DESCRIPTOR OF 9-CHAR FWA BUFFER

                                     0009   269 ;	FWA$Q_DIR2+32	- DESCRIPTOR OF 9-CHAR FWA BUFFER

                                     0009   270 ;	FWA$Q_DIR2+40	- DESCRIPTOR OF 9-CHAR FWA BUFFER

                                     0009   271 ;	FWA$Q_DIR2+48	- DESCRIPTOR OF 9-CHAR FWA BUFFER

                                     0009   272 ;	FWA$Q_NAME	- DESCRIPTOR OF 10-CHAR FWA BUFFER

                                     0009   273 ;	FWA$Q_TYPE	- DESCRIPTOR OF 4-CHAR FWA BUFFER

                                     0009   274 ;	FWA$Q_VERSION	- DESCRIPTOR OF 6-CHAR FWA BUFFER

                                     0009   275 ;	FWA$Q_QUOTED	- DESCRIPTOR OF 127-CHAR NWA BUFFER

                                     0009   276 ;

                                     0009   277 ;	NOTES:  

                                     0009   278 ;		1.  THE NAME, TYPE, AND VERSION BUFFERS MUST BE

                                     0009   279 ;		    ADJACENT AND ASCENDING IN MEMORY

                                     0009   280 ;

                                     0009   281 ;		2.  ALL OTHER FWA FIELDS SHOULD BE ZERO

                                     0009   282 ;

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page   8

045             RM$XPFN  -  FILENAME EXPANSION CONTROL ROUTINE                                                                   (3)



                                     0009   284 ;

                                     0009   285 ; OUTPUT PARAMETERS:

                                     0009   286 ;

                                     0009   287 ;	R10	FWA ADDRESS

                                     0009   288 ;	R0	STATUS CODE

                                     0009   289 ;	R1-R7,AP DESTROYED

                                     0009   290 ;

                                     0009   291 ; IMPLICIT OUTPUTS:

                                     0009   292 ;

                                     0009   293 ;	-NAM BLOCK (IF SPECIFIED):

                                     0009   294 ;		-IF ESA SPECIFIED BUFFER FILLED IN WITH 

                                     0009   295 ;		 EXPANDED FILENAME STRING + ESL SET TO ITS

                                     0009   296 ;		 LENGTH IN BYTES.

                                     0009   297 ;

                                     0009   298 ;	-FWA:

                                     0009   299 ;		-VARIOUS FLAGS SET AS PER THE PARSE 

                                     0009   300 ;		-FWA$B_DIRTERM SET TO DIRECTORY TERMINATING BRACKET (']' OR '>')

                                     0009   301 ;		-FWA$L_ESCSTRING SET TO ESCAPE STRING IF SEEN

                                     0009   302 ;		-THE DESCRIPTORS FOR THE PARSED FILENAME ELEMENTS

                                     0009   303 ;		 ARE SET WITH THE SIZES OF THE VARIOUS ELEMENTS

                                     0009   304 ;		 OF THE FILENAME STRING, THE ELEMENTS THEMSELVES

                                     0009   305 ;		 HAVING BEEN COPIED TO THE BUFFERS. THE FILETYPE

                                     0009   306 ;		 AND VERSION ARE APPENDED TO THE FILE NAME.

                                     0009   307 ;

                                     0009   308 ; COMPLETION CODES:

                                     0009   309 ;

                                     0009   310 ;	STANDARD RMS, IN PARTICULAR SUC,FNA,DNA,RLF,SYN,

                                     0009   311 ;	NOD,DEV,DIR,FNM,TYP,VER,LNE,QUO,NAM,ESA,ESS

                                     0009   312 ;

                                     0009   313 ; SIDE EFFECTS:

                                     0009   314 ;

                                     0009   315 ;	NONE

                                     0009   316 ;

                                     0009   317 ;--

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page   9

045             RM$XPFN  -  FILENAME EXPANSION CONTROL ROUTINE                                                                   (3)



                                     0009   319 RM$XPFN::

                                     0009   320 	$TSTPT	XPFN			

                 00000200'9F     D6  0009       		INCL	@#PIO$GL_FMLH+512+TPT$L_XPFN

                          FFEE'  30  000F   321 	BSBW	RM$FWASET			; GET A WORK PAGE

            48            50     E9  0012   322 	BLBC	R0,EXIT_XPFN			; TOO BAD IF NONE

                          67     10  0015   323 	BSBB	EXPAND_NAME			; DO BULK OF WORK

            43            50     E9  0017   324 	BLBC	R0,EXIT_XPFN			; GET OUT ON ERROR

            3C         30 AA     91  001A   325 	CMPB	FWA$B_DIRLEN(R10),#FWA$C_MAXDIRLEN	; DIRECTORY SPEC TOO LONG?

                          55     1E  001E   326 	BGEQU	DIR_TOO_LONG			; BRANCH IF YES

                                     0020   327 ;

                                     0020   328 ; WE HAVE ALL THE PARTS DESCRIBED SEPARATELY. APPEND FILE TYPE

                                     0020   329 ; AND VERSION TO THE FILENAME.

                                     0020   330 ;

                       08 AA     95  0020   331 	TSTB	FWA$B_ESCFLG(R10)		; ESCAPE STRING SEEN?

                          2F     12  0023   332 	BNEQ	EXIT_XPFN1			; BRANCH IF YES

            6A            1A     E0  0025   333 	BBS	#FWA$V_QUOTED,(R10),EXIT_XPFN1	; BRANCH IF QUOTED STRING FOUND

                          2B         0028       

            56       0084 CA     7E  0029   334 	MOVAQ	FWA$Q_NAME(R10),R6		; GET NAME DESCRIPTOR

         18 AA            66     B0  002E   335 	MOVW	(R6),FWA$W_FNAMSIZ(R10)		; SAVE FILENAME SIZE

            86            86     C1  0032   336 	ADDL3	(R6)+,(R6)+,R3			; GET ADDRESS PAST NAME

                          53         0035       

                                     0036   337 	ASSUME	FWA$Q_TYPE EQ <FWA$Q_NAME+8>

                                     0036   338 	ASSUME 	FWA$Q_VERSION EQ <FWA$Q_TYPE+8> 

                                     0036   339 	ASSUME	FWA$T_TYPEBUF EQ <FWA$T_NAMEBUF+FWA$C_NAMBUFSIZ>

                                     0036   340 	ASSUME	FWA$T_VERBUF EQ <FWA$T_TYPEBUF+FWA$C_TYPBUFSIZ>

            83            2E     90  0036   341 	MOVB	#^A/./,(R3)+			; APPEND '.' TO DELIMIT TYPE

                          26     10  0039   342 	BSBB	MOVNXT				; APPEND TYPE

            68            3D     E1  003B   343 	BBC	#FAB$V_OFP+FOP,(R8),10$		; BRANCH IF NOT OUTPUT FILE PARSE

                          08         003E       

            6A            06     E1  003F   344 	BBC	#FWA$V_CUR_VER,(R10),10$	; BRANCH IF NOT WILDCARD VERSION

                          04         0042       

                     0094 CA     B7  0043   345 	DECW	FWA$Q_VERSION(R10)		; DEC LEN TO GET RID OF STAR VER

            83            3B     90  0047   346 10$:	MOVB	#SEMICOLON,(R3)+		; APPEND ';'

                          15     10  004A   347 	BSBB	MOVNXT				; AND VERSION

            53       0088 CA     C3  004C   348 	SUBL3	FWA$Q_NAME+4(R10),R3,FWA$Q_NAME(R10) ; ADJUST LENGTH

                     0084 CA         0051       

                                     0054   349 ;

                                     0054   350 ; IF USER HAS SPECIFIED A NAM BLOCK AND AN EXPANDED STRING BUFFER

                                     0054   351 ; WITHIN IT, GIVE HIM THE EXPANDED NAME

                                     0054   352 ;

                                     0054   353 EXIT_XPFN1:	RMSSUC

            50            01     D0  0054       		MOVL	#1,R0

            57         28 B8     DE  0057   354 	MOVAL	@FAB$L_NAM(R8),R7		; GET NAM BLK ADDR

                          01     12  005B   355 	BNEQ	SETNAM				; AND BRANCH IF ONE

                                     005D   356 EXIT_XPFN:

                                 05  005D   357 	RSB

                                     005E   358 ;

                                     005E   359 ;   FILL IN THE EXPANDED FILENAME STRING AND FNB STATUS BITS

                                     005E   360 ;

                                     005E   361 SETNAM:	$PSECT_BR	F$RMSOPEN0NAM

                          FFA4'  31  005E       		BRW	F$RMSOPEN0NAM0

                                     0061       		.SAVE

                                 00000005       		.PSECT	F$RMSOPEN0NAM,GBL,NOWRT

                                     0005       F$RMSOPEN0NAM0:

            68            38     E1  0005   362 	BBC	#FAB$V_NAM+FOP,(R8),15$		; BRANCH IF NOT DOING OPEN BY NAM BLK

                          0A         0008       

                       2A A7     D5  0009   363 	TSTL	NAM$W_DID(R7)			; WAS DIRECTORY ID AN INPUT?

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  10

045             RM$XPFN  -  FILENAME EXPANSION CONTROL ROUTINE                                                                   (3)



                          39     12  000C   364 	BNEQ	XITNAM				; BRANCH IF YES (DON'T OUTPUT ANYTHING)

                       24 A7     D5  000E   365 	TSTL	NAM$W_FID(R7)			; DO WE HAVE A FILE ID?

                          34     12  0011   366 	BNEQ	XITNAM				; BRANCH IF YES (NO EXPANDED STRING)

            5C         EA AF     9E  0013   367 15$:	MOVAB	EXPARGL,AP			; ADDRESS OF RM$EXPSTRING ARG LIST

                          00CF   30  0017   368 	BSBW	RM$EXPSTRING			; RETURN EXPANDED STRING

                                     001A   369 ;

                                     001A   370 ;  FILL IN THE FILENAME STATUS BITS

                                     001A   371 ;

                       05 AA     95  001A   372 	TSTB	FWA$B_DIRWCFLGS(R10)		; ANY DIRECTORY WILD CARDS SEEN?

                          04     13  001D   373 	BEQL	20$				; BRANCH IF NONE

                                     001F   374 	SSB	#FWA$V_WILD_DIR,(R10)		; SET SUMMARY BIT

            6A            1C     E2  001F       		BBSS	#FWA$V_WILD_DIR,(R10),30000$

                          00         0022       

                                     0023       30000$:

                       34 A7     D4  0023   375 20$:	CLRL	NAM$L_FNB(R7)				; CLEAR THE FNB

            00         02 AA     F0  0026   376 	INSV	FWA$B_WILDFLGS(R10),#0,#9,NAM$L_FNB(R7)	; SET LOW 9 BITS

         34 A7            09         002A       

                       08 AA     95  002D   377 	TSTB	FWA$B_ESCFLG(R10)			; PPF FLAG SET?

                          05     13  0030   378 	BEQL	40$					; BRANCH IF NOT

                                     0032   379 	SSB	#NAM$V_PPF,NAM$L_FNB(R7)		; YES - SET FLAG

         34 A7            10     E2  0032       		BBSS	#NAM$V_PPF,NAM$L_FNB(R7),30001$

                          00         0036       

                                     0037       30001$:

            07            19     EF  0037   380 40$:	EXTZV	#FWA$V_NODE,#7,(R10),R1			; GET NEXT 7 BITS

            51            6A         003A       

            11            51     F0  003C   381 	INSV	R1,#NAM$V_NODE,#7,NAM$L_FNB(R7)		; AND SET THEM

         34 A7            07         003F       

                                     0042   382 	ASSUME	NAM$V_WILD_UFD EQ 24

         37 A7         05 AA     90  0042   383 	MOVB	FWA$B_DIRWCFLGS(R10),NAM$L_FNB+3(R7)	; SET DIR WILD FLAGS

                                 05  0047   384 XITNAM:	RSB						; RETURN TO XPFN CALLER

                                     0048   385 	$PSECT_RESTORE

                                 00000061       		.RESTORE

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  11

045             RM$XPFN  -  FILENAME EXPANSION CONTROL ROUTINE                                                                   (3)



                                     0061   387 ;++

                                     0061   388 ; SUBROUTINE TO APPEND FILE TYPE AND VERSION TO THE FILE NAME

                                     0061   389 ;

                                     0061   390 ; INPUT:

                                     0061   391 ;

                                     0061   392 ;	R6 = DESCRIPTOR OF FIELD TO APPEND

                                     0061   393 ;	R3 = DESTINATION ADDRESS

                                     0061   394 ;

                                     0061   395 ; OUTPUT:

                                     0061   396 ;

                                     0061   397 ;	THE DESCRIPTOR POINTED AT BY R6 IS UPDATED TO POINT TO THE MOVED STRING

                                     0061   398 ;	R6 = R6+8

                                     0061   399 ;	R3 = ADDRESS PAST LAST BYTE MOVED

                                     0061   400 ;	R0,R1,R2,R4,R5, DESTROYED

                                     0061   401 ;--

            50            86     D0  0061   402 MOVNXT:	MOVL	(R6)+,R0			; GET LENGTH

            51            66     D0  0064   403 	MOVL	(R6),R1				; GET ADDR OF STRING

            86            53     D0  0067   404 	MOVL	R3,(R6)+			; SAVE DESTINATION ADDR IN DESCRIPTOR

            61            50     28  006A   405 	MOVC3	R0,(R1),(R3)	 		; MOVE FIELD

                          63         006D       

                                 05  006E   406 	RSB

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  12

045             RM$XPFN  -  FILENAME EXPANSION CONTROL ROUTINE                                                                   (3)



                                     006F   408 ;

                                     006F   409 ; SUBROUTINE TO VERIFY THAT R7 REALLY POINTS TO AN ACCESSIBLE

                                     006F   410 ; NAME BLOCK

                                     006F   411 ;

                                     006F   412 ;  INPUTS:

                                     006F   413 ;

                                     006F   414 ;	R9 = IFAB ADDRESS

                                     006F   415 ;	R7 = NAM BLOCK ADDR

                                     006F   416 ;

                                     006F   417 ; OUTPUTS:

                                     006F   418 ;

                                     006F   419 ;	R6 = NAME BLOCK SIZE

                                     006F   420 ;

                                     006F   421 ; IF AN ERROR OCCURS, R0 IS SET TO THE ERROR CODE, THE RETURN

                                     006F   422 ; PC IS POPPED AND AN RSB IS DONE

                                     006F   423 ;

                                     006F   424 ;

                                     006F   425 	$NEWPSECT	F$RMSOPEN0NAM

                                     006F       		.SAVE

                                 00000048       		.PSECT	F$RMSOPEN0NAM,GBL,NOWRT

                                     0048   426 RM$CHKNAMBLK::

            56            38     D0  0048   427 	MOVL	#NAM$C_BLN,R6			; NAME BLOCK LENGTH

                          0021'  30  004B   428 	BSBW	PROBESTRING			; CHECK IT OUT

                          0C     13  004E   429 	BEQL	ERRNAM				; BRANCH IF PROBLEM

            02            67     91  0050   430 	CMPB	(R7),#NAM$C_BID			; IS IT A NAME BLOCK?

                          07     12  0053   431 	BNEQ	ERRNAM				; BRANCH IF NOT

            38         01 A7     91  0055   432 	CMPB	NAM$B_BLN(R7),#NAM$C_BLN	; RIGHT LENGTH?

                          01     1F  0059   433 	BLSSU	ERRNAM				; BRANCH IF NOT LONG ENOUGH

                                 05  005B   434 	RSB

                                     005C   435 ERRNAM:	$PSECT_BR	L$RMS0

                          FFA1'  31  005C       		BRW	L$RMS01

                                     005F       		.SAVE

                                 00000000       		.PSECT	L$RMS0,GBL,NOWRT

                                     0000       L$RMS01:

                          01     BA  0000   436 	POPR	#^M<R0>				; POP THE RETURN PC

                                     0002   437 	RMSERR	NAM				; SHOW PROBLEM

            50       0000'8F     3C  0002       		MOVZWL	#<RMS$_NAM&^XFFFF>,R0

                                 05  0007   438 	RSB

                                     0008   439 	$PSECT_RESTORE

                                 0000005F       		.RESTORE

                                     005F   440 ;

                                     005F   441 ERRRLF:	$PSECT_BR	L$RMS0

                          FFA6'  31  005F       		BRW	L$RMS02

                                     0062       		.SAVE

                                 00000008       		.PSECT	L$RMS0,GBL,NOWRT

                                     0008       L$RMS02:

                                     0008   442 	RMSERR	RLF				; CAN'T ACCESS RELATED FILE NAME

            50       0000'8F     3C  0008       		MOVZWL	#<RMS$_RLF&^XFFFF>,R0

                                 05  000D   443 	RSB

                                     000E   444 	$PSECT_RESTORE

                                 00000062       		.RESTORE

                                     0062   445 ;

                                     0062   446 ERRDVI:	$PSECT_BR	L$RMS0

                          FFA9'  31  0062       		BRW	L$RMS03

                                     0065       		.SAVE

                                 0000000E       		.PSECT	L$RMS0,GBL,NOWRT

                                     000E       L$RMS03:

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  13

045             RM$XPFN  -  FILENAME EXPANSION CONTROL ROUTINE                                                                   (3)



                                     000E   447 	RMSERR	DVI				; INVALID DEVICE I.D. FIELD

            50       0000'8F     3C  000E       		MOVZWL	#<RMS$_DVI&^XFFFF>,R0

                                 05  0013   448 	RSB

                                     0014   449 	$PSECT_RESTORE

                                 00000065       		.RESTORE

                                     0065   450 	$PSECT_RESTORE				; (BACK TO F$RMSOPEN0)

                                 0000006F       		.RESTORE

                                     006F   451 ;

                                     006F   452 ;

                                     006F   453 ;

                                     006F   454 ; PROBE STRING DESCRIBED IN R6,R7 FOR READABILITY

                                     006F   455 ;	(R9 MUST BE = IFAB ADDR)

                                     006F   456 ; SETS Z-BIT IF PROBE FAILS

                                     006F   457 ;

                                     006F   458 PROBESTRING:

            56         0A A9     0C  006F   459 	PROBER	IFB$B_MODE(R9),R6,(R7)		; PROBER BUFFER

                          67         0073       

                                 05  0074   460 	RSB

                                     0075   461 ;

                                     0075   462 ; HANDLE ERRORS

                                     0075   463 ;

                                     0075   464 DIR_TOO_LONG:	$PSECT_BR	L$RMS0

                          FF9C'  31  0075       		BRW	L$RMS04

                                     0078       		.SAVE

                                 00000014       		.PSECT	L$RMS0,GBL,NOWRT

                                     0014       L$RMS04:

                                     0014   465 	RMSERR	DIR				; DIRECTORY SPEC TOO LONG

            50       0000'8F     3C  0014       		MOVZWL	#<RMS$_DIR&^XFFFF>,R0

                                 05  0019   466 	RSB

                                     001A   467 	$PSECT_RESTORE

                                 00000078       		.RESTORE

                                     0078   468 ;

                                     0078   469 ERRFNA:	$PSECT_BR	L$RMS0

                          FF9F'  31  0078       		BRW	L$RMS05

                                     007B       		.SAVE

                                 0000001A       		.PSECT	L$RMS0,GBL,NOWRT

                                     001A       L$RMS05:

                                     001A   470 	RMSERR	FNA				; CAN'T ACCESS FILENAME STRING

            50       0000'8F     3C  001A       		MOVZWL	#<RMS$_FNA&^XFFFF>,R0

                                 05  001F   471 	RSB

                                     0020   472 	$PSECT_RESTORE

                                 0000007B       		.RESTORE

                                     007B   473 ;

                                     007B   474 ERRDNA:	$PSECT_BR	L$RMS0

                          FFA2'  31  007B       		BRW	L$RMS06

                                     007E       		.SAVE

                                 00000020       		.PSECT	L$RMS0,GBL,NOWRT

                                     0020       L$RMS06:

                                     0020   475 	RMSERR	DNA				; CAN'T ACCESS DEFAULT FILENAME STRING

            50       0000'8F     3C  0020       		MOVZWL	#<RMS$_DNA&^XFFFF>,R0

                                 05  0025   476 	RSB

                                     0026   477 	$PSECT_RESTORE

                                 0000007E       		.RESTORE

                                     007E   478 

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  14

045             RM$XPFN  -  FILENAME EXPANSION CONTROL ROUTINE                                                                   (4)



                                     007E   480 ;++

                                     007E   481 ;

                                     007E   482 ; EXPAND_NAME CONTROLS THE PARSING OF THE

                                     007E   483 ; PRIMARY FILENAME STRING AND THE APPLICATION

                                     007E   484 ; OF THE VARIOUS DEFAULTS.

                                     007E   485 ;

                                     007E   486 ; IT PERFORMS ITS FUNCTIONS BY SELECTING THE

                                     007E   487 ; NEXT STRING FOR PARSING, VERIFYING ITS

                                     007E   488 ; READABILITY AND CALLING PARSE_STRING 

                                     007E   489 ; TO INCLUDE IT.

                                     007E   490 ;

                                     007E   491 ; EXPAND_NAME IS ALSO CALLED RECURSIVELY BY PARSE_STRING

                                     007E   492 ; AT THE ENTRY POINT DFDIR TO APPLY

                                     007E   493 ; THE DEFAULT FILE DIRECTORY WHEN THE DIRECTORY SPEC IS

                                     007E   494 ; OF THE FORM [] OR [.SUB-DIRECTORY].

                                     007E   495 ;

                                     007E   496 ; SAME INPUTS AS FOR RM$XPFN.

                                     007E   497 ; SAME OUTPUTS EXCEPT THAT THE EXPANDED NAME

                                     007E   498 ; STRING IS NOT BUILT UP FROM THE PARTS.

                                     007E   499 ;--

                                     007E   500 EXPAND_NAME:

                                     007E   501 ;

                                     007E   502 ;  CHECK FOR NON-ZERO DEVICE ID IN THE NAME BLOCK AND IF FOUND

                                     007E   503 ;  USE IT TO PROVIDE A DEVICE SPEC

                                     007E   504 ;

            68            38     E1  007E   505 	BBC	#FAB$V_NAM+FOP,(R8),CHKFNA	; BRANCH IF NAM DVI NOT TO BE USED

                          03         0081       

                                     0082   506 	$PSECT_BR	F$RMSOPEN0NAM

                          FFE0'  31  0082       		BRW	F$RMSOPEN0NAM7

                                     0085       		.SAVE

                                 00000065       		.PSECT	F$RMSOPEN0NAM,GBL,NOWRT

                                     0065       F$RMSOPEN0NAM7:

            57         28 A8     D0  0065   507 	MOVL	FAB$L_NAM(R8),R7	; GET NAM BLOCK ADDRESS

                          33     13  0069   508 	BEQL	10$			; BRANCH IF NONE SPECED

                          DB     10  006B   509 	BSBB	RM$CHKNAMBLK		; CHECK IT OUT

            55         14 A7     9E  006D   510 	MOVAB	NAM$T_DVI(R7),R5	; GET DEVICE I.D. STRING ADDR

            56            85     9A  0071   511 	MOVZBL	(R5)+,R6		; GET STRING LENGTH

                          2E     13  0074   512 	BEQL	25$			; BRANCH IF ZERO

            0F            56     D1  0076   513 	CMPL	R6,#15			; DEVICE I.D. > 15 CHARS?

                          E7     1A  0079   514 	BGTRU	ERRDVI			; BRANCH IF SO

            57         28 AA     D0  007B   515 	MOVL	FWA$Q_XLTBUF2+4(R10),R7	; GET ADDR OF BUFFER TO COPY DVI

            65            56     28  007F   516 	MOVC3	R6,(R5),(R7)		; MOVE THE STRING

                          67         0082       

            63            3A     90  0083   517 	MOVB	#^A/:/,(R3)		; APPEND A COLON

                          56     D6  0086   518 	INCL	R6			; AND COUNT IT

                          005A'  30  0088   519 	BSBW	PARSE_STRING		; PARSE IT

            6A            20     88  008B   520 	BISB2	#FWA$M_NAM_DVI,(R10)	; FLAG DEVICE CAME FROM NAM BLK

            57         28 A8     D0  008E   521 	MOVL	FAB$L_NAM(R8),R7	; GET NAM BLOCK ADDR AGAIN

                       24 A7     D5  0092   522 	TSTL	NAM$W_FID(R7)		; IS FILE ID NON-ZERO?

                          07     13  0095   523 	BEQL	10$			; CONTINUE PARSE IF NOT

            69            32     E1  0097   524 	BBC	#IFB$V_CREATE,(R9),20$	; ALL DONE UNLESS CREATE

                          06         009A       

                       24 A7     D4  009B   525 5$:	CLRL	NAM$W_FID(R7)		; ZERO THE FILE ID FOR CREATE

                          FFE4'  31  009E   526 10$:	BRW	CHKFNA			; CONTINUE PARSE

                          003D'  31  00A1   527 20$:	BRW	ENDPRS			; ALL SET FOR OPEN BY FILE ID

                                     00A4   528 ;

                                     00A4   529 ;  DON'T ALLOW DID OR FID TO BE USED SINCE DVI IS BAD

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  15

045             RM$XPFN  -  FILENAME EXPANSION CONTROL ROUTINE                                                                   (4)



                                     00A4   530 ;

                       2A A7     D4  00A4   531 25$:	CLRL	NAM$W_DID(R7)

                          F2     11  00A7   532 	BRB	5$

                                     00A9   533 	$PSECT_RESTORE

                                 00000085       		.RESTORE

                                     0085   534 ;

                                     0085   535 ; GET FILENAME STRING DESCRIPTOR

                                     0085   536 ;

            57         2C A8     D0  0085   537 CHKFNA:	MOVL	FAB$L_FNA(R8),R7

            56         34 A8     9A  0089   538 	MOVZBL	FAB$B_FNS(R8),R6

                          0C     13  008D   539 	BEQL	CHKDNA			; BRANCH IF ZERO LENGTH

                          DE     10  008F   540 	BSBB	PROBESTRING		; PROBE READABILITY

                          E5     13  0091   541 	BEQL	ERRFNA			; BRANCH IF INACCESSIBLE

            6A            10     88  0093   542 	BISB2	#FWA$M_FNA_PASS,(R10)	; FLAG THIS PASS AS SPECIAL

                                     0096   543 					; FOR SETTING EXPLICIT TYPE

                                     0096   544 					; AND VERSION FLAGS

                          4D     10  0096   545 	BSBB	PARSE_STRING		; PARSE THE STRING

            6A            10     8A  0098   546 	BICB2	#FWA$M_FNA_PASS,(R10)	; END OF FNA PASS

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  16

045             RM$XPFN  -  FILENAME EXPANSION CONTROL ROUTINE                                                                   (4)



                                     009B   548 ;

                                     009B   549 ; SINCE PARSE_STRING RETURNED, THE FILENAME IS

                                     009B   550 ; NOT FULLY QUALIFIED AND THEREFORE DEFAULTS

                                     009B   551 ; MUST BE APPLIED. START WITH DEFAULT FILENAME STRING.

                                     009B   552 ;

            6A            01     88  009B   553 CHKDNA:	BISB2	#FWA$M_DUPOK,(R10)	; INDICATE DUPLICATE PARTS ALLOWED

            57         30 A8     D0  009E   554 	MOVL	FAB$L_DNA(R8),R7	; GET DEFAULT FILENAME STRING

                          0C     13  00A2   555 	BEQL	CHKRLF			; BRANCH IF NONE

            56         35 A8     9A  00A4   556 	MOVZBL	FAB$B_DNS(R8),R6	; GET ITS LENGTH

                          06     13  00A8   557 	BEQL	CHKRLF			; BRANCH IF ZERO

                          C3     10  00AA   558 	BSBB	PROBESTRING		; PROBE READABILITY

                          CD     13  00AC   559 	BEQL	ERRDNA			; BRANCH IF PROBLEMS

                          35     10  00AE   560 	BSBB	PARSE_STRING		; PARSE IT

                                     00B0   561 ;

                                     00B0   562 ; FILENAME STILL NOT FULLY QUALIFIED

                                     00B0   563 ; CHECK FOR RELATED FILE AND USE IT TO SUPPLY MISSING ELEMENTS

                                     00B0   564 ;

            57         28 A8     D0  00B0   565 CHKRLF:	MOVL	FAB$L_NAM(R8),R7	; GET NAM BLOCK ADDRESS

                          03     13  00B4   566 	BEQL	CHKDEV			; BRANCH IF NOT SPEC'ED

                                     00B6   567 	$PSECT_BR	F$RMSOPEN0NAM

                          FFF0'  31  00B6       		BRW	F$RMSOPEN0NAM8

                                     00B9       		.SAVE

                                 000000A9       		.PSECT	F$RMSOPEN0NAM,GBL,NOWRT

                                     00A9       F$RMSOPEN0NAM8:

                                     00A9   568 ;

                                     00A9   569 ;  FIRST CHECK TO SEE IF THE PARSE OF THE RELATED FILE COULD SUPPLY

                                     00A9   570 ;  ANY OF THE MISSING FILENAME ELEMENTS, AND IF NOT, AVOID THIS STEP.

                                     00A9   571 ;

            68            3D     E1  00A9   572 	BBC	#FAB$V_OFP+FOP,(R8),10$	; BRANCH IF INPUT FILE PARSE

                          0F         00AC       

                                     00AD   573 	ASSUME	FWA$V_NAME EQ FWA$V_TYPE+1

            02            0C     ED  00AD   574 	CMPZV	#FWA$V_TYPE,#2,(R10),#3	; EITHER NAME OR TYPE MISSING?

            03            6A         00B0       

                          0F     12  00B2   575 	BNEQ	15$			; BRANCH IF YES (RLF WILL PROVIDE)

         02 AA            38     93  00B4   576 	BITB	#WCNTV_MASK,FWA$B_WILDFLGS(R10)	; WILD NAME, TYPE OR VER?

                          2C     13  00B8   577 	BEQL	20$			; BRANCH IF NOT (OMITTING PARSE)

                          07     11  00BA   578 	BRB	15$			; YES - RLF WILL PROVIDE

                                     00BC   579 ;

                                     00BC   580 ;  INPUT FILE PARSE

                                     00BC   581 ;

                                     00BC   582 10$:	ASSUME	FWA$V_NAME EQ FWA$V_TYPE+1

                                     00BC   583 	ASSUME	FWA$V_DIR EQ FWA$V_NAME+1

                                     00BC   584 	ASSUME	FWA$V_DEVICE EQ FWA$V_DIR+1

            04            0C     ED  00BC   585 	CMPZV	#FWA$V_TYPE,#4,(R10),#15	; DEV, DIR, NAME OR TYPE MISSING?

            0F            6A         00BF       

                          23     13  00C1   586 	BEQL	20$			; BRANCH IF NOT (RLF CAN'T HELP)

                                     00C3   587 ;

                                     00C3   588 ;  PICK UP THE RELATED FILE NAME STRING

                                     00C3   589 ;

                          83     10  00C3   590 15$:	BSBB	RM$CHKNAMBLK		; CHECK IT OUT

            57         10 A7     D0  00C5   591 	MOVL	NAM$L_RLF(R7),R7	; GET RELATED NAM BLK ADDR

                          1B     13  00C9   592 	BEQL	20$			; BRANCH IF NOT SPECED

                          FF7A   30  00CB   593 	BSBW	RM$CHKNAMBLK		; CHECK IT OUT

            56         03 A7     9A  00CE   594 	MOVZBL	NAM$B_RSL(R7),R6	; GET RESULTANT STRING LENGTH

                          12     13  00D2   595 	BEQL	20$			; & BRANCH IF ZERO (I.E. IGNORE)

            57         04 A7     D0  00D4   596 	MOVL	NAM$L_RSA(R7),R7	; GET RESULTANT STRING ADDR

                          FF94'  30  00D8   597 	BSBW	PROBESTRING		; CHECK IT OUT

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  17

045             RM$XPFN  -  FILENAME EXPANSION CONTROL ROUTINE                                                                   (4)



                          82     13  00DB   598 	BEQL	ERRRLF

                                     00DD   599 ;

                                     00DD   600 ; AT LAST WE HAVE A RESULTANT STRING ! PARSE IT.

                                     00DD   601 ;

            6A            09     88  00DD   602 	BISB2	#FWA$M_RLF_PASS!FWA$M_DUPOK,(R10)	; FLAG PARSE OF RLF NAME

                                     00E0   603 							; AND DUPLICATES O.K.

                          0002'  30  00E0   604 	BSBW	PARSE_STRING		; PARSE IT

            6A            08     8A  00E3   605 	BICB2	#FWA$M_RLF_PASS,(R10)	; TURN OFF OLD FLAG

                          FFD0'  31  00E6   606 20$:	BRW	CHKDEV			;PROCESS DEFAULT DEVICE

                                     00E9   607 	$PSECT_RESTORE	

                                 000000B9       		.RESTORE

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  18

045             RM$XPFN  -  FILENAME EXPANSION CONTROL ROUTINE                                                                   (4)



                                     00B9   609 ;

                                     00B9   610 ;

                                     00B9   611 ; FILE NAME STILL NOT FULLY QUALIFIED

                                     00B9   612 ; GET SYSTEM DEFAULTS UNLESS NODE SPECIFIED

                                     00B9   613 ;

            6A            19     E0  00B9   614 CHKDEV:	BBS	#FWA$V_NODE,(R10),ENDPRS ; ALL SET IF NODE PRESENT

                          24         00BC       

            6A            0F     E0  00BD   615 	BBS	#FWA$V_DEVICE,(R10),CHKDIR ; BRANCH IF DEVICE PRESENT

                          0D         00C0       

            6A            01     C8  00C1   616 	BISL2	#FWA$M_DUPOK,(R10)	; REALLOW DUPLICATES

            57       FF38 CF     9E  00C4   617 	MOVAB	DISK,R7			; POINT TO LOGICAL NAME 'SYS$DISK:'

            56            09     9A  00C9   618 	MOVZBL	#DISKSZ,R6		; LENGTH OF STRING

                          17     10  00CC   619 	BSBB	PARSE_STRING		; AND STICK THAT IN

                                     00CE   620 ;

                                     00CE   621 ; STILL NOT THERE YET

                                     00CE   622 ; LAST HOPE IS TO APPLY THE DEFAULT DIRECTORY

                                     00CE   623 ;

            6A            0E     E0  00CE   624 CHKDIR:	BBS	#FWA$V_DIR,(R10),ENDPRS	; BRANCH IF DIRECTORY PRESENT

                          0F         00D1       

            6A            01     C8  00D2   625 	BISL2	#FWA$M_DUPOK,(R10)	; REALLOW DUPLICATES

            57   00000000'9F     9E  00D5   626 DFDIR:	MOVAB	@#PIO$GT_DDSTRING,R7	; GET ADDR OF STRING

            56            87     9A  00DC   627 	MOVZBL	(R7)+,R6		; AND ITS LENGTH

                          04     10  00DF   628 	BSBB	PARSE_STRING		; AND MOVE IT IN

                                     00E1   629 ;

                                     00E1   630 ; END OF PARSE - NOT NECESSARILY ALL ELEMENTS PRESENT

                                     00E1   631 ; BUT AT LEAST PROBLEM FREE

                                     00E1   632 ;

                                     00E1   633 ENDPRS:	RMSSUC

            50            01     D0  00E1       		MOVL	#1,R0

                                 05  00E4   634 	RSB

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  19

045             RM$XPFN  -  FILENAME EXPANSION CONTROL ROUTINE                                                                   (6)



                                     00E5   636 

                                     00E5   637 	.SBTTL	PARSE_STRING  -  PARSE INDIVIDUAL FILENAME STRING ROUTINE

                                     00E5   638 ;++

                                     00E5   639 ; FUNCTIONAL DESCRIPTION

                                     00E5   640 ;

                                     00E5   641 ; THIS ROUTINE IS THE INTERMEDIATE - LEVEL FILENAME STRING PARSER.

                                     00E5   642 ; IT ACCEPTS THE PARTICULAR STRING TO BE PARSED AS INPUT FROM

                                     00E5   643 ; EXPAND_NAME AND BREAKS IT UP INTO ITS CONSTITUENT FILENAME

                                     00E5   644 ; ELEMENTS AND EITHER SAVES THESE (BY MOVING THEM TO THE

                                     00E5   645 ; APPROPRIATE ELEMENT BUFFER) OR DISCARDS THEM IF THEY

                                     00E5   646 ; ARE PERMISSABLE DUPLICATES.

                                     00E5   647 ;

                                     00E5   648 ; IF A LOGICAL/DEVICE NAME IS SEEN, IT IS HANDLED AS FOLLOWS:

                                     00E5   649 ;	INITIALLY IT IS NOT MOVED; INSTEAD A DESCRIPTOR IS

                                     00E5   650 ;	SET UP TO POINT TO IT. AFTER PARSING ALL REMAINING

                                     00E5   651 ;	ELEMENTS OF THE STRING, AN ATTEMPT IS MADE TO TRANSLATE

                                     00E5   652 ;	THE LOGICAL/DEVICE NAME AS A LOGICAL NAME. IF

                                     00E5   653 ;	THIS SUCCEEDS, THE EQUIVALENCE STRING IS THEN

                                     00E5   654 ;	IN TURN PARSED AND ITS ELEMENTS MERGED IN

                                     00E5   655 ;	OR DISCARDED AS FOR THE ORIGINAL STRING. IF THE

                                     00E5   656 ;	TRANSLATION FAILS, THE EQUIVALENCE STRING (WHICH

                                     00E5   657 ;	IS IDENTICAL TO THE LOGICAL/DEVICE NAME STRING

                                     00E5   658 ;	MINUS A LEADING UNDERSCORE, IF ANY) IS TAKEN

                                     00E5   659 ;	AS A PHYSICAL DEVICE NAME AND PROCESSED ACCORDINGLY.

                                     00E5   660 ;

                                     00E5   661 ; A LOGICAL/FILENAME IS TREATED SIMILARLY, WITH THE FOLLOWING

                                     00E5   662 ; DIFFERENCES:

                                     00E5   663 ;	IT IS THE ONLY STRING ELEMENT HENCE THERE IS NO

                                     00E5   664 ;	NEED TO CONTINUE PARSING THE REMAINDER OF THE 

                                     00E5   665 ;	INPUT STRING. MOREOVER, IF THE TRANSLATION DOES NOT

                                     00E5   666 ;	SUCCEED THE EQUIVALENCE STRING IS TREATED AS A FILENAME.

                                     00E5   667 ;

                                     00E5   668 ; THE GENERAL TECHNIQUE USED BY PARSE_STRING IS TO USE THE

                                     00E5   669 ; NEXT_FIELD SUBROUTINE TO ISOLATE A SINGLE FIELD, THEN

                                     00E5   670 ; TO TREAT IT AS A NODE, DEVICE, DIRECTORY, OR NAME ELEMENT

                                     00E5   671 ; BASED UPON THE FIELD TERMINATOR AND CURRENT CONTEXT,

                                     00E5   672 ; AND FINALLY TO USE THE CHECK_FIELD SUBROUTINE TO

                                     00E5   673 ; PERFORM VARIOUS CHECKS ON THE FIELD CONTENTS AND

                                     00E5   674 ; COPY THE FIELD TO THE PROPER ELEMENT BUFFER, SETTING

                                     00E5   675 ; THE FIELD'S FLAG.

                                     00E5   676 ;

                                     00E5   677 ; CALLING SEQUENCE:

                                     00E5   678 ;

                                     00E5   679 ;	BSBW	PARSE_STRING

                                     00E5   680 ;

                                     00E5   681 ; INPUT PARAMETERS:

                                     00E5   682 ;

                                     00E5   683 ;	R10	FWA ADDRESS

                                     00E5   684 ;	R7	FILENAME STRING ADDRESS

                                     00E5   685 ;	R6	FILENAME STRING LENGTH

                                     00E5   686 ;

                                     00E5   687 ; IMPLICIT INPUTS:

                                     00E5   688 ;

                                     00E5   689 ;	THE CURRENT CONTENTS OF THE FWA.

                                     00E5   690 ;	THE CONTENTS OF THE FILENAME STRING INPUT.

                                     00E5   691 ;	THE CONTENTS OF THE LOGICAL NAME TABLES

                                     00E5   692 ;

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  20

045             PARSE_STRING  -  PARSE INDIVIDUAL FILENAME STRI                                                                  (6)



                                     00E5   693 ; OUTPUTS:

                                     00E5   694 ;

                                     00E5   695 ;	R0 THRU R7, AP DESTROYED

                                     00E5   696 ;

                                     00E5   697 ; IMPLICIT OUTPUTS:

                                     00E5   698 ;

                                     00E5   699 ;	THE FWA IS UPDATED AS PER THE FILENAME ELEMENT SEEN

                                     00E5   700 ;

                                     00E5   701 ; COMPLETION CODES:

                                     00E5   702 ;

                                     00E5   703 ;	PARSE_STRING RETURNS TO THE CALLER ONLY IF THERE WERE

                                     00E5   704 ;	NO ERRORS ENCOUNTERED AND THERE REMAIN ONE OR

                                     00E5   705 ;	MORE MISSING FILENAME ELEMENTS (NODE EXCLUDED)

                                     00E5   706 ;	IF EITHER OR THESE OCCUR THE RETURN PC IS

                                     00E5   707 ;	POPPED FROM THE STACK AND, IF AN ERROR, AN RSB

                                     00E5   708 ;	IS PERFORMED WITH THE STATUS CODE IN R0 (STANDARD

                                     00E5   709 ;	RMS), ELSE A BRANCH TO ENDPRS IS TAKEN.

                                     00E5   710 ;

                                     00E5   711 ; SIDE EFFECTS:

                                     00E5   712 ;

                                     00E5   713 ;	NONE.

                                     00E5   714 ;

                                     00E5   715 ;--

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  21

045             PARSE_STRING  -  PARSE INDIVIDUAL FILENAME STRI                                                                  (6)



                                     00E5   717 PARSE_STRING:

                                     00E5   718 	$TSTPT	PARSES

                 00000200'9F     D6  00E5       		INCL	@#PIO$GL_FMLH+512+TPT$L_PARSES

            6A            06     8A  00EB   719 	BICB2	#<FWA$M_NAMEFLG!FWA$M_TYPEFLG>,(R10) ; CLEAR TEMPORARY FLAGS

                                     00EE   720 NXTDEV:	NXTFLD	EOS=LOGNM_OR_FILENM,NULL=PRSXIT	; ISOLATE FIRST FIELD

                          0276   30  00EE       		BSBW	NEXT_FIELD

                                 AA' 00F1       30002$:		.BYTE	LOGNM_OR_FILENM-30002$			; OFFSET TO LOGNM_OR_FILENM ROUTINE

                                 79' 00F2       		.BYTE	PRSXIT-30002$-1		; OFFSET TO PRSXIT ROUTINE

                                     00F3   721 CHECK_COLON:

            3A            53     91  00F3   722 	CMPB	R3,#^A/:/		; WAS COLON TERMINATOR?

                          08     12  00F6   723 	BNEQ	CHECK_DIR		; IF NOT GO CHECK FOR DIRECTORY

                          00C8   31  00F8   724 	BRW	GOTCOLON		; GO PROCESS NODE OR LOGICAL/DEVICE-NAME

                                     00FB   725 NXTDIR:	NXTFLD	EOS=GOTNAME,NULL=CHECK_LOGNAME

                          0269   30  00FB       		BSBW	NEXT_FIELD

                                 1F' 00FE       30003$:		.BYTE	GOTNAME-30003$			; OFFSET TO GOTNAME ROUTINE

                                 51' 00FF       		.BYTE	CHECK_LOGNAME-30003$-1		; OFFSET TO CHECK_LOGNAME ROUTINE

                                     0100   726 ;

                                     0100   727 ; CHECK FOR DIRECTORY

                                     0100   728 ;

                                     0100   729 CHECK_DIR:

         5B 8F            53     91  0100   730 	CMPB	R3,#^A/[/		; ACCEPT EITHER '[' OR '<'

                          05     13  0104   731 	BEQL	10$			; AS DIRECTORY INDICATOR

            3C            53     91  0106   732 	CMPB	R3,#^A/</

                          08     12  0109   733 	BNEQ	CHECK_NAME		; BRANCH IF TERMINATOR NEITHER < NOR [

                          0100   31  010B   734 10$:	BRW	PARSE_DIR		; GO PARSE DIRECTORY SPEC

                                     010E   735 ;

                                     010E   736 ; GET NEXT NAME FIELD

                                     010E   737 ;

                                     010E   738 NXTNAM:	NXTFLD	EOS=GOTNAME,NULL=CHECK_LOGNAME

                          0256   30  010E       		BSBW	NEXT_FIELD

                                 0C' 0111       30004$:		.BYTE	GOTNAME-30004$			; OFFSET TO GOTNAME ROUTINE

                                 3E' 0112       		.BYTE	CHECK_LOGNAME-30004$-1		; OFFSET TO CHECK_LOGNAME ROUTINE

                                     0113   739 ;

                                     0113   740 ; WE SHOULD HAVE SOME TYPE OF NAME

                                     0113   741 ; MAYBE A FILENAME, TYPE, OR VERSION

                                     0113   742 ; CHECK TERMINATOR

                                     0113   743 ;

                                     0113   744 CHECK_NAME:

            2E            53     91  0113   745 	CMPB	R3,#^A/./		; WAS IT A PERIOD?

                          05     13  0116   746 	BEQL	GOTNAME			; BRANCH IF YES

            3B            53     91  0118   747 	CMPB	R3,#SEMICOLON		; HOW ABOUT SEMI?

                          79     12  011B   748 	BNEQ	ERRSYN			; BAD SYNTAX

                                     011D   749 ;

                                     011D   750 ; WE HAVE A NAME

                                     011D   751 ; IT WILL BE A FILENAME UNLESS WE'VE SEEN ONE IN WHICH CASE

                                     011D   752 ; IT WILL BE A FILETYPE UNLESS WE'VE SEEN ONE IN WHICH CASE

                                     011D   753 ; IT WILL BE A FILEVERSION

                                     011D   754 ;

            6A            01     E2  011D   755 GOTNAME: BBSS	#FWA$V_NAMEFLG,(R10),CHECK_TYPE ;BRANCH IF NAME SEEN THIS PASS

                          03         0120       

                          00B8   31  0121   756 	BRW	NAME			; GO PROCESS FILENAME

                                     0124   757 ;

                                     0124   758 ; FILE TYPE UNLESS ALREADY SEEN

                                     0124   759 ;

                                     0124   760 CHECK_TYPE:

            6A            02     E2  0124   761 	BBSS	#FWA$V_TYPEFLG,(R10),VERSION	; BRANCH IF TYPE SEEN THIS PASS

                          16         0127       

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  22

045             PARSE_STRING  -  PARSE INDIVIDUAL FILENAME STRI                                                                  (6)



                                     0128   762 	CHKFLD	CHECKS=<M_$_ !M_MINUS !M_NAMTYP>,-

                                     0128   763 		FIELD=TYPE,-

                                     0128   764 		MAXSIZ=FWA$C_MAXTYPE,ERR=TYP

                          0300   30  0128       		BSBW	CHECK_FIELD

                               00D0  012B       		.WORD	M_$_ !M_MINUS !M_NAMTYP

                                 03  012D       		.BYTE	FWA$C_MAXTYPE

                                 0C  012E       		.BYTE	FWA$V_TYPE

                                 8C  012F       		.BYTE	FWA$Q_TYPE

                               0000' 0130       		.WORD	RMS$_TYP&^XFFFF

            6A            04     E1  0132   765 	BBC	#FWA$V_FNA_PASS,(R10),NXTNAM	; BRANCH IF NOT PRIMARY NAME STRING

                          D8         0135       

            52            08     E0  0136   766 	BBS	#V_NOTERM,R2,CHECK_LOGNAME	; BRANCH IF TERMINATED BY EOS

                          16         0139       

            6A            10     E3  013A   767 	BBCS	#FWA$V_EXP_VER,(R10),NXTNAM	; SET EXPLICIT VERSION FLAG & BRANCH

                          D0         013D       

                                     013E   768 ;

                                     013E   769 ; FILE VERSION - DOESN'T CATCH ALL POSSIBLE ERRORS

                                     013E   770 ;

            52            08     E0  013E   771 VERSION: BBS	#V_NOTERM,R2,10$	; BRANCH IF VERSION TERMINATED BY EOS

                          04         0141       

                                     0142   772 	SSB	#V_INVALID,R2		; EOS ONLY LEGAL TERMINATOR FOR VERSION

            52            09     E2  0142       		BBSS	#V_INVALID,R2,30005$

                          00         0145       

                                     0146       30005$:

                                     0146   773 10$:	CHKFLD	CHECKS=<M_$_ !M_ALPHA>,-

                                     0146   774 		FIELD=VERSION,-

                                     0146   775 		MAXSIZ=FWA$C_MAXVER,ERR=VER

                          02E2   30  0146       		BSBW	CHECK_FIELD

                               0012  0149       		.WORD	M_$_ !M_ALPHA

                                 06  014B       		.BYTE	FWA$C_MAXVER

                                 0B  014C       		.BYTE	FWA$V_VERSION

                                 94  014D       		.BYTE	FWA$Q_VERSION

                               0000' 014E       		.WORD	RMS$_VER&^XFFFF

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  23

045             PARSE_STRING  -  PARSE INDIVIDUAL FILENAME STRI                                                                  (6)



                                     0150   777 ;

                                     0150   778 ; THE FILENAME STRING HAS BEEN PARSED INTO ITS BASIC PARTS

                                     0150   779 ; CHECK TO SEE IF WE GOT A LOGICAL NAME AND IF SO

                                     0150   780 ; GO ATTEMPT ITS TRANSLATION.

                                     0150   781 ;

                                     0150   782 CHECK_LOGNAME:

            6A            30     E5  0150   783 	BBCC	#FWA$V_LOGNAME,(R10),PRSXIT ; BRANCH IF NO LOGICAL NAME

                          17         0153       

            6A            05     E0  0154   784 	BBS	#FWA$V_NAM_DVI,(R10),10$  ; BRANCH IF DEVICE CAME FROM NAM BLK

                          04         0157       

                                     0158   785 					   ;  (I.E., DO THE TRANSLATION)

            6A            0F     E0  0158   786 	BBS	#FWA$V_DEVICE,(R10),DEVDUP ; BRANCH IF DEVICE ALREADY SEEN

                          60         015B       

                                     015C   787 ;

                                     015C   788 ; GO ATTEMPT TO TRANSLATE THE NAME

                                     015C   789 ; IF NO TRANSLATION RETURN HERE AND TREAT AS DEVICE NAME

                                     015C   790 ;

                          52     D4  015C   791 10$:	CLRL	R2			; INDICATE NO PROBLEMS IN FIELD

                          017A   30  015E   792 	BSBW	TRANSLATE

                                     0161   793 ;

                                     0161   794 ; IT APPEARS AS IF IT WAS A DEVICE NAME AFTER ALL

                                     0161   795 ; ALLOW THE NAME EVEN IF NOT IN STANDARD DEVICE NAME

                                     0161   796 ; FORMAT - IF TRULY INVALID IT WILL BE CAUGHT WHEN

                                     0161   797 ; ATTEMPTING TO ASSIGN THE CHANNEL

                                     0161   798 ; THIS ALLOWS FLEXIBILITY FOR DIFFERENT DEVICE/CONTROLLER/UNIT

                                     0161   799 ; NAMING SCHEMES AS WELL AS REMOTE NODE LOGICAL NAMES.

                                     0161   800 ;

                                     0161   801 	CHKFLD	FIELD=DEVICE,-		; COPY FIELD

                                     0161   802 		MAXSIZ=FWA$C_DEVBUFSIZ,ERR=DEV	; UNLESS TOO LONG

                          02C7   30  0161       		BSBW	CHECK_FIELD

                               0000  0164       		.WORD	

                                 0F  0166       		.BYTE	FWA$C_DEVBUFSIZ

                                 0F  0167       		.BYTE	FWA$V_DEVICE

                                 3C  0168       		.BYTE	FWA$Q_DEVICE

                               0000' 0169       		.WORD	RMS$_DEV&^XFFFF

                                     016B   803 ;

                                     016B   804 ; THE PARSE OF THIS STRING IS COMPLETE

                                     016B   805 ;

                                     016B   806 PRSXIT:

                                     016B   807 ;

                                     016B   808 ;  IF THIS WAS THE PARSE OF THE PRIMARY NAME STRING (FNA), HANDLE EXPLICIT

                                     016B   809 ;  FLAGS.  IN PARTICULAR, USE THE EXPLICIT TYPE AND VERSION FLAGS TO

                                     016B   810 ;  SET THE TYPE AND VERSION SEEN FLAGS (I.E., EXPLICIT NULLS TYPE AND

                                     016B   811 ;  VERSION CAUSE NO DEFAULTS TO BE TAKEN FOR THESE FIELDS).  ALSO,

                                     016B   812 ;  COPY THE CURRENT DEVICE AND DIRECTORY SEEN FLAGS TO THE EXPLICIT

                                     016B   813 ;  DEVICE AND DIRECTORY

                                     016B   814 ;

            6A            04     E1  016B   815 	BBC	#FWA$V_FNA_PASS,(R10),10$	; BRANCH IF NOT FNA PASS

                          10         016E       

                                     016F   816 

                                     016F   817 	ASSUME	FWA$V_EXP_VER EQ <FWA$B_WILDFLGS*8>

                                     016F   818 	ASSUME	FWA$V_EXP_TYPE EQ FWA$V_EXP_VER+1

                                     016F   819 	ASSUME	FWA$V_TYPE EQ FWA$V_VERSION+1

                                     016F   820 

            0B         02 AA     F0  016F   821 	INSV	FWA$B_WILDFLGS(R10),#FWA$V_VERSION,#2,(R10)

            6A            02         0173       

                                     0175   822 					; SET VERSION & TYPE FROM EXPLICIT

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  24

045             PARSE_STRING  -  PARSE INDIVIDUAL FILENAME STRI                                                                  (6)



                                     0175   823 

                                     0175   824 	ASSUME	FWA$V_EXP_DIR EQ FWA$V_EXP_DEV-1

                                     0175   825 	ASSUME	FWA$V_DIR EQ FWA$V_DEVICE-1

                                     0175   826 

            02            0E     EF  0175   827 	EXTZV	#FWA$V_DIR,#2,(R10),R0	; GET DEV AND DIR

            50            6A         0178       

            16            50     F0  017A   828 	INSV	R0,#FWA$V_EXP_DIR,#2,(R10)	;AND SET EXPLICIT DEV & DIR

            6A            02         017D       

                                     017F   829 ;

                                     017F   830 ; CHECK FOR FULLY QUALIFIED NAME

                                     017F   831 ; IF FIELDS MISSING, RETURN TO APPLY DEFAULTS

                                     017F   832 ;

         F8 8F         01 AA     91  017F   833 10$:	CMPB	FWA$B_FLDFLGS(R10),#FWA$C_ALL	; ALL OF DEV,DIR,NAM,TYP,VER FOUND?

                          0A     12  0184   834 	BNEQ	20$			; BRANCH IF NOT

            68            3D     E1  0186   835 	BBC	#FAB$V_OFP+FOP,(R8),PRSXIT1	; BRANCH IF INPUT FILE PARSE

                          07         0189       

                                     018A   836 					; (ALL SET)

         02 AA            38     93  018A   837 	BITB	#WCNTV_MASK,FWA$B_WILDFLGS(R10)	; WILD NAME, TYPE, OR VER?

                          01     13  018E   838 	BEQL	PRSXIT1			; BRANCH IF NONE (ALL DONE)

                                 05  0190   839 20$:	RSB				; RETURN TO APPLY DEFAULTS

                          01     BA  0191   840 PRSXIT1: POPR	#^M<R0>			; POP RETURN PC

                          FF4B   31  0193   841 	BRW	ENDPRS			; EXIT FROM PARSE SUCCESSFULLY

                                     0196   842 ;

                                     0196   843 ; WE HAVE A TERMINATOR THAT WAS UNEXPECTED OR OTHER UNRECOGNIZABLE SYNTAX.

                                     0196   844 ; GIVE IT A GENERAL SYNTAX ERROR

                                     0196   845 ;

                                     0196   846 ERRSYN:	$PSECT_BR	L$RMS0

                          FE8D'  31  0196       		BRW	L$RMS09

                                     0199       		.SAVE

                                 00000026       		.PSECT	L$RMS0,GBL,NOWRT

                                     0026       L$RMS09:

                                     0026   847 	RMSERR	SYN

            50       0000'8F     3C  0026       		MOVZWL	#<RMS$_SYN&^XFFFF>,R0

                          05     11  002B   848 	BRB	PRSERR

                                     002D   849 	$PSECT_RESTORE

                                 00000199       		.RESTORE

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  25

045             PARSE_STRING  -  PARSE INDIVIDUAL FILENAME STRI                                                                  (6)



                                     0199   851 GOTNAME1:				; BRANCH AID

                          82     11  0199   852 	BRB	GOTNAME			; GO PROCESS FILENAME

                                     019B   853 ;

                                     019B   854 ; WE HAVE A SINGLE FIELD WITH NO PUNCTUATION

                                     019B   855 ; IT IS EITHER A LOGICAL NAME OR A FILENAME

                                     019B   856 ; IN ORDER FOR IT TO BE A LOGICAL NAME THE FOLLOWING

                                     019B   857 ; MUST BE TRUE:

                                     019B   858 ;

                                     019B   859 ;	1.  THERE MUST BE NO OTHER FILENAME ELEMENTS

                                     019B   860 ;	2.  IT MUST TRANSLATE

                                     019B   861 ;

                                     019B   862 LOGNM_OR_FILENM:

                       01 AA     95  019B   863 	TSTB	FWA$B_FLDFLGS(R10)	; ANY FLAGS SET?

                          0B     13  019E   864 	BEQL	10$			; NO - CONTINUE

                                     01A0   865 	ASSUME	FWA$V_DEVICE GE 8

         80 8F         01 AA     91  01A0   866 	CMPB	FWA$B_FLDFLGS(R10),#FWA$M_DEVICE@-8	;ONLY DEVICE SEEN?

                          F2     12  01A5   867 	BNEQ	GOTNAME1			; NO - TREAT AS FILENAME

            6A            05     E1  01A7   868 	BBC	#FWA$V_NAM_DVI,(R10),GOTNAME1	; BRANCH, TREATING THIS AS A

                          EE         01AA       

                                     01AB   869 						; FILENAME UNLESS DEVICE

                                     01AB   870 						; CAME FROM NAM BLOCK

            6A            19     E0  01AB   871 10$:	BBS	#FWA$V_NODE,(R10),GOTNAME1	; BRANCH IF NODE SEEN

                          EA         01AE       

         1C AA            54     7D  01AF   872 	MOVQ	R4,FWA$Q_LOGNAME(R10)	; STORE THE DESCRIPTOR

                          0125   30  01B3   873 	BSBW	TRANSLATE		; ATTEMPT TRANSLATION

                                     01B6   874 					; IF TRANSLATE RETURNS, ITS A FILENAME

            56            54     7D  01B6   875 	MOVQ	R4,R6			; SAY FILENAME IS REALLY A

                                     01B9   876 					; FILENAME STRING

                          FF52   31  01B9   877 	BRW	NXTNAM			; & GO CHECK AGAIN SINCE

                                     01BC   878 					; IT COULD HAVE HAD A 

                                     01BC   879 					; LEADING UNDERSCORE REMOVED

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  26

045             PARSE_STRING  -  PARSE INDIVIDUAL FILENAME STRI                                                                  (6)



                                     01BC   881 ;

                                     01BC   882 ; WE HAVE BOTH A LOGICAL NAME AND A DEVICE

                                     01BC   883 ; IGNORE THE LOGICAL NAME UNLESS NO DUPLICATES ALLOWED

                                     01BC   884 ;

            6A            00     E0  01BC   885 DEVDUP:	BBS	#FWA$V_DUPOK,(R10),PRSXIT

                          AB         01BF       

                                     01C0   886 	$PSECT_BR	L$RMS0

                          FE6A'  31  01C0       		BRW	L$RMS010

                                     01C3       		.SAVE

                                 0000002D       		.PSECT	L$RMS0,GBL,NOWRT

                                     002D       L$RMS010:

                                     002D   887 	RMSERR	DEV

            50       0000'8F     3C  002D       		MOVZWL	#<RMS$_DEV&^XFFFF>,R0

                                     0032   888 ;

                                     0032   889 ; AN ERROR CONDITION HAS BEEN ENCOUNTERED

                                     0032   890 ; ERROR CODE IS IN R0 - POP THE EXTRA PC FROM THE

                                     0032   891 ; STACK AND RETURN

                                     0032   892 ;

                          02     BA  0032   893 PRSERR:	POPR	#^M<R1>

                                 05  0034   894 	RSB

                                     0035   895 	$PSECT_RESTORE

                                 000001C3       		.RESTORE

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  27

045             PARSE_STRING  -  PARSE INDIVIDUAL FILENAME STRI                                                                  (6)



                                     01C3   897 ;

                                     01C3   898 ; COLON WAS TERMINATOR

                                     01C3   899 ; IF THERE IS A SECOND COLON WE HAVE A NODE NAME,

                                     01C3   900 ; OTHERWISE A LOGICAL/DEVICE NAME

                                     01C3   901 ;

                          56     D5  01C3   902 GOTCOLON: TSTL	R6			; ANYMORE INPUT?

                          05     13  01C5   903 	BEQL	10$			; BRANCH IF NOT

            3A            67     91  01C7   904 	CMPB	(R7),#^A/:/		; ANOTHER COLON?

                          0D     13  01CA   905 	BEQL	GOTNODE			; YES - BRANCH TO PROCESS NODE SPEC

                                     01CC   906 ;

                                     01CC   907 ; PROCESS LOGICAL/DEVICE NAME

                                     01CC   908 ;

                                     01CC   909 10$:	CHKFLD	CHECKS=<M_NULL!M_WILD!M_MINUS>,-

                                     01CC   910 		FIELD=LOGNAME,-

                                     01CC   911 		MAXSIZ=FWA$C_XLTBUFSIZ,ERR=DEV

                          025C   30  01CC       		BSBW	CHECK_FIELD

                               0061  01CF       		.WORD	M_NULL!M_WILD!M_MINUS

                                 3F  01D1       		.BYTE	FWA$C_XLTBUFSIZ

                                 30  01D2       		.BYTE	FWA$V_LOGNAME

                                 1C  01D3       		.BYTE	FWA$Q_LOGNAME

                               0000' 01D4       		.WORD	RMS$_DEV&^XFFFF

                          FF22   31  01D6   912 	BRW	NXTDIR			; GO GET NEXT FIELD

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  28

045             PARSE_STRING  -  PARSE INDIVIDUAL FILENAME STRI                                                                  (6)



                                     01D9   914 ;++

                                     01D9   915 ;

                                     01D9   916 ; PROCESS NODE NAME - FIELD WAS TERMINATED BY TWO COLONS.

                                     01D9   917 ;

                                     01D9   918 ;--

                                     01D9   919 GOTNODE: $PSECT_BR	NF$NETWORK

                          FE24'  31  01D9       		BRW	NF$NETWORK11

                                     01DC       		.SAVE

                                 00000000       		.PSECT	NF$NETWORK,GBL,NOWRT

                                     0000       NF$NETWORK11:

            54            02     C0  0000   920 	ADDL2	#2,R4			; COPY COLONS WITH FIELD

                                     0003   921 	CHKFLD	CHECKS=<M_NULL!M_WILD!M_MINUS!M_$_>,-

                                     0003   922 		FIELD=NODE,-

                                     0003   923 		MAXSIZ=FWA$C_MAXNODE,ERR=NOD

                          0425'  30  0003       		BSBW	CHECK_FIELD

                               0071  0006       		.WORD	M_NULL!M_WILD!M_MINUS!M_$_

                                 28  0008       		.BYTE	FWA$C_MAXNODE

                                 19  0009       		.BYTE	FWA$V_NODE

                                 34  000A       		.BYTE	FWA$Q_NODE

                               0000' 000B       		.WORD	RMS$_NOD&^XFFFF

                                     000D   924 ;

                                     000D   925 ; WE HAVE A NODE NAME.

                                     000D   926 ; ALLOCATE SPACE FOR THE NETWORK WORK AREA (NWA) UNLESS IT HAS ALREADY

                                     000D   927 ; BEEN ALLOCATED VIA PREVIOUS PASS THRU THIS CODE.

                                     000D   928 ;

            69            3C     E2  000D   929 	BBSS	#IFB$V_NWA,(R9),5$	; CHECK/SET ONE-SHOT ALLOCATION FLAG

                          16         0010       

            52       0400 8F     3C  0011   930 	MOVZWL	#NWA$C_BLN,R2		; SPECIFY SIZE OF NWA

                          FFE7'  30  0016   931 	BSBW	RM$GETPAG		; ALLOCATE SPACE

            07            50     E8  0019   932 	BLBS	R0,3$			; BRANCH IF SPACE ALLOCATED

                                     001C   933 	CSB	#IFB$V_NWA,(R9)		; CLEAR NWA ALLOCATED FLAG SO THAT

            69            3C     E5  001C       		BBCC	#IFB$V_NWA,(R9),30006$

                          00         001F       

                                     0020       30006$:

                                     0020   934 					; CLOSE LOGIC WILL NOT ATTEMPT TO

                                     0020   935 					; DEALLOCATE THE SPACE

                          000F'  31  0020   936 	BRW	PRSERR			; TAKE ERROR EXIT

         28 A9            53     D0  0023   937 3$:	MOVL	R3,IFB$L_NWA_PTR(R9)	; STORE NWA ADDRESS IN IFAB

                                     0027   938 ;

                                     0027   939 ; ADJUST STRING COUNT AND POINTER

                                     0027   940 ;

                          57     D6  0027   941 5$:	INCL	R7			; SKIP SECOND COLON

            03            56     F5  0029   942 	SOBGTR	R6,10$			; COUNT IT AND BRANCH IF NOT EOS

                          013C'  31  002C   943 	BRW	PRSXIT			; ALL DONE THIS PARSE

                                     002F   944 ;

                                     002F   945 ; CHECK FOR QUOTED STRING

                                     002F   946 ;

            22            67     91  002F   947 10$:	CMPB	(R7),#^A/"/		; QUOTE CHARACTER NEXT?

                          03     13  0032   948 	BEQL	20$			; BRANCH IF YES

                          00B7'  31  0034   949 	BRW	NXTDEV			; NO - GO CHECK FOR A DEVICE

                                     0037   950 ;

                                     0037   951 ; THIS IS THE START OF A QUOTED STRING.

                                     0037   952 ; IF MUST BE TERMINATED BY A QUOTE CHARACTER AND THERE CAN NOT BE ANY OTHER

                                     0037   953 ; FILESPEC ELEMENTS PRESENT EXCEPT FOR THE NODE NAME. (NOTE: NO CHECK IS

                                     0037   954 ; MADE FOR QUOTE CHARACTERS WITHIN THE QUOTED STRING.)

                                     0037   955 ; IF ANY FILESPEC ELEMENTS OTHER THAN NODE ALREADY SEEN AND THIS IS NOT

                                     0037   956 ; THE FNA/S PARSE PASS, SIMPLY IGNORE THE QUOTED STRING.

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  29

045             PARSE_STRING  -  PARSE INDIVIDUAL FILENAME STRI                                                                  (6)



                                     0037   957 ;

                                     0037   958 ; IF THIS IS A VALID QUOTED STRING:

                                     0037   959 ;   1)	SET A FLAG TO INDICATE THAT THIS IS A QUOTED STRING.

                                     0037   960 ;   2)	SET A FLAG IF THE QUOTED STRING CONTAINS AN EQUALS CHARACTER TO

                                     0037   961 ;	INDICATE THAT IT IS OF THE 'OBJECTTYPE=...' FORM.

                                     0037   962 ;   3A)	SET A FLAG IF THE QUOTED STRING CONTAINS A SLASH CHARACTER

                                     0037   963 ;	AFTER THE EQUALS CHARACTER TO INDICATE THAT IT IS OF THE

                                     0037   964 ;	'OBJECTTYPE=TASKNAME/NETACP_STRING' FORM.

                                     0037   965 ;   3B)	IN ADDITION, IF THE QUOTED STRING IS OF THE FORM GIVEN IN 3A,

                                     0037   966 ;	TRUNCATE IT AT THE SLASH (BY REPLACING SLASH WITH QUOTE AND

                                     0037   967 ;	REDUCING THE DESCRIPTOR COUNT), BUT LEAVE THE REST OF THE STRING

                                     0037   968 ;	IN THE BUFFER. THE PURPOSE TO THIS IS TO PREVENT 'NETACP_STRING'

                                     0037   969 ;	FROM BEING INCLUDED IN THE EXPANDED AND RESULTANT STRINGS, YET

                                     0037   970 ;	PRESERVE 'NETACP_STRING' FOR INTERNAL USE AT ACCESS TIME. NOTE,

                                     0037   971 ;	THE LOGICAL NAME TRANSLATION OF SYS$NET YIELDS AN EQUIVALENCE

                                     0037   972 ;	STRING THAT CONTAINS '/NETACP_STRING'.

                                     0037   973 ;   4)	FINALLY, COPY THE QUOTED STRING (INCLUDING THE QUOTES) TO QUOTEDBUF

                                     0037   974 ;	IN NWA.

                                     0037   975 ;

            67         FF A746   91  0037   976 20$:	CMPB	-1(R7)[R6],(R7)		; IS LAST CHARACTER A MATCHING QUOTE?

                          4D     12  003C   977 	BNEQ	ERRQUO			; BRANCH IF NOT

                       01 AA     95  003E   978 	TSTB	FWA$B_FLDFLGS(R10)	; OTHER ELEMENTS IN FILESPEC PRESENT?

                          44     12  0041   979 	BNEQ	SKPQUO			; BRANCH IF YES

       007F 8F            56     B1  0043   980 	CMPW	R6,#FWA$C_MAXQUOTED	; CHECK STRING SIZE

                          41     14  0048   981 	BGTR	ERRQUO			; BRANCH IF STRING EXCEEDS BUFFER

            6A            1A     E2  004A   982 	BBSS	#FWA$V_QUOTED,(R10),SKPQUO	; FLAG QUOTED STRING,

                          39         004D       

                                     004E   983 						; BRANCHING IF ALREADY SEEN

            56            3D     3A  004E   984 	LOCC	#^A\=\,R6,(R7)		; SEARCH FOR '=' WITHIN QUOTED STRING

                          67         0051       

                          13     13  0052   985 	BEQL	30$			; BRANCH IF NO MATCH

                                     0054   986 	SSB	#FWA$V_OBJTYPE,(R10)	; FLAG 'OBJECTTYPE=...' FORM

            6A            31     E2  0054       		BBSS	#FWA$V_OBJTYPE,(R10),30007$

                          00         0057       

                                     0058       30007$:

                                     0058   987 					; OF QUOTED STRING

            50            2F     3A  0058   988 	LOCC	#^A\/\,R0,(R1)		; SEARCH FOR '/' WITHIN QUOTED STRING

                          61         005B       

                          09     13  005C   989 	BEQL	30$			; BRANCH IF NO MATCH

                                     005E   990 	SSB	#FWA$V_NETSTR,(R10)	; FLAG 'OBJECTTYPE=TASKNAME/...' FORM

            6A            32     E2  005E       		BBSS	#FWA$V_NETSTR,(R10),30008$

                          00         0061       

                                     0062       30008$:

                                     0062   991 					; OF QUOTED STRING

            61            22     90  0062   992 	MOVB	#^A\"\,(R1)		; TRUNCATE QUOTED STRING AT SLASH

                          50     D7  0065   993 	DECL	R0			; ADJUST # BYTES TRUNCATED VALUE

            56            50     C3  0067   994 30$:	SUBL3	R0,R6,FWA$Q_QUOTED(R10)	; SAVE (TRUNCATED) STRING LENGTH

                     009C CA         006A       

                                     006D   995 					; INCLUDING QUOTES IN DESCRIPTOR

            52         28 A9     D0  006D   996 	MOVL	IFB$L_NWA_PTR(R9),R2	; GET ADDRESS OF NWA

            53       00C0 C2     9E  0071   997 	MOVAB	NWA$T_QUOTEDBUF(R2),R3	; GET ADDRESS OF BUFFER TO STORE STRING

       00A0 CA            53     D0  0076   998 	MOVL	R3,FWA$Q_QUOTED+4(R10)	; STORE ADDRESS IN DESCRIPTOR

       013F C2            50     90  007B   999 	MOVB	R0,NWA$B_QUOTEDTRN(R2)	; STORE # BYTES TRUNCATED COUNT

            67            56     28  0080  1000 	MOVC3	R6,(R7),(R3)		; COPY ENTIRE QUOTED STRING TO NWA

                          63         0083       

                          00E4'  31  0084  1001 QUOXIT:	BRW	PRSXIT			; ALL DONE

                                     0087  1002 ;

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  30

045             PARSE_STRING  -  PARSE INDIVIDUAL FILENAME STRI                                                                  (6)



                                     0087  1003 ;  IF THIS IS NOT PARSE OF FNA/S STRING, SIMPLY IGNORE THE QUOTED STRING

                                     0087  1004 ;  AS SOME OTHER FILENAME ELEMENT OR PREVIOUS QUOTED STRING HAS BEEN SEEN

                                     0087  1005 ;

            6A            04     E1  0087  1006 SKPQUO:	BBC	#FWA$V_FNA_PASS,(R10),QUOXIT	; BRANCH IF NOT FNA PASS

                          F9         008A       

                                     008B  1007 ;

                                     008B  1008 ; SOME PROBLEM WITH QUOTED STRING

                                     008B  1009 ;

                                     008B  1010 ERRQUO:	$PSECT_BR	L$RMS0

                          FFA7'  31  008B       		BRW	L$RMS012

                                     008E       		.SAVE

                                 00000035       		.PSECT	L$RMS0,GBL,NOWRT

                                     0035       L$RMS012:

                                     0035  1011 	RMSERR	QUO

            50       0000'8F     3C  0035       		MOVZWL	#<RMS$_QUO&^XFFFF>,R0

                          FFF5   31  003A  1012 ERRQUO1:BRW	PRSERR

                                     003D  1013 	$PSECT_RESTORE

                                 0000008E       		.RESTORE

                                     008E  1014 	$PSECT_RESTORE		; (FROM NF$NETWORK)

                                 000001DC       		.RESTORE

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  31

045             PARSE_STRING  -  PARSE INDIVIDUAL FILENAME STRI                                                                  (6)



                                     01DC  1016 ;

                                     01DC  1017 ; WE HAVE A FILE NAME

                                     01DC  1018 ;

                                     01DC  1019 NAME:

                                     01DC  1020 	CHKFLD	CHECKS=<M_$_!M_MINUS!M_NAMTYP>,-

                                     01DC  1021 		FIELD=NAME,-

                                     01DC  1022 		MAXSIZ=FWA$C_MAXNAME,ERR=FNM

                          024C   30  01DC       		BSBW	CHECK_FIELD

                               00D0  01DF       		.WORD	M_$_!M_MINUS!M_NAMTYP

                                 09  01E1       		.BYTE	FWA$C_MAXNAME

                                 0D  01E2       		.BYTE	FWA$V_NAME

                                 84  01E3       		.BYTE	FWA$Q_NAME

                               0000' 01E4       		.WORD	RMS$_FNM&^XFFFF

            6A            04     E1  01E6  1023 	BBC	#FWA$V_FNA_PASS,(R10),5$	; BRANCH IF NOT FNA PASS

                          11         01E9       

            6A            0D     E1  01EA  1024 	BBC	#FWA$V_NAME,(R10),2$		; BRANCH IF NAME NOT SEEN

                          04         01ED       

                                     01EE  1025 	SSB	#FWA$V_EXP_NAME,(R10)		; SET EXPLICIT NAME FLAG

            6A            12     E2  01EE       		BBSS	#FWA$V_EXP_NAME,(R10),30009$

                          00         01F1       

                                     01F2       30009$:

            2E            53     91  01F2  1026 2$:	CMPB	R3,#^A/./			; TERMINATED BY PERIOD?

                          04     12  01F5  1027 	BNEQ	5$				; BRANCH IF NOT

                                     01F7  1028 	SSB	#FWA$V_EXP_TYPE,(R10)		; YES - SET EXPLICIT TYPE FLAG

            6A            11     E2  01F7       		BBSS	#FWA$V_EXP_TYPE,(R10),30010$

                          00         01FA       

                                     01FB       30010$:

            3B            53     91  01FB  1029 5$:	CMPB	R3,#SEMICOLON			; WAS TERMINATOR SEMI?

                          0B     12  01FE  1030 	BNEQ	10$				; BRANCH IF NOT

            6A            04     88  0200  1031 	BISB2	#FWA$M_TYPEFLG,(R10)		; FLAG TYPE ALREADY SEEN

            6A            04     E1  0203  1032 	BBC	#FWA$V_FNA_PASS,(R10),10$	; BRANCH IF NOT FNA PASS

                          04         0206       

                                     0207  1033 	SSB	#FWA$V_EXP_VER,(R10)		; SET EXPLICIT VERSION FLAG

            6A            10     E2  0207       		BBSS	#FWA$V_EXP_VER,(R10),30011$

                          00         020A       

                                     020B       30011$:

                          FF00   31  020B  1034 10$:	BRW	NXTNAM				; GO GET ANOTHER NAME

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  32

045             PARSE_STRING  -  PARSE INDIVIDUAL FILENAME STRI                                                                  (8)



                                     020E  1036 

                                     020E  1037 ;

                                     020E  1038 ; WE HAVE A LEFT BRACKET (SQUARE OR ANGLE) INDICATING A

                                     020E  1039 ; DIRECTORY SPEC

                                     020E  1040 ;

                                     020E  1041 ; IT MAY BE OF THE [GRP,MBR] FORMAT, [DIRECTORY-NAME] FORMAT,

                                     020E  1042 ; [DIRECTORY-NAME.DIRECTORY-NAME2...] FORMAT, OR [.DIRECTORY-NAME...]

                                     020E  1043 ; FORMAT

                                     020E  1044 ;

                                     020E  1045 ; DETERMINE THE FORMAT AND COPY THE VARIOUS PARTS TO THE 

                                     020E  1046 ; DIRECTORY BUFFERS

                                     020E  1047 ;

                                     020E  1048 PARSE_DIR:

                          54     D5  020E  1049 	TSTL	R4				; ANY OTHER CHARS THIS SUBSTRING?

                          84     12  0210  1050 	BNEQ	ERRSYN				; BRANCH IF YES - ERROR

            53            02     81  0212  1051 	ADDB3	#2,R3,FWA$B_DIRTERM(R10)	; DETERMINE WHICH RIGHT BRACKET

                       07 AA         0215       

                                     0217  1052 						; TO USE AS TEMINATOR

                                     0217  1053 						; TAKES ADVANTAGE OF FACT

                                     0217  1054 						; THAT ASCII CODE FOR EACH OF

                                     0217  1055 						; THE RIGHT BRACKETS IS 2 

                                     0217  1056 						; MORE THAN THE CODE FOR THE

                                     0217  1057 						; LEFT BRACKET

            6A            03     E1  0217  1058 	BBC	#FWA$V_RLF_PASS,(R10),10$	; BRANCH IF NOT RLF PASS

                          04         021A       

            68            3D     E0  021B  1059 	BBS	#FAB$V_OFP+FOP,(R8),SKPDIR	; BRANCH IF DIRECTORY NOT WANTED

                          4C         021E       

            6A            0E     E2  021F  1060 10$:	BBSS	#FWA$V_DIR,(R10),SKPDIR		; BRANCH IF DIRECTORY ALREADY SEEN

                          48         0222       

                                     0223  1061 	NXTFLD	EOS=ERRDIR,NULL=ERRDIR		; GET FIRST DIRECTORY FIELD

                          0141   30  0223       		BSBW	NEXT_FIELD

                                 9C' 0226       30012$:		.BYTE	ERRDIR-30012$			; OFFSET TO ERRDIR ROUTINE

                                 9B' 0227       		.BYTE	ERRDIR-30012$-1		; OFFSET TO ERRDIR ROUTINE

            2C            53     91  0228  1062 	CMPB	R3,#^A/,/			; [GROUP,MEMBER] FORMAT?

                          11     13  022B  1063 	BEQL	GRPMBR				; BRANCH IF YES

         07 AA            53     91  022D  1064 	CMPB	R3,FWA$B_DIRTERM(R10)		; IS IT A SINGLE DIRECTORY NAME?

                          47     13  0231  1065 	BEQL	SINGLE_DIR			; BRANCH IF YES

            2E            53     91  0233  1066 	CMPB	R3,#^A/./			; MUST BE DIRECTORY-LIST

                          19     12  0236  1067 	BNEQ	ERRDIR_BR1			; BRANCH IF NOT - UNINTERPRETABLE

                                     0238  1068 ;

                                     0238  1069 ; WE HAVE A DIRECTORY LIST

                                     0238  1070 ; CHECK TO SEE IF FIRST ELEMENT IS NULL IMPLYING A SUB-DIRECTORY

                                     0238  1071 ; OF THE CURRENT DEFAULT DIRECTORY

                                     0238  1072 ;

                                     0238  1073 	ASSUME	V_NULL EQ 0	

            42            52     E9  0238  1074 	BLBC	R2,CHKDIRNAM			; BRANCH IF NOT NULL

                          009A   31  023B  1075 	BRW	DEFAULT_SUB			; GO PROCESS

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  33

045             PARSE_STRING  -  PARSE INDIVIDUAL FILENAME STRI                                                                  (8)



                                     023E  1077 ;

                                     023E  1078 ; WE HAVE A COMMA INDICATING [GROUP,MEMBER] FORMAT

                                     023E  1079 ; CHECK IT OUT

                                     023E  1080 ;

                                     023E  1081 GRPMBR:

                                     023E  1082 	CHKFLD	CHECKS=<M_NULL!M_MINUS!M_$_!M_ALPHA!M_NOT_OCTAL>,-

                                     023E  1083 		FIELD=DIR1,-

                                     023E  1084 		MAXSIZ=3,ERR=DIR

                          01EA   30  023E       		BSBW	CHECK_FIELD

                               005B  0241       		.WORD	M_NULL!M_MINUS!M_$_!M_ALPHA!M_NOT_OCTAL

                                 03  0243       		.BYTE	3

                                 20  0244       		.BYTE	FWA$V_DIR1

                                 44  0245       		.BYTE	FWA$Q_DIR1

                               0000' 0246       		.WORD	RMS$_DIR&^XFFFF

                                     0248  1085 ;

                                     0248  1086 ; FIRST PART OK - CHECK SECOND

                                     0248  1087 ;

                                     0248  1088 	NXTFLD	EOS=ERRDIR,NULL=ERRDIR

                          011C   30  0248       		BSBW	NEXT_FIELD

                                 77' 024B       30013$:		.BYTE	ERRDIR-30013$			; OFFSET TO ERRDIR ROUTINE

                                 76' 024C       		.BYTE	ERRDIR-30013$-1		; OFFSET TO ERRDIR ROUTINE

         07 AA            53     91  024D  1089 	CMPB	R3,FWA$B_DIRTERM(R10)		; TERM=RIGHT BRACKET?

                                     0251  1090 ERRDIR_BR1:

                          6F     12  0251  1091 	BNEQ	ERRDIR				; ERROR IF NOT

                                     0253  1092 	CHKFLD	CHECKS=<M_NULL!M_MINUS!M_$_!M_ALPHA!M_NOT_OCTAL>,-

                                     0253  1093 		FIELD=DIR2,-

                                     0253  1094 		MAXSIZ=3,ERR=DIR

                          01D5   30  0253       		BSBW	CHECK_FIELD

                               005B  0256       		.WORD	M_NULL!M_MINUS!M_$_!M_ALPHA!M_NOT_OCTAL

                                 03  0258       		.BYTE	3

                                 21  0259       		.BYTE	FWA$V_DIR2

                                 4C  025A       		.BYTE	FWA$Q_DIR2

                               0000' 025B       		.WORD	RMS$_DIR&^XFFFF

                                     025D  1095 ;

                                     025D  1096 ; NOW CHECK FOR VALUES LESS THAN 377 OCTAL.

                                     025D  1097 ;

            50         44 AA     7E  025D  1098 	MOVAQ	FWA$Q_DIR1(R10),R0		; ADDR OF 1ST DESCRIPTOR

                          67     10  0261  1099 	BSBB	CHK377				; CHECK VALUE

                                     0263  1100 	ASSUME	FWA$Q_DIR2 EQ <FWA$Q_DIR1+8>

                          65     10  0263  1101 	BSBB	CHK377				; CHECK 2ND VALUE

                                     0265  1102 	SSB	#FWA$V_GRPMBR,(R10)		; FLAG GROUP MEMBER FORMAT

            6A            1B     E2  0265       		BBSS	#FWA$V_GRPMBR,(R10),30014$

                          00         0268       

                                     0269       30014$:

                          5C     11  0269  1103 DIRXIT2: BRB	DIRXIT				; ALL SET

                                     026B  1104 ;

                                     026B  1105 ; MUST SKIP OVER DIRECTORY SPEC

                                     026B  1106 ;

                                     026B  1107 SKPDIR:	ASSUME	FWA$V_DUPOK EQ 0

            54            6A     E9  026B  1108 	BLBC	(R10),ERRDIR			; BRANCH IF DUPLICATES NOT ALLOWED

                          56     D7  026E  1109 10$:	DECL	R6				; ANY MORE STRING?

                          50     19  0270  1110 	BLSS	ERRDIR				; IF NULL STRING IT'S AN ERROR

         07 AA            87     91  0272  1111 	CMPB	(R7)+,FWA$B_DIRTERM(R10)	; TERMINATOR?

                          4F     13  0276  1112 	BEQL	DIRXIT				; BRANCH IF YES

                          F4     11  0278  1113 	BRB	10$				; KEEP PLUGGING

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  34

045             PARSE_STRING  -  PARSE INDIVIDUAL FILENAME STRI                                                                  (8)



                                     027A  1115 ;

                                     027A  1116 ; WE HAVE A DIRECTORY NAME

                                     027A  1117 ;  CHECK FOR '[]' INDICATING EXPLICIT DEFAULT DIRECTORY

                                     027A  1118 ;

                                     027A  1119 SINGLE_DIR:

                                     027A  1120 	ASSUME	V_NULL EQ 0

            5B            52     E8  027A  1121 	BLBS	R2,DEFAULT_SUB			; BRANCH IF DIRECTORY SPEC '[]'

                                     027D  1122 CHKDIRNAM:

                                     027D  1123 ;

                                     027D  1124 ;  SET UP TO CALL CHECK_DIR_FIELD.  BUILD ARGUMENT LIST ON THE STACK.

                                     027D  1125 ;

                                 DD  027D  1126 	PUSHL	#FWA$Q_DIR1!-			; OFFSET TO DIRECTORY DESCRIPTOR

                 00000044'8F         027E  1127 		<<RMS$_DIR&^XFFFF>@8>		; ERROR CODE FOR FAILURE

                 20098051 8F     DD  0283  1128 	PUSHL	#<M_NULL!M_MINUS!M_$_!M_RETURN_ON_ERR>!-	; CHECKS

                                     0289  1129 		<FWA$C_MAXNAME@16>!-		; MAXIMUM SIZE OF DIRECTORY NAME

                                     0289  1130 		<FWA$V_DIR1@24>			; FWA FLAG BIT TO SET

            5C            5E     D0  0289  1131 	MOVL	SP,AP				; SET ARGLIST ADDRESS

                                     028C  1132 CHECK_SUBDIR:

         30 AA            54     80  028C  1133 	ADDB2	R4,FWA$B_DIRLEN(R10)		; ACCUMULATE DIRECTORY SPEC LENGTH

                       30 AA     96  0290  1134 	INCB	FWA$B_DIRLEN(R10)		; COUNT THE TERMINATOR TOO

                          019B   30  0293  1135 	BSBW	CHECK_DIR_FIELD			; GO VALIDATE THE (SUB)DIRECTORY

            25            50     E9  0296  1136 	BLBC	R0,ERRSUBDIR			; BRANCH ON ERROR

                                     0299  1137 ;

                                     0299  1138 ;  GET ANOTHER DIRECTORY NAME, IF ANY, AND CHECK IT FOR EITHER A TERMINATOR

                                     0299  1139 ;  BRACKET OR PERIOD

                                     0299  1140 ;

            2E            53     91  0299  1141 	CMPB	R3,#^A/./			; ANOTHER DIRECTORY IN LIST?

                          27     12  029C  1142 	BNEQ	DIRXIT1				; BRANCH IF NOT

                                     029E  1143 GETNXTDIR:

            27         03 AC     91  029E  1144 	CMPB	3(AP),#FWA$V_DIR1+FWA$C_MAXSUBDIR	; TOO MANY LEVELS?

                          1A     18  02A2  1145 	BGEQ	ERRSUBDIR			; BRANCH IF YES

         03 AE       0801 8F     A0  02A4  1146 	ADDW2	#1+<8@8>,3(SP)			; MOVE TO NEXT SUB DIR

                                     02AA  1147 	ASSUME	FWA$V_DIR_LVLS GE 24

                                     02AA  1148 	ASSUME	FWA$V_DIR_LVLS LT 32

         03 AA            20     80  02AA  1149 	ADDB2	#<1@<FWA$V_DIR_LVLS-24>>,3(R10)	; BUMP DIRECTORY LEVEL COUNT

                                     02AE  1150 	NXTFLD	EOS=CHKDOT,NULL=CHKDOT		; GET NEXT FIELD

                          00B6   30  02AE       		BSBW	NEXT_FIELD

                                 02' 02B1       30015$:		.BYTE	CHKDOT-30015$			; OFFSET TO CHKDOT ROUTINE

                                 01' 02B2       		.BYTE	CHKDOT-30015$-1		; OFFSET TO CHKDOT ROUTINE

            2E            53     91  02B3  1151 CHKDOT:	CMPB	R3,#^A/./			; VALID TERMINATOR?

                          D4     13  02B6  1152 	BEQL	CHECK_SUBDIR			; BRANCH IF YES			

         07 AA            53     91  02B8  1153 	CMPB	R3,FWA$B_DIRTERM(R10)		; IS IT RIGHT BRACKET?

                          CE     13  02BC  1154 	BEQL	CHECK_SUBDIR			; BRANCH IF YES

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  35

045             PARSE_STRING  -  PARSE INDIVIDUAL FILENAME STRI                                                                  (8)



                                     02BE  1156 ;

                                     02BE  1157 ;  HANDLE DIRECTORY ERROR

                                     02BE  1158 ;

                                     02BE  1159 ERRSUBDIR:

                          01     BA  02BE  1160 	POPR	#^M<R0>				; REMOVE ARGLIST FROM STACK

                          01     BA  02C0  1161 ERRDIR1: POPR	#^M<R0>				; REMOVE RETURN PC (OR 2ND ARG)

                                     02C2  1162 ERRDIR:	$PSECT_BR	L$RMS0

                          FD78'  31  02C2       		BRW	L$RMS013

                                     02C5       		.SAVE

                                 0000003D       		.PSECT	L$RMS0,GBL,NOWRT

                                     003D       L$RMS013:

                                     003D  1163 	RMSERR	DIR				; SHOW ERROR

            50       0000'8F     3C  003D       		MOVZWL	#<RMS$_DIR&^XFFFF>,R0

                          FFED   31  0042  1164 	BRW	PRSERR				; & GET OUT

                                     0045  1165 	$PSECT_RESTORE

                                 000002C5       		.RESTORE

                                     02C5  1166 ;

                                     02C5  1167 ; DIRECTORY PROCESSED OK

                                     02C5  1168 ; GO PROCESS NEXT FIELD

                                     02C5  1169 ;

                          03     BA  02C5  1170 DIRXIT1: POPR	#^M<R0,R1>			; REMOVE ARGUMENT LIST

                          FE44   31  02C7  1171 DIRXIT:	BRW	NXTNAM				; PROCESS FILENAME

                                     02CA  1172 ;

                                     02CA  1173 ; SUBROUTINE TO CHECK THAT OCTAL STRING 

                                     02CA  1174 ; WHOSE DESCRIPTOR ADDRESS IS IN R0 DOES NOT EXCEED 377.

                                     02CA  1175 ;

                                     02CA  1176 ; NOTE:  IT IS ALREADY KNOWN THAT ALL CHARACTERS ARE

                                     02CA  1177 ; EITHER OCTAL OR A SINGLE ASTERISK, AND THAT THERE

                                     02CA  1178 ; ARE AT MOST 3 CHARACTERS

                                     02CA  1179 ;

                                     02CA  1180 CHK377:

            03            80     D1  02CA  1181 	CMPL	(R0)+,#3			; 3 CHARACTERS?

                          06     12  02CD  1182 	BNEQ	10$				; NO NEED TO CHECK UNLESS 3

            33            90     91  02CF  1183 	CMPB	@(R0)+,#^A/3/			; IS FIRST CHAR > 3?

                          EC     1A  02D2  1184 	BGTRU	ERRDIR1				; IF SO IT'S AN ERROR

                                 05  02D4  1185 	RSB

                          80     D5  02D5  1186 10$:	TSTL	(R0)+				; SKIP TO NEXT DESCRIPTOR

                                 05  02D7  1187 	RSB

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  36

045             PARSE_STRING  -  PARSE INDIVIDUAL FILENAME STRI                                                                  (8)



                                     02D8  1189 ;

                                     02D8  1190 ; WE HAVE A DIRECTORY SPEC OF THE FORM [] OR [.DIRECTORY-LIST]

                                     02D8  1191 ; IMPLYING A SUB-DIRECTORY OF THE CURRENT DEFAULT DIRECTORY.

                                     02D8  1192 ; CAN ONLY DO IT IF DEFAULT DIRECTORY NOT OF THE  [GROUP,MEMBER] FORMAT.

                                     02D8  1193 ; CALL RM$XPFN RECURSIVELY TO APPLY DEFAULT DIRECTORY.

                                     02D8  1194 ;

                                     02D8  1195 DEFAULT_SUB:

                                     02D8  1196 	$PSECT_BR	F$RMSOPEN0DFL

                          FD25'  31  02D8       		BRW	F$RMSOPEN0DFL14

                                     02DB       		.SAVE

                                 00000000       		.PSECT	F$RMSOPEN0DFL,GBL,NOWRT

                                     0000       F$RMSOPEN0DFL14:

            6A            19     E1  0000  1197 	BBC	#FWA$V_NODE,(R10),10$		; BRANCH IF NODE NOT SEEN

                          08         0003       

                                     0004  1198 ;

                                     0004  1199 ;  THIS IS EXPLICIT DEFAULT DIRECTORY FOR REMOTE NODE.

                                     0004  1200 ;  ALLOW THE DEFAULT DIRECTORY TO BE APPLIED REMOTELY.

                                     0004  1201 ;  SIMPLY SAY UFD SEEN BUT PROVIDE A 0 LENGTH DESCRIPTOR (LENGTH ALREADY ZERO)

                                     0004  1202 ;  WHICH WILL CAUSE DAP DIRECTORY STRING TO BE BUILT CORRECTLY.

                                     0004  1203 ;

         48 AA            5E     D0  0004  1204 	MOVL	SP,FWA$Q_DIR1+4(R10)		; DUMMY ADDRESS FOR MOVC3

            6A            20     E3  0008  1205 	BBCS	#FWA$V_DIR1,(R10),20$		; SAY UFD SEEN AND BRANCH

                          1D         000B       

                     00C8 8F     BB  000C  1206 10$:	PUSHR	#^M<R3,R6,R7>			; SAVE CURRENT STRING INFO

                                     0010  1207 ;

                                     0010  1208 ; AND ITS CONTEXT (LOGNAME FLAG AND DIRECTORY TERMINATOR)

                                     0010  1209 ;

                                     0010  1210 	ASSUME	<FWA$V_LOGNAME/8> EQ FWA$B_LNFLG

                                     0010  1211 	ASSUME	FWA$B_DIRTERM EQ <FWA$B_LNFLG+1>

            7E         06 AA     3C  0010  1212 	MOVZWL	FWA$B_LNFLG(R10),-(SP)

                       06 AA     94  0014  1213 	CLRB	FWA$B_LNFLG(R10)		; SAY NO LOGICAL NAME SEEN

                                     0017  1214 	CSB	#FWA$V_DIR,(R10)		; CLEAR DIRECTORY SEEN FLAG

            6A            0E     E5  0017       		BBCC	#FWA$V_DIR,(R10),30016$

                          00         001A       

                                     001B       30016$:

                                     001B  1215 ;

                                     001B  1216 ; CALL XPFN RECURSIVELY AT DFDIR

                                     001B  1217 ;

                          00B7'  30  001B  1218 	BSBW	DFDIR				; PARSE DEFAULT DIRECTORY

                                     001E  1219 ;

                                     001E  1220 ; RESTORE PREVIOUS CONTEXT

                                     001E  1221 ;

         06 AA            8E     F7  001E  1222 	CVTLW	(SP)+,FWA$B_LNFLG(R10)

                     00C8 8F     BA  0022  1223 	POPR	#^M<R3,R6,R7>

            2C            50     E9  0026  1224 	BLBC	R0,ERRBUG			; BRANCH ON FAILURE

            2E            53     91  0029  1225 20$:	CMPB	R3,#^A/./			; DIRECTORY LIST?

                          2D     12  002C  1226 	BNEQ	DIRXIT_BR			; BRANCH IF NOT (I.E., '[]')

                                     002E  1227 ;

                                     002E  1228 ; CHECK FOR CORRECT FORMAT

                                     002E  1229 ;

            6A            1B     E0  002E  1230 	BBS	#FWA$V_GRPMBR,(R10),ERRDIR_BR	; BRANCH IF WRONG FORMAT

                          26         0031       

                                 DD  0032  1231 	PUSHL	#FWA$Q_DIR1!-			; OFFSET TO DIRECTORY DESCRIPTOR

                 00000044'8F         0033  1232 		<<RMS$_DIR&^XFFFF>@8>		; ERROR CODE FOR FAILURE

                 20098051 8F     DD  0038  1233 	PUSHL	#<M_NULL!M_MINUS!M_$_!M_RETURN_ON_ERR>!-	; CHECKS

                                     003E  1234 		<FWA$C_MAXNAME@16>!-		; MAXIMUM SIZE OF DIRECTORY NAME

                                     003E  1235 		<FWA$V_DIR1@24>			; FWA FLAG BIT TO SET

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  37

045             PARSE_STRING  -  PARSE INDIVIDUAL FILENAME STRI                                                                  (8)



            5C            5E     D0  003E  1236 	MOVL	SP,AP				; SET ARGLIST ADDRESS

                          1D     EF  0041  1237 	EXTZV	#FWA$V_DIR_LVLS,#FWA$S_DIR_LVLS,-

            6A            03         0043  1238 		(R10),R1			; GET # DIRECTORY LEVELS

                          51         0045       

         03 AC            51     80  0046  1239 	ADDB2	R1,3(AP)			; AND SET INTO ARG LIST

            51            03     9C  004A  1240 	ROTL	#3,R1,R1			; MAKE INTO DESCRIPTOR OFFSET

                          51         004D       

         04 AC            51     80  004E  1241 	ADDB2	R1,4(AP)			; AND SET INTO ARG LIST

                          0249'  31  0052  1242 	BRW	GETNXTDIR			; GO PROCESS REST OF DIRECTORY

                                     0055  1243 ;

                                     0055  1244 ;

                                     0055  1245 ; THE DEFAULT DIRECTORY STRING IS MESSED UP.  THIS SHOULD

                                     0055  1246 ; NEVER HAPPEN, BUT IT'S NOT TOO SERIOUS. TRY TO CONTINUE.

                                     0055  1247 ;

                                     0055  1248 ERRBUG:

                                     0055  1249 	$PSECT_BR	L$RMS0

                          FFED'  31  0055       		BRW	L$RMS015

                                     0058       		.SAVE

                                 00000045       		.PSECT	L$RMS0,GBL,NOWRT

                                     0045       L$RMS015:

                                     0045  1250 ;	RMSPBUG	BUG$_BADDFLTDIR			; REPORT ERROR TO LOG

                                     0045  1251 	RMSERR	BUG_DDI				; RETURN ERROR TO CALLER

            50       0000'8F     3C  0045       		MOVZWL	#<RMS$_BUG_DDI&^XFFFF>,R0

                          FFE5   31  004A  1252 	BRW	PRSERR

                                     004D  1253 	$PSECT_RESTORE

                                 00000058       		.RESTORE

                                     0058  1254 ERRDIR_BR:

                          0267'  31  0058  1255 	BRW	ERRDIR

                                     005B  1256 ;

                                     005B  1257 DIRXIT_BR:

                          0269'  31  005B  1258 	BRW	DIRXIT

                                     005E  1259 	$PSECT_RESTORE

                                 000002DB       		.RESTORE

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  38

045             PARSE_STRING  -  PARSE INDIVIDUAL FILENAME STRI                                                                 (10)



                                     02DB  1261 

                                     02DB  1262 ;++

                                     02DB  1263 ; THIS SUBROUTINE ATTEMPTS TO TRANSLATE THE STRING DESCRIBED IN

                                     02DB  1264 ; R4,R5, AS A LOGICAL NAME VIA THE TRANSLATE LOGICAL NAME

                                     02DB  1265 ; SYSTEM SERVICE, AND IF SUCCESSFUL, CHECKS FOR AN 'ESCAPE'

                                     02DB  1266 ; EQUIVALENCE STRING INDICATING A PROCESS-PERMANENT FILE IN

                                     02DB  1267 ; WHICH CASE THE ESCAPE STRING IS STORED IN THE FWA AND THE PARSE

                                     02DB  1268 ; IS TERMINATED. IF NOT AN ESCAPE STRING, THE EQUIVALENCE

                                     02DB  1269 ; STRING REPLACES THE PARSE INPUT STRING AND A BRANCH IS MADE

                                     02DB  1270 ; TO PARSE_STRING TO MERGE IN THE FILENAME ELEMENTS OF THE 

                                     02DB  1271 ; EQUIVALENCE STRING. IF THE TRANSLATE WAS UNSUCCESSFUL, RETURN IS

                                     02DB  1272 ; MADE TO THE CALLER WITH THE EQUIVALENCE STRING (IDENTICAL TO THE

                                     02DB  1273 ; INPUT NAME MINUS THE INITIAL UNDERSCORE IF ANY) DESCRIBED BY R4,R5.

                                     02DB  1274 ;--

                                     02DB  1275 TRANSLATE:

                                     02DB  1276 	$TSTPT	XLATLOG

                 00000200'9F     D6  02DB       		INCL	@#PIO$GL_FMLH+512+TPT$L_XLATLOG

                          08     BA  02E1  1277 	POPR	#^M<R3>				; PICK UP RETURN PC

                                     02E3  1278 ;

                                     02E3  1279 ; CHECK FOR MAXIMUM NO. TRANSLATIONS ALREADY DONE

                                     02E3  1280 ; AND EXIT IT EXCEEDED (USER IS IN A LOOP)

                                     02E3  1281 ;

         2C AA            0A     F3  02E3  1282 	AOBLEQ	#10,FWA$L_XLTCNT(R10),XLAT1 ; BRANCH IF < 10 TRANSLATIONS

                          03         02E7       

                                     02E8  1283 ;

                                     02E8  1284 ; EITHER THE MAXIMUM NO. OR TRANSLATIONS HAVE BEEN EXCEEDED

                                     02E8  1285 ; OR THE LOGICAL NAME TRANSLATION YIELDED AN ESCAPE STRING

                                     02E8  1286 ; THAT WAS EITHER THE WRONG LENGTH, OF THE WRONG MODE,

                                     02E8  1287 ; OR NOT THE ONLY FIELD

                                     02E8  1288 ;

                                     02E8  1289 ERRLNE:	$PSECT_BR	L$RMS0

                          FD62'  31  02E8       		BRW	L$RMS016

                                     02EB       		.SAVE

                                 0000004D       		.PSECT	L$RMS0,GBL,NOWRT

                                     004D       L$RMS016:

                                     004D  1290 	RMSERR	LNE				; SHOW ERROR

            50       0000'8F     3C  004D       		MOVZWL	#<RMS$_LNE&^XFFFF>,R0

                          FFDD   31  0052  1291 	BRW	PRSERR				; AND GET OUT

                                     0055  1292 	$PSECT_RESTORE

                                 000002EB       		.RESTORE

                                     02EB  1293 ;

                                     02EB  1294 ; USE WHICHEVER OF THE TWO LOGICAL NAME BUFFERS IS NOT

                                     02EB  1295 ; BEING USED TO RECEIVE THE EQUIVALENCE STRING

                                     02EB  1296 ;

                          00     DD  02EB  1297 XLAT1:	PUSHL	#0				; NO DISABLE MASK

            51         0A AA     9E  02ED  1298 	MOVAB	FWA$B_XLTMODE(R10),R1		; GET ADDRESS OF BYTE TO RECEIVE

                                     02F1  1299 						;  MODE OF EQUIVALENCE STRING

                          81     9F  02F1  1300 	PUSHAB	(R1)+				; BUILD ARGLIST ON STACK

                                     02F3  1301 	ASSUME	FWA$B_XLTTBL EQ <FWA$B_XLTMODE+1>

                                     02F3  1302 	ASSUME	TRNLOG$_TABLE EQ <TRNLOG$_ACMODE-4>

                          81     9F  02F3  1303 	PUSHAB	(R1)+				; PUSH ADDRESS OF BYTE TO RECEIVE

                                     02F5  1304 						;  TABLE # OF EQUIVALENCE STRING

                                     02F5  1305 	ASSUME	FWA$Q_XLTBUF1 EQ <FWA$B_XLTTBL+1>

                                     02F5  1306 	ASSUME	TRNLOG$_RSLBUF EQ <TRNLOG$_TABLE-4>

                          81     7F  02F5  1307 	PUSHAQ	(R1)+				; PUSH ADDRESS OF BUFFER TO RECEIVE

                                     02F7  1308 						;  EQUIVALENCE STRING

                                     02F7  1309 	ASSUME	FWA$L_BUFFLG EQ <FWA$Q_XLTBUF1+8>

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  39

045             PARSE_STRING  -  PARSE INDIVIDUAL FILENAME STRI                                                                 (10)



                                     02F7  1310 ;

                                     02F7  1311 ; COMPLEMENT THE BUFFER FLAG AND IF ZERO SWITCH BUFFERS

                                     02F7  1312 ;

            81            61     D2  02F7  1313 	MCOML	(R1),(R1)+			; USING RIGHT BUFFER?

                          04     12  02FA  1314 	BNEQ	10$				; BRANCH IF YES

            6E         24 AA     7E  02FC  1315 	MOVAQ	FWA$Q_XLTBUF2(R10),(SP)		; NO - SWAP BUFFER

                                     0300  1316 ;

                                     0300  1317 ; SAVE THE ADDRESS OF THE BUFFER USED

                                     0300  1318 ;

            55            6E     D0  0300  1319 10$:	MOVL	(SP),R5				; DESCRIPTOR ADDR

            55         04 A5     D0  0303  1320 	MOVL	4(R5),R5			; GET ADDRESS OF BUFFER

                                     0307  1321 	ASSUME	FWA$L_XLTSIZ EQ <FWA$L_BUFFLG+4>

                                     0307  1322 	ASSUME	TRNLOG$_RSLLEN EQ <TRNLOG$_RSLBUF-4>

                          81     DF  0307  1323 	PUSHAL	(R1)+				; RECEIVE EQUIV. STRING LENGTH HERE

                                     0309  1324 	ASSUME	FWA$Q_LOGNAME EQ <FWA$L_XLTSIZ+4>

                                     0309  1325 	ASSUME	TRNLOG$_LOGNAM EQ <TRNLOG$_RSLLEN-4>

                          61     7F  0309  1326 	PUSHAQ	(R1)				; ADDR OF LOG. NAME DESC.

                                     030B  1327 	ASSUME	TRNLOG$_NARGS EQ 6

   00000000'9F            06     FB  030B  1328 	CALLS	#6,@#SYS$TRNLOG			; DO THE TRANSLATION

            54         18 AA     D0  0312  1329 	MOVL	FWA$L_XLTSIZ(R10),R4		; PICK UP STRING LENGTH

            01            50     B1  0316  1330 	CMPW	R0,#SS$_NORMAL

                          4A     12  0319  1331 	BNEQ	NOTRANS

                                     031B  1332 ;

                                     031B  1333 ; WE HAD A TRANSLATION

                                     031B  1334 ;

                                     031B  1335 ; IF NODE IS SET AND

                                     031B  1336 ;

                                     031B  1337 ;	1) THE TRANSLATION WAS NOT FROM THE PROCESS TABLE

                                     031B  1338 ;  OR	2) THE TRANSLATION WAS NOT FROM USER MODE

                                     031B  1339 ;

                                     031B  1340 ; IGNORE THE TRANSLATION.  !!!NOTE: NODE CODE NOT NECESSARILY FINAL!!!

                                     031B  1341 ;

            6A            19     E1  031B  1342 	BBC	#FWA$V_NODE,(R10),20$		; BRANCH IF NO NODE SPEC

                          0C         031E       

            02         0B AA     91  031F  1343 	CMPB	FWA$B_XLTTBL(R10),#LOG$C_PROCESS	; FROM PROCESS TABLE?

                          3C     12  0323  1344 	BNEQ	NOTRAN_NET			; TREAT AS IF NO TRANSLATON IF NOT

            03         0A AA     91  0325  1345 	CMPB	FWA$B_XLTMODE(R10),#PSL$C_USER	; USER MODE TRANSLATION?

                          36     12  0329  1346 	BNEQ	NOTRAN_NET			; IF NOT, IGNORE

                                     032B  1347 ;

                                     032B  1348 ; CHECK TO SEE IF WE GOT AN ESCAPE STRING

                                     032B  1349 ; INDICATING A PROCESS - PERMANENT FILE

                                     032B  1350 ;

            1B            65     91  032B  1351 20$:	CMPB	(R5),#ESCAPE			; DO WE HAVE A P.P.F.?

                          09     13  032E  1352 	BEQL	PPERMFILE

                                     0330  1353 ;

                                     0330  1354 ; PARSE THE EQUIVALENCE STRING AS THE FILENAME STRING

                                     0330  1355 ;

            6A            01     8A  0330  1356 	BICB2	#FWA$M_DUPOK,(R10)		; LOGICAL NAMES MUST PROVIDE

                                     0333  1357 						; NO DUPLICATE FIELDS

            56            54     7D  0333  1358 	MOVQ	R4,R6				; GET INTO RIGHT REGISTERS

                          FDAC   31  0336  1359 	BRW	PARSE_STRING			; & GO PARSE IT

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  40

045             PARSE_STRING  -  PARSE INDIVIDUAL FILENAME STRI                                                                 (10)



                                     0339  1361 ;

                                     0339  1362 ; THE EQUIVALENCE STRING STARTS WITH AN ESCAPE

                                     0339  1363 ; LOOKS LIKE WE HAVE A PROCESS - PERMANENT FILE

                                     0339  1364 ;

                                     0339  1365 ; CHECK THAT TRANSLATION CAME FROM A MODE MORE PRIVILEGED

                                     0339  1366 ; THAN USER AND THAT WE HAVE AT LEAST 4 BYTES

                                     0339  1367 ;

                                     0339  1368 PPERMFILE:

            03         0A AA     91  0339  1369 	CMPB	FWA$B_XLTMODE(R10),#PSL$C_USER

                          A9     13  033D  1370 	BEQL	ERRLNE				; BRANCH IF USER MODE ENTRY

            04            54     D1  033F  1371 	CMPL	R4,#4				; IS ESCAPE STRING 4 BYTES LONG?

                          A4     1F  0342  1372 	BLSSU	ERRLNE				; NO - UNINTERPRETABLE

         08 AA            65     D0  0344  1373 	MOVL	(R5),FWA$L_ESCSTRING(R10)	; STORE THE ESCAPE STRING

                                     0348  1374 ;

                                     0348  1375 ; USE CHKFLD TO COPY THE PROCESS PERMANENT LOGICAL NAME

                                     0348  1376 ; TO THE DEVICE NAME FIELD

                                     0348  1377 ;

            54         1C AA     7D  0348  1378 	MOVQ	FWA$Q_LOGNAME(R10),R4		; GET DESCRIPTOR INTO R4,R5

                                     034C  1379 	CHKFLD	CHECKS=<M_WILD!M_MINUS>,-

                                     034C  1380 		FIELD=DEVICE,-

                                     034C  1381 		MAXSIZ=FWA$C_DEVBUFSIZ,ERR=DEV

                          00DC   30  034C       		BSBW	CHECK_FIELD

                               0060  034F       		.WORD	M_WILD!M_MINUS

                                 0F  0351       		.BYTE	FWA$C_DEVBUFSIZ

                                 0F  0352       		.BYTE	FWA$V_DEVICE

                                 3C  0353       		.BYTE	FWA$Q_DEVICE

                               0000' 0354       		.WORD	RMS$_DEV&^XFFFF

            6A            04     E1  0356  1382 	BBC	#FWA$V_FNA_PASS,(R10),10$	; BRANCH IF NOT PROCESSING FNA STRING

                          04         0359       

                                     035A  1383 	SSB	#FWA$V_EXP_DEV,(R10)		; SET EXPLICIT DEVICE FLAG

            6A            17     E2  035A       		BBSS	#FWA$V_EXP_DEV,(R10),30017$

                          00         035D       

                                     035E       30017$:

                          FE30   31  035E  1384 10$:	BRW	PRSXIT1				; ALL DONE

                                     0361  1385 ;

                                     0361  1386 ;  THE TRANSLATION IS NOT TO BE USED FOR A REMOTE NODE

                                     0361  1387 ;

                                     0361  1388 NOTRAN_NET:

            54         1C AA     7D  0361  1389 	MOVQ	FWA$Q_LOGNAME(R10),R4		; RESTORE LOGICAL NAME

                                     0365  1390 ;

                                     0365  1391 ; NO TRANSLATION OCCURRED

                                     0365  1392 ; (ALTHOUGH A LEADING UNDERSCORE MAY HAVE BEEN STRIPPED)

                                     0365  1393 ; PERFORM AN EFFECTIVE RSB TO THE RETURN ADDRESS IN R3

                                     0365  1394 ;

                                     0365  1395 NOTRANS:

                          63     17  0365  1396 	JMP	(R3)

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  41

045             PARSE_STRING  -  PARSE INDIVIDUAL FILENAME STRI                                                                 (12)



                                     0367  1398 

                                     0367  1399 	.SBTTL	NEXT_FIELD  -  SUBROUTINE TO SCAN STRING FOR TERMINATOR

                                     0367  1400 ;++

                                     0367  1401 ; FUNCTIONAL DESCRIPTION:

                                     0367  1402 ;

                                     0367  1403 ; THIS ROUTINE SCANS AN INPUT STRING FOR A TERMINATOR RETURNING

                                     0367  1404 ; A DESCRIPTOR FOR THE SUBSTRING PRECEDING THE TERMINATOR

                                     0367  1405 ; AND SETTING FLAGS BASED UPON THE CONTENTS OF THE FIELD.

                                     0367  1406 ;

                                     0367  1407 ;

                                     0367  1408 ; TERMINATOR CHARACTERS ARE:

                                     0367  1409 ;

                                     0367  1410 ;	:[]<>.,; 

                                     0367  1411 ;

                                     0367  1412 ; VALID FIELD CHARACTERS ARE:

                                     0367  1413 ;

                                     0367  1414 ; ALPHAS, NUMERICS, $, _, *

                                     0367  1415 ; AND MINUS SIGN AS THE FIRST CHARACTER OF THE FIELD

                                     0367  1416 ;

                                     0367  1417 ; NOTE:	AN EMBEDDED QUOTED STRING WITHIN A NODENAME IS ALLOWED.

                                     0367  1418 ;

                                     0367  1419 ; CALLING SEQUENCE:

                                     0367  1420 ;

                                     0367  1421 ;	VIA THE NXTFLD MACRO, E.G.,

                                     0367  1422 ;	NXTFLD	NULL=LABEL1,EOS=LABEL2

                                     0367  1423 ;

                                     0367  1424 ; INPUT PARAMETERS:

                                     0367  1425 ;

                                     0367  1426 ;	R6	INPUT STRING SIZE IN BYTES

                                     0367  1427 ;	R7	INPUT STRING START ADDRESS

                                     0367  1428 ;

                                     0367  1429 ; IMPLICIT INPUTS:

                                     0367  1430 ;

                                     0367  1431 ;	NONE.

                                     0367  1432 ;

                                     0367  1433 ; OUTPUTS:

                                     0367  1434 ;

                                     0367  1435 ;	R7	ADDR OF REMAINDER OF INPUT STRING (PAST TERMINATOR)

                                     0367  1436 ;	R6	SIZE OF REMAINDER OF INPUT STRING (PAST TERMINATOR)

                                     0367  1437 ;	R5	ADDR OF SUBSTRING PRECEDING TERMINATOR (R7 ON ENTRY)

                                     0367  1438 ;	R4	SIZE OF SUBSTRING PRECEDING TERMINATOR

                                     0367  1439 ;		(DOES NOT COUNT THE TERMINATOR)

                                     0367  1440 ;	R3	TERMINATOR CHARACTER

                                     0367  1441 ;	R2	STATUS CODE

                                     0367  1442 ;	R0-R1	DESTROYED

                                     0367  1443 ;

                                     0367  1444 ; IMPLICIT OUTPUTS:

                                     0367  1445 ;

                                     0367  1446 ;	NONE

                                     0367  1447 ;

                                     0367  1448 ; COMPLETION CODES:

                                     0367  1449 ;

                                     0367  1450 ;	THE STATUS CODE IN R2 HAS THE FOLLOWING BITS SET

                                     0367  1451 ;	TO INDICATE VARIOUS CONTENTS OF THE FIELD.

                                     0367  1452 ;	ALL OTHER BITS ARE RETURNED AS ZERO.

                                     0367  1453 ;

                                     0367  1454 ;	BIT		MEANING

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  42

045             NEXT_FIELD  -  SUBROUTINE TO SCAN STRING FOR TE                                                                 (12)



                                     0367  1455 ;

                                     0367  1456 ;	V_INVALID	INVALID CHARACTER SEEN IN FIELD

                                     0367  1457 ;	V_ALPHA		FIELD CONTAINED ALPHAS

                                     0367  1458 ;	V_MINUS		FIELD CONTAINED A LEADING MINUS SIGN

                                     0367  1459 ;	V_NUMERIC	FIELD CONTAINED NUMERICS

                                     0367  1460 ;	V_NOT_OCTAL	FIELD CONTAINED 8 OR 9

                                     0367  1461 ;	V_$_		FIELD CONTAINED $ OR _

                                     0367  1462 ;	V_WILD		FIELD CONTAINED AN ASTERISK

                                     0367  1463 ;	V_NULL		FIELD CONTAINED NO CHARACTERS (TERMINATOR ONLY).

                                     0367  1464 ;	V_NOTERM	END OF INPUT STRING REACHED BEFORE

                                     0367  1465 ;			A TERMINATOR WAS SEEN

                                     0367  1466 ;	V_ACS		AN ACCESS CONTROL STRING WAS FOUND IN NODENAME

                                     0367  1467 ;			FIELD

                                     0367  1468 ;

                                     0367  1469 ; SIDE EFFECTS:

                                     0367  1470 ;

                                     0367  1471 ;	RETURN IS MADE TO 1 OF 3 POINTS DEFINED BY THE

                                     0367  1472 ;	NXTFLD MACRO.

                                     0367  1473 ;

                                     0367  1474 ;		1.  AT THE LABEL DEFINED BY THE NULL = PARAMETER

                                     0367  1475 ;		    IF THE INPUT STRING IS NULL

                                     0367  1476 ;		2.  AT THE LABEL DEFINED BY THE EOS = PARAMETER

                                     0367  1477 ;		    IF THE FIELD IS TERMINATED BY END OF STRING

                                     0367  1478 ;		3.  IN-LINE (AFTER THE TWO IN-LINE BYTE OFFSETS)

                                     0367  1479 ;		    IF A TERMINATOR WAS SEEN

                                     0367  1480 ;--

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  43

045             NEXT_FIELD  -  SUBROUTINE TO SCAN STRING FOR TE                                                                 (12)



                                     0367  1482 NEXT_FIELD:

            55            57     D0  0367  1483 	MOVL	R7,R5				; COPY STRING ADDR TO SUB STRING

                          52     7C  036A  1484 	CLRQ	R2				; INITIALIZE STATUS TO SUCCESS

                                     036C  1485 						; AND ZERO THE TERMINATOR

                          56     D5  036C  1486 	TSTL	R6				; CHECK FOR NULL STRING

                          04     14  036E  1487 	BGTR	GETCHR				; PROCEED WITH PARSE OF STRING

                          6E     D6  0370  1488 NULL:	INCL	(SP)				; BUMP TO NULL RETURN OFFSET

                          75     11  0372  1489 	BRB	EOSRTN				; TAKE END-OF-STRING EXIT

            53            87     90  0374  1490 GETCHR:	MOVB	(R7)+,R3			; PICK UP NEXT CHARACTER

                                     0377  1491 ;

                                     0377  1492 ; CHECK FOR ALPHA - TAKES ADVANTAGE OF FACT THAT ASCII CODE FOR

                                     0377  1493 ; LEFT BRACKET IS ONE GREATER THAN THE ASCII CODE FOR Z

                                     0377  1494 ;

         5B 8F            53     91  0377  1495 	CMPB	R3,#^A/[/			; IS CHAR GREATER THAN Z?

                          34     1E  037B  1496 	BGEQU	CHKBRACKET			; BRANCH IF SO

         40 8F            53     91  037D  1497 	CMPB	R3,#<^A/A/-1>			; < A?

                          58     1A  0381  1498 	BGTRU	ALPHA				; BRANCH IF NOT (=ALPHA)

                                     0383  1499 ;

                                     0383  1500 ; CHECK FOR NUMERIC

                                     0383  1501 ; TAKES ADVANTAGE OF THE FACT THAT THE ASCII CODE FOR COLON

                                     0383  1502 ; IS ONE GREATER THAN THE CODE FOR 9

                                     0383  1503 ;

            3A            53     91  0383  1504 	CMPB	R3,#^A/:/			; IS CHAR > 9?

                          69     18  0386  1505 	BGEQ	CHKCOLON			; BRANCH IF SO

            30            53     91  0388  1506 	CMPB	R3,#^A/0/			; < 0 ?

                          77     18  038B  1507 	BGEQ	NUMERIC				; BRANCH IF NOT (=NUMERIC)

                                     038D  1508 ;

                                     038D  1509 ; CHECK FOR PERIOD, DOLLAR, ASTERISK, COMMA, AND MINUS SIGN

                                     038D  1510 ;

            2E            53     91  038D  1511 	CMPB	R3,#^A/./

                          39     13  0390  1512 	BEQL	TERMINATOR

            24            53     91  0392  1513 	CMPB	R3,#^A/$/

                          7A     13  0395  1514 	BEQL	DOLLAR_UNDER

            2A            53     91  0397  1515 	CMPB	R3,#^A/*/

                          7A     13  039A  1516 	BEQL	ASTERISK

            2C            53     91  039C  1517 	CMPB	R3,#^A/,/

                          2A     13  039F  1518 	BEQL	TERMINATOR

            2D            53     91  03A1  1519 	CMPB	R3,#^A/-/

                          75     13  03A4  1520 	BEQL	MINUS

                                     03A6  1521 ;

                                     03A6  1522 ; CHECK FOR QUOTE (VALID ONLY IF PART OF ACCESS CONTROL STRING IN NODENAME).

                                     03A6  1523 ;

            22            53     91  03A6  1524 	CMPB	R3,#^A/"/

                          7D     13  03A9  1525 	BEQL	QUOTE

                                     03AB  1526 ;

                                     03AB  1527 ; AN INVALID CHARACTER HAS BEEN ENCOUNTERED

                                     03AB  1528 ;

                                     03AB  1529 INVALID: SSB	#V_INVALID,R2			; FLAG INVALID CHARACTER

            52            09     E2  03AB       		BBSS	#V_INVALID,R2,30018$

                          00         03AE       

                                     03AF       30018$:

                          2D     11  03AF  1530 	BRB	TRYNXT				; AND CONTINUE SCAN

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  44

045             NEXT_FIELD  -  SUBROUTINE TO SCAN STRING FOR TE                                                                 (12)



                                     03B1  1532 ;

                                     03B1  1533 ; CHECK FOR LEFT BRACKET, LOWER CASE ASCII, RIGHT BRACKET, UNDERSCORE

                                     03B1  1534 ;

                                     03B1  1535 CHKBRACKET:

                          18     13  03B1  1536 	BEQL	TERMINATOR			; BRANCH IF LEFT BRACKET

         61 8F            53     91  03B3  1537 	CMPB	R3,#LOWERCASE_A			; LOWER CASE ASCII?

                          06     1F  03B7  1538 	BLSSU	10$				; BRANCH IF NOT

         7A 8F            53     91  03B9  1539 	CMPB	R3,#LOWERCASE_Z			; WELL IS IT?

                          1C     1B  03BD  1540 	BLEQU	ALPHA				; BRANCH IF YES

         5F 8F            53     91  03BF  1541 10$:	CMPB	R3,#^A/_/

                          4C     13  03C3  1542 	BEQL	DOLLAR_UNDER

         5D 8F            53     91  03C5  1543 	CMPB	R3,#^A/]/

                          E0     12  03C9  1544 	BNEQ	INVALID

                                     03CB  1545 ;

                                     03CB  1546 ; CHARACTER WAS RIGHT BRACKET - FALL THRU TO TERMINATOR

                                     03CB  1547 ;

                                     03CB  1548 ;++

                                     03CB  1549 ;

                                     03CB  1550 ; TERMINATOR SEEN

                                     03CB  1551 ;

                                     03CB  1552 ;

                                     03CB  1553 TERMINATOR:

                                     03CB  1554 ;

                                     03CB  1555 ; CALCULATE LENGTH OF FIELD NOT INCLUDING TERMINATOR

                                     03CB  1556 ;

            57            55     C3  03CB  1557 	SUBL3	R5,R7,R4

                          54         03CE       

            03            54     F5  03CF  1558 	SOBGTR	R4,10$				; DON'T COUNT TERMINATOR

            52            01     88  03D2  1559 	BISB2	#M_NULL,R2			; FLAG NULL FIELD

                          56     D7  03D5  1560 10$:	DECL	R6				; DECREMENT REMAINING STRING COUNT

                                     03D7  1561 						; TO ACCOUNT FOR TERMINATOR

            6E            02     C0  03D7  1562 	ADDL2	#2,(SP)				; SKIP ALTERNATE RETURNS

                                 05  03DA  1563 	RSB

                                     03DB  1564 ;

                                     03DB  1565 ; CHARACTER WAS ALPHA

                                     03DB  1566 ; SET FLAG AND CONTINUE SCAN

                                     03DB  1567 ;

            52            02     88  03DB  1568 ALPHA:	BISB2	#M_ALPHA,R2

            93            56     F5  03DE  1569 TRYNXT: SOBGTR	R6,GETCHR			; BRANCH IF MORE TO SCAN

            57            55     C3  03E1  1570 	SUBL3	R5,R7,R4			; SET FIELD SIZE

                          54         03E4       

                                     03E5  1571 ;

                                     03E5  1572 ; INPUT STRING EXHAUSTED BEFORE TERMINATOR SEEN

                                     03E5  1573 ; SET FLAG TO INDICATE NO TERMINATOR AND TAKE EOS RETURN

                                     03E5  1574 ;  (NOTE: OUTPUT STRING CANNOT BE NULL)

                                     03E5  1575 ;

                                     03E5  1576 NOTERM:	SSB	#V_NOTERM,R2			; FLAG CONDITION

            52            08     E2  03E5       		BBSS	#V_NOTERM,R2,30019$

                          00         03E8       

                                     03E9       30019$:

            50         00 BE     9A  03E9  1577 EOSRTN: MOVZBL	@0(SP),R0			; PICK UP EOS RETURN OFFSET

            6E            50     C0  03ED  1578 	ADDL2	R0,(SP)				; ADD IT TO RETURN PC

                                 05  03F0  1579 	RSB

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  45

045             NEXT_FIELD  -  SUBROUTINE TO SCAN STRING FOR TE                                                                 (12)



                                     03F1  1581 ;

                                     03F1  1582 ; CHECK FOR COLON, SEMI-COLON, <, AND >

                                     03F1  1583 ;

                                     03F1  1584 CHKCOLON:

                          D8     13  03F1  1585 	BEQL	TERMINATOR			; BRANCH IF COLON

            3B            53     91  03F3  1586 	CMPB	R3,#SEMICOLON

                          D3     13  03F6  1587 	BEQL	TERMINATOR

            3C            53     91  03F8  1588 	CMPB	R3,#^A/</

                          CE     13  03FB  1589 	BEQL	TERMINATOR

            3E            53     91  03FD  1590 	CMPB	R3,#^A/>/

                          C9     13  0400  1591 	BEQL	TERMINATOR

                          A7     11  0402  1592 	BRB	INVALID

                                     0404  1593 ;

                                     0404  1594 ; CHARACTER WAS NUMERIC  -  CHECK ALSO FOR OCTAL

                                     0404  1595 ; SET FLAG AND CONTINUE SCAN

                                     0404  1596 ;

                                     0404  1597 NUMERIC:

            52            04     88  0404  1598 	BISB2	#M_NUMERIC,R2			; SHOW NUMERIC

            37            53     91  0407  1599 	CMPB	R3,#^A/7/			; IS IT ALSO OCTAL?

                          D2     15  040A  1600 	BLEQ	TRYNXT				; BRANCH IF YES

            52            08     88  040C  1601 	BISB2	#M_NOT_OCTAL,R2			; NO, SO FLAG IT

                          CD     11  040F  1602 	BRB	TRYNXT

                                     0411  1603 ;

                                     0411  1604 ; CHARACTER WAS EITHER DOLLAR SIGN OR UNDERSCORE

                                     0411  1605 ; SET FLAG & CONTINUE SCAN

                                     0411  1606 ;

                                     0411  1607 DOLLAR_UNDER:

            52            10     88  0411  1608 	BISB2	#M_$_,R2

                          C8     11  0414  1609 	BRB	TRYNXT

                                     0416  1610 ;

                                     0416  1611 ; CHARACTER WAS AN ASTERISK

                                     0416  1612 ; SET WILD CARD FLAG

                                     0416  1613 ; NOTE: CHECK_FIELD WILL CHECK THAT THIS WAS ONLY

                                     0416  1614 ;	CHARACTER IN THE FIELD

                                     0416  1615 ;

                                     0416  1616 ASTERISK:

            52            20     88  0416  1617 	BISB2	#M_WILD,R2

                          C3     11  0419  1618 	BRB	TRYNXT

                                     041B  1619 ;

                                     041B  1620 ; CHARACTER WAS MINUS SIGN

                                     041B  1621 ; CHECK FOR 1ST CHARACTER OF FIELD AND IF NOT DECLARE INVALID,

                                     041B  1622 ; OTHERWISE SET FLAG

                                     041B  1623 ;

            57            55     C3  041B  1624 MINUS:	SUBL3	R5,R7,R4			; GET THE CHARACTER POSITION

                          54         041E       

            89            54     F5  041F  1625 	SOBGTR	R4,INVALID			; BRANCH IF NOT FIRST CHARACTER

            52         40 8F     88  0422  1626 	BISB2	#M_MINUS,R2			; FLAG MINUS

                          B6     11  0426  1627 	BRB	TRYNXT				; AND CONTINUE

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  46

045             NEXT_FIELD  -  SUBROUTINE TO SCAN STRING FOR TE                                                                 (12)



                                     0428  1629 ;++

                                     0428  1630 ;

                                     0428  1631 ; CHARACTER WAS A QUOTE - SPECIFIC CODE FOR NETWORKS.

                                     0428  1632 

                                     0428  1633 ; AN ACCESS CONTROL STRING (APPEARING AS AN EMBEDDED QUOTED STRING) IS

                                     0428  1634 ; ALLOWED AS THE LAST ELEMENT OF A NODENAME. A LEADING QUOTE HAS BEEN FOUND,

                                     0428  1635 ; SO CHECK FOR THE MATCHING QUOTE AND VERIFY THAT THIS IS FOLLOWED BY A

                                     0428  1636 ; DOUBLE COLON DELIMITER; OTHERWISE TREAT THE LEADING QUOTE AS AN INVALID

                                     0428  1637 ; CHARACTER.

                                     0428  1638 ;

                                     0428  1639 ;--

                                     0428  1640 QUOTE:	$PSECT_BR	NF$NETWORK

                          FC63'  31  0428       		BRW	NF$NETWORK17

                                     042B       		.SAVE

                                 0000008E       		.PSECT	NF$NETWORK,GBL,NOWRT

                                     008E       NF$NETWORK17:

                          56     D7  008E  1641 	DECL	R6			; ADJUST COUNT FOR LEADING QUOTE

                                     0090  1642 					; THAT WAS SKIPPED

            56            22     3A  0090  1643 	LOCC	#^A/"/,R6,(R7)		; SEARCH FOR MATCHING QUOTE

                          67         0093       

                          18     13  0094  1644 	BEQL	10$			; BRANCH IF NO MATCH

            03            50     91  0096  1645 	CMPB	R0,#<1+2>		; ARE THERE AT LEAST TWO CHARACTERS

                                     0099  1646 					; BEYOND THE QUOTE CHARACTER?

                          13     19  0099  1647 	BLSS	10$			; BRANCH IF NOT ENOUGH

                          81     95  009B  1648 	TSTB	(R1)+			; SKIP OVER MATCHING QUOTE

                                     009D  1649 					; NOTE: R6 WILL BE ADJUSTED AT TRYNXT

       3A3A 8F            61     B1  009D  1650 	CMPW	(R1),#^A/::/		; DOES DOUBLE COLON DELIMITER

                                     00A2  1651 					; IMMEDIATELY FOLLOW?

                          0A     12  00A2  1652 	BNEQ	10$			; BRANCH IF NO

                                     00A4  1653 	SSB	#V_ACS,R2		; DENOTE ACCESS CONTROL STRING PRESENT

            52            0A     E2  00A4       		BBSS	#V_ACS,R2,30020$

                          00         00A7       

                                     00A8       30020$:

            56            50     7D  00A8  1654 	MOVQ	R0,R6			; UPDATE BYTE REMAINING COUNT IN R6

                                     00AB  1655 					; UPDATE STRING POINTER IN R7

                          0330'  31  00AB  1656 	BRW	TRYNXT			; EXAMINE NEXT CHARACTER

                          56     D6  00AE  1657 10$:	INCL	R6			; RESTORE R6 TO VALUE ON ENTRY

                          02F8'  31  00B0  1658 	BRW	INVALID			; DECLARE QUOTE AN INVALID CHARACTER

                                     00B3  1659 	$PSECT_RESTORE

                                 0000042B       		.RESTORE

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  47

045             CHECK_FIELD  -  CHECK FOR VALID FIELD AND COPY                                                                  (13)



                                     042B  1661 	.SBTTL	CHECK_FIELD  -  CHECK FOR VALID FIELD AND COPY ROUTINE

                                     042B  1662 ;++

                                     042B  1663 ; FUNCTIONAL DESCRIPTION:

                                     042B  1664 ;

                                     042B  1665 ; THIS ROUTINE CHECKS THE FIELD DESCRIBED BY R4,R5 FOR

                                     042B  1666 ; VALIDITY BASED UPON THE FIELD FLAGS IN R2 AND THE

                                     042B  1667 ; DESIRED CHECKS SPECIFIED BY THE  IN-LINE ARGUMENTS.

                                     042B  1668 ;

                                     042B  1669 ; CHECKS AND OPERATIONS PERFORMED:

                                     042B  1670 ;

                                     042B  1671 ;	1.  CHECKS THAT THE FIELD CONTAINS NO INVALID CHARACTERS

                                     042B  1672 ;	    (V_INVALID BIT IN R2)

                                     042B  1673 ;	2.  CHECKS THAT NONE OF THE BITS SPECIFIED IN THE CHECKS=

                                     042B  1674 ;  	    PARAMETER ARE ON IN R2 BYTE 0

                                     042B  1675 ;	    (NULL, ALPHA, NUMERIC, NOT_OCTAL,$_,WILD,AND MINUS)

                                     042B  1676 ;	3.  CHECKS THAT THE FIELD SIZE IS NOT GREATER THAN THAT

                                     042B  1677 ;	    SPECIFIED IN THE MAXSIZ= PARAMETER

                                     042B  1678 ;	4.  IF THE FIELD IS NULL, RETURN

                                     042B  1679 ;	5.  IF FWA$V_RLF_PASS SET AND THE FIELD IS NOT

                                     042B  1680 ;	    SELECTED BY THE TYPE OF PARSE (INPUT OR OUTPUT, BASED

                                     042B  1681 ;	    UPON THE FOP BIT OFP), RETURN, THUS IGNORING THE FIELD

                                     042B  1682 ;	6.  IF THE FILENAME ELEMENT SPECIFIED IN THE FIELD=

                                     042B  1683 ;	    PARAMETER HAS ALREADY BEEN SEEN, THEN

                                     042B  1684 ;	    RETURN UNLESS FWA$V_DUPOK IS CLEAR (DUPLICATES

                                     042B  1685 ;	    NOT ALLOWED) IN WHICH CASE GENERATE AN ERROR)

                                     042B  1686 ;	7.  FLAG THE FILENAME ELEMENT PRESENT

                                     042B  1687 ;	8.  IF THE FIELD IS A WILD CARD, FLAG THAT TOO,

                                     042B  1688 ;	    BOTH FOR SPECIFIC FIELD AND OVERALL, UNLESS

                                     042B  1689 ;	    FIELD IS NOT A SINGLE ASTERISK IN WHICH 

                                     042B  1690 ;  	    CASE GENERATE AN ERROR

                                     042B  1691 ;	9.  IF THIS IS A LOGICAL NAME (FIELD=LOGNAME)

                                     042B  1692 ;	    SAVE THE DESCRIPTOR ONLY, OTHERWISE COPY THE

                                     042B  1693 ;	    FIELD TO THE ELEMENT BUFFER SETTING THE

                                     042B  1694 ;	    LENGTH IN THE DESCRIPTOR.

                                     042B  1695 ;      10.  RETURN PAST THE IN-LINE ARGUMENTS.

                                     042B  1696 ;      11.  IF AN ERROR IS DETECTED, GENERATE AN ERROR BY

                                     042B  1697 ;	    MOVING THE CODE SPECIFIED IN THE ERR=PARAMETER

                                     042B  1698 ;	    TO R0, POPPING THE RETURN PC AND BRANCHING TO

                                     042B  1699 ;	    PRSERR.

                                     042B  1700 ;

                                     042B  1701 ; CALLING SEQUENCE:

                                     042B  1702 ;

                                     042B  1703 ;	VIA THE CHKFLD MACRO, E.G.,

                                     042B  1704 ;	CHKFLD	CHECKS=<M_NULL!M_WILD>,		; R2 BITS THAT MUST BE OFF

                                     042B  1705 ;		FIELD=NODE,			; FIELD NAME

                                     042B  1706 ;		MAXSIZ=40,			; FIELD MAXIMUM SIZE

                                     042B  1707 ;		ERR=NOD				; ERROR CODE

                                     042B  1708 ;

                                     042B  1709 ;  ALTERNATE ENTRY AT CHECK_DIR_FIELD WITH AP = ADDRESS OF ARG LIST.

                                     042B  1710 ;

                                     042B  1711 ; INPUT PARAMETERS:

                                     042B  1712 ;

                                     042B  1713 ;	R10	FWA ADDRESS

                                     042B  1714 ;	R5	FIELD STARTING ADDRESS

                                     042B  1715 ;	R4	FIELD LENGTH

                                     042B  1716 ;	R2	FLAGS WORD (FROM NEXT_FIELD)

                                     042B  1717 ;

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  48

045             CHECK_FIELD  -  CHECK FOR VALID FIELD AND COPY                                                                  (13)



                                     042B  1718 ;	THE IN-LINE PARAMETERS FROM THE CHKFLD MACRO

                                     042B  1719 ;

                                     042B  1720 ; IMPLICIT INPUTS:

                                     042B  1721 ;

                                     042B  1722 ;	THE CURRENT STATE OF THE FWA, INCLUDING

                                     042B  1723 ;	FWA$B_FLDFLGS, FWA$V_RLF_PASS,FWA$V_DUPOK,FWA$V_LOGNAME

                                     042B  1724 ;

                                     042B  1725 ; OUTPUTS:

                                     042B  1726 ;

                                     042B  1727 ;	AP		SET TO ADDRESS OF ARGUMENT LIST

                                     042B  1728 ;	R0,R1,R4,R5	DESTROYED

                                     042B  1729 ;

                                     042B  1730 ; IMPLICIT OUTPUTS:

                                     042B  1731 ;

                                     042B  1732 ;	-FWA$B_FLDFLGS OR FWA$V_LOGNAME OR FWA$V_NODE SET IF FIELD COPIED

                                     042B  1733 ;	-FWA$B_WILDFLGS AND FWA$V_WILD SET IF FIELD WILD

                                     042B  1734 ;	-FWA$B_DIRFLGS SET IF DIRECTORY FIELD (ALSO FWA$B_DIRWCFLGS)

                                     042B  1735 ;	-THE INDICATED FWA ELEMENT BUFFER AND ITS DESCRIPTOR ARE

                                     042B  1736 ;	 UPDATED IF FIELD COPIED

                                     042B  1737 ;

                                     042B  1738 ; COMPLETION CODES:

                                     042B  1739 ;

                                     042B  1740 ;	NONE (SEE 10 AND 11 UNDER FUNCTIONAL DESCRIPTION)

                                     042B  1741 ;

                                     042B  1742 ; SIDE EFFECTS:

                                     042B  1743 ;

                                     042B  1744 ;	NONE

                                     042B  1745 ;

                                     042B  1746 ;--

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  49

045             CHECK_FIELD  -  CHECK FOR VALID FIELD AND COPY                                                                  (13)



                                     042B  1748 CHECK_FIELD:

            5C            6E     D0  042B  1749 	MOVL	(SP),AP				; GET POINTER TO IN-LINE ARGS

            6E            07     C0  042E  1750 	ADDL2	#7,(SP)				; SKIP PAST IN-LINE ARGS

                                     0431  1751 ;++

                                     0431  1752 ;

                                     0431  1753 ;  ALTERNATE ENTRY POINT FOR MULTI-LEVEL DIRECTORY PROCESSING

                                     0431  1754 ;

                                     0431  1755 ;--

                                     0431  1756 CHECK_DIR_FIELD:

            51            5C     D0  0431  1757 	MOVL	AP,R1				; COPY THE ARGLIST ADDRESS

            52            09     E0  0434  1758 	BBS	#V_INVALID,R2,CHKER1		; BRANCH IF INVALID CHAR IN FIELD

                          76         0437       

            52            81     B3  0438  1759 	BITW	(R1)+,R2			; CHECK IF ANY BAD BIT ON

                          71     12  043B  1760 	BNEQ	CHKER1				; AND BRANCH IF SO

            50            81     9A  043D  1761 	MOVZBL	(R1)+,R0			; GET MAXSIZ

            50            54     D1  0440  1762 	CMPL	R4,R0				; IS FIELD TOO LONG?

                          7C     1A  0443  1763 	BGTRU	CHKERR				; BRANCH IF SO

            50            81     9A  0445  1764 	MOVZBL	(R1)+,R0			; GET FWA BIT 

            6A            03     E1  0448  1765 	BBC	#FWA$V_RLF_PASS,(R10),10$	; BRANCH IF NOT PARSE OF RLF STRING

                          26         044B       

                                     044C  1766 ;

                                     044C  1767 ;  THIS IS THE PARSE OF THE RELATED FILE STRING

                                     044C  1768 ;  LOOK AT THE OFP FOP BIT TO DETERMINE WHETHER THIS FIELD IS

                                     044C  1769 ;  TO BE UTILIZED OR NOT

                                     044C  1770 ;

                                     044C  1771 ;  THE RULES ARE:

                                     044C  1772 ;	IF THIS IS A PARSE OF AN INPUT FILE ALL FIELDS EXCEPT VERSION ARE STICKY.

                                     044C  1773 ;	IF THIS IS A PARSE OF AN OUTPUT FILE SPEC, ONLY THE FILENAME AND TYPE

                                     044C  1774 ;	ARE STICKY. (STICKY MEANS THEY WILL BE DEFAULTED FROM THE RELATED FILE

                                     044C  1775 ;	RESULTANT FILENAME STRING.)  ADDITIONALLY, IF THE NAME, TYPE OR

                                     044C  1776 ;	VERSION OF AN OUTPUT FILE STRING CONTAINS A WILD CARD, THIS IMPLIES

                                     044C  1777 ;	AN EXPLICIT DEFAULT FROM THE RELATED FILENAME STRING.

                                     044C  1778 ;

            6C            07     E1  044C  1779 	BBC	#V_NAMTYP,(AP),5$		; BRANCH IF NEITHER NAME NOR TYPE

                          0B         044F       

            68            3D     E1  0450  1780 	BBC	#FAB$V_OFP+FOP,(R8),15$		; BRANCH IF INPUT FILE PARSE

                          21         0453       

                                     0454  1781 ;

                                     0454  1782 ;  THIS IS AN OUTPUT FILE PARSE, NAME OR TYPE FIELD.

                                     0454  1783 ;  CHECK FOR WILD CARD AND IF SO USE THE RLF FIELD, ELSE JUST USE IF

                                     0454  1784 ;  NOT ALREADY SEEN.

                                     0454  1785 ;

                                     0454  1786 	ASSUME	FWA$V_WC_NAME EQ <FWA$V_NAME+8>

                                     0454  1787 	ASSUME	FWA$V_WC_TYPE EQ <FWA$V_TYPE+8>

         01 AA            50     E0  0454  1788 	BBS	R0,1(R10),20$			; BRANCH IF FIELD IS WILD CARD

                          3B         0458       

                          1A     11  0459  1789 	BRB	15$				; GO DEFAULT THE FIELD IF NOT SEEN

                                     045B  1790 ;

                                     045B  1791 ;  CHECK FOR THIS FIELD BEING THE FILE VERSION AND PROCESS ACCORDINGLY

                                     045B  1792 ;

            0B            50     91  045B  1793 5$:	CMPB	R0,#FWA$V_VERSION		; IS THIS THE VERSION?

                          0E     12  045E  1794 	BNEQ	9$				; BRANCH IF NOT

            68            3D     E1  0460  1795 	BBC	#FAB$V_OFP+FOP,(R8),CHKRTN	; BRANCH IF INPUT PARSE (IGNORE)

                          46         0463       

            6A            13     E1  0464  1796 	BBC	#FWA$V_WC_VER,(R10),CHKRTN	; BRANCH IF NOT WILD CARD (")

                          42         0467       

                                     0468  1797 	CSB	#FWA$V_CUR_VER,(R10)		; CLEAR WC VER FLG FOR CURRENT FILE

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  50

045             CHECK_FIELD  -  CHECK FOR VALID FIELD AND COPY                                                                  (13)



            6A            06     E5  0468       		BBCC	#FWA$V_CUR_VER,(R10),30021$

                          00         046B       

                                     046C       30021$:

                          26     11  046C  1798 	BRB	20$				; GO TO RLF VERSION

                                     046E  1799 ;

                                     046E  1800 ;  THE FIELD IS NODE, DEVICE OR DIRECTORY.  USE AS DEFAULT ONLY IF THIS

                                     046E  1801 ;  IS AN INPUT FILE PARSE.

                                     046E  1802 ;

            68            3D     E0  046E  1803 9$:	BBS	#FAB$V_OFP+FOP,(R8),CHKRTN	; IGNORE NODE, DEVICE, OR DIRECTORY

                          38         0471       

                                     0472  1804 						; IF NOT WANTED

                                     0472  1805 ;

                                     0472  1806 ;  CHECK FOR FIELD NULL ALREADY SEEN.

                                     0472  1807 ;

                                     0472  1808 10$:	ASSUME	V_NULL EQ 0

            35            52     E8  0472  1809 	BLBS	R2,CHKRTN			; BRANCH IF NULL FIELD

            6A            50     E2  0475  1810 15$:	BBSS	R0,(R10),CHKDUP			; BRANCH IF DUPLICATE (IGNORE)

                          3C         0478       

                                     0479  1811 						; ELSE SHOW WE HAVE IT NOW

                                     0479  1812 ;

                                     0479  1813 ; CHECK FOR WILD CARD

                                     0479  1814 ;

            52            05     E1  0479  1815 	BBC	#V_WILD,R2,20$			; BRANCH IF FIELD NOT A WILD CARD

                          17         047C       

                                     047D  1816 	SSB	#FWA$V_WILDCARD,(R10)		; SET OVERALL FLAG

            6A            18     E2  047D       		BBSS	#FWA$V_WILDCARD,(R10),30022$

                          00         0480       

                                     0481       30022$:

                                     0481  1817 	ASSUME	FWA$V_WC_VER EQ <FWA$V_VERSION+8>

                                     0481  1818 	ASSUME	FWA$V_WILD_UFD EQ <FWA$V_DIR1+8>

                                     0481  1819 	SSB	R0,1(R10)			; SET SPECIFIC WILD CARD

         01 AA            50     E2  0481       		BBSS	R0,1(R10),30023$

                          00         0485       

                                     0486       30023$:

                                     0486  1820 						; AT SAME BIT POSITION IN NEXT BYTE

            0B            50     91  0486  1821 	CMPB	R0,#FWA$V_VERSION		; WILDCARD VERSION?

                          04     12  0489  1822 	BNEQ	17$				; BRANCH IF NOT

                                     048B  1823 	SSB	#FWA$V_CUR_VER,(R10)		; YES, SET CURRENT FILE WC VER FLG

            6A            06     E2  048B       		BBSS	#FWA$V_CUR_VER,(R10),30024$

                          00         048E       

                                     048F       30024$:

            01            54     91  048F  1824 17$:	CMPB	R4,#1				; FIELD MUST BE ONLY 1 BYTE

                          2D     12  0492  1825 	BNEQ	CHKERR				; BRANCH IF NOT

                                     0494  1826 20$:

            50            61     9A  0494  1827 	MOVZBL	(R1),R0				; GET DESCRIPTOR OFFSET

            50            5A     C0  0497  1828 	ADDL2	R10,R0				; & MAKE IT AN ADDR

                                     049A  1829 ;

                                     049A  1830 ; IF THIS IS A LOGICAL NAME DON'T COPY THE STRING

                                     049A  1831 ;

            1C            61     91  049A  1832 	CMPB	(R1),#FWA$Q_LOGNAME

                          11     13  049D  1833 	BEQL	CPYDSC				; BRANCH IF THIS IS A LOGICAL NAME

                          0C     BB  049F  1834 	PUSHR	#^M<R2,R3>			; SAVE FLAGS AND TERMINATOR

            80            54     D0  04A1  1835 	MOVL	R4,(R0)+			; SAVE LENGTH

            65            54     28  04A4  1836 	MOVC3	R4,(R5),@(R0)+			; & COPY THE STRING

                          90         04A7       

                          0C     BA  04A8  1837 	POPR	#^M<R2,R3>			; RESTORE FLAGS AND TERMINATOR

                                     04AA  1838 CHKRTN:	RMSSUC

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  51

045             CHECK_FIELD  -  CHECK FOR VALID FIELD AND COPY                                                                  (13)



            50            01     D0  04AA       		MOVL	#1,R0

                                 05  04AD  1839 	RSB

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  52

045             CHECK_FIELD  -  CHECK FOR VALID FIELD AND COPY                                                                  (13)



                                     04AE  1841 ;

                                     04AE  1842 ;  EXTENDED BRANCH

                                     04AE  1843 ;

                          11     11  04AE  1844 CHKER1:	BRB	CHKERR

                                     04B0  1845 ;

                                     04B0  1846 ; NO-COPY OF STRING SINCE IT'S A LOGICAL NAME

                                     04B0  1847 ; JUST SAVE DESCRIPTOR

                                     04B0  1848 ;

            60            54     7D  04B0  1849 CPYDSC:	MOVQ	R4,(R0)

                          F5     11  04B3  1850 	BRB	CHKRTN

                                     04B5  1851 ;

                                     04B5  1852 ; THIS FIELD HAS ALREADY BEEN SET

                                     04B5  1853 ; IGNORE IT AS LONG AS FWA$V_DUPOK IS SET

                                     04B5  1854 ;

                                     04B5  1855 	ASSUME	FWA$V_DUPOK EQ 0

            F2            6A     E8  04B5  1856 CHKDUP:	BLBS	(R10),CHKRTN

                                     04B8  1857 ;

                                     04B8  1858 ;  IF THIS IS DUPLICATE DEVICE BECAUSE OF NAM BLOCK INPUT, IGNORE

                                     04B8  1859 ;  THE DUPLICATE

                                     04B8  1860 ;

            0F            50     91  04B8  1861 	CMPB	R0,#FWA$V_DEVICE		; IS THIS A DEVICE?

                          04     12  04BB  1862 	BNEQ	CHKERR				; BRANCH IF NOT - SOLID ERROR

            6A            05     E4  04BD  1863 	BBSC	#FWA$V_NAM_DVI,(R10),CHKRTN	; BRANCH IF DEVICE CAME FROM

                          E9         04C0       

                                     04C1  1864 						; NAM BLOCK, IGNORING DUPLICATE

                                     04C1  1865 ;

                                     04C1  1866 ; AN ERROR HAS BEEN ENCOUNTERED

                                     04C1  1867 ;

                                     04C1  1868 CHKERR:	$PSECT_BR	L$RMS0

                          FB91'  31  04C1       		BRW	L$RMS018

                                     04C4       		.SAVE

                                 00000055       		.PSECT	L$RMS0,GBL,NOWRT

                                     0055       L$RMS018:

            50         05 AC     3C  0055  1869 	MOVZWL	5(AP),R0			; SET ERROR CODE

            6C            0F     E0  0059  1870 	BBS	#V_RETURN_ON_ERR,(AP),10$	; BRANCH IF RETURN SPECIFIED

                          05         005C       

                          02     BA  005D  1871 	POPR	#^M<R1>				; POP RETURN PC

                          FFD0   31  005F  1872 	BRW	PRSERR				; & EXIT

                                 05  0062  1873 10$:	RSB

                                     0063  1874 	$PSECT_RESTORE

                                 000004C4       		.RESTORE

                                     04C4  1875 

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  53

045             RM$EXPSTRING  -  BUILD EXPANDED OR RESULTANT NA                                                                 (14)



                                     04C4  1877 	.SBTTL	RM$EXPSTRING  -  BUILD EXPANDED OR RESULTANT NAME STRING

                                     04C4  1878 ;++

                                     04C4  1879 ; FUNCTIONAL DESCRIPTION:

                                     04C4  1880 ;

                                     04C4  1881 ;  THIS ROUTINE EXAMINES THE USER'S NAM BLOCK FOR AN EXPANDED

                                     04C4  1882 ;  NAME STRING OR RESULTANT NAME STRING BUFFER, AND IF FOUND BUILDS

                                     04C4  1883 ;  THE STRING IN THE BUFFER UTILIZING THE SEPARATELY PARSED ELEMENTS

                                     04C4  1884 ;  IN THE FWA AND NWA.

                                     04C4  1885 ;

                                     04C4  1886 ;  CALLING SEQUENCE:

                                     04C4  1887 ;

                                     04C4  1888 ;	BSBW	RM$EXPSTRING

                                     04C4  1889 ;

                                     04C4  1890 ;  INPUT PARAMETERS:

                                     04C4  1891 ;

                                     04C4  1892 ;	AP	ADDRESS OF 5-BYTE ARGUMENT LIST OF THE FORMAT:

                                     04C4  1893 ;		.BYTE	OFFSET TO EITHER NAM$L_ESA OR _RSA

                                     04C4  1894 ;		RMSERR_WORD	ESA (OR RST)

                                     04C4  1895 ;		RMSERR_WORD	ESS (OR RSS)

                                     04C4  1896 ;	R10	FWA ADDRESS

                                     04C4  1897 ;	R9	IFAB ADDRESS

                                     04C4  1898 ;	R8	FAB ADDRESS

                                     04C4  1899 ;	R7	NAM BLOCK ADDRESS

                                     04C4  1900 ;

                                     04C4  1901 ; IMPLICIT INPUTS:

                                     04C4  1902 ;

                                     04C4  1903 ;	THE CURRENT CONTENTS OF THE FWA.

                                     04C4  1904 ;	FAB$L_NAM, NAM$L_ESA (OR _RSA), NAM$B_ESS (OR _RSS)

                                     04C4  1905 ;	NAM$B_BID, NAM$B_BLN, NAM$W_FID, NAM$W_DID

                                     04C4  1906 ;

                                     04C4  1907 ;  OUTPUTS:

                                     04C4  1908 ;

                                     04C4  1909 ;	R1-R7,AP	DESTROYED

                                     04C4  1910 ;	R0		STATUS CODE

                                     04C4  1911 ;

                                     04C4  1912 ; IMPLICIT OUTPUTS:

                                     04C4  1913 ;

                                     04C4  1914 ;	IF THE SPECIFIED BUFFER EXISTS,

                                     04C4  1915 ;	THE BUFFER IS FILLED IN WITH THE EXPANDED OR RESULTANT

                                     04C4  1916 ;	FILENAME STRING, AND ITS LENGTH IS STORED IN ESL (OR _RSL)

                                     04C4  1917 ;

                                     04C4  1918 ; COMPLETION CODES:

                                     04C4  1919 ;

                                     04C4  1920 ;	STANDARD RMS, IN PARTICULAR, SUC, ESA, ESS, RSA, RSS, OR NAM

                                     04C4  1921 ;

                                     04C4  1922 ; SIDE EFFECTS:

                                     04C4  1923 ;

                                     04C4  1924 ;	IF A NAM BLOCK EXISTS IT WILL HAVE BEEN PROBED.

                                     04C4  1925 ;

                                     04C4  1926 ;--

                                     04C4  1927 	$NEWPSECT	F$RMSOPEN0NAM

                                     04C4       		.SAVE

                                 000000E9       		.PSECT	F$RMSOPEN0NAM,GBL,NOWRT

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  54

045             RM$EXPSTRING  -  BUILD EXPANDED OR RESULTANT NA                                                                 (14)



                                     00E9  1929 	ASSUME	NAM$L_ESA EQ NAM$B_ESL+1

                                     00E9  1930 	ASSUME	NAM$B_ESL  EQ NAM$B_ESS+1

                                     00E9  1931 	ASSUME	NAM$L_RSA EQ NAM$B_RSL+1

                                     00E9  1932 	ASSUME	NAM$B_RSL EQ NAM$B_RSS+1

                                     00E9  1933 RM$EXPSTRING::

                          FF5C   30  00E9  1934 	BSBW	RM$CHKNAMBLK			; CHECK IT OUT

                          58     DD  00EC  1935 	PUSHL	R8				; SAVE FAB ADDRESS

            53            8C     9A  00EE  1936 	MOVZBL	(AP)+,R3			; GET OFFSET TO ESA OR RSA FIELD

            57            53     C1  00F1  1937 	ADDL3	R3,R7,R8			; MAKE INTO ADDRESS

                          58         00F4       

            53            68     D0  00F5  1938 	MOVL	(R8),R3				; GET ADDRESS OF BUFFER

                          67     13  00F8  1939 	BEQL	EXIT_SUC			; EXIT IF NONE

            54         FE A8     9A  00FA  1940 	MOVZBL	-2(R8),R4			; GET BUFFER SIZE

                          61     13  00FE  1941 	BEQL	EXIT_SUC			; EXIT QUIETLY IF ZERO

         00 BE            38     E1  0100  1942  	BBC	#FAB$V_NAM+FOP,@0(SP),5$	; BRANCH IF NOT OPEN BY NAME BLOCK

                          05         0104       

                       24 A7     D5  0105  1943 	TSTL	NAM$W_FID(R7)			; FILE ID INPUT?

                          57     12  0108  1944 	BNEQ	EXIT_SUC			; YES - BRANCH, OMITTING DIRECTORY

                                     010A  1945 						; AND FILE NAME

                                     010A  1946 5$:	IFNOWRT	R4,(R3),ERRSA,IFB$B_MODE(R9); CHECK ACCESS

            54         0A A9     0D  010A       		PROBEW	IFB$B_MODE(R9),R4,(R3)

                          63         010E       

                          64     13  010F       		BEQL	ERRSA

                          78     94  0111  1947 	CLRB	-(R8)				; CLEAR ESL (OR RSL)

                                     0113  1948 ;

                                     0113  1949 ; MOVE THE FILENAME ELEMENTS TO USER'S BUFFER

                                     0113  1950 ;

            56         34 AA     7E  0113  1951 	MOVAQ	FWA$Q_NODE(R10),R6		; GET NODE DESCRIPTOR ADDRESS

                          6A     10  0117  1952   	BSBB	MOVE_NEXT			; COPY THE NODE NAME

            6A            1A     E0  0119  1953 	BBS	#FWA$V_QUOTED,(R10),COPY_QUOTED ; BRANCH IF QUOTED STRING PARSED

                          4B         011C       

                                     011D  1954 	ASSUME	FWA$Q_DEVICE EQ <FWA$Q_NODE+8>

                          64     10  011D  1955     	BSBB	MOVE_NEXT			; COPY DEVICE NAME

            6A            0F     E1  011F  1956 	BBC	#FWA$V_DEVICE,(R10),10$		; BRANCH IF NO DEVICE SEEN

                          0A         0122       

            50            3A     90  0123  1957 	MOVB	#^A/:/,R0			; APPEND A COLON

                          6C     10  0126  1958 	BSBB	MOVE_CHAR			;  TO DEVICE NAME

                       08 AA     95  0128  1959 	TSTB	FWA$B_ESCFLG(R10)		; IS THIS A PROCESS-PERMANENT FILE?

                          34     12  012B  1960 	BNEQ	EXIT_SUC			; BRANCH IF YES

            6A            0E     E1  012D  1961 10$:	BBC	#FWA$V_DIR,(R10),COPY_NAME	; BRANCH IF NO DIRECTORY SEEN

                          29         0130       

                                     0131  1962 ;

                                     0131  1963 ; BUILD UP FULL DIRECTORY SPEC FROM THE PARTS

                                     0131  1964 ;

                                     0131  1965 	ASSUME	FWA$Q_DIR1 EQ <FWA$Q_DEVICE+8>

         07 AA            02     83  0131  1966 	SUBB3	#2,FWA$B_DIRTERM(R10),R0	; GET LEFT BRACKET

                          50         0135       

                          40     10  0136  1967 	BSBB	MOVE_DIR			; MOVE FIRST FIELD

            6A            1B     E0  0138  1968 	BBS	#FWA$V_GRPMBR,(R10),30$		; BRANCH IF [GRP,MBR] FORMAT

                          13         013B       

                                 EF  013C  1969 	EXTZV	#FWA$V_DIR_LVLS,-

            03            1D         013D  1970 		#FWA$S_DIR_LVLS,(R10),-(SP)	; GET THE # OF DIRECTORY LEVELS

            7E            6A         013F       

                          05     11  0141  1971 	BRB	20$

            50            2E     90  0143  1972 15$:	MOVB	#^A/./,R0			; DIRECTORY NAME SEPARATOR

                          30     10  0146  1973 	BSBB	MOVE_DIR			; COPY SUB-DIRECTORY

            F8            6E     F4  0148  1974 20$:	SOBGEQ	(SP),15$			; BRANCH IF MORE DIRECTORIES

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  55

045             RM$EXPSTRING  -  BUILD EXPANDED OR RESULTANT NA                                                                 (14)



                          8E     D5  014B  1975 	TSTL	(SP)+				; REMOVE OLD COUNT

                          05     11  014D  1976 	BRB	COPY_DIRTERM			; GO COPY THE RIGHT BRACKET

            50            2C     90  014F  1977 30$:	MOVB	#^A/,/,R0			; USE COMMAS AS SEPARATOR

                          24     10  0152  1978 	BSBB	MOVE_DIR			; COPY LAST SUB-DIRECTORY

                                     0154  1979 COPY_DIRTERM:

            50         07 AA     90  0154  1980 	MOVB	FWA$B_DIRTERM(R10),R0		; RIGHT BRACKET (']' OR '>')

                          3A     10  0158  1981 	BSBB	MOVE_CHAR			; GO MOVE IT

                                     015A  1982 ;

                                     015A  1983 ; NOW MOVE THE FILE NAME, TYPE, & VERSION (ALL IN ONE STRING)

                                     015A  1984 ;

                                     015A  1985 COPY_NAME:

            56       0084 CA     7E  015A  1986 	MOVAQ	FWA$Q_NAME(R10),R6		; GET DESCRIPTOR ADDRESS

                          22     10  015F  1987 	BSBB	MOVE_NEXT			; & MOVE IT

                                     0161  1988 EXIT_SUC:

                                     0161  1989 	RMSSUC

            50            01     D0  0161       		MOVL	#1,R0

            58            8E     D0  0164  1990 EXPXIT:	MOVL	(SP)+,R8			; RESTORE FAB ADDRESS

                                 05  0167  1991 	RSB

                                     0168  1992 COPY_QUOTED:

            56       009C CA     7E  0168  1993 	MOVAQ	FWA$Q_QUOTED(R10),R6		; GET DESCRIPTOR ADDRESS

                          14     10  016D  1994 	BSBB	MOVE_NEXT			; & MOVE IT

                          F0     11  016F  1995 	BRB	EXIT_SUC

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  56

045             RM$EXPSTRING  -  BUILD EXPANDED OR RESULTANT NA                                                                 (14)



                                     0171  1997 ;

                                     0171  1998 ; FIELD DOESN'T FIT IN BUFFER - ESS OR RSS ERROR

                                     0171  1999 ;

                          01     BA  0171  2000 POPPC:	POPR	#^M<R0>				; POP RETURN PC

                                     0173  2001 ;

                                     0173  2002 ; USER'S EXPANDED OR RESULTANT STRING BUFFER IS TOO SMALL

                                     0173  2003 ;

                          8C     B5  0173  2004 ERRSS:	TSTW	(AP)+				;MOVE TO ESS OR RSS ERROR CODE

                                     0175  2005 ;

                                     0175  2006 ; USER BUFFER NOT WRITEABLE

                                     0175  2007 ;

                                     0175  2008 ERRSA:	$PSECT_BR	L$RMS0

                          FEEB'  31  0175       		BRW	L$RMS019

                                     0178       		.SAVE

                                 00000063       		.PSECT	L$RMS0,GBL,NOWRT

                                     0063       L$RMS019:

            50            6C     3C  0063  2009 	MOVZWL	(AP),R0				;GET ERROR CODE

                          00FB'  31  0066  2010 	BRW	EXPXIT

                                     0069  2011 	$PSECT_RESTORE

                                 00000178       		.RESTORE

                                     0178  2012 ;++

                                     0178  2013 ; SUBROUTINE TO MOVE A FIELD TO THE EXPANDED STRING, PREFIXING

                                     0178  2014 ; IT BY THE CHARACTER IN R0

                                     0178  2015 ;

                                     0178  2016 ; SAME INPUTS AND OUTPUTS AS FOR MOVE_NEXT (WITH ADDITION OF R0)

                                     0178  2017 ;

                                     0178  2018 ;--

                                     0178  2019 MOVE_DIR:

                          68     96  0178  2020 	INCB	(R8)				; COUNT CHARACTER

         FF A8            68     91  017A  2021 	CMPB	(R8),-1(R8)			; DOES IT FIT?

                          F1     1A  017E  2022 	BGTRU	POPPC				; BRANCH IF NOT

            83            50     90  0180  2023 	MOVB	R0,(R3)+			; MOVE IN THE BYTE

                                     0183  2024 						; FALL THRU TO MOVE_NEXT

                                     0183  2025 ;--

                                     0183  2026 ; SUBROUTINE TO MOVE A FIELD TO THE EXPANDED STRING BUFFER.

                                     0183  2027 ;

                                     0183  2028 ; FIRST ADDS COUNT INTO ESL (OR RSL) CHECKING FOR OVERFLOW AND IF SO EXIT

                                     0183  2029 ; WITH ESS (OR RSS) ERROR

                                     0183  2030 ;

                                     0183  2031 ;  INPUTS:

                                     0183  2032 ;

                                     0183  2033 ;	R3	ADDRESS OF OUTPUT BUFFER

                                     0183  2034 ;	R6	ADDRESS OF DESCRIPTOR OF INPUT STRING

                                     0183  2035 ;	R8	ESL (OR RSL) ADDRESS IN NAM BLOCK

                                     0183  2036 ;	AP	ADDRESS OF EXPAND STRING ARGUMENT LIST

                                     0183  2037 ;

                                     0183  2038 ;  OUTPUTS:

                                     0183  2039 ;

                                     0183  2040 ;	R3		ADDRESS FOLLOWING STRING IN THE OUTPUT BUFFER

                                     0183  2041 ;	R6		R6 ON INPUT + 8

                                     0183  2042 ;	R0-R2,R4,R5	DESTROYED

                                     0183  2043 ;

                                     0183  2044 ;--

                                     0183  2045 MOVE_NEXT:

            68            66     80  0183  2046 	ADDB2	(R6),(R8)			; COUNT THE STRING

         FF A8            68     91  0186  2047 	CMPB	(R8),-1(R8)			; DOES IT FIT?

                          E5     1A  018A  2048 	BGTRU	POPPC				; BRANCH IF NOT

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  57

045             RM$EXPSTRING  -  BUILD EXPANDED OR RESULTANT NA                                                                 (14)



            50            86     D0  018C  2049 	MOVL	(R6)+,R0			; GET LENGTH OF STRING

            96            50     28  018F  2050 	MOVC3	R0,@(R6)+,(R3)			; MOVE FIELD

                          63         0192       

                                 05  0193  2051 	RSB

                                     0194  2052 ;++

                                     0194  2053 ;  SUBROUTINE TO MOVE THE CHARACTER IN R0 TO THE EXPANDED STRING

                                     0194  2054 ;  CHECKING FOR OVERFLOW

                                     0194  2055 ;--

                                     0194  2056 MOVE_CHAR:

                          68     96  0194  2057 	INCB	(R8)				; COUNT CHARACTER

         FF A8            68     91  0196  2058 	CMPB	(R8),-1(R8)			; DOES IT FIT?

                          D5     1A  019A  2059 	BGTRU	POPPC				; BRANCH IF NOT

            83            50     90  019C  2060 	MOVB	R0,(R3)+			; MOVE IN THE BYTE

                                 05  019F  2061 	RSB

                                     01A0  2062 	.END

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  58

SYMBOL TABLE                                                                                                                    (14)



$$.PSECT_EP    = 00000014            ERRLNE           000002E8 R     02   FAB$L_XAB        00000024            

$$ARGS         = 00000006            ERRNAM           0000005C R     04   FAB$M_BIO      = 00000020            

$$RMSTEST      = 0000001A            ERRQUO           0000008B R     06   FAB$M_BLK      = 00000008            

$$RMS_PBUGCHK  = 00000010            ERRQUO1          0000003A R     05   FAB$M_BRO      = 00000040            

$$RMS_TBUGCHK  = 00000008            ERRRLF           0000005F R     04   FAB$M_CBT      = 00200000            

$$RMS_UMODE    = 00000004            ERRSA            00000175 R     04   FAB$M_CIF      = 02000000            

$$T1           = 0000001C            ERRSS            00000173 R     04   FAB$M_CR       = 00000002            

ALPHA            000003DB R     02   ERRSUBDIR        000002BE R     02   FAB$M_CTG      = 00100000            

ASTERISK         00000416 R     02   ERRSYN           00000196 R     02   FAB$M_DEL      = 00000004            

BIT...         = 00000000            ESCAPE         = 0000001B            FAB$M_DFW      = 00000020            

CHECK_COLON      000000F3 R     02   EXIT_SUC         00000161 R     04   FAB$M_DLT      = 00008000            

CHECK_DIR        00000100 R     02   EXIT_XPFN        0000005D R     02   FAB$M_DMO      = 00001000            

CHECK_DIR_FIELD  00000431 R     02   EXIT_XPFN1       00000054 R     02   FAB$M_ESC      = 08000000            

CHECK_FIELD      0000042B R     02   EXPAND_NAME      0000007E R     02   FAB$M_EXE      = 00000080            

CHECK_LOGNAME    00000150 R     02   EXPARGL          00000000 R     04   FAB$M_FTN      = 00000001            

CHECK_NAME       00000113 R     02   EXPXIT           00000164 R     04   FAB$M_GET      = 00000002            

CHECK_SUBDIR     0000028C R     02   F$RMSOPEN0DFL14  00000000 R     07   FAB$M_INP      = 00080000            

CHECK_TYPE       00000124 R     02   F$RMSOPEN0NAM0   00000005 R     04   FAB$M_JNL      = 00400000            

CHK377           000002CA R     02   F$RMSOPEN0NAM7   00000065 R     04   FAB$M_KFO      = 40000000            

CHKBRACKET       000003B1 R     02   F$RMSOPEN0NAM8   000000A9 R     04   FAB$M_MSE      = 00000010            

CHKCOLON         000003F1 R     02   FAB$B_BID        00000000            FAB$M_MXV      = 00000002            

CHKDEV           000000B9 R     02   FAB$B_BKS        0000003E            FAB$M_NAM      = 01000000            

CHKDIR           000000CE R     02   FAB$B_BLN        00000001            FAB$M_NEF      = 00000400            

CHKDIRNAM        0000027D R     02   FAB$B_DNS        00000035            FAB$M_NFS      = 00010000            

CHKDNA           0000009B R     02   FAB$B_FAC        00000016            FAB$M_NIL      = 00000020            

CHKDOT           000002B3 R     02   FAB$B_FNS        00000034            FAB$M_OFP      = 20000000            

CHKDUP           000004B5 R     02   FAB$B_FSZ        0000003F            FAB$M_POS      = 00000100            

CHKER1           000004AE R     02   FAB$B_ORG        0000001D            FAB$M_PPF      = 00040000            

CHKERR           000004C1 R     02   FAB$B_RAT        0000001E            FAB$M_PPF_IND  = 00004000            

CHKFNA           00000085 R     02   FAB$B_RFM        0000001F            FAB$M_PPF_RAT  = 00003FC0            

CHKRLF           000000B0 R     02   FAB$B_RTV        0000001C            FAB$M_PRN      = 00000004            

CHKRTN           000004AA R     02   FAB$B_SHR        00000017            FAB$M_PUT      = 00000001            

COPY_DIRTERM     00000154 R     04   FAB$C_BID      = 00000003            FAB$M_RCK      = 00800000            

COPY_NAME        0000015A R     04   FAB$C_BLN        00000050            FAB$M_RWC      = 00000800            

COPY_QUOTED      00000168 R     04   FAB$C_FIX      = 00000001            FAB$M_RWO      = 00000080            

CPYDSC           000004B0 R     02   FAB$C_HSH      = 00000030            FAB$M_SCF      = 00004000            

DEFAULT_SUB      000002D8 R     02   FAB$C_IDX      = 00000020            FAB$M_SHRDEL   = 00000004            

DEVDUP           000001BC R     02   FAB$C_MAXRFM   = 00000003            FAB$M_SHRGET   = 00000002            

DFDIR            000000D5 R     02   FAB$C_REL      = 00000010            FAB$M_SHRPUT   = 00000001            

DIRXIT           000002C7 R     02   FAB$C_RFM_DFLT = 00000002            FAB$M_SHRUPD   = 00000008            

DIRXIT1          000002C5 R     02   FAB$C_SEQ      = 00000000            FAB$M_SPL      = 00002000            

DIRXIT2          00000269 R     02   FAB$C_UDF      = 00000000            FAB$M_SQO      = 00000040            

DIRXIT_BR        0000005B R     07   FAB$C_VAR      = 00000002            FAB$M_SUP      = 00000004            

DIR_TOO_LONG     00000075 R     02   FAB$C_VFC      = 00000003            FAB$M_TEF      = 10000000            

DISK             00000000 R     02   FAB$K_BLN        00000050            FAB$M_TMD      = 00000010            

DISKSZ         = 00000009            FAB$L_ALQ        00000010            FAB$M_TMP      = 00000008            

DOLLAR_UNDER     00000411 R     02   FAB$L_CTX        00000018            FAB$M_TRN      = 00000010            

ENDPRS           000000E1 R     02   FAB$L_DEV        00000040            FAB$M_UFM      = 04000000            

EOSRTN           000003E9 R     02   FAB$L_DNA        00000030            FAB$M_UFO      = 00020000            

ERRBUG           00000055 R     07   FAB$L_FNA        0000002C            FAB$M_UPD      = 00000008            

ERRDIR           000002C2 R     02   FAB$L_FOP        00000004            FAB$M_UPI      = 00000040            

ERRDIR1          000002C0 R     02   FAB$L_JNL        00000020            FAB$M_WCK      = 00000200            

ERRDIR_BR        00000058 R     07   FAB$L_MRN        00000038            FAB$S_ORG      = 00000004            

ERRDIR_BR1       00000251 R     02   FAB$L_NAM        00000028            FAB$S_PPF_RAT  = 00000008            

ERRDNA           0000007B R     02   FAB$L_SDC        00000044            FAB$V_BIO      = 00000005            

ERRDVI           00000062 R     04   FAB$L_STS        00000008            FAB$V_BLK      = 00000003            

ERRFNA           00000078 R     02   FAB$L_STV        0000000C            FAB$V_BRO      = 00000006            

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  59

SYMBOL TABLE                                                                                                                    (14)



FAB$V_CBT      = 00000015            FWA$B_DIRWCFLGS  00000005            FWA$Q_DIR2       0000004C            

FAB$V_CIF      = 00000019            FWA$B_ESCFLG     00000008            FWA$Q_FIB        0000000C            

FAB$V_CR       = 00000001            FWA$B_ESCTYP     00000009            FWA$Q_FLAGS      00000000            

FAB$V_CTG      = 00000014            FWA$B_FLDFLGS    00000001            FWA$Q_LOGNAME    0000001C            

FAB$V_DEL      = 00000002            FWA$B_LNFLG      00000006            FWA$Q_NAME       00000084            

FAB$V_DFW      = 00000005            FWA$B_PARSEFLGS  00000003            FWA$Q_NODE       00000034            

FAB$V_DLT      = 0000000F            FWA$B_PASSFLGS   00000000            FWA$Q_QUOTED     0000009C            

FAB$V_DMO      = 0000000C            FWA$B_UNDERLINE  00000154            FWA$Q_RNS        0000008C            

FAB$V_ESC      = 0000001B            FWA$B_WILDFLGS   00000002            FWA$Q_STATBLK    00000094            

FAB$V_EXE      = 00000007            FWA$B_XLTMODE    0000000A            FWA$Q_TYPE       0000008C            

FAB$V_FTN      = 00000000            FWA$B_XLTTBL     0000000B            FWA$Q_VERSION    00000094            

FAB$V_GET      = 00000001            FWA$C_ALL      = 000000F8            FWA$Q_XLTBUF1    0000000C            

FAB$V_INP      = 00000013            FWA$C_DEVBUFSIZ= 0000000F            FWA$Q_XLTBUF2    00000024            

FAB$V_JNL      = 00000016            FWA$C_DIRBUFSIZ= 00000009            FWA$S_DIR_LVLS = 00000003            

FAB$V_KFO      = 0000001E            FWA$C_FIBLEN   = 0000002C            FWA$T_ATR_LIST   00000164            

FAB$V_MSE      = 00000004            FWA$C_MAXDEVICE= 0000000F            FWA$T_DEVICEBUF  00000155            

FAB$V_MXV      = 00000001            FWA$C_MAXDIRLEN= 0000003C            FWA$T_DIB        00000174            

FAB$V_NAM      = 00000018            FWA$C_MAXNAME  = 00000009            FWA$T_DIR1BUF    000000D0            

FAB$V_NEF      = 0000000A            FWA$C_MAXNODE  = 00000028            FWA$T_DIR2BUF    000000D9            

FAB$V_NFS      = 00000010            FWA$C_MAXQUOTED= 0000007F            FWA$T_FIBBUF     000000A4            

FAB$V_NIL      = 00000005            FWA$C_MAXSUBDIR= 00000007            FWA$T_NAMEBUF    00000118            

FAB$V_OFP      = 0000001D            FWA$C_MAXTYPE  = 00000003            FWA$T_NODEBUF    0000012C            

FAB$V_ORG      = 00000004            FWA$C_MAXVER   = 00000006            FWA$T_TYPEBUF    00000122            

FAB$V_POS      = 00000008            FWA$C_NAMBUFSIZ= 0000000A            FWA$T_VERBUF     00000126            

FAB$V_PPF      = 00000012            FWA$C_NODBUFSIZ= 00000028            FWA$T_XLTBUFF1   00000164            

FAB$V_PPF_IND  = 0000000E            FWA$C_RNSBUFSIZ= 00000014            FWA$T_XLTBUFF2   000001A4            

FAB$V_PPF_RAT  = 00000006            FWA$C_TYPBUFSIZ= 00000004            FWA$V_CUR_VER  = 00000006            

FAB$V_PRN      = 00000002            FWA$C_VERBUFSIZ= 00000006            FWA$V_DEVICE   = 0000000F            

FAB$V_PUT      = 00000000            FWA$C_XLTBUFSIZ= 0000003F            FWA$V_DIR      = 0000000E            

FAB$V_RCK      = 00000017            FWA$L_BUFFLG     00000014            FWA$V_DIR1     = 00000020            

FAB$V_RWC      = 0000000B            FWA$L_DEVNODADR  00000020            FWA$V_DIR2     = 00000021            

FAB$V_RWO      = 00000007            FWA$L_ESCSTRING  00000008            FWA$V_DIR_LVLS = 0000001D            

FAB$V_SCF      = 0000000E            FWA$L_HBK        00000098            FWA$V_DUPOK    = 00000000            

FAB$V_SHRDEL   = 00000002            FWA$L_LOOKUP     0000001C            FWA$V_EXP_DEV  = 00000017            

FAB$V_SHRGET   = 00000001            FWA$L_SBN        00000094            FWA$V_EXP_DIR  = 00000016            

FAB$V_SHRPUT   = 00000000            FWA$L_UIC        0000001C            FWA$V_EXP_NAME = 00000012            

FAB$V_SHRUPD   = 00000003            FWA$L_XLTCNT     0000002C            FWA$V_EXP_TYPE = 00000011            

FAB$V_SPL      = 0000000D            FWA$L_XLTSIZ     00000018            FWA$V_EXP_VER  = 00000010            

FAB$V_SQO      = 00000006            FWA$M_DEVICE   = 00008000            FWA$V_FNA_PASS = 00000004            

FAB$V_SUP      = 00000002            FWA$M_DIR      = 00004000            FWA$V_GRPMBR   = 0000001B            

FAB$V_TEF      = 0000001C            FWA$M_DUPOK    = 00000001            FWA$V_LOGNAME  = 00000030            

FAB$V_TMD      = 00000004            FWA$M_EXP_DEV  = 00800000            FWA$V_NAME     = 0000000D            

FAB$V_TMP      = 00000003            FWA$M_EXP_DIR  = 00400000            FWA$V_NAMEFLG  = 00000001            

FAB$V_TRN      = 00000004            FWA$M_EXP_NAME = 00040000            FWA$V_NAM_DVI  = 00000005            

FAB$V_UFM      = 0000001A            FWA$M_EXP_TYPE = 00020000            FWA$V_NETSTR   = 00000032            

FAB$V_UFO      = 00000011            FWA$M_EXP_VER  = 00010000            FWA$V_NODE     = 00000019            

FAB$V_UPD      = 00000003            FWA$M_FNA_PASS = 00000010            FWA$V_OBJTYPE  = 00000031            

FAB$V_UPI      = 00000006            FWA$M_NAME     = 00002000            FWA$V_QUOTED   = 0000001A            

FAB$V_WCK      = 00000009            FWA$M_NAMEFLG  = 00000002            FWA$V_RLF_PASS = 00000003            

FAB$W_BLS        0000003C            FWA$M_NAM_DVI  = 00000020            FWA$V_TYPE     = 0000000C            

FAB$W_DEQ        00000014            FWA$M_RLF_PASS = 00000008            FWA$V_TYPEFLG  = 00000002            

FAB$W_IFI        00000002            FWA$M_TYPE     = 00001000            FWA$V_VERSION  = 0000000B            

FAB$W_MRS        00000036            FWA$M_TYPEFLG  = 00000004            FWA$V_WC_NAME  = 00000015            

FOP            = 00000020            FWA$M_VERSION  = 00000800            FWA$V_WC_TYPE  = 00000014            

FWA$B_DIRFLGS    00000004            FWA$Q_DEVICE     0000003C            FWA$V_WC_VER   = 00000013            

FWA$B_DIRLEN     00000030            FWA$Q_DIR        00000024            FWA$V_WILDCARD = 00000018            

FWA$B_DIRTERM    00000007            FWA$Q_DIR1       00000044            FWA$V_WILD_DIR = 0000001C            

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  60

SYMBOL TABLE                                                                                                                    (14)



FWA$V_WILD_GRP = 00000028            IFB$L_FRB_PTR    00000028            IFB$V_TMP      = 00000035            

FWA$V_WILD_MBR = 00000029            IFB$L_FWA_BDB    00000050            IFB$V_TRN      = 00000004            

FWA$V_WILD_SFD1= 00000029            IFB$L_HBK        00000040            IFB$V_UPD      = 00000003            

FWA$V_WILD_UFD = 00000028            IFB$L_IDX_PTR    00000054            IFB$V_WRTACC   = 00000030            

FWA$W_ESCIFI     0000000A            IFB$L_IOS        0000000C            IFB$W_ASDEVBSIZ  0000005A            

FWA$W_FNAMSIZ    00000018            IFB$L_IOS4       00000010            IFB$W_BKS_BYTES  0000005C            

FWA$W_PRO        00000020            IFB$L_IRAB_LNK   0000001C            IFB$W_BKS_RECS   0000005E            

FWA$W_UCHAR      0000002C            IFB$L_LAST_FAB   00000024            IFB$W_CHNL       00000020            

GBL...         = 00000000            IFB$L_LOCK_BDB   00000050            IFB$W_DEQ        0000004E            

GETCHR           00000374 R     02   IFB$L_MRN        00000054            IFB$W_DEVBUFSIZ  00000038            

GETNXTDIR        0000029E R     02   IFB$L_NRP_LNK    00000050            IFB$W_EBK0       00000044            

GOTCOLON         000001C3 R     02   IFB$L_NWA_PTR    00000028            IFB$W_EBK2       00000046            

GOTNAME          0000011D R     02   IFB$L_PRIM_DEV   00000000            IFB$W_FFB        00000048            

GOTNAME1         00000199 R     02   IFB$L_RLB_LNK    0000002C            IFB$W_IOS2       0000000E            

GOTNODE          000001D9 R     02   IFB$L_RNS_LEN    00000050            IFB$W_LRL        0000003E            

GRPMBR           0000023E R     02   IFB$M_BIO      = 00000020            IFB$W_MRS        0000004C            

IFB$B_AMAX       00000059            IFB$M_BRO      = 00000040            IFB$W_RTDEQ      0000003A            

IFB$B_AVBN       00000058            IFB$M_DEL      = 00000004            INVALID          000003AB R     02   

IFB$B_BID        00000008            IFB$M_EXE      = 00000080            L$RMS01          00000000 R     05   

IFB$B_BKS        0000004A            IFB$M_GET      = 00000002            L$RMS010         0000002D R     05   

IFB$B_BLN        00000009            IFB$M_PUT      = 00000001            L$RMS012         00000035 R     05   

IFB$B_EFN        0000000B            IFB$M_TRN      = 00000010            L$RMS013         0000003D R     05   

IFB$B_EXTRABUF   0000005D            IFB$M_UPD      = 00000008            L$RMS015         00000045 R     05   

IFB$B_FAC        00000022            IFB$S_ORG      = 00000004            L$RMS016         0000004D R     05   

IFB$B_FSZ        0000004B            IFB$S_RFM      = 00000004            L$RMS018         00000055 R     05   

IFB$B_KBUFSZ     0000005C            IFB$V_ACCESSED = 00000025            L$RMS019         00000063 R     05   

IFB$B_MODE       0000000A            IFB$V_ANSI_D   = 00000026            L$RMS02          00000008 R     05   

IFB$B_NUM_KEYS   0000005A            IFB$V_ASYNC    = 00000023            L$RMS03          0000000E R     05   

IFB$B_ORGCASE    00000023            IFB$V_ASYNCWAIT= 00000024            L$RMS04          00000014 R     05   

IFB$B_RAT        0000003D            IFB$V_BIO      = 00000005            L$RMS05          0000001A R     05   

IFB$B_RFMORG     0000003C            IFB$V_BRO      = 00000006            L$RMS06          00000020 R     05   

IFB$B_UBUFSZ     0000005B            IFB$V_BUSY     = 00000020            L$RMS09          00000026 R     05   

IFB$C_BID      = 0000000B            IFB$V_CREATE   = 00000032            LOG$B_AMOD       0000000E            

IFB$C_BLN        00000060            IFB$V_DAP      = 0000003E            LOG$B_TABLE      0000000B            

IFB$C_BLN_IDX    00000060            IFB$V_DAP_OPEN = 0000003D            LOG$B_TYPE       0000000A            

IFB$C_BLN_REL    00000060            IFB$V_DEL      = 00000002            LOG$C_GROUP    = 00000001            

IFB$C_BLN_SEQ    0000005C            IFB$V_DFW      = 0000002C            LOG$C_LENGTH     00000014            

IFB$C_DIR      = 00000003            IFB$V_DLT      = 0000002B            LOG$C_NAMLENGTH= 00000040            

IFB$C_FHAEND     00000050            IFB$V_DMO      = 00000028            LOG$C_PROCESS  = 00000002            

IFB$C_IDX      = 00000002            IFB$V_EOF      = 00000021            LOG$C_SYSTEM   = 00000000            

IFB$C_MAXORG   = 00000002            IFB$V_EXE      = 00000007            LOG$K_LENGTH     00000014            

IFB$C_REL      = 00000001            IFB$V_GET      = 00000001            LOG$L_LTBL       00000004            

IFB$C_SEQ      = 00000000            IFB$V_MSE      = 00000031            LOG$L_LTFL       00000000            

IFB$K_BLN        00000060            IFB$V_NORECLK  = 00000033            LOG$L_MBXUCB     00000010            

IFB$K_BLN_IDX    00000060            IFB$V_NSP      = 0000003F            LOG$T_NAME       00000014            

IFB$K_BLN_REL    00000060            IFB$V_NWA      = 0000003C            LOG$W_GROUP      0000000C            

IFB$K_BLN_SEQ    0000005C            IFB$V_ORG      = 00000004            LOG$W_SIZE       00000008            

IFB$K_FHAEND     00000050            IFB$V_PPF_IMAGE= 00000022            LOGNM_OR_FILENM  0000019B R     02   

IFB$L_ARGLST     00000018            IFB$V_PPF_INPUT= 0000002E            LOWERCASE_A    = 00000061            

IFB$L_ASBADDR    00000014            IFB$V_PUT      = 00000000            LOWERCASE_Z    = 0000007A            

IFB$L_AS_DEV     00000054            IFB$V_RFM      = 00000000            MINUS            0000041B R     02   

IFB$L_BDB_BLNK   00000034            IFB$V_RWC      = 00000027            MOVE_CHAR        00000194 R     04   

IFB$L_BDB_FLNK   00000030            IFB$V_RW_ATTR  = 00000034            MOVE_DIR         00000178 R     04   

IFB$L_BKPBITS    00000004            IFB$V_SCF      = 0000002A            MOVE_NEXT        00000183 R     04   

IFB$L_BWB        0000000C            IFB$V_SPL      = 00000029            MOVNXT           00000061 R     02   

IFB$L_DVBN       00000058            IFB$V_SQO      = 0000002D            M_$_           = 00000010            

IFB$L_EBK        00000044            IFB$V_TEF      = 00000036            M_ALPHA        = 00000002            

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  61

SYMBOL TABLE                                                                                                                    (14)



M_MINUS        = 00000040            NAM$M_WILD_UFD = 01000000            NWA$T_BUFFER     00000160            

M_NAMTYP       = 00000080            NAM$M_WILD_VER = 00000008            NWA$T_DAP        00000000            

M_NOT_OCTAL    = 00000008            NAM$S_DIR_LVLS = 00000003            NWA$T_FILESPEC   000000C0            

M_NULL         = 00000001            NAM$T_DVI        00000014            NWA$T_QUOTEDBUF  000000C0            

M_NUMERIC      = 00000004            NAM$V_DIR_LVLS = 00000015            NWA$T_SPARE      00000150            

M_RETURN_ON_ERR= 00008000            NAM$V_EXP_DEV  = 00000007            NXTDEV           000000EE R     02   

M_WILD         = 00000020            NAM$V_EXP_DIR  = 00000006            NXTDIR           000000FB R     02   

NAM$B_BID        00000000            NAM$V_EXP_NAME = 00000002            NXTNAM           0000010E R     02   

NAM$B_BLN        00000001            NAM$V_EXP_TYPE = 00000001            PARSE_DIR        0000020E R     02   

NAM$B_CURLVL     00000038            NAM$V_EXP_VER  = 00000000            PARSE_STRING     000000E5 R     02   

NAM$B_ESL        0000000B            NAM$V_GRP_MBR  = 00000013            PIO$GL_FMLH      ********   X   02   

NAM$B_ESS        0000000A            NAM$V_HIGHVER  = 0000000F            PIO$GT_DDSTRING  ********   X   02   

NAM$B_RSL        00000003            NAM$V_LOWVER   = 0000000E            POPPC            00000171 R     04   

NAM$B_RSS        00000002            NAM$V_NODE     = 00000011            PPERMFILE        00000339 R     02   

NAM$C_BID      = 00000002            NAM$V_PPF      = 00000010            PROBESTRING      0000006F R     02   

NAM$C_BLN        00000038            NAM$V_QUOTED   = 00000012            PRSERR           00000032 R     05   

NAM$C_BLN_DIRWC  00000050            NAM$V_WILDCARD = 00000008            PRSXIT           0000016B R     02   

NAM$C_DVI      = 00000010            NAM$V_WILD_DIR = 00000014            PRSXIT1          00000191 R     02   

NAM$C_MAXRSS   = 00000080            NAM$V_WILD_GRP = 00000018            PSL$C_EXEC     = 00000001            

NAM$C_MAXRSSLCL= 00000060            NAM$V_WILD_MBR = 00000019            PSL$C_KERNEL   = 00000000            

NAM$K_BLN        00000038            NAM$V_WILD_NAME= 00000005            PSL$C_SUPER    = 00000002            

NAM$K_BLN_DIRWC  00000050            NAM$V_WILD_SFD1= 00000019            PSL$C_USER     = 00000003            

NAM$L_DIRWCC1    00000040            NAM$V_WILD_SFD2= 0000001A            PSL$M_CM       = 80000000            

NAM$L_DIRWCC2    00000044            NAM$V_WILD_SFD3= 0000001B            PSL$M_CURMOD   = 03000000            

NAM$L_DIRWCC3    00000048            NAM$V_WILD_SFD4= 0000001C            PSL$M_DV       = 00000080            

NAM$L_DIRWCC4    0000004C            NAM$V_WILD_SFD5= 0000001D            PSL$M_FPD      = 08000000            

NAM$L_DWC        00000038            NAM$V_WILD_SFD6= 0000001E            PSL$M_FU       = 00000040            

NAM$L_ESA        0000000C            NAM$V_WILD_SFD7= 0000001F            PSL$M_IPL      = 001F0000            

NAM$L_FNB        00000034            NAM$V_WILD_TYPE= 00000004            PSL$M_IS       = 04000000            

NAM$L_RLF        00000010            NAM$V_WILD_UFD = 00000018            PSL$M_IV       = 00000020            

NAM$L_RSA        00000004            NAM$V_WILD_VER = 00000003            PSL$M_PRVMOD   = 00C00000            

NAM$L_WCC        00000030            NAM$W_DID        0000002A            PSL$M_SAFBITS  = 000037FF            

NAM$M_DIR_LVLS = 00E00000            NAM$W_DID_NUM    0000002A            PSL$M_TBIT     = 00000010            

NAM$M_EXP_DEV  = 00000080            NAM$W_DID_RVN    0000002E            PSL$M_TP       = 40000000            

NAM$M_EXP_DIR  = 00000040            NAM$W_DID_SEQ    0000002C            PSL$S_CURMOD   = 00000002            

NAM$M_EXP_NAME = 00000004            NAM$W_FID        00000024            PSL$S_IPL      = 00000005            

NAM$M_EXP_TYPE = 00000002            NAM$W_FID_NUM    00000024            PSL$S_PRVMOD   = 00000002            

NAM$M_EXP_VER  = 00000001            NAM$W_FID_RVN    00000028            PSL$V_CM       = 0000001F            

NAM$M_GRP_MBR  = 00080000            NAM$W_FID_SEQ    00000026            PSL$V_CURMOD   = 00000018            

NAM$M_HIGHVER  = 00008000            NAM$W_PRV_DID    0000003A            PSL$V_DV       = 00000007            

NAM$M_LOWVER   = 00004000            NAME             000001DC R     02   PSL$V_FPD      = 0000001B            

NAM$M_NODE     = 00020000            NEXT_FIELD       00000367 R     02   PSL$V_FU       = 00000006            

NAM$M_PPF      = 00010000            NF$NETWORK11     00000000 R     06   PSL$V_IPL      = 00000010            

NAM$M_QUOTED   = 00040000            NF$NETWORK17     0000008E R     06   PSL$V_IS       = 0000001A            

NAM$M_WILDCARD = 00000100            NOTERM           000003E5 R     02   PSL$V_IV       = 00000005            

NAM$M_WILD_DIR = 00100000            NOTRANS          00000365 R     02   PSL$V_PRVMOD   = 00000016            

NAM$M_WILD_GRP = 01000000            NOTRAN_NET       00000361 R     02   PSL$V_TBIT     = 00000004            

NAM$M_WILD_MBR = 02000000            NULL             00000370 R     02   PSL$V_TP       = 0000001E            

NAM$M_WILD_NAME= 00000020            NUMERIC          00000404 R     02   QUOTE            00000428 R     02   

NAM$M_WILD_SFD1= 02000000            NWA$B_QUOTEDTRN  0000013F            QUOXIT           00000084 R     06   

NAM$M_WILD_SFD2= 04000000            NWA$C_BLN        00000400            RM$CHKNAMBLK     00000048 RG    04   

NAM$M_WILD_SFD3= 08000000            NWA$C_BUFFERSIZ= 000002A0            RM$EXPSTRING     000000E9 RG    04   

NAM$M_WILD_SFD4= 10000000            NWA$C_DAPSIZ   = 000000C0            RM$FWASET        ********   X   02   

NAM$M_WILD_SFD5= 20000000            NWA$K_BLN        00000400            RM$GETPAG        ********   X   06   

NAM$M_WILD_SFD6= 40000000            NWA$Q_BUFFER     00000140            RM$XPFN          00000009 RG    02   

NAM$M_WILD_SFD7= 80000000            NWA$Q_BUFFER2    00000148            RMS$_BUG_DDI     ********   X   05   

NAM$M_WILD_TYPE= 00000010            NWA$Q_FLG        00000000            RMS$_DEV         ********   X   02   

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  62

SYMBOL TABLE                                                                                                                    (14)



RMS$_DIR         ********   X   05   SS$_DECOVF     = 000004A4            SS$_INSFRAME   = 0000012C            

RMS$_DNA         ********   X   05   SS$_DEVACTIVE  = 000002C4            SS$_INSFWSL    = 0000011C            

RMS$_DVI         ********   X   05   SS$_DEVALLOC   = 00000840            SS$_INTDIV     = 00000484            

RMS$_ESA         ********   X   04   SS$_DEVALRALLOC= 00000641            SS$_INTOVF     = 0000047C            

RMS$_ESS         ********   X   04   SS$_DEVASSIGN  = 00000848            SS$_IVADDR     = 00000134            

RMS$_FNA         ********   X   05   SS$_DEVFOREIGN = 00000064            SS$_IVCHAN     = 0000013C            

RMS$_FNM         ********   X   02   SS$_DEVICEFULL = 00000850            SS$_IVCHNLSEC  = 0000026C            

RMS$_LNE         ********   X   05   SS$_DEVMOUNT   = 0000006C            SS$_IVDEVNAM   = 00000144            

RMS$_NAM         ********   X   05   SS$_DEVNOTALLOC= 00000858            SS$_IVGSDNAM   = 0000014C            

RMS$_NOD         ********   X   06   SS$_DEVNOTMBX  = 00000074            SS$_IVLOGNAM   = 00000154            

RMS$_QUO         ********   X   05   SS$_DEVNOTMOUNT= 0000007C            SS$_IVLOGTAB   = 0000015C            

RMS$_RLF         ********   X   05   SS$_DEVOFFLINE = 00000084            SS$_IVPROTECT  = 000002F4            

RMS$_SYN         ********   X   05   SS$_DIRFULL    = 00000860            SS$_IVQUOTAL   = 00000164            

RMS$_TYP         ********   X   02   SS$_DRVERR     = 0000008C            SS$_IVSECFLG   = 0000016C            

RMS$_VER         ********   X   02   SS$_DUPFILENAME= 00000868            SS$_IVSECIDCTL = 000002E4            

SEMICOLON      = 0000003B            SS$_DUPLNAM    = 00000094            SS$_IVSSRQ     = 00000174            

SETNAM           0000005E R     02   SS$_ENDOFFILE  = 00000870            SS$_IVSTSFLG   = 0000017C            

SINGLE_DIR       0000027A R     02   SS$_ENDOFTAPE  = 00000878            SS$_IVTIME     = 00000184            

SKPDIR           0000026B R     02   SS$_ENDOFUSRLBL= 00000970            SS$_LCKPAGFUL  = 000000D4            

SKPQUO           00000087 R     06   SS$_EXQUOTA    = 0000001C            SS$_LENVIO     = 0000018C            

SS$_ABORT      = 0000002C            SS$_EXTIDXFILE = 00000880            SS$_LKWSETFUL  = 00000194            

SS$_ACCONFLICT = 00000800            SS$_FCPREADERR = 00000888            SS$_MBFULL     = 000008D8            

SS$_ACCVIO     = 0000000C            SS$_FCPREPSTN  = 00000988            SS$_MBTOOSML   = 0000019C            

SS$_ACPVAFUL   = 000002FC            SS$_FCPREWNDERR= 00000890            SS$_MCHECK     = 000002BC            

SS$_ARTRES     = 00000474            SS$_FCPSPACERR = 00000898            SS$_MEDOFL     = 000001A4            

SS$_ASTFLT     = 0000040C            SS$_FCPWRITERR = 000008A0            SS$_MSGNOTFND  = 00000621            

SS$_BADATTRIB  = 00000034            SS$_FILACCERR  = 0000009C            SS$_MTLBLLONG  = 00000304            

SS$_BADCHKSUM  = 00000808            SS$_FILALRACC  = 000000A4            SS$_MUSTCLOSEFL= 00000948            

SS$_BADESCAPE  = 0000003C            SS$_FILELOCKED = 000008A8            SS$_NOAQB      = 00000314            

SS$_BADFILEHDR = 00000810            SS$_FILENUMCHK = 000008B0            SS$_NODATA     = 000001AC            

SS$_BADFILENAME= 00000818            SS$_FILESEQCHK = 000008B8            SS$_NOHANDLER  = 000008F8            

SS$_BADFILEVER = 00000820            SS$_FILESTRUCT = 000008C0            SS$_NOHOMEBLK  = 000008E0            

SS$_BADIMGHDR  = 00000044            SS$_FILNOTACC  = 000000AC            SS$_NOIOCHAN   = 000001B4            

SS$_BADIRECTORY= 00000828            SS$_FILNOTCNTG = 000002AC            SS$_NOLINKS    = 0000027C            

SS$_BADPARAM   = 00000014            SS$_FILNOTEXP  = 000000B4            SS$_NOLOGNAM   = 000001BC            

SS$_BADSTACK   = 000002B4            SS$_FLTDIV     = 00000494            SS$_NOMBX      = 00000274            

SS$_BEGOFFILE  = 00000938            SS$_FLTOVF     = 0000048C            SS$_NOMOREFILES= 00000930            

SS$_BLOCKCNTERR= 00000940            SS$_FLTUND     = 0000049C            SS$_NONEXDRV   = 000001C4            

SS$_BREAK      = 00000414            SS$_FORMAT     = 000000BC            SS$_NONEXPR    = 000008E8            

SS$_BUFBYTALI  = 0000030C            SS$_GPTFULL    = 000000C4            SS$_NONLOCAL   = 000008F0            

SS$_BUFFEROVF  = 00000601            SS$_GSDFULL    = 000000CC            SS$_NOPRIV     = 00000024            

SS$_BUGCHECK   = 000002A4            SS$_HANGUP     = 000002CC            SS$_NORMAL     = 00000001            

SS$_CANCEL     = 00000830            SS$_HEADERFULL = 000008C8            SS$_NOSIGNAL   = 00000900            

SS$_CHANINTLK  = 0000004C            SS$_IDXFILEFULL= 000008D0            SS$_NOSOLICIT  = 00000284            

SS$_CLIFRCEXT  = 00000980            SS$_ILLBLKNUM  = 000000DC            SS$_NOSUCHDEV  = 00000908            

SS$_CMODSUPR   = 0000041C            SS$_ILLCNTRFUNC= 000000E4            SS$_NOSUCHFILE = 00000910            

SS$_CMODUSER   = 00000424            SS$_ILLEFC     = 000000EC            SS$_NOSUCHNODE = 0000028C            

SS$_COMPAT     = 0000042C            SS$_ILLIOFUNC  = 000000F4            SS$_NOSUCHSEC  = 00000978            

SS$_CONTINUE   = 00000001            SS$_ILLLBLAST  = 00000968            SS$_NOTAPEOP   = 00000264            

SS$_CONTROLC   = 00000651            SS$_ILLPAGCNT  = 000000FC            SS$_NOTFILEDEV = 000001CC            

SS$_CONTROLO   = 00000609            SS$_ILLSEQOP   = 000002DC            SS$_NOTINTBLSZ = 000001D4            

SS$_CONTROLY   = 00000611            SS$_ILLSER     = 00000104            SS$_NOTLABELMT = 000001DC            

SS$_CREATED    = 00000619            SS$_ILLUSRLBLRD= 00000958            SS$_NOTMODIFIED= 00000659            

SS$_CTRLERR    = 00000054            SS$_ILLUSRLBLWT= 00000960            SS$_NOTNETDEV  = 000002EC            

SS$_DATACHECK  = 0000005C            SS$_INCVOLLABEL= 0000010C            SS$_NOTRAN     = 00000629            

SS$_DATAOVERUN = 00000838            SS$_INSFARG    = 00000114            SS$_NOTSQDEV   = 000001E4            

SS$_DEBUG      = 0000046C            SS$_INSFMEM    = 00000124            SS$_OPCCUS     = 00000434            

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  63

SYMBOL TABLE                                                                                                                    (14)



SS$_OPCDEC     = 0000043C            V_NAMTYP       = 00000007            

SS$_OPINCOMPL  = 000002D4            V_NOTERM       = 00000008            

SS$_PAGOWNVIO  = 000001EC            V_NOT_OCTAL    = 00000003            

SS$_PAGRDERR   = 00000444            V_NULL         = 00000000            

SS$_PARITY     = 000001F4            V_NUMERIC      = 00000002            

SS$_PARTESCAPE = 000001FC            V_RETURN_ON_ERR= 0000000F            

SS$_PFMBSY     = 00000204            V_WILD         = 00000005            

SS$_PLHLDR     = 00000404            WC             = 00000010            

SS$_PSTFULL    = 0000020C            WCNTV_MASK     = 00000038            

SS$_RADRMOD    = 0000044C            XITNAM           00000047 R     04   

SS$_REJECT     = 00000294            XLAT1            000002EB R     02   

SS$_REMOTE     = 00000649            

SS$_RESIGNAL   = 00000918            

SS$_RESULTOVF  = 00000214            

SS$_ROPRAND    = 00000454            

SS$_SECTBLFUL  = 0000021C            

SS$_SSFAIL     = 0000045C            

SS$_SUBRNG     = 000004AC            

SS$_SUPERSEDE  = 00000631            

SS$_TAPEPOSLOST= 00000224            

SS$_TBIT       = 00000464            

SS$_TIMEOUT    = 0000022C            

SS$_TOOMANYVER = 00000990            

SS$_TOOMUCHDATA= 0000029C            

SS$_UNASEFC    = 00000234            

SS$_UNSAFE     = 0000023C            

SS$_UNWIND     = 00000920            

SS$_UNWINDING  = 00000928            

SS$_VASFULL    = 00000244            

SS$_VECINUSE   = 0000024C            

SS$_VOLINV     = 00000254            

SS$_WAITUSRLBL = 00000950            

SS$_WASCLR     = 00000001            

SS$_WASECC     = 00000639            

SS$_WASSET     = 00000009            

SS$_WRITLCK    = 0000025C            

SS$_WRONGACP   = 0000031C            

SYS$TRNLOG       ********   X   02   

TERMINATOR       000003CB R     02   

TPT$L_PARSES     ********   X   02   

TPT$L_XLATLOG    ********   X   02   

TPT$L_XPFN       ********   X   02   

TRANSLATE        000002DB R     02   

TRNLOG$_ACMODE = 00000014            

TRNLOG$_DSBMSK = 00000018            

TRNLOG$_LOGNAM = 00000004            

TRNLOG$_NARGS  = 00000006            

TRNLOG$_RSLBUF = 0000000C            

TRNLOG$_RSLLEN = 00000008            

TRNLOG$_TABLE  = 00000010            

TRYNXT           000003DE R     02   

VERSION          0000013E R     02   

V_$_           = 00000004            

V_ACS          = 0000000A            

V_ALPHA        = 00000001            

V_INVALID      = 00000009            

V_MINUS        = 00000006            

RM0XPFN         EXPAND FILENAME STRING                           21-AUG-1978 21:33:11   VAX-11 MACRO X0.3-11               Page  64

PROGRAM SECTION SYNOPSIS                                                                                                        (14)







PROGRAM SECTION SYNOPSIS



.  ABS  .        00000000      00     NOPIC   USR   CON   ABS   LCL NOSHR NOEXE NORD  NOWRT BYTE  

. BLANK .        00000000      01     NOPIC   USR   CON   REL   LCL NOSHR   EXE   RD    WRT BYTE  

F$RMSOPEN0       000004C4      02     NOPIC   USR   CON   REL   GBL NOSHR   EXE   RD  NOWRT BYTE  

$ABS$            00000400      03     NOPIC   USR   CON   ABS   LCL NOSHR   EXE   RD    WRT BYTE  

F$RMSOPEN0NAM    000001A0      04     NOPIC   USR   CON   REL   GBL NOSHR   EXE   RD  NOWRT BYTE  

L$RMS0           00000069      05     NOPIC   USR   CON   REL   GBL NOSHR   EXE   RD  NOWRT BYTE  

NF$NETWORK       000000B3      06     NOPIC   USR   CON   REL   GBL NOSHR   EXE   RD  NOWRT BYTE  

F$RMSOPEN0DFL    0000005E      07     NOPIC   USR   CON   REL   GBL NOSHR   EXE   RD  NOWRT BYTE  





THERE WERE NO ERRORS OR WARNINGS.

3170. BYTES LEFT IN FREE MEMORY POOL.

4. BYTES OF RECLAIMED MEMORY.

OBJ$:RM0XPFN,LIS$:RM0XPFN/-SP=EXECML$/ML,LIB$:R/ML,SRC$:RM0XPFN

49 MLB DIR RDS - 1147 GETS TO DEFINE 32 MACROS. 123 INTER. FILE WRITES. 

