/* file handling and access routines */
access(WT
,adr
,space
,value
);
return(access(RD
,adr
,space
,0));
access(mode
,adr
,space
,value
)
INT w
, w1
, pmode
, rd
, file
;
IF space
== NSP THEN
return(0); FI
THEN
IF (adr
&01) ANDF
!rd THEN
error(ODDADR
); FI
pmode
= (space
&DSP
?(rd
?RDUSER
:WDUSER
):(rd
?RIUSER
:WIUSER
));
w
= ptrace(pmode
, pid
, shorten(adr
&~01), value
);
THEN w1
= ptrace(pmode
, pid
, shorten(adr
+1), value
);
w
= (w
>>8)&LOBYTE
| (w1
<<8);
THEN errflg
= (space
&DSP
? BADDAT
: BADTXT
);
IF mode
==WT ANDF wtflag
==0
THEN
error("not in write mode");
file
=(space
&DSP
?datmap
.ufd
:txtmap
.ufd
);
IF
longseek(file
,adr
)==0 ORF
(rd
? read(file
,&w
,2) : write(file
,&value
,2)) < 1
THEN errflg
=(space
&DSP
?BADDAT
:BADTXT
);
amap
=((space
&DSP
?&datmap
:&txtmap
));
IF space
&STAR ORF
!within(*adr
,amap
->b1
,amap
->e1
)
THEN IF
within(*adr
,amap
->b2
,amap
->e2
)
THEN
*adr
+= (amap
->f2
)-(amap
->b2
);
ELSE errflg
=(space
&DSP
?BADDAT
:BADTXT
); return(0);
ELSE
*adr
+= (amap
->f1
)-(amap
->b1
);
return(adr
>=lbd
&& adr
<ubd
);