Google
 

Trailing-Edge - PDP-10 Archives - decuslib10-08 - 43,50512/rmccom.req
There are no other files named rmccom.req in the archive.
!++
!
! *****  BEGINNING OF RMCCOM.REQ  *****
!
!--

!	THE FOLLOWING FEATURE SWITCHES ARE USE IN COMPILATIONS
!	FOR DIFFERENT OPERATING SYSTEMS (I.E.  VAX,TOPS10 AND
!	TOPS20).   THESE SWITCHES PERTAIN TO ONLY RMCOPY
!	RELATED CODE(TRANSPORTABLE ONLY)
COMPILETIME FTTOPS10=1;
COMPILETIME FTTOPS20=0;
COMPILETIME FTVAX=IF FTTOPS10 OR FTTOPS20 THEN 0 ELSE 1;


MACRO
	BIT0=0,1%,
	BIT1=1,1%,
	BIT2=2,1%,
	BIT3=3,1%,
	BIT4=4,1%,
	BIT5=5,1%,
	BIT6=6,1%,
	BIT7=7,1%,
	BIT8=8,1%,
	BIT9=9,1%,
	BIT10=10,1%,
	BIT11=11,1%,
	BIT12=12,1%,
	BIT13=13,1%,
	BIT14=14,1%,
	BIT15=15,1%;

MACRO		!TO BUMP A COMPILETIME INDEX,
		!	AND PRINT THE NEW VALUE TO THE LISTING
	NEXT[INDX]=NEXTBLOCK[INDX,1]%;	!A BLOCK OF SIZE ONE

MACRO		!TO ALLOCATE A BLOCK IN A FIELD SET
	NEXTBLOCK[INDX,SIZE]=%ASSIGN(INDX,INDX+SIZE)
		%PRINT(%NUMBER(INDX))%;

MACRO		!TO ALLOCATE SPACE FOR CHARACTER SEQUENCES
	CH$SEQUENCE(N)=VECTOR[CH$ALLOCATION(N)]%;

MACRO		!FOR A PIECE OF THE STRUCTURE DECLARATION ATTRIBUTE
	SIGNEXT=1%,	!PARTIAL WORD SIGN EXTENSION FLAG (ON)
	NOSIGNEXT=0%;	!NO PARTIAL WORD SIGN EXTENSION FLAG

MACRO		!FOR COMMONLY USED FIELD ATTRIBUTES
	FULLSIGNED=0,%BPVAL,SIGNEXT%,
	FULLUNSIGNED=0,%BPVAL,NOSIGNEXT%;

MACRO	!NUMBER OF ACSIZ CHARACTERS PER WORD ACCORDING TO LANGUAGE
	CHARSPERWORD=%IF %BLISS(BLISS36) %THEN  5 %ELSE 
		%IF %BLISS(BLISS16) %THEN 2 %ELSE 
		%IF %BLISS(BLISS32) %THEN 4 %ELSE 1 %FI%FI%FI %;


!	D A P    P R O T E C T I O N   F I E L D S

LITERAL		!BIT VECTOR DEFINITIONS (DEFINED WHEN SET TO 1)
	DAP$PRO_RDV=0,	!DENY READ ACCESS
	DAP$PRO_WRV=1,	!DENY WRITE ACCESS
	DAP$PRO_EXE=2,	!DENY EXECUTE ACCESS
	DAP$PRO_DLE=3,	!DENY DELETE ACCESS
	DAP$PRO_APP=4,	!DENY APPEND ACCESS
	DAP$PRO_LST=5,	!DENY LIST (DIRECTORY) ACCESS
	DAP$PRO_UPD=6,	!DENY UPDATE ACCESS
	DAP$EXTENSN=7,	!EXTENSION (0 IF FOLLOWING NOT NEEDED)
	DAP$PRO_CNG=8,	!DENY CHANGE PROTECTION ACCESS
	DAP$PRO_EXT=9,	!DENY EXTEND ACCESS

	DAP$PRO$SIZE=DAP$PRO_EXT+1;	!SIZE OF BITVECTOR


!	D A P   O P E R A T I N G    S Y S T E M S    C O D E S 

MACRO
	DAP$ILLEGAL=0%,		!ILLEGAL DAP CODE
	DAP$RT11=1%,		!RT-11 DAP CODE
	DAP$RSTS=2%,		!RSTS DAP CODE
	DAP$RSX11S=3%,		!RSX11S DAP CODE
	DAP$RSX11M=4%,		!RSX11M DAP CODE
	DAP$RSX11D=5%,		!RSX11D DAP CODE
	DAP$IAS=6%,		!IAS DAP CODE
	DAP$VAX=7%,		!VAX DAP CODE
	DAP$TOPS20=8%,		!TOPS-20 DAP CODE
	DAP$TOPS10=9%;		!TOPS-10 DAP CODE


	! S E N D   R M C   R E Q U E S T    B L O C K   D E S C R I P T I O N S
COMPILETIME BKINDX = 0;

