Initial revision
This commit is contained in:
parent
a66faf4100
commit
e1b871a6ea
127
lang/a68s/liba68s/.distr
Normal file
127
lang/a68s/liba68s/.distr
Normal file
|
@ -0,0 +1,127 @@
|
|||
LIST
|
||||
Makefile
|
||||
aclose.c
|
||||
aopen.c
|
||||
arctan.c
|
||||
associate.p
|
||||
bytespack.p
|
||||
calls.e
|
||||
catpl.p
|
||||
cfstr.p
|
||||
chains.e
|
||||
cleanup.c
|
||||
collp.p
|
||||
colltm.p
|
||||
collts.p
|
||||
complex.p
|
||||
cos.c
|
||||
crmult.p
|
||||
crrefn.p
|
||||
dclpsn.p
|
||||
div.e
|
||||
drefm.p
|
||||
drefs.p
|
||||
dumbacch.p
|
||||
duminch.p
|
||||
dummy.p
|
||||
dumoutch.p
|
||||
e.h
|
||||
ensure.p
|
||||
entier.c
|
||||
errorr.p
|
||||
exit.c
|
||||
exp.c
|
||||
fixed.p
|
||||
float.p
|
||||
genrec.p
|
||||
get.e
|
||||
getaddr.e
|
||||
getmult.p
|
||||
getout.p
|
||||
gett.p
|
||||
global.p
|
||||
globale.e
|
||||
gtot.p
|
||||
gtotref.p
|
||||
gvasstx.p
|
||||
gvscope.p
|
||||
heapmul.p
|
||||
heapstr.p
|
||||
hoist.e
|
||||
is.p
|
||||
linit2.p
|
||||
linit34.p
|
||||
linitinc.p
|
||||
ln.c
|
||||
lpb.s
|
||||
make
|
||||
maxr.c
|
||||
mod.c
|
||||
mulis.p
|
||||
nassp.p
|
||||
nassts.p
|
||||
newline.p
|
||||
onend.p
|
||||
openclose.p
|
||||
pcollmul.p
|
||||
pcollst.p
|
||||
posenq.p
|
||||
powi.c
|
||||
powneg.p
|
||||
powr.c
|
||||
put.e
|
||||
putt.p
|
||||
random.p
|
||||
rangent.p
|
||||
rangext.p
|
||||
reset.p
|
||||
rnstart.p
|
||||
routn.p
|
||||
routnp.p
|
||||
rowm.p
|
||||
rownm.p
|
||||
run68g.p
|
||||
rundecs.p
|
||||
safeaccess.p
|
||||
scopext.p
|
||||
selectr.p
|
||||
selecttsn.p
|
||||
setcc.p
|
||||
sett.p
|
||||
shl.c
|
||||
shr.c
|
||||
signi.c
|
||||
signr.c
|
||||
sin.c
|
||||
skip.p
|
||||
slice12.p
|
||||
slicen.p
|
||||
space.p
|
||||
sqrt.c
|
||||
standass.p
|
||||
standback.e
|
||||
standin.p
|
||||
standout.p
|
||||
stbacch.p
|
||||
stinch.p
|
||||
stopen.p
|
||||
stoutch.p
|
||||
strsubtrim.p
|
||||
structscope.p
|
||||
swap.e
|
||||
tassp.p
|
||||
tasstm.p
|
||||
tassts.p
|
||||
temp.c
|
||||
time.c
|
||||
timesten.c
|
||||
trace.e
|
||||
trig.p
|
||||
trim.p
|
||||
uplwb.p
|
||||
uplwbm.p
|
||||
uplwbmstr.p
|
||||
whole.p
|
||||
widchar.p
|
||||
widen.p
|
||||
wrs.e
|
119
lang/a68s/liba68s/LIST
Normal file
119
lang/a68s/liba68s/LIST
Normal file
|
@ -0,0 +1,119 @@
|
|||
/user/t63/em/lib/sun3/tail_a68stail_a68s.a
|
||||
errorr.p
|
||||
global.p
|
||||
safeaccess.p
|
||||
collp.p
|
||||
colltm.p
|
||||
collts.p
|
||||
complex.p
|
||||
crmult.p
|
||||
crrefn.p
|
||||
dclpsn.p
|
||||
drefm.p
|
||||
drefs.p
|
||||
dummy.p
|
||||
genrec.p
|
||||
getmult.p
|
||||
getout.p
|
||||
gtot.p
|
||||
gtotref.p
|
||||
gvasstx.p
|
||||
gvscope.p
|
||||
heapmul.p
|
||||
heapstr.p
|
||||
is.p
|
||||
linit2.p
|
||||
linit34.p
|
||||
linitinc.p
|
||||
nassts.p
|
||||
nassp.p
|
||||
pcollmul.p
|
||||
pcollst.p
|
||||
rangent.p
|
||||
rangext.p
|
||||
rnstart.p
|
||||
routn.p
|
||||
routnp.p
|
||||
rowm.p
|
||||
rownm.p
|
||||
scopext.p
|
||||
selectr.p
|
||||
selecttsn.p
|
||||
setcc.p
|
||||
skip.p
|
||||
slice12.p
|
||||
slicen.p
|
||||
strsubtrim.p
|
||||
structscope.p
|
||||
tassp.p
|
||||
tasstm.p
|
||||
tassts.p
|
||||
trim.p
|
||||
widchar.p
|
||||
widen.p
|
||||
catpl.p
|
||||
cfstr.p
|
||||
mulis.p
|
||||
powneg.p
|
||||
uplwb.p
|
||||
uplwbm.p
|
||||
uplwbmstr.p
|
||||
bytespack.p
|
||||
random.p
|
||||
trig.p
|
||||
associate.p
|
||||
dumbacch.p
|
||||
duminch.p
|
||||
dumoutch.p
|
||||
ensure.p
|
||||
fixed.p
|
||||
float.p
|
||||
gett.p
|
||||
newline.p
|
||||
onend.p
|
||||
openclose.p
|
||||
posenq.p
|
||||
putt.p
|
||||
reset.p
|
||||
sett.p
|
||||
space.p
|
||||
standass.p
|
||||
standin.p
|
||||
standout.p
|
||||
stbacch.p
|
||||
stinch.p
|
||||
stopen.p
|
||||
stoutch.p
|
||||
whole.p
|
||||
calls.e
|
||||
chains.e
|
||||
div.e
|
||||
get.e
|
||||
getaddr.e
|
||||
globale.e
|
||||
hoist.e
|
||||
put.e
|
||||
standback.e
|
||||
swap.e
|
||||
trace.e
|
||||
wrs.e
|
||||
aclose.c
|
||||
aopen.c
|
||||
powi.c
|
||||
powr.c
|
||||
mod.c
|
||||
entier.c
|
||||
signi.c
|
||||
signr.c
|
||||
timesten.c
|
||||
shl.c
|
||||
shr.c
|
||||
time.c
|
||||
sin.c
|
||||
cos.c
|
||||
arctan.c
|
||||
sqrt.c
|
||||
exp.c
|
||||
ln.c
|
||||
maxr.c
|
||||
cleanup.c
|
130
lang/a68s/liba68s/Makefile
Normal file
130
lang/a68s/liba68s/Makefile
Normal file
|
@ -0,0 +1,130 @@
|
|||
EMROOT=../../..
|
||||
ACK=$(EMROOT)/bin/$(MACH)
|
||||
PC=$(ACK) -.p -PR$(EMROOT)/lang/a68s/cpem/cpem
|
||||
PCFLAGS=-v -L -e -LIB -Oego -SR -CJ -BO -SP
|
||||
EPCFLAGS=-v -L -e -LIB $(BSD4) $(VAX4)
|
||||
UTIL=$(EMROOT)/lang/a68s/util
|
||||
TAILOR=$(UTIL)/tailor
|
||||
XREF=$(UTIL)/xref -i$(UTIL)/pascal.ign -p
|
||||
CHECKSEQ=$(UTIL)/checkseq
|
||||
TERRS=/dev/tty
|
||||
TNOS=101 2 103 104 105 111 21 122 123 124 125 32 41 150 151 152 153 154 155 161 $(RECIPE)
|
||||
CFILES=aclose.c aopen.c powi.c powr.c mod.c entier.c signi.c signr.c \
|
||||
timesten.c shl.c shr.c time.c sin.c cos.c arctan.c sqrt.c exp.c \
|
||||
ln.c maxr.c cleanup.c
|
||||
COFILES=aclose.o aopen.o powi.o powr.o mod.o entier.o signi.o signr.o \
|
||||
timesten.o shl.o shr.o time.o sin.o cos.o arctan.o sqrt.o exp.o \
|
||||
ln.o maxr.o cleanup.o
|
||||
FILES=run68g.p
|
||||
GFILES=errorr.p global.p safeaccess.p
|
||||
GOFILES=errorr.o global.o safeaccess.o
|
||||
PFILES=collp.p colltm.p collts.p complex.p crmult.p crrefn.p dclpsn.p drefm.p \
|
||||
drefs.p dummy.p genrec.p getmult.p getout.p gtot.p gtotref.p \
|
||||
gvasstx.p gvscope.p heapmul.p heapstr.p is.p linit2.p linit34.p \
|
||||
linitinc.p nassts.p nassp.p pcollmul.p pcollst.p rangent.p rangext.p \
|
||||
rnstart.p routn.p routnp.p rowm.p rownm.p scopext.p selectr.p \
|
||||
selecttsn.p setcc.p skip.p slice12.p slicen.p strsubtrim.p \
|
||||
structscope.p tassp.p tasstm.p tassts.p trim.p widchar.p widen.p
|
||||
POFILES=collp.o colltm.o collts.o complex.o crmult.o crrefn.o dclpsn.o drefm.o \
|
||||
drefs.o dummy.o genrec.o getmult.o getout.o gtot.o gtotref.o gvasstx.o \
|
||||
gvscope.o heapmul.o heapstr.o is.o linit2.o linit34.o linitinc.o \
|
||||
nassts.o nassp.o pcollmul.o pcollst.o rangent.o rangext.o rnstart.o \
|
||||
routn.o routnp.o rowm.o rownm.o scopext.o selectr.o selecttsn.o \
|
||||
setcc.o skip.o slice12.o slicen.o strsubtrim.o structscope.o tassp.o \
|
||||
tasstm.o tassts.o trim.o widchar.o widen.o
|
||||
OPFILES=catpl.p cfstr.p mulis.p powneg.p uplwb.p uplwbm.p uplwbmstr.p
|
||||
OPOFILES=catpl.o cfstr.o mulis.o powneg.o uplwb.o uplwbm.o uplwbmstr.o
|
||||
SPFILES=bytespack.p random.p trig.p
|
||||
SPOFILES=bytespack.o random.o trig.o
|
||||
TFILES=associate.p dumbacch.p duminch.p dumoutch.p ensure.p fixed.p float.p \
|
||||
gett.p newline.p onend.p openclose.p posenq.p putt.p reset.p sett.p \
|
||||
space.p standass.p standin.p standout.p stbacch.p stinch.p stopen.p \
|
||||
stoutch.p whole.p
|
||||
TOFILES=associate.o dumbacch.o duminch.o dumoutch.o ensure.o fixed.o float.o \
|
||||
gett.o newline.o onend.o openclose.o posenq.o putt.o reset.o sett.o \
|
||||
space.o standass.o standin.o standout.o stbacch.o stinch.o stopen.o \
|
||||
stoutch.o whole.o
|
||||
EFILES=calls.e chains.e div.e get.e getaddr.e globale.e hoist.e put.e \
|
||||
standback.e swap.e trace.e wrs.e
|
||||
EOFILES=calls.o chains.o div.o get.o getaddr.o globale.o hoist.o put.o \
|
||||
standback.o swap.o trace.o wrs.o
|
||||
LIBFILES=$(GFILES) $(PFILES) $(OPFILES) $(SPFILES) $(TFILES)
|
||||
LIBOFILES=$(GOFILES) $(POFILES) $(OPOFILES) $(SPOFILES) $(TOFILES)
|
||||
|
||||
all: liba68s$(w)$(p)
|
||||
|
||||
rundecs.h: check$(w)$(p) rundecs.p
|
||||
echo $(TNOS) 300 | $(TAILOR) rundecs.p $(TERRS) \
|
||||
>rundecs.h
|
||||
|
||||
rundecsg.h: check$(w)$(p) rundecs.p
|
||||
echo $(TNOS) 71 300 | $(TAILOR) rundecs.p $(TERRS) >rundecsg.h
|
||||
|
||||
run68g.o: rundecsg.h run68g.p
|
||||
(cat rundecsg.h; \
|
||||
cat run68g.p ) \
|
||||
>temp.p
|
||||
$(PC) $(PCFLAGS) -c.s temp.p
|
||||
sed -e '/^.define _m_a_i_n/d' -e '/^.extern _m_a_i_n/,$$d' -e '/^.globl _m_a_i_n/,$$d' temp.s > run68g.s
|
||||
$(PC) $(PCFLAGS) -c.o run68g.s
|
||||
rm temp.p run68g.s
|
||||
|
||||
.p.o:
|
||||
( echo $(TNOS) 300 | $(TAILOR) $*.p $(TERRS) ) \
|
||||
>temp.p
|
||||
$(PC) $(PCFLAGS) -c.s temp.p
|
||||
mv temp.s $*.s
|
||||
$(PC) $(PCFLAGS) -c.o $*.s
|
||||
rm temp.p $*.s
|
||||
|
||||
$(LIBOFILES): rundecs.h
|
||||
|
||||
.SUFFIXES: .e
|
||||
|
||||
e.h: check$(w)$(p)
|
||||
|
||||
.e.o:
|
||||
$(PC) $(EPCFLAGS) -c.s -DEM_WSIZE=$(w) -DEM_PSIZE=$(p) $*.e
|
||||
$(PC) $(EPCFLAGS) -c.o $*.s
|
||||
rm $*.s
|
||||
|
||||
$(EOFILES): e.h
|
||||
|
||||
maxr.o: maxr.c
|
||||
/lib/cpp <maxr.c >temp.c
|
||||
$(PC) $(PCFLAGS) -I$(EMROOT)/h -c.s -o maxr.s temp.c
|
||||
$(PC) $(PCFLAGS) -c.o maxr.s
|
||||
rm maxr.s
|
||||
|
||||
.c.o:
|
||||
$(PC) $(PCFLAGS) -I$(EMROOT)/h -c.s $*.c
|
||||
$(PC) $(PCFLAGS) -c.o $*.s
|
||||
rm $*.s
|
||||
|
||||
liba68s: liba68s$(w)$(p)
|
||||
|
||||
liba68s$(w)$(p): $(EOFILES) $(COFILES) $(LIBOFILES) $(SOFILES) run68g.o
|
||||
-rm liba68s$(w)$(p)
|
||||
$(ASAR) crv liba68s$(w)$(p) $(EOFILES) $(COFILES) $(LIBOFILES) $(SOFILES) run68g.o
|
||||
sh -c '$${RANLIB-:} liba68s$(w)$(p)'
|
||||
|
||||
check$(w)$(p):
|
||||
/bin/make clean
|
||||
echo >> check$(w)$(p)
|
||||
|
||||
checkseq:
|
||||
$(CHECKSEQ) rundecs.p $(LIBFILES)
|
||||
|
||||
pr:
|
||||
pr rundecs.p $(LIBFILES) $(FILES) $(EFILES) $(CFILES)
|
||||
|
||||
xref:
|
||||
(/bin/make pr; \
|
||||
echo 1000 | $(TAILOR) rundecs.p $(TERRS) | $(XREF) | pr -h rundecs.xref; \
|
||||
for II in $(LIBFILES); do echo 1000 | $(TAILOR) $$II $(TERRS); done \
|
||||
| $(XREF) | pr -h run68.xref \
|
||||
) | opr
|
||||
|
||||
clean:
|
||||
-rm liba68s$(w)$(p) check?? rundec*.h *.o
|
||||
|
15
lang/a68s/liba68s/aclose.c
Normal file
15
lang/a68s/liba68s/aclose.c
Normal file
|
@ -0,0 +1,15 @@
|
|||
#include <pc_file.h>
|
||||
|
||||
extern _cls(); /* pc runtime routine to close a file */
|
||||
|
||||
/* as the following routine is called from a pascal subroutine */
|
||||
/* and the pascal compiler has been fixed to alwayd supply static links */
|
||||
/* to non-global externals the parameter 'statlink' is a dummy to fill */
|
||||
/* the space occupied by the static link. The parameter is first instead */
|
||||
/* of last because of the C method of passing its parameters backwards */
|
||||
|
||||
ACLS(statlink,f) int *statlink; struct file *f; {
|
||||
|
||||
_cls(f);
|
||||
}
|
||||
|
46
lang/a68s/liba68s/aopen.c
Normal file
46
lang/a68s/liba68s/aopen.c
Normal file
|
@ -0,0 +1,46 @@
|
|||
#include <pc_file.h>
|
||||
#include <pc_err.h>
|
||||
|
||||
#define BUFFLENGTH 512 /* number of items in buffer */
|
||||
|
||||
extern struct file *_curfil; /* for error mesages from trap */
|
||||
extern _trp(); /* pc runtime trap routine */
|
||||
extern creat(); /* unix open for write */
|
||||
extern open(); /* unix open for read */
|
||||
|
||||
static int initfile (desc,f) int desc; struct file *f; {
|
||||
|
||||
_curfil=f;
|
||||
if ( (desc & WRBIT) == 0) {
|
||||
if ( (f->ufd = open(f->fname,0)) < 0 )
|
||||
_trp(ERESET);
|
||||
} else {
|
||||
if ( (f->ufd = creat(f->fname,0644)) < 0 )
|
||||
_trp(EREWR);
|
||||
}
|
||||
f->buflen = BUFFLENGTH;
|
||||
f->size = 1;
|
||||
f->ptr = f->bufadr;
|
||||
f->flags = desc;
|
||||
return(1);
|
||||
|
||||
}
|
||||
|
||||
/* as both the following routines are called from a pascal subroutine */
|
||||
/* and the pascal compiler has been fixed to alwayd supply static links */
|
||||
/* to non-global externals the parameter 'statlink' is a dummy to fill */
|
||||
/* the space occupied by the static link. The parameter is first instead */
|
||||
/* of last because of the C method of passing its parameters backwards */
|
||||
|
||||
AOPN(statlink,f) int *statlink; struct file *f; {
|
||||
|
||||
if ( initfile ((int)(MAGIC|TXTBIT),f) )
|
||||
f->count=0;
|
||||
}
|
||||
|
||||
ACRE(statlink,f) int *statlink; struct file *f; {
|
||||
|
||||
if ( initfile ((int)(WRBIT|EOFBIT|ELNBIT|MAGIC|TXTBIT),f) )
|
||||
f->count=f->buflen;
|
||||
}
|
||||
|
4
lang/a68s/liba68s/arctan.c
Normal file
4
lang/a68s/liba68s/arctan.c
Normal file
|
@ -0,0 +1,4 @@
|
|||
extern double _atn();
|
||||
double ARCTAN(statlink, x)
|
||||
int *statlink; double x;
|
||||
{return(_atn(x));}
|
89
lang/a68s/liba68s/associate.p
Normal file
89
lang/a68s/liba68s/associate.p
Normal file
|
@ -0,0 +1,89 @@
|
|||
70000 #include "rundecs.h"
|
||||
70010 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
70020 (**)
|
||||
70030 PROCEDURE GARBAGE (ANOBJECT: OBJECTP); EXTERN ;
|
||||
70040 PROCEDURE ERRORR(N :INTEGER); EXTERN ;
|
||||
70050 FUNCTION SAFEACCESS(LOCATION: OBJECTP): UNDRESSP; EXTERN;
|
||||
70060 PROCEDURE PCINCR (STRUCTPTR: UNDRESSP; TEMPLATE: DPOINT; INCREMENT: INTEGER); EXTERN ;
|
||||
70070 (**)
|
||||
70080 (**)
|
||||
70090 (*+01() (*$X6*) ()+01*)
|
||||
70100 FUNCTION PROC( PROCEDURE P (*-01() ( COV: OBJECTP ; EFET: FETROOMP ) ()-01*) ): ASPROC ; EXTERN ;
|
||||
70110 (*-01()
|
||||
70120 FUNCTION PROC1(
|
||||
70130 PROCEDURE P( COV: OBJECTP ; CHARS: GETBUFTYPE ; TERM: TERMSET ; I: INTEGER ; EFET: FETROOMP )
|
||||
70140 ): ASPROC ; EXTERN ;
|
||||
70150 FUNCTION PROC2( PROCEDURE P( COV, STRNG: OBJECTP ; LB, UB: INTEGER ; EFET: FETROOMP ) ): ASPROC ; EXTERN ;
|
||||
70160 FUNCTION PROC3( PROCEDURE P( COV: OBJECTP ; P, L, C: INTEGER ; EFET: FETROOMP ) ): ASPROC ; EXTERN ;
|
||||
70170 FUNCTION PROCH( PROCEDURE P( COV: OBJECTP ; L: LFNTYPE ) ): ASPROC ; EXTERN ;
|
||||
70180 ()-01*)
|
||||
70190 PROCEDURE ASSWRSTR(COV, PUTSTRING: OBJECTP; LB, UB: INTEGER; EFET: FETROOMP); EXTERN;
|
||||
70200 PROCEDURE ASSRDSTR(COV:OBJECTP; CHARS:GETBUFTYPE; TERM(*+01(),TERM1()+01*): TERMSET; I: INTEGER; EFET: FETROOMP);
|
||||
70210 EXTERN;
|
||||
70220 PROCEDURE ASSNEWLINE(COV: OBJECTP; EFET: FETROOMP); EXTERN;
|
||||
70230 PROCEDURE ASSNEWPAGE(COV: OBJECTP; EFET: FETROOMP); EXTERN;
|
||||
70240 PROCEDURE ASSRESET(COV: OBJECTP; EFET: FETROOMP); EXTERN;
|
||||
70250 PROCEDURE ASSSET(COV: OBJECTP; P, L, C: INTEGER; EFET: FETROOMP); EXTERN;
|
||||
70260 (**)
|
||||
70270 (**)
|
||||
70280 FUNCTION ASSOCIATE(RF,CHARFILE:OBJECTP): INTEGER;
|
||||
70290 VAR CB,OFF,CPS:INTEGER;
|
||||
70300 F,PCOV:OBJECTP;
|
||||
70310 BEGIN
|
||||
70320 F := INCPTR(SAFEACCESS(RF), -STRUCTCONST);
|
||||
70330 PCINCR(INCPTR(F, STRUCTCONST),FILEBLOCK,-INCRF);
|
||||
70340 ENEW(PCOV, COVERSIZE);
|
||||
70350 (*-02() PCOV^.FIRSTWORD := SORTSHIFT * ORD(COVER) + INCRF; ()-02*)
|
||||
70360 (*+02() PCOV^.PCOUNT:=1; PCOV^.SORT:=COVER; ()+02*)
|
||||
70370 F^.PCOVER:=PCOV;
|
||||
70380 WITH CHARFILE^ DO
|
||||
70390 WITH DESCVEC[0] DO
|
||||
70400 BEGIN CPS:=DI-LBADJ;
|
||||
70410 CB:=UI;
|
||||
70420 OFF:=DI;
|
||||
70430 IF LI<>1 THEN ERRORR(WRONGMULT);
|
||||
70440 END;
|
||||
70450 WITH PCOV^ DO
|
||||
70460 BEGIN COFCPOS:=1; LOFCPOS:=1; POFCPOS:=1;
|
||||
70470 CHARBOUND:=CB; LINEBOUND:=1; PAGEBOUND:=1;
|
||||
70480 STATUS:=[OPENED,CHARMOOD];
|
||||
70490 POSSIBLES:=[GETPOSS,PUTPOSS,RESETPOSS,SETPOSS,ASSPOSS];
|
||||
70500 DOPUTS := PROC(*-01()2()-01*)(ASSWRSTR);
|
||||
70510 DOGETS := PROC(*-01()1()-01*)(ASSRDSTR);
|
||||
70520 DONEWLINE := PROC(ASSNEWLINE);
|
||||
70530 DONEWPAGE := PROC(ASSNEWPAGE);
|
||||
70540 DORESET := PROC(ASSRESET);
|
||||
70550 DOSET := PROC(*-01()3()-01*)(ASSSET);
|
||||
70560 ASSOC := TRUE;
|
||||
70570 ASSREF:=CHARFILE;
|
||||
70580 CPOSELS:=CPS;
|
||||
70590 OFFSETDI:=OFF;
|
||||
70600 FPINC(CHARFILE^);
|
||||
70610 OSCOPE := CHARFILE^.OSCOPE;
|
||||
70620 END;
|
||||
70630 WITH F^ DO
|
||||
70640 BEGIN
|
||||
70650 IF RF^.OSCOPE<PCOV^.OSCOPE THEN ERRORR(RSCOPE);
|
||||
70660 LOGICALFILEMENDED:=UNDEFIN;
|
||||
70670 PHYSICALFILEMENDED:=UNDEFIN;
|
||||
70680 PAGEMENDED:=UNDEFIN;
|
||||
70690 LINEMENDED:=UNDEFIN;
|
||||
70700 TERM:=[];
|
||||
70710 (*+01() TERM1:=[] ; ()+01*)
|
||||
70720 END;
|
||||
70730 IF FPTST(RF^) THEN GARBAGE(RF);
|
||||
70740 ASSOCIATE := ORD(NOT(OPENED IN PCOV^.STATUS));
|
||||
70750 END; (*ASSOCIATE*)
|
||||
70760 (**)
|
||||
70770 (**)
|
||||
70780 (*+01() (*$X4*) ()+01*)
|
||||
70790 (**)
|
||||
70800 (**)
|
||||
70810 (*-02()
|
||||
70820 BEGIN (*OF A68*)
|
||||
70830 END; (*OF A68*)
|
||||
70840 ()-02*)
|
||||
70850 (*+01()
|
||||
70860 BEGIN (*OF MAIN PROGRAM*)
|
||||
70870 END (* OF EVERYTHING *).
|
||||
70880 ()+01*)
|
24
lang/a68s/liba68s/bytespack.p
Normal file
24
lang/a68s/liba68s/bytespack.p
Normal file
|
@ -0,0 +1,24 @@
|
|||
65000 #include "rundecs.h"
|
||||
65010 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
65020 (**)
|
||||
65030 (**)
|
||||
65040 PROCEDURE ERRORR(N :INTEGER); EXTERN ;
|
||||
65050 (**)
|
||||
65060 (**)
|
||||
65070 FUNCTION BYTESPACK(STRING :OBJECTP): A68INT;
|
||||
65080 (*BYTESPACK*)
|
||||
65090 VAR PTR: UNDRESSP;
|
||||
65100 BEGIN WITH STRING^ DO
|
||||
65110 IF STRLENGTH > CHARPERWORD THEN ERRORR(RBYTESPACK)
|
||||
65120 ELSE BEGIN
|
||||
65130 PTR := INCPTR(STRING, STRINGCONST);
|
||||
65140 BYTESPACK := PTR^.FIRSTINT;
|
||||
65150 END
|
||||
65160 END;
|
||||
65170 (**)
|
||||
65180 (**)
|
||||
65190 (*-02() BEGIN END ; ()-02*)
|
||||
65200 (*+01()
|
||||
65210 BEGIN (*OF MAIN PROGRAM*)
|
||||
65220 END (*OF EVERYTHING*).
|
||||
65230 ()+01*)
|
132
lang/a68s/liba68s/calls.e
Normal file
132
lang/a68s/liba68s/calls.e
Normal file
|
@ -0,0 +1,132 @@
|
|||
#include "e.h"
|
||||
|
||||
exa .1 ; global Pascal variables
|
||||
exp $PROC
|
||||
exp $PROC1
|
||||
exp $PROC2
|
||||
exp $PROC3
|
||||
exp $PROCH
|
||||
exp $CLPASC1
|
||||
exp $CLPASC2
|
||||
exp $CLPASC5
|
||||
exp $CLRDSTR
|
||||
exp $CL68
|
||||
exp $FUNC68
|
||||
exp $CALLPASC
|
||||
|
||||
pro $PROC,0
|
||||
LFL SZADDR+SZADDR ; load environment, static link for procedure
|
||||
LFL SZADDR ; load address of code
|
||||
ret SZPROC
|
||||
end 0
|
||||
|
||||
pro $PROC1,0
|
||||
LFL SZADDR+SZADDR
|
||||
LFL SZADDR
|
||||
ret SZPROC
|
||||
end 0
|
||||
|
||||
pro $PROC2,0
|
||||
LFL SZADDR+SZADDR
|
||||
LFL SZADDR
|
||||
ret SZPROC
|
||||
end 0
|
||||
|
||||
pro $PROC3,0
|
||||
LFL SZADDR+SZADDR
|
||||
LFL SZADDR
|
||||
ret SZPROC
|
||||
end 0
|
||||
|
||||
pro $PROCH,0
|
||||
LFL SZADDR+SZADDR
|
||||
LFL SZADDR
|
||||
ret SZPROC
|
||||
end 0
|
||||
|
||||
pro $CLPASC1,SZWORD
|
||||
loc PASCALSTAMP
|
||||
stl -SZWORD
|
||||
lal SZADDR ; load base address of params (source)
|
||||
loc SZADDR+SZPROC
|
||||
los SZWORD
|
||||
cai
|
||||
ret 0
|
||||
end SZWORD
|
||||
|
||||
pro $CLPASC2,SZWORD
|
||||
loc PASCALSTAMP
|
||||
stl -SZWORD ; set frame stamp as pascal
|
||||
lal SZADDR ; load base address of params (source)
|
||||
loc SZADDR+SZADDR+SZPROC
|
||||
los SZWORD
|
||||
cai ; call proc, params & static link set
|
||||
ret 0
|
||||
end SZWORD
|
||||
|
||||
#define P5PARAMSPACE SZADDR+SZADDR+SZWORD+SZWORD+SZADDR+SZPROC
|
||||
|
||||
pro $CLPASC5,SZWORD
|
||||
loc PASCALSTAMP
|
||||
stl -SZWORD ; set frame stamp as pascal
|
||||
lal SZADDR ; load base address of params (source)
|
||||
loc P5PARAMSPACE
|
||||
los SZWORD
|
||||
cai
|
||||
ret 0
|
||||
end SZWORD
|
||||
|
||||
#define PRDSTRSPACE SZADDR+SZADDR+16+SZADDR+SZADDR+SZPROC
|
||||
|
||||
pro $CLRDSTR,SZWORD
|
||||
loc PASCALSTAMP
|
||||
stl -SZWORD ; set frame stamp as pascal
|
||||
lal SZADDR ; load base address of params (source)
|
||||
loc PRDSTRSPACE
|
||||
los SZWORD
|
||||
cai
|
||||
ret 0
|
||||
end SZWORD
|
||||
|
||||
pro $CL68,SZWORD
|
||||
loc PASCALSTAMP
|
||||
stl -SZWORD
|
||||
LFL SZADDR ; OBJECTP parameter
|
||||
LLC 0 ; bitpattern
|
||||
loc 1 ; locrg
|
||||
LFL SZADDR+SZADDR+SZADDR ; procbl
|
||||
dup SZADDR
|
||||
LFL SZADDR+SZADDR ; env
|
||||
exg SZADDR
|
||||
loi SZADDR ; XBASE
|
||||
cai
|
||||
ret 0
|
||||
end SZWORD
|
||||
|
||||
pro $FUNC68,SZWORD
|
||||
loc PASCALSTAMP
|
||||
stl -SZWORD
|
||||
LFL SZADDR ; OBJECTP parameter
|
||||
LLC 0 ; bitpattern
|
||||
loc 1 ; locrg
|
||||
LFL SZADDR+SZADDR+SZADDR ; procbl
|
||||
dup SZADDR
|
||||
LFL SZADDR+SZADDR ; env
|
||||
exg SZADDR
|
||||
loi SZADDR ; XBASE
|
||||
cai
|
||||
ret SZWORD
|
||||
end SZWORD
|
||||
|
||||
|
||||
pro $CALLPASC,SZWORD ; +SZADDR+SZWORD
|
||||
loc PASCALSTAMP
|
||||
stl -SZWORD
|
||||
lal SZADDR+SZADDR+SZWORD+SZLONG ; address of first (A68) parameter
|
||||
loe .1+SZWORD+SZADDR ; PASCPARAMS
|
||||
los SZWORD
|
||||
lae .1+SZWORD+SZADDR+SZWORD ; address of PASCPROC
|
||||
loi SZPROC ; PASCPROC
|
||||
cai
|
||||
ret 0
|
||||
end SZWORD ; +SZADDR+SZWORD
|
100
lang/a68s/liba68s/catpl.p
Normal file
100
lang/a68s/liba68s/catpl.p
Normal file
|
@ -0,0 +1,100 @@
|
|||
60000 #include "rundecs.h"
|
||||
60010 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
60020 (**)
|
||||
60030 (**)
|
||||
60040 PROCEDURE GARBAGE (ANOBJECT: OBJECTP); EXTERN ;
|
||||
60050 FUNCTION CRSTRING(LENGTH: OFFSETRANGE): OBJECTP; EXTERN;
|
||||
60060 FUNCTION SAFEACCESS (LOCATION: OBJECTP) : UNDRESSP; EXTERN;
|
||||
60070 (**)
|
||||
60080 (**)
|
||||
60090 FUNCTION CATCC(LCH, RCH: CHAR): OBJECTP;
|
||||
60100 (*PCAT*)
|
||||
60110 VAR POINT :OBJECTP;
|
||||
60120 BEGIN
|
||||
60130 POINT := CRSTRING(2);
|
||||
60140 WITH POINT^ DO
|
||||
60150 BEGIN CHARVEC[1] := LCH; CHARVEC[2] := RCH END;
|
||||
60160 CATCC := POINT;
|
||||
60170 END;
|
||||
60180 (**)
|
||||
60190 (**)
|
||||
60200 FUNCTION CATSS(LEFT, RIGHT: OBJECTP): OBJECTP;
|
||||
60210 (*PCAT-1*)
|
||||
60220 VAR POINT: OBJECTP;
|
||||
60230 I, D: INTEGER; C: CHAR;
|
||||
60240 BEGIN
|
||||
60250 WITH LEFT^ DO
|
||||
60260 BEGIN D := STRLENGTH;
|
||||
60270 IF
|
||||
60280 ( PCOUNT = 0 )
|
||||
60290 AND
|
||||
60300 ( STRLENGTH+RIGHT^.STRLENGTH <= (STRLENGTH + CHARPERWORD - 1) DIV CHARPERWORD * CHARPERWORD ) THEN
|
||||
60310 BEGIN POINT := LEFT; I := D+RIGHT^.STRLENGTH; POINT^.STRLENGTH := I END
|
||||
60320 ELSE
|
||||
60330 BEGIN POINT := CRSTRING(STRLENGTH+RIGHT^.STRLENGTH);
|
||||
60340 FOR I := 1 TO STRLENGTH DO
|
||||
60350 BEGIN C := CHARVEC[I]; POINT^.CHARVEC[I] := C END;
|
||||
60360 IF FPTST(LEFT^) THEN GARBAGE(LEFT)
|
||||
60370 END
|
||||
60380 END;
|
||||
60390 WITH RIGHT^ DO
|
||||
60400 FOR I := 1 TO RIGHT^.STRLENGTH DO
|
||||
60410 BEGIN C := CHARVEC[I]; POINT^.CHARVEC[I+D] := C END;
|
||||
60420 IF FPTST(RIGHT^) THEN GARBAGE(RIGHT);
|
||||
60430 CATSS := POINT;
|
||||
60440 END;
|
||||
60450 (**)
|
||||
60460 (**)
|
||||
60470 FUNCTION PLABSS(LEFT, RIGHT: OBJECTP): OBJECTP;
|
||||
60480 (*PPLUSABCH, PPLUSABCH-1*)
|
||||
60490 VAR TEMP: OBJECTP;
|
||||
60500 PILPTR: UNDRESSP;
|
||||
60510 BEGIN
|
||||
60520 WITH LEFT^ DO
|
||||
60530 IF SORT = REFN THEN
|
||||
60540 BEGIN
|
||||
60550 WITH PVALUE^ DO FDEC; (*SO THAT CATSS CAN POSSIBLY RE-USE IT*)
|
||||
60560 PVALUE := CATSS(PVALUE, RIGHT);
|
||||
60570 WITH PVALUE^ DO FINC
|
||||
60580 END
|
||||
60590 ELSE
|
||||
60600 BEGIN
|
||||
60610 PILPTR := SAFEACCESS(LEFT);
|
||||
60620 TEMP := PILPTR^.FIRSTPTR;
|
||||
60630 WITH TEMP^ DO FDEC; (*SO THAT CATSS CAN POSSIBLY RE-USE IT*)
|
||||
60640 PILPTR^.FIRSTPTR := CATSS(TEMP, RIGHT);
|
||||
60650 WITH PILPTR^.FIRSTPTR^ DO FINC
|
||||
60660 END;
|
||||
60670 PLABSS := LEFT;
|
||||
60680 END;
|
||||
60690 (**)
|
||||
60700 (**)
|
||||
60710 FUNCTION PLTOSS(LEFT, RIGHT: OBJECTP): OBJECTP;
|
||||
60720 (*PPLUSTOCS, PPLUSTOCS-1*)
|
||||
60730 VAR TEMP: OBJECTP;
|
||||
60740 PILPTR: UNDRESSP;
|
||||
60750 BEGIN
|
||||
60760 WITH RIGHT^ DO
|
||||
60770 IF SORT = REFN THEN
|
||||
60780 BEGIN
|
||||
60790 WITH PVALUE^ DO FDEC;
|
||||
60800 PVALUE := CATSS(LEFT, PVALUE);
|
||||
60810 WITH PVALUE^ DO FINC
|
||||
60820 END
|
||||
60830 ELSE
|
||||
60840 BEGIN
|
||||
60850 PILPTR := SAFEACCESS(RIGHT);
|
||||
60860 TEMP := PILPTR^.FIRSTPTR;
|
||||
60870 WITH TEMP^ DO FDEC;
|
||||
60880 PILPTR^.FIRSTPTR := CATSS(LEFT, TEMP);
|
||||
60890 WITH PILPTR^.FIRSTPTR^ DO FINC
|
||||
60900 END;
|
||||
60910 PLTOSS := RIGHT;
|
||||
60920 END;
|
||||
60930 (**)
|
||||
60940 (**)
|
||||
60950 (*-02() BEGIN END ; ()-02*)
|
||||
60960 (*+01()
|
||||
60970 BEGIN (*OF MAIN PROGRAM*)
|
||||
60980 END (*OF EVERYTHING*).
|
||||
60990 ()+01*)
|
42
lang/a68s/liba68s/cfstr.p
Normal file
42
lang/a68s/liba68s/cfstr.p
Normal file
|
@ -0,0 +1,42 @@
|
|||
61000 #include "rundecs.h"
|
||||
61010 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
61020 (**)
|
||||
61030 (**)
|
||||
61040 PROCEDURE GARBAGE (ANOBJECT: OBJECTP); EXTERN ;
|
||||
61050 (**)
|
||||
61060 (**)
|
||||
61070 FUNCTION CFSTR(LEFT, RIGHT: OBJECTP; JOB :INTEGER): INTEGER;
|
||||
61080 (*PLTCS-1, PLECS-1, PEQCS-1, PNECS-1, PGECS-1, PGTCS-1*)
|
||||
61090 LABEL 9;
|
||||
61100 VAR MINPTR, LSTRLENGTH, RSTRLENGTH: INTEGER;
|
||||
61110 LPTR, RPTR: UNDRESSP;
|
||||
61120 BEGIN
|
||||
61130 LSTRLENGTH := LEFT^.STRLENGTH; RSTRLENGTH := RIGHT^.STRLENGTH;
|
||||
61140 IF LSTRLENGTH < RSTRLENGTH THEN
|
||||
61150 MINPTR := (LSTRLENGTH+CHARPERWORD-1) DIV CHARPERWORD * SZWORD
|
||||
61160 ELSE
|
||||
61170 MINPTR := (RSTRLENGTH+CHARPERWORD-1) DIV CHARPERWORD * SZWORD;
|
||||
61180 LPTR := INCPTR(LEFT, STRINGCONST); RPTR := INCPTR(RIGHT, STRINGCONST);
|
||||
61190 WHILE ORD(LPTR)<ORD(LEFT)+STRINGCONST+MINPTR DO
|
||||
61200 BEGIN
|
||||
61210 IF LPTR^.FIRSTWORD<>RPTR^.FIRSTWORD THEN
|
||||
61220 BEGIN LSTRLENGTH := LPTR^.FIRSTWORD; RSTRLENGTH := RPTR^.FIRSTWORD; GOTO 9 END;
|
||||
61230 LPTR := INCPTR(LPTR, SZWORD); RPTR := INCPTR(RPTR, SZWORD);
|
||||
61240 END;
|
||||
61250 9: CASE JOB OF
|
||||
61260 0: CFSTR := -ORD(LSTRLENGTH<RSTRLENGTH);
|
||||
61270 1: CFSTR := -ORD(LSTRLENGTH<=RSTRLENGTH);
|
||||
61280 2: CFSTR := -ORD(LSTRLENGTH=RSTRLENGTH);
|
||||
61290 3: CFSTR := -ORD(LSTRLENGTH<>RSTRLENGTH);
|
||||
61300 4: CFSTR := -ORD(LSTRLENGTH>=RSTRLENGTH);
|
||||
61310 5: CFSTR := -ORD(LSTRLENGTH>RSTRLENGTH);
|
||||
61320 END;
|
||||
61330 IF FPTST(LEFT^) THEN GARBAGE(LEFT); IF FPTST(RIGHT^) THEN GARBAGE(RIGHT)
|
||||
61340 END;
|
||||
61350 (**)
|
||||
61360 (**)
|
||||
61370 (*-02() BEGIN END ; ()-02*)
|
||||
61380 (*+01()
|
||||
61390 BEGIN (*OF MAIN PROGRAM*)
|
||||
61400 END (*OF EVERYTHING*).
|
||||
61410 ()+01*)
|
198
lang/a68s/liba68s/chains.e
Normal file
198
lang/a68s/liba68s/chains.e
Normal file
|
@ -0,0 +1,198 @@
|
|||
#include "e.h"
|
||||
exp $GETLINEN
|
||||
exp $ME
|
||||
exp $STATIC
|
||||
exp $DYNAMIC
|
||||
exp $ARGBASE
|
||||
exp $SETMYSTA
|
||||
exp $SETNSTAT
|
||||
exp $ISA68
|
||||
exp $ISPUT
|
||||
exp $ISGET
|
||||
exp $GETCALLE
|
||||
|
||||
; function getlineno :integer;
|
||||
pro $GETLINEN,0 ; return line no from hol0
|
||||
loe 0
|
||||
ret SZWORD
|
||||
end
|
||||
|
||||
pro $ME,0
|
||||
lor 0 ; lb -> stack
|
||||
dch ; caller's lb -> stack
|
||||
ret SZADDR ; clb -> function result area
|
||||
end 0
|
||||
|
||||
pro $STATIC,0
|
||||
LFL SZADDR ; param (lb of caller) (after static link)
|
||||
lpb ; ab of param
|
||||
loi SZADDR ; static link of param
|
||||
ret SZADDR
|
||||
end 0
|
||||
|
||||
pro $DYNAMIC,0
|
||||
LFL SZADDR ; param (lb of caller) (after static link)
|
||||
dch ; follow dynamic chain, using lb of caller
|
||||
ret SZADDR
|
||||
end 0
|
||||
|
||||
pro $ARGBASE,0
|
||||
LFL SZADDR ; param (somebody's lb)
|
||||
lpb ; convert to somebody's ab
|
||||
ret SZADDR
|
||||
end 0
|
||||
|
||||
pro $SETMYSTA,0
|
||||
LFL SZADDR ; place param on stack
|
||||
lor 0 ; lb -> stack , for dch
|
||||
dch ; caller's lb -> stack
|
||||
lpb ; caller's ab
|
||||
sti SZADDR ; store param in caller's static link
|
||||
ret 0
|
||||
end 0
|
||||
|
||||
#ifndef VAX4
|
||||
pro $SETNSTAT,0 ; called from RNSTART of insert n extra levels in
|
||||
; the static chain of A68 (i.e. RNSTART's caller);
|
||||
; there is guaranteed to be enough vacant space at
|
||||
; the top of the IB of A68
|
||||
lor 0 ; my LB
|
||||
dch ; RNSTART LB
|
||||
adp SZADDR ; fictitious LB
|
||||
; BUT THIS MAY NOT BE LEGAL EM. REVIEW WHEN
|
||||
; RNSTART IS REWRITTEN.
|
||||
dup SZADDR
|
||||
lxa 2 ; A68 AB
|
||||
loi SZADDR ; A68 static
|
||||
exg SZADDR
|
||||
lpb ; fictitious AB
|
||||
sti SZADDR ; (fictitious AB) := A68 static
|
||||
dup SZADDR
|
||||
lxa 2 ; A68 AB
|
||||
sti SZADDR ; (A68 AB) := fictitious LB
|
||||
2
|
||||
lol SZADDR ; n
|
||||
loc 1
|
||||
sbi SZWORD
|
||||
dup SZWORD
|
||||
stl SZADDR ; n := n-1
|
||||
zeq *3
|
||||
dup SZADDR
|
||||
lpb ; fictitious AB
|
||||
dup SZADDR
|
||||
loi SZADDR
|
||||
exg SZADDR
|
||||
SFF SZADDR ; (fictitious AB + 1) := (fictitious AB)
|
||||
adp SZADDR ; new fictitious LB
|
||||
dup SZADDR
|
||||
dup SZADDR
|
||||
lpb ; new fictitious AB
|
||||
SFF -SZADDR ; (new fictitious AB -l = old fictitious AB) :=
|
||||
; new fictitious LB
|
||||
bra *2 ; with the new fictitious LB on the stack
|
||||
3
|
||||
ret 0
|
||||
end 0
|
||||
#else
|
||||
pro $SETNSTAT,SZWORD ; called from RNSTART of insert n extra levels in
|
||||
; the static chain of A68 (i.e. RNSTART's caller);
|
||||
; this version does not assume that the space between
|
||||
; LB and AB is a constant. It calls itself recursively
|
||||
; to create n activation records, whose static chains
|
||||
; are linked as required. The last activation then
|
||||
; copies the return status block of RNSTART over itself,
|
||||
; so exiting from RNSTART but leaving the extra chains
|
||||
; still within the stack.
|
||||
lor 0 ; SLB
|
||||
dch ; RLB
|
||||
dup SZADDR ; RLB | RLB
|
||||
dch ; RLB | ALB
|
||||
lpb ; RLB | AAB
|
||||
dup SZADDR ; RLB | AAB | AAB
|
||||
loi SZADDR ; RLB | AAB | (AAB)
|
||||
lor 0 ; RLB | AAB | (AAB) | SLB
|
||||
dch ; RLB | AAB | (AAB) | RLB
|
||||
lpb ; RLB | AAB | (AAB) | RAB
|
||||
sti SZADDR ; RLB | AAB (RAB) := (AAB)
|
||||
sti SZADDR ; (AAB) := RLB
|
||||
; now my caller (RNSTART the first time) has been linked
|
||||
; into the static chain of HIS caller.
|
||||
lol SZADDR ; n
|
||||
loc 1
|
||||
sbi SZWORD ; n-1
|
||||
dup SZWORD
|
||||
zeq *4
|
||||
lxl 1
|
||||
cal $SETNSTAT
|
||||
asp SZWORD+SZADDR ; but it should never return here
|
||||
nop
|
||||
4 ; now we must move the return status block of RNSTART
|
||||
; on top of our own. We are still statically within RNSTART
|
||||
LFL 0 ; RLB
|
||||
dup SZADDR ; RLB | RLB
|
||||
lpb ; RLB | RAB
|
||||
exg SZADDR ; RAB | RLB
|
||||
sbs SZWORD ; Amount to be moved
|
||||
dup SZWORD ; A | A
|
||||
stl -SZWORD ; A
|
||||
lor 0 ; A | SLB
|
||||
dup SZADDR ; A | SLB | SLB
|
||||
lpb ; A | SLB | SAB
|
||||
exg SZADDR ; A | SAB | SLB
|
||||
sbs SZWORD ; A | SA (the size of our own return status block)
|
||||
exg SZWORD ; SA | A
|
||||
sbi SZWORD ; SA-A
|
||||
lor 0 ; SLB
|
||||
ads SZWORD ; new SLB to be
|
||||
str 1 ; set SP there
|
||||
lor 1 ; TO (=SP the destination of the move)
|
||||
dup SZADDR ; TO | TO
|
||||
LFL 0 ; TO | TO | RLB (the source of the move)
|
||||
exg SZADDR ; TO | RLB | TO
|
||||
lol -SZWORD ; TO | RLB | TO | A
|
||||
bls SZWORD ; TO
|
||||
str 0 ; set SLB to the moved copy of RNSTART's block
|
||||
ret 0 ; return to RNSTART's caller, resetting his registers
|
||||
end SZWORD ; one local to store A
|
||||
#endif
|
||||
|
||||
pro $GETCALLE,0 ; returns LB of nearest A68 frame on stack, A68 caller
|
||||
LFL SZADDR ; param (lb of callee, routine) (after static link)
|
||||
1
|
||||
dch ; follow dynamic chain
|
||||
dup SZADDR ; duplicate either to return or follow next time
|
||||
lof -SZWORD ; lb - SZWORD is addres of frame stamp
|
||||
loc A68STAMP
|
||||
bne *1 ; do again if not A68 frame
|
||||
ret SZADDR ; return lb of frame
|
||||
end 0
|
||||
|
||||
pro $ISA68,0
|
||||
LFL SZADDR ; get param, lb of frame to test
|
||||
adp -SZWORD
|
||||
loi SZWORD ; load frame stamp
|
||||
loc A68STAMP
|
||||
cmi SZWORD ; compare it with 'a68stamp'
|
||||
teq ; is it the same
|
||||
ret SZWORD ; return answer, true=1 false=0
|
||||
end 0
|
||||
|
||||
pro $ISPUT,0
|
||||
LFL SZADDR ; get param, lb of frame to test
|
||||
adp -SZWORD
|
||||
loi SZWORD ; load frame stamp
|
||||
loc PUTSTAMP
|
||||
cmi SZWORD ; compare it with 'putstamp'
|
||||
teq
|
||||
ret SZWORD ; return answer, true=1 false=0
|
||||
end 0
|
||||
|
||||
pro $ISGET,0
|
||||
LFL SZADDR ; get param, lb of frame to test
|
||||
adp -SZWORD
|
||||
loi SZWORD ; load frame stamp
|
||||
loc GETSTAMP
|
||||
cmi SZWORD ; compare it with 'getstamp'
|
||||
teq
|
||||
ret SZWORD ; return answer, true=1 false=0
|
||||
end 0
|
36
lang/a68s/liba68s/cleanup.c
Normal file
36
lang/a68s/liba68s/cleanup.c
Normal file
|
@ -0,0 +1,36 @@
|
|||
/* $Header$ */
|
||||
/*
|
||||
* (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands.
|
||||
*
|
||||
* This product is part of the Amsterdam Compiler Kit.
|
||||
*
|
||||
* Permission to use, sell, duplicate or disclose this software must be
|
||||
* obtained in writing. Requests for such permissions may be sent to
|
||||
*
|
||||
* Dr. Andrew S. Tanenbaum
|
||||
* Wiskundig Seminarium
|
||||
* Vrije Universiteit
|
||||
* Postbox 7161
|
||||
* 1007 MC Amsterdam
|
||||
* The Netherlands
|
||||
*
|
||||
*/
|
||||
|
||||
/* Author: J.W. Stevenson */
|
||||
/* extracted from hlt.c by C.H. Lindsey */
|
||||
|
||||
#include <pc_file.h>
|
||||
|
||||
extern char *_hbase;
|
||||
extern int *_extfl;
|
||||
extern _cls();
|
||||
extern exit();
|
||||
|
||||
_cleanup() {
|
||||
int i;
|
||||
|
||||
for (i = 1; i <= _extfl[0]; i++)
|
||||
if (_extfl[i] != -1)
|
||||
_cls(EXTFL(i));
|
||||
return;
|
||||
}
|
52
lang/a68s/liba68s/collp.p
Normal file
52
lang/a68s/liba68s/collp.p
Normal file
|
@ -0,0 +1,52 @@
|
|||
20000 #include "rundecs.h"
|
||||
20010 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
20020 (**)
|
||||
20030 (**)
|
||||
20040 PROCEDURE PCINCR (STRUCTPTR: UNDRESSP; TEMPLATE: DPOINT; INCREMENT: INTEGER); EXTERN ;
|
||||
20050 PROCEDURE GARBAGE(ANOBJECT:OBJECTP); EXTERN;
|
||||
20060 (**)
|
||||
20070 (**)
|
||||
20080 FUNCTION COLLTP(TEMP:NAKEGER; UNIT: OBJECTP; TEMPLATE: DPOINT; OFFSET: OFFSETRANGE): ASNAKED;
|
||||
20090 (*PCOLLTOTAL+3*)
|
||||
20100 VAR OBJECT, STRUCTPTR: OBJECTP;
|
||||
20110 COUNT: INTEGER;
|
||||
20120 BEGIN WITH TEMP DO WITH NAK DO
|
||||
20130 BEGIN
|
||||
20140 OBJECT := INCPTR(POINTER, OFFSET);
|
||||
20150 STRUCTPTR := UNIT;
|
||||
20160 IF ORD(TEMPLATE)<=MAXSIZE THEN (*NOT STRUCT*)
|
||||
20170 MOVELEFT(STRUCTPTR, OBJECT, ORD(TEMPLATE))
|
||||
20180 ELSE (*STRUCT*)
|
||||
20190 BEGIN
|
||||
20200 PCINCR(INCPTR(STRUCTPTR, STRUCTCONST), TEMPLATE, +INCRF);
|
||||
20210 MOVELEFT(INCPTR(STRUCTPTR, STRUCTCONST), OBJECT, TEMPLATE^[0]);
|
||||
20220 IF FPTST(STRUCTPTR^) THEN GARBAGE(STRUCTPTR);
|
||||
20230 END;
|
||||
20240 COLLTP := ASNAK;
|
||||
20250 END
|
||||
20260 END;
|
||||
20270 (**)
|
||||
20280 (**)
|
||||
20290 FUNCTION COLLNP(TEMP: NAKEGER; NAKUNIT: NAKEGER; TEMPLATE: DPOINT; OFFSET: OFFSETRANGE): ASNAKED;
|
||||
20300 (*PCOLLNAKED+3*)
|
||||
20310 VAR OBJECT: UNDRESSP;
|
||||
20320 COUNT: INTEGER;
|
||||
20330 BEGIN WITH TEMP DO WITH NAK DO
|
||||
20340 BEGIN
|
||||
20350 OBJECT := INCPTR(POINTER, OFFSET);
|
||||
20360 WITH NAKUNIT.NAK DO
|
||||
20370 BEGIN
|
||||
20380 PCINCR(POINTER, TEMPLATE, +INCRF);
|
||||
20390 MOVELEFT(POINTER, OBJECT, TEMPLATE^[0]);
|
||||
20400 IF FPTST(STOWEDVAL^) THEN GARBAGE(STOWEDVAL);
|
||||
20410 END;
|
||||
20420 COLLNP := ASNAK;
|
||||
20430 END
|
||||
20440 END;
|
||||
20450 (**)
|
||||
20460 (**)
|
||||
20470 (*-02() BEGIN END ; ()-02*)
|
||||
20480 (*+01()
|
||||
20490 BEGIN (*OF MAIN PROGRAM*)
|
||||
20500 END (*OF EVERYTHING*).
|
||||
20510 ()+01*)
|
57
lang/a68s/liba68s/colltm.p
Normal file
57
lang/a68s/liba68s/colltm.p
Normal file
|
@ -0,0 +1,57 @@
|
|||
20600 #include "rundecs.h"
|
||||
20610 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
20620 (**)
|
||||
20630 (**)
|
||||
20640 PROCEDURE ERRORR(N :INTEGER); EXTERN;
|
||||
20650 PROCEDURE GARBAGE(ANOBJECT:OBJECTP); EXTERN;
|
||||
20660 FUNCTION NEXTEL(I: INTEGER; VAR PDESC1: PDESC): BOOLEAN; EXTERN;
|
||||
20670 PROCEDURE PCINCRSLICE(MULT: OBJECTP; VAR APDESC: PDESC; INCREMENT: INTEGER); EXTERN;
|
||||
20680 PROCEDURE PCINCRMULT(ELSPTR: OBJECTP; INCREMENT: INTEGER); EXTERN;
|
||||
20690 PROCEDURE FORMPDESC(OLDESC: OBJECTP; VAR PDESC1: PDESC); EXTERN;
|
||||
20700 (**)
|
||||
20710 (**)
|
||||
20720 FUNCTION COLLTM(TEMP: NAKEGER; SOURCEMULT: OBJECTP; OFFSET: OFFSETRANGE): ASNAKED;
|
||||
20730 (*PCOLLTOTAL+4*)
|
||||
20740 VAR DESTMULT: OBJECTP;
|
||||
20750 SOURCELS: OBJECTP;
|
||||
20760 PDESC1: PDESC;
|
||||
20770 COUNT: INTEGER;
|
||||
20780 BEGIN
|
||||
20790 WITH TEMP DO WITH NAK DO
|
||||
20800 BEGIN
|
||||
20810 DESTMULT := STOWEDVAL;
|
||||
20820 WITH SOURCEMULT^ DO
|
||||
20830 FOR COUNT := 0 TO ROWS DO WITH DESCVEC[COUNT] DO
|
||||
20840 IF (LI<>DESTMULT^.DESCVEC[COUNT].LI)
|
||||
20850 OR (UI<>DESTMULT^.DESCVEC[COUNT].UI) THEN
|
||||
20860 ERRORR(RMULASS);
|
||||
20870 SOURCELS := SOURCEMULT^.PVALUE;
|
||||
20880 COUNT := OFFSET;
|
||||
20890 IF SOURCEMULT^.BPTR<>NIL THEN (*A SLICE*)
|
||||
20900 BEGIN
|
||||
20910 FORMPDESC(SOURCEMULT, PDESC1);
|
||||
20920 PCINCRSLICE(SOURCEMULT, PDESC1, +INCRF);
|
||||
20930 WITH POINTER^ DO
|
||||
20940 WHILE NEXTEL(0, PDESC1) DO WITH PDESC1 DO WITH PDESCVEC[0] DO
|
||||
20950 BEGIN
|
||||
20960 MOVELEFT(INCPTR(SOURCELS, PP), INCPTR(POINTER, COUNT), PSIZE);
|
||||
20970 COUNT := COUNT+PSIZE;
|
||||
20980 END;
|
||||
20990 END
|
||||
21000 ELSE (*NOT A SLICE*)
|
||||
21010 BEGIN
|
||||
21020 PCINCRMULT(SOURCELS, +INCRF);
|
||||
21030 MOVELEFT(INCPTR(SOURCELS, ELSCONST), INCPTR(POINTER, COUNT), SOURCELS^.D0);
|
||||
21040 END;
|
||||
21050 POINTER := INCPTR(POINTER, COUNT-OFFSET);
|
||||
21060 COLLTM := ASNAK;
|
||||
21070 END;
|
||||
21080 IF FPTST(SOURCEMULT^) THEN GARBAGE(SOURCEMULT)
|
||||
21090 END;
|
||||
21100 (**)
|
||||
21110 (**)
|
||||
21120 (*-02() BEGIN END ; ()-02*)
|
||||
21130 (*+01()
|
||||
21140 BEGIN (*OF MAIN PROGRAM*)
|
||||
21150 END (*OF EVERYTHING*).
|
||||
21160 ()+01*)
|
50
lang/a68s/liba68s/collts.p
Normal file
50
lang/a68s/liba68s/collts.p
Normal file
|
@ -0,0 +1,50 @@
|
|||
21800 #include "rundecs.h"
|
||||
21810 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
21820 (**)
|
||||
21830 (**)
|
||||
21840 (*-01() (*-05()
|
||||
21850 FUNCTION COLLTS(TEMP: NAKEGER; UNIT: A68INT; OFFSET: OFFSETRANGE): ASNAKED;
|
||||
21860 (*PCOLLTOTAL - USUALLY CODED INLINE*)
|
||||
21870 VAR OBJECT: UNDRESSP;
|
||||
21880 BEGIN WITH TEMP DO WITH NAK DO
|
||||
21890 BEGIN
|
||||
21900 OBJECT := INCPTR(POINTER, OFFSET);
|
||||
21910 OBJECT^.FIRSTINT := UNIT;
|
||||
21920 COLLTS := ASNAK;
|
||||
21930 END
|
||||
21940 END;
|
||||
21950 (**)
|
||||
21960 (**)
|
||||
21970 FUNCTION COLLTS2(TEMP: NAKEGER; UNIT: A68LONG; OFFSET: OFFSETRANGE): ASNAKED;
|
||||
21980 (*PCOLLTOTAL+1 - USUALLY CODED INLINE*)
|
||||
21990 VAR OBJECT: UNDRESSP;
|
||||
22000 BEGIN WITH TEMP DO WITH NAK DO
|
||||
22010 BEGIN
|
||||
22020 OBJECT := INCPTR(POINTER, OFFSET);
|
||||
22030 OBJECT^.FIRSTLONG := UNIT;
|
||||
22040 COLLTS2 := ASNAK;
|
||||
22050 END
|
||||
22060 END;
|
||||
22070 (**)
|
||||
22080 (**)
|
||||
22090 FUNCTION COLLTPT(TEMP: NAKEGER; UNIT: OBJECTP; OFFSET: OFFSETRANGE): ASNAKED;
|
||||
22100 (*PCOLLTOTAL+2 - USUALLY CODED INLINE*)
|
||||
22110 VAR OBJECT: UNDRESSP ;
|
||||
22120 BEGIN WITH TEMP DO WITH NAK DO
|
||||
22130 BEGIN
|
||||
22140 OBJECT := INCPTR(POINTER, OFFSET);
|
||||
22150 WITH OBJECT^ DO
|
||||
22160 BEGIN FIRSTPTR := UNIT; WITH FIRSTPTR^ DO FINC END;
|
||||
22170 COLLTPT := ASNAK;
|
||||
22180 END
|
||||
22190 END;
|
||||
22200 (**)
|
||||
22210 (**)
|
||||
22220 ()-05*) ()-01*)
|
||||
22230 (**)
|
||||
22240 (**)
|
||||
22250 (*-02() BEGIN END ; ()-02*)
|
||||
22260 (*+01()
|
||||
22270 BEGIN (*OF MAIN PROGRAM*)
|
||||
22280 END (*OF EVERYTHING*).
|
||||
22290 ()+01*)
|
294
lang/a68s/liba68s/complex.p
Normal file
294
lang/a68s/liba68s/complex.p
Normal file
|
@ -0,0 +1,294 @@
|
|||
22300 #include "rundecs.h"
|
||||
22310 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
22320 (**)
|
||||
22330 PROCEDURE ERRORR(N: INTEGER);EXTERN;
|
||||
22340 PROCEDURE GARBAGE(ANOBJECT: OBJECTP);EXTERN;
|
||||
22350 FUNCTION SAFEACCESS(LOCATION: OBJECTP): UNDRESSP; EXTERN;
|
||||
22360 (**)
|
||||
22370 (**)
|
||||
22380 FUNCTION CRCOMPLEX(REPART,IMAGPART: REAL): OBJECTP;
|
||||
22390 VAR NEWCOMPLEX: OBJECTP;
|
||||
22400 BEGIN
|
||||
22410 ENEW(NEWCOMPLEX, STRUCTCONST+2*SZREAL);
|
||||
22420 WITH NEWCOMPLEX^ DO
|
||||
22430 BEGIN
|
||||
22440 (*-02() FIRSTWORD := SORTSHIFT * ORD(STRUCT); ()-02*)
|
||||
22450 (*+02() PCOUNT:=0; SORT:=STRUCT; ()+02*)
|
||||
22460 LENGTH := STRUCTCONST+2*SZREAL;
|
||||
22470 DBLOCK := COMPLEX;
|
||||
22480 RE := REPART;
|
||||
22490 IM := IMAGPART
|
||||
22500 END;
|
||||
22510 CRCOMPLEX := NEWCOMPLEX
|
||||
22520 END;
|
||||
22530 (**)
|
||||
22540 (**)
|
||||
22550 FUNCTION WIDREAL(REA: REAL): OBJECTP;
|
||||
22560 (*PWIDEN+2*)
|
||||
22570 BEGIN
|
||||
22580 WIDREAL := CRCOMPLEX(REA,0.0)
|
||||
22590 END;
|
||||
22600 (**)
|
||||
22610 (**)
|
||||
22620 FUNCTION CPLUS(LEFT,RIGHT: OBJECTP): OBJECTP;
|
||||
22630 VAR NEWOBJ: OBJECTP;
|
||||
22640 BEGIN
|
||||
22650 IF FPTST(LEFT^) THEN NEWOBJ := LEFT
|
||||
22660 ELSE IF FPTST(RIGHT^) THEN NEWOBJ := RIGHT
|
||||
22670 ELSE NEWOBJ := CRCOMPLEX(0.0,0.0);
|
||||
22680 WITH NEWOBJ^ DO
|
||||
22690 BEGIN
|
||||
22700 RE := LEFT^.RE+RIGHT^.RE;
|
||||
22710 IM := LEFT^.IM+RIGHT^.IM
|
||||
22720 END;
|
||||
22730 IF (FPTST(LEFT^)) AND (FPTST(RIGHT^)) THEN GARBAGE(RIGHT);
|
||||
22740 CPLUS := NEWOBJ
|
||||
22750 END;
|
||||
22760 (**)
|
||||
22770 (**)
|
||||
22780 FUNCTION CMINUS(LEFT,RIGHT: OBJECTP): OBJECTP;
|
||||
22790 VAR NEWOBJ: OBJECTP;
|
||||
22800 BEGIN
|
||||
22810 IF FPTST(LEFT^) THEN NEWOBJ := LEFT
|
||||
22820 ELSE IF FPTST(RIGHT^) THEN NEWOBJ := RIGHT
|
||||
22830 ELSE NEWOBJ := CRCOMPLEX(0.0,0.0);
|
||||
22840 WITH NEWOBJ^ DO
|
||||
22850 BEGIN
|
||||
22860 RE := LEFT^.RE-RIGHT^.RE;
|
||||
22870 IM := LEFT^.IM-RIGHT^.IM
|
||||
22880 END;
|
||||
22890 IF (FPTST(LEFT^)) AND (FPTST(RIGHT^)) THEN GARBAGE(RIGHT);
|
||||
22900 CMINUS := NEWOBJ
|
||||
22910 END;
|
||||
22920 (**)
|
||||
22930 (**)
|
||||
22940 FUNCTION CTIMS(LEFT,RIGHT: OBJECTP): OBJECTP;
|
||||
22950 VAR NEWOBJ: OBJECTP;
|
||||
22960 TEMPREAL: REAL;
|
||||
22970 BEGIN
|
||||
22980 IF FPTST(LEFT^) THEN NEWOBJ := LEFT
|
||||
22990 ELSE IF FPTST(RIGHT^) THEN NEWOBJ := RIGHT
|
||||
23000 ELSE NEWOBJ := CRCOMPLEX(0.0,0.0);
|
||||
23010 TEMPREAL := LEFT^.RE*RIGHT^.RE-LEFT^.IM*RIGHT^.IM;
|
||||
23020 WITH NEWOBJ^ DO
|
||||
23030 BEGIN
|
||||
23040 IM := LEFT^.RE*RIGHT^.IM+LEFT^.IM*RIGHT^.RE;
|
||||
23050 RE := TEMPREAL
|
||||
23060 END;
|
||||
23070 IF (FPTST(LEFT^)) AND (FPTST(RIGHT^)) THEN GARBAGE(RIGHT);
|
||||
23080 CTIMS := NEWOBJ
|
||||
23090 END;
|
||||
23100 (**)
|
||||
23110 (**)
|
||||
23120 FUNCTION CDIV(LEFT,RIGHT: OBJECTP): OBJECTP;
|
||||
23130 VAR NEWOBJ: OBJECTP;
|
||||
23140 TEMPREAL,RIGHTSQR: REAL;
|
||||
23150 BEGIN
|
||||
23160 IF FPTST(LEFT^) THEN NEWOBJ := LEFT
|
||||
23170 ELSE IF FPTST(RIGHT^) THEN NEWOBJ := RIGHT
|
||||
23180 ELSE NEWOBJ := CRCOMPLEX(0.0,0.0);
|
||||
23190 RIGHTSQR := SQR(RIGHT^.RE)+SQR(RIGHT^.IM);
|
||||
23200 TEMPREAL := (LEFT^.RE*RIGHT^.RE+LEFT^.IM*RIGHT^.IM)/RIGHTSQR;
|
||||
23210 WITH NEWOBJ^ DO
|
||||
23220 BEGIN
|
||||
23230 IM := (LEFT^.IM*RIGHT^.RE-LEFT^.RE*RIGHT^.IM)/RIGHTSQR;
|
||||
23240 RE := TEMPREAL
|
||||
23250 END;
|
||||
23260 IF (FPTST(LEFT^)) AND (FPTST(RIGHT^)) THEN GARBAGE(RIGHT);
|
||||
23270 CDIV := NEWOBJ
|
||||
23280 END;
|
||||
23290 (**)
|
||||
23300 (**)
|
||||
23310 FUNCTION CNEGI(CNUMB: OBJECTP): OBJECTP;
|
||||
23320 VAR NEWOBJ: OBJECTP;
|
||||
23330 BEGIN
|
||||
23340 IF FPTST(CNUMB^) THEN NEWOBJ := CNUMB
|
||||
23350 ELSE NEWOBJ := CRCOMPLEX(0.0,0.0);
|
||||
23360 WITH NEWOBJ^ DO
|
||||
23370 BEGIN
|
||||
23380 RE := -CNUMB^.RE;
|
||||
23390 IM := -CNUMB^.IM
|
||||
23400 END;
|
||||
23410 CNEGI := NEWOBJ
|
||||
23420 END;
|
||||
23430 (**)
|
||||
23440 (**)
|
||||
23450 FUNCTION CCONJ(CNUMB: OBJECTP): OBJECTP;
|
||||
23460 VAR NEWOBJ: OBJECTP;
|
||||
23470 BEGIN
|
||||
23480 IF FPTST(CNUMB^) THEN NEWOBJ := CNUMB
|
||||
23490 ELSE NEWOBJ := CRCOMPLEX(0.0,0.0);
|
||||
23500 WITH NEWOBJ^ DO
|
||||
23510 BEGIN
|
||||
23520 RE := CNUMB^.RE;
|
||||
23530 IM := -CNUMB^.IM
|
||||
23540 END;
|
||||
23550 CCONJ := NEWOBJ
|
||||
23560 END;
|
||||
23570 (**)
|
||||
23580 (**)
|
||||
23590 FUNCTION CRE(CNUMB: OBJECTP): REAL;
|
||||
23600 BEGIN
|
||||
23610 CRE := CNUMB^.RE;
|
||||
23620 IF FPTST(CNUMB^) THEN GARBAGE(CNUMB)
|
||||
23630 END;
|
||||
23640 (**)
|
||||
23650 (**)
|
||||
23660 FUNCTION CIM(CNUMB: OBJECTP): REAL;
|
||||
23670 BEGIN
|
||||
23680 CIM := CNUMB^.IM;
|
||||
23690 IF FPTST(CNUMB^) THEN GARBAGE(CNUMB)
|
||||
23700 END;
|
||||
23710 (**)
|
||||
23720 (**)
|
||||
23730 FUNCTION CABSI(CNUMB: OBJECTP): REAL;
|
||||
23740 BEGIN
|
||||
23750 WITH CNUMB^ DO
|
||||
23760 CABSI := SQRT(SQR(RE)+SQR(IM));
|
||||
23770 IF FPTST(CNUMB^) THEN GARBAGE(CNUMB)
|
||||
23780 END;
|
||||
23790 (**)
|
||||
23800 (**)
|
||||
23810 FUNCTION ARG(CNUMB: OBJECTP): REAL;
|
||||
23820 VAR RESULT: REAL;
|
||||
23830 BEGIN
|
||||
23840 WITH CNUMB^ DO
|
||||
23850 IF (RE<>0.0) OR (IM<>0.0) THEN
|
||||
23860 IF ABS(RE)>ABS(IM) THEN
|
||||
23870 RESULT := ARCTAN(IM/RE)+HALFPI.ACTUALPI*(1-ORD(RE>0.0))*2*(1-2*ORD(IM<0.0))
|
||||
23880 ELSE RESULT := -ARCTAN(RE/IM)+HALFPI.ACTUALPI*(ORD(IM>0.0)-ORD(IM<0.0))
|
||||
23890 ELSE ERRORR(RARG);
|
||||
23900 ARG := RESULT
|
||||
23910 END;
|
||||
23920 (**)
|
||||
23930 (**)
|
||||
23940 FUNCTION CARG(CNUMB: OBJECTP): REAL;
|
||||
23950 BEGIN
|
||||
23960 CARG := ARG(CNUMB);
|
||||
23970 IF FPTST(CNUMB^) THEN GARBAGE(CNUMB)
|
||||
23980 END;
|
||||
23990 (**)
|
||||
24000 (**)
|
||||
24010 FUNCTION CPOW(CNUMB: OBJECTP;POW: INTEGER): OBJECTP;
|
||||
24020 VAR NEWOBJ: OBJECTP;
|
||||
24030 CMOD,CMODPOW,NTHETA: REAL;
|
||||
24040 NEGPOW: BOOLEAN;
|
||||
24050 BEGIN
|
||||
24060 IF FPTST(CNUMB^) THEN NEWOBJ := CNUMB
|
||||
24070 ELSE NEWOBJ := CRCOMPLEX(0.0,0.0);
|
||||
24080 WITH CNUMB^ DO
|
||||
24090 CMOD := SQRT(SQR(RE)+SQR(IM));
|
||||
24100 IF CMOD<>0.0 THEN
|
||||
24110 BEGIN
|
||||
24120 NEGPOW := POW<0;
|
||||
24130 POW := ABS(POW);
|
||||
24140 NTHETA := POW*ARG(CNUMB);
|
||||
24150 CMODPOW := 1;
|
||||
24160 WHILE POW<>0 DO
|
||||
24170 BEGIN
|
||||
24180 IF POW MOD 2=1 THEN CMODPOW := CMODPOW*CMOD;
|
||||
24190 CMOD := SQR(CMOD);
|
||||
24200 POW := POW DIV 2
|
||||
24210 END;
|
||||
24220 WITH NEWOBJ^ DO
|
||||
24230 BEGIN
|
||||
24240 RE := COS(NTHETA)*CMODPOW;
|
||||
24250 IM := SIN(NTHETA)*CMODPOW;
|
||||
24260 IF NEGPOW THEN
|
||||
24270 BEGIN
|
||||
24280 CMOD := SQR(RE)+SQR(IM);
|
||||
24290 RE := RE/CMOD;
|
||||
24300 IM := -IM/CMOD
|
||||
24310 END
|
||||
24320 END
|
||||
24330 END
|
||||
24340 ELSE WITH NEWOBJ^ DO
|
||||
24350 BEGIN
|
||||
24360 RE := 0.0;
|
||||
24370 IM := 0.0
|
||||
24380 END;
|
||||
24390 CPOW := NEWOBJ;
|
||||
24400 END;
|
||||
24410 (**)
|
||||
24420 (**)
|
||||
24430 FUNCTION CEQ(LEFT,RIGHT: OBJECTP): INTEGER;
|
||||
24440 VAR EQUALS: BOOLEAN;
|
||||
24450 BEGIN
|
||||
24460 EQUALS := (LEFT^.RE=RIGHT^.RE) AND (LEFT^.IM=RIGHT^.IM);
|
||||
24470 IF FPTST(LEFT^) THEN GARBAGE(LEFT);
|
||||
24480 IF FPTST(RIGHT^) THEN GARBAGE(RIGHT);
|
||||
24490 IF EQUALS THEN CEQ := TRUEVAL ELSE CEQ := 0
|
||||
24500 END;
|
||||
24510 (**)
|
||||
24520 (**)
|
||||
24530 FUNCTION CNE(LEFT,RIGHT: OBJECTP): INTEGER;
|
||||
24540 VAR NOTEQUAL: BOOLEAN;
|
||||
24550 BEGIN
|
||||
24560 NOTEQUAL := (LEFT^.RE<>RIGHT^.RE) OR (LEFT^.IM<>RIGHT^.IM);
|
||||
24570 IF FPTST(LEFT^) THEN GARBAGE(LEFT);
|
||||
24580 IF FPTST(RIGHT^) THEN GARBAGE(RIGHT);
|
||||
24590 IF NOTEQUAL THEN CNE := TRUEVAL ELSE CNE := 0
|
||||
24600 END;
|
||||
24610 (**)
|
||||
24620 (**)
|
||||
24630 FUNCTION CPLUSAB(DESTINATION,INCREMENT: OBJECTP): OBJECTP;
|
||||
24640 VAR REALPTR: UNDRESSP;
|
||||
24650 BEGIN
|
||||
24660 REALPTR := SAFEACCESS(DESTINATION);
|
||||
24670 REALPTR^.FIRSTREAL := REALPTR^.FIRSTREAL+INCREMENT^.RE;
|
||||
24680 REALPTR := INCPTR(REALPTR,SZREAL);
|
||||
24690 REALPTR^.FIRSTREAL := REALPTR^.FIRSTREAL+INCREMENT^.IM;
|
||||
24700 IF FPTST(INCREMENT^) THEN GARBAGE(INCREMENT);
|
||||
24710 CPLUSAB := DESTINATION
|
||||
24720 END;
|
||||
24730 (**)
|
||||
24740 (**)
|
||||
24750 FUNCTION CMINAB(DESTINATION,DECREMENT: OBJECTP): OBJECTP;
|
||||
24760 VAR REALPTR: UNDRESSP;
|
||||
24770 BEGIN
|
||||
24780 REALPTR := SAFEACCESS(DESTINATION);
|
||||
24790 REALPTR^.FIRSTREAL := REALPTR^.FIRSTREAL-DECREMENT^.RE;
|
||||
24800 REALPTR := INCPTR(REALPTR,SZREAL);
|
||||
24810 REALPTR^.FIRSTREAL := REALPTR^.FIRSTREAL-DECREMENT^.IM;
|
||||
24820 IF FPTST(DECREMENT^) THEN GARBAGE(DECREMENT);
|
||||
24830 CMINAB := DESTINATION
|
||||
24840 END;
|
||||
24850 (**)
|
||||
24860 (**)
|
||||
24870 FUNCTION CTIMSAB(DESTINATION,FACTOR: OBJECTP): OBJECTP;
|
||||
24880 VAR REALPTR,IMAGPTR: UNDRESSP;
|
||||
24890 TEMPREAL: REAL;
|
||||
24900 BEGIN
|
||||
24910 REALPTR := SAFEACCESS(DESTINATION);
|
||||
24920 IMAGPTR := INCPTR(REALPTR,SZREAL);
|
||||
24930 TEMPREAL := REALPTR^.FIRSTREAL*FACTOR^.RE-IMAGPTR^.FIRSTREAL*FACTOR^.IM;
|
||||
24940 IMAGPTR^.FIRSTREAL := REALPTR^.FIRSTREAL*FACTOR^.IM+IMAGPTR^.FIRSTREAL*FACTOR^.RE;
|
||||
24950 REALPTR^.FIRSTREAL := TEMPREAL;
|
||||
24960 IF FPTST(FACTOR^) THEN GARBAGE(FACTOR);
|
||||
24970 CTIMSAB := DESTINATION
|
||||
24980 END;
|
||||
24990 (**)
|
||||
25000 (**)
|
||||
25010 FUNCTION CDIVAB(DESTINATION,DIVISOR: OBJECTP): OBJECTP;
|
||||
25020 VAR REALPTR,IMAGPTR: UNDRESSP;
|
||||
25030 TEMPREAL,DIVISORSQR: REAL;
|
||||
25040 BEGIN
|
||||
25050 REALPTR := SAFEACCESS(DESTINATION);
|
||||
25060 IMAGPTR := INCPTR(REALPTR,SZREAL);
|
||||
25070 DIVISORSQR := SQR(DIVISOR^.RE)+SQR(DIVISOR^.IM);
|
||||
25080 TEMPREAL := (REALPTR^.FIRSTREAL*DIVISOR^.RE+IMAGPTR^.FIRSTREAL*DIVISOR^.IM)/DIVISORSQR;
|
||||
25090 IMAGPTR^.FIRSTREAL := (IMAGPTR^.FIRSTREAL*DIVISOR^.RE-REALPTR^.FIRSTREAL*DIVISOR^.IM)/DIVISORSQR;
|
||||
25100 REALPTR^.FIRSTREAL := TEMPREAL;
|
||||
25110 IF FPTST(DIVISOR^) THEN GARBAGE(DIVISOR);
|
||||
25120 CDIVAB := DESTINATION
|
||||
25130 END;
|
||||
25140 (**)
|
||||
25150 (**)
|
||||
25160 (*-02()
|
||||
25170 BEGIN (* OF A68 *)
|
||||
25180 END (* OF A68 *);
|
||||
25190 ()-02*)
|
||||
25200 (*+01()
|
||||
25210 BEGIN (* OF MAIN PROGRAM *)
|
||||
25220 END (* OF MAIN PROGRAM *).
|
||||
25230 ()+01*)
|
4
lang/a68s/liba68s/cos.c
Normal file
4
lang/a68s/liba68s/cos.c
Normal file
|
@ -0,0 +1,4 @@
|
|||
extern double _cos();
|
||||
double COS(statlink, x)
|
||||
int *statlink; double x;
|
||||
{return(_cos(x));}
|
154
lang/a68s/liba68s/crmult.p
Normal file
154
lang/a68s/liba68s/crmult.p
Normal file
|
@ -0,0 +1,154 @@
|
|||
26000 #include "rundecs.h"
|
||||
26010 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
26020 (**)
|
||||
26030 (**)
|
||||
26040 PROCEDURE COPYSLICE(ASLICE: OBJECTP); EXTERN;
|
||||
26050 FUNCTION COPYDESC(ORIGINAL: OBJECTP; NEWSORT: STRUCTYPE): OBJECTP; EXTERN;
|
||||
26060 PROCEDURE ERRORR(N :INTEGER); EXTERN;
|
||||
26070 (**)
|
||||
26080 (**)
|
||||
26090 FUNCTION BOUND(ROWCOUNT: INTEGER): OBJECTP;
|
||||
26100 (*PBOUNDS*)
|
||||
26110 VAR NEWMULT: OBJECTP;
|
||||
26120 DESCDEX: INTEGER; BND: BOUNDSRANGE;
|
||||
26130 BEGIN
|
||||
26140 ENEW(NEWMULT, MULTCONST+ROWCOUNT*SZPDS);
|
||||
26150 WITH NEWMULT^ DO
|
||||
26160 BEGIN
|
||||
26170 (*-02() FIRSTWORD := SORTSHIFT * ORD(MULT); ()-02*)
|
||||
26180 (*+02() PCOUNT:=0; SORT:=MULT; ()+02*)
|
||||
26190 (*+01() SECONDWORD := 0; ()+01*)
|
||||
26200 OSCOPE := 0 ;
|
||||
26210 FOR DESCDEX := 0 TO ROWCOUNT-1 DO
|
||||
26220 WITH DESCVEC[DESCDEX] DO
|
||||
26230 BEGIN
|
||||
26240 BND := GETSTKTOP(SZINT, DESCDEX*2*SZINT);
|
||||
26250 IF BND=INTUNDEF THEN ERRORR(RCUPPER); UI := BND;
|
||||
26260 BND := GETSTKTOP(SZINT, DESCDEX*2*SZINT+SZINT);
|
||||
26270 IF BND=INTUNDEF THEN ERRORR(RCLOWER); LI := BND;
|
||||
26280 END;
|
||||
26290 ROWS := ROWCOUNT-1;
|
||||
26300 PVALUE := NIL;
|
||||
26310 IHEAD := NIL; FPTR := NIL; BPTR := NIL
|
||||
26320 END;
|
||||
26330 BOUND := NEWMULT;
|
||||
26340 END;
|
||||
26350 (**)
|
||||
26360 (**)
|
||||
26370 FUNCTION CRMULT(NEWMULT: OBJECTP; TEMPLATE: DPOINT): OBJECTP;
|
||||
26380 (*PACTDRMULT*)
|
||||
26390 VAR NEWELS: OBJECTP;
|
||||
26400 SUM, ELSIZE, INDEX, DESCDEX, TEMPOS, STRUCTPOS, INC: INTEGER;
|
||||
26410 PTR, LIMIT: UNDRESSP;
|
||||
26420 BEGIN
|
||||
26430 WITH NEWMULT^ DO
|
||||
26440 BEGIN
|
||||
26450 IF ORD(TEMPLATE)=0 THEN ELSIZE := SZADDR (*DRESSED*)
|
||||
26460 ELSE IF ORD(TEMPLATE)<=MAXSIZE THEN ELSIZE := ORD(TEMPLATE) (*UNDRESSED*)
|
||||
26470 ELSE ELSIZE := TEMPLATE^[0]; (*STRUCT*)
|
||||
26480 SIZE:= ELSIZE;
|
||||
26490 SUM:= 0;
|
||||
26500 FOR DESCDEX := 0 TO ROWS DO
|
||||
26510 WITH DESCVEC[DESCDEX] DO
|
||||
26520 BEGIN
|
||||
26530 DI:= ELSIZE;
|
||||
26540 SUM := SUM+LI*ELSIZE;
|
||||
26550 ELSIZE:= (UI-LI+1)*ELSIZE;
|
||||
26560 IF ELSIZE <= 0 THEN
|
||||
26570 ELSIZE:= 0
|
||||
26580 END;
|
||||
26590 LBADJ := SUM-ELSCONST;
|
||||
26600 MDBLOCK := TEMPLATE;
|
||||
26610 ENEW(NEWELS, ELSCONST+ELSIZE);
|
||||
26620 WITH NEWELS^ DO
|
||||
26630 BEGIN
|
||||
26640 (*-02() FIRSTWORD := SORTSHIFT*ORD(IELS)+INCRF; ()-02*)
|
||||
26650 (*+02() PCOUNT:=1; SORT:=IELS; ()+02*)
|
||||
26660 OSCOPE := 0;
|
||||
26670 DBLOCK:= TEMPLATE;
|
||||
26680 D0:= ELSIZE;
|
||||
26690 CCOUNT:= 1;
|
||||
26700 PTR := INCPTR(NEWELS, ELSCONST);
|
||||
26710 IHEAD := NIL;
|
||||
26720 (*-02()
|
||||
26730 IF ORD(TEMPLATE)=0 THEN BEGIN PTR^.FIRSTPTR := UNDEFIN; INC := SZADDR END (*DRESSED*)
|
||||
26740 ELSE BEGIN PTR^.FIRSTWORD := INTUNDEF; INC := SZWORD END; (*UNDRESSED*)
|
||||
26750 MOVELEFT(PTR, INCPTR(PTR, INC), ELSIZE-INC);
|
||||
26760 ()-02*)
|
||||
26770 (*+02()
|
||||
26780 LIMIT := INCPTR(PTR, ELSIZE);
|
||||
26790 IF ORD(TEMPLATE)=0 THEN WHILE PTR<>LIMIT DO
|
||||
26800 BEGIN PTR^.FIRSTPTR := UNDEFIN; PTR := INCPTR(PTR, SZADDR) END
|
||||
26810 ELSE WHILE PTR<>LIMIT DO
|
||||
26820 BEGIN PTR^.FIRSTWORD := INTUNDEF; PTR := INCPTR(PTR, SZWORD) END;
|
||||
26830 ()+02*)
|
||||
26840 IF ORD(TEMPLATE)>MAXSIZE (*STRUCT*) THEN
|
||||
26850 BEGIN
|
||||
26860 ELSIZE:= TEMPLATE^[0];
|
||||
26870 INDEX:= 0;
|
||||
26880 WHILE INDEX < D0 DO
|
||||
26890 BEGIN
|
||||
26900 TEMPOS:= 1;
|
||||
26910 STRUCTPOS:= TEMPLATE^[1];
|
||||
26920 WHILE STRUCTPOS >= 0 DO
|
||||
26930 BEGIN
|
||||
26940 PTR := INCPTR(NEWELS, ELSCONST+INDEX+STRUCTPOS);
|
||||
26950 PTR^.FIRSTPTR := UNDEFIN;
|
||||
26960 TEMPOS:= TEMPOS+1;
|
||||
26970 STRUCTPOS:= TEMPLATE^[TEMPOS]
|
||||
26980 END;
|
||||
26990 INDEX:= INDEX+ELSIZE
|
||||
27000 END
|
||||
27010 END
|
||||
27020 END;
|
||||
27030 PVALUE:= NEWELS
|
||||
27040 END;
|
||||
27050 CRMULT := NEWMULT
|
||||
27060 END;
|
||||
27070 (**)
|
||||
27080 (**)
|
||||
27090 FUNCTION CRREFR(ANOBJECT: OBJECTP): OBJECTP;
|
||||
27100 (*PCREATEREF+2*)
|
||||
27110 VAR NEWREFR: OBJECTP;
|
||||
27120 BEGIN
|
||||
27130 WITH ANOBJECT^ DO
|
||||
27140 BEGIN
|
||||
27150 IF (BPTR<>NIL) AND (SORT=MULT) THEN (*SOURCE IS A SLICE*)
|
||||
27160 COPYSLICE(ANOBJECT);
|
||||
27170 IF FTST THEN
|
||||
27180 BEGIN NEWREFR := ANOBJECT; NEWREFR^.SORT := REFR END
|
||||
27190 ELSE
|
||||
27200 BEGIN
|
||||
27210 NEWREFR := COPYDESC(ANOBJECT, REFR);
|
||||
27220 WITH NEWREFR^.PVALUE^ DO FINC
|
||||
27230 END
|
||||
27240 END;
|
||||
27250 WITH NEWREFR^ DO
|
||||
27260 BEGIN
|
||||
27270 OSCOPE := SCOPE+FIRSTRG.RIBOFFSET^.RGSCOPE;
|
||||
27280 ANCESTOR:= NEWREFR;
|
||||
27290 CCOUNT:= 1;
|
||||
27300 END;
|
||||
27310 CRREFR := NEWREFR;
|
||||
27320 END;
|
||||
27330 (**)
|
||||
27340 (**)
|
||||
27350 FUNCTION CHKDESC(SOURCEMULT, CDESC: OBJECTP): OBJECTP;
|
||||
27360 (*PCHECKDESC*)
|
||||
27370 VAR COUNT: INTEGER;
|
||||
27380 BEGIN
|
||||
27390 IF SOURCEMULT^.SORT=UNDEF THEN ERRORR(RMULASS);
|
||||
27400 FOR COUNT:= 0 TO CDESC^.ROWS
|
||||
27410 DO WITH CDESC^.DESCVEC[COUNT], SOURCEMULT^ DO
|
||||
27420 IF (LI <> DESCVEC[COUNT].LI)
|
||||
27430 OR (UI <> DESCVEC[COUNT].UI)
|
||||
27440 THEN ERRORR(RMULASS);
|
||||
27450 CHKDESC := SOURCEMULT;
|
||||
27460 END;
|
||||
27470 (**)
|
||||
27480 (**)
|
||||
27490 (*-02() BEGIN END ; ()-02*)
|
||||
27500 (*+01()
|
||||
27510 BEGIN (*OF MAIN PROGRAM*)
|
||||
27520 END (*OF EVERYTHING*).
|
||||
27530 ()+01*)
|
29
lang/a68s/liba68s/crrefn.p
Normal file
29
lang/a68s/liba68s/crrefn.p
Normal file
|
@ -0,0 +1,29 @@
|
|||
27600 #include "rundecs.h"
|
||||
27610 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
27620 (**)
|
||||
27630 (**)
|
||||
27640 FUNCTION CRREFN(ANOBJECT: OBJECTP): OBJECTP;
|
||||
27650 (*PCREATEREF*)
|
||||
27660 VAR NEWREFN: OBJECTP;
|
||||
27670 BEGIN
|
||||
27680 ENEW(NEWREFN, REFNSIZE);
|
||||
27690 WITH NEWREFN^ DO
|
||||
27700 BEGIN
|
||||
27710 (*-02() FIRSTWORD := SORTSHIFT * ORD(REFN); ()-02*)
|
||||
27720 (*+02() PCOUNT:=0; SORT:=REFN; ()+02*)
|
||||
27730 (*+01() SECONDWORD := 0; ()+01*)
|
||||
27740 ANCESTOR := NEWREFN;
|
||||
27750 OFFSET := STRUCTCONST;
|
||||
27760 PVALUE := ANOBJECT;
|
||||
27770 OSCOPE := SCOPE+FIRSTRG.RIBOFFSET^.RGSCOPE;
|
||||
27780 WITH ANOBJECT^ DO FINC;
|
||||
27790 END;
|
||||
27800 CRREFN := NEWREFN;
|
||||
27810 END;
|
||||
27820 (**)
|
||||
27830 (**)
|
||||
27840 (*-02() BEGIN END ; ()-02*)
|
||||
27850 (*+01()
|
||||
27860 BEGIN (*OF MAIN PROGRAM*)
|
||||
27870 END (*OF EVERYTHING*).
|
||||
27880 ()+01*)
|
42
lang/a68s/liba68s/dclpsn.p
Normal file
42
lang/a68s/liba68s/dclpsn.p
Normal file
|
@ -0,0 +1,42 @@
|
|||
28000 #include "rundecs.h"
|
||||
28010 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
28020 (**)
|
||||
28030 (**)
|
||||
28040 PROCEDURE DCLSN( COUNT: DEPTHRANGE ; OFFSET: OFFSETRANGE ) ;
|
||||
28050 VAR PTR: UNDRESSP ;
|
||||
28060 I : INTEGER ;
|
||||
28070 BEGIN
|
||||
28080 PTR := INCPTR( ASPTR(STATIC( ME )) , (*+41() - ()+41*) OFFSET ) ;
|
||||
28090 FOR I := COUNT DIV SZINT - 1 DOWNTO 0 DO
|
||||
28100 BEGIN
|
||||
28110 (*+41() PTR := INCPTR( PTR , - SZINT ) ; ()+41*)
|
||||
28120 PTR ^.FIRSTINT := GETSTKTOP( SZINT , SZINT * I ) ;
|
||||
28130 (*-41() PTR := INCPTR( PTR , SZINT ) ()-41*)
|
||||
28140 END
|
||||
28150 END ;
|
||||
28160 (**)
|
||||
28170 PROCEDURE DCLPN( COUNT: DEPTHRANGE ; OFFSET: OFFSETRANGE ) ;
|
||||
28180 VAR PTR: UNDRESSP ;
|
||||
28190 I: INTEGER ;
|
||||
28200 BEGIN
|
||||
28210 PTR := INCPTR( ASPTR(STATIC( ME )) , (*+41() - ()+41*) OFFSET ) ;
|
||||
28220 FOR I := COUNT DIV SZADDR - 1 DOWNTO 0 DO
|
||||
28230 BEGIN
|
||||
28240 (*+41() PTR := INCPTR( PTR , - SZADDR ) ; ()+41*)
|
||||
28250 PTR ^.FIRSTPTR := ASPTR(GETSTKTOP( SZADDR , SZADDR * I )) ;
|
||||
28260 WITH PTR ^ DO
|
||||
28270 WITH FIRSTPTR ^ DO
|
||||
28280 FINC;
|
||||
28290 (*-41() PTR := INCPTR( PTR , SZADDR ) ()-41*)
|
||||
28300 END
|
||||
28310 END ;
|
||||
28320 (**)
|
||||
28330 (**)
|
||||
28340 (*-02()
|
||||
28350 BEGIN
|
||||
28360 END ;
|
||||
28370 ()-02*)
|
||||
28380 (*+01()
|
||||
28390 BEGIN (*OF MAIN PROGRAM*)
|
||||
28400 END (*OF EVERYTHING*).
|
||||
28410 ()+01*)
|
18
lang/a68s/liba68s/div.e
Normal file
18
lang/a68s/liba68s/div.e
Normal file
|
@ -0,0 +1,18 @@
|
|||
#include "e.h"
|
||||
|
||||
exp $DIV
|
||||
|
||||
pro $DIV,SZWORD
|
||||
loc PASCALSTAMP
|
||||
stl -SZWORD
|
||||
lol SZADDR+SZWORD ; 1st param
|
||||
loc SZWORD
|
||||
loc SZREAL
|
||||
cif
|
||||
lol SZADDR ; 2nd param
|
||||
loc SZWORD
|
||||
loc SZREAL
|
||||
cif
|
||||
dvf SZREAL
|
||||
ret SZREAL
|
||||
end SZWORD
|
57
lang/a68s/liba68s/drefm.p
Normal file
57
lang/a68s/liba68s/drefm.p
Normal file
|
@ -0,0 +1,57 @@
|
|||
28500 #include "rundecs.h"
|
||||
28510 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
28520 (**)
|
||||
28530 PROCEDURE GARBAGE (ANOBJECT: OBJECTP); EXTERN;
|
||||
28540 PROCEDURE ERRORR(N :INTEGER); EXTERN;
|
||||
28550 FUNCTION GETMULT(NEWMULT: OBJECTP): OBJECTP; EXTERN;
|
||||
28560 FUNCTION COPYDESC(ORIGINAL: OBJECTP; NEWSORT: STRUCTYPE): OBJECTP; EXTERN;
|
||||
28570 (**)
|
||||
28580 (**)
|
||||
28590 FUNCTION DREFM(REFER: OBJECTP): OBJECTP;
|
||||
28600 (*PDEREF+4*)
|
||||
28610 VAR NEWMULT:OBJECTP;
|
||||
28620 BEGIN WITH REFER^ DO
|
||||
28630 CASE SORT OF
|
||||
28640 REFR, RECR:
|
||||
28650 BEGIN
|
||||
28660 IF FTST THEN
|
||||
28670 BEGIN
|
||||
28680 DREFM := REFER;
|
||||
28690 OSCOPE := PVALUE^.OSCOPE;
|
||||
28700 SORT := MULT
|
||||
28710 END
|
||||
28720 ELSE
|
||||
28730 BEGIN
|
||||
28740 NEWMULT := COPYDESC(REFER, MULT);
|
||||
28750 NEWMULT^.OSCOPE := PVALUE^.OSCOPE;
|
||||
28760 DREFM := NEWMULT;
|
||||
28770 FPINC(PVALUE^)
|
||||
28780 END
|
||||
28790 END;
|
||||
28800 REFSLN:
|
||||
28810 BEGIN
|
||||
28820 PVALUE := ANCESTOR;
|
||||
28830 IF FTST THEN
|
||||
28840 BEGIN
|
||||
28850 SORT := MULT;
|
||||
28860 DREFM := GETMULT(REFER);
|
||||
28870 FPDEC(ANCESTOR^);
|
||||
28880 IF FPTST(ANCESTOR^) THEN GARBAGE(ANCESTOR);
|
||||
28890 END
|
||||
28900 ELSE
|
||||
28910 DREFM := GETMULT(COPYDESC(REFER, MULT))
|
||||
28920 END;
|
||||
28930 UNDEF: ERRORR(RDEREF);
|
||||
28940 NILL: ERRORR(RDEREFNIL)
|
||||
28950 END
|
||||
28960 END;
|
||||
28970 (**)
|
||||
28980 (**)
|
||||
28990 (*-02()
|
||||
29000 BEGIN
|
||||
29010 END;
|
||||
29020 ()-02*)
|
||||
29030 (*+01()
|
||||
29040 BEGIN (*OF MAIN PROGRAM*)
|
||||
29050 END (*OF EVERYTHING*).
|
||||
29060 ()+01*)
|
75
lang/a68s/liba68s/drefs.p
Normal file
75
lang/a68s/liba68s/drefs.p
Normal file
|
@ -0,0 +1,75 @@
|
|||
29100 #include "rundecs.h"
|
||||
29110 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
29120 (**)
|
||||
29130 PROCEDURE GARBAGE (ANOBJECT: OBJECTP); EXTERN;
|
||||
29140 PROCEDURE ERRORR(N :INTEGER); EXTERN;
|
||||
29150 (**)
|
||||
29160 (**)
|
||||
29170 FUNCTION DREFS(REFER: OBJECTP): A68INT;
|
||||
29180 (*PDEREF*)
|
||||
29190 VAR PTR: UNDRESSP;
|
||||
29200 BEGIN WITH REFER^ DO
|
||||
29210 CASE SORT OF
|
||||
29220 REF1: DREFS := VALUE;
|
||||
29230 CREF: DREFS := IPTR^.FIRSTINT;
|
||||
29240 REFSL1: BEGIN PTR := INCPTR(ANCESTOR^.PVALUE, OFFSET); DREFS := PTR^.FIRSTINT END;
|
||||
29250 UNDEF: ERRORR(RDEREF);
|
||||
29260 NILL: ERRORR(RDEREFNIL);
|
||||
29270 END;
|
||||
29280 IF FPTST(REFER^) THEN GARBAGE(REFER)
|
||||
29290 END;
|
||||
29300 (**)
|
||||
29310 (**)
|
||||
29320 (*-01()
|
||||
29330 FUNCTION DREFS2(REFER: OBJECTP): A68LONG;
|
||||
29340 (*PDEREF+1*)
|
||||
29350 VAR PTR: UNDRESSP;
|
||||
29360 BEGIN WITH REFER^ DO
|
||||
29370 CASE SORT OF
|
||||
29380 REF2: DREFS2 := LONGVALUE;
|
||||
29390 CREF: DREFS2 := IPTR^.FIRSTLONG;
|
||||
29400 REFSL1: BEGIN PTR := INCPTR(ANCESTOR^.PVALUE, OFFSET); DREFS2 := PTR^.FIRSTLONG END;
|
||||
29410 UNDEF: ERRORR(RDEREF);
|
||||
29420 NILL: ERRORR(RDEREFNIL);
|
||||
29430 END;
|
||||
29440 IF FPTST(REFER^) THEN GARBAGE(REFER)
|
||||
29450 END;
|
||||
29460 (**)
|
||||
29470 (**)
|
||||
29480 ()-01*)
|
||||
29490 (**)
|
||||
29500 (**)
|
||||
29510 FUNCTION DREFPTR(REFER: OBJECTP): OBJECTP;
|
||||
29520 (*PDEREF+2*)
|
||||
29530 VAR RESULT: OBJECTP;
|
||||
29540 PTR: UNDRESSP;
|
||||
29550 BEGIN
|
||||
29560 WITH REFER^ DO
|
||||
29570 BEGIN
|
||||
29580 CASE SORT OF
|
||||
29590 RECN, REFN: RESULT := PVALUE;
|
||||
29600 CREF: RESULT := IPTR^.FIRSTPTR;
|
||||
29610 REFSL1: BEGIN PTR := INCPTR(ANCESTOR^.PVALUE, OFFSET); RESULT := PTR^.FIRSTPTR END;
|
||||
29620 UNDEF: ERRORR(RDEREF);
|
||||
29630 NILL: ERRORR(RDEREFNIL);
|
||||
29640 END;
|
||||
29650 IF SORT<>CREF THEN WITH RESULT^ DO
|
||||
29660 BEGIN
|
||||
29670 FINC;
|
||||
29680 IF FPTST(REFER^) THEN GARBAGE(REFER);
|
||||
29690 FDEC
|
||||
29700 END
|
||||
29710 ELSE IF FPTST(REFER^) THEN GARBAGE(REFER);
|
||||
29720 DREFPTR := RESULT;
|
||||
29730 END
|
||||
29740 END;
|
||||
29750 (**)
|
||||
29760 (**)
|
||||
29770 (*-02()
|
||||
29780 BEGIN
|
||||
29790 END;
|
||||
29800 ()-02*)
|
||||
29810 (*+01()
|
||||
29820 BEGIN (*OF MAIN PROGRAM*)
|
||||
29830 END (*OF EVERYTHING*).
|
||||
29840 ()+01*)
|
21
lang/a68s/liba68s/dumbacch.p
Normal file
21
lang/a68s/liba68s/dumbacch.p
Normal file
|
@ -0,0 +1,21 @@
|
|||
70900 #include "rundecs.h"
|
||||
70910 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
70920 (**)
|
||||
70930 (**)
|
||||
70940 (*+01() (*$X6*) ()+01*)
|
||||
70950 (**)
|
||||
70960 PROCEDURE DUMBACCH(PCOV: OBJECTP; LFN: LFNTYPE);
|
||||
70970 BEGIN PCOV^.POSSIBLES := [] END;
|
||||
70980 (**)
|
||||
70990 (**)
|
||||
71000 (*+01() (*$X4*) ()+01*)
|
||||
71010 (**)
|
||||
71020 (**)
|
||||
71030 (*-02()
|
||||
71040 BEGIN (*OF A68*)
|
||||
71050 END; (*OF A68*)
|
||||
71060 ()-02*)
|
||||
71070 (*+01()
|
||||
71080 BEGIN (*OF MAIN PROGRAM*)
|
||||
71090 END (* OF EVERYTHING *).
|
||||
71100 ()+01*)
|
22
lang/a68s/liba68s/duminch.p
Normal file
22
lang/a68s/liba68s/duminch.p
Normal file
|
@ -0,0 +1,22 @@
|
|||
71200 #include "rundecs.h"
|
||||
71210 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
71220 (**)
|
||||
71230 (*+01() (*$X6*) ()+01*)
|
||||
71240 (**)
|
||||
71250 (**)
|
||||
71260 PROCEDURE DUMINCH(PCOV: OBJECTP; LFN: LFNTYPE);
|
||||
71270 (*WHEN THERE ARE NOT 'GET'S IN THE PROGRAM*)
|
||||
71280 BEGIN PCOV^.POSSIBLES := [] ; (*+01() PCOV^.BOOK^.STATUS := 0 ()+01*) END;
|
||||
71290 (**)
|
||||
71300 (**)
|
||||
71310 (*+01() (*$X4*) ()+01*)
|
||||
71320 (**)
|
||||
71330 (**)
|
||||
71340 (*-02()
|
||||
71350 BEGIN (*OF A68*)
|
||||
71360 END; (*OF A68*)
|
||||
71370 ()-02*)
|
||||
71380 (*+01()
|
||||
71390 BEGIN (*OF MAIN PROGRAM*)
|
||||
71400 END (* OF EVERYTHING *).
|
||||
71410 ()+01*)
|
20
lang/a68s/liba68s/dummy.p
Normal file
20
lang/a68s/liba68s/dummy.p
Normal file
|
@ -0,0 +1,20 @@
|
|||
29900 #include "rundecs.h"
|
||||
29910 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
29920 (**)
|
||||
29930 PROCEDURE ERRORR(N :INTEGER); EXTERN ;
|
||||
29940 (**)
|
||||
29950 (**)
|
||||
29960 PROCEDURE DUMMY;
|
||||
29970 BEGIN
|
||||
29980 ERRORR(RDUMMY);
|
||||
29990 END;
|
||||
30000 (**)
|
||||
30010 (**)
|
||||
30020 (*-02()
|
||||
30030 BEGIN
|
||||
30040 END ;
|
||||
30050 ()-02*)
|
||||
30060 (*+01()
|
||||
30070 BEGIN (*OF MAIN PROGRAM*)
|
||||
30080 END (*OF EVERYTHING*).
|
||||
30090 ()+01*)
|
27
lang/a68s/liba68s/dumoutch.p
Normal file
27
lang/a68s/liba68s/dumoutch.p
Normal file
|
@ -0,0 +1,27 @@
|
|||
71500 #include "rundecs.h"
|
||||
71510 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
71520 (**)
|
||||
71530 (*+01() (*$X6*) ()+01*)
|
||||
71540 PROCEDURE AOPEN( EFET:FETROOMP; DISP:INTEGER; LFN:LFNTYPE; BUF:IPOINT ); EXTERN;
|
||||
71550 (**)
|
||||
71560 (**)
|
||||
71570 PROCEDURE DUMOUTCH(PCOV: OBJECTP; LFN: LFNTYPE);
|
||||
71580 BEGIN WITH PCOV^ DO
|
||||
71590 BEGIN
|
||||
71600 (**)
|
||||
71610 POSSIBLES := [];
|
||||
71620 AOPEN(BOOK, FORWRITE, LFN, ORD(BOOK)+BUFFOFFSET);
|
||||
71630 END
|
||||
71640 END;
|
||||
71650 (**)
|
||||
71660 (*+01() (*$X4*) ()+01*)
|
||||
71670 (**)
|
||||
71680 (**)
|
||||
71690 (*-02()
|
||||
71700 BEGIN (*OF A68*)
|
||||
71710 END; (*OF A68*)
|
||||
71720 ()-02*)
|
||||
71730 (*+01()
|
||||
71740 BEGIN (*OF MAIN PROGRAM*)
|
||||
71750 END (* OF EVERYTHING *).
|
||||
71760 ()+01*)
|
59
lang/a68s/liba68s/e.h
Normal file
59
lang/a68s/liba68s/e.h
Normal file
|
@ -0,0 +1,59 @@
|
|||
#define SZADDR EM_PSIZE
|
||||
#define SZWORD EM_WSIZE
|
||||
#define SZLONG 4
|
||||
#define SZREAL 8
|
||||
#define SZPROC SZADDR+SZADDR
|
||||
|
||||
#if SZWORD==2
|
||||
#if SZADDR==2
|
||||
#define FIRSTIBOFFSET 30 /* offset from .HTOP to main's LB */
|
||||
#else
|
||||
#define FIRSTIBOFFSET 50
|
||||
#endif
|
||||
#else
|
||||
#define FIRSTIBOFFSET 52
|
||||
#endif
|
||||
#define FSTAMPOFFSET FIRSTIBOFFSET+SZWORD
|
||||
/* the following four definitions are offsets to the file pointers */
|
||||
#define FILEOFFSET SZWORD+SZWORD+SZADDR+SZWORD+SZWORD+SZADDR+SZADDR+SZWORD+\
|
||||
SZADDR+SZADDR+SZWORD+SZWORD+SZADDR
|
||||
#define STINOFFSET FIRSTIBOFFSET+FILEOFFSET
|
||||
#define STOUTOFFSET STINOFFSET+SZADDR
|
||||
#define STBACKOFFSET STOUTOFFSET+SZADDR
|
||||
#define ENTRYOFFSET SZADDR+SZWORD
|
||||
|
||||
#if SZWORD==2
|
||||
#define PUTTVARSPACE 150 /* space, or greater used for locals in PUTT */
|
||||
#define GETTVARSPACE 350 /* space, or greater used for locals in GETT */
|
||||
#define LLC ldc /* for loading bit patterns */
|
||||
#else
|
||||
#define PUTTVARSPACE 300
|
||||
#define GETTVARSPACE 700
|
||||
#define LLC loc
|
||||
#endif
|
||||
#define HTOP 500 /* this must agree with what the compiler produces */
|
||||
#define A68STAMP 13476 /* this must agree with version in a68sdec.p */
|
||||
#define PASCALSTAMP 0 /* must match what the pascal compiler puts down */
|
||||
#define PUTSTAMP -1
|
||||
#define GETSTAMP -2
|
||||
|
||||
/* this will only work if SZADDR = SWORD*2 or if SZADDR = SZWORD */
|
||||
|
||||
#if SZADDR == SZWORD
|
||||
#define LFL lol
|
||||
#define SFL stl
|
||||
#define LFE loe
|
||||
#define SFE ste
|
||||
#define LFF lof
|
||||
#define SFF stf
|
||||
#else
|
||||
#define LFL ldl
|
||||
#define SFL sdl
|
||||
#define LFE lde
|
||||
#define SFE sde
|
||||
#define LFF ldf
|
||||
#define SFF sdf
|
||||
#endif
|
||||
|
||||
mes 2,SZWORD,SZADDR
|
||||
|
231
lang/a68s/liba68s/ensure.p
Normal file
231
lang/a68s/liba68s/ensure.p
Normal file
|
@ -0,0 +1,231 @@
|
|||
71800 #include "rundecs.h"
|
||||
71810 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
71820 (**)
|
||||
71830 PROCEDURE GARBAGE(ANOBJECT: OBJECTP); EXTERN;
|
||||
71840 PROCEDURE ERRORR(N :INTEGER); EXTERN ;
|
||||
71850 PROCEDURE CLPASC2(P1,P2: IPOINT; PROC: ASPROC); EXTERN;
|
||||
71860 (**)
|
||||
71870 (**)
|
||||
71880 (*+01() (*$X4*) ()+01*)
|
||||
71890 FUNCTION FUNC68(PB: ASNAKED; RF: OBJECTP): BOOLEAN; EXTERN;
|
||||
71900 (**)
|
||||
71910 (**)
|
||||
71920 PROCEDURE NEWLINE(RF:OBJECTP); EXTERN;
|
||||
71930 PROCEDURE NEWPAGE(RF:OBJECTP); EXTERN;
|
||||
71940 (**)
|
||||
71950 (**)
|
||||
71960 PROCEDURE TESTF(RF:OBJECTP;VAR F:OBJECTP);
|
||||
71970 BEGIN WITH RF^ DO
|
||||
71980 CASE SORT OF
|
||||
71990 REFN: F:=PVALUE;
|
||||
72000 REFSL1: F := INCPTR(ANCESTOR^.PVALUE, OFFSET-STRUCTCONST);
|
||||
72010 UNDEF: ERRORR(RDEREF);
|
||||
72020 NILL: ERRORR(RDEREFNIL)
|
||||
72030 END (*CASE*)
|
||||
72040 END;
|
||||
72050 (**)
|
||||
72060 (**)
|
||||
72070 FUNCTION GETPROC(RN: OBJECTP): ASNAKED;
|
||||
72080 VAR TEMP: NAKEGER;
|
||||
72090 BEGIN
|
||||
72100 (*+01() TEMP.ASNAK := 0; ()+01*)
|
||||
72110 WITH RN^, TEMP.NAK DO
|
||||
72120 IF SORT=ROUTINE THEN
|
||||
72130 BEGIN
|
||||
72140 STOWEDVAL := ASPTR(ENVCHAIN); POINTER := ASPTR(ORD(PROCBL));
|
||||
72150 IF FTST THEN GARBAGE(RN);
|
||||
72160 END
|
||||
72170 ELSE IF SORT=PASCROUT THEN
|
||||
72180 BEGIN
|
||||
72190 (*-01() STOWEDVAL := NIL; ()-01*)
|
||||
72200 PASCPARAMS := PPARAMS; PASCPROC := PPROCBL ;
|
||||
72210 POINTER := ASPTR(ORD(PASCADDR));
|
||||
72220 IF FTST THEN GARBAGE(RN);
|
||||
72230 END
|
||||
72240 ELSE ERRORR(RROUTIN);
|
||||
72250 GETPROC := TEMP.ASNAK;
|
||||
72260 END;
|
||||
72270 (**)
|
||||
72280 (**)
|
||||
72290 PROCEDURE SETREADMOOD(PCOV:OBJECTP);
|
||||
72300 BEGIN WITH PCOV^ DO
|
||||
72310 IF NOT([READMOOD]<=STATUS) THEN
|
||||
72320 BEGIN IF NOT([GETPOSS]<=POSSIBLES)
|
||||
72330 THEN ERRORR(NOREAD)
|
||||
72340 ELSE IF [OPENED,WRITEMOOD,BINMOOD,NOTSET]<=STATUS THEN
|
||||
72350 ERRORR(NOALTER)
|
||||
72360 ELSE BEGIN (* BOOK NOT INITIALISED *)
|
||||
72370 STATUS:=STATUS+[READMOOD]-[WRITEMOOD];
|
||||
72380 IF NOTRESET IN STATUS THEN
|
||||
72390 CLPASC2(ORD(PCOV), ORD(BOOK), DORESET)
|
||||
72400 END;
|
||||
72410 IF PFE IN STATUS THEN STATUS := STATUS-[PFE]+[LFE]
|
||||
72420 (*ONLY APPLIES TO ASSOCIATED FILES FOR NOW*)
|
||||
72430 END (* WITH *)
|
||||
72440 END;
|
||||
72450 (**)
|
||||
72460 (**)
|
||||
72470 PROCEDURE SETWRITEMOOD(PCOV:OBJECTP);
|
||||
72480 BEGIN
|
||||
72490 WITH PCOV^ DO
|
||||
72500 IF NOT([WRITEMOOD]<=STATUS) THEN
|
||||
72510 BEGIN IF NOT([PUTPOSS]<=POSSIBLES)
|
||||
72520 THEN ERRORR(NOWRITE)
|
||||
72530 ELSE IF [OPENED,READMOOD,BINMOOD,NOTSET]<=STATUS THEN
|
||||
72540 ERRORR(NOALTER)
|
||||
72550 ELSE BEGIN STATUS:=STATUS+[WRITEMOOD]-[READMOOD,LFE];
|
||||
72560 IF NOTRESET IN STATUS THEN
|
||||
72570 CLPASC2(ORD(PCOV), ORD(BOOK), DORESET)
|
||||
72580 END;
|
||||
72590 IF POFCPOS>PAGEBOUND THEN STATUS := STATUS+[PFE];
|
||||
72600 END (* WITH *)
|
||||
72610 END;
|
||||
72620 (**)
|
||||
72630 (**)
|
||||
72640 PROCEDURE SETCHARMOOD(PCOV:OBJECTP);
|
||||
72650 BEGIN WITH PCOV^ DO
|
||||
72660 IF NOT([CHARMOOD]<=STATUS) THEN
|
||||
72670 IF [OPENED,BINMOOD,NOTSET]<=STATUS
|
||||
72680 THEN ERRORR(NOSHIFT)
|
||||
72690 ELSE STATUS:=STATUS+[CHARMOOD]-[BINMOOD]
|
||||
72700 END;
|
||||
72710 (**)
|
||||
72720 (**)
|
||||
72730 PROCEDURE SETBINMOOD(PCOV:OBJECTP);
|
||||
72740 BEGIN WITH PCOV^ DO
|
||||
72750 IF NOT([BINMOOD]<=STATUS) THEN
|
||||
72760 IF NOT([BINPOSS]<=POSSIBLES)
|
||||
72770 THEN ERRORR(NOBIN)
|
||||
72780 ELSE IF [OPENED,CHARMOOD,NOTSET]<=STATUS
|
||||
72790 THEN ERRORR(NOSHIFT)
|
||||
72800 ELSE STATUS:=STATUS+[BINMOOD]-[CHARMOOD]
|
||||
72810 END;
|
||||
72820 (**)
|
||||
72830 (**)
|
||||
72840 (*******ENSURE ROUTINES*******)
|
||||
72850 (**)
|
||||
72860 (**)
|
||||
72870 PROCEDURE ENSSTATE(RF:OBJECTP;VAR F:OBJECTP;READING:STATUSSET);
|
||||
72880 BEGIN TESTF(RF,F);
|
||||
72890 WITH F^ DO
|
||||
72900 IF NOT (READING<=PCOVER^.STATUS) THEN
|
||||
72910 IF [OPENED]<=PCOVER^.STATUS
|
||||
72920 THEN BEGIN
|
||||
72930 IF [READMOOD]<=READING
|
||||
72940 THEN SETREADMOOD(PCOVER)
|
||||
72950 ELSE SETWRITEMOOD(PCOVER);
|
||||
72960 IF [CHARMOOD]<=READING
|
||||
72970 THEN SETCHARMOOD(PCOVER)
|
||||
72980 ELSE SETBINMOOD(PCOVER)
|
||||
72990 END
|
||||
73000 ELSE ERRORR(NOTOPEN)
|
||||
73010 END;
|
||||
73020 (**)
|
||||
73030 (**)
|
||||
73040 FUNCTION ENSLOGICALFILE(RF:OBJECTP;VAR F:OBJECTP):BOOLEAN;
|
||||
73050 (*MOOD OK, LOG FILE GENERALLY NOT*)
|
||||
73060 VAR OLD: STATUSSET; MENDED: BOOLEAN;
|
||||
73070 COV: OBJECTP;
|
||||
73080 BEGIN WITH F^ DO
|
||||
73090 BEGIN
|
||||
73100 COV := PCOVER; WITH COV^ DO
|
||||
73110 BEGIN
|
||||
73120 IF NOTINITIALIZED IN STATUS THEN
|
||||
73130 BEGIN
|
||||
73140 CLPASC2(ORD(COV), ORD(BOOK), DONEWLINE);
|
||||
73150 LOFCPOS := LOFCPOS-1;
|
||||
73160 END;
|
||||
73170 OLD := STATUS;
|
||||
73180 END;
|
||||
73190 IF LFE IN OLD THEN
|
||||
73200 BEGIN
|
||||
73210 IF LOGICALFILEMENDED=UNDEFIN THEN MENDED := FALSE
|
||||
73220 ELSE MENDED:=FUNC68(GETPROC(LOGICALFILEMENDED),RF);
|
||||
73230 ENSSTATE(RF,F,OLD);
|
||||
73240 IF MENDED THEN
|
||||
73250 ENSLOGICALFILE:=ENSLOGICALFILE(RF,F)
|
||||
73260 ELSE ENSLOGICALFILE := FALSE
|
||||
73270 END
|
||||
73280 ELSE ENSLOGICALFILE:=TRUE;
|
||||
73290 END
|
||||
73300 END;
|
||||
73310 (**)
|
||||
73320 (**)
|
||||
73330 FUNCTION ENSPHYSICALFILE(RF:OBJECTP;VAR F:OBJECTP):BOOLEAN;
|
||||
73340 (* MOOD OK, FILE GENERALLY NOT *)
|
||||
73350 VAR OLD: STATUSSET; MENDED,LFOK: BOOLEAN;
|
||||
73360 BEGIN WITH F^ DO
|
||||
73370 IF [LFE]<=PCOVER^.STATUS
|
||||
73380 THEN LFOK:=ENSLOGICALFILE(RF,F)
|
||||
73390 ELSE LFOK:=TRUE;
|
||||
73400 IF LFOK THEN WITH F^ DO
|
||||
73410 BEGIN OLD:=PCOVER^.STATUS;
|
||||
73420 IF [PFE]<=OLD THEN
|
||||
73430 BEGIN
|
||||
73440 IF PHYSICALFILEMENDED=UNDEFIN THEN MENDED := FALSE
|
||||
73450 ELSE MENDED:=FUNC68(GETPROC(PHYSICALFILEMENDED),RF);
|
||||
73460 ENSSTATE(RF,F,OLD);
|
||||
73470 IF MENDED
|
||||
73480 THEN ENSPHYSICALFILE:=ENSPHYSICALFILE(RF,F)
|
||||
73490 ELSE ERRORR(NOPHYSICAL);
|
||||
73500 END
|
||||
73510 ELSE ENSPHYSICALFILE:=TRUE
|
||||
73520 END
|
||||
73530 ELSE ENSPHYSICALFILE:=FALSE;
|
||||
73540 END;
|
||||
73550 (**)
|
||||
73560 (**)
|
||||
73570 FUNCTION ENSPAGE(RF:OBJECTP;VAR F:OBJECTP):BOOLEAN;
|
||||
73580 (* MOOD OK, PAGE GENERALLY NOT *)
|
||||
73590 VAR OLD: STATUSSET; PFOK,MENDED: BOOLEAN;
|
||||
73600 BEGIN WITH F^ DO
|
||||
73610 IF([PFE]<=PCOVER^.STATUS) OR ([LFE]<=PCOVER^.STATUS)
|
||||
73620 THEN PFOK:=ENSPHYSICALFILE(RF,F)
|
||||
73630 ELSE PFOK:=TRUE;
|
||||
73640 IF PFOK THEN WITH F^ DO
|
||||
73650 BEGIN OLD:=PCOVER^.STATUS;
|
||||
73660 IF [PAGEOVERFLOW]<=OLD THEN
|
||||
73670 BEGIN
|
||||
73680 IF PAGEMENDED=UNDEFIN THEN MENDED := FALSE
|
||||
73690 ELSE MENDED:=FUNC68(GETPROC(PAGEMENDED),RF);
|
||||
73700 ENSSTATE(RF,F,OLD);
|
||||
73710 IF NOT MENDED THEN NEWPAGE(RF);
|
||||
73720 ENSPAGE:=ENSPAGE(RF,F)
|
||||
73730 END
|
||||
73740 ELSE ENSPAGE:=TRUE
|
||||
73750 END
|
||||
73760 ELSE ENSPAGE:=FALSE;
|
||||
73770 END;
|
||||
73780 (**)
|
||||
73790 (**)
|
||||
73800 FUNCTION ENSLINE(RF:OBJECTP;VAR F:OBJECTP):BOOLEAN;
|
||||
73810 (* MOOD OK, LINE GENERALLY NOT *)
|
||||
73820 VAR PAGEOK,MENDED:BOOLEAN; OLD: STATUSSET;
|
||||
73830 BEGIN WITH F^ DO
|
||||
73840 IF [PAGEOVERFLOW]<=PCOVER^.STATUS
|
||||
73850 THEN PAGEOK:=ENSPAGE(RF,F)
|
||||
73860 ELSE PAGEOK:=TRUE;
|
||||
73870 IF PAGEOK THEN WITH F^ DO
|
||||
73880 BEGIN OLD:=PCOVER^.STATUS;
|
||||
73890 IF [LINEOVERFLOW]<=OLD THEN
|
||||
73900 BEGIN
|
||||
73910 IF LINEMENDED=UNDEFIN THEN MENDED := FALSE
|
||||
73920 ELSE MENDED:=FUNC68(GETPROC(LINEMENDED),RF);
|
||||
73930 ENSSTATE(RF,F,OLD);
|
||||
73940 IF NOT MENDED THEN NEWLINE(RF);
|
||||
73950 ENSLINE:=ENSLINE(RF,F)
|
||||
73960 END
|
||||
73970 ELSE ENSLINE:=TRUE
|
||||
73980 END
|
||||
73990 ELSE ENSLINE:=FALSE;
|
||||
74000 END;
|
||||
74010 (**)
|
||||
74020 (**)
|
||||
74030 (*-02()
|
||||
74040 BEGIN (*OF A68*)
|
||||
74050 END; (*OF A68*)
|
||||
74060 ()-02*)
|
||||
74070 (*+01()
|
||||
74080 BEGIN (*OF MAIN PROGRAM*)
|
||||
74090 END (* OF EVERYTHING *).
|
||||
74100 ()+01*)
|
13
lang/a68s/liba68s/entier.c
Normal file
13
lang/a68s/liba68s/entier.c
Normal file
|
@ -0,0 +1,13 @@
|
|||
int ENTIER(statlink, a)
|
||||
int *statlink ;
|
||||
register double a ;
|
||||
{
|
||||
int n ;
|
||||
n = ( int ) a ;
|
||||
return( n < 0 && ( double ) n != a ? n - 1 : n ) ;
|
||||
}
|
||||
int ROUN(statlink,a)
|
||||
int *statlink ;
|
||||
register double a ;
|
||||
{ return(ENTIER(statlink, a+0.5)) ;
|
||||
}
|
650
lang/a68s/liba68s/errorr.p
Normal file
650
lang/a68s/liba68s/errorr.p
Normal file
|
@ -0,0 +1,650 @@
|
|||
01000 #include "rundecs.h"
|
||||
01010 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
01020 (**)
|
||||
01030 PROCEDURE CL68(PB: ASNAKED; RF: OBJECTP); EXTERN;
|
||||
01040 (*+05() FUNCTION TIME: REAL; EXTERN; ()+05*)
|
||||
01050 PROCEDURE ABORT; EXTERN;
|
||||
01060 PROCEDURE ACLOSE(EFET: FETROOMP); EXTERN;
|
||||
01070 PROCEDURE GARBAGE (ANOBJECT: OBJECTP); EXTERN ;
|
||||
01080 (**)
|
||||
01090 (**)
|
||||
01100 FUNCTION CRSTRUCT(TEMPLATE: DPOINT): OBJECTP; EXTERN;
|
||||
01110 FUNCTION GETPROC(RN: OBJECTP): ASNAKED; EXTERN;
|
||||
01120 (*+02() FUNCTION GETLINENO :INTEGER; EXTERN; ()+02*)
|
||||
01130 (**)
|
||||
01140 (**)
|
||||
01150 PROCEDURE ERRORR(N :INTEGER); FORWARD;
|
||||
01160 (**)
|
||||
01170 (**)
|
||||
01180 FUNCTION RELSUP(REF: OBJECTP): UNDRESSP;
|
||||
01190 (*FINDS THE TRUE POINTER TO A REFERENCE VALUE*)
|
||||
01200 BEGIN
|
||||
01210 WITH REF^ DO
|
||||
01220 CASE SORT OF
|
||||
01230 REFSL1:
|
||||
01240 RELSUP := INCPTR(ANCESTOR, OFFSET);
|
||||
01250 REFSLN, UNDEF:
|
||||
01260 ERRORR(IDREL);
|
||||
01270 REF1, REF2, REFN, RECN, REFR, RECR, NILL:
|
||||
01280 RELSUP := ASPTR(ORD(REF));
|
||||
01290 CREF:
|
||||
01300 RELSUP := IPTR;
|
||||
01310 END;
|
||||
01320 IF FPTST(REF^) THEN GARBAGE(REF)
|
||||
01330 END;
|
||||
01340 (**)
|
||||
01350 (**)
|
||||
01360 PROCEDURE ERRORR (*N: INTEGER*);
|
||||
01370 TYPE BYTES = PACKED ARRAY [1..BYTESWIDTH] OF CHAR ;
|
||||
01380 VAR RANGE: PRANGE;
|
||||
01390 CURR: IPOINT;
|
||||
01400 XCASE: 0..15;
|
||||
01410 IDP: PIDBLK;
|
||||
01420 RP,RQ : RECORD CASE SEVERAL OF
|
||||
01430 1: ( PP : OBJECTPP ) ;
|
||||
01440 2: ( PI : ^ INTEGER ) ;
|
||||
01450 3: ( PR : ^ REAL ) ;
|
||||
01460 4: ( PB : ^ BYTES ) ;
|
||||
01470 5: ( PD : ^ INTEGER ) ;
|
||||
01480 0 , 6 , 7 , 8 , 9 , 10 : () ;
|
||||
01490 END ;
|
||||
01500 INT: INTEGER ;
|
||||
01510 POINT: OBJECTP ;
|
||||
01520 PI1: ^INTEGER ;
|
||||
01530 RANGECOUNT :INTEGER ; DECPOINT :OFFSETRANGE ; COUNT :INTEGER ;
|
||||
01540 LOOPTYP : INTEGER ;
|
||||
01550 THISWAS68: BOOLEAN ;
|
||||
01560 PFET: FETROOMP;
|
||||
01570 (*+02() LOCALRANGE :BOOLEAN ; ()+02*)
|
||||
01580 (*+54() EXCEPT: UNDRESSP; IB: IPOINT; RG: PRANGE; ()+54*)
|
||||
01590 PROCEDURE PRINTREAL(X: REAL);
|
||||
01600 VAR RTG: REALTEGER;
|
||||
01610 BEGIN WITH RTG DO
|
||||
01620 BEGIN
|
||||
01630 REA := X;
|
||||
01640 IF (INT=INTUNDEF) (*+05()OR (INT2=INTUNDEF)()+05*) THEN WRITE(OUTPUT, ' UNDEFINED')
|
||||
01650 ELSE WRITE(OUTPUT, X);
|
||||
01660 END
|
||||
01670 END;
|
||||
01680 PROCEDURE PRINTSINGLE(II :INTEGER);
|
||||
01690 (*+01()
|
||||
01700 VAR RTG: PACKED RECORD CASE SEVERAL OF
|
||||
01710 1: ( INT : INTEGER ) ;
|
||||
01720 2: ( REA : REAL ) ;
|
||||
01730 3: ( SIGN : BOOLEAN ; EXP : 0..3777B ; MANT : 0..7777777777777777B )
|
||||
01740 END ;
|
||||
01750 BEGIN WITH RTG DO
|
||||
01760 BEGIN
|
||||
01770 INT := II;
|
||||
01780 IF II=INTUNDEF THEN WRITE('UNDEFINED')
|
||||
01790 ELSE IF EXP=ORD(SIGN)*3777B THEN
|
||||
01800 BEGIN WRITE(II:1);
|
||||
01810 IF (II<64) AND (II>=0) THEN WRITE(' (', CHR(II), ')');
|
||||
01820 END
|
||||
01830 ELSE WRITE(REA)
|
||||
01840 END
|
||||
01850 END;
|
||||
01860 ()+01*)
|
||||
01870 (*+02()
|
||||
01880 BEGIN
|
||||
01890 IF II = INTUNDEF THEN WRITE( OUTPUT , 'UNDEFINED' )
|
||||
01900 ELSE
|
||||
01910 BEGIN
|
||||
01920 WRITE( OUTPUT , II : 1 ) ;
|
||||
01930 IF ( II >= 32 ) AND ( II < 128 ) THEN WRITE( OUTPUT , ' (' , CHR( II ) , ')' )
|
||||
01940 END
|
||||
01950 END ;
|
||||
01960 ()+02*)
|
||||
01970 (*+05()
|
||||
01980 BEGIN
|
||||
01990 IF II = INTUNDEF THEN WRITE( OUTPUT , 'UNDEFINED' )
|
||||
02000 ELSE
|
||||
02010 BEGIN
|
||||
02020 WRITE( OUTPUT , II : 1 ) ;
|
||||
02030 IF ( II >= 32 ) AND ( II < 128 ) THEN WRITE( OUTPUT , ' (' , CHR( II ) , ')' )
|
||||
02040 END
|
||||
02050 END ;
|
||||
02060 ()+05*)
|
||||
02070 PROCEDURE PRINTDOUBLE( LV : A68LONG ) ;
|
||||
02080 (*+01()
|
||||
02090 BEGIN
|
||||
02100 END ;
|
||||
02110 ()+01*)
|
||||
02120 (*+05()
|
||||
02130 BEGIN
|
||||
02140 PRINTREAL(LV);
|
||||
02150 END ;
|
||||
02160 ()+05*)
|
||||
02170 (*+02()
|
||||
02180 (*+12()
|
||||
02190 BEGIN
|
||||
02200 PRINTREAL(LV);
|
||||
02210 END ;
|
||||
02220 ()+12*)
|
||||
02230 (*+13()
|
||||
02240 BEGIN
|
||||
02250 PRINTREAL(LV);
|
||||
02260 END;
|
||||
02270 ()+13*)
|
||||
02280 ()+02*)
|
||||
02290 PROCEDURE PRINTVAL(ANOBJECT :OBJECTP);FORWARD;
|
||||
02300 PROCEDURE PRINTBIGD(ANOBJECT :OBJECTP; TEMPLATE :DPOINT; OFF :INTEGER);
|
||||
02310 VAR I, J :INTEGER;
|
||||
02320 PROCEDURE PRINTD(ANOBJECT :OBJECTP; TEMPLATE :DPOINT);
|
||||
02330 LABEL 9;
|
||||
02340 VAR TEMPOS, I :INTEGER;
|
||||
02350 BEGIN
|
||||
02360 RQ.PI := INCPTR(ANOBJECT, OFF) ;
|
||||
02370 WITH RQ DO
|
||||
02380 IF ORD(TEMPLATE)<=MAXSIZE THEN (*NOT STRUCT*)
|
||||
02390 IF ORD(TEMPLATE)=0 THEN (*DRESSED*)
|
||||
02400 IF PP ^ ^.SORT IN [REF1,REF2,CREF,REFSL1] THEN
|
||||
02410 WRITE(OUTPUT , 'REF #', ORD( RELSUP(PP ^) ):(*-01()1()-01*)(*+01()6 OCT()+01*) )
|
||||
02420 ELSE PRINTVAL(PP ^)
|
||||
02430 (*-01() ELSE IF ORD(TEMPLATE)>SZINT THEN PRINTDOUBLE(PR^) ()-01*)
|
||||
02440 ELSE PRINTSINGLE( PI ^ )
|
||||
02450 ELSE (*PART OF STRUCT*)
|
||||
02460 BEGIN
|
||||
02470 TEMPOS := 1;
|
||||
02480 WHILE TEMPLATE^[TEMPOS]>=0 DO
|
||||
02490 BEGIN
|
||||
02500 IF TEMPLATE^[TEMPOS]=OFF THEN
|
||||
02510 BEGIN
|
||||
02520 IF PP ^ ^.SORT IN [REF1,CREF,REFSL1] THEN
|
||||
02530 WRITE(OUTPUT , 'REF #', ORD( RELSUP(PP ^) ):(*-01()1()-01*)(*+01()6 OCT()+01*) )
|
||||
02540 ELSE PRINTVAL(PP ^);
|
||||
02550 OFF := OFF+SZADDR;
|
||||
02560 GOTO 9
|
||||
02570 END;
|
||||
02580 TEMPOS := TEMPOS+1
|
||||
02590 END;
|
||||
02600 INT := ORD( PI^ ) ;
|
||||
02610 IF INT = INTUNDEF THEN
|
||||
02620 BEGIN
|
||||
02630 WRITE( OUTPUT , 'UNDEFINED' ) ;
|
||||
02640 OFF := OFF + SZINT
|
||||
02650 END
|
||||
02660 ELSE CASE TEMPLATE^[TEMPOS+1+J] OF
|
||||
02670 0: (*NO ACTION*);
|
||||
02680 1: BEGIN WRITE( OUTPUT , PI ^ : 1 ); OFF := OFF+SZINT END;
|
||||
02690 3: BEGIN WRITE( OUTPUT , PR ^ ); OFF := OFF+SZREAL END;
|
||||
02700 5: BEGIN
|
||||
02710 PRINTREAL(PR^); WRITE(OUTPUT, ' I'); OFF := OFF+SZREAL;
|
||||
02720 PR := INCPTR(ANOBJECT, OFF);
|
||||
02730 PRINTREAL(PR^);
|
||||
02740 OFF := OFF+SZREAL;
|
||||
02750 END;
|
||||
02760 7: BEGIN WRITE(OUTPUT , '"', CHR( PI ^ ) , '"'); OFF := OFF+SZINT END;
|
||||
02770 9: BEGIN
|
||||
02780 (*+01() IF PI^<0 THEN ()+01*)
|
||||
02790 (*-01() IF PI^<>0 THEN ()-01*)
|
||||
02800 WRITE(OUTPUT , '.TRUE') ELSE WRITE(OUTPUT , '.FALSE'); OFF := OFF+SZINT
|
||||
02810 END;
|
||||
02820 10: BEGIN WRITE( OUTPUT , PI ^ : (*-01()1()-01*)(*+01()20 OCT()+01*) ); OFF := OFF+SZINT END;
|
||||
02830 11: BEGIN
|
||||
02840 (*+05() RQ.PI := ASPTR( ORD( PI ) * 2 ) ; ()+05*)
|
||||
02850 WRITE( OUTPUT , '"', (*+05()RQ.()+05*)PB ^ , '"') ;
|
||||
02860 OFF := OFF + SZINT
|
||||
02870 END ;
|
||||
02880 12: BEGIN WRITE( OUTPUT , 'PROC'); OFF := OFF+1; OFF := OFF+SZADDR END;
|
||||
02890 END;
|
||||
02900 9: J := J+1;
|
||||
02910 END
|
||||
02920 END;
|
||||
02930 BEGIN (* OF PRINTBIGD *)
|
||||
02940 J := 0; I := OFF;
|
||||
02950 IF ORD(TEMPLATE)>MAXSIZE THEN (*COMPLETE STRUCT*)
|
||||
02960 BEGIN WRITE( OUTPUT , '(');
|
||||
02970 WHILE OFF-I<TEMPLATE^[0] DO
|
||||
02980 BEGIN IF J<>0 THEN WRITE( OUTPUT , ', '); PRINTD(ANOBJECT, TEMPLATE) END;
|
||||
02990 WRITE( OUTPUT , ')')
|
||||
03000 END
|
||||
03010 ELSE PRINTD(ANOBJECT, TEMPLATE)
|
||||
03020 END;
|
||||
03030 PROCEDURE PRINTVAL;
|
||||
03040 VAR I, K :INTEGER;
|
||||
03050 ELEMENTS :OBJECTP;
|
||||
03060 BEGIN (*OF PRINTVAL*)
|
||||
03070 WITH ANOBJECT^ DO
|
||||
03080 CASE SORT OF
|
||||
03090 STRING:
|
||||
03100 BEGIN
|
||||
03110 WRITE( OUTPUT , ' STRING "');
|
||||
03120 FOR I := 1 TO STRLENGTH DO WRITE( OUTPUT , CHARVEC[I]);
|
||||
03130 WRITE( OUTPUT , '"')
|
||||
03140 END;
|
||||
03150 ROUTINE:
|
||||
03160 BEGIN WRITE( OUTPUT , ' PROC ');
|
||||
03170 WRITE( OUTPUT , PROCBL^.ROUTNAME.ALF, ' ', ENVCHAIN:(*-01()1()-01*)(*+01()6 OCT()+01*) ) END;
|
||||
03180 STRUCT:
|
||||
03190 BEGIN WRITE( OUTPUT , ' STRUCT');
|
||||
03200 PRINTBIGD(INCPTR(ANOBJECT, STRUCTCONST), DBLOCK, 0)
|
||||
03210 END;
|
||||
03220 COVER:
|
||||
03230 BEGIN
|
||||
03240 IF (OPENED IN STATUS) AND NOT ASSOC THEN
|
||||
03250 BEGIN
|
||||
03260 ACLOSE(BOOK);
|
||||
03270 IF NOT(STARTUP IN STATUS) THEN BEGIN PFET := BOOK;
|
||||
03280 DISPOSE(PFET) END;
|
||||
03290 STATUS := STATUS-[OPENED];
|
||||
03300 END;
|
||||
03310 WRITE( OUTPUT , ' (', POFCPOS:1, ',', LOFCPOS:1, ',', COFCPOS:1, ')');
|
||||
03320 END;
|
||||
03330 REF1:
|
||||
03340 PRINTSINGLE(VALUE);
|
||||
03350 (*-01() REF2:
|
||||
03360 PRINTDOUBLE( LONGVALUE ) ; ()-01*)
|
||||
03370 REFSL1:
|
||||
03380 PRINTBIGD(ANCESTOR^.PVALUE, DBLOCK, OFFSET);
|
||||
03390 CREF:
|
||||
03400 PRINTSINGLE(IPTR^.FIRSTWORD);
|
||||
03410 RECN, REFN:
|
||||
03420 WRITE( OUTPUT , ' REF #', ORD(ANOBJECT):(*-01()1()-01*)(*+01()6 OCT()+01*) , ' TO STRUCT');
|
||||
03430 REFR, RECR:
|
||||
03440 WRITE( OUTPUT , ' REF #', ORD(ANOBJECT):(*-01()1()-01*)(*+01()6 OCT()+01*) , ' TO ARRAY');
|
||||
03450 REFSLN:
|
||||
03460 WRITE( OUTPUT , ' REF TO SLICE');
|
||||
03470 NILL:
|
||||
03480 WRITE( OUTPUT , ' NIL');
|
||||
03490 UNDEF:
|
||||
03500 WRITE( OUTPUT , ' UNDEFINED');
|
||||
03510 END;
|
||||
03520 END; (* OF PRINTVAL *)
|
||||
03530 PROCEDURE PRINTMULT(ANOBJECT:OBJECTP);
|
||||
03540 VAR I, K :INTEGER;
|
||||
03550 ELEMENTS:OBJECTP;
|
||||
03560 BEGIN
|
||||
03570 WITH ANOBJECT^ DO
|
||||
03580 BEGIN
|
||||
03590 IF SORT<>REFSLN THEN BEGIN WRITE( OUTPUT , ' ARRAY '); ELEMENTS := PVALUE END
|
||||
03600 ELSE BEGIN WRITE( OUTPUT , ' SLICE '); ELEMENTS := ANCESTOR^.PVALUE END;
|
||||
03610 WRITE( OUTPUT , '[');
|
||||
03620 FOR I := ROWS DOWNTO 0 DO WITH DESCVEC[I] DO
|
||||
03630 BEGIN WRITE( OUTPUT , LI:1, ':', UI:1); IF I>0 THEN WRITE( OUTPUT , ', ') END;
|
||||
03640 WRITE( OUTPUT , ']');
|
||||
03650 IF ROWS=0 THEN (*1 DIMENSION ONLY*) WITH DESCVEC[0] DO
|
||||
03660 BEGIN
|
||||
03670 FOR I := LI TO LI+2 DO IF I<=UI THEN
|
||||
03680 BEGIN WRITELN( OUTPUT ) ; WRITE( OUTPUT , ' ');
|
||||
03690 PRINTBIGD(INCPTR(ELEMENTS, DI*I-LBADJ), MDBLOCK, 0) END;
|
||||
03700 IF UI-LI>5 THEN
|
||||
03710 BEGIN WRITELN( OUTPUT ); WRITE( OUTPUT , ' ...'); K := UI-2 END
|
||||
03720 ELSE K := LI + 3 ;
|
||||
03730 FOR I := K TO UI DO
|
||||
03740 BEGIN WRITELN( OUTPUT ); WRITE( OUTPUT , ' ');
|
||||
03750 PRINTBIGD(INCPTR(ELEMENTS, DI*I-LBADJ), MDBLOCK, 0) END
|
||||
03760 END
|
||||
03770 END
|
||||
03780 END;
|
||||
03790 BEGIN (*OF ERROR*)
|
||||
03800 (*+02()LOCALRANGE := TRUE;()+02*)
|
||||
03810 CURR := DYNAMIC(ME);
|
||||
03820 (*+54()
|
||||
03830 IB := CURR;
|
||||
03840 REPEAT
|
||||
03850 SETMYSTATIC(IB);
|
||||
03860 IF ISA68(IB) THEN
|
||||
03870 BEGIN
|
||||
03880 RG := FIRSTRG.RIBOFFSET;
|
||||
03890 WHILE (RG^.FIRSTW.TRACESAVE=NIL) AND (RG^.RIBOFFSET<>FIRSTRG.RIBOFFSET) DO
|
||||
03900 RG := RG^.RIBOFFSET;
|
||||
03910 END;
|
||||
03920 IB := DYNAMIC(IB);
|
||||
03930 UNTIL (SCOPE=1) OR (RG^.FIRSTW.TRACESAVE<>NIL);
|
||||
03940 WITH RG^ DO
|
||||
03950 IF (FIRSTW.TRACESAVE<>NIL) AND (N<>0) THEN
|
||||
03960 BEGIN
|
||||
03970 SETMYSTATIC(CURR);
|
||||
03980 EXCEPT := INCPTR(CRSTRUCT(EXCEPTDB), STRUCTCONST);
|
||||
03990 EXCEPT^.FIRSTWORD := N;
|
||||
04000 CL68(GETPROC(FIRSTW.TRACESAVE), INCPTR(EXCEPT, -STRUCTCONST));
|
||||
04010 END;
|
||||
04020 ()+54*)
|
||||
04030 WRITELN( OUTPUT );
|
||||
04040 WRITELN( OUTPUT , ' RUN-TIME ERROR');
|
||||
04050 WRITE( OUTPUT , ' ');
|
||||
04060 IF (N>56) OR (N<0) THEN WRITE( OUTPUT , (*+54()'USER DEFINED ',()+54*) 'ERROR NO. ', N:1)
|
||||
04070 ELSE
|
||||
04080 CASE N OF
|
||||
04090 (*+05()
|
||||
04100 -16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1: (* SYSTEM INTERRUPTS *)
|
||||
04110 WRITE( OUTPUT , 'SIGNAL NUMBER ' , -N:1 ) ;
|
||||
04120 ()+05*)
|
||||
04130 0: (*NO FURTHER ACTION*);
|
||||
04140 1: (*RASSIG*)
|
||||
04150 WRITE( OUTPUT , 'ASSIGNATION TO UNDEFINED NAME');
|
||||
04160 2: (*RSEL*)
|
||||
04170 WRITE( OUTPUT , 'SELECTION FROM UNDEFINED STRUCTURE');
|
||||
04180 3: (*RDEREF*)
|
||||
04190 WRITE( OUTPUT , 'DEREFERENCING UNDEFINED NAME');
|
||||
04200 4: (*RASSIGNIL*)
|
||||
04210 WRITE( OUTPUT , 'ASSIGNATION TO .NIL');
|
||||
04220 5: (*RSELNIL*)
|
||||
04230 WRITE( OUTPUT , 'SELECTION FROM .NIL');
|
||||
04240 6: (*RDEREFNIL*)
|
||||
04250 WRITE( OUTPUT , 'DEREFERENCING .NIL');
|
||||
04260 7: (*IDREL*)
|
||||
04270 WRITE( OUTPUT , 'IDENTITY-RELATION INVOLVING UNDEFINED NAME, OR NAME OF SLICE');
|
||||
04280 8: (*RPOWNEG*)
|
||||
04290 WRITE( OUTPUT , 'RAISING AN .INT TO A -VE POWER');
|
||||
04300 9: (*RBYTESPACK*)
|
||||
04310 WRITE( OUTPUT , 'BYTESPACK ON .STRING LONGER THAN BYTES WIDTH');
|
||||
04320 13: (*RCLOWER*)
|
||||
04330 WRITE( OUTPUT , 'UNDEFINED LOWER-BOUND IN ACTUAL-DECLARER');
|
||||
04340 14: (*RCUPPER*)
|
||||
04350 WRITE( OUTPUT , 'UNDEFINED UPPER-BOUND IN ACTUAL-DECLARER');
|
||||
04360 15: (*RLWUPB*)
|
||||
04370 WRITE( OUTPUT , 'LEFT OPERAND OF .LWB OR .UPB OUT OF RANGE');
|
||||
04380 16: (*RSL1ERROR*)
|
||||
04390 WRITE( OUTPUT , 'SUBSCRIPT (OR LOWER-BOUND) TOO LOW');
|
||||
04400 17: (*RSL2ERROR*)
|
||||
04410 WRITE( OUTPUT , 'SUBSCRIPT (OR UPPER-BOUND) TOO HIGH');
|
||||
04420 18: (*RSLICE*)
|
||||
04430 WRITE( OUTPUT , 'SLICE FROM UNDEFINED ARRAY');
|
||||
04440 19: (*RSLICENIL*)
|
||||
04450 WRITE( OUTPUT , 'SLICE FROM .NIL');
|
||||
04460 20: (*RMULASS*)
|
||||
04470 WRITE( OUTPUT , 'BOUNDS MISMATCH IN ASSIGNATION OF ARRAY');
|
||||
04480 21: (*RROUTN*)
|
||||
04490 WRITE( OUTPUT , 'CALL OF UNDEFINED ROUTINE');
|
||||
04500 22: (*RCHARERROR*)
|
||||
04510 WRITE( OUTPUT , 'PRINTING NON-EXISTENT .CHAR');
|
||||
04520 23: (*RSCOPE*)
|
||||
04530 WRITE( OUTPUT , 'SCOPE VIOLATION');
|
||||
04540 24: (*RARG*)
|
||||
04550 WRITE( OUTPUT , 'ARGUMENT OF ZERO IS IMPOSSIBLE');
|
||||
04560 RDUMMY:
|
||||
04570 WRITE( OUTPUT , 'FEATURE NOT IMPLEMENTED YET');
|
||||
04580 NOREAD,NOWRITE,NOBIN,NORESET,NOSET,NOESTAB:
|
||||
04590 WRITE( OUTPUT , 'IMPOSSIBLE TRANSPUT OPERATION');
|
||||
04600 NOTOPEN:
|
||||
04610 WRITE( OUTPUT , 'FILE NOT OPEN');
|
||||
04620 NOPHYSICAL:
|
||||
04630 WRITE( OUTPUT , 'PHYSICAL END OF FILE REACHED');
|
||||
04640 NOLOGICAL:
|
||||
04650 WRITE( OUTPUT , 'LOGICAL END OF FILE REACHED');
|
||||
04660 NOMOOD:
|
||||
04670 WRITE( OUTPUT , 'NOT KNOWN WHETHER READING OR WRITING');
|
||||
04680 POSMIN:
|
||||
04690 WRITE( OUTPUT , '(P,L,C) < (1,1,1)');
|
||||
04700 POSMAX:
|
||||
04710 WRITE( OUTPUT , '(P,L,C) > PHYSICAL FILE SIZE');
|
||||
04720 SMALLLINE:
|
||||
04730 WRITE( OUTPUT , 'LINE TOO SHORT FOR VALUE');
|
||||
04740 WRONGCHAR:
|
||||
04750 WRITE( OUTPUT , 'UNACCEPTABLE CHARACTER READ');
|
||||
04760 NODIGIT:
|
||||
04770 WRITE( OUTPUT , 'DIGIT EXPECTED');
|
||||
04780 WRONGVAL:
|
||||
04790 WRITE( OUTPUT , 'VALUE OUT OF RANGE');
|
||||
04800 WRONGMULT:
|
||||
04810 WRITE( OUTPUT , 'LOWER BOUND OF ASSOCIATED ARRAY /= 1');
|
||||
04820 NOALTER,NOSHIFT:
|
||||
04830 WRITE( OUTPUT , 'ILLEGAL CHANGE TO/FROM BINARY TRANSPUT');
|
||||
04840 END;
|
||||
04850 WRITE( OUTPUT , ', DETECTED IN ');
|
||||
04860 THISWAS68 := FALSE ;
|
||||
04870 REPEAT
|
||||
04880 SETMYSTATIC(CURR);
|
||||
04890 IF ISA68(CURR) THEN
|
||||
04900 BEGIN
|
||||
04910 THISWAS68 := TRUE ;
|
||||
04920 (*+02()IF LOCALRANGE THEN
|
||||
04930 BEGIN
|
||||
04940 WRITE(OUTPUT, 'LINE ', GETLINENO:1);
|
||||
04950 LOCALRANGE := FALSE;
|
||||
04960 END
|
||||
04970 ELSE ()+02*)
|
||||
04980 WRITE( OUTPUT , 'LINE ', LINENO:1);
|
||||
04990 IF SCOPE<>1 THEN
|
||||
05000 WRITELN( OUTPUT ,' OF PROCEDURE ', PROCBL^.ROUTNAME.ALF)
|
||||
05010 ELSE WRITELN( OUTPUT , ' OF MAIN PROGRAM');
|
||||
05020 RANGE := FIRSTRG.RIBOFFSET; RANGECOUNT := 0;
|
||||
05030 REPEAT WITH RANGE^ DO
|
||||
05040 WITH FIRSTW , RP DO
|
||||
05050 BEGIN
|
||||
05060 WRITELN( OUTPUT );
|
||||
05070 IF RIBOFFSET<>FIRSTRG.RIBOFFSET THEN
|
||||
05080 BEGIN WRITE( OUTPUT , ' RANGE ', RANGECOUNT:2); IDP := RGIDBLK;
|
||||
05090 (*-41() PP := INCPTR ( RANGE , RGCONST ) ; ()-41*)
|
||||
05100 (*+41() PP := ASPTR ( ORD( RANGE ) ) ; ()+41*)
|
||||
05110 END
|
||||
05120 ELSE IF SCOPE<>1 THEN
|
||||
05130 BEGIN WRITE( OUTPUT , ' PARAMETERS'); IDP := RGIDBLK;
|
||||
05140 (*-41() PP :=ASPTR(CURR-PARAMOFFSET-PROCBL^.PARAMS) ()-41*)
|
||||
05150 (*+41() PP :=ASPTR((*+02()ARGBASE()+02*)(CURR)-PARAMOFFSET+PROCBL^.PARAMS) ()+41*)
|
||||
05160 END
|
||||
05170 ELSE IDP := NIL;
|
||||
05180 IF IDP<>NIL THEN
|
||||
05190 BEGIN
|
||||
05200 RANGECOUNT := RANGECOUNT-1;
|
||||
05210 (*-41() WHILE ORD ( PP ) < ORD ( RGNEXTFREE ) DO ()-41*)
|
||||
05220 (*+41() WHILE ORD ( PP ) > ORD ( RGLASTUSED ) DO ()+41*)
|
||||
05230 BEGIN
|
||||
05240 IDP := INCPTR(IDP, -SZIDBLOCK);
|
||||
05250 WITH IDP ^ DO
|
||||
05260 BEGIN
|
||||
05270 (*+41()
|
||||
05280 IF IDSIZE <> 0 THEN
|
||||
05290 PP := INCPTR( PP , - IDSIZE )
|
||||
05300 ELSE
|
||||
05310 PP := INCPTR( PP , - SZADDR ) ;
|
||||
05320 ()+41*)
|
||||
05330 WRITELN( OUTPUT ); WRITE( OUTPUT , ' ', ALF);
|
||||
05340 IF XMODE>=16 THEN
|
||||
05350 BEGIN WRITE( OUTPUT , ' LOC'); XCASE := XMODE-16 END
|
||||
05360 ELSE BEGIN WRITE( OUTPUT , ' '); XCASE := XMODE END;
|
||||
05370 INT := ORD (PI^) ;
|
||||
05380 IF INT=INTUNDEF THEN WRITE( OUTPUT , ' UNDEFINED')
|
||||
05390 ELSE CASE XCASE OF
|
||||
05400 0: (*REF*)
|
||||
05410 WITH PP ^ ^ DO
|
||||
05420 CASE SORT OF
|
||||
05430 REF1, REF2, CREF, REFSL1:
|
||||
05440 BEGIN
|
||||
05450 WRITE( OUTPUT , ' REF #', ORD(RELSUP(PP ^)):(*-01()1()-01*)(*+01()6 OCT()+01*) , ' TO ') ;
|
||||
05460 PRINTVAL(PP ^)
|
||||
05470 END;
|
||||
05480 RECN, REFN:
|
||||
05490 BEGIN
|
||||
05500 WRITE( OUTPUT , ' REF #', ORD(PP ^):(*-01()1()-01*)(*+01()6 OCT()+01*) , ' TO ') ;
|
||||
05510 PRINTVAL(PVALUE)
|
||||
05520 END;
|
||||
05530 RECR, REFR:
|
||||
05540 BEGIN
|
||||
05550 WRITE( OUTPUT , ' REF #', ORD(PP ^):(*-01()1()-01*)(*+01()6 OCT()+01*) , ' TO ') ;
|
||||
05560 PRINTMULT(PP ^)
|
||||
05570 END;
|
||||
05580 REFSLN:
|
||||
05590 BEGIN WRITE( OUTPUT , ' REF TO '); PRINTMULT(PP ^) END;
|
||||
05600 NILL:
|
||||
05610 WRITE( OUTPUT , ' REF NIL');
|
||||
05620 UNDEF:
|
||||
05630 WRITE( OUTPUT , ' REF UNDEFINED');
|
||||
05640 END;
|
||||
05650 1: (*INT*)
|
||||
05660 WRITE( OUTPUT , ' INT ', PI ^ :1);
|
||||
05670 3: (*REAL*)
|
||||
05680 WRITE( OUTPUT , ' REAL ', PR ^ );
|
||||
05690 5: (*COMPL*)
|
||||
05700 BEGIN
|
||||
05710 IF XMODE>=16 THEN POINT := PP ^ ^.PVALUE ELSE POINT := PP ^ ;
|
||||
05720 WITH POINT ^ DO
|
||||
05730 BEGIN WRITE(OUTPUT, ' COMPL '); PRINTREAL(RE); WRITE(OUTPUT, ' I'); PRINTREAL(IM); END
|
||||
05740 END;
|
||||
05750 7: (*CHAR*)
|
||||
05760 WRITE( OUTPUT , ' CHAR "', CHR( PI ^ ) , '"');
|
||||
05770 8: (*STRING*)
|
||||
05780 IF PP^=UNDEFIN THEN WRITE( OUTPUT , ' STRING ""')
|
||||
05790 ELSE PRINTVAL(PP^);
|
||||
05800 9: (*BOOL*)
|
||||
05810 (*+01() IF PI^<0 THEN ()+01*)
|
||||
05820 (*-01() IF PI^<>0 THEN ()-01*)
|
||||
05830 WRITE( OUTPUT , ' BOOL .TRUE') ELSE WRITE( OUTPUT , ' BOOL .FALSE');
|
||||
05840 10: (*BITS*)
|
||||
05850 WRITE( OUTPUT , ' BITS ', PI ^ : (*-01()1()-01*)(*+01()20 OCT()+01*) );
|
||||
05860 11: (*BYTES*)
|
||||
05870 BEGIN
|
||||
05880 (*+05() RQ.PI := ASPTR( ORD( PI ) * 2 ) ; ()+05*)
|
||||
05890 WRITE( OUTPUT , ' BYTES "', (*+05()RQ.()+05*)PB ^ , '"' )
|
||||
05900 END ;
|
||||
05910 12: (*PROC*)
|
||||
05920 PRINTVAL(PP ^);
|
||||
05930 13: (*STRUCT*)
|
||||
05940 BEGIN IF XMODE>=16 THEN POINT := PP ^ ^.PVALUE ELSE POINT := PP ^ ; PRINTVAL(POINT) END;
|
||||
05950 14: (*ROW*)
|
||||
05960 PRINTMULT(PP ^);
|
||||
05970 END ;
|
||||
05980 (*-41()
|
||||
05990 IF IDSIZE<>0 THEN
|
||||
06000 PP := INCPTR ( PP , IDSIZE )
|
||||
06010 ELSE
|
||||
06020 PP := INCPTR ( PP , SZADDR )
|
||||
06030 ()-41*)
|
||||
06040 END
|
||||
06050 END;
|
||||
06060 END;
|
||||
06070 IF (RIBOFFSET=FIRSTRG.RIBOFFSET) AND (SCOPE <> 1) THEN (*PARAMS*)
|
||||
06080 PP:=(*+41() ASPTR(ORD(RANGE)) ()+41*)
|
||||
06090 (*-41() INCPTR(RANGE,RGCONST) ()-41*)
|
||||
06100 ELSE
|
||||
06110 PP := (*+41() INCPTR(RGLASTUSED, -SZINT ); ()+41*)
|
||||
06120 (*-41() ASPTR(ORD(RGNEXTFREE)) ; ()-41*)
|
||||
06130 LOOPTYP := PD^ ;
|
||||
06140 FOR COUNT := 1 TO LOOPCOUNT DO
|
||||
06150 BEGIN
|
||||
06160 WRITELN( OUTPUT ) ;
|
||||
06170 CASE LOOPTYP OF
|
||||
06180 1: BEGIN
|
||||
06190 PI1 := INCPTR( PI , 2 * STACKSZINT ) ;
|
||||
06200 WRITELN( OUTPUT , '.FOR ', PI1 ^ :1);
|
||||
06210 PI1 := INCPTR( PI , STACKSZINT ) ;
|
||||
06220 WRITELN( OUTPUT , '.BY ', PI1 ^ :1);
|
||||
06230 PI1 := INCPTR( PI , 3 * STACKSZINT ) ;
|
||||
06240 WRITE ( OUTPUT , '.TO ', PI1 ^ :1);
|
||||
06250 PD := INCPTR( PD , 4 * STACKSZINT )
|
||||
06260 END;
|
||||
06270 2: BEGIN
|
||||
06280 PI1 := INCPTR( PI , STACKSZINT ) ;
|
||||
06290 WRITELN( OUTPUT , '.FOR ', PI1 ^ :1);
|
||||
06300 PI1 := INCPTR( PI , 2 * STACKSZINT ) ;
|
||||
06310 WRITE ( OUTPUT , '.TO ', PI1 ^ :1);
|
||||
06320 PD := INCPTR( PD , 3 * STACKSZINT )
|
||||
06330 END;
|
||||
06340 3: BEGIN
|
||||
06350 PI1 := INCPTR( PI , 2 * STACKSZINT ) ;
|
||||
06360 WRITELN( OUTPUT , '.FOR ', PI1 ^ :1);
|
||||
06370 PI1 := INCPTR( PI , STACKSZINT ) ;
|
||||
06380 WRITE ( OUTPUT , '.BY ', PI1 ^ :1);
|
||||
06390 PD := INCPTR( PD , 3 * STACKSZINT )
|
||||
06400 END;
|
||||
06410 4: BEGIN
|
||||
06420 PI1 := INCPTR( PI , STACKSZINT ) ;
|
||||
06430 WRITE ( OUTPUT , '.FOR ', PI1 ^ :1);
|
||||
06440 PD := INCPTR( PD , 2 * STACKSZINT )
|
||||
06450 END
|
||||
06460 END;
|
||||
06470 LOOPTYP := PD^
|
||||
06480 END;
|
||||
06490 RANGE := RIBOFFSET;
|
||||
06500 WRITELN( OUTPUT )
|
||||
06510 END
|
||||
06520 UNTIL RANGE=FIRSTRG.RIBOFFSET;
|
||||
06530 WRITELN( OUTPUT );
|
||||
06540 WRITE( OUTPUT , ' WHICH WAS CALLED FROM ')
|
||||
06550 END
|
||||
06560 ELSE THISWAS68 := FALSE ;
|
||||
06570 CURR := DYNAMIC(CURR);
|
||||
06580 UNTIL (SCOPE=1) AND THISWAS68 ;
|
||||
06590 WRITELN( OUTPUT , 'STANDARD-PRELUDE');
|
||||
06600 (*+01()
|
||||
06610 WRITELN(' CPU ', (CPUCLOCK+CLOCK)/1000:6:3);
|
||||
06620 MESSAGE(' RUN ABORTED');
|
||||
06630 ()+01*)
|
||||
06640 (*+05()
|
||||
06650 WRITELN(ERROR, ' RUN ABORTED');
|
||||
06660 WRITELN(ERROR, ' CPU ', TIME :5:2);
|
||||
06670 ()+05*)
|
||||
06680 ABORT
|
||||
06690 END;
|
||||
06700 (**)
|
||||
06710 (**)
|
||||
06720 (*+01()
|
||||
06730 PROCEDURE PDERR(VAR A: INTEGER; J,K,L,M: INTEGER; N: BOOLEAN;
|
||||
06740 VAR F: TEXT; VAR MSG: MESS);
|
||||
06750 (*TO CATCH NOS- AND PASCAL-DETECTED ERRORS*)
|
||||
06760 VAR I: INTEGER;
|
||||
06770 BEGIN
|
||||
06780 SETMYSTATIC(DYNAMIC(ME));
|
||||
06790 WRITELN(F);
|
||||
06800 I := 1;
|
||||
06810 REPEAT
|
||||
06820 WRITE(F, MSG[I]); I := I+1
|
||||
06830 UNTIL ORD(MSG[I])=0;
|
||||
06840 WRITELN(F);
|
||||
06850 ERRORR(0);
|
||||
06860 END;
|
||||
06870 ()+01*)
|
||||
06880 (**)
|
||||
06890 (**)
|
||||
06900 (*+54()
|
||||
06910 PROCEDURE OFFERROR;
|
||||
06920 VAR CURR, IB: IPOINT; RG: PRANGE;
|
||||
06930 BEGIN
|
||||
06940 CURR := STATIC(ME);
|
||||
06950 IB := CURR;
|
||||
06960 REPEAT
|
||||
06970 SETMYSTATIC(IB);
|
||||
06980 IF ISA68(IB) THEN
|
||||
06990 BEGIN
|
||||
07000 RG := FIRSTRG.RIBOFFSET;
|
||||
07010 WHILE (RG^.FIRSTW.TRACESAVE=NIL) AND (RG^.RIBOFFSET<>FIRSTRG.RIBOFFSET) DO
|
||||
07020 RG := RG^.RIBOFFSET;
|
||||
07030 END;
|
||||
07040 IB := DYNAMIC(IB);
|
||||
07050 UNTIL (SCOPE=1) OR (RG^.FIRSTW.TRACESAVE<>NIL);
|
||||
07060 WITH RG^.FIRSTW DO WITH TRACESAVE ^ DO
|
||||
07070 IF TRACESAVE<>NIL THEN
|
||||
07080 BEGIN
|
||||
07090 FDEC; IF FTST THEN GARBAGE(TRACESAVE);
|
||||
07100 TRACESAVE := NIL;
|
||||
07110 END;
|
||||
07120 SETMYSTATIC(CURR);
|
||||
07130 END;
|
||||
07140 (**)
|
||||
07150 (**)
|
||||
07160 PROCEDURE ONERROR(R: OBJECTP);
|
||||
07170 VAR LOCRG: DEPTHRANGE;
|
||||
07180 RG: PRANGE;
|
||||
07190 BEGIN
|
||||
07200 LOCRG := 0;
|
||||
07210 RG := FIRSTRG.RIBOFFSET;
|
||||
07220 WHILE RG^.RIBOFFSET<>FIRSTRG.RIBOFFSET DO
|
||||
07230 BEGIN RG := RG^.RIBOFFSET; LOCRG := LOCRG+1 END;
|
||||
07240 IF SCOPE+LOCRG<R^.OSCOPE THEN ERRORR(RSCOPE);
|
||||
07250 WITH FIRSTRG.RIBOFFSET^ DO
|
||||
07260 BEGIN
|
||||
07270 IF FIRSTW.TRACESAVE<>NIL THEN WITH FIRSTW.TRACESAVE^ DO
|
||||
07280 BEGIN FDEC; IF FTST THEN GARBAGE(FIRSTW.TRACESAVE) END;
|
||||
07290 FIRSTW.TRACESAVE := R;
|
||||
07300 FPINC(R^);
|
||||
07310 END;
|
||||
07320 END;
|
||||
07330 (**)
|
||||
07340 (**)
|
||||
07350 FUNCTION MAKEXCE(N: INTEGER): OBJECTP;
|
||||
07360 VAR NEWSTRUCT: UNDRESSP;
|
||||
07370 BEGIN
|
||||
07380 NEWSTRUCT := INCPTR(CRSTRUCT(EXCEPTDB), STRUCTCONST);
|
||||
07390 NEWSTRUCT^.FIRSTWORD := N;
|
||||
07400 MAKEXCE := INCPTR(NEWSTRUCT, -STRUCTCONST);
|
||||
07410 END;
|
||||
07420 (**)
|
||||
07430 (**)
|
||||
07440 ()+54*)
|
||||
07450 (*-02() BEGIN END ; ()-02*)
|
||||
07460 (*+01()
|
||||
07470 BEGIN (*OF MAIN PROGRAM*)
|
||||
07480 END (*OF EVERYTHING*).
|
||||
07490 ()+01*)
|
14
lang/a68s/liba68s/exit.c
Normal file
14
lang/a68s/liba68s/exit.c
Normal file
|
@ -0,0 +1,14 @@
|
|||
#include <stdio.h>
|
||||
|
||||
cleenup()
|
||||
{
|
||||
register FILE *iop ;
|
||||
extern FILE *_lastbuf ;
|
||||
|
||||
for ( iop = _iob ; iop < _lastbuf ; iop ++ )
|
||||
fclose( iop ) ;
|
||||
}
|
||||
|
||||
exit(n)
|
||||
int n;
|
||||
{ cleenup() ; _exit(n) ; }
|
4
lang/a68s/liba68s/exp.c
Normal file
4
lang/a68s/liba68s/exp.c
Normal file
|
@ -0,0 +1,4 @@
|
|||
extern double _exp();
|
||||
double EXP(statlink, x)
|
||||
int *statlink; double x;
|
||||
{return(_exp(x));}
|
40
lang/a68s/liba68s/fixed.p
Normal file
40
lang/a68s/liba68s/fixed.p
Normal file
|
@ -0,0 +1,40 @@
|
|||
74200 #include "rundecs.h"
|
||||
74210 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
74220 (**)
|
||||
74230 (**)
|
||||
74240 FUNCTION SUBFIXED(SIGN, BEFORE, POINT, AFTER : INTEGER; VAR EXP: INTEGER; EXPNEEDED: BOOLEAN;
|
||||
74250 X: REALTEGER; R: BOOLEAN; VAR S: OBJECTP; START: INTEGER): BOOLEAN; EXTERN;
|
||||
74260 PROCEDURE ERRORFILL(VAR S: OBJECTP; LENGTH: INTEGER); EXTERN;
|
||||
74270 (**)
|
||||
74280 (**)
|
||||
74290 FUNCTION FIXED(XMODE: INTEGER; VAL: REALTEGER; WIDTH, AFTER: INTEGER): OBJECTP;
|
||||
74300 VAR
|
||||
74310 S: OBJECTP;
|
||||
74320 SIGN, ABSWIDTH, BEFORE, POINT, E: INTEGER;
|
||||
74330 OK: BOOLEAN;
|
||||
74340 BEGIN
|
||||
74350 ABSWIDTH := ABS(WIDTH);
|
||||
74360 SIGN := ORD((WIDTH>0) OR (VAL.INT<0));
|
||||
74370 IF ABSWIDTH-AFTER=1 THEN
|
||||
74380 IF (WIDTH<0) AND (VAL.INT<0) THEN AFTER := AFTER-1;
|
||||
74390 S := NIL;
|
||||
74400 REPEAT
|
||||
74410 POINT := ORD(AFTER>0);
|
||||
74420 BEFORE := ABSWIDTH-SIGN-POINT-AFTER-ORD(WIDTH=0); (*-VE FOR WIDTH=0*)
|
||||
74430 IF (WIDTH<>0) AND (BEFORE<0) THEN AFTER := -1; (*WILL CAUSE SUBFIXED TO FAIL*)
|
||||
74440 OK := SUBFIXED(SIGN, BEFORE, POINT, AFTER, E, FALSE, VAL, XMODE=2, S, 1);
|
||||
74450 AFTER := AFTER-1
|
||||
74460 UNTIL OK OR (AFTER<0);
|
||||
74470 IF NOT OK THEN ERRORFILL(S, ABSWIDTH+ORD(WIDTH=0));
|
||||
74480 FIXED := S;
|
||||
74490 END;
|
||||
74500 (**)
|
||||
74510 (**)
|
||||
74520 (*-02()
|
||||
74530 BEGIN (*OF A68*)
|
||||
74540 END; (*OF A68*)
|
||||
74550 ()-02*)
|
||||
74560 (*+01()
|
||||
74570 BEGIN (*OF MAIN PROGRAM*)
|
||||
74580 END (* OF EVERYTHING *).
|
||||
74590 ()+01*)
|
48
lang/a68s/liba68s/float.p
Normal file
48
lang/a68s/liba68s/float.p
Normal file
|
@ -0,0 +1,48 @@
|
|||
74700 #include "rundecs.h"
|
||||
74710 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
74720 (**)
|
||||
74730 (**)
|
||||
74740 FUNCTION CRSTRING(LENGTH: OFFSETRANGE): OBJECTP; EXTERN ;
|
||||
74750 FUNCTION SUBFIXED(SIGN, BEFORE, POINT, AFTER : INTEGER; VAR EXP: INTEGER; EXPNEEDED: BOOLEAN;
|
||||
74760 X: REALTEGER; R: BOOLEAN; VAR S: OBJECTP; START: INTEGER): BOOLEAN; EXTERN;
|
||||
74770 PROCEDURE ERRORFILL(VAR S: OBJECTP; LENGTH: INTEGER); EXTERN;
|
||||
74780 (**)
|
||||
74790 (**)
|
||||
74800 FUNCTION FLOAT(XMODE: INTEGER; VAL: REALTEGER; WIDTH, AFTER, EXP: INTEGER): OBJECTP;
|
||||
74810 VAR E: REALTEGER;
|
||||
74820 S: OBJECTP;
|
||||
74830 ABSWIDTH, BEFORE, POINT, ABSEXP, EXPSIGN: INTEGER;
|
||||
74840 OK, OK1: BOOLEAN;
|
||||
74850 BEGIN
|
||||
74860 ABSWIDTH := ABS(WIDTH)+ORD(WIDTH=0);
|
||||
74870 ABSEXP := ABS(EXP)+ORD(EXP=0);
|
||||
74880 S := CRSTRING(ABSWIDTH);
|
||||
74890 REPEAT
|
||||
74900 POINT := ORD(AFTER>0);
|
||||
74910 BEFORE := ABSWIDTH-1-POINT-AFTER-1-ABSEXP;
|
||||
74920 IF BEFORE<0 THEN AFTER := -1; (*WILL CAUSE SUBFIXED TO FAIL*)
|
||||
74930 OK := SUBFIXED(ORD((WIDTH>0) OR (VAL.INT<0))-ORD((WIDTH<0) AND (VAL.INT>=0)),
|
||||
74940 BEFORE, POINT, AFTER, E.INT, TRUE, VAL, XMODE=2, S, 1)
|
||||
74950 AND (BEFORE+AFTER>0);
|
||||
74960 S^.CHARVEC[1+BEFORE+POINT+AFTER+1] := 'E';
|
||||
74970 EXPSIGN := ORD((EXP>0) OR (E.INT<0));
|
||||
74980 OK1 := SUBFIXED(EXPSIGN, ABSEXP-EXPSIGN, 0, 0, E.INT, FALSE, E, FALSE,
|
||||
74990 S, 1+BEFORE+POINT+AFTER+2);
|
||||
75000 AFTER := AFTER-ORD(AFTER<>0); ABSEXP := ABSEXP+1
|
||||
75010 UNTIL NOT OK OR OK1;
|
||||
75020 IF NOT OK THEN ERRORFILL(S, ABSWIDTH);
|
||||
75030 FLOAT := S;
|
||||
75040 END;
|
||||
75050 (**)
|
||||
75060 (**)
|
||||
75070 (*+01() (*$X4*) ()+01*)
|
||||
75080 (**)
|
||||
75090 (**)
|
||||
75100 (*-02()
|
||||
75110 BEGIN (*OF A68*)
|
||||
75120 END; (*OF A68*)
|
||||
75130 ()-02*)
|
||||
75140 (*+01()
|
||||
75150 BEGIN (*OF MAIN PROGRAM*)
|
||||
75160 END (* OF EVERYTHING *).
|
||||
75170 ()+01*)
|
113
lang/a68s/liba68s/genrec.p
Normal file
113
lang/a68s/liba68s/genrec.p
Normal file
|
@ -0,0 +1,113 @@
|
|||
30100 #include "rundecs.h"
|
||||
30110 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
30120 (**)
|
||||
30130 (**)
|
||||
30140 FUNCTION CRSTRUCT(TEMPLATE: DPOINT): OBJECTP; EXTERN;
|
||||
30150 FUNCTION HEAPMUL(NEWMULT: OBJECTP; TEMPLATE: DPOINT): OBJECTP; EXTERN;
|
||||
30160 PROCEDURE COPYSLICE(ASLICE: OBJECTP); EXTERN;
|
||||
30170 FUNCTION COPYDESC(ORIGINAL: OBJECTP; NEWSORT: STRUCTYPE): OBJECTP; EXTERN;
|
||||
30180 (**)
|
||||
30190 (**)
|
||||
30200 FUNCTION RECCMN (THEREC: OBJECTP; LOCRG: DEPTHRANGE): OBJECTP;
|
||||
30210 (*COMMON FOR CREATING RECURSIVE OBJECTS*)
|
||||
30220 VAR TEMPREC: OBJECTP;
|
||||
30230 CUTOP: PRANGE;
|
||||
30240 BEGIN
|
||||
30250 CUTOP := FIRSTRG.RIBOFFSET;
|
||||
30260 WITH CUTOP^ DO WITH FIRSTW DO
|
||||
30270 BEGIN
|
||||
30280 TEMPREC := RECGEN;
|
||||
30290 RECGEN := THEREC;
|
||||
30300 END;
|
||||
30310 WITH THEREC^ DO
|
||||
30320 BEGIN
|
||||
30330 OSCOPE := SCOPE+LOCRG;
|
||||
30340 NEXT:= TEMPREC;
|
||||
30350 PREV := INCPTR(CUTOP, RECOFFSET-NEXTOFFSET);
|
||||
30360 END;
|
||||
30370 IF TEMPREC <> NIL THEN TEMPREC^.PREV:= THEREC;
|
||||
30380 RECCMN:= THEREC;
|
||||
30390 END;
|
||||
30400 (**)
|
||||
30410 (**)
|
||||
30420 FUNCTION CRRECN(ANOBJECT:OBJECTP):OBJECTP;
|
||||
30430 (* PCREATEREF+1 *)
|
||||
30440 VAR NEWRECN:OBJECTP;
|
||||
30450 BEGIN
|
||||
30460 ENEW(NEWRECN,RECNSIZE);
|
||||
30470 WITH NEWRECN^ DO
|
||||
30480 BEGIN
|
||||
30490 (*-02() FIRSTWORD := SORTSHIFT * ORD(RECN); ()-02*)
|
||||
30500 (*+02() PCOUNT:=0; SORT:=RECN; ()+02*)
|
||||
30510 (*+01() SECONDWORD := 0; ()+01*)
|
||||
30520 PVALUE:=ANOBJECT;
|
||||
30530 WITH PVALUE^ DO FINC;
|
||||
30540 ANCESTOR := NEWRECN;
|
||||
30550 OFFSET := STRUCTCONST;
|
||||
30560 CRRECN:=RECCMN(NEWRECN,FIRSTRG.RIBOFFSET^.RGSCOPE)
|
||||
30570 END
|
||||
30580 END;
|
||||
30590 (**)
|
||||
30600 (**)
|
||||
30610 FUNCTION GENRMUL(NEWMULT: OBJECTP; TEMPLATE: DPOINT; LOCRG: DEPTHRANGE): OBJECTP;
|
||||
30620 (*PLEAPGEN+5*)
|
||||
30630 VAR NEWRECR: OBJECTP;
|
||||
30640 BEGIN
|
||||
30650 NEWRECR := HEAPMUL(NEWMULT, TEMPLATE);
|
||||
30660 NEWRECR^.SORT := RECR;
|
||||
30670 GENRMUL := RECCMN(NEWRECR, LOCRG)
|
||||
30680 END;
|
||||
30690 (**)
|
||||
30700 (**)
|
||||
30710 FUNCTION GENRSTR (TEMPLATE: DPOINT; LOCRG: DEPTHRANGE): OBJECTP;
|
||||
30720 (*PLEAPGEN+2*)
|
||||
30730 VAR NEWRECN: OBJECTP;
|
||||
30740 BEGIN
|
||||
30750 ENEW(NEWRECN, RECNSIZE);
|
||||
30760 WITH NEWRECN^ DO
|
||||
30770 BEGIN
|
||||
30780 (*-02() FIRSTWORD := SORTSHIFT * ORD(RECN); ()-02*)
|
||||
30790 (*+02() PCOUNT:=0; SORT:=RECN; ()+02*)
|
||||
30800 (*+01() SECONDWORD := 0; ()+01*)
|
||||
30810 PVALUE := CRSTRUCT(TEMPLATE);
|
||||
30820 ANCESTOR := NEWRECN;
|
||||
30830 OFFSET := STRUCTCONST;
|
||||
30840 WITH PVALUE^ DO FINC
|
||||
30850 END;
|
||||
30860 GENRSTR := RECCMN(NEWRECN, LOCRG)
|
||||
30870 END;
|
||||
30880 (**)
|
||||
30890 (**)
|
||||
30900 FUNCTION CRRECR(ANOBJECT: OBJECTP): OBJECTP;
|
||||
30910 (*PCREATEREF+3*)
|
||||
30920 VAR NEWREC: OBJECTP;
|
||||
30930 BEGIN
|
||||
30940 WITH ANOBJECT^ DO
|
||||
30950 BEGIN
|
||||
30960 IF (BPTR<>NIL) AND (SORT=MULT) THEN (*SOURCE IS A SLICE*)
|
||||
30970 COPYSLICE(ANOBJECT);
|
||||
30980 IF FTST THEN
|
||||
30990 BEGIN
|
||||
31000 NEWREC :=ANOBJECT;
|
||||
31010 NEWREC^.SORT := RECR;
|
||||
31020 END
|
||||
31030 ELSE
|
||||
31040 BEGIN
|
||||
31050 NEWREC := COPYDESC(ANOBJECT,MULT);
|
||||
31060 WITH NEWREC^.PVALUE^ DO FINC
|
||||
31070 END
|
||||
31080 END;
|
||||
31090 WITH NEWREC^ DO
|
||||
31100 BEGIN
|
||||
31110 ANCESTOR := NEWREC;
|
||||
31120 CCOUNT := 1;
|
||||
31130 CRRECR := RECCMN(NEWREC, FIRSTRG.RIBOFFSET^.RGSCOPE);
|
||||
31140 END
|
||||
31150 END;
|
||||
31160 (**)
|
||||
31170 (**)
|
||||
31180 (*-02() BEGIN END ; ()-02*)
|
||||
31190 (*+01()
|
||||
31200 BEGIN (*OF MAIN PROGRAM*)
|
||||
31210 END (*OF EVERYTHING*).
|
||||
31220 ()+01*)
|
58
lang/a68s/liba68s/get.e
Normal file
58
lang/a68s/liba68s/get.e
Normal file
|
@ -0,0 +1,58 @@
|
|||
#include "e.h"
|
||||
|
||||
exa _1GETT ; 1st label in GETT (run68d)
|
||||
exp $GET
|
||||
exp $READ
|
||||
exp $GETT
|
||||
exp $STANDINC
|
||||
|
||||
ina jumpdesc
|
||||
jumpdesc
|
||||
con 0I SZADDR,0I SZADDR,0I SZADDR ; enough space for 3 pointers
|
||||
|
||||
pro $GET,GETTVARSPACE
|
||||
mes 11
|
||||
loc GETSTAMP
|
||||
stl -SZWORD ; set up frame stamp
|
||||
lxa 0 ; load argument base
|
||||
lol SZADDR+SZADDR ; load length of data lost, skip static link & space
|
||||
loc SZADDR+SZADDR+SZWORD
|
||||
adu SZWORD ; add on space for static link & file pointer & count
|
||||
ads SZWORD ; add argument base and offset
|
||||
loi SZADDR ; load file address, objectp
|
||||
SFL SZADDR ; store in space, left for this reason
|
||||
lor 1 ; fill in jump info with SP
|
||||
SFE jumpdesc+SZADDR
|
||||
lxl 0 ; and LB
|
||||
SFE jumpdesc+SZADDR+SZADDR
|
||||
LFE _1GETT-ENTRYOFFSET ; and code entry point
|
||||
SFE jumpdesc
|
||||
gto jumpdesc ; jump to GETT, in run68d
|
||||
end GETTVARSPACE
|
||||
|
||||
pro $READ,GETTVARSPACE
|
||||
mes 11
|
||||
loc GETSTAMP
|
||||
stl -SZWORD ; set up frame stamp
|
||||
LFE .HTOP-STINOFFSET ; address of stout in global frame
|
||||
SFL SZADDR ; store in first param after static link
|
||||
lor 1 ; fill in jump info with SP
|
||||
SFE jumpdesc+SZADDR
|
||||
lxl 0 ; and LB
|
||||
SFE jumpdesc+SZADDR+SZADDR
|
||||
LFE _1GETT-ENTRYOFFSET ; and code entry point
|
||||
SFE jumpdesc
|
||||
gto jumpdesc ; jump to GETT, in run68d
|
||||
end GETTVARSPACE
|
||||
|
||||
pro $STANDINC,SZWORD ; call to stinch (run68d)
|
||||
loc PASCALSTAMP
|
||||
stl -SZWORD
|
||||
LFL SZADDR+SZADDR ; param 1, pcov
|
||||
LFL SZADDR ; param 2, lfn
|
||||
LFL 0 ; static link
|
||||
cal $STINCH
|
||||
asp SZADDR+SZADDR+SZADDR
|
||||
ret 0
|
||||
end SZWORD
|
||||
|
18
lang/a68s/liba68s/getaddr.e
Normal file
18
lang/a68s/liba68s/getaddr.e
Normal file
|
@ -0,0 +1,18 @@
|
|||
#define SZWORD EM_WSIZE
|
||||
#define SZADDR EM_PSIZE
|
||||
|
||||
#if SZWORD==SZADDR
|
||||
#define LOAD lol
|
||||
#define STORE stl
|
||||
#else
|
||||
#define LOAD ldl
|
||||
#define STORE sdl
|
||||
#endif
|
||||
|
||||
mes 2,SZWORD,SZADDR
|
||||
|
||||
exp $GETADDRE
|
||||
pro $GETADDRE,0
|
||||
LOAD SZADDR ; load param (adress of variable) (1st after static link)
|
||||
ret SZADDR ; return address
|
||||
end 0
|
40
lang/a68s/liba68s/getmult.p
Normal file
40
lang/a68s/liba68s/getmult.p
Normal file
|
@ -0,0 +1,40 @@
|
|||
31300 #include "rundecs.h"
|
||||
31310 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
31320 (**)
|
||||
31330 PROCEDURE GARBAGE (ANOBJECT: OBJECTP); EXTERN ;
|
||||
31340 (**)
|
||||
31350 (**)
|
||||
31360 FUNCTION GETMULT(NEWMULT: OBJECTP): OBJECTP;
|
||||
31370 VAR OLDMULT:OBJECTP;
|
||||
31380 BEGIN
|
||||
31390 WITH NEWMULT^ DO
|
||||
31400 BEGIN
|
||||
31410 OLDMULT := PVALUE;
|
||||
31420 SORT := MULT;
|
||||
31430 OSCOPE := 0;
|
||||
31440 PVALUE := OLDMULT^.PVALUE;
|
||||
31450 IF ( OLDMULT^.SORT <> MULT ) OR ( OLDMULT^.BPTR = NIL ) THEN
|
||||
31460 BEGIN
|
||||
31470 WITH PVALUE^ DO
|
||||
31480 IF CCOUNT<>0 THEN CCOUNT := CCOUNT+1;
|
||||
31490 (*CCOUNT=0 TREATED AS INFINITY*)
|
||||
31500 OLDMULT := PVALUE;
|
||||
31510 END;
|
||||
31520 BPTR := OLDMULT;
|
||||
31530 FPTR := OLDMULT^.IHEAD;
|
||||
31540 IHEAD := NIL;
|
||||
31550 IF FPTR <> NIL THEN FPTR^.BPTR := NEWMULT
|
||||
31560 ELSE FPINC(OLDMULT^);
|
||||
31570 OLDMULT^.IHEAD := NEWMULT;
|
||||
31580 FPINC(PVALUE^);
|
||||
31590 END;
|
||||
31600 IF FPTST(OLDMULT^) THEN GARBAGE(OLDMULT);
|
||||
31610 GETMULT := NEWMULT;
|
||||
31620 END;
|
||||
31630 (**)
|
||||
31640 (**)
|
||||
31650 (*-02() BEGIN END ; ()-02*)
|
||||
31660 (*+01()
|
||||
31670 BEGIN (*OF MAIN PROGRAM*)
|
||||
31680 END (*OF EVERYTHING*).
|
||||
31690 ()+01*)
|
181
lang/a68s/liba68s/getout.p
Normal file
181
lang/a68s/liba68s/getout.p
Normal file
|
@ -0,0 +1,181 @@
|
|||
31800 #include "rundecs.h"
|
||||
31810 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
31820 (**)
|
||||
31830 (**)
|
||||
31840 PROCEDURE GARBAGE (ANOBJECT: OBJECTP); EXTERN;
|
||||
31850 PROCEDURE RANGEXT; EXTERN;
|
||||
31860 (**)
|
||||
31870 (**)
|
||||
31880 PROCEDURE DORECGEN;
|
||||
31890 VAR RECGEN, RECPOINT: OBJECTP;
|
||||
31900 BEGIN
|
||||
31910 RECGEN := FIRSTRG.RIBOFFSET^.FIRSTW.RECGEN;
|
||||
31920 WHILE RECGEN<>NIL DO WITH RECGEN^ DO
|
||||
31930 BEGIN
|
||||
31940 FINC;
|
||||
31950 WITH PVALUE^ DO FDEC;
|
||||
31960 IF FPTST(PVALUE^) THEN GARBAGE(PVALUE);
|
||||
31970 PVALUE := UNDEFIN;
|
||||
31980 RECPOINT := RECGEN; RECGEN := NEXT;
|
||||
31990 WITH RECPOINT^ DO BEGIN FDEC; IF FTST THEN GARBAGE(RECPOINT) END
|
||||
32000 END
|
||||
32010 END;
|
||||
32020 (**)
|
||||
32030 (**)
|
||||
32040 FUNCTION GETOUT(TARGETRN: DEPTHRANGE; TARGETLEB: OFFSETRANGE; MAP: BITMAP; LOOPS: INTEGER): ASNAKED;
|
||||
32050 (*PGETOUT - EXIT FROM ROUTINES UNTIL TARGET IS REACHED.
|
||||
32060 MAP IS THE STACK TO BE LEFT STANDING*)
|
||||
32070 VAR CURR, NECLEV, IB: IPOINT;
|
||||
32080 BITP: BITMAP;
|
||||
32090 PTR: OBJECTPP;
|
||||
32100 I: INTEGER;
|
||||
32110 XMODE: INTEGER; IBTYPE: (A68, PUT, GET, OTHER);
|
||||
32120 PVAL: OBJECTP;
|
||||
32130 TEMPOINT: RECORD CASE SEVERAL OF
|
||||
32140 0: (POINT: INTPOINT);
|
||||
32150 1: (PPOINT: OBJECTPP);
|
||||
32160 2,3,4,5,6,7,8,9,10: ();
|
||||
32170 END;
|
||||
32180 TEMP: NAKEGER;
|
||||
32190 BEGIN
|
||||
32200 CURR := STATIC(ME);
|
||||
32210 REPEAT
|
||||
32220 NECLEV := (*-05()STATIC( CURR )()-05*)(*+05()STATICP+192()+05*) ;
|
||||
32230 WHILE (*-41()(NECLEV>CURR) AND (NECLEV<ME)()-41*)(*+41()(NECLEV<CURR) AND (NECLEV>ME)()+41*) DO
|
||||
32240 (*BYPASS ANY STATIC LEVELS CREATED BY SETNSTATIC*)
|
||||
32250 (*-05() NECLEV:=STATIC(NECLEV) ; ()-05*)
|
||||
32260 (*+05() BEGIN SETMYSTATIC( NECLEV ) ; NECLEV := STATICP+192 END ; ()+05*)
|
||||
32270 REPEAT
|
||||
32280 REPEAT
|
||||
32290 IF ISA68(CURR) THEN
|
||||
32300 BEGIN
|
||||
32310 IBTYPE := A68;
|
||||
32320 BITP := BITPATTERN;
|
||||
32330 END
|
||||
32340 ELSE
|
||||
32350 BEGIN BITP.COUNT := 0; BITP.MASK := 0;
|
||||
32360 IF ISPUT(CURR) THEN IBTYPE := PUT
|
||||
32370 ELSE IF ISGET(CURR) THEN IBTYPE := GET
|
||||
32380 ELSE IBTYPE := OTHER;
|
||||
32390 END;
|
||||
32400 (*-02() IB := CURR; ()-02*)
|
||||
32410 (*+02() IB := ARGBASE(CURR); ()+02*)
|
||||
32420 PTR := ASPTR(IB);
|
||||
32430 CURR := DYNAMIC(CURR);
|
||||
32440 SETMYSTATIC(CURR);
|
||||
32450 WITH BITP DO
|
||||
32460 BEGIN
|
||||
32470 IF (CURR=NECLEV) AND (LEVEL=TARGETRN) THEN (*THIS IS TARGET ROUTINE*)
|
||||
32480 BEGIN
|
||||
32490 COUNT := COUNT-MAP.COUNT;
|
||||
32500 FOR I := 1 TO MAP.COUNT DIV SZWORD DO MASK := MASK*2
|
||||
32510 END;
|
||||
32520 IF MASK<>0 THEN
|
||||
32530 BEGIN
|
||||
32540 PTR := INCPTR( PTR, (*-41()- ()-41*)COUNT - PARAMOFFSET ) ;
|
||||
32550 FOR I := 1 TO COUNT DIV SZWORD DO
|
||||
32560 BEGIN
|
||||
32570 (*+41() PTR := INCPTR(PTR, -SZWORD); ()+41*)
|
||||
32580 IF MASK<0 THEN IF FPTST(PTR^^) THEN GARBAGE(PTR^);
|
||||
32590 (*-41() PTR := INCPTR(PTR, SZWORD); ()-41*)
|
||||
32600 MASK := MASK*2
|
||||
32610 END
|
||||
32620 END
|
||||
32630 ELSE IF IBTYPE IN [PUT, GET] THEN WITH TEMPOINT DO (*DESTROY DATA LIST OF PUT OR GET*)
|
||||
32640 BEGIN
|
||||
32650 POINT := ASPTR(IB-DLOFFSET); BITP.COUNT := POINT^;
|
||||
32660 POINT := INCPTR(POINT, (*-41()-()-41*) BITP.COUNT);
|
||||
32670 WHILE ORD(POINT) (*-41()<()-41*)(*+41()>()+41*) IB-DLOFFSET DO
|
||||
32680 BEGIN
|
||||
32690 XMODE := POINT^;
|
||||
32700 (*-41() POINT := INCPTR(POINT, SZWORD); ()-41*)
|
||||
32710 IF IBTYPE=PUT THEN
|
||||
32720 BEGIN
|
||||
32730 CASE XMODE OF
|
||||
32740 4,7,11,12,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31:
|
||||
32750 BEGIN
|
||||
32760 (*+41() POINT := INCPTR(POINT, -SZADDR); ()+41*)
|
||||
32770 PVAL := PPOINT^;
|
||||
32780 (*-41() POINT := INCPTR(POINT, SZADDR); ()-41*)
|
||||
32790 WITH PVAL^ DO
|
||||
32800 BEGIN FDEC; IF FTST THEN GARBAGE(PVAL) END;
|
||||
32810 END;
|
||||
32820 (*+61() 1,3,5: POINT := INCPTR(POINT, (*+41()-()+41*) SZLONG); ()+61*)
|
||||
32830 14: POINT := INCPTR(POINT, (*+41()-()+41*) SZPROC);
|
||||
32840 2: POINT := INCPTR(POINT, (*+41()-()+41*) SZREAL);
|
||||
32850 0,6,8,9,10: POINT := INCPTR(POINT, (*+41()-()+41*) SZINT);
|
||||
32860 -1: (*NO ACTION*);
|
||||
32870 END;
|
||||
32880 END
|
||||
32890 ELSE
|
||||
32900 IF XMODE IN [0..13,15..31] THEN
|
||||
32910 BEGIN
|
||||
32920 (*+41() POINT := INCPTR(POINT, -SZADDR); ()+41*)
|
||||
32930 PVAL := PPOINT^;
|
||||
32940 (*-41() POINT := INCPTR(POINT, SZADDR); ()-41*)
|
||||
32950 WITH PVAL^ DO
|
||||
32960 BEGIN FDEC; IF FTST THEN GARBAGE(PVAL) END;
|
||||
32970 END
|
||||
32980 ELSE IF XMODE=14 THEN POINT := INCPTR(POINT, (*+41()-()+41*) SZPROC);
|
||||
32990 (*+41() POINT := INCPTR(POINT, -SZWORD); ()+41*)
|
||||
33000 END;
|
||||
33010 (*-01()
|
||||
33020 POINT := INCPTR(POINT, (*-41()+SZWORD()-41*)(*+41()-SZADDR()+41*));
|
||||
33030 PVAL := PPOINT^; (*PVAL = THE .REF.FILE PARAMETER OF PUT/GET*)
|
||||
33040 WITH PVAL^ DO
|
||||
33050 BEGIN FDEC; IF FTST THEN GARBAGE(PVAL) END;
|
||||
33060 ()-01*)
|
||||
33070 END
|
||||
33080 END
|
||||
33090 UNTIL ISA68(CURR);
|
||||
33100 IF (CURR=NECLEV) AND (LEVEL=TARGETRN) THEN (*THIS IS TARGET ROUTINE*)
|
||||
33110 WHILE ORD(FIRSTRG.RIBOFFSET)-CURR (*-41()>()-41*)(*+41()< -()+41*) TARGETLEB DO
|
||||
33120 BEGIN RANGEXT; IF FIRSTRG.RIBOFFSET^.FIRSTW.RECGEN<>NIL THEN DORECGEN END
|
||||
33130 ELSE BEGIN
|
||||
33140 WHILE FIRSTRG.RIBOFFSET^.RIBOFFSET<>FIRSTRG.RIBOFFSET DO
|
||||
33150 BEGIN RANGEXT; IF FIRSTRG.RIBOFFSET^.FIRSTW.RECGEN<>NIL THEN DORECGEN END;
|
||||
33160 RANGEXT; (*FOR PARAMETERS RANGE*)
|
||||
33170 END;
|
||||
33180 UNTIL CURR=NECLEV
|
||||
33190 UNTIL LEVEL=TARGETRN;
|
||||
33200 FIRSTRG.RIBOFFSET^.FIRSTW.LOOPCOUNT := LOOPS;
|
||||
33210 (*+01() TEMP.ASNAK := 0; ()+01*)
|
||||
33220 IF IBTYPE IN [PUT, GET] THEN
|
||||
33230 TEMP.NAK.STOWEDVAL :=
|
||||
33240 ASPTR(IB (*-41()(*-01()-SZADDR()-01*)-()-41*)(*+41()+SZWORD+SZADDR+()+41*) BITP.COUNT-DLOFFSET)
|
||||
33250 ELSE
|
||||
33260 TEMP.NAK.STOWEDVAL := ASPTR(IB (*-41()-()-41*)(*+41()+()+41*) BITP.COUNT-PARAMOFFSET);
|
||||
33270 TEMP.NAK.POINTER := ASPTR(CURR);
|
||||
33280 GETOUT := TEMP.ASNAK;
|
||||
33290 END;
|
||||
33300 (**)
|
||||
33310 (**)
|
||||
33320 PROCEDURE GBSTK(BITP: BITMAP);
|
||||
33330 (*PGBSTK*)
|
||||
33340 VAR PTR: OBJECTP;
|
||||
33350 I: INTEGER;
|
||||
33360 BEGIN WITH BITP DO
|
||||
33370 BEGIN
|
||||
33380 IF MASK<>0 THEN
|
||||
33390 BEGIN
|
||||
33400 I := COUNT;
|
||||
33410 WHILE I>0 DO
|
||||
33420 BEGIN
|
||||
33430 I := I-SZWORD;
|
||||
33440 IF MASK<0 THEN
|
||||
33450 BEGIN PTR := ASPTR(GETSTKTOP(SZADDR, I)); IF FPTST(PTR^) THEN GARBAGE(PTR) END;
|
||||
33460 MASK := MASK*2
|
||||
33470 END
|
||||
33480 END;
|
||||
33490 END
|
||||
33500 END;
|
||||
33510 (**)
|
||||
33520 (**)
|
||||
33530 (*-02()
|
||||
33540 BEGIN
|
||||
33550 END ;
|
||||
33560 ()-02*)
|
||||
33570 (*+01()
|
||||
33580 BEGIN (*OF MAIN PROGRAM*)
|
||||
33590 END (*OF EVERYTHING*).
|
||||
33600 ()+01*)
|
397
lang/a68s/liba68s/gett.p
Normal file
397
lang/a68s/liba68s/gett.p
Normal file
|
@ -0,0 +1,397 @@
|
|||
75200 #include "rundecs.h"
|
||||
75210 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
75220 (**)
|
||||
75230 PROCEDURE CL68(PB: ASNAKED; RF: OBJECTP); EXTERN ;
|
||||
75240 PROCEDURE GARBAGE (ANOBJECT: OBJECTP); EXTERN ;
|
||||
75250 PROCEDURE FORMPDESC(OLDESC: OBJECTP; VAR PDESC1: PDESC); EXTERN ;
|
||||
75260 FUNCTION NEXTEL(I: INTEGER; VAR PDESC1: PDESC): BOOLEAN; EXTERN ;
|
||||
75270 PROCEDURE ERRORR(N :INTEGER); EXTERN ;
|
||||
75280 FUNCTION SAFEACCESS(LOCATION: OBJECTP): UNDRESSP; EXTERN;
|
||||
75290 PROCEDURE TESTCC (TARGET: OBJECTP); EXTERN ;
|
||||
75300 PROCEDURE TESTSS (REFSTRUCT: OBJECTP); EXTERN ;
|
||||
75310 FUNCTION CRSTRING(LENGTH: OFFSETRANGE): OBJECTP; EXTERN ;
|
||||
75320 FUNCTION GETPROC(RN: OBJECTP): ASNAKED; EXTERN ;
|
||||
75330 PROCEDURE CLPASC1(P1: IPOINT; PROC: ASPROC); EXTERN;
|
||||
75340 PROCEDURE CLRDSTR(PCOV: OBJECTP; VAR CHARS: GETBUFTYPE; TERM (*+01() , TERM1 ()+01*) : TERMSET;
|
||||
75350 VAR I: INTEGER; BOOK: FETROOMP; PROC: ASPROC); EXTERN;
|
||||
75360 FUNCTION FUNC68(PB: ASNAKED; RF: OBJECTP): BOOLEAN; EXTERN;
|
||||
75370 PROCEDURE TESTF(RF:OBJECTP;VAR F:OBJECTP); EXTERN;
|
||||
75380 PROCEDURE ENSSTATE(RF:OBJECTP;VAR F:OBJECTP;READING:STATUSSET); EXTERN;
|
||||
75390 FUNCTION ENSPAGE(RF:OBJECTP;VAR F:OBJECTP):BOOLEAN; EXTERN;
|
||||
75400 FUNCTION ENSLINE(RF:OBJECTP;VAR F:OBJECTP):BOOLEAN; EXTERN;
|
||||
75410 (**)
|
||||
75420 (**)
|
||||
75430 PROCEDURE GETT(RF: OBJECTP);
|
||||
75440 (*+02() LABEL 1; ()+02*)
|
||||
75450 VAR COUNT, XMODE, XSIZE, SIZE, I, J: INTEGER;
|
||||
75460 Q:INTPOINT;
|
||||
75470 PVAL,F:OBJECTP;
|
||||
75480 P: UNDRESSP;
|
||||
75490 TEMP: REALTEGER;
|
||||
75500 TEMPLATE:DPOINT;
|
||||
75510 WASSTRING:BOOLEAN;
|
||||
75520 BUFFER:RECORD CASE SEVERAL OF
|
||||
75530 1: (CHARS: GETBUFTYPE);
|
||||
75540 2: (INTS :ARRAY [1..20] OF INTEGER);
|
||||
75550 0, 3, 4, 5, 6, 7, 8, 9, 10: () ;
|
||||
75560 END;
|
||||
75570 PDESC1: PDESC;
|
||||
75580 (**)
|
||||
75590 (*+02() PROCEDURE DUMMYG; (*JUST HERE TO MAKE 1 GLOBAL, NOT CALLED*)
|
||||
75600 BEGIN GOTO 1 END; ()+02*)
|
||||
75610 (**)
|
||||
75620 PROCEDURE SKIPSPACES(RF:OBJECTP;VAR F:OBJECTP);
|
||||
75630 (*SKIP INITIAL SPACES,++ENSSPOSN OF NEXT NON SPACE CHAR++*)
|
||||
75640 VAR CA:CHAR;
|
||||
75650 I: INTEGER;
|
||||
75660 BEGIN
|
||||
75670 REPEAT
|
||||
75680 IF [LINEOVERFLOW]<=F^.PCOVER^.STATUS
|
||||
75690 THEN IF NOT ENSLINE(RF,F) THEN ERRORR(NOLOGICAL);
|
||||
75700 I := 0;
|
||||
75710 WITH F^ DO
|
||||
75720 CLRDSTR(PCOVER, BUFFER.CHARS, ALLCHAR-[' '] (*+01() , ALLCHAR1 ()+01*) , I, PCOVER^.BOOK, PCOVER^.DOGETS)
|
||||
75730 UNTIL NOT(LINEOVERFLOW IN F^.PCOVER^.STATUS)
|
||||
75740 END; (*SKIPSPACES*)
|
||||
75750 (**)
|
||||
75760 PROCEDURE VALUEREAD(RF:OBJECTP;VAR F:OBJECTP);
|
||||
75770 (*+01() LABEL 111,222,77; ()+01*)
|
||||
75780 VAR PTR: UNDRESSP;
|
||||
75790 C,CC:CHAR;
|
||||
75800 CARRYON, ISEEN: BOOLEAN;
|
||||
75810 I,J,K:INTEGER;
|
||||
75820 OLD:STATUSSET;
|
||||
75830 PROCEDURE READNUM;
|
||||
75840 CONST MAXINTDIV10 = (*+11() 28147497671065 ()+11*) (*+12() 3276 ()+12*) (*+13() 214748364 ()+13*) ;
|
||||
75850 MAXINTMOD10 = (*+11() 5 ()+11*) (*+12() 7 ()+12*) (*+13() 7 ()+13*) ;
|
||||
75860 VAR PM, DIGITS, I, VALDIG: INTEGER;
|
||||
75870 NEG: BOOLEAN;
|
||||
75880 BEGIN WITH F^, TEMP, BUFFER DO
|
||||
75890 BEGIN
|
||||
75900 PM := 0;
|
||||
75910 CLRDSTR(PCOVER,CHARS,ALLCHAR-['+','-'] (*+01() , ALLCHAR1 ()+01*) ,PM,PCOVER^.BOOK,PCOVER^.DOGETS);
|
||||
75920 NEG := (PM=1) AND (CHARS[0]='-');
|
||||
75930 I := 0;
|
||||
75940 CLRDSTR(PCOVER,CHARS,ALLCHAR-[' '] (*+01() , ALLCHAR1 ()+01*) ,I,PCOVER^.BOOK,PCOVER^.DOGETS);
|
||||
75950 DIGITS := 0;
|
||||
75960 CLRDSTR(PCOVER,CHARS,ALLCHAR-['0'..'9'] (*+01() , ALLCHAR1 ()+01*) ,DIGITS,PCOVER^.BOOK,PCOVER^.DOGETS);
|
||||
75970 IF (PM>1) OR (DIGITS=0) THEN ERRORR(NODIGIT);
|
||||
75980 INT := 0;
|
||||
75990 FOR I := 0 TO DIGITS-1 DO
|
||||
76000 BEGIN
|
||||
76010 VALDIG := ORD( CHARS[I] ) - ORD( '0' ) ;
|
||||
76020 IF ( INT > MAXINTDIV10 ) OR ( ( INT = MAXINTDIV10 ) AND ( VALDIG > MAXINTMOD10 ) ) THEN
|
||||
76030 ERRORR( WRONGVAL ) ;
|
||||
76040 INT := INT * 10 + VALDIG
|
||||
76050 END;
|
||||
76060 IF NEG THEN INT := - INT
|
||||
76070 END
|
||||
76080 END;
|
||||
76090 (**)
|
||||
76100 PROCEDURE READREAL;
|
||||
76110 (*+01()
|
||||
76120 CONST TML=10000000000000000B;
|
||||
76130 LIMIT=14631463146314631B; (*16*TML/10*)
|
||||
76140 ()+01*)
|
||||
76150 VAR RINT: MINT ;
|
||||
76160 PM, BEFORE, AFTER, E, I, RINTEXP: INTEGER;
|
||||
76170 NEG: BOOLEAN;
|
||||
76180 BEGIN WITH F^, TEMP, BUFFER DO
|
||||
76190 BEGIN
|
||||
76200 PM := 0;
|
||||
76210 CLRDSTR(PCOVER,CHARS,ALLCHAR-['+','-'] (*+01() , ALLCHAR1 ()+01*) ,PM,PCOVER^.BOOK,PCOVER^.DOGETS);
|
||||
76220 NEG := (PM=1) AND (CHARS[0]='-');
|
||||
76230 I := 0;
|
||||
76240 CLRDSTR(PCOVER,CHARS,ALLCHAR-[' '] (*+01() , ALLCHAR1 ()+01*) ,I,PCOVER^.BOOK,PCOVER^.DOGETS);
|
||||
76250 BEFORE := 0; AFTER := 0; E := 0;
|
||||
76260 CLRDSTR(PCOVER,CHARS,ALLCHAR-['0'..'9'] (*+01() , ALLCHAR1 ()+01*) ,BEFORE,PCOVER^.BOOK,PCOVER^.DOGETS);
|
||||
76270 RINT := 0;
|
||||
76280 FOR I := 0 TO BEFORE-1 DO
|
||||
76290 (*+01() IF RINT<LIMIT THEN ()+01*)
|
||||
76300 RINT := RINT*10+(ORD(CHARS[I])-ORD('0'))
|
||||
76310 (*+01() ELSE E := E+1 ()+01*) ;
|
||||
76320 I := 0;
|
||||
76330 CLRDSTR(PCOVER,CHARS,ALLCHAR-['.','E'(*-50(),CHR(ORD('E')+32)()-50*)](*+01(),ALLCHAR1()+01*),
|
||||
76340 I,PCOVER^.BOOK,PCOVER^.DOGETS);
|
||||
76350 IF (I>0) AND (CHARS[0]='.') THEN
|
||||
76360 BEGIN
|
||||
76370 CLRDSTR (
|
||||
76380 PCOVER,CHARS,ALLCHAR-['0'..'9'] (*+01() , ALLCHAR1 ()+01*) ,AFTER,PCOVER^.BOOK,PCOVER^.DOGETS
|
||||
76390 ) ;
|
||||
76400 FOR I := 0 TO AFTER-1 DO
|
||||
76410 (*+01() IF RINT<LIMIT THEN ()+01*)
|
||||
76420 RINT := RINT*10+(ORD(CHARS[I])-ORD('0'))
|
||||
76430 (*+01() ELSE E := E+1 ()+01*) ;
|
||||
76440 RINTEXP := BEFORE + AFTER - E ;
|
||||
76450 I := 0;
|
||||
76460 CLRDSTR(PCOVER,CHARS,ALLCHAR-['E'(*-50(),CHR(ORD('E')+32)()-50*)](*+01(),ALLCHAR1()+01*),
|
||||
76470 I,PCOVER^.BOOK,PCOVER^.DOGETS);
|
||||
76480 IF (PM>1) OR (AFTER=0) THEN ERRORR(NODIGIT);
|
||||
76490 E := E-AFTER;
|
||||
76500 END
|
||||
76510 ELSE IF (PM>1) OR (BEFORE=0) THEN ERRORR(NODIGIT);
|
||||
76520 IF (I>0) AND ((CHARS[0]='E') (*-50()OR (CHARS[0]=CHR(ORD('E')+32))()-50*)) THEN
|
||||
76530 BEGIN
|
||||
76540 I := 0;
|
||||
76550 CLRDSTR(PCOVER,CHARS,ALLCHAR-[' '] (*+01() , ALLCHAR1 ()+01*) ,I,PCOVER^.BOOK,PCOVER^.DOGETS);
|
||||
76560 READNUM;
|
||||
76570 E := E+INT;
|
||||
76580 END;
|
||||
76590 IF ( E + RINTEXP <= MINREALEXP ) OR ( RINT = 0 ) THEN REA := 0.0
|
||||
76600 ELSE IF E>=323 THEN ERRORR(WRONGVAL)
|
||||
76610 ELSE
|
||||
76620 BEGIN
|
||||
76630 (*-02() REA := TIMESTEN(RINT, E); ()-02*)
|
||||
76640 (*+02() REA := TIMESTE(RINT, E); ()+02*)
|
||||
76650 IF INT=INTUNDEF THEN ERRORR(WRONGVAL);
|
||||
76660 END;
|
||||
76670 IF NEG THEN REA := -REA;
|
||||
76680 END
|
||||
76690 END;
|
||||
76700 (**)
|
||||
76710 BEGIN WITH TEMP DO
|
||||
76720 BEGIN
|
||||
76730 IF NOT([OPENED,READMOOD,CHARMOOD]<=F^.PCOVER^.STATUS) THEN
|
||||
76740 ENSSTATE(RF, F, [OPENED,READMOOD,CHARMOOD]);
|
||||
76750 XSIZE := SZINT;
|
||||
76760 CASE XMODE OF
|
||||
76770 -1: (*FILLER*) XSIZE := 0;
|
||||
76780 (*+61() 1,3,5: (*LONG MODES*)
|
||||
76790 BEGIN XSIZE := SZLONG; DUMMY END; ()+61*)
|
||||
76800 0: (*INT*)
|
||||
76810 BEGIN SKIPSPACES(RF,F); READNUM; P^.FIRSTINT := INT END;
|
||||
76820 2: (*REAL*)
|
||||
76830 BEGIN XSIZE := SZREAL; SKIPSPACES(RF,F); READREAL; P^.FIRSTREAL := REA END;
|
||||
76840 4: (*COMPL*)
|
||||
76850 BEGIN
|
||||
76860 XSIZE := SZADDR;
|
||||
76870 SKIPSPACES(RF,F);
|
||||
76880 READREAL;
|
||||
76890 P^.FIRSTREAL := REA;
|
||||
76900 I := 0;
|
||||
76910 WITH F^ DO
|
||||
76920 CLRDSTR (
|
||||
76930 PCOVER,BUFFER.CHARS,ALLCHAR-[' ','I'] (*+01() , ALLCHAR1 ()+01*) ,I,PCOVER^.BOOK,PCOVER^.DOGETS
|
||||
76940 ) ;
|
||||
76950 ISEEN := FALSE;
|
||||
76960 FOR K := 0 TO I-1 DO
|
||||
76970 ISEEN := ISEEN OR (BUFFER.CHARS[K]='I');
|
||||
76980 IF NOT ISEEN THEN ERRORR(WRONGCHAR);
|
||||
76990 READREAL;
|
||||
77000 P := INCPTR(P, SZREAL);
|
||||
77010 P^.FIRSTREAL := REA;
|
||||
77020 END;
|
||||
77030 6: (*CHAR*)
|
||||
77040 BEGIN IF [LINEOVERFLOW]<=F^.PCOVER^.STATUS
|
||||
77050 THEN IF NOT ENSLINE(RF,F) THEN ERRORR(NOLOGICAL);
|
||||
77060 I := -1;
|
||||
77070 WITH F^ DO
|
||||
77080 CLRDSTR(PCOVER, BUFFER.CHARS, ALLCHAR (*+01() , ALLCHAR ()+01*) , I, PCOVER^.BOOK, PCOVER^.DOGETS);
|
||||
77090 P^.FIRSTWORD := I
|
||||
77100 END;
|
||||
77110 7: (*STRING*)
|
||||
77120 WITH BUFFER DO
|
||||
77130 BEGIN
|
||||
77140 XSIZE := SZADDR;
|
||||
77150 I:=0;
|
||||
77160 REPEAT
|
||||
77170 IF [PAGEOVERFLOW]<=F^.PCOVER^.STATUS
|
||||
77180 THEN CARRYON:=ENSPAGE(RF,F)
|
||||
77190 ELSE CARRYON:=TRUE;
|
||||
77200 IF CARRYON THEN
|
||||
77210 IF [LINEOVERFLOW]<=F^.PCOVER^.STATUS
|
||||
77220 THEN BEGIN OLD:=F^.PCOVER^.STATUS;
|
||||
77230 IF F^.LINEMENDED=UNDEFIN THEN CARRYON := FALSE
|
||||
77240 ELSE CARRYON:=FUNC68(GETPROC(F^.LINEMENDED),RF);
|
||||
77250 ENSSTATE(RF,F,OLD)
|
||||
77260 END
|
||||
77270 ELSE
|
||||
77280 WITH F^ DO
|
||||
77290 BEGIN
|
||||
77300 CLRDSTR(PCOVER, CHARS, TERM (*+01() , TERM1 ()+01*) , I, PCOVER^.BOOK, PCOVER^.DOGETS);
|
||||
77310 CARRYON := LINEOVERFLOW IN PCOVER^.STATUS
|
||||
77320 END
|
||||
77330 UNTIL NOT CARRYON;
|
||||
77340 WITH P^ DO
|
||||
77350 BEGIN FPDEC(FIRSTPTR^);
|
||||
77360 IF FPTST(FIRSTPTR^) THEN GARBAGE(FIRSTPTR);
|
||||
77370 FIRSTPTR:=CRSTRING(I);
|
||||
77380 FPINC(FIRSTPTR^);
|
||||
77390 PTR := INCPTR(FIRSTPTR, STRINGCONST);
|
||||
77400 END;
|
||||
77410 WHILE I <> (I DIV CHARPERWORD) * CHARPERWORD DO
|
||||
77420 BEGIN CHARS[I]:=CHR(0);
|
||||
77430 I:=I+1
|
||||
77440 END;
|
||||
77450 J:=I DIV CHARPERWORD ;
|
||||
77460 FOR I:=1 TO J DO
|
||||
77470 BEGIN PTR^.FIRSTWORD := INTS[I]; PTR := INCPTR(PTR, SZWORD) END;
|
||||
77480 END; (*STRING*)
|
||||
77490 8: (*BOOL*)
|
||||
77500 BEGIN IF [LINEOVERFLOW]<=F^.PCOVER^.STATUS
|
||||
77510 THEN IF NOT ENSLINE(RF,F) THEN ERRORR(NOLOGICAL);
|
||||
77520 I := -1;
|
||||
77530 WITH F^ DO
|
||||
77540 CLRDSTR(PCOVER, BUFFER.CHARS, ALLCHAR (*+01() , ALLCHAR ()+01*) , I, PCOVER^.BOOK, PCOVER^.DOGETS);
|
||||
77550 IF CHR(I)='T' THEN INT := TRUEVAL
|
||||
77560 ELSE IF CHR(I)='F' THEN INT := 0
|
||||
77570 ELSE ERRORR(WRONGCHAR) ;
|
||||
77580 P^.FIRSTWORD := INT
|
||||
77590 END; (*BOOL*)
|
||||
77600 9: (*BITS*)
|
||||
77610 BEGIN K:=0;
|
||||
77620 FOR J:=1 TO BITSWIDTH DO
|
||||
77630 BEGIN SKIPSPACES(RF,F);
|
||||
77640 I := -1;
|
||||
77650 WITH F^ DO
|
||||
77660 CLRDSTR(PCOVER, BUFFER.CHARS, ALLCHAR (*+01() , ALLCHAR ()+01*) , I, PCOVER^.BOOK, PCOVER^.DOGETS);
|
||||
77670 IF CHR(I) IN ['T','F'] THEN K := K*2+ORD(CHR(I)='T')
|
||||
77680 ELSE ERRORR(WRONGCHAR)
|
||||
77690 END;
|
||||
77700 P^.FIRSTWORD := K
|
||||
77710 END;
|
||||
77720 10: (*BYTES*)
|
||||
77730 FOR J:=1 TO BYTESWIDTH DO
|
||||
77740 BEGIN
|
||||
77750 IF LINEOVERFLOW IN F^.PCOVER^.STATUS THEN
|
||||
77760 IF NOT ENSLINE(RF, F) THEN ERRORR(NOLOGICAL);
|
||||
77770 I := -1;
|
||||
77780 WITH F^ DO
|
||||
77790 CLRDSTR(PCOVER, BUFFER.CHARS, ALLCHAR (*+01() , ALLCHAR ()+01*) , I, PCOVER^.BOOK, PCOVER^.DOGETS);
|
||||
77800 ALF[J] := CHR(I);
|
||||
77810 P^.FIRSTWORD := INT
|
||||
77820 END;
|
||||
77830 11: (*PROC*)
|
||||
77840 CL68(GETPROC(PVAL), RF);
|
||||
77850 12: (*STRUCT*)
|
||||
77860 BEGIN J:=0;
|
||||
77870 REPEAT J:=J+1 UNTIL TEMPLATE^[J]<0;
|
||||
77880 I:=ORD(P);
|
||||
77890 WHILE ORD(P)-I<TEMPLATE^[0] DO
|
||||
77900 BEGIN J:=J+1;
|
||||
77910 XMODE:=TEMPLATE^[J]-1;
|
||||
77920 VALUEREAD(RF,F);
|
||||
77930 P:=INCPTR(P, XSIZE)
|
||||
77940 END;
|
||||
77950 XMODE:=12;
|
||||
77960 END; (*STRUCT*)
|
||||
77970 14: (*CODE(REF FILE)VOID*)
|
||||
77980 CLPASC1( ORD(RF), PROCC );
|
||||
77990 END; (*CASE*)
|
||||
78000 END (*WITH*)
|
||||
78010 END; (*VALUEREAD*)
|
||||
78020 (**)
|
||||
78030 BEGIN (*GET*)
|
||||
78040 (*+02() 1: ()+02*) COUNT := GETSTKTOP(SZWORD, 0);
|
||||
78050 FPINC(RF^);
|
||||
78060 J := COUNT+SZWORD; WHILE J>SZWORD DO
|
||||
78070 BEGIN
|
||||
78080 J := J-SZWORD;
|
||||
78090 XMODE := GETSTKTOP(SZWORD, J);
|
||||
78100 IF XMODE IN [0..13,15..31] THEN
|
||||
78110 BEGIN
|
||||
78120 J := J - SZADDR;
|
||||
78130 PVAL := ASPTR(GETSTKTOP(SZADDR, J));
|
||||
78140 FPINC(PVAL^);
|
||||
78150 END
|
||||
78160 ELSE IF XMODE=14 THEN J := J-SZPROC
|
||||
78170 END;
|
||||
78180 TESTF(RF,F);
|
||||
78190 J := COUNT+SZWORD; WHILE J>SZWORD DO
|
||||
78200 BEGIN
|
||||
78210 J := J-SZWORD;
|
||||
78220 XMODE:=GETSTKTOP(SZWORD, J);
|
||||
78230 IF XMODE>=16 THEN (*ROW*)
|
||||
78240 BEGIN XMODE:=XMODE-16;
|
||||
78250 J := J-SZADDR;
|
||||
78260 PVAL:=ASPTR(GETSTKTOP(SZADDR, J));
|
||||
78270 WITH PVAL^ DO
|
||||
78280 BEGIN
|
||||
78290 IF FPTWO(ANCESTOR^.PVALUE^) THEN
|
||||
78300 TESTCC(PVAL);
|
||||
78310 FORMPDESC(PVAL,PDESC1);
|
||||
78320 TEMPLATE:=MDBLOCK;
|
||||
78330 WITH ANCESTOR^ DO
|
||||
78340 BEGIN
|
||||
78350 IF ORD(TEMPLATE)=0 THEN SIZE:=1
|
||||
78360 ELSE IF ORD(TEMPLATE)<=MAXSIZE THEN SIZE:=ORD(TEMPLATE)
|
||||
78370 ELSE SIZE:=TEMPLATE^[0];
|
||||
78380 WHILE NEXTEL(0,PDESC1) DO WITH PDESC1 DO WITH PDESCVEC[0] DO
|
||||
78390 BEGIN I:=PP;
|
||||
78400 WHILE I<PP+PSIZE DO
|
||||
78410 BEGIN
|
||||
78420 P:=INCPTR(PVALUE, I);
|
||||
78430 VALUEREAD(RF,F); I:=I+SIZE
|
||||
78440 END
|
||||
78450 END
|
||||
78460 END
|
||||
78470 END
|
||||
78480 END
|
||||
78490 ELSE IF XMODE>=0 THEN
|
||||
78500 BEGIN WASSTRING:=FALSE;
|
||||
78510 IF XMODE = 14 THEN
|
||||
78520 BEGIN
|
||||
78530 J := J - SZPROC ;
|
||||
78540 TEMP.PROCC := GETSTKTOP( SZPROC , J )
|
||||
78550 END
|
||||
78560 ELSE
|
||||
78570 BEGIN
|
||||
78580 J := J - SZADDR ;
|
||||
78590 PVAL:=ASPTR(GETSTKTOP(SZADDR, J));
|
||||
78600 IF XMODE <> 11 THEN WITH PVAL^ DO
|
||||
78610 IF SORT IN [RECN, REFN] THEN
|
||||
78620 IF XMODE<>7 THEN (*NOT STRING*)
|
||||
78630 BEGIN
|
||||
78640 TEMPLATE:=PVALUE^.DBLOCK;
|
||||
78650 IF FPTWO(PVALUE^) THEN
|
||||
78660 TESTSS(PVAL);
|
||||
78670 P := INCPTR(PVALUE, STRUCTCONST)
|
||||
78680 END
|
||||
78690 ELSE
|
||||
78700 BEGIN ENEW(P,1); P^.FIRSTPTR:=PVALUE;WASSTRING:=TRUE END
|
||||
78710 ELSE
|
||||
78720 BEGIN
|
||||
78730 TEMPLATE := DBLOCK;
|
||||
78740 WITH ANCESTOR^ DO
|
||||
78750 IF FPTWO(PVALUE^) THEN
|
||||
78760 P := SAFEACCESS(PVAL)
|
||||
78770 ELSE
|
||||
78780 BEGIN
|
||||
78790 PVALUE^.OSCOPE := 0;
|
||||
78800 P := INCPTR(PVALUE,PVAL^.OFFSET)
|
||||
78810 END
|
||||
78820 END
|
||||
78830 END;
|
||||
78840 VALUEREAD(RF,F);
|
||||
78850 IF WASSTRING THEN
|
||||
78860 BEGIN PVAL^.PVALUE := P^.FIRSTPTR; EDISPOSE(P, 1) END;
|
||||
78870 END;
|
||||
78880 END;
|
||||
78890 J := COUNT+SZWORD; WHILE J>SZWORD DO
|
||||
78900 BEGIN
|
||||
78910 J := J-SZWORD;
|
||||
78920 XMODE := GETSTKTOP(SZWORD, J);
|
||||
78930 IF XMODE IN [0..13,15..31] THEN
|
||||
78940 BEGIN
|
||||
78950 J := J - SZADDR;
|
||||
78960 PVAL := ASPTR(GETSTKTOP(SZADDR, J)); WITH PVAL^ DO
|
||||
78970 BEGIN FDEC; IF FTST THEN GARBAGE(PVAL) END;
|
||||
78980 END
|
||||
78990 ELSE IF XMODE = 14 THEN J := J - SZPROC
|
||||
79000 END;
|
||||
79010 WITH RF^ DO
|
||||
79020 BEGIN FDEC; IF FTST THEN GARBAGE(RF) END;
|
||||
79030 END; (*GET*)
|
||||
79040 (**)
|
||||
79050 (**)
|
||||
79060 (*+01() (*$X4*) ()+01*)
|
||||
79070 (**)
|
||||
79080 (**)
|
||||
79090 (*-02()
|
||||
79100 BEGIN (*OF A68*)
|
||||
79110 END; (*OF A68*)
|
||||
79120 ()-02*)
|
||||
79130 (*+01()
|
||||
79140 BEGIN (*OF MAIN PROGRAM*)
|
||||
79150 END (* OF EVERYTHING *).
|
||||
79160 ()+01*)
|
556
lang/a68s/liba68s/global.p
Normal file
556
lang/a68s/liba68s/global.p
Normal file
|
@ -0,0 +1,556 @@
|
|||
08000 #include "rundecs.h"
|
||||
08010 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
08020 (**)
|
||||
08030 (*+01() (*$X6*) ()+01*)
|
||||
08040 PROCEDURE STANDINC(PCOV: OBJECTP; LFN: LFNTYPE); EXTERN;
|
||||
08050 PROCEDURE STANDOUT(PCOV: OBJECTP; LFN: LFNTYPE); EXTERN;
|
||||
08060 PROCEDURE STANDBAC(PCOV: OBJECTP; LFN: LFNTYPE); EXTERN;
|
||||
08070 (*+01() (*$X4*) ()+01*)
|
||||
08080 PROCEDURE CL68(PB: ASNAKED; RF: OBJECTP); EXTERN;
|
||||
08090 PROCEDURE ERRORR(N: INTEGER); EXTERN;
|
||||
08100 (*+05() FUNCTION TIME: REAL; EXTERN; ()+05*)
|
||||
08110 PROCEDURE CALLPASC ; EXTERN;
|
||||
08120 PROCEDURE ABORT; EXTERN;
|
||||
08130 (*+02()
|
||||
08140 PROCEDURE ACLS(FIL: FETROOMP); EXTERN;
|
||||
08150 PROCEDURE STOPEN (VAR PF: FYL; VAR RF: OBJECTP; LFN: LFNTYPE; PROCEDURE CH(COV:OBJECTP;L:LFNTYPE) ); EXTERN;
|
||||
08160 ()+02*)
|
||||
08170 (*+01() (*$X6*) ()+01*)
|
||||
08180 FUNCTION PROC(PROCEDURE P):ASPROC;EXTERN;
|
||||
08190 (*-01()
|
||||
08200 FUNCTION PROCH( PROCEDURE P( COV: OBJECTP ; L: LFNTYPE ) ): ASPROC ; EXTERN ;
|
||||
08210 ()-01*)
|
||||
08220 (*+01() (*$X4*) ()+01*)
|
||||
08230 (**)
|
||||
08240 (*+24()
|
||||
08250 PROCEDURE FINDSORT(POINT: OBJECTP; VAR GETSORT: ALFA);
|
||||
08260 BEGIN
|
||||
08270 (*+01() (*$T-*) ()+01*)
|
||||
08280 CASE POINT^.SORT OF
|
||||
08290 STRUCT: GETSORT:='STRUCT ';
|
||||
08300 MULT: GETSORT:='MULT ';
|
||||
08310 IELS: GETSORT:='IELS ';
|
||||
08320 ROUTINE:GETSORT:='ROUTINE ';
|
||||
08330 REF1: GETSORT:='REF1 ';
|
||||
08340 REF2: GETSORT:='REF2 ';
|
||||
08350 REFN: GETSORT:='REFN ';
|
||||
08360 CREF: GETSORT:='CREF ';
|
||||
08370 REFR: GETSORT:='REFR ';
|
||||
08380 REFSL1: GETSORT:='REFSL1 ';
|
||||
08390 REFSLN: GETSORT:='REFSLN ';
|
||||
08400 RECR: GETSORT:='RECR ';
|
||||
08410 RECN: GETSORT:='RECN ';
|
||||
08420 UNDEF: GETSORT:='UNDEF ';
|
||||
08430 NILL: GETSORT:='NILL ';
|
||||
08440 STRING: GETSORT:='STRING ';
|
||||
08450 END
|
||||
08460 END;
|
||||
08470 (**)
|
||||
08480 (**)
|
||||
08490 PROCEDURE PRINTSORT(POINT: OBJECTP);
|
||||
08500 BEGIN
|
||||
08510 CASE POINT^.SORT OF
|
||||
08520 STRUCT: WRITE('STRUCT');
|
||||
08530 MULT: WRITE('MULT');
|
||||
08540 IELS: WRITE('IELS');
|
||||
08550 ROUTINE:WRITE('ROUTINE');
|
||||
08560 REF1: WRITE('REF1');
|
||||
08570 REF2: WRITE('REF2');
|
||||
08580 REFN: WRITE('REFN');
|
||||
08590 CREF: WRITE('CREF');
|
||||
08600 REFR: WRITE('REFR');
|
||||
08610 REFSL1: WRITE('REFSL1');
|
||||
08620 REFSLN: WRITE('REFSLN');
|
||||
08630 RECR: WRITE('RECR');
|
||||
08640 RECN: WRITE('RECN');
|
||||
08650 UNDEF: WRITE('UNDEF');
|
||||
08660 NILL: WRITE('NILL');
|
||||
08670 END;
|
||||
08680 WRITELN(' SORT');
|
||||
08690 (* ( $T+ ) *)
|
||||
08700 END;
|
||||
08710 (**)
|
||||
08720 (**)
|
||||
08730 PROCEDURE PRINTDESC(ADESC: OBJECTP);
|
||||
08740 VAR I:INTEGER;
|
||||
08750 BEGIN
|
||||
08760 WITH ADESC^ DO
|
||||
08770 BEGIN
|
||||
08780 WRITE('SIZ',SIZE:2,' D0',D0:2,' LBJ',LBADJ:2);
|
||||
08790 WRITE(' LIUIDI');
|
||||
08800 FOR I := 0 TO ROWS DO WITH DESCVEC[I] DO
|
||||
08810 WRITE(LI:2, UI:2, DI:2);
|
||||
08820 WRITELN
|
||||
08830 END;
|
||||
08840 END;
|
||||
08850 ()+24*)
|
||||
08860 (**)
|
||||
08870 (**)
|
||||
08880 FUNCTION CRSTRING(LENGTH: OFFSETRANGE): OBJECTP;
|
||||
08890 VAR POINT :OBJECTP;
|
||||
08900 PTR: UNDRESSP;
|
||||
08910 BEGIN
|
||||
08920 IF LENGTH<0 THEN LENGTH := 0;
|
||||
08930 ENEW(POINT, STRINGCONST+((LENGTH + CHARPERWORD - 1) DIV CHARPERWORD)*SZWORD);
|
||||
08940 (*-02() POINT^.FIRSTWORD := SORTSHIFT * ORD(STRING); ()-02*)
|
||||
08950 (*+02() POINT^.PCOUNT:=0; POINT^.SORT:=STRING; ()+02*)
|
||||
08960 POINT^.STRLENGTH := LENGTH;
|
||||
08970 PTR := INCPTR(POINT, STRINGCONST+((LENGTH-1) DIV CHARPERWORD)*SZWORD);
|
||||
08980 IF LENGTH<>0 THEN PTR^.FIRSTWORD := 0;
|
||||
08990 CRSTRING := POINT
|
||||
09000 END;
|
||||
09010 (**)
|
||||
09020 (**)
|
||||
09030 FUNCTION CRSTRUCT(TEMPLATE: DPOINT): OBJECTP;
|
||||
09040 VAR NEWSTRUCT: OBJECTP;
|
||||
09050 TEMPOS, STRUCTPOS, STRUCTSIZE, COUNT: INTEGER;
|
||||
09060 PTR, PTR1: UNDRESSP;
|
||||
09070 BEGIN
|
||||
09080 STRUCTSIZE:= TEMPLATE^[0];
|
||||
09090 ENEW(NEWSTRUCT, STRUCTSIZE+STRUCTCONST);
|
||||
09100 WITH NEWSTRUCT^ DO
|
||||
09110 BEGIN
|
||||
09120 (*-02() FIRSTWORD := SORTSHIFT * ORD(STRUCT); ()-02*)
|
||||
09130 (*+02() PCOUNT:=0; SORT:=STRUCT; ()+02*)
|
||||
09140 (*+01() SECONDWORD := 0; ()+01*)
|
||||
09150 OSCOPE := 0 ;
|
||||
09160 LENGTH := STRUCTSIZE+STRUCTCONST;
|
||||
09170 DBLOCK:= TEMPLATE;
|
||||
09180 PTR := INCPTR(NEWSTRUCT, STRUCTCONST);
|
||||
09190 PTR^.FIRSTWORD := INTUNDEF;
|
||||
09200 PTR1 := INCPTR(PTR, SZWORD);
|
||||
09210 MOVELEFT(PTR, PTR1, STRUCTSIZE-SZWORD);
|
||||
09220 TEMPOS:= 1;
|
||||
09230 STRUCTPOS := TEMPLATE^[1];
|
||||
09240 WHILE STRUCTPOS >= 0
|
||||
09250 DO BEGIN
|
||||
09260 PTR := INCPTR(NEWSTRUCT, STRUCTCONST+STRUCTPOS);
|
||||
09270 PTR^.FIRSTPTR := UNDEFIN;
|
||||
09280 TEMPOS:= TEMPOS+1;
|
||||
09290 STRUCTPOS := TEMPLATE^[TEMPOS];
|
||||
09300 END;
|
||||
09310 END;
|
||||
09320 CRSTRUCT := NEWSTRUCT
|
||||
09330 END;
|
||||
09340 (**)
|
||||
09350 (**)
|
||||
09360 PROCEDURE GARBAGE(ANOBJECT:OBJECTP); FORWARD;
|
||||
09370 (**)
|
||||
09380 (**)
|
||||
09390 (*+02()
|
||||
09400 PROCEDURE ACLOSE(EFET: FETROOMP);
|
||||
09410 VAR NAME:OBJECTP;
|
||||
09420 BEGIN
|
||||
09430 WITH EFET^ DO
|
||||
09440 IF UFD>2 THEN (*USER'S FILE*)
|
||||
09450 BEGIN NAME := INCPTR(FNAME, -STRINGCONST);
|
||||
09460 FPDEC(NAME^); IF FPTST(NAME^) THEN GARBAGE(NAME);
|
||||
09470 END;
|
||||
09480 ACLS(EFET);
|
||||
09490 END;
|
||||
09500 ()+02*)
|
||||
09510 PROCEDURE GARBAGE(* (ANOBJECT: OBJECTP) *) ;
|
||||
09520 LABEL 1;
|
||||
09530 VAR ASINT: INTEGER;
|
||||
09540 BACK, HEAD: OBJECTP; TEMPLATE: DPOINT;
|
||||
09550 TEMP: OBJECTP;
|
||||
09560 PTR: UNDRESSP;
|
||||
09570 ELSIZE, SIZEACC, COUNT, STRUCTPOS, TEMPOS: INTEGER;
|
||||
09580 ISHEAD: BOOLEAN;
|
||||
09590 GETSORT: ALFA;
|
||||
09600 PFET: FETROOMP;
|
||||
09610 BEGIN
|
||||
09620 (*+24()(*BUGFILE
|
||||
09630 FINDSORT(ANOBJECT, GETSORT);
|
||||
09640 WRITELN(BUGFILE, 'GARBGE', GETSORT, 'AT', ORD(ANOBJECT):(*-01()1()-01*)(*+01()6 OCT()+01*) ,
|
||||
09650 'C=', ANOBJECT^.PCOUNT:4);
|
||||
09660 BUGFILE*)()+24*)
|
||||
09670 1: WITH ANOBJECT^ DO
|
||||
09680 BEGIN
|
||||
09690 (*+01() IF ORD(ANOBJECT)=0 THEN HALT; (*FOR CATCHING BUGS - SHOULDN'T HAPPEN*) ()+01*)
|
||||
09700 CASE SORT OF
|
||||
09710 STRUCT:
|
||||
09720 BEGIN
|
||||
09730 TEMPLATE:= DBLOCK;
|
||||
09740 TEMPOS:= 1;
|
||||
09750 STRUCTPOS:= TEMPLATE^[1];
|
||||
09760 WHILE STRUCTPOS>=0 DO
|
||||
09770 BEGIN
|
||||
09780 PTR := INCPTR(ANOBJECT, STRUCTCONST+STRUCTPOS);
|
||||
09790 WITH PTR^.FIRSTPTR^ DO
|
||||
09800 BEGIN FDEC; IF FTST THEN GARBAGE(PTR^.FIRSTPTR) END;
|
||||
09810 TEMPOS:= TEMPOS+1;
|
||||
09820 STRUCTPOS:= TEMPLATE^[TEMPOS]
|
||||
09830 END;
|
||||
09840 EDISPOSE(ANOBJECT, LENGTH)
|
||||
09850 END;
|
||||
09860 IELS:
|
||||
09870 BEGIN
|
||||
09880 TEMPLATE := DBLOCK;
|
||||
09890 IF ORD(TEMPLATE)<=MAXSIZE (*NOT STRUCT*) THEN
|
||||
09900 BEGIN
|
||||
09910 IF ORD(TEMPLATE)=0 (*DRESSED*) THEN
|
||||
09920 BEGIN
|
||||
09930 PTR := INCPTR(ANOBJECT, ELSCONST);
|
||||
09940 WHILE ORD(PTR)<ORD(ANOBJECT)+ELSCONST+D0 DO
|
||||
09950 BEGIN
|
||||
09960 WITH PTR^.FIRSTPTR^ DO
|
||||
09970 BEGIN
|
||||
09980 FDEC;
|
||||
09990 IF FTST THEN GARBAGE(PTR^.FIRSTPTR)
|
||||
10000 END;
|
||||
10010 PTR := INCPTR(PTR, SZADDR)
|
||||
10020 END
|
||||
10030 END
|
||||
10040 END
|
||||
10050 ELSE BEGIN (*UNDRESSED STRUCTURES*)
|
||||
10060 ELSIZE:= TEMPLATE^[0];
|
||||
10070 IF TEMPLATE^[1] >= 0 THEN
|
||||
10080 BEGIN
|
||||
10090 COUNT:= D0;
|
||||
10100 ASINT:= ELSCONST;
|
||||
10110 WHILE COUNT>0 DO
|
||||
10120 BEGIN
|
||||
10130 TEMPOS := 1;
|
||||
10140 STRUCTPOS := TEMPLATE^[1];
|
||||
10150 WHILE STRUCTPOS>=0 DO
|
||||
10160 BEGIN
|
||||
10170 PTR := INCPTR(ANOBJECT, ASINT+STRUCTPOS);
|
||||
10180 WITH PTR^.FIRSTPTR^ DO
|
||||
10190 BEGIN FDEC;
|
||||
10200 IF FTST THEN GARBAGE(PTR^.FIRSTPTR)
|
||||
10210 END;
|
||||
10220 TEMPOS := TEMPOS+1;
|
||||
10230 STRUCTPOS := TEMPLATE^[TEMPOS]
|
||||
10240 END;
|
||||
10250 ASINT:= ASINT+ELSIZE;
|
||||
10260 COUNT:= COUNT-ELSIZE
|
||||
10270 END
|
||||
10280 END
|
||||
10290 END;
|
||||
10300 EDISPOSE(ANOBJECT, ELSCONST+D0)
|
||||
10310 END;
|
||||
10320 MULT:
|
||||
10330 (*ASSERT: THIS MULTIPLE IS NOT SLICED*)
|
||||
10340 IF PVALUE=NIL (* A BOUNDS BLOCK *) THEN
|
||||
10350 EDISPOSE(ANOBJECT, MULTCONST+(ROWS+1)*SZPDS)
|
||||
10360 ELSE
|
||||
10370 BEGIN
|
||||
10380 BACK := BPTR;
|
||||
10390 IF BACK<>NIL THEN
|
||||
10400 BEGIN (*NOT SLICED BUT A SLICE*)
|
||||
10410 HEAD:= FPTR;
|
||||
10420 IF ANOBJECT<>BACK^.IHEAD THEN
|
||||
10430 BEGIN (*NOT FIRST SLICE*)
|
||||
10440 BACK^.FPTR:= HEAD;
|
||||
10450 IF HEAD<>NIL THEN
|
||||
10460 HEAD^.BPTR:= BACK
|
||||
10470 END
|
||||
10480 ELSE
|
||||
10490 IF HEAD<>NIL (* THE FIRST SLICE AND NOT THE LAST SLICE *) THEN
|
||||
10500 BEGIN
|
||||
10510 BACK^.IHEAD:= HEAD;
|
||||
10520 HEAD^.BPTR := BACK
|
||||
10530 END
|
||||
10540 ELSE
|
||||
10550 BEGIN (*THE ONLY SLICE*)
|
||||
10560 BACK^.IHEAD := NIL;
|
||||
10570 FPDEC(BACK^);
|
||||
10580 IF FPTST(BACK^) THEN GARBAGE(BACK)
|
||||
10590 END
|
||||
10600 END;
|
||||
10610 FPDEC(PVALUE^); TEMP := PVALUE;
|
||||
10620 EDISPOSE(ANOBJECT, MULTCONST+(ROWS+1)*SZPDS);
|
||||
10630 IF FPTST(TEMP^) THEN BEGIN ANOBJECT := TEMP; GOTO 1 END
|
||||
10640 END;
|
||||
10650 REFN:
|
||||
10660 BEGIN
|
||||
10670 FPDEC(PVALUE^); TEMP := PVALUE;
|
||||
10680 EDISPOSE(ANOBJECT, REFNSIZE);
|
||||
10690 IF FPTST(TEMP^) THEN BEGIN ANOBJECT := TEMP; GOTO 1 END
|
||||
10700 END;
|
||||
10710 REFSLN:
|
||||
10720 BEGIN
|
||||
10730 FPDEC(ANCESTOR^);
|
||||
10740 TEMP := ANCESTOR;
|
||||
10750 EDISPOSE(ANOBJECT, REFSLNCONST+(ROWS+1)*SZPDS);
|
||||
10760 IF FPTST(TEMP^) THEN BEGIN ANOBJECT := TEMP; GOTO 1 END
|
||||
10770 END;
|
||||
10780 REFSL1:
|
||||
10790 BEGIN
|
||||
10800 FPDEC(ANCESTOR^);
|
||||
10810 TEMP := ANCESTOR;
|
||||
10820 EDISPOSE(ANOBJECT, REFSL1SIZE);
|
||||
10830 IF FPTST(TEMP^) THEN BEGIN ANOBJECT := TEMP; GOTO 1 END
|
||||
10840 END;
|
||||
10850 REFR:
|
||||
10860 BEGIN
|
||||
10870 FPDEC(PVALUE^); TEMP := PVALUE;
|
||||
10880 EDISPOSE(ANOBJECT, REFRCONST+(ROWS+1)*SZPDS);
|
||||
10890 IF FPTST(TEMP^) THEN BEGIN ANOBJECT := TEMP; GOTO 1 END
|
||||
10900 END;
|
||||
10910 RECR:
|
||||
10920 BEGIN
|
||||
10930 BACK:= PREV;
|
||||
10940 HEAD:= NEXT;
|
||||
10950 BACK^.NEXT:= HEAD;
|
||||
10960 IF HEAD <> NIL THEN
|
||||
10970 HEAD^.PREV:= BACK;
|
||||
10980 FPDEC(PVALUE^); TEMP := PVALUE;
|
||||
10990 EDISPOSE(ANOBJECT, RECRCONST+(ROWS+1)*SZPDS);
|
||||
11000 IF FPTST(TEMP^) THEN BEGIN ANOBJECT := TEMP; GOTO 1 END
|
||||
11010 END;
|
||||
11020 RECN:
|
||||
11030 BEGIN
|
||||
11040 BACK := PREV;
|
||||
11050 HEAD := NEXT;
|
||||
11060 BACK^.NEXT := HEAD;
|
||||
11070 IF HEAD<>NIL THEN
|
||||
11080 HEAD^.PREV:= BACK;
|
||||
11090 FPDEC(PVALUE^); TEMP := PVALUE;
|
||||
11100 EDISPOSE(ANOBJECT, RECNSIZE);
|
||||
11110 IF FPTST(TEMP^) THEN BEGIN ANOBJECT := TEMP; GOTO 1 END
|
||||
11120 END;
|
||||
11130 CREF:
|
||||
11140 EDISPOSE(ANOBJECT, CREFSIZE);
|
||||
11150 REF1:
|
||||
11160 EDISPOSE(ANOBJECT, REF1SIZE);
|
||||
11170 (*-01() REF2:
|
||||
11180 EDISPOSE(ANOBJECT, REF2SIZE); ()-01*)
|
||||
11190 ROUTINE:
|
||||
11200 EDISPOSE(ANOBJECT, ROUTINESIZE);
|
||||
11210 PASCROUT:
|
||||
11220 EDISPOSE(ANOBJECT, PROUTINESIZE);
|
||||
11230 STRING:
|
||||
11240 EDISPOSE(ANOBJECT, STRINGCONST+((STRLENGTH+CHARPERWORD-1) DIV CHARPERWORD)*SZWORD);
|
||||
11250 UNDEF, NILL:
|
||||
11260 PCOUNT := 255; (*MUSTN'T BE COLLECTED, OF COURSE*)
|
||||
11270 COVER:
|
||||
11280 BEGIN
|
||||
11290 IF ASSOC THEN
|
||||
11300 BEGIN FPDEC(ASSREF^); IF FPTST(ASSREF^) THEN GARBAGE(ASSREF) END
|
||||
11310 ELSE BEGIN
|
||||
11320 IF OPENED IN STATUS THEN ACLOSE(BOOK);
|
||||
11330 PFET := BOOK;
|
||||
11340 IF NOT(STARTUP IN STATUS) THEN DISPOSE(PFET)
|
||||
11350 END;
|
||||
11360 EDISPOSE(ANOBJECT, COVERSIZE)
|
||||
11370 END
|
||||
11380 END (*ESAC*)
|
||||
11390 END (*OF WITH*)
|
||||
11400 END; (*OF GARBAGE*)
|
||||
11410 (**)
|
||||
11420 (**)
|
||||
11430 FUNCTION COPYDESC(ORIGINAL: OBJECTP; NEWSORT: STRUCTYPE): OBJECTP;
|
||||
11440 (*PRODUCES EITHER A MULT,RECR,REFR OR A REFSLN FROM A MULT OR A REFSLN
|
||||
11450 N.B. NO PCOUNTS ARE UPDATED*)
|
||||
11460 VAR NEWDESC: OBJECTP;
|
||||
11470 COUNT: INTEGER;
|
||||
11480 BEGIN
|
||||
11490 COUNT := MULTCONST (*REFSLNCONST*) + (ORIGINAL^.ROWS + 1)*SZPDS;
|
||||
11500 ENEW(NEWDESC, COUNT);
|
||||
11510 WITH NEWDESC^ DO
|
||||
11520 BEGIN
|
||||
11530 MOVELEFT(ORIGINAL, NEWDESC, COUNT);
|
||||
11540 SORT := NEWSORT;
|
||||
11550 PCOUNT := 0;
|
||||
11560 END;
|
||||
11570 COPYDESC := NEWDESC
|
||||
11580 END;
|
||||
11590 (**)
|
||||
11600 (**)
|
||||
11610 (*+01() (*$X6*) ()+01*)
|
||||
11620 PROCEDURE OPENCOVER(
|
||||
11630 PFET: FETROOMP; VAR PCOV: OBJECTP; LFN: LFNTYPE; PROCEDURE CH (*-01() ( COV: OBJECTP; L: LFNTYPE) ()-01*)
|
||||
11640 );
|
||||
11650 BEGIN
|
||||
11660 ENEW(PCOV, COVERSIZE);
|
||||
11670 WITH PCOV^ DO
|
||||
11680 BEGIN
|
||||
11690 (*-02() FIRSTWORD := SORTSHIFT * ORD(COVER) + INCRF; ()-02*)
|
||||
11700 (*+02() PCOUNT:=1; SORT:=COVER; ()+02*)
|
||||
11710 BOOK := PFET;
|
||||
11720 ASSOC := FALSE;
|
||||
11730 OSCOPE := 1;
|
||||
11740 CHANNEL := PROC(*-01()H()-01*)(CH);
|
||||
11750 COFCPOS := 1; LOFCPOS := 1; POFCPOS := 1;
|
||||
11760 CH(PCOV, LFN);
|
||||
11770 END
|
||||
11780 END;
|
||||
11790 (**)
|
||||
11800 (**)
|
||||
11810 PROCEDURE START68;
|
||||
11820 (*INITIALIZATION OF RUN68*)
|
||||
11830 VAR PINT: INTPOINT;
|
||||
11840 CURR: IPOINT;
|
||||
11850 TEMP: PACKED RECORD CASE SEVERAL OF
|
||||
11860 1: (INT: INTEGER);
|
||||
11870 2: (ALF: LFNTYPE);
|
||||
11880 3: (LFN: PACKED ARRAY [1..7] OF CHAR;
|
||||
11890 (*+01() EFET1: 0..777777B ()+01*) );
|
||||
11900 0 , 4 , 5 , 6 , 7 , 8 , 9 , 10 : () ;
|
||||
11910 END;
|
||||
11920 (*+01() AW66: ^W66 ; ()+01*)
|
||||
11930 TEMP1: REALTEGER;
|
||||
11940 I: INTEGER;
|
||||
11950 EFET: INTEGER;
|
||||
11960 (*+01() PROCEDURE ESTART(CURR: IPOINT); EXTERN; ()+01*)
|
||||
11970 (*+02() PROCEDURE ESTART_(VAR INF,OUTF : TEXT); EXTERN;
|
||||
11980 FUNCTION MAXR REAL; EXTERN; ()+02*)
|
||||
11990 (*-02() PROCEDURE STOPEN(
|
||||
12000 VAR PF: FYL; VAR RF: OBJECTP; LFN: LFNTYPE; PROCEDURE CH (*-01() ( COV: OBJECTP ; L: LFNTYPE ) ()-01*)
|
||||
12010 ); EXTERN; ()-02*)
|
||||
12020 BEGIN
|
||||
12030 (*+01() CPUCLOCK := -CLOCK; ()+01*)
|
||||
12040 (*-02() CURR := STATIC(ME)+FIRSTIBOFFSET;
|
||||
12050 SETMYSTATIC(CURR); ()-02*)
|
||||
12060 (*+01() ESTART(CURR); (*TO DO ALL THE MACHINE-DEPENDENT INITIALIZATIONS*) ()+01*)
|
||||
12070 (*+02() ESTART_(INPUT,OUTPUT); (*THIS ALSO SETS UP THE FILES*)
|
||||
12080 CURR := STATIC(ME);(*ESTART SET UP START68'S STATIC LINK*) ()+02*)
|
||||
12090 SCOPE := 1;
|
||||
12100 BITPATTERN.MASK := 0; BITPATTERN.COUNT := 0;
|
||||
12110 TRACE := NIL;
|
||||
12120 LEVEL := 0; PROCBL := NIL;
|
||||
12130 LINENO := 0;
|
||||
12140 (*+02()INTUNDEF := -32000 -768; ()+02*)
|
||||
12150 WITH FIRSTRG DO WITH FIRSTW DO
|
||||
12160 BEGIN
|
||||
12170 LOOPCOUNT := 0; RGIDBLK := NIL; RECGEN := NIL;
|
||||
12180 RGSCOPE := 1;
|
||||
12190 (*-41()
|
||||
12200 RIBOFFSET := INCPTR( ASPTR( CURR ) , IBCONST ) ;
|
||||
12210 RGNEXTFREE := INCPTR(RIBOFFSET, RGCONST+SZINT+3*SZADDR (*+02()+3*SZREAL()+02*)) ;
|
||||
12220 ()-41*)
|
||||
12230 (*+41()
|
||||
12240 RIBOFFSET := INCPTR( ASPTR( CURR ) , IBCONST + RGCONST ) ;
|
||||
12250 RGLASTUSED := INCPTR(RIBOFFSET, -SZINT-3*SZADDR (*+02()-3*SZREAL()+02*)) ;
|
||||
12260 ()+41*)
|
||||
12270 END;
|
||||
12280 ENEW(UNDEFIN, MULTCONST+8*SZPDS);
|
||||
12290 (*SHOULD BE, INTER ALIA, THE EMPTY STRING AND THE FLATTEST MULT AND AN UNOPENED COVER*)
|
||||
12300 WITH UNDEFIN^ DO
|
||||
12310 BEGIN
|
||||
12320 (*-02() FIRSTWORD := SORTSHIFT * ORD(UNDEF); ()-02*)
|
||||
12330 (*+02() PCOUNT:=0; SORT:=UNDEF; ()+02*)
|
||||
12340 (*+01() SECONDWORD := 0; ()+01*)
|
||||
12350 PCOUNT := 255;
|
||||
12360 ANCESTOR := UNDEFIN;
|
||||
12370 OSCOPE := 1;
|
||||
12380 ENEW(HIGHPCOUNT,MULTCONST+8*SZPDS);
|
||||
12390 PVALUE := HIGHPCOUNT;
|
||||
12400 WITH PVALUE^ DO
|
||||
12410 BEGIN
|
||||
12420 (*-02() FIRSTWORD := SORTSHIFT * ORD(UNDEF); ()-02*)
|
||||
12430 (*+02() PCOUNT:=0; SORT:=UNDEF; ()+02*)
|
||||
12440 (*+01() SECONDWORD := 0; ()+01*)
|
||||
12450 ANCESTOR := UNDEFIN;
|
||||
12460 PCOUNT := 255;
|
||||
12470 PVALUE := UNDEFIN^.PVALUE;
|
||||
12480 OSCOPE := 1;
|
||||
12490 OFFSET := HIOFFSET;
|
||||
12500 ROWS := 7;
|
||||
12510 STRLENGTH := 0;
|
||||
12520 STATUS := [];
|
||||
12530 WITH DESCVEC[0] DO BEGIN LI := MAXBOUND; UI := MINBOUND END;
|
||||
12540 FOR I := 1 TO 7 DO DESCVEC[I] := DESCVEC[1]
|
||||
12550 END;
|
||||
12560 OFFSET := HIOFFSET;
|
||||
12570 ROWS := 7;
|
||||
12580 STRLENGTH := 0;
|
||||
12590 STATUS := [];
|
||||
12600 WITH DESCVEC[0] DO BEGIN LI := MAXBOUND; UI := MINBOUND END;
|
||||
12610 FOR I := 1 TO 7 DO DESCVEC[I] := DESCVEC[1]
|
||||
12620 END;
|
||||
12630 NILPTR := COPYDESC(UNDEFIN, NILL);
|
||||
12640 NILPTR^.PCOUNT := 255;
|
||||
12650 PUTSTRING := CRSTRING(2*REALWIDTH+2*EXPWIDTH+9);
|
||||
12660 PUTSTRING^.PCOUNT := 255;
|
||||
12670 ALLCHAR := []; FOR I := 0 TO (*+01()58()+01*) (*-01()MAXABSCHAR()-01*) DO ALLCHAR := ALLCHAR+[CHR(I)];
|
||||
12680 (*+01() ALLCHAR1 := []; FOR I := 59 TO 63 DO ALLCHAR1 := ALLCHAR1+[CHR(I-59)]; ()+01*)
|
||||
12690 ENEW(COMPLEX, 2*SZWORD);
|
||||
12700 COMPLEX^[0] := 2*SZREAL; COMPLEX^[1] := -1; (*DBLOCK FOR .COMPL*)
|
||||
12710 ENEW(FILEBLOCK, 12*SZWORD+SZTERMSET); (*DBLOCK FOR FILE*)
|
||||
12720 FILEBLOCK^[0] := 5*SZADDR+SZTERMSET; FILEBLOCK^[1] := 0; FILEBLOCK^[2] := SZADDR; FILEBLOCK^[3] := 2*SZADDR;
|
||||
12730 FILEBLOCK^[4] := 3*SZADDR; FILEBLOCK^[5] := 4*SZADDR; FILEBLOCK^[6] := -1;
|
||||
12740 FILEBLOCK^[7] := 12; FILEBLOCK^[8] := 12; FILEBLOCK^[9] := 12; FILEBLOCK^[10] := 12;
|
||||
12750 FILEBLOCK^[11] := 0; FOR I := 1 TO SZTERMSET DIV SZWORD DO FILEBLOCK^[11+I] := 1;
|
||||
12760 NEW(PASCADDR); TEMP1.PROCC := PROC(CALLPASC); PASCADDR^.XBASE := TEMP1.PROCVAL.PROCADD;
|
||||
12770 (*+54()
|
||||
12780 ENEW(EXCEPTDB, 4*SZWORD);
|
||||
12790 EXCEPTDB^[0] := 2*SZINT; EXCEPTDB^[1] := -1;
|
||||
12800 EXCEPTDB^[2] := 1; EXCEPTDB^[3] := 0;
|
||||
12810 ()+54*)
|
||||
12820 (*-44()
|
||||
12830 LASTRANDOM := ROUND(MAXINT/2);
|
||||
12840 (*-01() (*-05() HALFPI.ACTUALPI := 2*ARCTAN(1.0); ()-05*) ()-01*)
|
||||
12850 (*+01() HALFPI.FAKEPI := FAKEPI; ()+01*)
|
||||
12860 (*+02() PI := 2.0*HALFPI.ACTUALPI;
|
||||
12870 SMALLREAL := 1.0;
|
||||
12880 WHILE (1.0+SMALLREAL*2.0>1.0) AND (1.0-SMALLREAL*2.0<1.0) DO SMALLREAL := SMALLREAL/2.0;
|
||||
12890 MAXREAL := MAXR;
|
||||
12900 ()+02*)
|
||||
12910 (*+05() HALFPI.FAKEPI := FAKEPI ; HALFPI.FAKEPI1 := FAKEPI1 ; ()+05*)
|
||||
12920 ()-44*)
|
||||
12930 UNINT := INTUNDEF;
|
||||
12940 (*+02() UNINTCOPY := UNINT; UNDEFINCOPY := UNDEFIN; ()+02*)
|
||||
12950 (*+01()
|
||||
12960 WITH TEMP DO
|
||||
12970 BEGIN
|
||||
12980 PINT := ASPTR(2); (*1ST PROGRAM PARAMETER*)
|
||||
12990 INT := PINT^;
|
||||
13000 IF INT = 0 THEN LFN := 'INPUT::' ;
|
||||
13010 STOPEN(INPUT, STIN, ALF , STANDINC);
|
||||
13020 EFET := CURR-FIRSTIBOFFSET+INPUTEFET;
|
||||
13030 LFN := 'INPUT::'; EFET1 := EFET+1;
|
||||
13040 PINT^ := INT;
|
||||
13050 PINT := ASPTR(3); (*2ND PROGRAM PARAMETER*)
|
||||
13060 INT := PINT^;
|
||||
13070 IF INT = 0 THEN LFN := 'OUTPUT:' ;
|
||||
13080 STOPEN(OUTPUT, STOUT, ALF , STANDOUT);
|
||||
13090 EFET := CURR-FIRSTIBOFFSET+OUTPUTEFET;
|
||||
13100 AW66 := ASPTR(66B);
|
||||
13110 IF (AW66^.JOPR=3) AND (LFN='OUTPUT:') THEN WRITELN(OUTPUT, 'STARTING ...');
|
||||
13120 LFN := 'OUTPUT:'; EFET1 := EFET+1;
|
||||
13130 PINT^ := INT;
|
||||
13140 PINT := ASPTR(4);
|
||||
13150 PINT^ := INT; (*IN CASE USER OPENS ANOTHER FILE ON OUTPUT*)
|
||||
13160 STBACK := UNDEFIN;
|
||||
13170 END;
|
||||
13180 ()+01*)
|
||||
13190 (*+02()
|
||||
13200 STOPEN(INPUT, STIN, NIL, STANDINC);
|
||||
13210 STOPEN(OUTPUT, STOUT, NIL, STANDOUT);
|
||||
13220 WRITELN(OUTPUT, 'STARTING ...');
|
||||
13230 ()+02*)
|
||||
13240 (*+05()
|
||||
13250 STOPEN(INPUT, STIN, NIL , STANDINC);
|
||||
13260 STOPEN(OUTPUT, STOUT, NIL , STANDOUT);
|
||||
13270 WRITELN(ERROR, 'STARTING ...');
|
||||
13280 ()+05*)
|
||||
13290 END;
|
||||
13300 (*+01() (*$X4*) ()+01*)
|
||||
13310 (**)
|
||||
13320 (**)
|
||||
13330 (**)
|
||||
13340 (**)
|
||||
13350 PROCEDURE STOP68;
|
||||
13360 (*+01() PROCEDURE PEND(EFET: INTEGER); EXTERN; ()+01*)
|
||||
13370 (*+02() PROCEDURE ESTOP_; EXTERN; ()+02*)
|
||||
13380 BEGIN
|
||||
13390 (*+05() FLSBUF(STOUT^.PVALUE^.PCOVER^.BOOK^.XFILE, CHR(10)); ()+05*)
|
||||
13400 WRITELN((*-05()OUTPUT()-05*)(*+05()ERROR()+05*));
|
||||
13410 WRITELN((*-05()OUTPUT()-05*)(*+05()ERROR()+05*), ' ... AND YET ANOTHER ALGOL68 PROGRAM RUNS TO COMPLETION');
|
||||
13420 (*+01() WRITELN(OUTPUT, ' CPU ', (CPUCLOCK+CLOCK)/1000:6:3); ()+01*)
|
||||
13430 (*+05() WRITELN(ERROR, ' CPU ', TIME :5:2); ()+05*)
|
||||
13440 (*+01() PEND(STATIC(ME)-FIRSTIBOFFSET+OUTPUTEFET) ()+01*)
|
||||
13450 (*+02() ESTOP_; ()+02*)
|
||||
13460 END;
|
||||
13470 (**)
|
||||
13480 (**)
|
||||
13490 (**)
|
||||
13500 (**)
|
||||
13510 (*-02() BEGIN END ; ()-02*)
|
||||
13520 (*+01()
|
||||
13530 BEGIN (*OF MAIN PROGRAM*)
|
||||
13540 END (*OF EVERYTHING*).
|
||||
13550 ()+01*)
|
169
lang/a68s/liba68s/globale.e
Normal file
169
lang/a68s/liba68s/globale.e
Normal file
|
@ -0,0 +1,169 @@
|
|||
#include "e.h"
|
||||
exa .HTOP ; the label holtop
|
||||
exa .1 ; the Pascal global area
|
||||
exa _extfl ; the routine '_ini' puts 'input' & 'output' here
|
||||
exp $ESTART0
|
||||
exp $ESTART_
|
||||
exp $ESTOP_
|
||||
exp $ABORT
|
||||
|
||||
|
||||
; PROCEDURE ESTART0
|
||||
pro $ESTART0,0
|
||||
lor 0 ; my LB
|
||||
dup SZADDR
|
||||
dch ; m_a_i_n's LB
|
||||
dup SZADDR
|
||||
str 0 ; pretend I am in m_a_i_n
|
||||
lae .HTOP-FIRSTIBOFFSET; destination address (holtop-firstiboffset)
|
||||
; now calc how much to move
|
||||
lal 0
|
||||
lor 0
|
||||
sbs SZWORD ; subtract address of param from lb to get link space
|
||||
loc SZWORD+SZADDR+SZADDR
|
||||
ads SZWORD ; allow for one parameter of m_a_i_n
|
||||
bls SZWORD ; block move
|
||||
; now the global area contains an exact copy of
|
||||
; m_a_i_n's stack frame, and main will subsequently
|
||||
; adjust its LB to point to this global copy, thus
|
||||
; making it a part of the official stack.
|
||||
str 0 ; get my LB back
|
||||
ret 0
|
||||
end 0
|
||||
|
||||
; PROCEDURE ESTART_ (INPUT,OUTPUT);
|
||||
pro $ESTART_,0
|
||||
.2
|
||||
con 2,0,0 ; array that is to be _extfl
|
||||
.3
|
||||
con 0I SZADDR ; PASCAL trap routine
|
||||
.4
|
||||
con 0 ; trapn
|
||||
con 0 ; signaln
|
||||
LFL SZADDR+SZADDR ; base address for input (2nd param)
|
||||
lae .1
|
||||
sbs SZWORD ; subtract address from hol1 to get offset
|
||||
ste .2+SZWORD ; store in array of offsets
|
||||
LFL SZADDR ; and again for output (1st param after static link)
|
||||
lae .1
|
||||
sbs SZWORD
|
||||
ste .2+SZWORD+SZWORD ; store in array
|
||||
lxl 2 ; params for _ini
|
||||
lae .2
|
||||
lae .1
|
||||
lxa 2
|
||||
cal $_ini
|
||||
asp SZADDR+SZADDR+SZADDR+SZADDR
|
||||
loc A68STAMP ; m_a_i_n's frame stamp, for isa68, any positive number
|
||||
ste .HTOP-FSTAMPOFFSET ; it is in a SZWORD integer, 1st local var
|
||||
inp $_usigs
|
||||
cal $_usigs ; catch UNIX interrupts as EM trap 15
|
||||
inp $_acatch
|
||||
lpi $_acatch ; A68 trap routine
|
||||
sig
|
||||
lae .3
|
||||
sti SZWORD ; preserve PASCAL trap routine
|
||||
zre .4 ; trapn
|
||||
ret 0
|
||||
end 0
|
||||
|
||||
; procedure usigs;
|
||||
; var i: integer;
|
||||
; begin
|
||||
; for i := 1 to 16 do signal(i, ucatch);
|
||||
; end;
|
||||
pro $_usigs,SZWORD
|
||||
mes 9,0
|
||||
loc 1
|
||||
loc 16
|
||||
bgt *2
|
||||
loc 1
|
||||
stl -SZWORD
|
||||
1
|
||||
zer SZWORD
|
||||
inp $_ucatch
|
||||
lpi $_ucatch
|
||||
lol -SZWORD
|
||||
cal $signal
|
||||
asp SZWORD+SZWORD+SZWORD
|
||||
lol -SZWORD
|
||||
loc 16
|
||||
beq *2
|
||||
lol -SZWORD
|
||||
inc
|
||||
stl -SZWORD
|
||||
bra *1
|
||||
2
|
||||
mes 3,-SZWORD,4,1
|
||||
ret 0
|
||||
end SZWORD
|
||||
|
||||
; procedure ucatch(signo: integer);
|
||||
; begin
|
||||
; trap(15);
|
||||
; end;
|
||||
pro $_ucatch,0
|
||||
mes 9,4
|
||||
lol 0
|
||||
ste .4+SZWORD ; signaln
|
||||
#ifdef BSD4
|
||||
loc 0
|
||||
cal $sigsetmask ; unblock all signals
|
||||
asp SZWORD
|
||||
LLC 0 ; SIG_DFL
|
||||
lol 0
|
||||
cal $signal ; because 4.2 Inices do not reset caught signals
|
||||
asp SZADDR+SZWORD
|
||||
#endif
|
||||
loc 15
|
||||
cal $trap
|
||||
asp SZWORD
|
||||
mes 3,0,4,0
|
||||
ret 0
|
||||
end 0
|
||||
|
||||
pro $_acatch,SZWORD
|
||||
loc PASCALSTAMP
|
||||
stl -SZWORD
|
||||
lol 0 ; EM trap number
|
||||
dup SZWORD
|
||||
ste .4 ; trapn
|
||||
ngi SZWORD
|
||||
lxl 0
|
||||
cal $ERRORR ; should never return
|
||||
end SZWORD
|
||||
|
||||
pro $ESTOP_,0
|
||||
loc 0
|
||||
cal $_hlt
|
||||
end 0
|
||||
|
||||
pro $ABORT,0
|
||||
loe .4 ; trapn
|
||||
zne *1
|
||||
loc 1 ; if abort is called then presumably some error has
|
||||
; occured, thus exit code 1
|
||||
cal $_hlt
|
||||
1
|
||||
loe .4 ; trapn
|
||||
loc 15
|
||||
bne *2 ; if not a UNIX signal
|
||||
cal $_cleanup
|
||||
loe .4+SZWORD ; signaln
|
||||
cal $getpid
|
||||
lfr SZWORD
|
||||
cal $kill
|
||||
2
|
||||
lae .3 ; PASCAL trap routine
|
||||
loi SZWORD
|
||||
dup SZWORD
|
||||
zeq *3 ; no PASCAL trap routine
|
||||
sig
|
||||
asp SZWORD
|
||||
loe .4
|
||||
trp ; now let PASCAL handle the same trap
|
||||
3
|
||||
loe .4 ; trapn
|
||||
cal $_catch
|
||||
end 0
|
||||
|
80
lang/a68s/liba68s/gtot.p
Normal file
80
lang/a68s/liba68s/gtot.p
Normal file
|
@ -0,0 +1,80 @@
|
|||
33700 #include "rundecs.h"
|
||||
33710 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
33720 (**)
|
||||
33730 (**)
|
||||
33740 PROCEDURE GARBAGE(ANOBJECT:OBJECTP); EXTERN;
|
||||
33750 FUNCTION DRESSN (CONTENTS: UNDRESSP; TEMPLATE: DPOINT): OBJECTP; EXTERN ;
|
||||
33760 (**)
|
||||
33770 (**)
|
||||
33780 (*-01() (*-05()
|
||||
33790 FUNCTION GTOTS(NAK: NAKED): A68INT;
|
||||
33800 (*PGETTOTAL*)
|
||||
33810 BEGIN
|
||||
33820 GTOTS := NAK.POINTER^.FIRSTINT;
|
||||
33830 IF FPTST(NAK.STOWEDVAL^) THEN GARBAGE(NAK.STOWEDVAL)
|
||||
33840 END;
|
||||
33850 (**)
|
||||
33860 (**)
|
||||
33870 FUNCTION GTOTS2(NAK: NAKED): A68LONG;
|
||||
33880 (*PGETTOTAL+1*)
|
||||
33890 BEGIN
|
||||
33900 GTOTS2 := NAK.POINTER^.FIRSTLONG;
|
||||
33910 IF FPTST(NAK.STOWEDVAL^) THEN GARBAGE(NAK.STOWEDVAL)
|
||||
33920 END;
|
||||
33930 ()-05*) ()-01*)
|
||||
33940 (**)
|
||||
33950 (**)
|
||||
33960 FUNCTION GTOTP(NAK: NAKED): OBJECTP;
|
||||
33970 (*PGETTOTAL+2*)
|
||||
33980 VAR RESULT: OBJECTP;
|
||||
33990 BEGIN WITH NAK DO
|
||||
34000 BEGIN
|
||||
34010 RESULT := POINTER^.FIRSTPTR;
|
||||
34020 IF FPTST(STOWEDVAL^) THEN
|
||||
34030 BEGIN
|
||||
34040 FPINC(RESULT^);
|
||||
34050 GARBAGE(STOWEDVAL);
|
||||
34060 FPDEC(RESULT^);
|
||||
34070 END;
|
||||
34080 GTOTP := RESULT;
|
||||
34090 END
|
||||
34100 END;
|
||||
34110 (**)
|
||||
34120 (**)
|
||||
34130 (*-01() (*-05()
|
||||
34140 FUNCTION GTOTSTR(TEMP: NAKEGER): ASNAKED;
|
||||
34150 (*PGETTOTCMN+1*)
|
||||
34160 BEGIN WITH TEMP DO WITH NAK DO
|
||||
34170 BEGIN
|
||||
34180 POINTER := INCPTR(STOWEDVAL, POSITION);
|
||||
34190 GTOTSTR := ASNAK;
|
||||
34200 END
|
||||
34210 END;
|
||||
34220 (**)
|
||||
34230 (**)
|
||||
34240 FUNCTION GTOTRFR(TEMP: NAKEGER): ASNAKED;
|
||||
34250 (*PGETTOTCMN+2*)
|
||||
34260 BEGIN WITH TEMP DO WITH NAK DO
|
||||
34270 BEGIN
|
||||
34280 POINTER := INCPTR(STOWEDVAL^.ANCESTOR^.PVALUE, POSITION);
|
||||
34290 GTOTRFR := ASNAK;
|
||||
34300 END
|
||||
34310 END;
|
||||
34320 (**)
|
||||
34330 (**)
|
||||
34340 FUNCTION GTOTMUL(TEMP: NAKEGER): ASNAKED;
|
||||
34350 (*PGETTOTCMN+3*)
|
||||
34360 BEGIN WITH TEMP DO WITH NAK DO
|
||||
34370 BEGIN
|
||||
34380 POINTER := INCPTR(STOWEDVAL^.PVALUE, POSITION);
|
||||
34390 GTOTMUL := ASNAK;
|
||||
34400 END
|
||||
34410 END;
|
||||
34420 ()-05*) ()-01*)
|
||||
34430 (**)
|
||||
34440 (**)
|
||||
34450 (*-02() BEGIN END ; ()-02*)
|
||||
34460 (*+01()
|
||||
34470 BEGIN (*OF MAIN PROGRAM*)
|
||||
34480 END (*OF EVERYTHING*).
|
||||
34490 ()+01*)
|
42
lang/a68s/liba68s/gtotref.p
Normal file
42
lang/a68s/liba68s/gtotref.p
Normal file
|
@ -0,0 +1,42 @@
|
|||
34600 #include "rundecs.h"
|
||||
34610 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
34620 (**)
|
||||
34630 (**)
|
||||
34640 PROCEDURE GARBAGE (ANOBJECT: OBJECTP); EXTERN ;
|
||||
34650 PROCEDURE ERRORR(N :INTEGER); EXTERN ;
|
||||
34660 (**)
|
||||
34670 (**)
|
||||
34680 FUNCTION GTOTREF (NAK: NAKED; TEMPLATE: DPOINT): OBJECTP;
|
||||
34690 (*PGETTOTAL+4*)
|
||||
34700 VAR OFFSPRING: OBJECTP;
|
||||
34710 BEGIN
|
||||
34720 WITH NAK, STOWEDVAL^ DO
|
||||
34730 BEGIN
|
||||
34740 CASE SORT OF
|
||||
34750 UNDEF:ERRORR(RSEL);
|
||||
34760 NILL:ERRORR(RSELNIL);
|
||||
34770 REFSL1, REFSLN, REFR, RECR, RECN, REFN:
|
||||
34780 END;
|
||||
34790 ENEW(OFFSPRING, REFSL1SIZE);
|
||||
34800 WITH ANCESTOR^ DO FINC;
|
||||
34810 WITH OFFSPRING^ DO
|
||||
34820 BEGIN
|
||||
34830 (*-02() FIRSTWORD := SORTSHIFT*ORD(REFSL1); ()-02*)
|
||||
34840 (*+02() PCOUNT:=0; SORT:=REFSL1; ()+02*)
|
||||
34850 (*+01() SECONDWORD := 0; ()+01*)
|
||||
34860 ANCESTOR := STOWEDVAL^.ANCESTOR;
|
||||
34870 OFFSET := POSITION;
|
||||
34880 DBLOCK := TEMPLATE;
|
||||
34890 OSCOPE := STOWEDVAL^.OSCOPE
|
||||
34900 END;
|
||||
34910 IF FTST THEN GARBAGE(STOWEDVAL)
|
||||
34920 END; (*WITH*)
|
||||
34930 GTOTREF := OFFSPRING
|
||||
34940 END;
|
||||
34950 (**)
|
||||
34960 (**)
|
||||
34970 (*-02() BEGIN END ; ()-02*)
|
||||
34980 (*+01()
|
||||
34990 BEGIN (*OF MAIN PROGRAM*)
|
||||
35000 END (*OF EVERYTHING*).
|
||||
35010 ()+01*)
|
24
lang/a68s/liba68s/gvasstx.p
Normal file
24
lang/a68s/liba68s/gvasstx.p
Normal file
|
@ -0,0 +1,24 @@
|
|||
35100 #include "rundecs.h"
|
||||
35110 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
35120 (**)
|
||||
35130 (**)
|
||||
35140 PROCEDURE GARBAGE (ANOBJECT: OBJECTP); EXTERN ;
|
||||
35150 (**)
|
||||
35160 (**)
|
||||
35170 PROCEDURE GVASSTX(SOURCE: OBJECTP; DEST: UNDRESSP);
|
||||
35180 (*PASGVART+6,7,8: ASSIGNS PILE VALUE TO GLOBAL VARIABLE*)
|
||||
35190 BEGIN
|
||||
35200 FPINC(SOURCE^);
|
||||
35210 WITH DEST^ DO
|
||||
35220 BEGIN
|
||||
35230 FPDEC(FIRSTPTR^); IF FPTST(FIRSTPTR^) THEN GARBAGE(FIRSTPTR);
|
||||
35240 FIRSTPTR := SOURCE;
|
||||
35250 END;
|
||||
35260 END;
|
||||
35270 (**)
|
||||
35280 (**)
|
||||
35290 (*-02() BEGIN END ; ()-02*)
|
||||
35300 (*+01()
|
||||
35310 BEGIN (*OF MAIN PROGRAM*)
|
||||
35320 END (*OF EVERYTHING*).
|
||||
35330 ()+01*)
|
53
lang/a68s/liba68s/gvscope.p
Normal file
53
lang/a68s/liba68s/gvscope.p
Normal file
|
@ -0,0 +1,53 @@
|
|||
35400 #include "rundecs.h"
|
||||
35410 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
35420 (**)
|
||||
35430 (**)
|
||||
35440 PROCEDURE GARBAGE (ANOBJECT: OBJECTP); EXTERN;
|
||||
35450 PROCEDURE ERRORR(N :INTEGER); EXTERN;
|
||||
35460 (**)
|
||||
35470 (**)
|
||||
35480 FUNCTION GLDVAR (LOCRG: DEPTHRANGE; PTR: UNDRESSP; IBPT: IPOINT): OBJECTP;
|
||||
35490 (*PLOADVAR+0,1,2*)
|
||||
35500 VAR NEWCREFX: OBJECTP;
|
||||
35510 CURR: IPOINT;
|
||||
35520 BEGIN
|
||||
35530 ENEW(NEWCREFX, CREFSIZE);
|
||||
35540 WITH NEWCREFX^ DO
|
||||
35550 BEGIN
|
||||
35560 (*-02() FIRSTWORD := SORTSHIFT * ORD(CREF); ()-02*)
|
||||
35570 (*+02() PCOUNT:=0; SORT:=CREF; ()+02*)
|
||||
35580 (*+01() SECONDWORD := 0; ()+01*)
|
||||
35590 ANCESTOR := NEWCREFX;
|
||||
35600 PVALUE := HIGHPCOUNT;
|
||||
35610 IPTR := PTR;
|
||||
35620 CURR := STATIC(ME);
|
||||
35630 SETMYSTATIC(IBPT);
|
||||
35640 OSCOPE := SCOPE+LOCRG;
|
||||
35650 SETMYSTATIC(CURR)
|
||||
35660 END;
|
||||
35670 GLDVAR := NEWCREFX;
|
||||
35680 END;
|
||||
35690 (**)
|
||||
35700 (**)
|
||||
35710 PROCEDURE GVSCOPE(SOURCE: OBJECTP; LOCRG: DEPTHRANGE; DEST: UNDRESSP; GLOBIB: IPOINT);
|
||||
35720 (*PSCOPEVAR+1*)
|
||||
35730 VAR CURR: IPOINT;
|
||||
35740 BEGIN
|
||||
35750 CURR := STATIC(ME);
|
||||
35760 SETMYSTATIC(GLOBIB);
|
||||
35770 IF SCOPE+LOCRG<SOURCE^.OSCOPE THEN ERRORR(RSCOPE);
|
||||
35780 SETMYSTATIC(CURR);
|
||||
35790 FPINC(SOURCE^);
|
||||
35800 WITH DEST^ DO
|
||||
35810 BEGIN
|
||||
35820 FPINC(FIRSTPTR^); IF FPTST(FIRSTPTR^) THEN GARBAGE(FIRSTPTR);
|
||||
35830 FIRSTPTR := SOURCE;
|
||||
35840 END;
|
||||
35850 END;
|
||||
35860 (**)
|
||||
35870 (**)
|
||||
35880 (*-02() BEGIN END ; ()-02*)
|
||||
35890 (*+01()
|
||||
35900 BEGIN (*OF MAIN PROGRAM*)
|
||||
35910 END (*OF EVERYTHING*).
|
||||
35920 ()+01*)
|
37
lang/a68s/liba68s/heapmul.p
Normal file
37
lang/a68s/liba68s/heapmul.p
Normal file
|
@ -0,0 +1,37 @@
|
|||
36000 #include "rundecs.h"
|
||||
36010 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
36020 (**)
|
||||
36030 (**)
|
||||
36040 FUNCTION CRMULT(NEWMULT: OBJECTP; TEMPLATE: DPOINT): OBJECTP; EXTERN;
|
||||
36050 (**)
|
||||
36060 (**)
|
||||
36070 FUNCTION HEAPMUL(NEWMULT: OBJECTP; TEMPLATE: DPOINT): OBJECTP;
|
||||
36080 (*PLEAPGEN+4*)
|
||||
36090 VAR NEWREF: OBJECTP;
|
||||
36100 BEGIN
|
||||
36110 NEWREF := CRMULT(NEWMULT, TEMPLATE);
|
||||
36120 WITH NEWREF^ DO
|
||||
36130 BEGIN
|
||||
36140 SORT := REFR;
|
||||
36150 OSCOPE := 3;
|
||||
36160 ANCESTOR := NEWREF; CCOUNT := 1;
|
||||
36170 END;
|
||||
36180 HEAPMUL := NEWREF;
|
||||
36190 END;
|
||||
36200 (**)
|
||||
36210 (**)
|
||||
36220 FUNCTION GENMUL(NEWMULT: OBJECTP; TEMPLATE: DPOINT; LOCRG: DEPTHRANGE): OBJECTP;
|
||||
36230 (*PLEAPGEN+3*)
|
||||
36240 VAR NEWREFR: OBJECTP;
|
||||
36250 BEGIN
|
||||
36260 NEWREFR := HEAPMUL(NEWMULT, TEMPLATE);
|
||||
36270 NEWREFR^.OSCOPE := SCOPE+LOCRG;
|
||||
36280 GENMUL := NEWREFR;
|
||||
36290 END;
|
||||
36300 (**)
|
||||
36310 (**)
|
||||
36320 (*-02() BEGIN END ; ()-02*)
|
||||
36330 (*+01()
|
||||
36340 BEGIN (*OF MAIN PROGRAM*)
|
||||
36350 END (*OF EVERYTHING*).
|
||||
36360 ()+01*)
|
76
lang/a68s/liba68s/heapstr.p
Normal file
76
lang/a68s/liba68s/heapstr.p
Normal file
|
@ -0,0 +1,76 @@
|
|||
36400 #include "rundecs.h"
|
||||
36410 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
36420 (**)
|
||||
36430 (**)
|
||||
36440 FUNCTION CRSTRUCT(TEMPLATE: DPOINT): OBJECTP; EXTERN;
|
||||
36450 (**)
|
||||
36460 (**)
|
||||
36470 FUNCTION HEAPSTR(TEMPLATE: DPOINT): OBJECTP;
|
||||
36480 (*PLEAPGEN+1*)
|
||||
36490 VAR NEWREF: OBJECTP;
|
||||
36500 BEGIN
|
||||
36510 IF ORD(TEMPLATE)=SZINT THEN
|
||||
36520 BEGIN
|
||||
36530 ENEW(NEWREF, REF1SIZE);
|
||||
36540 WITH NEWREF^ DO BEGIN
|
||||
36550 (*-02() FIRSTWORD := SORTSHIFT * ORD(REF1); ()-02*)
|
||||
36560 (*+02() PCOUNT:=0; SORT:=REF1; ()+02*)
|
||||
36570 (*+01() SECONDWORD := 0; ()+01*)
|
||||
36580 ANCESTOR := NEWREF;
|
||||
36590 PVALUE := HIGHPCOUNT;
|
||||
36600 OFFSET := REF1SIZE-SZINT;
|
||||
36610 VALUE := INTUNDEF
|
||||
36620 END
|
||||
36630 END
|
||||
36640 (*-01()
|
||||
36650 ELSE IF ORD(TEMPLATE)=SZLONG THEN
|
||||
36660 BEGIN
|
||||
36670 ENEW(NEWREF, REF2SIZE);
|
||||
36680 WITH NEWREF^ DO BEGIN
|
||||
36690 (*-02() FIRSTWORD := SORTSHIFT * ORD(REF2); ()-02*)
|
||||
36700 (*+02() PCOUNT:=0; SORT:=REF2; ()+02*)
|
||||
36710 ANCESTOR := NEWREF;
|
||||
36720 PVALUE := HIGHPCOUNT;
|
||||
36730 OFFSET := REF2SIZE-SZINT;
|
||||
36740 LONGVALUE := LONGUNDEF
|
||||
36750 END
|
||||
36760 END
|
||||
36770 ()-01*)
|
||||
36780 ELSE
|
||||
36790 BEGIN
|
||||
36800 ENEW(NEWREF, REFNSIZE);
|
||||
36810 WITH NEWREF^ DO
|
||||
36820 BEGIN
|
||||
36830 (*-02() FIRSTWORD := SORTSHIFT * ORD(REFN); ()-02*)
|
||||
36840 (*+02() PCOUNT:=0; SORT:=REFN; ()+02*)
|
||||
36850 (*+01() SECONDWORD := 0; ()+01*)
|
||||
36860 IF ORD(TEMPLATE)=0 THEN PVALUE := UNDEFIN
|
||||
36870 ELSE
|
||||
36880 BEGIN
|
||||
36890 PVALUE := CRSTRUCT(TEMPLATE);
|
||||
36900 FPINC(PVALUE^);
|
||||
36910 ANCESTOR := NEWREF;
|
||||
36920 OFFSET := STRUCTCONST;
|
||||
36930 END;
|
||||
36940 END
|
||||
36950 END;
|
||||
36960 NEWREF^.OSCOPE := 3;
|
||||
36970 HEAPSTR := NEWREF;
|
||||
36980 END;
|
||||
36990 (**)
|
||||
37000 (**)
|
||||
37010 FUNCTION GENSTR(TEMPLATE: DPOINT; LOCRG: DEPTHRANGE): OBJECTP;
|
||||
37020 (*PLEAPGEN*)
|
||||
37030 VAR NEWREF: OBJECTP;
|
||||
37040 BEGIN
|
||||
37050 NEWREF := HEAPSTR(TEMPLATE);
|
||||
37060 NEWREF^.OSCOPE := SCOPE+LOCRG;
|
||||
37070 GENSTR := NEWREF;
|
||||
37080 END;
|
||||
37090 (**)
|
||||
37100 (**)
|
||||
37110 (*-02() BEGIN END ; ()-02*)
|
||||
37120 (*+01()
|
||||
37130 BEGIN (*OF MAIN PROGRAM*)
|
||||
37140 END (*OF EVERYTHING*).
|
||||
37150 ()+01*)
|
35
lang/a68s/liba68s/hoist.e
Normal file
35
lang/a68s/liba68s/hoist.e
Normal file
|
@ -0,0 +1,35 @@
|
|||
#include "e.h"
|
||||
|
||||
exp $HOIST
|
||||
|
||||
pro $HOIST,SZADDR ; used to balance the amount of space on the stack
|
||||
; for a call to PUT or PRINT. This is done by
|
||||
; loading an amount of dummy data (-1).
|
||||
; The parameter is the amount of dummy space needed.
|
||||
|
||||
lxa 0 ; base address of params
|
||||
lol SZADDR ; param, after static link, the difference
|
||||
loc SZADDR+SZWORD ; diff calculated from after param and static link
|
||||
adu SZWORD ; add last two
|
||||
ads SZWORD ; add total to arg base
|
||||
dup SZADDR ; this is the address of 'count'
|
||||
SFL -SZADDR ; save for later use
|
||||
loi SZWORD ; load count
|
||||
lol SZADDR ; load difference
|
||||
adu SZWORD ; new count
|
||||
stl SZADDR+SZWORD ; store in new place, at bottom of dummy data
|
||||
1
|
||||
loc -1 ; dummy data to PRINT
|
||||
LFL -SZADDR ; address to place data, initialy where count was
|
||||
dup SZADDR
|
||||
adp -SZWORD ; reduce pointer by SZWORD ready for next time
|
||||
SFL -SZADDR ; re-save
|
||||
sti SZWORD ; place -1 in target address
|
||||
lol SZADDR ; use difference as a loop counter now
|
||||
loc SZWORD
|
||||
sbi SZWORD ; reduce loop counter by SZWORD
|
||||
dup SZWORD ; need one to store and one to test
|
||||
stl SZADDR ; re-save
|
||||
zgt *1 ; do next SZWORD block
|
||||
ret 0
|
||||
end SZADDR
|
30
lang/a68s/liba68s/is.p
Normal file
30
lang/a68s/liba68s/is.p
Normal file
|
@ -0,0 +1,30 @@
|
|||
37200 #include "rundecs.h"
|
||||
37210 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
37220 (**)
|
||||
37230 (**)
|
||||
37240 FUNCTION RELSUP(REF: OBJECTP): UNDRESSP; EXTERN;
|
||||
37250 (**)
|
||||
37260 (**)
|
||||
37270 FUNCTION IS(LEFT, RIGHT: OBJECTP): INTEGER;
|
||||
37280 (*PIDTYREL*)
|
||||
37290 BEGIN
|
||||
37300 IF RELSUP(LEFT)=RELSUP(RIGHT) THEN
|
||||
37310 IS := -1
|
||||
37320 ELSE IS := 0
|
||||
37330 END;
|
||||
37340 (**)
|
||||
37350 (**)
|
||||
37360 FUNCTION ISNT(LEFT, RIGHT: OBJECTP): INTEGER;
|
||||
37370 (*PIDTYREL+1*)
|
||||
37380 BEGIN
|
||||
37390 IF RELSUP(LEFT)<>RELSUP(RIGHT) THEN
|
||||
37400 ISNT := -1
|
||||
37410 ELSE ISNT := 0
|
||||
37420 END;
|
||||
37430 (**)
|
||||
37440 (**)
|
||||
37450 (*-02() BEGIN END ; ()-02*)
|
||||
37460 (*+01()
|
||||
37470 BEGIN (*OF MAIN PROGRAM*)
|
||||
37480 END (*OF EVERYTHING*).
|
||||
37490 ()+01*)
|
28
lang/a68s/liba68s/linit2.p
Normal file
28
lang/a68s/liba68s/linit2.p
Normal file
|
@ -0,0 +1,28 @@
|
|||
37600 #include "rundecs.h"
|
||||
37610 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
37620 (**)
|
||||
37630 (**)
|
||||
37640 (*-01()
|
||||
37650 FUNCTION LINIT2(TOO: INTEGER; PTR: NOBYLPP): BOOLEAN ;
|
||||
37660 (*PLOOPINIT+1*)
|
||||
37670 BEGIN
|
||||
37680 FIRSTRG.RIBOFFSET^.FIRSTW.LOOPCOUNT := FIRSTRG.RIBOFFSET^.FIRSTW.LOOPCOUNT+1;
|
||||
37690 WITH PTR^ DO
|
||||
37700 BEGIN
|
||||
37710 LOOPTYP := 2;
|
||||
37720 FROMPART := GETSTKTOP(SZINT, 0);
|
||||
37730 TOPART := TOO;
|
||||
37740 LINIT2 := TOPART>=FROMPART;
|
||||
37750 END;
|
||||
37760 END;
|
||||
37770 ()-01*)
|
||||
37780 (**)
|
||||
37790 (**)
|
||||
37800 (*-02()
|
||||
37810 BEGIN
|
||||
37820 END ;
|
||||
37830 ()-02*)
|
||||
37840 (*+01()
|
||||
37850 BEGIN (*OF MAIN PROGRAM*)
|
||||
37860 END (*OF EVERYTHING*).
|
||||
37870 ()+01*)
|
34
lang/a68s/liba68s/linit34.p
Normal file
34
lang/a68s/liba68s/linit34.p
Normal file
|
@ -0,0 +1,34 @@
|
|||
37900 #include "rundecs.h"
|
||||
37910 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
37920 (**)
|
||||
37930 (**)
|
||||
37940 PROCEDURE LINIT3(BY: INTEGER; PTR: BYLPP) ;
|
||||
37950 BEGIN
|
||||
37960 FIRSTRG.RIBOFFSET^.FIRSTW.LOOPCOUNT := FIRSTRG.RIBOFFSET^.FIRSTW.LOOPCOUNT+1;
|
||||
37970 WITH PTR^ DO
|
||||
37980 BEGIN
|
||||
37990 LOOPTYP := 3;
|
||||
38000 BYPART := BY;
|
||||
38010 FROMPART := GETSTKTOP(SZINT, 0);
|
||||
38020 END;
|
||||
38030 END;
|
||||
38040 (**)
|
||||
38050 PROCEDURE LINIT4(FROM: INTEGER; PTR: NOBYLPP) ;
|
||||
38060 BEGIN
|
||||
38070 FIRSTRG.RIBOFFSET^.FIRSTW.LOOPCOUNT := FIRSTRG.RIBOFFSET^.FIRSTW.LOOPCOUNT+1;
|
||||
38080 WITH PTR^ DO
|
||||
38090 BEGIN
|
||||
38100 LOOPTYP := 4;
|
||||
38110 FROMPART := FROM;
|
||||
38120 END;
|
||||
38130 END;
|
||||
38140 (**)
|
||||
38150 (**)
|
||||
38160 (*-02()
|
||||
38170 BEGIN
|
||||
38180 END ;
|
||||
38190 ()-02*)
|
||||
38200 (*+01()
|
||||
38210 BEGIN (*OF MAIN PROGRAM*)
|
||||
38220 END (*OF EVERYTHING*).
|
||||
38230 ()+01*)
|
43
lang/a68s/liba68s/linitinc.p
Normal file
43
lang/a68s/liba68s/linitinc.p
Normal file
|
@ -0,0 +1,43 @@
|
|||
38300 #include "rundecs.h"
|
||||
38310 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
38320 (**)
|
||||
38330 (**)
|
||||
38340 FUNCTION LINIT1(TOO: INTEGER; PTR: BYLPP): BOOLEAN ;
|
||||
38350 (*PLOOPINIT*)
|
||||
38360 BEGIN
|
||||
38370 FIRSTRG.RIBOFFSET^.FIRSTW.LOOPCOUNT := FIRSTRG.RIBOFFSET^.FIRSTW.LOOPCOUNT +1 ;
|
||||
38380 WITH PTR^ DO
|
||||
38390 BEGIN
|
||||
38400 LOOPTYP := 1;
|
||||
38410 BYPART := GETSTKTOP(SZINT, 0);
|
||||
38420 FROMPART := GETSTKTOP(SZINT, SZINT);
|
||||
38430 TOPART := TOO;
|
||||
38440 IF BYPART>0 THEN LINIT1 := TOPART>=FROMPART
|
||||
38450 ELSE IF BYPART<0 THEN LINIT1 := TOPART<=FROMPART
|
||||
38460 ELSE LINIT1 := TRUE;
|
||||
38470 END;
|
||||
38480 END;
|
||||
38490 (**)
|
||||
38500 (**)
|
||||
38510 (*-01()
|
||||
38520 FUNCTION LOOPINC(PTR: BYLPP): BOOLEAN ;
|
||||
38530 BEGIN
|
||||
38540 WITH PTR^ DO
|
||||
38550 BEGIN
|
||||
38560 FROMPART := FROMPART+BYPART;
|
||||
38570 IF BYPART>0 THEN LOOPINC := TOPART>=FROMPART
|
||||
38580 ELSE IF BYPART<0 THEN LOOPINC := TOPART<=FROMPART
|
||||
38590 ELSE LOOPINC := TRUE;
|
||||
38600 END;
|
||||
38610 END ;
|
||||
38620 ()-01*)
|
||||
38630 (**)
|
||||
38640 (**)
|
||||
38650 (*-02()
|
||||
38660 BEGIN
|
||||
38670 END ;
|
||||
38680 ()-02*)
|
||||
38690 (*+01()
|
||||
38700 BEGIN (*OF MAIN PROGRAM*)
|
||||
38710 END (*OF EVERYTHING*).
|
||||
38720 ()+01*)
|
5
lang/a68s/liba68s/ln.c
Normal file
5
lang/a68s/liba68s/ln.c
Normal file
|
@ -0,0 +1,5 @@
|
|||
extern double _ln();
|
||||
|
||||
double LN(statlink, x)
|
||||
int *statlink; double x;
|
||||
{return(_ln(x));}
|
30
lang/a68s/liba68s/make
Executable file
30
lang/a68s/liba68s/make
Executable file
|
@ -0,0 +1,30 @@
|
|||
EMROOT=../../..
|
||||
case `$EMROOT/bin/ack_sys` in
|
||||
pdp_v7) ACM=pdp ; BM=0 ;;
|
||||
vax_bsd4_1a) ACM=vax4 ;;
|
||||
vax_bsd4_2) ACM=vax4 ;;
|
||||
vax_sysV_2) ACM=vax4 ;;
|
||||
pc_ix) ACM=i86 ; BM=0;;
|
||||
sun3) ACM=sun3 ;;
|
||||
sun2) ACM=sun2 ;;
|
||||
m68_unisoft) ACM=m68k2 ;;
|
||||
m68_sysV_0) ACM=mantra ;;
|
||||
*) ;;
|
||||
esac
|
||||
|
||||
MACH=${MACH-$ACM}
|
||||
case $MACH in \
|
||||
pdp) w=2; p=2; NOFLOAT=0; RECIPE='12 13 119'; ASAR=ar ;; \
|
||||
m68k2) w=2; p=4; NOFLOAT=1; RECIPE='12 113 19 43 44'; ASAR=aal ;; \
|
||||
moon3) w=2; p=4; NOFLOAT=1; RECIPE='12 113 19 43 44'; BSD4=-DBSD4; ASAR=aal ;; \
|
||||
m68020|m68000) w=4; p=4; NOFLOAT=1; RECIPE='112 13 119 43 44'; ASAR=aal ;; \
|
||||
sun3) w=4; p=4; NOFLOAT=1; RECIPE='112 13 119 43 44'; BSD4=-DBSD4; ASAR=aal ;; \
|
||||
vax4) w=4; p=4; NOFLOAT=0; RECIPE='112 13 119'; BSD4=-DBSD4; \
|
||||
ASAR=ar; VAX4=-DVAX4; SOFILES='lpb.o'; RANLIB=ranlib; export RANLIB ;; \
|
||||
*) echo machine $MACH not known to a68s; exit 1 ;; \
|
||||
esac
|
||||
/bin/make -f Makefile MACH=$MACH w=$w p=$p NOFLOAT=$NOFLOAT \
|
||||
RECIPE="$RECIPE" BSD4=$BSD4 ASAR=$ASAR \
|
||||
VAX4=$VAX4 SOFILES=$SOFILES $*
|
||||
|
||||
# sun3) w=4; p=4; NOFLOAT=0; RECIPE='112 13 119'; BSD4=-DBSD4 ;; \
|
14
lang/a68s/liba68s/maxr.c
Normal file
14
lang/a68s/liba68s/maxr.c
Normal file
|
@ -0,0 +1,14 @@
|
|||
#include <math.h>
|
||||
|
||||
double MAXR(staticlink)
|
||||
int *staticlink;
|
||||
#ifdef MAXFLOAT
|
||||
{ return(MAXFLOAT); }
|
||||
#else
|
||||
#ifdef HUGE
|
||||
{ return(HUGE); }
|
||||
#else
|
||||
{ return(0.0); /* obviously wrong*/ }
|
||||
#endif
|
||||
#endif
|
||||
|
8
lang/a68s/liba68s/mod.c
Normal file
8
lang/a68s/liba68s/mod.c
Normal file
|
@ -0,0 +1,8 @@
|
|||
MOD(statlink, b , a)
|
||||
int *statlink ;
|
||||
int a , b ;
|
||||
{
|
||||
int r ;
|
||||
r = a % b ;
|
||||
return( r < 0 ? r + ( b < 0 ? - b : b ) : r ) ;
|
||||
}
|
101
lang/a68s/liba68s/mulis.p
Normal file
101
lang/a68s/liba68s/mulis.p
Normal file
|
@ -0,0 +1,101 @@
|
|||
61500 #include "rundecs.h"
|
||||
61510 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
61520 (**)
|
||||
61530 (**)
|
||||
61540 PROCEDURE GARBAGE (ANOBJECT: OBJECTP); EXTERN ;
|
||||
61550 FUNCTION CRSTRING(LENGTH: OFFSETRANGE): OBJECTP; EXTERN;
|
||||
61560 PROCEDURE ERRORR(N :INTEGER); EXTERN ;
|
||||
61570 (**)
|
||||
61580 (**)
|
||||
61590 FUNCTION MULCI(CH: CHAR; N: INTEGER): OBJECTP;
|
||||
61600 (*PMULCI*)
|
||||
61610 VAR POINT: OBJECTP;
|
||||
61620 I: INTEGER;
|
||||
61630 BEGIN
|
||||
61640 POINT := CRSTRING(N);
|
||||
61650 WITH POINT^ DO
|
||||
61660 FOR I := 1 TO N DO
|
||||
61670 CHARVEC[I] := CH;
|
||||
61680 MULCI := POINT;
|
||||
61690 END;
|
||||
61700 (**)
|
||||
61710 (**)
|
||||
61720 FUNCTION MULSI(S: OBJECTP; N: INTEGER): OBJECTP;
|
||||
61730 (*PMULCI-1*)
|
||||
61740 VAR POINT: OBJECTP;
|
||||
61750 I, J: INTEGER;
|
||||
61760 C: CHAR;
|
||||
61770 BEGIN
|
||||
61780 WITH S^ DO
|
||||
61790 BEGIN
|
||||
61800 POINT := CRSTRING(STRLENGTH*N);
|
||||
61810 FOR I := 0 TO N-1 DO
|
||||
61820 FOR J := 1 TO STRLENGTH DO
|
||||
61830 BEGIN C := CHARVEC[J]; POINT^.CHARVEC[I*STRLENGTH+J] := C END
|
||||
61840 END;
|
||||
61850 IF FPTST(S^) THEN GARBAGE(S);
|
||||
61860 MULSI := POINT;
|
||||
61870 END;
|
||||
61880 (**)
|
||||
61890 (**)
|
||||
61900 FUNCTION MULIC(N: INTEGER; CH: CHAR): OBJECTP;
|
||||
61910 (*PMULIC*)
|
||||
61920 VAR POINT :OBJECTP;
|
||||
61930 I :INTEGER;
|
||||
61940 BEGIN
|
||||
61950 POINT := CRSTRING(N);
|
||||
61960 WITH POINT^ DO
|
||||
61970 FOR I := 1 TO N DO
|
||||
61980 CHARVEC[I] := CH;
|
||||
61990 MULIC := POINT;
|
||||
62000 END;
|
||||
62010 (**)
|
||||
62020 (**)
|
||||
62030 FUNCTION MULIS(N: INTEGER; S: OBJECTP): OBJECTP;
|
||||
62040 (*PMULIC-1*)
|
||||
62050 VAR POINT: OBJECTP;
|
||||
62060 I, J: INTEGER;
|
||||
62070 C: CHAR;
|
||||
62080 BEGIN
|
||||
62090 WITH S^ DO
|
||||
62100 BEGIN
|
||||
62110 POINT := CRSTRING(STRLENGTH*N);
|
||||
62120 FOR I := 0 TO N-1 DO
|
||||
62130 FOR J := 1 TO STRLENGTH DO
|
||||
62140 BEGIN C := CHARVEC[J]; POINT^.CHARVEC[I*STRLENGTH+J] := C END
|
||||
62150 END;
|
||||
62160 IF FPTST(S^) THEN GARBAGE(S);
|
||||
62170 MULIS := POINT;
|
||||
62180 END;
|
||||
62190 (**)
|
||||
62200 (**)
|
||||
62210 FUNCTION MULABSI(LEFT: OBJECTP; N: INTEGER): OBJECTP;
|
||||
62220 (*PTIMESABS*)
|
||||
62230 VAR PIL: OBJECTP;
|
||||
62240 BEGIN
|
||||
62250 WITH LEFT^ DO
|
||||
62260 CASE SORT OF
|
||||
62270 REFN:
|
||||
62280 BEGIN
|
||||
62290 WITH PVALUE^ DO FDEC;
|
||||
62300 PVALUE := MULSI(PVALUE, N);
|
||||
62310 WITH PVALUE^ DO FINC
|
||||
62320 END;
|
||||
62330 CREF:
|
||||
62340 BEGIN PIL := IPTR^.FIRSTPTR;
|
||||
62350 WITH PIL^ DO FDEC;
|
||||
62360 PIL := MULSI(PIL, N); IPTR^.FIRSTPTR := PIL;
|
||||
62370 WITH PIL^ DO FINC
|
||||
62380 END;
|
||||
62390 UNDEF: ERRORR(RASSIG);
|
||||
62400 NILL: ERRORR(RASSIGNIL);
|
||||
62410 END;
|
||||
62420 MULABSI := LEFT;
|
||||
62430 END;
|
||||
62440 (**)
|
||||
62450 (**)
|
||||
62460 (*-02() BEGIN END ; ()-02*)
|
||||
62470 (*+01()
|
||||
62480 BEGIN (*OF MAIN PROGRAM*)
|
||||
62490 END (*OF EVERYTHING*).
|
||||
62500 ()+01*)
|
72
lang/a68s/liba68s/nassp.p
Normal file
72
lang/a68s/liba68s/nassp.p
Normal file
|
@ -0,0 +1,72 @@
|
|||
40000 #include "rundecs.h"
|
||||
40010 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
40020 (**)
|
||||
40030 PROCEDURE GARBAGE (ANOBJECT: OBJECTP); EXTERN;
|
||||
40040 PROCEDURE ERRORR(N :INTEGER); EXTERN;
|
||||
40050 FUNCTION STRUCTSCOPE(STRUCTPTR: UNDRESSP; TEMPLATE: DPOINT):DEPTHRANGE; EXTERN;
|
||||
40060 PROCEDURE UNDRESSN (COLLECTOR, STRUCTPTR: UNDRESSP; TEMPLATE: DPOINT; SOURCEP: OBJECTP); EXTERN ;
|
||||
40070 PROCEDURE NASSTCMN(ANOBJECT: OBJECTP); EXTERN;
|
||||
40080 (**)
|
||||
40090 (**)
|
||||
40100 FUNCTION NASSTP(TEMP: NAKEGER; SOURCE: OBJECTP; TEMPLATE: DPOINT): ASNAKED;
|
||||
40110 (*+01() EXTERN ; ()+01*)
|
||||
40120 (*PASSIGNNT+3*)
|
||||
40130 (*-01()
|
||||
40140 BEGIN
|
||||
40150 WITH TEMP.NAK, STOWEDVAL^.ANCESTOR^ DO
|
||||
40160 BEGIN
|
||||
40170 IF FPTWO(PVALUE^) THEN
|
||||
40180 NASSTCMN(STOWEDVAL);
|
||||
40190 PVALUE^.OSCOPE := 0;
|
||||
40200 UNDRESSN(INCPTR(PVALUE, POSITION), INCPTR(SOURCE, STRUCTCONST), TEMPLATE, SOURCE);
|
||||
40210 END;
|
||||
40220 NASSTP := TEMP.ASNAK;
|
||||
40230 END;
|
||||
40240 (**)
|
||||
40250 (**)
|
||||
40260 ()-01*)
|
||||
40270 FUNCTION NASSNP(TEMP: NAKEGER; TEMP2: NAKEGER; TEMPLATE: DPOINT): ASNAKED;
|
||||
40280 (*PASSIGNNN*)
|
||||
40290 VAR DEST: UNDRESSP;
|
||||
40300 BEGIN
|
||||
40310 WITH TEMP.NAK, STOWEDVAL^.ANCESTOR^ DO
|
||||
40320 BEGIN
|
||||
40330 IF FPTWO(PVALUE^) THEN
|
||||
40340 NASSTCMN(STOWEDVAL);
|
||||
40350 PVALUE^.OSCOPE := 0;
|
||||
40360 DEST := INCPTR(PVALUE, POSITION)
|
||||
40370 END;
|
||||
40380 WITH TEMP2.NAK DO
|
||||
40390 UNDRESSN(DEST, POINTER, TEMPLATE, STOWEDVAL);
|
||||
40400 NASSNP := TEMP.ASNAK;
|
||||
40410 END;
|
||||
40420 (**)
|
||||
40430 (**)
|
||||
40440 FUNCTION SCPNTP(TEMP: NAKEGER; SOURCE: OBJECTP; TEMPLATE: DPOINT): ASNAKED;
|
||||
40450 (*PSCOPENT+3*)
|
||||
40460 BEGIN
|
||||
40470 WITH SOURCE^ DO
|
||||
40480 BEGIN
|
||||
40490 IF OSCOPE=0 THEN OSCOPE := STRUCTSCOPE(INCPTR(SOURCE, STRUCTCONST), DBLOCK);
|
||||
40500 IF TEMP.NAK.STOWEDVAL^.OSCOPE<OSCOPE THEN ERRORR(RSCOPE);
|
||||
40510 END;
|
||||
40520 SCPNTP := NASSTP(TEMP, SOURCE, TEMPLATE);
|
||||
40530 END;
|
||||
40540 (**)
|
||||
40550 (**)
|
||||
40560 FUNCTION SCPNNP(TEMP: NAKEGER; TEMP2: NAKEGER; TEMPLATE: DPOINT): ASNAKED;
|
||||
40570 (*PSCOPENN+0,1*)
|
||||
40580 BEGIN
|
||||
40590 IF TEMP.NAK.STOWEDVAL^.OSCOPE<STRUCTSCOPE(TEMP2.NAK.POINTER, TEMPLATE) THEN ERRORR(RSCOPE);
|
||||
40600 SCPNNP := NASSNP(TEMP, TEMP2, TEMPLATE);
|
||||
40610 END;
|
||||
40620 (**)
|
||||
40630 (**)
|
||||
40640 (*-02()
|
||||
40650 BEGIN
|
||||
40660 END;
|
||||
40670 ()-02*)
|
||||
40680 (*+01()
|
||||
40690 BEGIN (*OF MAIN PROGRAM*)
|
||||
40700 END (*OF EVERYTHING*).
|
||||
40710 ()+01*)
|
100
lang/a68s/liba68s/nassts.p
Normal file
100
lang/a68s/liba68s/nassts.p
Normal file
|
@ -0,0 +1,100 @@
|
|||
38900 #include "rundecs.h"
|
||||
38910 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
38920 (**)
|
||||
38930 PROCEDURE GARBAGE (ANOBJECT: OBJECTP); EXTERN;
|
||||
38940 PROCEDURE ERRORR(N :INTEGER); EXTERN;
|
||||
38950 PROCEDURE TESTCC(TARGET: OBJECTP); EXTERN ;
|
||||
38960 PROCEDURE TESTSS (REFSTRUCT: OBJECTP); EXTERN ;
|
||||
38970 (**)
|
||||
38980 (**)
|
||||
38990 PROCEDURE NASSTCMN(ANOBJECT: OBJECTP);
|
||||
39000 BEGIN
|
||||
39010 WITH ANOBJECT^ DO
|
||||
39020 CASE ANCESTOR^.SORT OF
|
||||
39030 REFR, RECR:
|
||||
39040 TESTCC(ANOBJECT);
|
||||
39050 RECN, REFN:
|
||||
39060 TESTSS(ANCESTOR);
|
||||
39070 UNDEF:
|
||||
39080 ERRORR(RSEL);
|
||||
39090 NILL:
|
||||
39100 ERRORR(RSELNIL)
|
||||
39110 END
|
||||
39120 END;
|
||||
39130 (**)
|
||||
39140 (**)
|
||||
39150 (*-01() (*-05()
|
||||
39160 FUNCTION NASSTS(TEMP: NAKEGER; SOURCE: A68INT): ASNAKED;
|
||||
39170 (*PASSIGNNT*)
|
||||
39180 VAR DEST: UNDRESSP;
|
||||
39190 BEGIN
|
||||
39200 WITH TEMP.NAK, STOWEDVAL^.ANCESTOR^ DO
|
||||
39210 BEGIN
|
||||
39220 IF FPTWO(PVALUE^) THEN
|
||||
39230 NASSTCMN(STOWEDVAL);
|
||||
39240 PVALUE^.OSCOPE := 0;
|
||||
39250 DEST := INCPTR(PVALUE, POSITION)
|
||||
39260 END;
|
||||
39270 DEST^.FIRSTINT := SOURCE;
|
||||
39280 NASSTS := TEMP.ASNAK;
|
||||
39290 END;
|
||||
39300 (**)
|
||||
39310 (**)
|
||||
39320 FUNCTION NASSTS2(TEMP: NAKEGER; SOURCE: A68LONG): ASNAKED;
|
||||
39330 (*PASSIGNNT+1*)
|
||||
39340 VAR DEST: UNDRESSP;
|
||||
39350 BEGIN
|
||||
39360 WITH TEMP.NAK, STOWEDVAL^.ANCESTOR^ DO
|
||||
39370 BEGIN
|
||||
39380 IF FPTWO(PVALUE^) THEN
|
||||
39390 NASSTCMN(STOWEDVAL);
|
||||
39400 PVALUE^.OSCOPE := 0;
|
||||
39410 DEST := INCPTR(PVALUE, POSITION)
|
||||
39420 END;
|
||||
39430 DEST^.FIRSTLONG := SOURCE;
|
||||
39440 NASSTS2 := TEMP.ASNAK;
|
||||
39450 END;
|
||||
39460 ()-05*) ()-01*)
|
||||
39470 (**)
|
||||
39480 (**)
|
||||
39490 FUNCTION NASSTPT(TEMP: NAKEGER; SOURCE: OBJECTP): ASNAKED;
|
||||
39500 (*+01() EXTERN ; ()+01*)
|
||||
39510 (*-01()
|
||||
39520 (*PASSIGNNT+2*)
|
||||
39530 VAR DEST: UNDRESSP;
|
||||
39540 BEGIN
|
||||
39550 WITH TEMP.NAK, STOWEDVAL^.ANCESTOR^ DO
|
||||
39560 BEGIN
|
||||
39570 IF FPTWO(PVALUE^) THEN
|
||||
39580 NASSTCMN(STOWEDVAL);
|
||||
39590 PVALUE^.OSCOPE := 0;
|
||||
39600 DEST := INCPTR(PVALUE, POSITION)
|
||||
39610 END;
|
||||
39620 WITH DEST^ DO
|
||||
39630 BEGIN
|
||||
39640 FPINC(SOURCE^);
|
||||
39650 FPDEC(FIRSTPTR^); IF FPTST(FIRSTPTR^) THEN GARBAGE(FIRSTPTR);
|
||||
39660 FIRSTPTR := SOURCE;
|
||||
39670 END;
|
||||
39680 NASSTPT := TEMP.ASNAK;
|
||||
39690 END;
|
||||
39700 ()-01*)
|
||||
39710 FUNCTION SCPNTPT(TEMP: NAKEGER; SOURCE: OBJECTP): ASNAKED;
|
||||
39720 (*PSCOPENT+2*)
|
||||
39730 BEGIN
|
||||
39740 WITH SOURCE^ DO
|
||||
39750 BEGIN
|
||||
39760 IF TEMP.NAK.STOWEDVAL^.OSCOPE<OSCOPE THEN ERRORR(RSCOPE);
|
||||
39770 END;
|
||||
39780 SCPNTPT := NASSTPT(TEMP, SOURCE);
|
||||
39790 END;
|
||||
39800 (**)
|
||||
39810 (**)
|
||||
39820 (*-02()
|
||||
39830 BEGIN
|
||||
39840 END;
|
||||
39850 ()-02*)
|
||||
39860 (*+01()
|
||||
39870 BEGIN (*OF MAIN PROGRAM*)
|
||||
39880 END (*OF EVERYTHING*).
|
||||
39890 ()+01*)
|
65
lang/a68s/liba68s/newline.p
Normal file
65
lang/a68s/liba68s/newline.p
Normal file
|
@ -0,0 +1,65 @@
|
|||
79200 #include "rundecs.h"
|
||||
79210 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
79220 (**)
|
||||
79230 PROCEDURE GARBAGE (ANOBJECT: OBJECTP); EXTERN ;
|
||||
79240 PROCEDURE ERRORR(N :INTEGER); EXTERN ;
|
||||
79250 PROCEDURE TESTF(RF:OBJECTP;VAR F:OBJECTP); EXTERN;
|
||||
79260 FUNCTION ENSPAGE(RF:OBJECTP;VAR F:OBJECTP):BOOLEAN; EXTERN;
|
||||
79270 FUNCTION ENSPHYSICALFILE(RF:OBJECTP;VAR F:OBJECTP):BOOLEAN; EXTERN;
|
||||
79280 (**)
|
||||
79290 PROCEDURE CLPASC2(P1,P2: IPOINT; PROC: ASPROC); EXTERN;
|
||||
79300 (**)
|
||||
79310 (**)
|
||||
79320 PROCEDURE ERRORSTATE(F:OBJECTP);
|
||||
79330 (*NOT OPENED OR NOMOOD-ABORT*)
|
||||
79340 VAR STAT:STATUSSET;
|
||||
79350 BEGIN STAT:=F^.PCOVER^.STATUS;
|
||||
79360 IF NOT([OPENED]<=STAT) THEN ERRORR(NOTOPEN)
|
||||
79370 ELSE IF NOT(([READMOOD]<=STAT) OR ([WRITEMOOD]<=STAT))
|
||||
79380 THEN ERRORR(NOMOOD);
|
||||
79390 END;
|
||||
79400 (**)
|
||||
79410 (**)
|
||||
79420 PROCEDURE NEWLINE(RF:OBJECTP);
|
||||
79430 VAR NSTATUS :STATUSSET; F:OBJECTP;
|
||||
79440 BEGIN FPINC(RF^);
|
||||
79450 TESTF(RF,F); NSTATUS:=F^.PCOVER^.STATUS;
|
||||
79460 IF NOT (([OPENED,READMOOD]<=NSTATUS) OR ([OPENED,WRITEMOOD]<=NSTATUS))
|
||||
79470 THEN ERRORSTATE(F);
|
||||
79480 IF [PAGEOVERFLOW]<=NSTATUS
|
||||
79490 THEN IF NOT ENSPAGE(RF,F) THEN ERRORR(NOLOGICAL);
|
||||
79500 (* OPENED,LINEOK,MOODOK *)
|
||||
79510 WITH F^ DO
|
||||
79520 IF LAZY IN PCOVER^.STATUS THEN WITH PCOVER^ DO
|
||||
79530 BEGIN
|
||||
79540 STATUS := STATUS+[NOTINITIALIZED,LFE,PAGEOVERFLOW,LINEOVERFLOW];
|
||||
79550 LOFCPOS := LOFCPOS+1;
|
||||
79560 END
|
||||
79570 ELSE
|
||||
79580 CLPASC2(ORD(PCOVER), ORD(PCOVER^.BOOK), PCOVER^.DONEWLINE);
|
||||
79590 WITH RF^ DO BEGIN FDEC; IF FTST THEN GARBAGE(RF) END
|
||||
79600 END; (* NEWLINE *)
|
||||
79610 (**)
|
||||
79620 (**)
|
||||
79630 PROCEDURE NEWPAGE(RF:OBJECTP);
|
||||
79640 VAR NSTATUS :STATUSSET; F:OBJECTP;
|
||||
79650 BEGIN FPINC(RF^);
|
||||
79660 TESTF(RF,F); NSTATUS:=F^.PCOVER^.STATUS;
|
||||
79670 IF NOT(([OPENED,READMOOD]<=NSTATUS) OR ([OPENED,WRITEMOOD]<=NSTATUS))
|
||||
79680 THEN ERRORSTATE(F);
|
||||
79690 IF (([PFE]<=NSTATUS) OR ([LFE]<=NSTATUS))
|
||||
79700 THEN IF NOT ENSPHYSICALFILE(RF,F) THEN ERRORR(NOLOGICAL);
|
||||
79710 WITH F^ DO
|
||||
79720 CLPASC2(ORD(PCOVER), ORD(PCOVER^.BOOK), PCOVER^.DONEWPAGE);
|
||||
79730 WITH RF^ DO BEGIN FDEC; IF FTST THEN GARBAGE(RF) END
|
||||
79740 END; (* NEWPAGE *)
|
||||
79750 (**)
|
||||
79760 (**)
|
||||
79770 (*-02()
|
||||
79780 BEGIN (*OF A68*)
|
||||
79790 END; (*OF A68*)
|
||||
79800 ()-02*)
|
||||
79810 (*+01()
|
||||
79820 BEGIN (*OF MAIN PROGRAM*)
|
||||
79830 END (* OF EVERYTHING *).
|
||||
79840 ()+01*)
|
104
lang/a68s/liba68s/onend.p
Normal file
104
lang/a68s/liba68s/onend.p
Normal file
|
@ -0,0 +1,104 @@
|
|||
79900 #include "rundecs.h"
|
||||
79910 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
79920 (**)
|
||||
79930 PROCEDURE GARBAGE (ANOBJECT: OBJECTP); EXTERN ;
|
||||
79940 PROCEDURE NASSTCMN(ANOBJECT:OBJECTP); EXTERN;
|
||||
79950 FUNCTION SCPNTPT(TEMP: NAKEGER; SOURCE: OBJECTP): ASNAKED; EXTERN ;
|
||||
79960 (**)
|
||||
79970 (**)
|
||||
79980 PROCEDURE ONLINEEND(RF, ROUTINE: OBJECTP);
|
||||
79990 VAR TEMP: NAKEGER;
|
||||
80000 BEGIN
|
||||
80010 WITH TEMP, NAK DO
|
||||
80020 BEGIN
|
||||
80030 (*+11() ASNAK := 0; ()+11*)
|
||||
80040 STOWEDVAL := RF;
|
||||
80050 POSITION := RF^.OFFSET+LMOFFSET;
|
||||
80060 ASNAK := SCPNTPT(TEMP, ROUTINE);
|
||||
80070 END;
|
||||
80080 IF FPTST(RF^) THEN GARBAGE(RF)
|
||||
80090 END;
|
||||
80100 (**)
|
||||
80110 (**)
|
||||
80120 PROCEDURE ONPAGEEND(RF, ROUTINE: OBJECTP);
|
||||
80130 VAR TEMP: NAKEGER;
|
||||
80140 BEGIN
|
||||
80150 WITH TEMP, NAK DO
|
||||
80160 BEGIN
|
||||
80170 (*+11() ASNAK := 0; ()+11*)
|
||||
80180 STOWEDVAL := RF;
|
||||
80190 POSITION := RF^.OFFSET+PMOFFSET;
|
||||
80200 ASNAK := SCPNTPT(TEMP, ROUTINE);
|
||||
80210 END;
|
||||
80220 IF FPTST(RF^) THEN GARBAGE(RF)
|
||||
80230 END;
|
||||
80240 (**)
|
||||
80250 (**)
|
||||
80260 PROCEDURE ONPHYSICALFILEEND(RF, ROUTINE: OBJECTP);
|
||||
80270 VAR TEMP: NAKEGER;
|
||||
80280 BEGIN
|
||||
80290 WITH TEMP, NAK DO
|
||||
80300 BEGIN
|
||||
80310 (*+11() ASNAK := 0; ()+11*)
|
||||
80320 STOWEDVAL := RF;
|
||||
80330 POSITION := RF^.OFFSET+PFMOFFSET;
|
||||
80340 ASNAK := SCPNTPT(TEMP, ROUTINE);
|
||||
80350 END;
|
||||
80360 IF FPTST(RF^) THEN GARBAGE(RF)
|
||||
80370 END;
|
||||
80380 (**)
|
||||
80390 (**)
|
||||
80400 PROCEDURE ONLOGICALFILEEND(RF, ROUTINE: OBJECTP);
|
||||
80410 VAR TEMP: NAKEGER;
|
||||
80420 BEGIN
|
||||
80430 WITH TEMP, NAK DO
|
||||
80440 BEGIN
|
||||
80450 (*+11() ASNAK := 0; ()+11*)
|
||||
80460 STOWEDVAL := RF;
|
||||
80470 POSITION := RF^.OFFSET+LFMOFFSET;
|
||||
80480 ASNAK := SCPNTPT(TEMP, ROUTINE);
|
||||
80490 END;
|
||||
80500 IF FPTST(RF^) THEN GARBAGE(RF)
|
||||
80510 END;
|
||||
80520 (**)
|
||||
80530 (**)
|
||||
80540 PROCEDURE MAKETERM(RF, S: OBJECTP);
|
||||
80550 VAR T1 (*+01(), T2 ()+01*): TERMSET;
|
||||
80560 CH: CHAR;
|
||||
80570 I: INTEGER;
|
||||
80580 TEMP: NAKEGER;
|
||||
80590 P: UNDRESSP;
|
||||
80600 BEGIN T1 := []; (*+01() T2 := []; ()+01*)
|
||||
80610 WITH S^ DO
|
||||
80620 FOR I := 1 TO STRLENGTH DO
|
||||
80630 BEGIN CH := CHARVEC[I];
|
||||
80640 (*+01() IF ORD(CH) < 59 THEN T1 := T1 + [CH] ELSE T2 := T2 + [ CHR( ORD(CH)-59 ) ] ()+01*)
|
||||
80650 (*-01() T1 := T1 + [CH] ()-01*)
|
||||
80660 END;
|
||||
80670 (*+11() TEMP.ASNAK := 0; ()+11*)
|
||||
80680 TEMP.NAK.STOWEDVAL := RF;
|
||||
80690 WITH TEMP, NAK, STOWEDVAL^.ANCESTOR^ DO
|
||||
80700 BEGIN
|
||||
80710 POSITION := RF^.OFFSET+TERMOFFSET;
|
||||
80720 IF FPTWO(PVALUE^) THEN
|
||||
80730 NASSTCMN(STOWEDVAL);
|
||||
80740 PVALUE^.OSCOPE := 0;
|
||||
80750 P := INCPTR(PVALUE, POSITION)
|
||||
80760 END;
|
||||
80770 P^.FIRSTTERMSET := T1 ;
|
||||
80780 (*+01()
|
||||
80790 P := INCPTR(P, SZWORD);
|
||||
80800 P^.FIRSTTERMSET := T2;
|
||||
80810 ()+01*)
|
||||
80820 IF FPTST(RF^) THEN GARBAGE(RF)
|
||||
80830 END;
|
||||
80840 (**)
|
||||
80850 (**)
|
||||
80860 (*-02()
|
||||
80870 BEGIN (*OF A68*)
|
||||
80880 END; (*OF A68*)
|
||||
80890 ()-02*)
|
||||
80900 (*+01()
|
||||
80910 BEGIN (*OF MAIN PROGRAM*)
|
||||
80920 END (* OF EVERYTHING *).
|
||||
80930 ()+01*)
|
176
lang/a68s/liba68s/openclose.p
Normal file
176
lang/a68s/liba68s/openclose.p
Normal file
|
@ -0,0 +1,176 @@
|
|||
81000 #include "rundecs.h"
|
||||
81010 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
81020 (**)
|
||||
81030 PROCEDURE ACLOSE(EFET: FETROOMP); EXTERN;
|
||||
81040 PROCEDURE GARBAGE (ANOBJECT: OBJECTP); EXTERN ;
|
||||
81050 PROCEDURE ERRORR(N :INTEGER); EXTERN ;
|
||||
81060 FUNCTION SAFEACCESS(LOCATION: OBJECTP): UNDRESSP; EXTERN;
|
||||
81070 PROCEDURE PCINCR (STRUCTPTR: UNDRESSP; TEMPLATE: DPOINT; INCREMENT: INTEGER); EXTERN ;
|
||||
81080 FUNCTION CRSTRING(LENGTH: OFFSETRANGE): OBJECTP; EXTERN ;
|
||||
81090 PROCEDURE SETWRITEMOOD(PCOV: OBJECTP); EXTERN;
|
||||
81100 PROCEDURE TESTF(RF:OBJECTP;VAR F:OBJECTP); EXTERN;
|
||||
81110 (*+02()
|
||||
81120 PROCEDURE AOPN(FIL: FETROOMP); EXTERN;
|
||||
81130 PROCEDURE ACRE(FIL: FETROOMP); EXTERN;
|
||||
81140 ()+02*)
|
||||
81150 (**)
|
||||
81160 (*+01() (*$X6*) ()+01*)
|
||||
81170 PROCEDURE OPENCOVER(
|
||||
81180 PFET: FETROOMP; VAR PCOV: OBJECTP; LFN: LFNTYPE; PROCEDURE CH (*-01() ( COV: OBJECTP; L: LFNTYPE) ()-01*)
|
||||
81190 ); EXTERN;
|
||||
81200 (*+01() (*$X4*) ()+01*)
|
||||
81210 (**)
|
||||
81220 (**)
|
||||
81230 FUNCTION FUNC68(PB: ASNAKED; RF: OBJECTP): BOOLEAN; EXTERN;
|
||||
81240 (**)
|
||||
81250 (**)
|
||||
81260 (*+02()
|
||||
81270 PROCEDURE AOPEN (FIL:FETROOMP; DIRECTION:INTEGER; LFN:LFNTYPE; BUF:IPOINT);
|
||||
81280 VAR NAME: OBJECTP;
|
||||
81290 BEGIN
|
||||
81300 IF LFN<>NIL THEN (*NIL FOR STANDOUT/STANDIN, DON'T NEED TO OPEN*)
|
||||
81310 BEGIN
|
||||
81320 IF LFN^.STRLENGTH MOD CHARPERWORD = 0 THEN (*NULL CHAR AT END NEEDED*)
|
||||
81330 BEGIN NAME := CRSTRING(LFN^.STRLENGTH+1);
|
||||
81340 MOVELEFT(INCPTR(LFN, STRINGCONST), INCPTR(NAME, STRINGCONST), LFN^.STRLENGTH) END
|
||||
81350 ELSE NAME := LFN;
|
||||
81360 FPINC(NAME^);
|
||||
81370 FIL^.FNAME := INCPTR(NAME, STRINGCONST );
|
||||
81380 IF DIRECTION=FORWRITE THEN ACRE(FIL) ELSE AOPN(FIL);
|
||||
81390 END;
|
||||
81400 END;
|
||||
81410 ()+02*)
|
||||
81420 (*+05()
|
||||
81430 PROCEDURE AOPEN( VAR FIL: FYL; DISP:INTEGER; LFN:LFNTYPE; BUF:IPOINT );
|
||||
81440 PROCEDURE NAMEFILE(CHARVEC: VECCHARS; SU, SL: INTEGER; VAR FIL: ANYFILE); EXTERN;
|
||||
81450 BEGIN
|
||||
81460 IF LFN <> NIL THEN
|
||||
81470 WITH LFN^ DO NAMEFILE(CHARVEC, STRLENGTH, 1, FIL);
|
||||
81480 IF ODD( DISP DIV FORWRITE ) THEN REWRITE( FIL ) ELSE RESET( FIL )
|
||||
81490 END ;
|
||||
81500 ()+05*)
|
||||
81510 (**)
|
||||
81520 (**)
|
||||
81530 (*+01()
|
||||
81540 PROCEDURE SETLIMIT(VAR FYLE: FYL; LIMIT: INTEGER);
|
||||
81550 BEGIN LINELIMIT(FYLE, LIMIT) END;
|
||||
81560 ()+01*)
|
||||
81570 (**)
|
||||
81580 (**)
|
||||
81590 (*+01() (*$X6*) ()+01*)
|
||||
81600 FUNCTION OPEN(RF,IDF:OBJECTP;PROCEDURE CH (*-01() ( COV: OBJECTP; L: LFNTYPE) ()-01*) ): INTEGER;
|
||||
81610 VAR I,J,ERRNO: INTEGER;
|
||||
81620 LFN:LFNTYPE; PFET:FETROOMP;
|
||||
81630 F, PCOV: OBJECTP;
|
||||
81640 BEGIN
|
||||
81650 F := INCPTR(SAFEACCESS(RF), -STRUCTCONST);
|
||||
81660 PCINCR(INCPTR(F, STRUCTCONST), FILEBLOCK, -INCRF);
|
||||
81670 (* REMOVE SPACES FROM STRING *)
|
||||
81680 (*+01()
|
||||
81690 WITH IDF^ DO
|
||||
81700 BEGIN FOR I:=1 TO 10 DO
|
||||
81710 IF CHARVEC[I]=' '
|
||||
81720 THEN LFN[I]:=':' ELSE LFN[I]:=CHARVEC[I];
|
||||
81730 IF LFN[8]<>':' THEN
|
||||
81740 WRITELN('WARNING-FILE NAME MORE THAN 7 CHARS',LFN);
|
||||
81750 END;
|
||||
81760 ()+01*)
|
||||
81770 (*-01() LFN := IDF; ()-01*)
|
||||
81780 NEW(PFET);
|
||||
81790 OPENCOVER(PFET, PCOV, LFN, CH);
|
||||
81800 F^.PCOVER := PCOV;
|
||||
81810 WITH F^ DO
|
||||
81820 BEGIN
|
||||
81830 LOGICALFILEMENDED:=UNDEFIN;
|
||||
81840 PHYSICALFILEMENDED:=UNDEFIN;
|
||||
81850 PAGEMENDED:=UNDEFIN;
|
||||
81860 LINEMENDED:=UNDEFIN;
|
||||
81870 TERM:=[];
|
||||
81880 (*+01() TERM1:=[] ; ()+01*)
|
||||
81890 OPEN := ORD(NOT(OPENED IN PCOVER^.STATUS));
|
||||
81900 END;
|
||||
81910 IF FPTST(RF^) THEN GARBAGE(RF);
|
||||
81920 END; (*OPEN*)
|
||||
81930 (**)
|
||||
81940 (**)
|
||||
81950 (*+01() (*$X6*) ()+01*)
|
||||
81960 FUNCTION ESTABLISH(
|
||||
81970 RF,IDF:OBJECTP;PROCEDURE CH (*-01() (COV: OBJECTP; L: LFNTYPE) ()-01*); MP,ML,MC:INTEGER
|
||||
81980 ): INTEGER;
|
||||
81990 VAR F:OBJECTP;
|
||||
82000 BEGIN
|
||||
82010 IF (MP<1) OR (ML<1) OR (MC<1) THEN ERRORR(POSMIN);
|
||||
82020 ESTABLISH := OPEN(RF,IDF,CH);
|
||||
82030 TESTF(RF,F);
|
||||
82040 WITH F^.PCOVER^ DO
|
||||
82050 BEGIN
|
||||
82060 IF NOT([PUTPOSS]<=POSSIBLES) THEN ERRORR(NOWRITE);
|
||||
82070 IF NOT([ESTABPOSS]<=POSSIBLES) THEN ERRORR(NOESTAB);
|
||||
82080 IF [GETPOSS]<=POSSIBLES THEN
|
||||
82090 SETWRITEMOOD(F^.PCOVER);
|
||||
82100 CHARBOUND:=MC; LINEBOUND:=ML; PAGEBOUND:=MP;
|
||||
82110 (*+01() SETLIMIT(BOOK, ML*MP); ()+01*)
|
||||
82120 END
|
||||
82130 END; (*ESTABLISH*)
|
||||
82140 (*+01() (*$X4*) ()+01*)
|
||||
82150 (**)
|
||||
82160 (**)
|
||||
82170 PROCEDURE CLOSE(RF:OBJECTP);
|
||||
82180 VAR F:OBJECTP;
|
||||
82190 PFET: FETROOMP;
|
||||
82200 BEGIN TESTF(RF,F);
|
||||
82210 WITH F^.PCOVER^ DO
|
||||
82220 BEGIN STATUS:=STATUS-[OPENED];
|
||||
82230 IF NOT ASSOC THEN
|
||||
82240 BEGIN
|
||||
82250 ACLOSE(BOOK);
|
||||
82260 IF NOT(STARTUP IN STATUS) THEN BEGIN PFET := BOOK; DISPOSE(PFET) END;
|
||||
82270 END;
|
||||
82280 END;
|
||||
82290 IF FPTST(RF^) THEN GARBAGE(RF);
|
||||
82300 END; (*CLOSE*)
|
||||
82310 (**)
|
||||
82320 (**)
|
||||
82330 (*+24()
|
||||
82340 PROCEDURE PNTSTAT(COV:OBJECTP);
|
||||
82350 BEGIN WITH COV^ DO
|
||||
82360 BEGIN WRITE('STATUS-');
|
||||
82370 IF [OPENED]<=STATUS THEN WRITE('OPENED ');
|
||||
82380 IF [LINEOVERFLOW]<=STATUS THEN WRITE('LINEOFLO ');
|
||||
82390 IF [PAGEOVERFLOW]<=STATUS THEN WRITE('PAGEOFLO ');
|
||||
82400 IF [PFE]<=STATUS THEN WRITE('PFE ');
|
||||
82410 IF [LFE]<=STATUS THEN WRITE('LFE ');
|
||||
82420 IF [READMOOD]<=STATUS THEN WRITE('READMOOD ');
|
||||
82430 IF [WRITEMOOD]<=STATUS THEN WRITE('WRITEMOOD ');
|
||||
82440 IF [CHARMOOD]<=STATUS THEN WRITE('CHARMOOD ');
|
||||
82450 IF [BINMOOD]<=STATUS THEN WRITE('BINMOOD ');
|
||||
82460 IF [NOTSET]<=STATUS THEN WRITE('NOTSET ');
|
||||
82470 END;
|
||||
82480 WRITELN;
|
||||
82490 END;
|
||||
82500 (**)
|
||||
82510 (**)
|
||||
82520 PROCEDURE PNTPOSS(F:OBJECTP);
|
||||
82530 BEGIN WRITE('POSSIBLES - ');
|
||||
82540 WITH F^.PCOVER^ DO
|
||||
82550 BEGIN IF [RESETPOSS]<=POSSIBLES THEN WRITE('RESETPOSS ');
|
||||
82560 IF [SETPOSS]<=POSSIBLES THEN WRITE('SETPOSS ');
|
||||
82570 IF [GETPOSS]<=POSSIBLES THEN WRITE('GETPOSS ');
|
||||
82580 IF [PUTPOSS]<=POSSIBLES THEN WRITE('PUTPOSS ');
|
||||
82590 IF [BINPOSS]<=POSSIBLES THEN WRITE('BINPOSS ');
|
||||
82600 IF [ESTABPOSS]<=POSSIBLES THEN WRITE('ESTABPOSS ');
|
||||
82610 IF [ASSPOSS]<=POSSIBLES THEN WRITE('ASSPOSS');
|
||||
82620 END;
|
||||
82630 WRITELN;
|
||||
82640 END;
|
||||
82650 ()+24*)
|
||||
82660 (**)
|
||||
82670 (**)
|
||||
82680 (*-02()
|
||||
82690 BEGIN (*OF A68*)
|
||||
82700 END; (*OF A68*)
|
||||
82710 ()-02*)
|
||||
82720 (*+01()
|
||||
82730 BEGIN (*OF MAIN PROGRAM*)
|
||||
82740 END (* OF EVERYTHING *).
|
||||
82750 ()+01*)
|
111
lang/a68s/liba68s/pcollmul.p
Normal file
111
lang/a68s/liba68s/pcollmul.p
Normal file
|
@ -0,0 +1,111 @@
|
|||
40800 #include "rundecs.h"
|
||||
40810 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
40820 (**)
|
||||
40830 (**)
|
||||
40840 PROCEDURE ERRORR(N :INTEGER); EXTERN ;
|
||||
40850 (**)
|
||||
40860 (**)
|
||||
40870 (*+01() (*$X3*) ()+01*)
|
||||
40880 FUNCTION PCCMN(NEWMULT: OBJECTP; TEMPLATE: DPOINT; ELSIZE: INTEGER): ASNAKED;
|
||||
40890 VAR TEMP: NAKEGER;
|
||||
40900 DESCDEX: INTEGER;
|
||||
40910 NEWELS: OBJECTP;
|
||||
40920 BEGIN WITH NEWMULT^, TEMP DO WITH NAK DO
|
||||
40930 BEGIN
|
||||
40940 MDBLOCK := TEMPLATE;
|
||||
40950 ENEW(NEWELS, ELSCONST+ELSIZE);
|
||||
40960 PVALUE := NEWELS;
|
||||
40970 WITH PVALUE^ DO
|
||||
40980 BEGIN IHEAD := NIL ;
|
||||
40990 (*-02() FIRSTWORD := SORTSHIFT * ORD(IELS); PCOUNT := 1; ()-02*)
|
||||
41000 (*+02() PCOUNT:=1; SORT:=IELS; ()+02*)
|
||||
41010 OSCOPE := 0; DBLOCK := TEMPLATE; D0 := ELSIZE; CCOUNT := 1 END;
|
||||
41020 IHEAD := NIL; FPTR := NIL; BPTR := NIL;
|
||||
41030 (*+11() ASNAK := 0; ()+11*)
|
||||
41040 STOWEDVAL := NEWMULT; POINTER := INCPTR(PVALUE, ELSCONST);
|
||||
41050 PCCMN := ASNAK;
|
||||
41060 END
|
||||
41070 END;
|
||||
41080 (**)
|
||||
41090 (**)
|
||||
41100 FUNCTION PCOLLR(NOROWS: INTEGER; TEMPLATE: DPOINT): ASNAKED;
|
||||
41110 (*PPREPROWDISP*)
|
||||
41120 VAR NEWMULT: OBJECTP;
|
||||
41130 DESCDEX: INTEGER; ELSIZE, SUM: BOUNDSRANGE;
|
||||
41140 BEGIN
|
||||
41150 IF ORD(TEMPLATE)=0 THEN ELSIZE := 1 (*DRESSED*)
|
||||
41160 ELSE IF ORD(TEMPLATE)<=MAXSIZE THEN ELSIZE := ORD(TEMPLATE) (*UNDRESSED*)
|
||||
41170 ELSE ELSIZE := TEMPLATE^[0];
|
||||
41180 ENEW(NEWMULT, MULTCONST+NOROWS*SZPDS);
|
||||
41190 SUM := -ELSCONST;
|
||||
41200 WITH NEWMULT^ DO
|
||||
41210 BEGIN
|
||||
41220 (*-02() FIRSTWORD := SORTSHIFT * ORD(MULT); ()-02*)
|
||||
41230 (*+02() PCOUNT:=0; SORT:=MULT; ()+02*)
|
||||
41240 (*+01() SECONDWORD := 0; ()+01*)
|
||||
41250 SIZE := ELSIZE;
|
||||
41260 FOR DESCDEX := 0 TO NOROWS-1 DO WITH DESCVEC[DESCDEX] DO
|
||||
41270 BEGIN
|
||||
41280 UI := GETSTKTOP(SZINT, DESCDEX*SZINT); LI := 1; DI := ELSIZE;
|
||||
41290 SUM := SUM+ELSIZE; ELSIZE := UI*ELSIZE
|
||||
41300 END;
|
||||
41310 LBADJ := SUM;
|
||||
41320 ROWS := NOROWS-1;
|
||||
41330 END;
|
||||
41340 PCOLLR := PCCMN(NEWMULT, TEMPLATE, ELSIZE);
|
||||
41350 (*THIS WILL NOT WORK THUS ON 16-BITS*)
|
||||
41360 END;
|
||||
41370 (**)
|
||||
41380 (**)
|
||||
41390 FUNCTION PCOLLRM(NOROWS: INTEGER; TEMPLATE: DPOINT): ASNAKED;
|
||||
41400 (*PPREPROWDISP+1*)
|
||||
41410 VAR OLDMULT, NEWMULT: OBJECTP;
|
||||
41420 DESCDEX, FIRSTROW: INTEGER; ELSIZE, SUM: BOUNDSRANGE;
|
||||
41430 BEGIN
|
||||
41440 OLDMULT := ASPTR(GETSTKTOP(SZADDR, NOROWS*SZINT));
|
||||
41450 WITH OLDMULT^ DO
|
||||
41460 BEGIN ELSIZE := SIZE;
|
||||
41470 ENEW(NEWMULT, MULTCONST+(NOROWS+ROWS+1)*SZPDS);
|
||||
41480 SUM := -ELSCONST;
|
||||
41490 (*-02() NEWMULT^.FIRSTWORD := SORTSHIFT * ORD(MULT); ()-02*)
|
||||
41500 (*+02() NEWMULT^.PCOUNT:=0; NEWMULT^.SORT:=MULT; ()+02*)
|
||||
41510 (*+01() NEWMULT^.SECONDWORD := 0; ()+01*)
|
||||
41520 NEWMULT^.SIZE := ELSIZE;
|
||||
41530 FOR DESCDEX := 0 TO ROWS DO WITH DESCVEC[DESCDEX] DO
|
||||
41540 BEGIN
|
||||
41550 NEWMULT^.DESCVEC[DESCDEX] := DESCVEC[DESCDEX];
|
||||
41560 NEWMULT^.DESCVEC[DESCDEX].DI := ELSIZE;
|
||||
41570 SUM := SUM+LI*ELSIZE; ELSIZE := (UI-LI+1)*ELSIZE;
|
||||
41580 IF ELSIZE<0 THEN ELSIZE := 0
|
||||
41590 END
|
||||
41600 END;
|
||||
41610 FIRSTROW := OLDMULT^.ROWS+1;
|
||||
41620 WITH NEWMULT^ DO
|
||||
41630 BEGIN
|
||||
41640 FOR DESCDEX := FIRSTROW TO FIRSTROW+NOROWS-1 DO WITH DESCVEC[DESCDEX] DO
|
||||
41650 BEGIN
|
||||
41660 UI := GETSTKTOP(SZINT, (DESCDEX-FIRSTROW)*SZINT); LI := 1; DI := ELSIZE;
|
||||
41670 SUM := SUM+ELSIZE; ELSIZE := UI*ELSIZE
|
||||
41680 END;
|
||||
41690 LBADJ := SUM;
|
||||
41700 ROWS := FIRSTROW+NOROWS-1;
|
||||
41710 END;
|
||||
41720 PCOLLRM := PCCMN(NEWMULT, TEMPLATE, ELSIZE);
|
||||
41730 END;
|
||||
41740 (*+01() (*$X4*) ()+01*)
|
||||
41750 (**)
|
||||
41760 (**)
|
||||
41770 FUNCTION PCOLLCK(TEMP: NAKEGER; DEPTH, COUNT: INTEGER): ASNAKED;
|
||||
41780 (*PCOLLCHECK*)
|
||||
41790 BEGIN
|
||||
41800 WITH TEMP.NAK.STOWEDVAL^ DO WITH DESCVEC[ROWS-DEPTH] DO
|
||||
41810 IF (LI<>1) OR (UI<>COUNT) THEN ERRORR(RMULASS);
|
||||
41820 PCOLLCK := TEMP.ASNAK;
|
||||
41830 END;
|
||||
41840 (**)
|
||||
41850 (**)
|
||||
41860 (*-02() BEGIN END ; ()-02*)
|
||||
41870 (*+01()
|
||||
41880 BEGIN (*OF MAIN PROGRAM*)
|
||||
41890 END (*OF EVERYTHING*).
|
||||
41900 ()+01*)
|
37
lang/a68s/liba68s/pcollst.p
Normal file
37
lang/a68s/liba68s/pcollst.p
Normal file
|
@ -0,0 +1,37 @@
|
|||
42000 #include "rundecs.h"
|
||||
42010 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
42020 (**)
|
||||
42030 (**)
|
||||
42040 FUNCTION PCOLLST(TEMPLATE: DPOINT): ASNAKED;
|
||||
42050 (*PPREPSTRDISP*)
|
||||
42060 VAR TEMP: NAKEGER;
|
||||
42070 STRUCTSIZE: INTEGER;
|
||||
42080 NEWSTRUCT: OBJECTP;
|
||||
42090 BEGIN WITH TEMP.NAK DO
|
||||
42100 BEGIN
|
||||
42110 STRUCTSIZE := TEMPLATE^[0]+STRUCTCONST;
|
||||
42120 (*+11() TEMP.ASNAK := 0; ()+11*)
|
||||
42130 ENEW(NEWSTRUCT, STRUCTSIZE); POINTER := INCPTR(NEWSTRUCT, STRUCTCONST);
|
||||
42140 STOWEDVAL := NEWSTRUCT;
|
||||
42150 WITH NEWSTRUCT^ DO
|
||||
42160 BEGIN
|
||||
42170 (*-02() FIRSTWORD := SORTSHIFT * ORD(STRUCT); ()-02*)
|
||||
42180 (*+02() PCOUNT:=0; SORT:=STRUCT; ()+02*)
|
||||
42190 LENGTH := STRUCTSIZE; DBLOCK := TEMPLATE
|
||||
42200 END;
|
||||
42210 END;
|
||||
42220 PCOLLST := TEMP.ASNAK;
|
||||
42230 END;
|
||||
42240 (*-05()
|
||||
42250 FUNCTION NAKPTR(NAK: NAKED): OBJECTP;
|
||||
42260 (*PNAKEDPTR*)
|
||||
42270 VAR TEMP: NAKEGER;
|
||||
42280 BEGIN NAKPTR := NAK.STOWEDVAL END;
|
||||
42290 ()-05*)
|
||||
42300 (**)
|
||||
42310 (**)
|
||||
42320 (*-02() BEGIN END ; ()-02*)
|
||||
42330 (*+01()
|
||||
42340 BEGIN (*OF MAIN PROGRAM*)
|
||||
42350 END (*OF EVERYTHING*).
|
||||
42360 ()+01*)
|
47
lang/a68s/liba68s/posenq.p
Normal file
47
lang/a68s/liba68s/posenq.p
Normal file
|
@ -0,0 +1,47 @@
|
|||
82800 #include "rundecs.h"
|
||||
82810 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
82820 (**)
|
||||
82830 PROCEDURE GARBAGE (ANOBJECT: OBJECTP); EXTERN ;
|
||||
82840 PROCEDURE ERRORR(N :INTEGER); EXTERN ;
|
||||
82850 (*+01() (*$X4*) ()+01*)
|
||||
82860 PROCEDURE TESTF(RF:OBJECTP;VAR F:OBJECTP); EXTERN;
|
||||
82870 (**)
|
||||
82880 (*******POSITION ENQUIRIES*******)
|
||||
82890 (**)
|
||||
82900 FUNCTION CHARNUMBER(RF:OBJECTP): INTEGER;
|
||||
82910 VAR F:OBJECTP;
|
||||
82920 BEGIN TESTF(RF,F);
|
||||
82930 WITH F^.PCOVER^ DO
|
||||
82940 IF [OPENED]<=STATUS THEN CHARNUMBER := COFCPOS
|
||||
82950 ELSE ERRORR(NOTOPEN);
|
||||
82960 IF FPTST(RF^) THEN GARBAGE(RF);
|
||||
82970 END;
|
||||
82980 (**)
|
||||
82990 (**)
|
||||
83000 FUNCTION LINENUMBER(RF:OBJECTP): INTEGER;
|
||||
83010 VAR F:OBJECTP;
|
||||
83020 BEGIN TESTF(RF,F);
|
||||
83030 WITH F^.PCOVER^ DO
|
||||
83040 IF [OPENED]<=STATUS THEN LINENUMBER := LOFCPOS
|
||||
83050 ELSE ERRORR(NOTOPEN);
|
||||
83060 IF FPTST(RF^) THEN GARBAGE(RF);
|
||||
83070 END;
|
||||
83080 (**)
|
||||
83090 (**)
|
||||
83100 FUNCTION PAGENUMBER(RF:OBJECTP): INTEGER;
|
||||
83110 VAR F:OBJECTP;
|
||||
83120 BEGIN TESTF(RF,F);
|
||||
83130 WITH F^.PCOVER^ DO
|
||||
83140 IF [OPENED]<=STATUS THEN PAGENUMBER := POFCPOS
|
||||
83150 ELSE ERRORR(NOTOPEN);
|
||||
83160 IF FPTST(RF^) THEN GARBAGE(RF);
|
||||
83170 END;
|
||||
83180 (**)
|
||||
83190 (*-02()
|
||||
83200 BEGIN (*OF A68*)
|
||||
83210 END; (*OF A68*)
|
||||
83220 ()-02*)
|
||||
83230 (*+01()
|
||||
83240 BEGIN (*OF MAIN PROGRAM*)
|
||||
83250 END (* OF EVERYTHING *).
|
||||
83260 ()+01*)
|
20
lang/a68s/liba68s/powi.c
Normal file
20
lang/a68s/liba68s/powi.c
Normal file
|
@ -0,0 +1,20 @@
|
|||
POWI(statlink, pow , num)
|
||||
int *statlink ;
|
||||
int pow , num ;
|
||||
{
|
||||
if ( pow < 0 )
|
||||
POWNEG() ;
|
||||
else
|
||||
{
|
||||
int n , p , r ;
|
||||
n = num ; p = pow ;
|
||||
if ( ( p & 1 ) != 0 ) { r = n; } else { r = 1; }
|
||||
p >>= 1 ;
|
||||
while ( p != 0 ) {
|
||||
n *= n ;
|
||||
if ( ( p & 1 ) != 0 ) r *= n ;
|
||||
p >>= 1 ;
|
||||
}
|
||||
return( r ) ;
|
||||
}
|
||||
}
|
17
lang/a68s/liba68s/powneg.p
Normal file
17
lang/a68s/liba68s/powneg.p
Normal file
|
@ -0,0 +1,17 @@
|
|||
62600 #include "rundecs.h"
|
||||
62610 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
62620 (**)
|
||||
62630 (**)
|
||||
62640 PROCEDURE ERRORR(N :INTEGER); EXTERN ;
|
||||
62650 (**)
|
||||
62660 (**)
|
||||
62670 PROCEDURE POWNEG;
|
||||
62680 (*CALLED FROM POWE WHEN RAISING INTEGER TO A -VE POWER*)
|
||||
62690 BEGIN ERRORR(RPOWNEG) END;
|
||||
62700 (**)
|
||||
62710 (**)
|
||||
62720 (*-02() BEGIN END ; ()-02*)
|
||||
62730 (*+01()
|
||||
62740 BEGIN (*OF MAIN PROGRAM*)
|
||||
62750 END (*OF EVERYTHING*).
|
||||
62760 ()+01*)
|
23
lang/a68s/liba68s/powr.c
Normal file
23
lang/a68s/liba68s/powr.c
Normal file
|
@ -0,0 +1,23 @@
|
|||
double POWR(statlink, pow, num)
|
||||
int *statlink ;
|
||||
int pow ;
|
||||
double num ;
|
||||
{
|
||||
int p ;
|
||||
register double n, r;
|
||||
if (pow < 0) {
|
||||
p = -pow;
|
||||
n = 1.0/num;
|
||||
} else {
|
||||
p = pow;
|
||||
n = num;
|
||||
}
|
||||
if ( (p & 1) != 0 ) { r = n; } else { r = 1.0; }
|
||||
p >>= 1;
|
||||
while ( p != 0 ) {
|
||||
n *= n;
|
||||
if ( (p & 1) != 0 ) r *= n;
|
||||
p >>= 1;
|
||||
}
|
||||
return(r) ;
|
||||
}
|
88
lang/a68s/liba68s/put.e
Normal file
88
lang/a68s/liba68s/put.e
Normal file
|
@ -0,0 +1,88 @@
|
|||
#include "e.h"
|
||||
exa _1PUTT ; 1st label in PUTT (run68d)
|
||||
exp $PUT
|
||||
exp $PRINT
|
||||
exp $WRITE
|
||||
exp $PUTT
|
||||
exp $NXTBIT
|
||||
exp $STANDOUT
|
||||
|
||||
ina jumpdesc
|
||||
jumpdesc
|
||||
con 0I SZADDR,0I SZADDR,0I SZADDR ; enough space for 3 pointers
|
||||
|
||||
pro $PUT,PUTTVARSPACE
|
||||
mes 11
|
||||
loc PUTSTAMP
|
||||
stl -SZWORD ; set up frame stamp
|
||||
lxa 0 ; load argument base
|
||||
lol SZADDR+SZADDR ; load length of data lost, skip static link & space
|
||||
loc SZADDR+SZADDR+SZWORD
|
||||
adu SZWORD ; add on space for static link & file pointer & count
|
||||
ads SZWORD ; add argument base and offset
|
||||
loi SZADDR ; load file address, objectp
|
||||
SFL SZADDR ; store in space, left for this reason
|
||||
lor 1 ; fill in jump info with SP
|
||||
SFE jumpdesc+SZADDR
|
||||
lxl 0 ; and LB
|
||||
SFE jumpdesc+SZADDR+SZADDR
|
||||
LFE _1PUTT-ENTRYOFFSET ; and code entry point
|
||||
SFE jumpdesc
|
||||
gto jumpdesc ; jump to PUTT, in run68d
|
||||
end PUTTVARSPACE
|
||||
|
||||
pro $PRINT,PUTTVARSPACE
|
||||
mes 11
|
||||
loc PUTSTAMP
|
||||
stl -SZWORD ; set up frame stamp
|
||||
LFE .HTOP-STOUTOFFSET; address of stout in global frame
|
||||
SFL SZADDR ; store in first param after static link
|
||||
lor 1 ; fill in jump info with SP
|
||||
SFE jumpdesc+SZADDR
|
||||
lxl 0 ; and LB
|
||||
SFE jumpdesc+SZADDR+SZADDR
|
||||
LFE _1PUTT-ENTRYOFFSET ; and code entry point
|
||||
SFE jumpdesc
|
||||
gto jumpdesc ; jump to PUTT, in run68d
|
||||
end PUTTVARSPACE
|
||||
|
||||
pro $WRITE,PUTTVARSPACE
|
||||
mes 11
|
||||
loc PUTSTAMP
|
||||
stl -SZWORD ; set up frame stamp
|
||||
LFE .HTOP-STOUTOFFSET; address of stout in global frame
|
||||
SFL SZADDR ; store in first param after static link
|
||||
lor 1 ; fill in jump info with SP
|
||||
SFE jumpdesc+SZADDR
|
||||
lxl 0 ; and LB
|
||||
SFE jumpdesc+SZADDR+SZADDR
|
||||
LFE _1PUTT-ENTRYOFFSET ; and code entry point
|
||||
SFE jumpdesc
|
||||
gto jumpdesc ; jump to PUTT, in run68d
|
||||
end PUTTVARSPACE
|
||||
|
||||
pro $NXTBIT,SZWORD ; FUNCTION(VAR N: INTEGER): INTEGER;
|
||||
loc PASCALSTAMP
|
||||
stl -SZWORD
|
||||
LFL SZADDR ; address of N
|
||||
loi SZWORD
|
||||
dup SZWORD
|
||||
loc 1
|
||||
slu SZWORD ; shift left
|
||||
LFL SZADDR
|
||||
sti SZWORD ; replace shifted N
|
||||
tlt ; test original N
|
||||
ret SZWORD ; return old top bit of N
|
||||
end SZWORD
|
||||
|
||||
pro $STANDOUT,SZWORD ; call to stoutch (run68d)
|
||||
loc PASCALSTAMP
|
||||
stl -SZWORD
|
||||
LFL SZADDR+SZADDR ; param 1, pcov
|
||||
LFL SZADDR ; param 2, lfn
|
||||
LFL 0 ; static link
|
||||
cal $STOUTCH
|
||||
asp SZADDR+SZADDR+SZADDR
|
||||
ret 0
|
||||
end SZWORD
|
||||
|
476
lang/a68s/liba68s/putt.p
Normal file
476
lang/a68s/liba68s/putt.p
Normal file
|
@ -0,0 +1,476 @@
|
|||
83300 #include "rundecs.h"
|
||||
83310 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
83320 (**)
|
||||
83330 PROCEDURE CL68(PB: ASNAKED; RF: OBJECTP); EXTERN ;
|
||||
83340 PROCEDURE GARBAGE (ANOBJECT: OBJECTP); EXTERN ;
|
||||
83350 PROCEDURE FORMPDESC(OLDESC: OBJECTP; VAR PDESC1: PDESC); EXTERN ;
|
||||
83360 FUNCTION NEXTEL(I: INTEGER; VAR PDESC1: PDESC): BOOLEAN; EXTERN ;
|
||||
83370 PROCEDURE ERRORR(N :INTEGER); EXTERN ;
|
||||
83380 FUNCTION CRSTRING(LENGTH: OFFSETRANGE): OBJECTP; EXTERN ;
|
||||
83390 FUNCTION GETPROC(RN: OBJECTP): ASNAKED; EXTERN ;
|
||||
83400 PROCEDURE TESTF(RF:OBJECTP;VAR F:OBJECTP); EXTERN;
|
||||
83410 FUNCTION ENSLINE(RF:OBJECTP;VAR F:OBJECTP):BOOLEAN; EXTERN;
|
||||
83420 PROCEDURE ENSSTATE(RF:OBJECTP;VAR F:OBJECTP;READING:STATUSSET); EXTERN;
|
||||
83430 FUNCTION ENSPAGE(RF:OBJECTP;VAR F:OBJECTP):BOOLEAN; EXTERN;
|
||||
83440 (**)
|
||||
83450 PROCEDURE CLPASC1(P1: IPOINT; PROC: ASPROC); EXTERN;
|
||||
83460 PROCEDURE CLPASC5(P1,P2 :IPOINT; P3,P4 :INTEGER; P5 :IPOINT; PROC: ASPROC); EXTERN;
|
||||
83470 FUNCTION NXTBIT(VAR N: INTEGER): INTEGER; EXTERN;
|
||||
83480 (**)
|
||||
83490 (**)
|
||||
83500 (*+01() (*$X6*) ()+01*) (*ONLY USED WITH PROC*)
|
||||
83510 (*+01() FUNCTION TIMESTEN(T, E: INTEGER): REAL ; EXTERN ; ()+01*)
|
||||
83520 (*+05() FUNCTION TIMESTEN( T: REAL; E: INTEGER ): REAL ; EXTERN ; ()+05*)
|
||||
83530 (*+01() (*$X4*) ()+01*)
|
||||
83540 (**)
|
||||
83550 (**)
|
||||
83560 FUNCTION SUBFIXED(SIGN, (*0 OR 1 OR -1 FOR SPACE TO BE PROVIDED FOR SIGN*)
|
||||
83570 BEFORE, (*DIGITS (POSSIBLY SUPPRESSED) REQUIRED BEFORE DECIMAL POINT;
|
||||
83580 -VE MEANS AS MANY AS NECESSARY*)
|
||||
83590 POINT, (*0 OR 1 FOR SPACE TO BE PROVIDED FOR DECIMAL POINT*)
|
||||
83600 AFTER (*DIGITS AFTER DECIMAL POINT*)
|
||||
83610 : INTEGER;
|
||||
83620 VAR EXP: INTEGER; (*TO RECEIVE DECIMAL EXPONENT IF EXPNEEDED*)
|
||||
83630 EXPNEEDED: BOOLEAN;
|
||||
83640 X: REALTEGER;
|
||||
83650 R: BOOLEAN; (*TRUE IF X IS REALLY .REAL*)
|
||||
83660 VAR S: OBJECTP; (*NIL IF A NEW STRING IS TO BE CREATED;
|
||||
83670 OTHERWISE, A STRING WHOSE CHARVEC IS TO RECEIVE THE RESULT
|
||||
83680 (AND WHICH MUST BE LONG ENOUGH)*)
|
||||
83690 START: INTEGER (*FIRST INDEX OF S TO BE USED*)
|
||||
83700 ): BOOLEAN;
|
||||
83710 LABEL 999;
|
||||
83720 CONST POWOF2 = (*+01() 2000000000000000000B; (* 2^55 = 36028797018963968.0 *) ()+01*)
|
||||
83730 (*TWO TO THE POWER (NO. OF DIGITS IN MANTISSA)+7*)
|
||||
83740 (*+02() 1.0; ()+02*)
|
||||
83750 (*+05() 1.0; ()+05*)
|
||||
83760 POWOF2OVER10 = (*+01() 146314631463146315B; (* ROUND( 2^55 / 10 ) = 3602879701896397.0 *) ()+01*)
|
||||
83770 (*CAREFULLY ROUNDED UP*)
|
||||
83780 (*+02() 0.1; ()+02*)
|
||||
83790 (*+05() 0.1; ()+05*)
|
||||
83800 (*+44() TYPE MINT = INTEGER; ()+44*)
|
||||
83810 VAR L, M, BLANKS, PT, FIRSTDIG, INDEX: INTEGER;
|
||||
83820 A, B, ROUNDD: MINT;
|
||||
83830 PROCEDURE CONVR(Y(*>=0.0*): REAL; VAR L: INTEGER; VAR A: MINT);
|
||||
83840 (*COMPUTES L = THE LARGEST NUMBER OF DIGITS BEFORE THE DECIMAL POINT (POSSIBLY NEGATIVE) WHICH MIGHT BE NEEDED;
|
||||
83850 A = (Y*POWOF2)/10**L (ROUNDED TO NEAREST INTEGER?) *)
|
||||
83860 (*+01() EXTERN; ()+01*)
|
||||
83870 (*+05()
|
||||
83880 CONST LOG10E = 0.43429; (*DELIBERATELY UNDERESTIMATED*)
|
||||
83890 VAR LL: REAL;
|
||||
83900 BEGIN
|
||||
83910 LL :=LN(Y)*LOG10E;
|
||||
83920 IF LL>0.0 THEN L := 1+TRUNC(LL)
|
||||
83930 ELSE L := TRUNC(LL);
|
||||
83940 A := TIMESTEN(Y (* *POWOF2 *), -L);
|
||||
83950 IF A >= 1.0 THEN
|
||||
83960 BEGIN L := L+1; A := TIMESTEN(Y (* *POWOF2 *), -L) END;
|
||||
83970 END ;
|
||||
83980 ()+05*)
|
||||
83990 (*+02()
|
||||
84000 CONST LOG10E = 0.43429; (*DELIBERATELY UNDERESTIMATED*)
|
||||
84010 VAR LL: REAL;
|
||||
84020 BEGIN
|
||||
84030 LL :=LN(Y)*LOG10E;
|
||||
84040 IF LL>0.0 THEN L := 1+TRUNC(LL)
|
||||
84050 ELSE L := TRUNC(LL);
|
||||
84060 A := (*-44() TIMESTE(Y (* *POWOF2 *), -L) ()-44*) (*+44() L ()+44*);
|
||||
84070 IF A >= 1.0 THEN
|
||||
84080 BEGIN L := L+1; A := (*-44() TIMESTE(Y (* *POWOF2 *), -L) ()-44*) (*+44() L ()+44*) END;
|
||||
84090 END ;
|
||||
84100 ()+02*)
|
||||
84110 PROCEDURE CONVI(Y(*>=0*): INTEGER; VAR L: INTEGER; VAR A: MINT);
|
||||
84120 (*AS CONVR, BUT FOR INTEGERS*)
|
||||
84130 (*+01() EXTERN; ()+01*)
|
||||
84140 (*+05()
|
||||
84150 VAR I: INTEGER ; YY: INTEGER ;
|
||||
84160 BEGIN
|
||||
84170 YY := Y ;
|
||||
84180 L := 0 ;
|
||||
84190 WHILE YY >= 1 DO
|
||||
84200 BEGIN L := L + 1 ; YY := YY DIV 10 END ;
|
||||
84210 A := TIMESTEN(Y (* *POWOF2 *), -L)
|
||||
84220 END ;
|
||||
84230 ()+05*)
|
||||
84240 (*+02()
|
||||
84250 VAR I: INTEGER ; YY: INTEGER ;
|
||||
84260 BEGIN
|
||||
84270 YY := Y ;
|
||||
84280 L := 0 ;
|
||||
84290 WHILE YY >= 1 DO
|
||||
84300 BEGIN L := L + 1 ; YY := YY DIV 10 END ;
|
||||
84310 (*-44() A := TIMESTE(Y (* *POWOF2 *), -L) ()-44*)
|
||||
84320 (*+44() A := Y; ()+44*)
|
||||
84330 END ;
|
||||
84340 ()+02*)
|
||||
84350 (*-44()
|
||||
84360 PROCEDURE ROUNDER(DIGITS: INTEGER; VAR ROUNDD: MINT);
|
||||
84370 (* COMPUTES ROUNDD = 0.5 X ( 10 TO THE POWER OF - DIGITS ) X POWOF2 *)
|
||||
84380 (*+01() EXTERN; ()+01*)
|
||||
84390 (*+05()
|
||||
84400 VAR I : INTEGER ;
|
||||
84410 BEGIN
|
||||
84420 IF DIGITS < 0 THEN DIGITS := 0 ELSE IF DIGITS > REALWIDTH THEN DIGITS := REALWIDTH ;
|
||||
84430 ROUNDD := 1 ;
|
||||
84440 FOR I := 1 TO DIGITS DO
|
||||
84450 ROUNDD := ROUNDD / 10 ;
|
||||
84460 (* ROUNDD = 10 TO THE POWER OF - DIGITS *)
|
||||
84470 ROUNDD := 0.5 * ROUNDD (* *POWOF2 *);
|
||||
84480 END ;
|
||||
84490 ()+05*)
|
||||
84500 (*+02()
|
||||
84510 VAR I : INTEGER ;
|
||||
84520 BEGIN
|
||||
84530 IF DIGITS < 0 THEN DIGITS := 0 ELSE IF DIGITS > REALWIDTH THEN DIGITS := REALWIDTH ;
|
||||
84540 ROUNDD := 1 ;
|
||||
84550 FOR I := 1 TO DIGITS DO
|
||||
84560 ROUNDD := ROUNDD / 10 ;
|
||||
84570 (* ROUNDD = 10 TO THE POWER OF - DIGITS *)
|
||||
84580 ROUNDD := 0.5 * ROUNDD (* *POWOF2 *);
|
||||
84590 END ;
|
||||
84600 ()+02*)
|
||||
84610 ()-44*)
|
||||
84620 BEGIN (* OF SUBFIXED *)
|
||||
84630 WITH X DO
|
||||
84640 BEGIN
|
||||
84650 IF R THEN IF REA <> 0.0 THEN CONVR(ABS(REA), L, A) ELSE CONVI(ABS(INT), L, A)
|
||||
84660 ELSE CONVI(ABS(INT), L, A);
|
||||
84670 (*-44()
|
||||
84680 IF EXPNEEDED THEN
|
||||
84690 IF REA<>0.0 THEN
|
||||
84700 BEGIN
|
||||
84710 ROUNDER(BEFORE+AFTER, ROUNDD);
|
||||
84720 B := A; A := A*10;
|
||||
84730 IF A+ROUNDD<POWOF2 THEN
|
||||
84740 BEGIN B := A; L := L-1 END;
|
||||
84750 A := B+ROUNDD;
|
||||
84760 EXP := L-BEFORE; L := BEFORE
|
||||
84770 END
|
||||
84780 ELSE
|
||||
84790 BEGIN A := 0; EXP := 0 END
|
||||
84800 ELSE
|
||||
84810 BEGIN
|
||||
84820 ROUNDER(L+AFTER, ROUNDD);
|
||||
84830 A := A+ROUNDD (*+01()+ORD(ROUNDD=0)()+01*);
|
||||
84840 IF A<POWOF2OVER10 THEN
|
||||
84850 BEGIN A := A*10; L := L-1 END
|
||||
84860 END
|
||||
84870 ()-44*)
|
||||
84880 END ;
|
||||
84890 IF L>0 THEN
|
||||
84900 BEGIN IF BEFORE<0 THEN BEFORE := L; M := L END
|
||||
84910 ELSE
|
||||
84920 IF BEFORE<=0 THEN BEGIN BEFORE := ORD(POINT=0); M := BEFORE END ELSE M := 1;
|
||||
84930 IF (L>BEFORE) OR (AFTER<0) THEN BEGIN SUBFIXED := FALSE; GOTO 999 END;
|
||||
84940 IF S=NIL THEN S := CRSTRING(SIGN+BEFORE+POINT+AFTER);
|
||||
84950 BLANKS := START-1+BEFORE-M+ORD(SIGN<0);
|
||||
84960 WITH S^ DO
|
||||
84970 BEGIN
|
||||
84980 FOR INDEX := START TO BLANKS DO
|
||||
84990 CHARVEC[INDEX] := ' ';
|
||||
85000 IF SIGN=1 THEN
|
||||
85010 BEGIN BLANKS := BLANKS+SIGN;
|
||||
85020 IF (*-44() ( R AND ( X.REA < 0.0 ) ) OR ()-44*)
|
||||
85030 ( NOT R AND ( X.INT < 0 ) ) THEN
|
||||
85040 CHARVEC[BLANKS] := '-' ELSE CHARVEC[BLANKS] := '+'
|
||||
85050 END;
|
||||
85060 PT := BLANKS+M+1; FIRSTDIG := START+BEFORE+SIGN-L+ORD(L<0);
|
||||
85070 (*-44()
|
||||
85080 FOR INDEX := BLANKS+1 TO BLANKS+M+POINT+AFTER DO
|
||||
85090 IF INDEX=PT THEN CHARVEC[INDEX] := '.'
|
||||
85100 ELSE IF INDEX<FIRSTDIG THEN CHARVEC[INDEX] := '0'
|
||||
85110 ELSE
|
||||
85120 BEGIN
|
||||
85130 A := A*10;
|
||||
85140 (*+01()
|
||||
85150 CHARVEC[INDEX] := CHR( ORD( '0' ) + A DIV POWOF2 ) ;
|
||||
85160 A := A MOD POWOF2
|
||||
85170 ()+01*)
|
||||
85180 (*-01()
|
||||
85190 L := TRUNC( A (* / POWOF2 *));
|
||||
85200 CHARVEC[INDEX] := CHR( ORD( '0' ) + L );
|
||||
85210 A := A - L (* *POWOF2 *);
|
||||
85220 ()-01*)
|
||||
85230 END
|
||||
85240 ()-44*)
|
||||
85250 (*+44()
|
||||
85260 FOR INDEX := BLANKS+M+POINT+AFTER DOWNTO BLANKS+1 DO
|
||||
85270 IF INDEX=PT THEN CHARVEC[INDEX] := '.'
|
||||
85280 ELSE IF INDEX<FIRSTDIG THEN CHARVEC[INDEX] := '0'
|
||||
85290 ELSE
|
||||
85300 BEGIN
|
||||
85310 B := A MOD 10;
|
||||
85320 A := A DIV 10;
|
||||
85330 CHARVEC[INDEX] := CHR( ORD( '0' ) + B );
|
||||
85340 END;
|
||||
85350 ()+44*)
|
||||
85360 END;
|
||||
85370 SUBFIXED := TRUE;
|
||||
85380 999:
|
||||
85390 END;
|
||||
85400 (**)
|
||||
85410 (**)
|
||||
85420 PROCEDURE ERRORFILL(VAR S: OBJECTP; LENGTH: INTEGER);
|
||||
85430 VAR I: INTEGER;
|
||||
85440 BEGIN
|
||||
85450 IF S=NIL THEN S := CRSTRING(LENGTH);
|
||||
85460 WITH S^ DO
|
||||
85470 FOR I := 1 TO STRLENGTH DO CHARVEC[I] := ERRORCHAR
|
||||
85480 END;
|
||||
85490 (**)
|
||||
85500 (**)
|
||||
85510 PROCEDURE PUTT(RF: OBJECTP);
|
||||
85520 (*+02() LABEL 1; ()+02*)
|
||||
85530 VAR P: ^REALTEGER;
|
||||
85540 TEMP: REALTEGER;
|
||||
85550 PDESC1:PDESC;
|
||||
85560 TEMPLATE:DPOINT;
|
||||
85570 COUNT, XMODE, XSIZE, SIZE, I, J: INTEGER;
|
||||
85580 F,PVAL:OBJECTP;
|
||||
85590 (**)
|
||||
85600 (*+02() PROCEDURE DUMMYP; (*JUST HERE TO MAKE 1 GLOBAL, NOT CALLED*)
|
||||
85610 BEGIN GOTO 1 END; ()+02*)
|
||||
85620 (**)
|
||||
85630 PROCEDURE ENSROOM(RF:OBJECTP;VAR F:OBJECTP;UPB:INTEGER);
|
||||
85640 BEGIN IF [LINEOVERFLOW]<=F^.PCOVER^.STATUS
|
||||
85650 THEN IF NOT ENSLINE(RF,F) THEN ERRORR(NOLOGICAL);
|
||||
85660 WITH F^.PCOVER^ DO
|
||||
85670 BEGIN IF COFCPOS+UPB-ORD(COFCPOS<=1)>CHARBOUND
|
||||
85680 THEN BEGIN IF UPB>=CHARBOUND THEN ERRORR(SMALLLINE);
|
||||
85690 STATUS:=STATUS+[LINEOVERFLOW];
|
||||
85700 ENSROOM(RF,F,UPB)
|
||||
85710 END
|
||||
85720 ELSE IF COFCPOS<>1 THEN
|
||||
85730 CLPASC5(ORD(F^.PCOVER), ORD(F), -1, ORD(' '), ORD(BOOK), DOPUTS);
|
||||
85740 END (*WITH*);
|
||||
85750 END; (*ENSROOM*)
|
||||
85760 (**)
|
||||
85770 PROCEDURE CRREALSTR(R:REAL;VAR S:OBJECTP;START:INTEGER);
|
||||
85780 VAR E, F: REALTEGER;
|
||||
85790 NOOK: BOOLEAN;
|
||||
85800 BEGIN
|
||||
85810 F.REA := R ;
|
||||
85820 NOOK:=SUBFIXED(1,1,1,REALWIDTH-1,E.INT,TRUE,F,TRUE,S,START);
|
||||
85830 S^.CHARVEC[START+REALWIDTH+2]:='E';
|
||||
85840 NOOK:=SUBFIXED(1,EXPWIDTH,0,0,E.INT,FALSE,E,FALSE,S,START+REALWIDTH+3)
|
||||
85850 END;
|
||||
85860 (**)
|
||||
85870 PROCEDURE VALUEPRINT(RF:OBJECTP;VAR F:OBJECTP);
|
||||
85880 VAR D,I,J,EXP,UPB,LWB:INTEGER;
|
||||
85890 S,STR :OBJECTP;
|
||||
85900 NOOK:BOOLEAN;
|
||||
85910 BEGIN WITH TEMP DO
|
||||
85920 BEGIN
|
||||
85930 UPB:=1;
|
||||
85940 IF NOT([OPENED,WRITEMOOD,CHARMOOD]<=F^.PCOVER^.STATUS) THEN
|
||||
85950 ENSSTATE(RF, F, [OPENED,WRITEMOOD,CHARMOOD]);
|
||||
85960 XSIZE := SZINT;
|
||||
85970 CASE XMODE OF
|
||||
85980 -1: (*FILLER*) XSIZE := 0;
|
||||
85990 (*+61() 1,3,5: (*LONG MODES*)
|
||||
86000 BEGIN XSIZE := SZLONG; DUMMY END; ()+61*)
|
||||
86010 0: (*INTEGER*)
|
||||
86020 BEGIN UPB:=INTSPACE;
|
||||
86030 ENSROOM(RF,F,UPB);
|
||||
86040 NOOK:=SUBFIXED(1,INTWIDTH,0,0,EXP,FALSE,TEMP,FALSE,PUTSTRING,1);
|
||||
86050 WITH F^.PCOVER^ DO CLPASC5(ORD(F^.PCOVER), ORD(PUTSTRING), 1, INTSPACE, ORD(BOOK), DOPUTS)
|
||||
86060 END;
|
||||
86070 2: (*REAL*)
|
||||
86080 BEGIN XSIZE := SZREAL; UPB:=REALSPACE;
|
||||
86090 ENSROOM(RF,F,UPB);
|
||||
86100 CRREALSTR(REA,PUTSTRING,1);
|
||||
86110 WITH F^.PCOVER^ DO CLPASC5(ORD(F^.PCOVER), ORD(PUTSTRING), 1, UPB, ORD(BOOK), DOPUTS);
|
||||
86120 END;
|
||||
86130 4: (*COMPL*)
|
||||
86140 BEGIN UPB:=COMPLSPACE;
|
||||
86150 ENSROOM(RF,F,UPB);
|
||||
86160 REA := P^.REA;
|
||||
86170 CRREALSTR(REA,PUTSTRING,1);
|
||||
86180 PUTSTRING^.CHARVEC[REALSPACE+1]:=' ';
|
||||
86190 PUTSTRING^.CHARVEC[REALSPACE+2]:='I';
|
||||
86200 P:=INCPTR(P, SZREAL); REA := P^.REA;
|
||||
86210 CRREALSTR(REA,PUTSTRING,REALSPACE+3);
|
||||
86220 WITH F^.PCOVER^ DO CLPASC5(ORD(F^.PCOVER), ORD(PUTSTRING), 1, UPB, ORD(BOOK), DOPUTS);
|
||||
86230 END;
|
||||
86240 7,9,10: BEGIN LWB:=1; (*STRING,BITS,BYTES*)
|
||||
86250 IF XMODE=7 THEN
|
||||
86260 BEGIN XSIZE := SZADDR; STR:=PTR; D:=STR^.STRLENGTH;
|
||||
86270 IF [PAGEOVERFLOW]<=F^.PCOVER^.STATUS
|
||||
86280 THEN IF NOT ENSPAGE(RF,F) THEN ERRORR(9999)
|
||||
86290 END
|
||||
86300 ELSE IF XMODE=9 THEN
|
||||
86310 BEGIN J:=INT; (*BITS*)
|
||||
86320 STR := CRSTRING(BITSWIDTH);
|
||||
86330 WITH STR^ DO
|
||||
86340 FOR I:=1 TO BITSWIDTH DO
|
||||
86350 IF NXTBIT(J)=1 THEN CHARVEC[I]:='T' ELSE CHARVEC[I]:='F';
|
||||
86360 D:=BITSWIDTH
|
||||
86370 END
|
||||
86380 ELSE IF XMODE=10 THEN (*BYTES*)
|
||||
86390 BEGIN STR := CRSTRING(BYTESWIDTH);
|
||||
86400 WITH STR^ DO
|
||||
86410 FOR I:=1 TO BYTESWIDTH DO CHARVEC[I]:=ALF[I];
|
||||
86420 D:=BYTESWIDTH
|
||||
86430 END;
|
||||
86440 WHILE LWB<=D DO
|
||||
86450 BEGIN IF [LINEOVERFLOW]<=F^.PCOVER^.STATUS
|
||||
86460 THEN IF NOT ENSLINE(RF,F) THEN ERRORR(9999);
|
||||
86470 WITH F^.PCOVER^ DO
|
||||
86480 BEGIN UPB:=LWB+CHARBOUND-COFCPOS; (*ROOM LEFT ON LINE*)
|
||||
86490 IF UPB>D THEN UPB:=D;
|
||||
86500 WITH F^.PCOVER^ DO CLPASC5(ORD(F^.PCOVER), ORD(STR), LWB, UPB, ORD(BOOK), DOPUTS);
|
||||
86510 LWB:=UPB+1;
|
||||
86520 END (*WITH*)
|
||||
86530 END; (*OD*)
|
||||
86540 IF XMODE IN [9,10] THEN GARBAGE(STR)
|
||||
86550 END; (*STRING*)
|
||||
86560 6,8: (*CHAR, BOOL*)
|
||||
86570 BEGIN
|
||||
86580 IF LINEOVERFLOW IN F^.PCOVER^.STATUS THEN
|
||||
86590 IF NOT ENSLINE(RF, F) THEN ERRORR(9999);
|
||||
86600 IF XMODE=8 THEN (*BOOL*)
|
||||
86610 IF (*+01()INT<0()+01*) (*-01()INT<>0()-01*) THEN
|
||||
86620 INT := ORD('T') ELSE INT := ORD('F');
|
||||
86630 IF (INT>=0) AND (INT<=MAXABSCHAR) THEN
|
||||
86640 WITH F^.PCOVER^ DO CLPASC5(ORD(F^.PCOVER), ORD(S), -1, INT, ORD(BOOK), DOPUTS)
|
||||
86650 ELSE ERRORR(RCHARERROR)
|
||||
86660 END;
|
||||
86670 11: (*PROC*) CL68(GETPROC(PTR), RF);
|
||||
86680 12: (*STRUCT*)
|
||||
86690 BEGIN J:=0;
|
||||
86700 REPEAT J:=J+1 UNTIL TEMPLATE^[J]<0;
|
||||
86710 I:=ORD(P);
|
||||
86720 WHILE ORD(P)-I<TEMPLATE^[0] DO
|
||||
86730 BEGIN J:=J+1;
|
||||
86740 XMODE:=TEMPLATE^[J]-1;
|
||||
86750 TEMP := P^ ;
|
||||
86760 VALUEPRINT(RF,F);
|
||||
86770 P:=INCPTR(P, XSIZE)
|
||||
86780 END;
|
||||
86790 XMODE:=12
|
||||
86800 END;
|
||||
86810 14: (*CODE(REF FILE)VOID*)
|
||||
86820 BEGIN
|
||||
86830 XSIZE := SZPROC;
|
||||
86840 CLPASC1(ORD(RF), PROCC);
|
||||
86850 END;
|
||||
86860 END; (*CASE*)
|
||||
86870 END (*WITH TEMP*);
|
||||
86880 END; (*VALUEPRINT*)
|
||||
86890 (**)
|
||||
86900 BEGIN (*PUT*)
|
||||
86910 (*PUTT IS CALLED FROM EITHER PUT OR PRINT, WHICH ARE WRITTEN
|
||||
86920 IN ASSEMBLER. AT THIS POINT, STKTOP(0) CONTAINS COUNT, THE
|
||||
86930 SPACE OCCUPIED BY DATA LIST ITEMS, BELOW THAT ARE PAIRS
|
||||
86940 ON THE STACK, EACH CONSISTING OF AN XMODE AND A VALUE
|
||||
86950 *)
|
||||
86960 (*+02() 1: ()+02*) COUNT := GETSTKTOP(SZWORD, 0);
|
||||
86970 FPINC(RF^);
|
||||
86980 J := COUNT+SZWORD;
|
||||
86990 WHILE J>SZWORD DO
|
||||
87000 BEGIN
|
||||
87010 J := J-SZWORD;
|
||||
87020 XMODE := GETSTKTOP(SZWORD, J);
|
||||
87030 CASE XMODE OF
|
||||
87040 4,7,11,12,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31:
|
||||
87050 BEGIN
|
||||
87060 J := J-SZADDR;
|
||||
87070 PVAL := ASPTR(GETSTKTOP(SZADDR, J));
|
||||
87080 FPINC(PVAL^);
|
||||
87090 END;
|
||||
87100 (*+61() 1,3,5: J := J-SZLONG; ()+61*)
|
||||
87110 14: J := J-SZPROC;
|
||||
87120 2: J := J-SZREAL;
|
||||
87130 0,6,8,9,10: J := J-SZINT;
|
||||
87140 -1: (*NO ACTION*);
|
||||
87150 END;
|
||||
87160 END;
|
||||
87170 TESTF(RF,F);
|
||||
87180 J := COUNT+SZWORD;
|
||||
87190 WHILE J>SZWORD DO
|
||||
87200 BEGIN
|
||||
87210 J := J-SZWORD;
|
||||
87220 XMODE := GETSTKTOP(SZWORD, J);
|
||||
87230 IF XMODE>=16 THEN (*ROW*)
|
||||
87240 BEGIN
|
||||
87250 J := J-SZADDR;
|
||||
87260 XMODE:=XMODE-16;
|
||||
87270 PVAL := ASPTR(GETSTKTOP(SZADDR, J));
|
||||
87280 WITH PVAL^ DO
|
||||
87290 BEGIN
|
||||
87300 FORMPDESC(PVAL,PDESC1);
|
||||
87310 TEMPLATE:=MDBLOCK;
|
||||
87320 IF ORD(TEMPLATE)=0 THEN SIZE := SZADDR
|
||||
87330 ELSE IF ORD(TEMPLATE)<=MAXSIZE THEN SIZE:=ORD(TEMPLATE)
|
||||
87340 ELSE SIZE:=TEMPLATE^[0];
|
||||
87350 WHILE NEXTEL(0,PDESC1) DO WITH PDESC1 DO WITH PDESCVEC[0] DO
|
||||
87360 BEGIN I:=PP;
|
||||
87370 WHILE I<PP+PSIZE DO
|
||||
87380 BEGIN P:=INCPTR(PVALUE, I);
|
||||
87390 TEMP := P^;
|
||||
87400 VALUEPRINT(RF,F);
|
||||
87410 I:=I+SIZE
|
||||
87420 END
|
||||
87430 END
|
||||
87440 END
|
||||
87450 END
|
||||
87460 ELSE
|
||||
87470 BEGIN
|
||||
87480 CASE XMODE OF
|
||||
87490 4,5,12: (*STRUCT, INCLUDING COMPL*)
|
||||
87500 BEGIN
|
||||
87510 J := J-SZADDR;
|
||||
87520 PVAL := ASPTR(GETSTKTOP(SZADDR, J));
|
||||
87530 TEMPLATE := PVAL^.DBLOCK;
|
||||
87540 P := INCPTR(PVAL, STRUCTCONST);
|
||||
87550 END;
|
||||
87560 0,6,8,9,10:
|
||||
87570 BEGIN J := J-SZINT; TEMP.INT := GETSTKTOP(SZINT, J) END;
|
||||
87580 (*+61()
|
||||
87590 1,3:
|
||||
87600 BEGIN J := J-SZLONG; TEMP.LONG := GETSTKTOP(SZLONG, J) END;
|
||||
87610 ()+61*)
|
||||
87620 2:
|
||||
87630 BEGIN J := J-SZREAL; (*-01()TEMP.REA()-01*)(*+01()TEMP.INT()+01*) := GETSTKTOP(SZREAL, J) END;
|
||||
87640 7,11:
|
||||
87650 BEGIN J := J-SZADDR; TEMP.PTR := ASPTR(GETSTKTOP(SZADDR, J)) END;
|
||||
87660 14:
|
||||
87670 BEGIN J := J-SZPROC; TEMP.PROCC := GETSTKTOP(SZPROC, J) END;
|
||||
87680 -1: (*NO ACTION*);
|
||||
87690 END;
|
||||
87700 VALUEPRINT(RF, F);
|
||||
87710 END;
|
||||
87720 END; (*OD*)
|
||||
87730 J := COUNT+SZWORD;
|
||||
87740 WHILE J>SZWORD DO
|
||||
87750 BEGIN
|
||||
87760 J := J-SZWORD;
|
||||
87770 XMODE := GETSTKTOP(SZWORD, J);
|
||||
87780 CASE XMODE OF
|
||||
87790 4,7,11,12,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31:
|
||||
87800 BEGIN
|
||||
87810 J := J-SZADDR;
|
||||
87820 PVAL := ASPTR(GETSTKTOP(SZADDR, J));
|
||||
87830 WITH PVAL^ DO
|
||||
87840 BEGIN FDEC; IF FTST THEN GARBAGE(PVAL) END;
|
||||
87850 END;
|
||||
87860 (*+61() 1,3,5: J := J-SZLONG; ()+61*)
|
||||
87870 14: J := J-SZPROC;
|
||||
87880 2: J := J-SZREAL;
|
||||
87890 0,6,8,9,10: J := J-SZINT;
|
||||
87900 -1: (*NO ACTION*);
|
||||
87910 END;
|
||||
87920 END;
|
||||
87930 WITH RF^ DO
|
||||
87940 BEGIN FDEC; IF FTST THEN GARBAGE(RF) END;
|
||||
87950 END; (* PUT *)
|
||||
87960 (**)
|
||||
87970 (**)
|
||||
87980 (*-02()
|
||||
87990 BEGIN (*OF A68*)
|
||||
88000 END; (*OF A68*)
|
||||
88010 ()-02*)
|
||||
88020 (*+01()
|
||||
88030 BEGIN (*OF MAIN PROGRAM*)
|
||||
88040 END (* OF EVERYTHING *).
|
||||
88050 ()+01*)
|
93
lang/a68s/liba68s/random.p
Normal file
93
lang/a68s/liba68s/random.p
Normal file
|
@ -0,0 +1,93 @@
|
|||
65300 #include "rundecs.h"
|
||||
65310 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
65320 (**)
|
||||
65330 PROCEDURE ERRORR(N: INTEGER);EXTERN;
|
||||
65340 PROCEDURE GARBAGE(ANOBJECT: OBJECTP);EXTERN;
|
||||
65350 FUNCTION SAFEACCESS(LOCATION: OBJECTP): UNDRESSP; EXTERN;
|
||||
65360 (**)
|
||||
65370 (**)
|
||||
65380 FUNCTION RAND(VAR SEED: INTEGER): REAL;
|
||||
65390 CONST
|
||||
65400 (*+11()
|
||||
65410 MULTIPLIER=16777215;
|
||||
65420 PRIMEMODULUS=281474976710597;
|
||||
65430 (*N=48, L=24, M=24*)
|
||||
65440 TWOL=16777216;
|
||||
65450 TWOM=16777216;
|
||||
65460 PRIMEDIFF=59; (*2^N - PRIMEMODULUS*)
|
||||
65470 SHRINKER=4614343880501.61;
|
||||
65480 STRETCHER=4614343880502.55;
|
||||
65490 ()+11*)
|
||||
65500 (*+12()
|
||||
65510 MULTIPLIER=176;
|
||||
65520 PRIMEMODULUS=32749;
|
||||
65530 (*N=15, L=7, M=8*)
|
||||
65540 TWOL=128;
|
||||
65550 TWOM=256;
|
||||
65560 PRIMEDIFF=19; (*2^N - PRIMEMODULUS*)
|
||||
65570 SHRINKER=1560.381;
|
||||
65580 STRETCHER=1559.381;
|
||||
65590 ()+12*)
|
||||
65600 (*+13()
|
||||
65610 MULTIPLIER=46340;
|
||||
65620 PRIMEMODULUS=2147483647;
|
||||
65630 (*N=31, L=15, M=16*)
|
||||
65640 TWOL=32768;
|
||||
65650 TWOM=65536;
|
||||
65660 PRIMEDIFF=1; (*2^N - PRIMEMODULUS*)
|
||||
65670 SHRINKER=715827882.334;
|
||||
65680 STRETCHER=715827881.667;
|
||||
65690 ()+13*)
|
||||
65700 VAR HIBITS,MIDBITS,LOBITS: INTEGER;
|
||||
65710 LSHALFOFRAND: REAL;
|
||||
65720 BEGIN
|
||||
65730 SEED := SEED+(1-TRUNC(SEED/SHRINKER));
|
||||
65740 LSHALFOFRAND := SEED/PRIMEMODULUS;
|
||||
65750 LSHALFOFRAND := LSHALFOFRAND/PRIMEMODULUS;
|
||||
65760 LOBITS := SEED MOD TWOL * MULTIPLIER;
|
||||
65770 MIDBITS := (SEED DIV TWOL - TWOL)*MULTIPLIER + LOBITS DIV TWOL;
|
||||
65780 IF MIDBITS>=0 THEN
|
||||
65790 BEGIN
|
||||
65800 HIBITS := MIDBITS DIV TWOM;
|
||||
65810 MIDBITS := MIDBITS MOD TWOM + MULTIPLIER*TWOL;
|
||||
65820 END
|
||||
65830 ELSE
|
||||
65840 BEGIN
|
||||
65850 HIBITS := (MIDBITS+1) DIV TWOM -1;
|
||||
65860 MIDBITS := MIDBITS MOD TWOM;
|
||||
65870 MIDBITS := MIDBITS + ORD(MIDBITS<0)*TWOM + MULTIPLIER*TWOL;
|
||||
65880 (*IN CASE PASCAL COMPILER DOES NOT IMPLEMENT MOD CORRECTLY*)
|
||||
65890 END;
|
||||
65900 HIBITS := HIBITS + MIDBITS DIV TWOM;
|
||||
65910 MIDBITS := MIDBITS MOD TWOM;
|
||||
65920 LOBITS := LOBITS MOD TWOL + MIDBITS*TWOL;
|
||||
65930 SEED := LOBITS - PRIMEMODULUS + HIBITS*PRIMEDIFF;
|
||||
65940 IF SEED<0 THEN SEED := SEED + PRIMEMODULUS;
|
||||
65950 RAND := SEED/PRIMEMODULUS+LSHALFOFRAND;
|
||||
65960 SEED := SEED+TRUNC((SEED-1)/STRETCHER)-1
|
||||
65970 END;
|
||||
65980 (**)
|
||||
65990 (**)
|
||||
66000 FUNCTION RANDOM: REAL;
|
||||
66010 BEGIN
|
||||
66020 RANDOM := RAND(LASTRANDOM)
|
||||
66030 END;
|
||||
66040 (**)
|
||||
66050 (**)
|
||||
66060 FUNCTION NEXTRAN(SEEDP: OBJECTP): REAL;
|
||||
66070 VAR PTR: UNDRESSP;
|
||||
66080 BEGIN
|
||||
66090 PTR := SAFEACCESS(SEEDP);
|
||||
66100 NEXTRAN := RAND(PTR^.FIRSTWORD);
|
||||
66110 IF FPTST(SEEDP^) THEN GARBAGE(SEEDP);
|
||||
66120 END;
|
||||
66130 (**)
|
||||
66140 (**)
|
||||
66150 (*-02()
|
||||
66160 BEGIN (* OF A68 *)
|
||||
66170 END (* OF A68 *);
|
||||
66180 ()-02*)
|
||||
66190 (*+01()
|
||||
66200 BEGIN (* OF MAIN PROGRAM *)
|
||||
66210 END (* OF MAIN PROGRAM *).
|
||||
66220 ()+01*)
|
31
lang/a68s/liba68s/rangent.p
Normal file
31
lang/a68s/liba68s/rangent.p
Normal file
|
@ -0,0 +1,31 @@
|
|||
42400 #include "rundecs.h"
|
||||
42410 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
42420 (**)
|
||||
42430 (**)
|
||||
42440 (*-01() (*-05()
|
||||
42450 PROCEDURE RANGENT (IDB: PIDBLK; LOCRG: DEPTHRANGE; NEWRG: PRANGE);
|
||||
42460 (*PRANGENT*)
|
||||
42470 BEGIN
|
||||
42480 WITH NEWRG^ DO WITH FIRSTW DO
|
||||
42490 BEGIN
|
||||
42500 LOOPCOUNT := 0;
|
||||
42510 RGIDBLK := IDB;
|
||||
42520 RECGEN := NIL;
|
||||
42530 RGSCOPE := LOCRG;
|
||||
42540 RIBOFFSET:= FIRSTRG.RIBOFFSET;
|
||||
42550 (*-41() RGNEXTFREE := INCPTR(NEWRG, RGCONST); ()-41*)
|
||||
42560 (*+41() RGLASTUSED := ASPTR(ORD(NEWRG)); ()+41*)
|
||||
42570 END;
|
||||
42580 FIRSTRG.RIBOFFSET:= NEWRG
|
||||
42590 END;
|
||||
42600 ()-05*) ()-01*)
|
||||
42610 (**)
|
||||
42620 (**)
|
||||
42630 (*-02()
|
||||
42640 BEGIN
|
||||
42650 END ;
|
||||
42660 ()-02*)
|
||||
42670 (*+01()
|
||||
42680 BEGIN (*OF MAIN PROGRAM*)
|
||||
42690 END (*OF EVERYTHING*).
|
||||
42700 ()+01*)
|
70
lang/a68s/liba68s/rangext.p
Normal file
70
lang/a68s/liba68s/rangext.p
Normal file
|
@ -0,0 +1,70 @@
|
|||
42800 #include "rundecs.h"
|
||||
42810 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
42820 (**)
|
||||
42830 (**)
|
||||
42840 PROCEDURE GARBAGE (ANOBJECT: OBJECTP); EXTERN ;
|
||||
42850 (**)
|
||||
42860 (**)
|
||||
42870 PROCEDURE RANGEXT;
|
||||
42880 (*PRANGEXT*)
|
||||
42890 (*+01() EXTERN; ()+01*)
|
||||
42900 (*+05() EXTERN; ()+05*)
|
||||
42910 (*-01() (*-05()
|
||||
42920 VAR LASTRG: PRANGE;
|
||||
42930 IDP: PIDBLK ;
|
||||
42940 PP: OBJECTPP ;
|
||||
42950 I, J: INTEGER;
|
||||
42960 BEGIN
|
||||
42970 WITH FIRSTRG.RIBOFFSET^ DO
|
||||
42980 WITH FIRSTW DO
|
||||
42990 BEGIN
|
||||
43000 IDP := RGIDBLK ;
|
||||
43010 IF FIRSTRG.RIBOFFSET^.RIBOFFSET = FIRSTRG.RIBOFFSET THEN (*PARAMS*)
|
||||
43020 (*-41() PP := INCPTR(RGNEXTFREE, -PROCBL^.PARAMS) ()-41*)
|
||||
43030 (*+41() PP := INCPTR(RGLASTUSED, +PROCBL^.PARAMS) ()+41*)
|
||||
43040 ELSE
|
||||
43050 (*-41() PP := INCPTR ( FIRSTRG.RIBOFFSET , RGCONST ) ; ()-41*)
|
||||
43060 (*+41() PP := ASPTR ( ORD( FIRSTRG.RIBOFFSET ) ) ; ()+41*)
|
||||
43070 FIRSTRG.RIBOFFSET := RIBOFFSET ;
|
||||
43080 (*-41() WHILE ORD (PP) < ORD (RGNEXTFREE) DO ()-41*)
|
||||
43090 (*+41() WHILE ORD (PP) > ORD (RGLASTUSED) DO ()+41*)
|
||||
43100 BEGIN
|
||||
43110 IDP := INCPTR (IDP , -SZIDBLOCK) ;
|
||||
43120 WITH IDP^ DO
|
||||
43130 BEGIN
|
||||
43140 IF IDSIZE = 0 THEN
|
||||
43150 BEGIN
|
||||
43160 (*+41() PP := INCPTR( PP , - SZADDR ) ; ()+41*)
|
||||
43170 WITH PP^^ DO
|
||||
43180 BEGIN
|
||||
43190 FDEC;
|
||||
43200 IF FTST THEN GARBAGE (PP^)
|
||||
43210 END ;
|
||||
43220 (*-41() PP := INCPTR( PP , SZADDR ) ()-41*)
|
||||
43230 END
|
||||
43240 ELSE PP := INCPTR( PP , (*+41() - ()+41*) IDSIZE )
|
||||
43250 END
|
||||
43260 END
|
||||
43270 END
|
||||
43280 END;
|
||||
43290 (**)
|
||||
43300 (**)
|
||||
43310 FUNCTION RANGXTP(ANOBJECT: OBJECTP): OBJECTP;
|
||||
43320 (*PRANGEXT+2*)
|
||||
43330 BEGIN
|
||||
43340 WITH ANOBJECT^ DO FINC;
|
||||
43350 RANGEXT;
|
||||
43360 WITH ANOBJECT^ DO FDEC;
|
||||
43370 RANGXTP := ANOBJECT;
|
||||
43380 END;
|
||||
43390 ()-05*) ()-01*)
|
||||
43400 (**)
|
||||
43410 (**)
|
||||
43420 (*-02()
|
||||
43430 BEGIN
|
||||
43440 END ;
|
||||
43450 ()-02*)
|
||||
43460 (*+01()
|
||||
43470 BEGIN (*OF MAIN PROGRAM*)
|
||||
43480 END (*OF EVERYTHING*).
|
||||
43490 ()+01*)
|
39
lang/a68s/liba68s/reset.p
Normal file
39
lang/a68s/liba68s/reset.p
Normal file
|
@ -0,0 +1,39 @@
|
|||
88100 #include "rundecs.h"
|
||||
88110 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
88120 (**)
|
||||
88130 PROCEDURE GARBAGE (ANOBJECT: OBJECTP); EXTERN ;
|
||||
88140 PROCEDURE ERRORR(N :INTEGER); EXTERN ;
|
||||
88150 PROCEDURE TESTF(RF:OBJECTP;VAR F:OBJECTP); EXTERN;
|
||||
88160 PROCEDURE SETREADMOOD(PCOV:OBJECTP); EXTERN;
|
||||
88170 PROCEDURE SETWRITEMOOD(PCOV:OBJECTP); EXTERN;
|
||||
88180 PROCEDURE SETCHARMOOD(PCOV:OBJECTP); EXTERN;
|
||||
88190 (**)
|
||||
88200 (**)
|
||||
88210 PROCEDURE RESET(RF: OBJECTP);
|
||||
88220 VAR F: OBJECTP;
|
||||
88230 BEGIN
|
||||
88240 TESTF(RF, F);
|
||||
88250 WITH F^.PCOVER^ DO
|
||||
88260 IF OPENED IN STATUS THEN
|
||||
88270 IF RESETPOSS IN POSSIBLES THEN
|
||||
88280 BEGIN
|
||||
88290 STATUS := STATUS-[READMOOD,WRITEMOOD,LFE,PFE,PAGEOVERFLOW,LINEOVERFLOW]+[NOTRESET];
|
||||
88300 COFCPOS := 1; LOFCPOS := 1; POFCPOS := 1;
|
||||
88310 IF NOT (GETPOSS IN POSSIBLES) THEN SETWRITEMOOD(F^.PCOVER)
|
||||
88320 ELSE IF NOT (PUTPOSS IN POSSIBLES) THEN SETREADMOOD(F^.PCOVER);
|
||||
88330 IF NOT (BINPOSS IN POSSIBLES) THEN SETCHARMOOD(F^.PCOVER)
|
||||
88340 END
|
||||
88350 ELSE ERRORR(NORESET)
|
||||
88360 ELSE ERRORR(NOTOPEN);
|
||||
88370 IF FPTST(RF^) THEN GARBAGE(RF)
|
||||
88380 END;
|
||||
88390 (**)
|
||||
88400 (**)
|
||||
88410 (*-02()
|
||||
88420 BEGIN (*OF A68*)
|
||||
88430 END; (*OF A68*)
|
||||
88440 ()-02*)
|
||||
88450 (*+01()
|
||||
88460 BEGIN (*OF MAIN PROGRAM*)
|
||||
88470 END (* OF EVERYTHING *).
|
||||
88480 ()+01*)
|
47
lang/a68s/liba68s/rnstart.p
Normal file
47
lang/a68s/liba68s/rnstart.p
Normal file
|
@ -0,0 +1,47 @@
|
|||
43600 #include "rundecs.h"
|
||||
43610 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
43620 (**)
|
||||
43630 (**)
|
||||
43670 (*RNSTART HAD BETTER BE WRITTEN IN ASSEMBLER ON MOST SYSTEMS*)
|
||||
43680 (**)
|
||||
43690 (*-01() (*-05()
|
||||
43700 FUNCTION GETADDRESS (VAR VARIABLE :IPOINT) :IPOINT; EXTERN;
|
||||
43710 FUNCTION GETCALLER (CALLEE :IPOINT) :IPOINT; EXTERN;
|
||||
43720 FUNCTION GETLINENO :INTEGER; EXTERN;
|
||||
43730 PROCEDURE RNSTART;
|
||||
43740 VAR TSCOPE: DEPTHRANGE;
|
||||
43750 RNIB: IPOINT;
|
||||
43760 CURR : INTPOINT ;
|
||||
43764 PROCEDURE SETNSTATIC( N: INTEGER ) ; EXTERN ;
|
||||
43770 BEGIN
|
||||
43780 RNIB := DYNAMIC(ME);
|
||||
43790 (*+05()SETMYSTATIC(STATIC(DYNAMIC(RNIB)));(*TO ALGOL 68 CALLER*) ()+05*)
|
||||
43800 (*-05()SETMYSTATIC(GETCALLER(RNIB); ()-05*)
|
||||
43810 TSCOPE := SCOPE ;
|
||||
43820 (*+02()LINENO:=GETLINENO;()+02*)
|
||||
43830 SETMYSTATIC(RNIB); (* TO ALGOL 68 CALLEE *)
|
||||
43840 (*+05()CURR := ASPTR(RNIB-SZWORD*2);(*CURR IS NOW POINTING TO ALGOL 68 CALLEE'S STATIC LINK*)
|
||||
43850 CURR ^ := RNIB ; (* SET ALGOL 68 CALLEE'S STATIC LINK TO ITSELF *)
|
||||
43860 STATICP:=STATICP-192; (*ENABLING ACCESS BY OFFSET FROM PNX R2*)()+05*)
|
||||
43870 SCOPE := TSCOPE+LOCRG;
|
||||
43880 LEVEL := PROCBL^.LEVEL;
|
||||
43890 (*-02()LINENO := 0;()-02*)
|
||||
43900 WITH FIRSTRG DO WITH FIRSTW DO
|
||||
43910 BEGIN LOOPCOUNT := 0; RECGEN := NIL; RGIDBLK := PROCBL ^ . IDBLOCK ; RGSCOPE := 1;
|
||||
43920 RIBOFFSET := INCPTR( ASPTR( RNIB ) , IBCONST + RGCONST );
|
||||
43930 (*+05()RGLASTUSED :=ASPTR(RNIB-PARAMOFFSET);()+05*)
|
||||
43940 (*-05()RGLASTUSED:=INCPTR(ASPTR(GETADDRESS(STATICP)),-PARAMOFFSET);()-05*)
|
||||
43950 END;
|
||||
43960 IF LEVEL > PROCBL^.SCOPELEVEL + 1 THEN SETNSTATIC( LEVEL - ( PROCBL^.SCOPELEVEL + 1 ) ) ;
|
||||
43970 END;
|
||||
43980 ()-05*) ()-01*)
|
||||
43990 (**)
|
||||
44000 (**)
|
||||
44010 (*-02()
|
||||
44020 BEGIN
|
||||
44030 END ;
|
||||
44040 ()-02*)
|
||||
44050 (*+01()
|
||||
44060 BEGIN (*OF MAIN PROGRAM*)
|
||||
44070 END (*OF EVERYTHING*).
|
||||
44080 ()+01*)
|
40
lang/a68s/liba68s/routn.p
Normal file
40
lang/a68s/liba68s/routn.p
Normal file
|
@ -0,0 +1,40 @@
|
|||
44100 #include "rundecs.h"
|
||||
44110 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
44120 (**)
|
||||
44130 (**)
|
||||
44140 FUNCTION ROUTNA (PROC:PROCPOINT;ENV:IPOINT):OBJECTP;
|
||||
44150 VAR NEWRT:OBJECTP;
|
||||
44160 BEGIN
|
||||
44170 ENEW(NEWRT, ROUTINESIZE);
|
||||
44180 WITH NEWRT^ DO
|
||||
44190 BEGIN
|
||||
44200 (*-02() FIRSTWORD := SORTSHIFT * ORD(ROUTINE); ()-02*)
|
||||
44210 (*+02() PCOUNT:=0; SORT:=ROUTINE; ()+02*)
|
||||
44220 PROCBL:=PROC;
|
||||
44230 ENVCHAIN:=ENV;
|
||||
44240 SETMYSTATIC(ENV);
|
||||
44250 OSCOPE:=SCOPE+PROC^.SCOFFSET;
|
||||
44260 END;
|
||||
44270 ROUTNA:= NEWRT
|
||||
44280 END;
|
||||
44290 (**)
|
||||
44300 (**)
|
||||
44310 FUNCTION ROUTN (PROC: PROCPOINT): OBJECTP;
|
||||
44320 (* PLOADRT: CONSTRUCTS ROUTINE VALUE FOR GIVEN PROCBL;
|
||||
44330 RETURNS POINTER TO NEW ROUTINEBLOCK; KK 13.5.1977 *)
|
||||
44340 VAR I: INTEGER;
|
||||
44350 BEGIN
|
||||
44360 FOR I := LEVEL-1 DOWNTO PROC^.SCOPELEVEL DO
|
||||
44370 SETMYSTATIC( (*-05()STATIC()-05*)(*+05()A68STATIC()+05*) ( STATIC( ME ) ) );
|
||||
44380 ROUTN := ROUTNA(PROC,STATIC(ME));
|
||||
44390 END;
|
||||
44400 (**)
|
||||
44410 (**)
|
||||
44420 (*-02()
|
||||
44430 BEGIN
|
||||
44440 END ;
|
||||
44450 ()-02*)
|
||||
44460 (*+01()
|
||||
44470 BEGIN (*OF MAIN PROGRAM*)
|
||||
44480 END (*OF EVERYTHING*).
|
||||
44490 ()+01*)
|
28
lang/a68s/liba68s/routnp.p
Normal file
28
lang/a68s/liba68s/routnp.p
Normal file
|
@ -0,0 +1,28 @@
|
|||
44600 #include "rundecs.h"
|
||||
44610 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
44620 (**)
|
||||
44630 (**)
|
||||
44640 FUNCTION ROUTNP(PROC: ASPROC; NPARAMS: SIZERANGE):OBJECTP;
|
||||
44650 VAR NEWRT: OBJECTP;
|
||||
44660 BEGIN
|
||||
44670 ENEW(NEWRT, PROUTINESIZE);
|
||||
44680 WITH NEWRT^ DO
|
||||
44690 BEGIN
|
||||
44700 (*-02() FIRSTWORD := SORTSHIFT * ORD(PASCROUT); ()-02*)
|
||||
44710 (*+02() PCOUNT:=0; SORT:=PASCROUT; ()+02*)
|
||||
44720 PPROCBL := PROC;
|
||||
44730 PPARAMS := NPARAMS;
|
||||
44740 OSCOPE := 1; (*GLOBAL*)
|
||||
44750 END;
|
||||
44760 ROUTNP := NEWRT
|
||||
44770 END;
|
||||
44780 (**)
|
||||
44790 (**)
|
||||
44800 (*-02()
|
||||
44810 BEGIN
|
||||
44820 END ;
|
||||
44830 ()-02*)
|
||||
44840 (*+01()
|
||||
44850 BEGIN (*OF MAIN PROGRAM*)
|
||||
44860 END (*OF EVERYTHING*).
|
||||
44870 ()+01*)
|
44
lang/a68s/liba68s/rowm.p
Normal file
44
lang/a68s/liba68s/rowm.p
Normal file
|
@ -0,0 +1,44 @@
|
|||
44900 #include "rundecs.h"
|
||||
44910 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
44920 (**)
|
||||
44930 (**)
|
||||
44940 FUNCTION GETMULT(NEWMULT: OBJECTP): OBJECTP; EXTERN;
|
||||
44950 PROCEDURE GARBAGE (ANOBJECT: OBJECTP); EXTERN ;
|
||||
44960 FUNCTION COPYDESC(ORIGINAL: OBJECTP; NEWSORT: STRUCTYPE): OBJECTP; EXTERN ;
|
||||
44970 PROCEDURE COPYSLICE(ASLICE: OBJECTP); EXTERN ;
|
||||
44980 (**)
|
||||
44990 (**)
|
||||
45000 FUNCTION ROWM(AMULT: OBJECTP; ROWCOUNT: INTEGER): OBJECTP;
|
||||
45010 (*PROWMULT*)
|
||||
45020 VAR NEWMULT, OLDESC, NEWDESC: OBJECTP;
|
||||
45030 I: INTEGER; OLDROWS: 0..7;
|
||||
45040 BEGIN
|
||||
45050 WITH AMULT^ DO
|
||||
45060 BEGIN
|
||||
45070 IF BPTR<>NIL THEN (*A SLICE*)
|
||||
45080 COPYSLICE(AMULT);
|
||||
45090 OLDROWS := ROWS;
|
||||
45100 ROWS := ROWCOUNT-1;
|
||||
45110 NEWMULT := COPYDESC(AMULT, MULT);
|
||||
45120 NEWMULT^.PVALUE := AMULT;
|
||||
45130 NEWMULT := GETMULT(NEWMULT);
|
||||
45140 ROWS := OLDROWS;
|
||||
45150 WITH NEWMULT^ DO
|
||||
45160 BEGIN
|
||||
45170 ROWS := ROWCOUNT-1;
|
||||
45180 FOR I := OLDROWS+1 TO ROWS DO WITH DESCVEC[I] DO
|
||||
45190 BEGIN LI := 1; UI := 1; DI := PVALUE^.D0 END;
|
||||
45200 LBADJ := LBADJ+DESCVEC[ROWS].DI*(ROWS-OLDROWS);
|
||||
45210 FPINC(PVALUE^);
|
||||
45220 END;
|
||||
45230 IF FTST THEN GARBAGE(AMULT)
|
||||
45240 END;
|
||||
45250 ROWM := NEWMULT;
|
||||
45260 END;
|
||||
45270 (**)
|
||||
45280 (**)
|
||||
45290 (*-02() BEGIN END ; ()-02*)
|
||||
45300 (*+01()
|
||||
45310 BEGIN (*OF MAIN PROGRAM*)
|
||||
45320 END (*OF EVERYTHING*).
|
||||
45330 ()+01*)
|
57
lang/a68s/liba68s/rownm.p
Normal file
57
lang/a68s/liba68s/rownm.p
Normal file
|
@ -0,0 +1,57 @@
|
|||
45400 #include "rundecs.h"
|
||||
45410 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
45420 (**)
|
||||
45430 (**)
|
||||
45440 PROCEDURE GARBAGE (ANOBJECT: OBJECTP); EXTERN ;
|
||||
45450 PROCEDURE PCINCR (STRUCTPTR: UNDRESSP; TEMPLATE: DPOINT; INCREMENT: INTEGER); EXTERN ;
|
||||
45460 FUNCTION CRMULT( NEWMULT: OBJECTP ; TEMPLATE: DPOINT ) : OBJECTP ; EXTERN ;
|
||||
45470 (**)
|
||||
45480 (**)
|
||||
45490 FUNCTION ROWNM(PVAL: OBJECTP; ROWCOUNT: INTEGER; TEMPLATE: DPOINT): OBJECTP;
|
||||
45500 (*PROWNONMULT*)
|
||||
45510 (*WARNING: PVAL CAN ALSO BE AN A68INT; TROUBLE WILL ENSUE IF SZINT>SZADDR*)
|
||||
45520 VAR NEWMULT: OBJECTP;
|
||||
45530 DESCDEX: INTEGER;
|
||||
45540 PTR: UNDRESSP;
|
||||
45550 BEGIN
|
||||
45560 ENEW(NEWMULT, MULTCONST+ROWCOUNT*SZPDS);
|
||||
45570 WITH NEWMULT^ DO
|
||||
45580 BEGIN
|
||||
45590 (*-02() FIRSTWORD := SORTSHIFT * ORD(MULT); ()-02*)
|
||||
45600 (*+02() PCOUNT:=0; SORT:=MULT; ()+02*)
|
||||
45610 (*+01() SECONDWORD := 0; ()+01*)
|
||||
45620 ROWS := ROWCOUNT-1;
|
||||
45630 FOR DESCDEX := 0 TO ROWCOUNT-1 DO
|
||||
45640 WITH DESCVEC[DESCDEX] DO
|
||||
45650 BEGIN LI := 1; UI := 1 END;
|
||||
45660 IHEAD := NIL; FPTR := NIL; BPTR := NIL
|
||||
45670 END;
|
||||
45680 NEWMULT := CRMULT(NEWMULT, TEMPLATE);
|
||||
45690 PTR := INCPTR(NEWMULT^.PVALUE, ELSCONST);
|
||||
45700 IF ORD(TEMPLATE)=0 THEN (*DRESSED*)
|
||||
45710 BEGIN
|
||||
45720 PTR^.FIRSTPTR := PVAL;
|
||||
45730 WITH PVAL^ DO FINC
|
||||
45740 END
|
||||
45750 ELSE IF ORD(TEMPLATE)=1 THEN (*SIMPLE*)
|
||||
45760 PTR^.FIRSTINT := ORD(PVAL)
|
||||
45770 ELSE IF PVAL^.SORT<>UNDEF THEN
|
||||
45780 BEGIN
|
||||
45790 IF ORD(TEMPLATE)<=MAXSIZE THEN (*NOT STRUCT*)
|
||||
45800 MOVELEFT(PVAL, PTR, ORD(TEMPLATE))
|
||||
45810 ELSE (*STRUCT*)
|
||||
45820 BEGIN
|
||||
45830 MOVELEFT(INCPTR(PVAL, STRUCTCONST), PTR, TEMPLATE^[0]);
|
||||
45840 PCINCR(INCPTR(PVAL, STRUCTCONST), TEMPLATE, +INCRF)
|
||||
45850 END;
|
||||
45860 IF FPTST(PVAL^) THEN GARBAGE(PVAL)
|
||||
45870 END;
|
||||
45880 ROWNM := NEWMULT;
|
||||
45890 END;
|
||||
45900 (**)
|
||||
45910 (**)
|
||||
45920 (*-02() BEGIN END ; ()-02*)
|
||||
45930 (*+01()
|
||||
45940 BEGIN (*OF MAIN PROGRAM*)
|
||||
45950 END (*OF EVERYTHING*).
|
||||
45960 ()+01*)
|
5
lang/a68s/liba68s/run68g.p
Normal file
5
lang/a68s/liba68s/run68g.p
Normal file
|
@ -0,0 +1,5 @@
|
|||
BEGIN (*of a68*)
|
||||
END; (*of a68*)
|
||||
|
||||
BEGIN (*of m_a_i_n*)
|
||||
END. (*of everything*)
|
1801
lang/a68s/liba68s/rundecs.p
Normal file
1801
lang/a68s/liba68s/rundecs.p
Normal file
File diff suppressed because it is too large
Load diff
346
lang/a68s/liba68s/safeaccess.p
Normal file
346
lang/a68s/liba68s/safeaccess.p
Normal file
|
@ -0,0 +1,346 @@
|
|||
15000 #include "rundecs.h"
|
||||
15010 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
15020 (**)
|
||||
15030 (**)
|
||||
15040 PROCEDURE GARBAGE(ANOBJECT:OBJECTP); EXTERN;
|
||||
15050 PROCEDURE ERRORR(N: INTEGER); EXTERN;
|
||||
15060 (**)
|
||||
15070 (**)
|
||||
15080 PROCEDURE FORMPDESC(OLDESC: OBJECTP; VAR PDESC1: PDESC);
|
||||
15090 VAR N: OFFSETRANGE; I, J, K: INTEGER;
|
||||
15100 BEGIN WITH OLDESC^, PDESC1 DO
|
||||
15110 BEGIN
|
||||
15120 PSIZE := SIZE;
|
||||
15130 ACCOFFS := -ELSCONST;
|
||||
15140 J := 0;
|
||||
15150 FOR I := 0 TO ROWS DO WITH DESCVEC[I], PDESCVEC[J] DO
|
||||
15160 BEGIN
|
||||
15170 N := UI-LI+1; IF N<0 THEN N := 0;
|
||||
15180 ACCOFFS := ACCOFFS+LI*DI;
|
||||
15190 PND := DI*N;
|
||||
15200 PROWS := J;
|
||||
15210 IF PSIZE=DI THEN
|
||||
15220 BEGIN PSIZE := PND; PD := PSIZE END
|
||||
15230 ELSE
|
||||
15240 BEGIN J := J+1; PD := DI END;
|
||||
15250 PL := ELSCONST-LBADJ+ACCOFFS+PND;
|
||||
15260 PP := PL;
|
||||
15270 FOR K := PROWS-1 DOWNTO 0 DO WITH PDESCVEC[K] DO
|
||||
15280 BEGIN PL := PL+LI*DI; PP := PL END;
|
||||
15290 END;
|
||||
15300 WITH PDESCVEC[PROWS] DO PP := PL-PND-PD
|
||||
15310 END
|
||||
15320 END;
|
||||
15330 (**)
|
||||
15340 (**)
|
||||
15350 FUNCTION NEXTEL(I: INTEGER; VAR PDESC1: PDESC): BOOLEAN;
|
||||
15360 BEGIN WITH PDESC1 DO WITH PDESCVEC[I] DO
|
||||
15370 BEGIN
|
||||
15380 PP := PP+PD;
|
||||
15390 IF PP<PL THEN
|
||||
15400 BEGIN
|
||||
15410 NEXTEL := TRUE
|
||||
15420 END
|
||||
15430 ELSE IF I<PROWS THEN
|
||||
15440 IF NEXTEL(I+1, PDESC1) THEN
|
||||
15450 BEGIN
|
||||
15460 PP := PDESCVEC[I+1].PP;
|
||||
15470 PL := PP+PND;
|
||||
15480 NEXTEL := TRUE
|
||||
15490 END
|
||||
15500 ELSE NEXTEL := FALSE
|
||||
15510 ELSE
|
||||
15520 BEGIN
|
||||
15530 NEXTEL := FALSE;
|
||||
15540 PP := PL-PND-PD
|
||||
15550 END
|
||||
15560 END
|
||||
15570 END;
|
||||
15580 (**)
|
||||
15590 (**)
|
||||
15600 PROCEDURE PCINCR(STRUCTPTR: UNDRESSP; TEMPLATE: DPOINT; INCREMENT: INTEGER);
|
||||
15610 VAR TEMPOS, STRUCTPOS: INTEGER;
|
||||
15620 PTR: UNDRESSP;
|
||||
15630 BEGIN
|
||||
15640 TEMPOS:= 1;
|
||||
15650 STRUCTPOS:= TEMPLATE^[1];
|
||||
15660 WHILE STRUCTPOS >= 0
|
||||
15670 DO BEGIN
|
||||
15680 PTR := INCPTR(STRUCTPTR, STRUCTPOS);
|
||||
15690 WITH PTR^ DO
|
||||
15700 BEGIN
|
||||
15710 FINCD(FIRSTPTR^,INCREMENT);
|
||||
15720 IF FPTST(FIRSTPTR^) THEN GARBAGE(FIRSTPTR);
|
||||
15730 END;
|
||||
15740 TEMPOS:= TEMPOS+1;
|
||||
15750 STRUCTPOS:= TEMPLATE^[TEMPOS];
|
||||
15760 END;
|
||||
15770 END;
|
||||
15780 (**)
|
||||
15790 (**)
|
||||
15800 PROCEDURE PCINCRMULT(ELSPTR:OBJECTP; INCREMENT: INTEGER);
|
||||
15810 VAR TEMPLATE: DPOINT;
|
||||
15820 COUNT, ELSIZE: INTEGER;
|
||||
15830 PTR: UNDRESSP;
|
||||
15840 BEGIN
|
||||
15850 TEMPLATE:= ELSPTR^.DBLOCK;
|
||||
15860 IF ORD(TEMPLATE)<=MAXSIZE (*NOT STRUCT*)
|
||||
15870 THEN
|
||||
15880 IF ORD(TEMPLATE)=0 (*DRESSED*)
|
||||
15890 THEN
|
||||
15900 BEGIN
|
||||
15910 PTR := INCPTR(ELSPTR, ELSCONST);
|
||||
15920 WHILE ORD(PTR)<ORD(ELSPTR)+ELSCONST+ELSPTR^.D0 DO WITH PTR^ DO
|
||||
15930 BEGIN
|
||||
15940 FINCD(FIRSTPTR^,INCREMENT);
|
||||
15950 IF FPTST(FIRSTPTR^) THEN GARBAGE(FIRSTPTR);
|
||||
15960 PTR := INCPTR(PTR, SZADDR);
|
||||
15970 END
|
||||
15980 END
|
||||
15990 ELSE (*NO ACTION*)
|
||||
16000 ELSE BEGIN (*STRUCT*)
|
||||
16010 ELSIZE:= TEMPLATE^[0];
|
||||
16020 IF TEMPLATE^[1]>0
|
||||
16030 THEN BEGIN
|
||||
16040 COUNT := ELSPTR^.D0-ELSIZE;
|
||||
16050 PTR := INCPTR(ELSPTR, ELSCONST);
|
||||
16060 WHILE COUNT >= 0
|
||||
16070 DO BEGIN
|
||||
16080 PCINCR(PTR, TEMPLATE, INCREMENT);
|
||||
16090 PTR := INCPTR(PTR, ELSIZE);
|
||||
16100 COUNT:= COUNT-ELSIZE
|
||||
16110 END;
|
||||
16120 END;
|
||||
16130 END;
|
||||
16140 END;
|
||||
16150 (**)
|
||||
16160 (**)
|
||||
16170 PROCEDURE COPYSLICE(ASLICE: OBJECTP);
|
||||
16180 VAR NEWSLICE, OLDELS, NEWELS: OBJECTP;
|
||||
16190 COUNT, SIZEACC, OFFACC: INTEGER;
|
||||
16200 PDESC1: PDESC;
|
||||
16210 OLDESCVEC: ARRAY [0..7] OF PDS;
|
||||
16220 OLDLBADJ: BOUNDSRANGE;
|
||||
16230 OLDROWS: 0..7;
|
||||
16240 PROCEDURE CSSUPP(ASLICE: OBJECTP);
|
||||
16250 VAR LSLICEADJ, COUNT, NCOUNT, NEWDI, ACCOFFS, ACCADJ: INTEGER;
|
||||
16260 BEGIN
|
||||
16270 WITH ASLICE^ DO
|
||||
16280 BEGIN
|
||||
16290 FPDEC(PVALUE^);
|
||||
16300 IF FPTST(PVALUE^) THEN GARBAGE(PVALUE);
|
||||
16310 PVALUE := NEWELS;
|
||||
16320 FPINC(NEWELS^);
|
||||
16330 ASLICE := IHEAD;
|
||||
16340 END;
|
||||
16350 WHILE ASLICE<>NIL DO WITH ASLICE^ DO
|
||||
16360 BEGIN
|
||||
16370 ACCOFFS := -ELSCONST;
|
||||
16380 FOR COUNT := 0 TO ROWS DO WITH DESCVEC[COUNT] DO
|
||||
16390 ACCOFFS := ACCOFFS+LI*DI;
|
||||
16400 LSLICEADJ := ACCOFFS-LBADJ-PDESC1.ACCOFFS+OLDLBADJ;
|
||||
16410 ACCADJ := 0;
|
||||
16420 NCOUNT := ROWS;
|
||||
16430 FOR COUNT := OLDROWS DOWNTO 0 DO WITH OLDESCVEC[COUNT] DO
|
||||
16440 BEGIN
|
||||
16450 NEWDI := NEWSLICE^.DESCVEC[COUNT].DI;
|
||||
16460 ACCADJ := ACCADJ+(LSLICEADJ DIV DI)*NEWDI;
|
||||
16470 LSLICEADJ := LSLICEADJ MOD DI;
|
||||
16480 IF NCOUNT>=0 THEN
|
||||
16490 IF DESCVEC[NCOUNT].DI=DI THEN WITH DESCVEC[NCOUNT] DO
|
||||
16500 BEGIN
|
||||
16510 ACCOFFS := ACCOFFS+LI*(NEWDI-DI);
|
||||
16520 DI := NEWDI;
|
||||
16530 NCOUNT := NCOUNT-1
|
||||
16540 END;
|
||||
16550 END;
|
||||
16560 LBADJ := ACCOFFS-ACCADJ;
|
||||
16570 CSSUPP(ASLICE);
|
||||
16580 ASLICE := FPTR;
|
||||
16590 END
|
||||
16600 END;
|
||||
16610 (**)
|
||||
16620 BEGIN (*COPYSLICE*)
|
||||
16630 FORMPDESC(ASLICE, PDESC1);
|
||||
16640 WITH ASLICE^ DO
|
||||
16650 BEGIN
|
||||
16660 OLDELS := PVALUE;
|
||||
16670 OLDLBADJ := LBADJ;
|
||||
16680 OLDROWS := ROWS;
|
||||
16690 SIZEACC:= SIZE;
|
||||
16700 OFFACC:= -ELSCONST;
|
||||
16710 FOR COUNT := 0 TO ROWS DO
|
||||
16720 BEGIN
|
||||
16730 OLDESCVEC[COUNT] := DESCVEC[COUNT];
|
||||
16740 WITH DESCVEC[COUNT] DO
|
||||
16750 BEGIN
|
||||
16760 DI:= SIZEACC;
|
||||
16770 SIZEACC := OFFACC+SIZEACC*LI;
|
||||
16780 OFFACC:= SIZEACC;
|
||||
16790 SIZEACC:= UI-LI;
|
||||
16800 IF SIZEACC < 0
|
||||
16810 THEN SIZEACC:= 0
|
||||
16820 ELSE SIZEACC:= SIZEACC+1;
|
||||
16830 SIZEACC:= SIZEACC*DI;
|
||||
16840 END;
|
||||
16850 END;
|
||||
16860 LBADJ := OFFACC;
|
||||
16870 ENEW(NEWELS, SIZEACC+ELSCONST);
|
||||
16880 WITH NEWELS^ DO
|
||||
16890 BEGIN
|
||||
16900 (*-02() FIRSTWORD := SORTSHIFT*ORD(IELS); ()-02*)
|
||||
16910 (*+02() PCOUNT:=0; SORT:=IELS; ()+02*)
|
||||
16920 OSCOPE := 0;
|
||||
16930 D0 := SIZEACC;
|
||||
16940 CCOUNT:= 1;
|
||||
16950 DBLOCK:= OLDELS^.DBLOCK;
|
||||
16960 IHEAD := NIL;
|
||||
16970 END;
|
||||
16980 IF ASLICE=BPTR^.IHEAD THEN
|
||||
16990 BEGIN
|
||||
17000 BPTR^.IHEAD:= FPTR;
|
||||
17010 IF FPTR=NIL THEN
|
||||
17020 BEGIN FPDEC(BPTR^); IF FPTST(BPTR^) THEN GARBAGE(BPTR) END
|
||||
17030 END
|
||||
17040 ELSE BPTR^.FPTR := FPTR;
|
||||
17050 IF FPTR<>NIL THEN
|
||||
17060 BEGIN FPTR^.BPTR := BPTR; FPTR := NIL END;
|
||||
17070 BPTR:= NIL;
|
||||
17080 END;
|
||||
17090 COUNT := ELSCONST;
|
||||
17100 WHILE NEXTEL(0, PDESC1) DO WITH PDESC1 DO WITH PDESCVEC[0] DO
|
||||
17110 BEGIN
|
||||
17120 MOVELEFT(INCPTR(OLDELS, PP), INCPTR(NEWELS, COUNT), PSIZE);
|
||||
17130 COUNT := COUNT+PSIZE;
|
||||
17140 END;
|
||||
17150 PCINCRMULT(NEWELS, +INCRF);
|
||||
17160 NEWSLICE := ASLICE;
|
||||
17170 CSSUPP(ASLICE);
|
||||
17180 END;
|
||||
17190 (**)
|
||||
17200 (**)
|
||||
17210 PROCEDURE TESTCC(TARGET: OBJECTP);
|
||||
17220 LABEL 0000;
|
||||
17230 VAR DESTREF, LDESC, HEAD, NEWMULT, NEWELS: OBJECTP;
|
||||
17240 I, CREATIONC, ELSIZE, ACCOFF, LACOFFSET, LACOFF2: INTEGER;
|
||||
17250 BEGIN
|
||||
17260 WITH TARGET^.ANCESTOR^ DO
|
||||
17270 IF PVALUE^.PCOUNT-ORD(PVALUE^.IHEAD<>NIL)>1 THEN
|
||||
17280 BEGIN
|
||||
17290 (* PCOUNT > 1 FOR OTHERS BESIDES IHEAD *)
|
||||
17300 WITH PVALUE^ DO BEGIN
|
||||
17310 FDEC;
|
||||
17320 ENEW(NEWELS, D0+ELSCONST)
|
||||
17330 END;
|
||||
17340 MOVELEFT(PVALUE, NEWELS, PVALUE^.D0+ELSCONST);
|
||||
17350 PCINCRMULT(PVALUE, +INCRF);
|
||||
17360 PVALUE:= NEWELS;
|
||||
17370 NEWELS^.PCOUNT := 1; (* SORT ALREADY SET*)
|
||||
17380 NEWELS^.IHEAD := NIL;
|
||||
17390 CCOUNT := NEWELS^.CCOUNT
|
||||
17400 END
|
||||
17410 ELSE
|
||||
17420 BEGIN
|
||||
17430 NEWELS := PVALUE;
|
||||
17440 CREATIONC := NEWELS^.CCOUNT;
|
||||
17450 DESTREF := TARGET;
|
||||
17460 IF CREATIONC=TARGET^.CCOUNT THEN GOTO 0000; (*EXIT*)
|
||||
17470 WITH DESTREF^ DO
|
||||
17480 IF SORT=REFSL1 THEN
|
||||
17490 BEGIN
|
||||
17500 ELSIZE := TARGET^.ANCESTOR^.SIZE; ACCOFF := ELSIZE+OFFSET;
|
||||
17510 END
|
||||
17520 ELSE
|
||||
17530 BEGIN
|
||||
17540 ELSIZE := PVALUE^.D0;
|
||||
17550 ACCOFF := ELSIZE-LBADJ;
|
||||
17560 FOR I := 0 TO ROWS DO WITH DESCVEC[I] DO
|
||||
17570 ACCOFF := ACCOFF+LI*DI;
|
||||
17580 (*ACCOFF = DIST FROM START OF ELEMENTS TO 1ST EL BEYOND THIS SLICE*)
|
||||
17590 END;
|
||||
17600 (*SLCOPY*)
|
||||
17610 HEAD := NEWELS^.IHEAD;
|
||||
17620 WHILE HEAD <> NIL DO WITH HEAD^ DO
|
||||
17630 BEGIN
|
||||
17640 LACOFFSET := -LBADJ-ACCOFF;
|
||||
17650 FOR I := 0 TO ROWS DO WITH DESCVEC[I] DO
|
||||
17660 LACOFFSET := LACOFFSET+LI*DI;
|
||||
17670 (*DIST FROM BEYOND LAST EL OF DESTREF TO 1ST EL OF HEAD*)
|
||||
17680 WITH DESCVEC[ROWS] DO
|
||||
17690 IF UI < LI THEN
|
||||
17700 I:= 0
|
||||
17710 ELSE I := (UI-LI+1)*DI;
|
||||
17720 LACOFF2 := I+LACOFFSET+ELSIZE;
|
||||
17730 (*DIST FROM 1ST EL OF DESTREF TO BEYOND LAST EL OF HEAD*)
|
||||
17740 IF (LACOFFSET>=0) OR (LACOFF2<=0) THEN
|
||||
17750 HEAD := FPTR
|
||||
17760 ELSE BEGIN
|
||||
17770 COPYSLICE(HEAD);
|
||||
17780 HEAD := NEWELS^.IHEAD;
|
||||
17790 END;
|
||||
17800 END;
|
||||
17810 0000:IF CREATIONC<>0 THEN DESTREF^.CCOUNT := CREATIONC
|
||||
17820 END
|
||||
17830 END;
|
||||
17840 (**)
|
||||
17850 (**)
|
||||
17860 PROCEDURE TESTSS (REFSTRUCT: OBJECTP);
|
||||
17870 (*ASSERT ITS PCOUNT > 1*)
|
||||
17880 VAR OBJSIZE: INTEGER;
|
||||
17890 TEMPLATE: DPOINT;
|
||||
17900 NEWSTRUCT: OBJECTP;
|
||||
17910 BEGIN
|
||||
17920 WITH REFSTRUCT^ DO
|
||||
17930 BEGIN
|
||||
17940 FPDEC(PVALUE^);
|
||||
17950 TEMPLATE := PVALUE^.DBLOCK;
|
||||
17960 OBJSIZE := TEMPLATE^[0];
|
||||
17970 ENEW(NEWSTRUCT, OBJSIZE+STRUCTCONST);
|
||||
17980 MOVELEFT(INCPTR(PVALUE, STRUCTCONST), INCPTR(NEWSTRUCT, STRUCTCONST), OBJSIZE);
|
||||
17990 PCINCR(INCPTR(PVALUE, STRUCTCONST), TEMPLATE, +INCRF);
|
||||
18000 WITH NEWSTRUCT^ DO
|
||||
18010 BEGIN
|
||||
18020 (*-02() FIRSTWORD := SORTSHIFT*ORD(STRUCT); ()-02*)
|
||||
18030 (*+02() SORT:=STRUCT; ()+02*)
|
||||
18040 PCOUNT := 1;
|
||||
18050 LENGTH := REFSTRUCT^.PVALUE^.LENGTH;
|
||||
18060 DBLOCK:= TEMPLATE
|
||||
18070 END;
|
||||
18080 PVALUE:= NEWSTRUCT
|
||||
18090 END
|
||||
18100 END;
|
||||
18110 (**)
|
||||
18120 (**)
|
||||
18130 FUNCTION SAFEACCESS(LOCATION: OBJECTP): UNDRESSP;
|
||||
18140 (* RETURNS A POINTER TO THE REAL PART OF THE STRUCTURE *)
|
||||
18150 BEGIN
|
||||
18160 WITH LOCATION^.ANCESTOR^ DO
|
||||
18170 IF FPTWO(PVALUE^) THEN
|
||||
18180 CASE SORT OF
|
||||
18190 REF1: SAFEACCESS := INCPTR(LOCATION,REF1SIZE-SZINT);
|
||||
18200 (*-01() REF2: SAFEACCESS := INCPTR(LOCATION,REF2SIZE-SZLONG); ()-01*)
|
||||
18210 CREF: SAFEACCESS := IPTR;
|
||||
18220 REFR, RECR, RECN, REFN:
|
||||
18230 BEGIN
|
||||
18240 IF SORT IN [REFR, RECR] THEN
|
||||
18250 TESTCC(LOCATION)
|
||||
18260 ELSE
|
||||
18270 TESTSS(ANCESTOR);
|
||||
18280 PVALUE^.OSCOPE := 0;
|
||||
18290 SAFEACCESS := INCPTR(PVALUE, LOCATION^.OFFSET)
|
||||
18300 END;
|
||||
18310 UNDEF: ERRORR(RASSIG);
|
||||
18320 NILL: ERRORR(RASSIGNIL)
|
||||
18330 END
|
||||
18340 ELSE BEGIN
|
||||
18350 PVALUE^.OSCOPE := 0;
|
||||
18360 SAFEACCESS := INCPTR(PVALUE,LOCATION^.OFFSET)
|
||||
18370 END
|
||||
18380 END;
|
||||
18390 (**)
|
||||
18400 (**)
|
||||
18410 (*-02() BEGIN END ; ()-02*)
|
||||
18420 (*+01()
|
||||
18430 BEGIN (*OF MAIN PROGRAM*)
|
||||
18440 END (*OF EVERYTHING*).
|
||||
18450 ()+01*)
|
32
lang/a68s/liba68s/scopext.p
Normal file
32
lang/a68s/liba68s/scopext.p
Normal file
|
@ -0,0 +1,32 @@
|
|||
46000 #include "rundecs.h"
|
||||
46010 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
46020 (**)
|
||||
46030 (**)
|
||||
46040 FUNCTION STRUCTSCOPE(STRUCTPTR: UNDRESSP; TEMPLATE: DPOINT):DEPTHRANGE; EXTERN;
|
||||
46050 FUNCTION MULTSCOPE(MULT: OBJECTP):DEPTHRANGE; EXTERN;
|
||||
46060 PROCEDURE ERRORR(N :INTEGER); EXTERN ;
|
||||
46070 (**)
|
||||
46080 (**)
|
||||
46090 FUNCTION SCOPEXT(SOURCE: OBJECTP): OBJECTP;
|
||||
46100 (*PSCOPEEXT*)
|
||||
46110 VAR SOURCESCOPE: DEPTHRANGE;
|
||||
46120 BEGIN
|
||||
46130 WITH SOURCE^ DO
|
||||
46140 IF OSCOPE=0 THEN
|
||||
46150 IF SORT=STRUCT THEN
|
||||
46160 BEGIN
|
||||
46170 SOURCESCOPE := STRUCTSCOPE(INCPTR(SOURCE, STRUCTCONST), DBLOCK);
|
||||
46180 OSCOPE := SOURCESCOPE
|
||||
46190 END
|
||||
46200 ELSE SOURCESCOPE := MULTSCOPE(SOURCE)
|
||||
46210 ELSE SOURCESCOPE := OSCOPE;
|
||||
46220 IF SCOPE+FIRSTRG.RIBOFFSET^.RGSCOPE<=SOURCESCOPE THEN ERRORR(RSCOPE);
|
||||
46230 SCOPEXT := SOURCE;
|
||||
46240 END;
|
||||
46250 (**)
|
||||
46260 (**)
|
||||
46270 (*-02() BEGIN END ; ()-02*)
|
||||
46280 (*+01()
|
||||
46290 BEGIN (*OF MAIN PROGRAM*)
|
||||
46300 END (*OF EVERYTHING*).
|
||||
46310 ()+01*)
|
42
lang/a68s/liba68s/selectr.p
Normal file
42
lang/a68s/liba68s/selectr.p
Normal file
|
@ -0,0 +1,42 @@
|
|||
46400 #include "rundecs.h"
|
||||
46410 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
46420 (**)
|
||||
46430 (**)
|
||||
46440 FUNCTION COPYDESC(ORIGINAL: OBJECTP; NEWSORT: STRUCTYPE): OBJECTP; EXTERN;
|
||||
46450 FUNCTION GETMULT(NEWMULT: OBJECTP): OBJECTP; EXTERN;
|
||||
46460 FUNCTION GETSLN(NEWREFSLN:OBJECTP): OBJECTP; EXTERN;
|
||||
46470 (**)
|
||||
46480 (**)
|
||||
46490 FUNCTION SELECTR(AROWED: OBJECTP; TEMPLATE: DPOINT; ROFFSET: INTEGER): OBJECTP;
|
||||
46500 (*PSELECTROW*)
|
||||
46510 VAR ADESC: OBJECTP;
|
||||
46520 BEGIN
|
||||
46530 WITH AROWED^ DO
|
||||
46540 IF SORT=MULT THEN
|
||||
46550 BEGIN
|
||||
46560 ADESC := COPYDESC(AROWED, MULT);
|
||||
46570 ADESC^.PVALUE := AROWED;
|
||||
46580 SELECTR := GETMULT(ADESC);
|
||||
46590 END
|
||||
46600 ELSE
|
||||
46610 BEGIN
|
||||
46620 ADESC := COPYDESC(AROWED, REFSLN);
|
||||
46630 ADESC^.PVALUE := AROWED;
|
||||
46640 SELECTR := GETSLN(ADESC);
|
||||
46650 END;
|
||||
46660 WITH ADESC^ DO
|
||||
46670 BEGIN
|
||||
46680 MDBLOCK := TEMPLATE;
|
||||
46690 IF ORD(TEMPLATE)=0 (*DRESSED*) THEN SIZE := 1
|
||||
46700 ELSE IF ORD(TEMPLATE)<=MAXSIZE (*UNDRESSED*) THEN SIZE := ORD(TEMPLATE)
|
||||
46710 ELSE (*STRUCT*) SIZE := TEMPLATE^[0];
|
||||
46720 LBADJ := LBADJ-ROFFSET;
|
||||
46730 END
|
||||
46740 END;
|
||||
46750 (**)
|
||||
46760 (**)
|
||||
46770 (*-02() BEGIN END ; ()-02*)
|
||||
46780 (*+01()
|
||||
46790 BEGIN (*OF MAIN PROGRAM*)
|
||||
46800 END (*OF EVERYTHING*).
|
||||
46810 ()+01*)
|
44
lang/a68s/liba68s/selecttsn.p
Normal file
44
lang/a68s/liba68s/selecttsn.p
Normal file
|
@ -0,0 +1,44 @@
|
|||
46900 #include "rundecs.h"
|
||||
46910 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
46920 (**)
|
||||
46930 (**)
|
||||
46940 (*-01() (*-05()
|
||||
46950 FUNCTION SELECTT(PRIMARY: OBJECTP; STRUCTOFF: INTEGER): ASNAKED;
|
||||
46960 (*PSELECT*)
|
||||
46970 VAR TEMP: NAKEGER;
|
||||
46980 BEGIN
|
||||
46990 WITH TEMP, NAK DO
|
||||
47000 BEGIN
|
||||
47010 (*+11() ASNAK := 0; (*TO ENSURE THAT BIT IS CLEAR*) ()+11*)
|
||||
47020 STOWEDVAL := PRIMARY;
|
||||
47030 POSITION := STRUCTOFF+PRIMARY^.OFFSET;
|
||||
47040 SELECTT := ASNAK
|
||||
47050 END
|
||||
47060 END;
|
||||
47070 (**)
|
||||
47080 (**)
|
||||
47090 FUNCTION SELECTS(PRIMARY: OBJECTP; STRUCTOFF: INTEGER): ASNAKED;
|
||||
47100 VAR TEMP: NAKEGER;
|
||||
47110 BEGIN
|
||||
47120 WITH TEMP, NAK DO
|
||||
47130 BEGIN
|
||||
47140 (*+11() ASNAK := 0; ()+11*) (* TO ENSURE THAT BIT IS CLEAR *)
|
||||
47150 STOWEDVAL := PRIMARY;
|
||||
47160 POSITION := STRUCTOFF+STRUCTCONST;
|
||||
47170 SELECTS := ASNAK
|
||||
47180 END
|
||||
47190 END;
|
||||
47200 (**)
|
||||
47210 (**)
|
||||
47220 FUNCTION SELECTN(TEMP: NAKEGER; STRUCTOFF: INTEGER): ASNAKED;
|
||||
47230 BEGIN WITH TEMP DO
|
||||
47240 BEGIN NAK.POSITION := NAK.POSITION+STRUCTOFF; SELECTN := ASNAK END;
|
||||
47250 END;
|
||||
47260 ()-05*) ()-01*)
|
||||
47270 (**)
|
||||
47280 (**)
|
||||
47290 (*-02() BEGIN END ; ()-02*)
|
||||
47300 (*+01()
|
||||
47310 BEGIN (*OF MAIN PROGRAM*)
|
||||
47320 END (*OF EVERYTHING*).
|
||||
47330 ()+01*)
|
23
lang/a68s/liba68s/setcc.p
Normal file
23
lang/a68s/liba68s/setcc.p
Normal file
|
@ -0,0 +1,23 @@
|
|||
47400 #include "rundecs.h"
|
||||
47410 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
47420 (**)
|
||||
47430 (**)
|
||||
47440 FUNCTION SETCC(POINT: OBJECTP): OBJECTP;
|
||||
47450 (*PCREATEREF+4*)
|
||||
47460 (*A POSSIBLE PROCESS PARAMETER FOR DCL*)
|
||||
47470 BEGIN
|
||||
47480 WITH POINT^ DO
|
||||
47490 IF (SORT=REFSL1) OR (SORT=REFSLN) THEN
|
||||
47500 CCOUNT := 1; (*SET CCOUNT FOR OVERLAP SEARCH*)
|
||||
47510 SETCC := POINT;
|
||||
47520 END;
|
||||
47530 (**)
|
||||
47540 (**)
|
||||
47550 (*-02()
|
||||
47560 BEGIN
|
||||
47570 END ;
|
||||
47580 ()-02*)
|
||||
47590 (*+01()
|
||||
47600 BEGIN (*OF MAIN PROGRAM*)
|
||||
47610 END (*OF EVERYTHING*).
|
||||
47620 ()+01*)
|
37
lang/a68s/liba68s/sett.p
Normal file
37
lang/a68s/liba68s/sett.p
Normal file
|
@ -0,0 +1,37 @@
|
|||
88500 #include "rundecs.h"
|
||||
88510 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
88520 (**)
|
||||
88530 PROCEDURE GARBAGE (ANOBJECT: OBJECTP); EXTERN ;
|
||||
88540 PROCEDURE ERRORR(N :INTEGER); EXTERN ;
|
||||
88550 PROCEDURE CLPASC5(P1,P2 :IPOINT; P3,P4 :INTEGER; P5 :IPOINT; PROC: ASPROC); EXTERN;
|
||||
88560 PROCEDURE TESTF(RF:OBJECTP;VAR F:OBJECTP); EXTERN;
|
||||
88570 (**)
|
||||
88580 (**)
|
||||
88590 (*+01() (*$X6*) ()+01*)
|
||||
88600 PROCEDURE SETT(RF: OBJECTP; P, L, C: INTEGER);
|
||||
88610 VAR F: OBJECTP;
|
||||
88620 BEGIN
|
||||
88630 TESTF(RF, F);
|
||||
88640 WITH F^.PCOVER^ DO
|
||||
88650 IF OPENED IN STATUS THEN
|
||||
88660 IF (P<1) OR (L<1) OR (C<1) THEN ERRORR(POSMIN)
|
||||
88670 ELSE IF (P>PAGEBOUND+1) OR (L>LINEBOUND+1) OR (C>CHARBOUND+1) THEN ERRORR(POSMAX)
|
||||
88680 ELSE IF SETPOSS IN POSSIBLES THEN
|
||||
88690 CLPASC5(ORD(F^.PCOVER), P, L, C, ORD(BOOK), DOSET)
|
||||
88700 ELSE ERRORR(NOSET)
|
||||
88710 ELSE ERRORR(NOTOPEN);
|
||||
88720 IF FPTST(RF^) THEN GARBAGE(RF);
|
||||
88730 END;
|
||||
88740 (**)
|
||||
88750 (**)
|
||||
88760 (*+01() (*$X4*) ()+01*)
|
||||
88770 (**)
|
||||
88780 (**)
|
||||
88790 (*-02()
|
||||
88800 BEGIN (*OF A68*)
|
||||
88810 END; (*OF A68*)
|
||||
88820 ()-02*)
|
||||
88830 (*+01()
|
||||
88840 BEGIN (*OF MAIN PROGRAM*)
|
||||
88850 END (* OF EVERYTHING *).
|
||||
88860 ()+01*)
|
4
lang/a68s/liba68s/shl.c
Normal file
4
lang/a68s/liba68s/shl.c
Normal file
|
@ -0,0 +1,4 @@
|
|||
SHL(statlink, n , a)
|
||||
int *statlink ;
|
||||
unsigned a ;
|
||||
{ return( n < 0 ? ( - n >= 32 ? 0 : a >> - n ) : n >= 32 ? 0 : a << n ) ; }
|
4
lang/a68s/liba68s/shr.c
Normal file
4
lang/a68s/liba68s/shr.c
Normal file
|
@ -0,0 +1,4 @@
|
|||
SHR(statlink, n , a)
|
||||
int *statlink ;
|
||||
unsigned a ;
|
||||
{ return( n < 0 ? ( - n >= 32 ? 0 : a << - n ) : n >= 32 ? 0 : a >> n ) ; }
|
4
lang/a68s/liba68s/signi.c
Normal file
4
lang/a68s/liba68s/signi.c
Normal file
|
@ -0,0 +1,4 @@
|
|||
SIGNI(statlink, n)
|
||||
int *statlink ;
|
||||
int n ;
|
||||
{ return( n < 0 ? - 1 : n == 0 ? 0 : 1 ) ; }
|
4
lang/a68s/liba68s/signr.c
Normal file
4
lang/a68s/liba68s/signr.c
Normal file
|
@ -0,0 +1,4 @@
|
|||
SIGNR(statlink, n)
|
||||
int *statlink ;
|
||||
register double n ;
|
||||
{ return( n < 0.0 ? - 1 : n == 0.0 ? 0 : 1 ) ; }
|
4
lang/a68s/liba68s/sin.c
Normal file
4
lang/a68s/liba68s/sin.c
Normal file
|
@ -0,0 +1,4 @@
|
|||
extern double _sin();
|
||||
double SIN(statlink, x)
|
||||
int *statlink; double x;
|
||||
{return(_sin(x));}
|
57
lang/a68s/liba68s/skip.p
Normal file
57
lang/a68s/liba68s/skip.p
Normal file
|
@ -0,0 +1,57 @@
|
|||
47700 #include "rundecs.h"
|
||||
47710 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
47720 (**)
|
||||
47730 (**)
|
||||
47740 PROCEDURE GARBAGE(ANOBJECT: OBJECTP); EXTERN ;
|
||||
47750 FUNCTION CRSTRUCT(TEMPLATE: DPOINT): OBJECTP; EXTERN;
|
||||
47760 (**)
|
||||
47770 (**)
|
||||
47780 FUNCTION SKIPS: INTEGER;
|
||||
47790 (*PSKIP*)
|
||||
47800 BEGIN SKIPS := INTUNDEF END;
|
||||
47810 (**)
|
||||
47820 (*-01()
|
||||
47830 FUNCTION SKIPS2: A68LONG ;
|
||||
47840 VAR TEMP: REALTEGER ;
|
||||
47850 BEGIN
|
||||
47860 WITH TEMP DO
|
||||
47870 BEGIN
|
||||
47880 INT := INTUNDEF ;
|
||||
47890 INT2 := INTUNDEF ;
|
||||
47900 SKIPS2 := LONG
|
||||
47910 END
|
||||
47920 END ;
|
||||
47930 ()-01*)
|
||||
47940 (**)
|
||||
47950 FUNCTION SKIPPIL: OBJECTP;
|
||||
47960 (*PSKIP+1*)
|
||||
47970 BEGIN SKIPPIL := UNDEFIN END;
|
||||
47980 (**)
|
||||
47990 (**)
|
||||
48000 FUNCTION SKIPSTR (TEMPLATE: DPOINT):OBJECTP;
|
||||
48010 (*PSKIPSTRUCT*)
|
||||
48020 BEGIN SKIPSTR := CRSTRUCT(TEMPLATE) END;
|
||||
48030 (**)
|
||||
48040 (**)
|
||||
48050 FUNCTION NILP: OBJECTP;
|
||||
48060 (*PNIL*)
|
||||
48070 BEGIN NILP := NILPTR END;
|
||||
48080 (**)
|
||||
48090 (**)
|
||||
48100 (*-01() (*-05()
|
||||
48110 PROCEDURE VOID(POINT: OBJECTP);
|
||||
48120 (*PVOIDNORMAL - USUALLY CODED INLINE*)
|
||||
48130 BEGIN IF FPTST(POINT^) THEN GARBAGE(POINT) END;
|
||||
48140 (**)
|
||||
48150 (**)
|
||||
48160 PROCEDURE VOIDN(NAK: NAKED);
|
||||
48170 (*PVOIDNAKED - USUALLY CODED INLINE*)
|
||||
48180 BEGIN IF FPTST(NAK.STOWEDVAL^) THEN GARBAGE(NAK.STOWEDVAL) END;
|
||||
48190 ()-05*) ()-01*)
|
||||
48200 (**)
|
||||
48210 (**)
|
||||
48220 (*-02() BEGIN END ; ()-02*)
|
||||
48230 (*+01()
|
||||
48240 BEGIN (*OF MAIN PROGRAM*)
|
||||
48250 END (*OF EVERYTHING*).
|
||||
48260 ()+01*)
|
67
lang/a68s/liba68s/slice12.p
Normal file
67
lang/a68s/liba68s/slice12.p
Normal file
|
@ -0,0 +1,67 @@
|
|||
48300 #include "rundecs.h"
|
||||
48310 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
48320 (**)
|
||||
48330 (**)
|
||||
48340 PROCEDURE ERRORR(N :INTEGER); EXTERN;
|
||||
48350 (**)
|
||||
48360 (**)
|
||||
48370 PROCEDURE SLCMN(STOWEDVAL: OBJECTP; INDEX, SLICDEX: INTEGER);
|
||||
48380 BEGIN
|
||||
48390 WITH STOWEDVAL^ DO CASE SORT OF
|
||||
48400 MULT, REFSLN, REFR, RECR:
|
||||
48410 WITH DESCVEC[SLICDEX] DO
|
||||
48420 BEGIN
|
||||
48430 IF INDEX<LI THEN ERRORR(RSL1ERROR);
|
||||
48440 IF INDEX>UI THEN ERRORR(RSL2ERROR);
|
||||
48450 END;
|
||||
48460 UNDEF: ERRORR(RSLICE);
|
||||
48470 NILL: ERRORR(RSLICENIL);
|
||||
48480 END
|
||||
48490 END;
|
||||
48500 (**)
|
||||
48510 (**)
|
||||
48520 (*-01() (*-05()
|
||||
48530 FUNCTION SLICE1(PRIMARY: OBJECTP; INDEX: BOUNDSRANGE): ASNAKED;
|
||||
48540 (*PSLICE1*)
|
||||
48550 VAR TEMP: NAKEGER;
|
||||
48560 BEGIN
|
||||
48570 WITH TEMP DO WITH NAK DO
|
||||
48580 BEGIN
|
||||
48590 STOWEDVAL := PRIMARY;
|
||||
48600 WITH PRIMARY^ DO WITH DESCVEC[0] DO
|
||||
48610 IF (INDEX<LI) OR (INDEX>UI) THEN SLCMN(STOWEDVAL, INDEX, 0)
|
||||
48620 ELSE POSITION := DI*INDEX-LBADJ;
|
||||
48630 SLICE1 := ASNAK;
|
||||
48640 END;
|
||||
48650 END;
|
||||
48660 (**)
|
||||
48670 (**)
|
||||
48680 FUNCTION SLICE2(INDEX1, INDEX2: BOUNDSRANGE): ASNAKED;
|
||||
48690 (*PSLICE2*)
|
||||
48700 VAR TEMP: NAKEGER;
|
||||
48710 OFFS: INTEGER;
|
||||
48720 BEGIN
|
||||
48730 WITH TEMP DO WITH NAK DO
|
||||
48740 BEGIN
|
||||
48750 (*+11() ASNAK := 0; ()+11*)
|
||||
48760 STOWEDVAL := ASPTR(GETSTKTOP(SZADDR, 0));
|
||||
48770 WITH STOWEDVAL^ DO
|
||||
48780 BEGIN
|
||||
48790 WITH DESCVEC[0] DO
|
||||
48800 IF (INDEX2<LI) OR (INDEX2>UI) THEN SLCMN(STOWEDVAL, INDEX2, 0)
|
||||
48810 ELSE OFFS := -LBADJ+DI*INDEX2;
|
||||
48820 WITH DESCVEC[1] DO
|
||||
48830 IF (INDEX1<LI) OR (INDEX1>UI) THEN SLCMN(STOWEDVAL, INDEX1, 1)
|
||||
48840 ELSE POSITION := OFFS+DI*INDEX1
|
||||
48850 END;
|
||||
48860 SLICE2 := ASNAK;
|
||||
48870 END;
|
||||
48880 END;
|
||||
48890 ()-05*) ()-01*)
|
||||
48900 (**)
|
||||
48910 (**)
|
||||
48920 (*-02() BEGIN END ; ()-02*)
|
||||
48930 (*+01()
|
||||
48940 BEGIN (*OF MAIN PROGRAM*)
|
||||
48950 END (*OF EVERYTHING*).
|
||||
48960 ()+01*)
|
37
lang/a68s/liba68s/slicen.p
Normal file
37
lang/a68s/liba68s/slicen.p
Normal file
|
@ -0,0 +1,37 @@
|
|||
49000 #include "rundecs.h"
|
||||
49010 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
49020 (**)
|
||||
49030 (**)
|
||||
49040 PROCEDURE SLCMN(STOWEDVAL: OBJECTP; INDEX, SLICDEX: INTEGER); EXTERN;
|
||||
49050 (**)
|
||||
49060 (**)
|
||||
49070 FUNCTION SLICEN(INDEX: BOUNDSRANGE; NOROWS: INTEGER): ASNAKED;
|
||||
49080 (*PSLICEN*)
|
||||
49090 VAR TEMP: NAKEGER;
|
||||
49100 OFFS, I: INTEGER;
|
||||
49110 BEGIN
|
||||
49120 WITH TEMP DO WITH NAK DO
|
||||
49130 BEGIN
|
||||
49140 (*+11() ASNAK := 0; ()+11*)
|
||||
49150 STOWEDVAL := ASPTR(GETSTKTOP(SZADDR, (NOROWS-1)*SZINT));
|
||||
49160 WITH STOWEDVAL^ DO
|
||||
49170 BEGIN
|
||||
49180 OFFS := -LBADJ;
|
||||
49190 FOR I := 0 TO NOROWS-1 DO WITH DESCVEC[I] DO
|
||||
49200 BEGIN
|
||||
49210 IF (INDEX<LI) OR (INDEX>UI) THEN SLCMN(STOWEDVAL, INDEX, I)
|
||||
49220 ELSE OFFS := OFFS+DI*INDEX;
|
||||
49230 INDEX := GETSTKTOP(SZINT, I*SZINT);
|
||||
49240 END
|
||||
49250 END;
|
||||
49260 POSITION := OFFS;
|
||||
49270 SLICEN := ASNAK;
|
||||
49280 END;
|
||||
49290 END;
|
||||
49300 (**)
|
||||
49310 (**)
|
||||
49320 (*-02() BEGIN END ; ()-02*)
|
||||
49330 (*+01()
|
||||
49340 BEGIN (*OF MAIN PROGRAM*)
|
||||
49350 END (*OF EVERYTHING*).
|
||||
49360 ()+01*)
|
45
lang/a68s/liba68s/space.p
Normal file
45
lang/a68s/liba68s/space.p
Normal file
|
@ -0,0 +1,45 @@
|
|||
88800 #include "rundecs.h"
|
||||
88810 (* COPYRIGHT 1983 C.H.LINDSEY, UNIVERSITY OF MANCHESTER *)
|
||||
88820 (**)
|
||||
88830 PROCEDURE GARBAGE (ANOBJECT: OBJECTP); EXTERN ;
|
||||
88840 PROCEDURE ERRORR(N :INTEGER); EXTERN ;
|
||||
88850 PROCEDURE CLPASC5(P1,P2 :IPOINT; P3,P4 :INTEGER; P5 :IPOINT; PROC: ASPROC); EXTERN;
|
||||
88860 PROCEDURE CLRDSTR(PCOV: OBJECTP; VAR CHARS: GETBUFTYPE; TERM (*+01() , TERM1 ()+01*) : TERMSET;
|
||||
88870 VAR I: INTEGER; BOOK: FETROOMP; PROC: ASPROC); EXTERN;
|
||||
88880 PROCEDURE TESTF(RF:OBJECTP;VAR F:OBJECTP); EXTERN;
|
||||
88890 FUNCTION ENSLINE(RF:OBJECTP;VAR F:OBJECTP):BOOLEAN; EXTERN;
|
||||
88900 PROCEDURE ERRORSTATE(F:OBJECTP); EXTERN;
|
||||
88910 (**)
|
||||
88920 (**)
|
||||
88930 PROCEDURE SPACE(RF:OBJECTP);
|
||||
88940 VAR NSTATUS :STATUSSET; F,COV:OBJECTP;
|
||||
88950 CHARS: GETBUFTYPE; I: INTEGER;
|
||||
88960 BEGIN FPINC(RF^);
|
||||
88970 TESTF(RF,F); NSTATUS:=F^.PCOVER^.STATUS;
|
||||
88980 IF NOT(([OPENED,READMOOD]<=NSTATUS) OR ([OPENED,WRITEMOOD]<=NSTATUS))
|
||||
88990 THEN ERRORSTATE(F)
|
||||
89000 ELSE IF [LINEOVERFLOW]<=NSTATUS
|
||||
89010 THEN IF NOT ENSLINE(RF,F) THEN ERRORR(NOLOGICAL);
|
||||
89020 (* OPENED,LINEOK,MOODOK *)
|
||||
89030 COV:=F^.PCOVER;
|
||||
89040 IF COV^.ASSOC THEN WITH COV^ DO
|
||||
89050 BEGIN
|
||||
89060 COFCPOS := COFCPOS+1; CPOSELS := CPOSELS+OFFSETDI;
|
||||
89070 IF COFCPOS>CHARBOUND THEN STATUS := STATUS+[LINEOVERFLOW];
|
||||
89080 END
|
||||
89090 ELSE IF [READMOOD,CHARMOOD]<=F^.PCOVER^.STATUS THEN
|
||||
89100 BEGIN I := -1; CLRDSTR(COV, CHARS, ALLCHAR (*+01() , ALLCHAR ()+01*) , I, COV^.BOOK, COV^.DOGETS) END
|
||||
89110 ELSE WITH F^.PCOVER^ DO
|
||||
89120 CLPASC5(ORD(COV), ORD(F), -1, ORD(' '), ORD(BOOK), DOPUTS);
|
||||
89130 WITH RF^ DO BEGIN FDEC; IF FTST THEN GARBAGE(RF) END;
|
||||
89140 END;
|
||||
89150 (**)
|
||||
89160 (**)
|
||||
89170 (*-02()
|
||||
89180 BEGIN (*OF A68*)
|
||||
89190 END; (*OF A68*)
|
||||
89200 ()-02*)
|
||||
89210 (*+01()
|
||||
89220 BEGIN (*OF MAIN PROGRAM*)
|
||||
89230 END (* OF EVERYTHING *).
|
||||
89240 ()+01*)
|
4
lang/a68s/liba68s/sqrt.c
Normal file
4
lang/a68s/liba68s/sqrt.c
Normal file
|
@ -0,0 +1,4 @@
|
|||
extern double _sqrt();
|
||||
double SQRT(statlink, x)
|
||||
int *statlink; double x;
|
||||
{return(_sqt(x));}
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue