	.TITLE	PSEC.MAR

;+	THIS PROGRAM ILLUSTRATES THE USE OF PRIVATE SECTIONS.
;	IT CREATES A FILE, THEN CREATES AND MAPS THIS FILE AS
;	A PRIVATE SECTION.  THE SECTION IS THEN WRITTEN TO
;-	AND PRINTED.

;	DATA
	$JPIDEF
SECFAB:	$FAB	FNM=<SECTION.TST>, FOP=<UFO,CIF,CTG>,-	; MINIMUM
		ALQ=10, FAC=PUT				; FAB FIELDS
MAPRANGE:
	.BLKL						; FIRST PAGE
	.LONG	^X1FFFFFFF				; LAST PAGE
RETRANGE:
BEGIN:	.BLKL						; FIRST PAGE MAPPED
	.BLKL						; LAST PAGE MAPPED
OUTPUT:	.LONG	10
STR_LOC:.BLKL
NUM:	.LONG	^X30
GETVADR:.WORD	4
	.WORD	JPI$_FREP0VA
	.LONG	MAPRANGE
	.LONG	0
	.LONG	0

START:	.WORD	0

;	CREATE FILE FOR PRIVATE SECTION
	$CREATE	FAB=SECFAB
	BLBC	R0, ERROR

;	OBTAIN ADDRESS OF FIRST FREE PAGE IN PROGRAM (P0) SPACE
	$GETJPI_S	ITMLST=GETVADR
	BLBC		R0, ERROR

;	CREATE AND MAP SECTION FOR READ/WRITE ACCESS AND
;	DEMAND ZERO PAGING
	$CRMPSC_S	INADR=MAPRANGE, RETADR=RETRANGE,-
			PAGCNT=#10, FLAGS=#SEC$M_WRT,-
			CHAN=SECFAB+FAB$L_STV
	BLBC		R0, ERROR

;	POINT TO START OF SECTION
	ADDL3	BEGIN,#2048,R2

;	WRITE TO SECTION
LOOP:	MOVB	NUM, (R2)+
	AOBLEQ	#^X39, NUM, LOOP

;	COMPLETE OUTPUT STRING DESCRIPTOR AND 
;	PRINT WHAT WAS WRITTEN TO SECTION
	MOVL	BEGIN, STR_LOC
	PUSHAQ	OUTPUT
	CALLS	#1, LIB$PUT_OUTPUT
	BLBC	R0, ERROR

	RET
ERROR:	$EXIT_S	R0
	.END START