FIELD	SD$RMC_FIELDS=
	SET
		SD$RMCVER=[BKINDX,FULLUNSIGNED],	!RMCOPY VERSION NUMBER
		NEXT[BKINDX]
		SD$RMCOPT=[BKINDX,FULLUNSIGNED],	!RMC$OPT OPTION BITS
			RMC$O_CODE=[BKINDX,BIT0,NOSIGNEXT],	!LOG FILE OPTION SPECIFIED
			RMC$O_WAIT=[BKINDX,BIT1,NOSIGNEXT],	!WAIT OPTION SPECIFIED
			RMC$O_B36=[BKINDX,BIT2,NOSIGNEXT],	!BINARY 36 OPTION SPECIFIED
			RMC$O_B11I=[BKINDX,BIT3,NOSIGNEXT],	!BINARY 16 IMAGE OPTION SPECIFIED
			RMC$O_B11P=[BKINDX,BIT4,NOSIGNEXT],	!BINARY 16 PACKED OPTION SPECIFIED
			RMC$O_ASC=[BKINDX,BIT5,NOSIGNEXT],	!ASCII MODE OPTION SPECIFIED
			RMC$O_GO=[BKINDX,BIT6,NOSIGNEXT],	!NOT USED 
			RMC$O_RTS=[BKINDX,BIT7,NOSIGNEXT],	!RTS OPTION SPECIFIED
			RMC$O_DE=[BKINDX,BIT8,NOSIGNEXT],	!DELETE INPUT FILE OPTION SPECIFIED
			RMC$O_CRP=[BKINDX,BIT9,NOSIGNEXT],	!ENCRYPT OPTION SPCIFIED
			RMC$O_OPR=[BKINDX,BIT10,NOSIGNEXT],	!NOTIFY OPR OPTION SPECIFIED
			RMC$O_SU=[BKINDX,BIT11,NOSIGNEXT],	!SUPERCEDE OPTION SPECIFIED
			RMC$O_APPD=[BKINDX,BIT12,NOSIGNEXT],	!APPEND OPTION SPECIFIED
			RMC$O_SBIT=[BKINDX,BIT13,NOSIGNEXT],	!SIXBIT OPTION SPECIFIED
			RMC$O_CKSM=[BKINDX,BIT14,NOSIGNEXT],	!CHECKSUM OPTION SPECIFIED
			RMC$O_ASCB=[BKINDX,BIT15,NOSIGNEXT],	!ASCII BLOCK OPTION SPECIFIED
		NEXT[BKINDX]
		SD$RMCFUN=[BKINDX,FULLUNSIGNED],	!TRANSFER REQUEST FUNCTION CODE
		NEXT[BKINDX]
		SD$CNT_JOB=[BKINDX,FULLUNSIGNED],	!CHAR. COUNT OF JOB NAME
		NEXT[BKINDX]
		SD$PTR_JOB=[BKINDX,FULLUNSIGNED],	!PTR TO ASCIZ OF JOB NAME
		NEXT[BKINDX]
		SD$CNT_RTS=[BKINDX,FULLUNSIGNED],	!CHAR. COUNT OF RUNTIME SYSTEM NAME
		NEXT[BKINDX]
		SD$PTR_RTS=[BKINDX,FULLUNSIGNED],	!PTR TO RUNTIME SYSTEM NAME TEXT
		NEXT[BKINDX]
		SD$CNT_RMT=[BKINDX,FULLUNSIGNED],	!CHAR. COUNT OF REMOTE FILE SPEC. PTR
		NEXT[BKINDX]
		SD$PTR_RMT=[BKINDX,FULLUNSIGNED],	!PTR TO REMOTE FILE SPEC. TEXT STRING
		NEXT[BKINDX]
		SD$CNT_REN=[BKINDX,FULLUNSIGNED],	!CHAR. COUNT OF RENAME/LOCAL FILE SPEC. PTR
		NEXT[BKINDX]
		SD$PTR_REN=[BKINDX,FULLUNSIGNED],	!PTR TO RENAME/LOCAL FILE SPEC. TEXT STRING
		NEXT[BKINDX]
		SD$CNT_ACC=[BKINDX,FULLUNSIGNED],	!CHAR. COUNT OF ACCOUNTING PTR
		NEXT[BKINDX]
		SD$PTR_ACC=[BKINDX,FULLUNSIGNED],	!PTR TO ACCOUNTING TEXT STRING
		NEXT[BKINDX]
		SD$CNT_LNOD=[BKINDX,FULLUNSIGNED],	!CHAR. COUNT FOR THE LOCAL NODE PTR
		NEXT[BKINDX]
		SD$PTR_LNOD=[BKINDX,FULLUNSIGNED],	!PTR TO THE LOCAL NODE NAME TEXT STRING
		NEXT[BKINDX]
		SD$CNT_RNOD=[BKINDX,FULLUNSIGNED],	!CHAR. COUNT FOR THE REMOTE NODE PTR
		NEXT[BKINDX]
		SD$PTR_RNOD=[BKINDX,FULLUNSIGNED],	!PTR TO THE REMOTE NODE NAME TEXT STRING
		NEXT[BKINDX]
		SD$CNT_LOG=[BKINDX,FULLUNSIGNED],	!CHAR. COUNT FOR THE LOG FILE SPEC. PTR
		NEXT[BKINDX]
		SD$PTR_LOG=[BKINDX,FULLUNSIGNED],	!PTR TO THE LOG FILE SPEC. TEXT STRING
		NEXT[BKINDX]
		SD$WAIT	=[BKINDX,FULLUNSIGNED],		!WAIT TIME IN MINUTES
		NEXT[BKINDX]
		SD$AFTER=[BKINDX,FULLUNSIGNED],		!AFTER TIME IN MINUTES
		NEXT[BKINDX]
	!The next 4 protection fields actually are 9 bit patterns
	!	Each of the 9 bits must be composed in the standard DAP
	!	format.  The bits describe read, write, execute, append, etc..
	!	We do not supply the individual bit defn's here.
		SD$SYSPROTECT=[BKINDX,0,9,NOSIGNEXT],	!SYSTEM FILE PROTECTION CODE
		NEXT[BKINDX]
		SD$WORPROTECT=[BKINDX,0,9,NOSIGNEXT],	!WORLD PROTECTION CODE
		NEXT[BKINDX]
		SD$OWNPROTECT=[BKINDX,0,9,NOSIGNEXT],	!OWNER FILE PROTECTION CODE
		NEXT[BKINDX]
		SD$GRPPROTECT=[BKINDX,0,9,NOSIGNEXT],	!GROUP FILE PROTECTIONCODE
		NEXT[BKINDX]
		SD$LIMIT=[BKINDX,FULLUNSIGNED],		!LIMIT WORD FOR FILE SIZE
		NEXT[BKINDX]
		SD$RDAP_NOD=[BKINDX,FULLUNSIGNED],	!REMOTE NODE DAP CODE
		NEXT[BKINDX]
		SD$LDAP_NOD=[BKINDX,FULLUNSIGNED],	!LOCAL NODE DAP CODE
		NEXT[BKINDX]
		SD$PRIOR=[BKINDX,FULLUNSIGNED]		!PRIOR WORD FOR REQUEST EXECUTE
	TES;

	NEXT[BKINDX]	!MUST INCREMENT ONE MORE TIME FOR WORD COUNT


