+static char sccsid[] = "@(#)access.c 4.1 10/9/80";
#
/*
*
/* get data at loc using descriptor format d */
long
-getval(loc, d)
+getval(loc, d, space)
ADDR loc;
char d; {
register int val;
- val = get(loc, DSP);
+ val = get(loc, space);
val &= dmask[dtol(d)];
return(val);
}
{
INT pmode,rd,file;
ADDR w;
+ if (debug)
+ printf("access(mode=%d,adr=%d,space=%d,value=%d) with pid %d\n",
+ mode, adr, space, value, pid);
rd = mode==RD;
IF space == NSP THEN return(0); FI
#endif
pmode = (space&DSP?(rd?RDUSER:WDUSER):(rd?RIUSER:WIUSER));
w = ptrace(pmode, pid, adr, value);
+ if (debug)
+ printf("ptrace(%d,%d,%d,%d) = %d with error=%d\n",
+ pmode, pid, adr, value, w, errno);
#ifndef vax
IF adr&01
THEN w1 = ptrace(pmode, pid, shorten(adr+1), value);
THEN return(0);
FI
file=(space&DSP?datmap.ufd:txtmap.ufd);
- IF longseek(file,adr)==0 ORF
- (rd ? read(file,&w,sizeof(w)) : write(file,&value,sizeof(w))) < 1
- THEN errflg=(space&DSP?BADDAT:BADTXT);
- FI
+ if (longseek(file,adr)==0 ||
+ (rd ? read(file,&w,sizeof(w)) : write(file,&value,sizeof(w))) < 1)
+ errflg=(space&DSP?BADDAT:BADTXT);
return(w);
}
REG MAPPTR amap;
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);
- FI
+ THEN if (within(*adr,amap->b2,amap->e2))
+ *adr += (amap->f2)-(amap->b2);
+ else {
+ errflg=(space&DSP?BADDAT:BADTXT); return(0);
+ }
ELSE *adr += (amap->f1)-(amap->b1);
FI
return(1);
{
return(adr>=lbd && adr<ubd);
}
+
+/* ------------ */
+POS chkget(n, space)
+L_INT n;
+{
+#ifndef vax
+ REG INT w;
+#else
+ REG L_INT w;
+#endif
+
+ w = get(n, space);
+ chkerr();
+ return(w);
+}
+
+POS bchkget(n, space)
+L_INT n;
+{
+ return(chkget(n, space) & LOBYTE);
+}