	.TITLE	VALUE
	.LIBRARY	"CLD"
	.PSECT	VALUE
	$ENTDEF
;
; WRITE OUT THE VALUE RECORD
;   EXPECTED INPUT:
;	R7  = ENTITY DESCRIPTOR ADDRESS
;	R11 = 0, VALUE PROCESSING ON A KEYWORD
;	    = 1, NORMAL VALUE PROCESSING
;
VALUE::
	TSTL	R10
	BEQL	10$
	CLRL	R11
	MOVAL	VALREC+24.,R10
	MOVZWL	ENT_W_DEFVAL(R7),R9
	BNEQ	DODEF2
	BRW	NOVALUE
10$:	BITB	#ENT_M_VAL!ENT_M_FILE!ENT_M_VALREQ,ENT_L_FLAGS(R7)
	BNEQ	DOREQ
	BITB	#ENT_M_LIST!ENT_M_CONCAT,ENT_L_FLAGS(R7)
	BNEQ	DOREQ
	BRW	NOVALUE
;
; BUILD VALUE RECORD FOR CLD FILE
;
DOREQ:	MOVAL	VALREC+24.,R10
	CLRL	R11
	BITB	#ENT_M_VALREQ,ENT_L_FLAGS(R7)
	BEQL	DOLIST
	MOVQ	REQUIRED,(R10)+
	INCL	R11
;
DOLIST:	BITB	#ENT_M_LIST,ENT_L_FLAGS(R7)
	BEQL	DOIMP
	BBCS	#0,R11,10$
	MOVB	COMMA,(R10)+
10$:	MOVL	LIST,(R10)+
;
DOIMP:	BITL	#ENT_M_IMPCAT,ENT_L_FLAGS(R7)
	BEQL	DODEF
	BBCS	#0,R11,10$
	MOVB	COMMA,(R10)+
10$:	MOVL	IMPC,(R10)+
	MOVW	IMPC+4,(R10)+
;
DODEF:
	MOVZWL	ENT_W_DEFVAL(R7),R9
	BEQL	DOKEYS
;
DODEF2:	CVTWL	R9,R9
	ADDL	R7,R9
	MOVZBL	(R9)+,R6
	BBCS	#0,R11,10$
	MOVB	COMMA,(R10)+
10$:	MOVQ	DEFAULT,(R10)+
	MOVC3	R6,(R9),(R10)
	ADDL	R6,R10
;
DOKEYS:
	MOVZWL	ENT_W_KEYWORDS(R7),R9
	BEQL	DOTYPE
	CVTWL	R9,R9
	BBCS	#0,R11,10$
	MOVB	COMMA,(R10)+
10$:	MOVC3	#5,TYPE,(R10)
	ADDL	#5,R10
	MOVC3	VERBLEN,VERB,(R10)
	ADDL	VERBLEN,R10
	MOVB	UNDER,(R10)+
	PUSHAL	NAMLEN
	PUSHL	R10
	PUSHL	#0
	PUSHL	R7
	CALLS	#4,KEYWORD
;	MOVC3	NAMLEN,NAME,(R10)
	ADDL	NAMLEN,R10
	MOVC3	#9,KEYS,(R10)
	ADDL	#9,R10
;
DOTYPE:
	MOVZBL	ENT_B_VALTYPE(R7),R9
	BEQL	FINI
	DECL	R9
	MOVAL	TYPTAB,R6
	MOVL	(R6)[R9],R9
	MOVZBL	(R9)+,R6
	BBCS	#0,R11,10$
	MOVB	COMMA,(R10)+
10$:	MOVC3	#5,TYPE,(R10)
	ADDL	#5,R10
	MOVC3	R6,(R9),(R10)
	ADDL	R6,R10
;
FINI:	MOVB	PAREN,(R10)+
;
	SUBL3	#VALREC,R10,R6
	CMPL	#25,R6
	BNEQ	10$
	SUBL	#2,R6
10$:	$RAB_STORE	RAB=OUTRAB,RBF=VALREC,RSZ=R6
	$PUT	RAB=OUTRAB
;
NOVALUE:
	RSB
;
VALREC:	.ASCII	/                 value (/
	.BLKB	80.
REQUIRED:	.ASCII	/required/
COMMA:	.ASCII	/,/
LIST:	.ASCII	/list/
IMPC:	.ASCII	/impcat/
DEFAULT:	.ASCII	/default=/
TYPE:	.ASCII	/type=/
KEYS:	.ASCII	/_KEYWORDS/
PAREN:	.ASCII	/)/
UNDER:	.ASCII	/_/
TYPTAB:	.LONG	INFILE
	.LONG	OUTFILE
	.LONG	NUMBER
	.LONG	PRIVILEGE
	.LONG	DATETIME
	.LONG	PROTECT
	.LONG	PROCESS
	.LONG	INLOG
	.LONG	OUTLOG
	.LONG	INSYM
	.LONG	OUTSYM
	.LONG	NODE
	.LONG	DEVICE
	.LONG	DIR
	.LONG	UIC
	.LONG	REST
INFILE:	.BYTE	7
	.ASCII	/$INFILE/
OUTFILE:	.BYTE	8
	.ASCII	/$OUTFILE/
NUMBER:	.BYTE	7
	.ASCII	/$NUMBER/
PRIVILEGE:	.BYTE	10.
	.ASCII	/$PRIVILEGE/
DATETIME:	.BYTE	9.
	.ASCII	/$DATETIME/
PROTECT:	.BYTE	8
	.ASCII	/$PROTECT/
PROCESS:	.BYTE	8
	.ASCII	/$PROCESS/
INLOG:	.BYTE	6
	.ASCII	/$INLOG/
OUTLOG:	.BYTE	7
	.ASCII	/$OUTLOG/
INSYM:	.BYTE	6
	.ASCII	/$INSYM/
OUTSYM:	.BYTE	7
	.ASCII	/$OUTSYM/
NODE:	.BYTE	5
	.ASCII	/$NODE/
DEVICE:	.BYTE	7
	.ASCII	/$DEVICE/
DIR:	.BYTE	10
	.ASCII	/$DIRECTORY/
UIC:	.BYTE	4
	.ASCII	/$UIC/
REST:	.BYTE	13
	.ASCII	/$REST_OF_LINE/
	.END