COMPILETIME SD$SIZE=BKINDX;	!REMEMBER THE SIZE OF SD$RMCBLK FOR ALLOCATION
MACRO
	SD_RMCBLK=BLOCK[SD$SIZE] FIELD(SD$RMC_FIELDS)%;

!   R M C   R E M O T E   F U N C T I O N   V A L U E S
%ASSIGN(BKINDX,0)		!START WITH A ZERO OFFSET

!	***** NOTE :   IF THESE INDICES EVER CHANGE, QSRQUE AND QSRSCH
!			MUST ALSO BE CHANGED.

LITERAL		NEXT[BKINDX]
			RMC$F_SEND=BKINDX,	!SEND FILE TO REMOTE FUNCTION
		NEXT[BKINDX]
			RMC$F_GET=BKINDX,	!RETRIEVE FILE FROM REMOTE FUNCTION
		NEXT[BKINDX]
			RMC$F_REN=BKINDX,	!RENAME FUNCTION
		NEXT[BKINDX]
			RMC$F_DEL=BKINDX,	!DELETE FILE FUNCTION
		NEXT[BKINDX]
			RMC$F_DI=BKINDX,	!DIRECTORY INFORMATION FUNCTION
		NEXT[BKINDX]
			RMC$F_SUBMIT=BKINDX,	!Send a batch file & submit it
		NEXT[BKINDX]
			RMC$F_EXECUTE=BKINDX;	!Submit a batch stream




!	F L A G S   F O R   T H E   RUN, START, RMCOPY   M A T C H E R
!	N O T E  ::
!		These indexes must be positive, since FND_PATTERN returns
!		-1 as an error

%ASSIGN(BKINDX,1)		!START WITH AN OFFSET OF 1
LITERAL
	RUN$SWITCH = BKINDX,	!The index for the RUN command
		NEXT [BKINDX]
	START$SWITCH = BKINDX,	!... if the user did a GET... START
		NEXT [BKINDX]
	RMCOPY$SWITCH = BKINDX;	!The normal way to get things going



	!I N T E R N A L   R M C    CHK-ACCESS    B L O C K   D E S C R I P T I O N S 
%ASSIGN(BKINDX,0)		!START WITH A ZERO OFFSET

FIELD	CHK$BLK_FIELDS=
	SET
		CHK$SPEC$PTR=[BKINDX,FULLUNSIGNED],	!FILE SPEC PTR
			NEXT[BKINDX]
		CHK$DEV$PTR=[BKINDX,FULLUNSIGNED],	!DEVICE PTR
			NEXT[BKINDX]
		CHK$DEV$CNT=[BKINDX,FULLUNSIGNED],	!DEVICE CHAR. COUNT RETURNED HERE
			NEXT[BKINDX]
		CHK$DEV$MAX=[BKINDX,FULLUNSIGNED],	!DEVICE MAX. CHAR. COUNT
			NEXT[BKINDX]
		CHK$PRO=[BKINDX,FULLUNSIGNED],		!PROTECTION ADDR
			NEXT[BKINDX]
		CHK$LIM=[BKINDX,FULLUNSIGNED],		!LIMITS ADDR.
			NEXT[BKINDX]
		CHK$ACCESS$VAL=[BKINDX,FULLUNSIGNED],	!ACCESS VALUE
			NEXT[BKINDX]
		CHK$PATH$PTR=[BKINDX,FULLUNSIGNED],	!USER PATH PTR
			NEXT[BKINDX]
		CHK$PATH$MAX=[BKINDX,FULLUNSIGNED],	!USER PATH MAX CNT
			NEXT[BKINDX]
		CHK$PATH$CNT=[BKINDX,FULLUNSIGNED]	!PATH CNT RETURNED HERE
	TES;
	NEXT[BKINDX]	!MUST INCREMEMT ONE MORE TIME FOR WORD COUNT
COMPILETIME	CHK$SIZE_ARG=BKINDX;	!REMEMBER THE SIZE OF THE CHK$ARG FOR ALLOCATION
MACRO
	CHK$ARGBLK=BLOCK[CHK$SIZE_ARG] FIELD(CHK$BLK_FIELDS)%;



	!I N T E R N A L   R M C    E V A L U A T I O N    B L O C K   D E S C R I P T I O N S 
%ASSIGN(BKINDX,0)		!START WITH A ZERO OFFSET

