Google
 

Trailing-Edge - PDP-10 Archives - decuslib20-03 - decus/20-0078/libsim/finddi.mac
There are 2 other files named finddi.mac in the archive. Click here to see a list.
Comment * SIMULA specification;
OPTIONS(/E:CODE,finddirectfile);
REF(Directfile)PROCEDURE finddirectfile(filespec,update);
VALUE filespec; TEXT filespec; BOOLEAN update;
COMMENT If a Directfile according to the specification can be opened,
then return a file ref, otherwise NONE. If update is TRUE,
assume read AND write access, otherwise handle as if /ACCESS:RONLY were given;

! *;! MACRO-10 code *;!

	TITLE	finddirectfile
	SUBTTL	SIMULA utility, Lars Enderin Oct 1975

;!*** Copyright 1975 by the Swedish Defence Research Institute. ***
;!*** Copying is allowed.					***

	ENTRY	finddirectfile
	sall
	search	simmac,simmcr,simrpa
	macinit

	result==ZBI%S
	filespec==result+1
	update==filespec+2
	.ACRED==5	;! Parameter to signify read access to CHKACC
	.ACWRI==2	;! Parameter to signify write access to CHKACC
	OPDEF	CHKACC	[CALLI	100]

finddirectfile:
	PROC
	EXEC	CPNE	;! Allocate a file object
	XWD	0,IODF	;! Directfile prototype
	IF	;! NOT update
		SKIPE	update(XCB)
		GOTO	FALSE
	THEN	;! Set /ACCESS:RONLY
		SETON	ZFIRON(XWAC1)
	FI
	SETON	ZFIFND(XWAC1)	;! Flag special case
	LD	filespec(XCB)	;! Copy the parameter
	STD	OFFSET(ZFISPC)(XWAC1)
	EXEC	CSEN
	IF	;! Found
		IFOFF	ZIFEND(XWAC1)
		GOTO	FALSE
	THEN	;! Check access rights further
		LF	XWAC4,ZFIFIL(XWAC1)
		LF	XWAC4,ZXBPT(XWAC4)
		HRLI	XWAC4,.ACRED	;! Read access to be checked
		IFOFF	ZFIRON(XWAC1)
		HRLI	XWAC4,.ACWRI	;! Write access if not RONLY
		CALLI	XWAC5,24	;! User ppn
		 CAI	;! In case of JACCT
		SKIPN	XWAC6,OFFSET(ZFIPPN)(XWAC1)	;! File ppn
		L	XWAC6,XWAC5
		LI	XWAC4
		CHKACC
		SETZ	;! Assume access allowed on error return
		JUMPN	FALSE
		ST	XWAC1,result(XCB)
		SETOFF	ZFIFND(XWAC1)
	ELSE	;! Close to get rid of core claimed etc
		EXEC	IOCL
	FI
	BRANCH	CSEP
	EPROC
	END;