FIELD	EVAL$BLK_FIELDS=
	SET
		EVAL$LFILESPCCC=[BKINDX,FULLUNSIGNED],	!LEFT SIDE COMMAND STRING FILESPEC CHAR. COUNT
		NEXT[BKINDX]
		EVAL$LFILESPCPT=[BKINDX,FULLUNSIGNED],	!LEFT SIDE COMMAND STRING FILESPEC PTR.
		NEXT[BKINDX]
		EVAL$RFILESPCCC=[BKINDX,FULLUNSIGNED],	!RIGHT SIDE COMMAND STRING FILESPEC CHAR. COUNT
		NEXT[BKINDX]
		EVAL$RFILESPCPT=[BKINDX,FULLUNSIGNED],	!RIGHT SIDE COMMAND STRING FILESPEC PTR.
		NEXT[BKINDX]
		EVAL$GLOBSTAT=[BKINDX,FULLUNSIGNED],	!COMMAND STRING EVALUATION STATUS
			EVAL$S_INPUTEOF=[BKINDX,BIT0,NOSIGNEXT],	!TTY/INPUT EOF FLAG
			EVAL$S_INDCOMPL=[BKINDX,BIT1,NOSIGNEXT],	!INDIRECT FILE SPEC. READY FOR PARSING FLAG
		NEXT[BKINDX]
		EVAL$COMSTAT=[BKINDX,FULLUNSIGNED],	!COMMAND STRING EVALUATION STATUS
			EVAL$S_RTNODE=[BKINDX,BIT0,NOSIGNEXT],	!RIGHT NODE ID DETECTED FLAG
			EVAL$S_LTNODE=[BKINDX,BIT1,NOSIGNEXT],	!LEFT NODE ID DETECTED FLAG
			EVAL$S_SIDE=[BKINDX,BIT2,NOSIGNEXT],	!"=" DETECTED FLAG(THE START OF THE RIGHT SIDE OF COMMAND)
			EVAL$S_MORE=[BKINDX,BIT3,NOSIGNEXT],	!MORE OR "-" SWITCH DETECTED FLAG
			EVAL$S_INDIR=[BKINDX,BIT4,NOSIGNEXT],	!INDIRECT FILE "@" DETECTED FLAG
			EVAL$S_KILL=[BKINDX,BIT5,NOSIGNEXT],	!KILL QUEUE REQUEST DETECTED FLAG
			EVAL$S_LIST=[BKINDX,BIT6,NOSIGNEXT],	!LIST QUEUE REQUEST DETECTED FLAG
			EVAL$S_SWITCH=[BKINDX,BIT7,NOSIGNEXT],	!OPTION SWITCH HAS BEEN DETECTED FLAG
			EVAL$S_LFILESP=[BKINDX,BIT8,NOSIGNEXT],	!LEFT FILE SPEC. DETECTED AND SAVED FLAG
			EVAL$S_RFILESP=[BKINDX,BIT9,NOSIGNEXT],	!RIGHT FILE SPEC. STRING DETECTED AND SAVED FLAG
			EVAL$S_FILESPEC=[BKINDX,BIT10,NOSIGNEXT],	!START A FILE SPEC SCAN FLAG
			EVAL$S_LOCALNOD=[BKINDX,BIT11,NOSIGNEXT],	!LOCAL NODE ALREADY DETECTED FLAG
			EVAL$S_AFTERFLG=[BKINDX,BIT12,NOSIGNEXT],	!AFTER DELAY SEND REQUEST FLAG
			EVAL$S_LIMIT=[BKINDX,BIT13,NOSIGNEXT],	!LIMIT OPTION SPECIFIED FLAG
			EVAL$LTLOCALNOD=[BKINDX,BIT14,NOSIGNEXT],	!LOG FILE SPEC. READY FOR PARSING FLAG
			EVAL$S_NOLOG=[BKINDX,BIT15,NOSIGNEXT],	!NOLOG OPTION SPECIFIED FLAG
		NEXT[BKINDX]
		EVAL$LOCALPTR=[BKINDX,FULLUNSIGNED],	!LOCAL NODE TEXT STRING PTR
		NEXT[BKINDX]
		EVAL$LOCALCC=[BKINDX,FULLUNSIGNED],	!LOCAL NODE TEXT STRING CHARACTER COUNT
		NEXT[BKINDX]
		EVAL$REMOTEPTR=[BKINDX,FULLUNSIGNED],	!REMOTE NODE TEXT STRING PTR
		NEXT[BKINDX]
		EVAL$REMOTECC=[BKINDX,FULLUNSIGNED],	!REMOTE NODE TEXT STRING CHARACTER COUNT
		NEXT[BKINDX]
		EVAL$SWTCHFUNCT=[BKINDX,FULLUNSIGNED],
		!SWITCH FUNCTION BEING EVALUATED - USED FOR ADDITION AL FIELD DETECTION
		NEXT[BKINDX]
		EVAL$INDCC=[BKINDX,FULLUNSIGNED],	!INDIRECT FILE SPEC. CHAR. COUNT
		NEXT[BKINDX]
		EVAL$INDPTR=[BKINDX,FULLUNSIGNED],	!INDIRECT FILE SPEC. TEXT PTR.
		NEXT[BKINDX]
		EVAL$LNODEID=[BKINDX,FULLUNSIGNED],	!LEFT SIDE NODE ID
		NEXT[BKINDX]
		EVAL$RNODEID=[BKINDX,FULLUNSIGNED],	!RIGHT SIDE NODE ID
		NEXT[BKINDX]
		EVAL$RNODECHAR=[BKINDX,FULLUNSIGNED],	!REMOTE NODE CHARACTERISTICS WORD
		NEXT[BKINDX]
		EVAL$USERNUMPTR=[BKINDX,FULLUNSIGNED],	!USER NUMBER[PPN] TEXT STRING PTR
		NEXT[BKINDX]
		EVAL$USERNUMCNT=[BKINDX,FULLUNSIGNED],	!USER NUMBER [PPN] TEXT STRING CNT
		NEXT[BKINDX]
		EVAL$USERSFDPTR=[BKINDX,FULLUNSIGNED],	!USER SFD TEXT STRING PTR
		NEXT[BKINDX]
		EVAL$USERSFDCNT=[BKINDX,FULLUNSIGNED],	!USER SFD TEXT STRING CNT
		NEXT[BKINDX]
		EVAL$FILEVERPTR=[BKINDX,FULLUNSIGNED],	!FILE VERSION TEXT STRING PTR
		NEXT[BKINDX]
		EVAL$FILEVERCNT=[BKINDX,FULLUNSIGNED],	!FILE VERSION TEXT STRING CNT
		NEXT[BKINDX]
		EVAL$FILESPCPTR=[BKINDX,FULLUNSIGNED],	!WORKING FILESPEC STARTING PTR
		NEXT[BKINDX]
		EVAL$FILESPECCC=[BKINDX,FULLUNSIGNED]	!WORKING FILESPEC CHARACTER COUNT
	TES;
	
	NEXT[BKINDX]	!MUST INCREMENT ONE MORE TIME FOR WORD COUNT

COMPILETIME 	EVAL$SIZE=BKINDX;	!REMEMBER THE SIZE OF EVAL$BLK FOR ALLOCATION

MACRO
	EVAL_BLK=BLOCK[EVAL$SIZE] FIELD(EVAL$BLK_FIELDS)%;




!	F I L E   S P E C .  D E F I N I T I O N   B L O C K
!THIS BLOCK DEFINITIONS ARE USED TO HOLD PTR AND CHAR. COUNTS
!FOR FILE SPEC. ARGUMENTS
%ASSIGN(BKINDX,0)		!START WITH A ZERO OFFSET

FIELD	FILE_ARG_FIELDS=
	SET
		DSK$PTR=[BKINDX,FULLUNSIGNED],	!DISK STRUCTURE PTR WORD
		NEXT[BKINDX]
		DSK$CNT=[BKINDX,FULLUNSIGNED],	!DISK STRUCTURE CHAR. COUNT
		NEXT[BKINDX]
		FILE$PTR=[BKINDX,FULLUNSIGNED],	!FILE NAME PTR WORD
		NEXT[BKINDX]
		FILE$CNT=[BKINDX,FULLUNSIGNED],	!FILENAME CHAR. COUNT
		NEXT[BKINDX]
		EXT$PTR=[BKINDX,FULLUNSIGNED],	!FILE EXT. PTR WORD
		NEXT[BKINDX]
		EXT$CNT=[BKINDX,FULLUNSIGNED],	!FILE EXT. CHAR. COUNT
		NEXT[BKINDX]
		SFD$PTR=[BKINDX,FULLUNSIGNED],	!SFD PTR WORD
		NEXT[BKINDX]
		SFD$CNT=[BKINDX,FULLUNSIGNED],	!SFD CHAR COUNT
		NEXT[BKINDX]
		VER$PTR=[BKINDX,FULLUNSIGNED],	!VER PTR WORD
		NEXT[BKINDX]
		VER$CNT=[BKINDX,FULLUNSIGNED],	!VER CHAR COUNT
		NEXT[BKINDX]
		PPN$PTR=[BKINDX,FULLUNSIGNED],	!PPN PTR WORD
		NEXT[BKINDX]
		PPN$CNT=[BKINDX,FULLUNSIGNED]	!PPN CHAR. COUNT
	TES;
	NEXT[BKINDX]	!MUST INCREMEMT ONE MORE TIME FOR WORD COUNT
COMPILETIME	FILE$SIZE_ARG=BKINDX;	!REMEMBER THE SIZE OF THE FILE$ARG FOR ALLOCATION
MACRO
	FILE$ARG=BLOCK[FILE$SIZE_ARG] FIELD(FILE_ARG_FIELDS)%;




!SWITCH OPTIONS WITH FUNCTION FIELDS FOLLOWING 
!USE THE FOLLOWING PROCESS BIT MAPS
%ASSIGN(BKINDX,0)

LITERAL
	RTANGL$VAL=BKINDX,
	PPN$VAL=BKINDX,
	BRACKET$VAL=BKINDX,
		NEXT[BKINDX]
	EXT$VAL=BKINDX,
	LTANGL$VAL=BKINDX,
	PROT$VAL=BKINDX,
	ANGLES$VAL=BKINDX,
		NEXT[BKINDX]
	FILE$VAL=BKINDX,
	RTBRAC$VAL=BKINDX,
	NUMCHK$VAL=BKINDX,
		NEXT[BKINDX]
	DSK$VAL=BKINDX,
	LTBRAC$VAL=BKINDX,
	NUMVAL$VAL=BKINDX,
		NEXT[BKINDX]
	COLON1$VAL=BKINDX,
	DATE$VAL=BKINDX,
		NEXT[BKINDX]
	COLON2$VAL=BKINDX,
	SFD$VAL=BKINDX,
		NEXT[BKINDX]
	COMMA1$VAL=BKINDX,
		NEXT[BKINDX]
	COMMA2$VAL=BKINDX,
		NEXT[BKINDX]
	PERIOD$VAL=BKINDX,
		NEXT[BKINDX]
	START$VAL = BKINDX,
	SWITCH$VAL=BKINDX,
		NEXT[BKINDX]
	END$VAL=BKINDX,
		NEXT[BKINDX]
	NUMERIC$VAL=BKINDX,
	SPECIAL$VAL=BKINDX,
		NEXT[BKINDX]
	TIME$VAL=BKINDX;

COMPILETIME SWFUNC$SIZE=BKINDX;

%IF SWFUNC$SIZE GTR %BPUNIT %THEN PRINT 'NO SWITCH FUNCTION BIT DEFINITIONS DEFINED' %FI
MACRO
	BITMASK(X)[]=%IF %NULL(X) %THEN 0 %ELSE
			1^X + BITMASK(%REMAINING) %FI %;


LITERAL
	RIGHTSIDE=0,
	LEFTSIDE=1,
	ONE=1,
	ZERO=0,
	HUNDRED=100;

LITERAL
	!THESE LITERALS ARE USE TO IDENTIFY MODULES FROM
	!WHICH ERRORS ARE OUTPUT FROM....
	RMCSCAINDX=1,
	RMCPARINDX=2,
	RMCSEMINDX=3,
	RMCCONINDX=4,
	RMCMSCINDX=5;



!The following are the asciz pattern literals use to numerical destinate 
!the identified the ascii DAY SWITCH option
!THESE LITERALS ARE IN NUMERIC ORDER ACCORDING TO DAY OF THE WEEK

%ASSIGN(BKINDX,0)

LITERAL
		NEXT[BKINDX]
	SUN$SWITCH = BKINDX,
		NEXT[BKINDX]
	MON$SWITCH = BKINDX,
		NEXT[BKINDX]
	TUE$SWITCH = BKINDX,
		NEXT[BKINDX]
	WED$SWITCH = BKINDX,
		NEXT[BKINDX]
	THU$SWITCH = BKINDX,
		NEXT[BKINDX]
	FRI$SWITCH = BKINDX,
		NEXT[BKINDX]
	SAT$SWITCH = BKINDX,
		NEXT[BKINDX]
	TOD$SWITCH = BKINDX,
		NEXT[BKINDX]
	TOM$SWITCH = BKINDX,
		NEXT[BKINDX]
	NOW$SWITCH = BKINDX;


!The following are the asciz pattern literals use to numerical destinate 
!the identified the ascii MONTH SWITCH option
!THESE LITERALS ARE IN NUMERIC ORDER ACCORDING TO MONTH

%ASSIGN(BKINDX,0)

LITERAL
		NEXT[BKINDX]
	JAN$SWITCH = BKINDX,
		NEXT[BKINDX]
	FEB$SWITCH = BKINDX,
		NEXT[BKINDX]
	MAR$SWITCH = BKINDX,
		NEXT[BKINDX]
	APR$SWITCH = BKINDX,
		NEXT[BKINDX]
	MAY$SWITCH = BKINDX,
		NEXT[BKINDX]
	JUN$SWITCH = BKINDX,
		NEXT[BKINDX]
	JUL$SWITCH = BKINDX,
		NEXT[BKINDX]
	AUG$SWITCH = BKINDX,
		NEXT[BKINDX]
	SEP$SWITCH = BKINDX,
		NEXT[BKINDX]
	OCT$SWITCH = BKINDX,
		NEXT[BKINDX]
	NOV$SWITCH = BKINDX,
		NEXT[BKINDX]
	DEC$SWITCH = BKINDX;


!The following are the asciz pattern literals use to numerical destinate 
!the identified the ascii SWITCH option
!FIELDS AND switch function fields..

%ASSIGN(BKINDX,0)

LITERAL
		NEXT[BKINDX]
	LOG$SWITCH = BKINDX,
		NEXT[BKINDX]
	NOLOG$SWITCH = BKINDX,
		NEXT[BKINDX]
	WAIT$SWITCH = BKINDX,
		NEXT[BKINDX]
	PRIOR$SWITCH = BKINDX,
		NEXT[BKINDX]
	OPR$SWITCH = BKINDX,
		NEXT[BKINDX]
	MORE$SWITCH = BKINDX,
		NEXT[BKINDX]
	BIN16$SWITCH = BKINDX,
		NEXT[BKINDX]
	REN$SWITCH = BKINDX,
		NEXT[BKINDX]
	APPEND$SWITCH = BKINDX,
		NEXT[BKINDX]
	DIRECT$SWITCH = BKINDX,
		NEXT[BKINDX]
	SUPER$SWITCH = BKINDX,
		NEXT[BKINDX]
	CONTIG$SWITCH = BKINDX,
		NEXT[BKINDX]
	BLOCK$SWITCH = BKINDX,
		NEXT[BKINDX]
	ACCT$SWITCH = BKINDX,
		NEXT[BKINDX]
	DELETE$SWITCH = BKINDX,
		NEXT[BKINDX]
	SIXBIT$SWITCH = BKINDX,
		NEXT[BKINDX]
	BIN36$SWITCH = BKINDX,
		NEXT[BKINDX]
	AFTER$SWITCH = BKINDX,
		NEXT[BKINDX]
	ASCII$SWITCH = BKINDX,
		NEXT[BKINDX]
	RTS$SWITCH = BKINDX,
		NEXT[BKINDX]
	ENCRYPT$SWITCH = BKINDX,
		NEXT[BKINDX]
	CHKSUM$SWITCH = BKINDX,
		NEXT[BKINDX]
	SEQ$SWITCH = BKINDX,
		NEXT[BKINDX]
	IMAGE$SWITCH = BKINDX,
		NEXT[BKINDX]
	PACKED$SWITCH = BKINDX,
		NEXT[BKINDX]
	LIST$SWITCH = BKINDX,
		NEXT[BKINDX]
	LIMIT$SWITCH = BKINDX,
		NEXT[BKINDX]
	SELF$SWITCH = BKINDX,
		NEXT[BKINDX]
	KILL$SWITCH = BKINDX,
		NEXT[BKINDX]
	PROTECT$SWITCH = BKINDX,
		NEXT[BKINDX]
	SYSTEM$SWITCH = BKINDX,
		NEXT[BKINDX]
	GROUP$SWITCH = BKINDX,
		NEXT[BKINDX]
	OWNER$SWITCH = BKINDX,
		NEXT[BKINDX]
	WORLD$SWITCH = BKINDX,
		NEXT[BKINDX]
	READ$SWITCH = BKINDX,
		NEXT[BKINDX]
	WRITE$SWITCH = BKINDX,
		NEXT[BKINDX]
	EXECUTE$SWITCH = BKINDX,
		NEXT[BKINDX]
	UPDATE$SWITCH = BKINDX,
		NEXT[BKINDX]
	CHANGE$SWITCH = BKINDX,
		NEXT[BKINDX]
	EXTEND$SWITCH = BKINDX;




!LITERAL FLAGS USE FOR CHK_NEXT_CHAR ROUTINE VALUE RETURNS

LITERAL
	C_N_C$NULL=1,	!A NULL CHARACTER WAS DETECTED
	C_N_C$DASH=2,	!A DASH "-" WAS DETECTED
	C_N_C$BLANK=3,	!A BLANK WAS DETECTED
	C_N_C$OTHER=4;	!SOME OTHER CHARACTER WAS DETECTED

!LITERAL FLAGS USED FOR GET_ACCESS ROUTINE VALUE CALLS

LITERAL
	SRC$ACCESS=1,	!SOURCE ACCESS VALUE
	DST$ACCESS=2,	!DESTINATION ACCESS VALUE
	LOG$ACCESS=3,	!LOG FILE ACCESS VALUE
	CMD$ACCESS=4;	!CMD FILE ACCESS VALUE

!LITERAL FLAGS USED FOR MORE_CHK ROUTINE VALUE RETURNS

LITERAL
	M_CHK$MORE=2,	!MORE SWITCH FOUND
	M_CHK$OK=1;	!NORMAL RETURN


!	R M C O P Y   E R R O R  L I T E R A L S
!		DEFINITIONS
!	THIS IS DONE TO ALLOW OF ERROR/ CORRECTION

%ASSIGN(BKINDX,1)	!SET UP THE NUMBER COUNT FOR THE ERROR LITERALS

LITERAL
	RMCAQF=BKINDX,	!Acknowledgement receive failed
		NEXT[BKINDX]
	RMCCMD=BKINDX,	!Command msg acsiz message
		NEXT[BKINDX]
	RMCCTL=BKINDX,	!Command string too long
		NEXT[BKINDX]
	RMCDES=BKINDX,	!Destination file message
		NEXT[BKINDX]
	RMCDND=BKINDX,	!Device is not a disk -- <filespec>
		NEXT[BKINDX]
	RMCEIF=BKINDX,	!END of indirect file
		NEXT[BKINDX]
	RMCFAN=BKINDX,	!File access not allowed
		NEXT[BKINDX]
	RMCFND=BKINDX,	!File not found -- <filespec>
		NEXT[BKINDX]
	RMCGPF=BKINDX,	!GROUP Protection field error
		NEXT[BKINDX]
	RMCICS=BKINDX,	!Illegal combination of switches -- <field>
		NEXT[BKINDX]
	RMCIDF=BKINDX,	!Indirect file -- 
		NEXT[BKINDX]
	RMCIFI=BKINDX,	!Indirect file input
		NEXT[BKINDX]
	RMCIFS=BKINDX,	!Illegal file specification -- <filespec>
		NEXT[BKINDX]
	RMCINA=BKINDX,	!Indirect file not ascii 
		NEXT[BKINDX]
	RMCINF=BKINDX,	!Indirect file not found
		NEXT[BKINDX]
	RMCINR=BKINDX,	!Illegal node in request  
		NEXT[BKINDX]
	RMCIOF=BKINDX,	!Indirect file open failure
		NEXT[BKINDX]
	RMCIPF=BKINDX,	!Indirect file protection failure
		NEXT[BKINDX]
	RMCIPP=BKINDX,	!Illegal ppn
		NEXT[BKINDX]
	RMCIRD=BKINDX,	!Illegal Remote DAP code  
		NEXT[BKINDX]
	RMCISN=BKINDX,	!Illegal transfer within same node
		NEXT[BKINDX]
	RMCISS=BKINDX,	!Illegal switch specified -- <switch>
		NEXT[BKINDX]
	RMCISV=BKINDX,	!Illegal switch value field -- <field>
		NEXT[BKINDX]
	RMCI11=BKINDX,	!Internal error - Illegal return from G_L_N 
		NEXT[BKINDX]
	RMCI12=BKINDX,	!Internal error - G_L_N$FAI - G_L_N failure 
		NEXT[BKINDX]
	RMCI13=BKINDX,	!Internal error - GETPATH error 
		NEXT[BKINDX]
	RMCI14=BKINDX,	!Internal error - Local node name not in NODTBL.EXE 
		NEXT[BKINDX]
	RMCI15=BKINDX,	!Internal error - G_I_S$EOF end-of-file on the specified input channel 
		NEXT[BKINDX]
	RMCI16=BKINDX,	!Internal error - G_I_S$IER device error on the input channel 
		NEXT[BKINDX]
	RMCI17=BKINDX,	!Internal error - G_I_S$CCO character count overflow 
		NEXT[BKINDX]
	RMCI18=BKINDX,	!Internal error - G_I_S$ILC illegal channel code 
		NEXT[BKINDX]
	RMCI19=BKINDX,	!Internal error - G_I_S$CNI (indirect) channel not initialized 
		NEXT[BKINDX]
	RMCI20=BKINDX,	!Internal error -- CHK_AC$NAK - no access allowed  
		NEXT[BKINDX]
	RMCI21=BKINDX,	!Internal error -- Creat error return
		NEXT[BKINDX]
	RMCI22=BKINDX,	!Internal error -- CHK_AC$CCO - Character count overflow  
		NEXT[BKINDX]
	RMCI23=BKINDX,	!Internal error --
		NEXT[BKINDX]
	RMCI24=BKINDX,	!Internal error --
		NEXT[BKINDX]
	RMCI25=BKINDX,	!Internal error -- Illegal return from INI_IN
		NEXT[BKINDX]
	RMCI26=BKINDX,	!Internal error -- QFN$ILP Parameter type code  
		NEXT[BKINDX]
	RMCI27=BKINDX,	!Internal error -- QFN$ILF Illegal function  
		NEXT[BKINDX]
	RMCI28=BKINDX,	!Internal error -- QFUNC Illegal return  
		NEXT[BKINDX]
	RMCI29=BKINDX,	!Internal error -- No free pages to create request  
		NEXT[BKINDX]
	RMCI30=BKINDX,	!Internal error -- Illegal return from CHK_ACCESS  
		NEXT[BKINDX]
	RMCI31=BKINDX,	!Internal error -- Illegal return from G_I_S  
		NEXT[BKINDX]
	RMCI32=BKINDX,	!Internal error -- INI_IN$BFS Indirect file/bad file spec  
		NEXT[BKINDX]
	RMCI33=BKINDX,	!Internal error -- Creat error return
		NEXT[BKINDX]
	RMCLDS=BKINDX,	!LOG file's dsk / LOCAL file's dsk must be same
		NEXT[BKINDX]
	RMCLOG=BKINDX,	!Log file message
		NEXT[BKINDX]
	RMCLQF=BKINDX,	!List answer receive failed
		NEXT[BKINDX]
	RMCLRD=BKINDX,	!Legal Remote DAP Code not implemented - file spec parsing for node  
		NEXT[BKINDX]
	RMCMFN=BKINDX,	!Multi-filespec requests not implemented
		NEXT[BKINDX]
	RMCMOR=BKINDX,	!More> 
		NEXT[BKINDX]
	RMCMSE=BKINDX,	!/ MORE switch error
		NEXT[BKINDX]
	RMCNDC=BKINDX,	!Zero DAP code for node in node table
		NEXT[BKINDX]
	RMCNDD=BKINDX,	!Node delimiter detected in switch/filespec field
		NEXT[BKINDX]
	RMCNFS=BKINDX,	!NO file spec on right side of command string
		NEXT[BKINDX]
	RMCNIF=BKINDX,	!Nested indirect files not implemented
		NEXT[BKINDX]
	RMCNLN=BKINDX,	!No local node in request
		NEXT[BKINDX]
	RMCOOR=BKINDX,	!Error passed is OUT OF RANGE 
		NEXT[BKINDX]
	RMCOFF=BKINDX,	!Open failure -- <filespec>
		NEXT[BKINDX]
	RMCOPF=BKINDX,	!OWNER protection field is invalid
		NEXT[BKINDX]
	RMCPRF=BKINDX,	!Protection failure -- <filespec>
		NEXT[BKINDX]
	RMCRDC=BKINDX,	!Remote DAP code 0 - no file spec parsing for node  
		NEXT[BKINDX]
	RMCRDN=BKINDX,	!Remote disk structure not specified
		NEXT[BKINDX]
	RMCRMC=BKINDX,	!RMCOPY> 
		NEXT[BKINDX]
	RMCRMV=BKINDX,	!RMCOPY Version: 
		NEXT[BKINDX]
	RMCRNA=BKINDX,	!Retrieve not allowed from the remote NODE
		NEXT[BKINDX]
	RMCRQF=BKINDX,	!Receive from [SYSTEM] QUASAR Failed
		NEXT[BKINDX]
	RMCRSN=BKINDX,	!Retrieve/Send not allowed from/to the remote NODE
		NEXT[BKINDX]
	RMCSAS=BKINDX,	!Switch already specified
		NEXT[BKINDX]
	RMCSEC=BKINDX,	!Syntax error in command string
		NEXT[BKINDX]
	RMCSFE=BKINDX,	!Source file error
		NEXT[BKINDX]
	RMCSNA=BKINDX,	!Send not allowed to the remote NODE
		NEXT[BKINDX]
	RMCSNI=BKINDX,	!Switch not implemented -- 
		NEXT[BKINDX]
	RMCSOU=BKINDX,	!Source file message
		NEXT[BKINDX]
	RMCSPF=BKINDX,	!System protection field error 
		NEXT[BKINDX]
	RMCSQF=BKINDX,	!Send to [SYSTEM] QUASAR failed, message being resent
		NEXT[BKINDX]
	RMCURN=BKINDX,	!Undefined remote node name
		NEXT[BKINDX]
	RMCWFQ=BKINDX,	!RMCOPY waiting for [SYSTEM] QUASAR to start
		NEXT[BKINDX]
	RMCWNI=BKINDX,	!Wildcarding not implemented
		NEXT[BKINDX]
	RMCWPF=BKINDX,	!WORLD protection field error
		NEXT[BKINDX]
	RMCXXX=BKINDX;	!Internal error -- <reason>

COMPILETIME MSG$TAB$SIZE=BKINDX;
!	REMEMBER TOTAL NUMBER OF ERROR MESSAGES

!++
!
! *****  END OF RMCCOM.REQ  *****
!
!--