From: ceriel Date: Fri, 13 Oct 1989 18:26:05 +0000 (+0000) Subject: cleaned up considerably X-Git-Tag: release-5-5~2216 X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=0b44329a4b7b39b21c3ed1bc68627044ce98fc0e;p=ack.git cleaned up considerably --- diff --git a/modules/src/em_code/.distr b/modules/src/em_code/.distr index 9501309f5..0ee811f86 100644 --- a/modules/src/em_code/.distr +++ b/modules/src/em_code/.distr @@ -24,7 +24,7 @@ dfdnam.c dfilb.c dlb.c dnam.c -e +em.c em.nogen end.c endarg.c @@ -37,8 +37,6 @@ ilb.c insert.c insert.h internerr.c -io.c -k make.em.gen make.sh msend.c diff --git a/modules/src/em_code/Makefile b/modules/src/em_code/Makefile index d67225896..e4e9c7231 100644 --- a/modules/src/em_code/Makefile +++ b/modules/src/em_code/Makefile @@ -9,10 +9,10 @@ LIBSUF = a SRC = bhcst.c bhdlb.c bhdnam.c bhfcon.c bhicon.c bhilb.c bhpnam.c bhucon.c \ crcst.c crdlb.c crdnam.c crfcon.c cricon.c crilb.c crpnam.c crscon.c \ crucon.c cst.c dfdlb.c dfdnam.c dfilb.c dlb.c dnam.c end.c endarg.c \ - exc.c fcon.c getid.c icon.c ilb.c insert.c internerr.c io.c \ + exc.c fcon.c getid.c icon.c ilb.c insert.c internerr.c \ msend.c op.c opcst.c opdlb.c opdnam.c opilb.c opnarg.c oppnam.c pnam.c \ pro.c pronarg.c msstart.c psdlb.c psdnam.c pspnam.c scon.c ucon.c \ - C_out.c failed.c + C_out.c failed.c em.c OBS = failed.$(SUF) insert.$(SUF) internerr.$(SUF) getid.$(SUF) @@ -38,12 +38,12 @@ em_code.3: em_code.3X -sh -c 'tbl < em_code.3X > em_code.3' -sh -c 'if test -s em_code.3 ; then : ; else cp em_code.3X em_code.3 ; fi ' -libeme.$(LIBSUF): e/em_private.h e/em.c $(OBS) io.c - EMHOME=$(EMHOME); cc="$(CC)"; suf="$(SUF)"; libsuf="$(LIBSUF)"; cflags="-c -Ie $(CFLAGS)"; ar="$(AR)"; export EMHOME cc ar suf libsuf cflags; sh -x make.sh e +libeme.$(LIBSUF): em_private.h $(SRC) $(OBS) + EMHOME=$(EMHOME); cc="$(CC)"; suf="$(SUF)"; libsuf="$(LIBSUF)"; cflags="-c -DREADABLE_EM $(CFLAGS)"; ar="$(AR)"; export EMHOME cc ar suf libsuf cflags; sh make.sh e $(SRC) -sh -c 'ranlib libeme.$(LIBSUF)' -libemk.$(LIBSUF): k/em_private.h k/em.c $(OBS) io.c - EMHOME=$(EMHOME); cc="$(CC)"; suf="$(SUF)"; libsuf="$(LIBSUF)"; cflags="-c -Ik $(CFLAGS)"; ar="$(AR)"; export EMHOME cc ar suf libsuf cflags; sh -x make.sh k +libemk.$(LIBSUF): em_private.h $(SRC) $(OBS) + EMHOME=$(EMHOME); cc="$(CC)"; suf="$(SUF)"; libsuf="$(LIBSUF)"; cflags="-c $(CFLAGS)"; ar="$(AR)"; export EMHOME cc ar suf libsuf cflags; sh make.sh k $(SRC) -sh -c 'ranlib libemk.$(LIBSUF)' em_codeEK.h: make.em.gen $(ETC)/em_table em.nogen @@ -51,7 +51,7 @@ em_codeEK.h: make.em.gen $(ETC)/em_table em.nogen cat em.nogen >> em_codeEK.h pr: - @pr Makefile em.nogen make.em.gen make.sh insert.h $(SRC) e/em_private.h e/em.c k/em_private.h k/em.c + @pr Makefile em.nogen make.em.gen make.sh insert.h $(SRC) em_private.h opr: make pr | opr @@ -60,8 +60,8 @@ clean: rm -f *.$(SUF) *.$(LIBSUF) em_code.3 lintlib: make.sh - lint -I. -I../../h -I../../../h -Ie -Ceme $(SRC) e/*.c - lint -I. -I../../h -I../../../h -Ik -Cemk $(SRC) k/*.c + lint -I. -I../../h -I../../../h -Ceme -DREADABLE_EM $(SRC) + lint -I. -I../../h -I../../../h -Cemk $(SRC) mv llib-leme.ln llib-lemk.ln $(EMHOME)/modules/lib insert.$(SUF): insert.c insert.h diff --git a/modules/src/em_code/em.c b/modules/src/em_code/em.c new file mode 100644 index 000000000..eebdef1a8 --- /dev/null +++ b/modules/src/em_code/em.c @@ -0,0 +1,445 @@ +/* $Header$ */ +/* + * (c) copyright 1987 by the Vrije Universiteit, Amsterdam, The Netherlands. + * See the copyright notice in the ACK home directory, in the file "Copyright". + */ +/* EM CODE OUTPUT ROUTINES */ + +/* I/O part of em_code module. + Also contains C_open, C_close +*/ +#include +#include +#include +#include "insert.h" +#include "em_private.h" + +int C_ontmpfile = 0; +int C_sequential = 1; +Part *C_curr_part; +Part *C_stable[TABSIZ]; +char *C_tmpdir = TMP_DIR; +int (*C_outpart)(), (*C_swtout)(), (*C_swttmp)(); + +#ifdef INCORE +char *C_BASE; +#endif + +File *C_ofp; + +#ifndef INCORE +File *C_tfr, *C_old_ofp; +char *C_tmpfile; +char *strcpy(), *strcat(); +char *C_ibuf = 0; +long C_current_out; +#endif + +#if BUFSIZ <= 1024 && BIGMACHINE +#define BUFFERSIZ 8*BUFSIZ +#else +#define BUFFERSIZ BUFSIZ +#endif + +static char obuf[BUFFERSIZ]; +char *C_top = &obuf[BUFFERSIZ]; +char *C_old_top; +char *C_old_opp; +#ifdef INCORE +char *C_current_out = obuf; +#else +char *C_opp = obuf; +#endif + +C_flush() { +#ifdef INCORE + static unsigned int bufsiz; + + if (C_ontmpfile) { + if (C_BASE == 0) { + C_BASE = Malloc(BUFFERSIZ); + bufsiz = BUFFERSIZ; + C_current_out = C_BASE; + } + else { + C_BASE = Srealloc(C_BASE, (bufsiz << 1)); + C_current_out = C_BASE + bufsiz; + bufsiz <<= 1; + } + C_top = C_BASE + bufsiz; + return; + } +#endif + if (C_opp != obuf && sys_write(C_ofp, obuf, C_opp - obuf) == 0) { + C_failed(); + } + C_opp = obuf; +} + +#ifndef INCORE +#define Xputbyte(c) if (C_ontmpfile) C_current_out++; put(c) +#else +#define Xputbyte(c) put(c) +#endif + +C_putbyte(c) + int c; +{ + Xputbyte(c); +} + +#define C_putbyte Xputbyte + +C_init(w, p) + arith w, p; +{ +} + +C_open(nm) + char *nm; +{ + /* Open file "nm" for output + */ + + if (nm == 0) + C_ofp = STDOUT; /* standard output */ + else + if (sys_open(nm, OP_WRITE, &C_ofp) == 0) + return 0; + return 1; +} + +C_close() +{ + /* Finish the code-generation. + */ + +#ifndef INCORE + C_flush(); + if (C_tmpfile) { + (*C_swttmp)(); + sys_close(C_ofp); +#else + if (C_BASE) { +#endif + if (C_curr_part) { + C_curr_part->p_parts->pp_end = C_current_out - C_BASE; + } + (*C_swtout)(); + if (! C_sequential) { + (*C_outpart)(0); + } +#ifndef INCORE + sys_close(C_tfr); + sys_remove(C_tmpfile); + if (C_ibuf) free(C_ibuf); +#else + free(C_BASE); +#endif + } + C_flush(); + if (C_ofp != STDOUT) + sys_close(C_ofp); + C_ofp = 0; +} + +C_busy() +{ + return C_ofp != 0; /* true if code is being generated */ +} + +#ifdef READABLE_EM +/* + The C_pt_*() functions serve as formatting functions of the + various EM language constructs. + See "Description of a Machine Architecture for use with + Block Structured Languages" par. 11.2 for the meaning of these + names. +*/ + +C_magic() +{ +} + +/*** the readable code generating routines ***/ + +static +wrs(s) + register char *s; +{ + while (*s) { + C_putbyte(*s++); + } +} + +C_pt_dnam(s) + char *s; +{ + wrs(s); +} + +C_pt_ilb(l) + label l; +{ + char buf[16]; + + sprint(buf, "*%ld", (long) l); + wrs(buf); +} + +extern char em_mnem[][4]; +extern char em_pseu[][4]; + +C_pt_op(x) +{ + C_putbyte(' '); + wrs(em_mnem[x - sp_fmnem]); + C_putbyte(' '); +} + +C_pt_cst(l) + arith l; +{ + char buf[16]; + + sprint(buf, "%ld", (long) l); + wrs(buf); +} + +C_pt_scon(x, y) + char *x; + arith y; +{ + char xbuf[1024]; + register char *p; + char *bts2str(); + + C_putbyte('\''); + p = bts2str(x, (int) y, xbuf); + while (*p) { + if (*p == '\'') { + C_putbyte('\\'); + } + C_putbyte(*p++); + } + C_putbyte('\''); +} + +C_pt_ps(x) +{ + C_putbyte(' '); + wrs(em_pseu[x - sp_fpseu]); + C_putbyte(' '); +} + +C_pt_dlb(l) + label l; +{ + char buf[16]; + + sprint(buf, ".%ld", (long) l); + wrs(buf); +} + +C_pt_doff(l, v) + label l; + arith v; +{ + char buf[16]; + + C_pt_dlb(l); + if (v != 0) { + sprint(buf,"+%ld", (long) v); + wrs(buf); + } +} + +C_pt_noff(s, v) + char *s; + arith v; +{ + char buf[16]; + + wrs(s); + if (v != 0) { + sprint(buf,"+%ld", (long) v); + wrs(buf); + } +} + +C_pt_pnam(s) + char *s; +{ + C_putbyte('$'); + wrs(s); +} + +C_pt_dfilb(l) + label l; +{ + char buf[16]; + + sprint(buf, "%ld", (long) l); + wrs(buf); +} + +C_pt_wcon(sp, v, sz) /* sp_icon, sp_ucon or sp_fcon with int repr */ + int sp; + char *v; + arith sz; +{ + int ch = sp == sp_icon ? 'I' : sp == sp_ucon ? 'U' : 'F'; + + wrs(v); + C_putbyte(ch); + C_pt_cst(sz); +} + +C_pt_nl() { C_putbyte('\n'); } +C_pt_comma() { C_putbyte(','); } +C_pt_ccend() { C_putbyte('?'); } + +#else /* READABLE_EM */ + +#define put8(x) C_putbyte(x) +#define put16(x) put8((int) x); put8((int) (x >> 8)) +#define put32(x) put16((int) x); put16((int) (x >> 16)) + +/* + The C_pt_*() functions serve as formatting functions of the + various EM language constructs. + See "Description of a Machine Architecture for use with + Block Structured Languages" par. 11.2 for the meaning of these + names. +*/ + +C_magic() +{ + put16(sp_magic); +} + +/*** the compact code generating routines ***/ +#define fit16i(x) ((x) >= (long)0xFFFF8000 && (x) <= (long)0x00007FFF) +#define fit8u(x) ((x) <= 0xFF) /* x is already unsigned */ + +C_pt_ilb(l) + register label l; +{ + if (fit8u(l)) { + put8(sp_ilb1); + put8(l); + } + else { + put8(sp_ilb2); + put16(l); + } +} + +C_pt_dlb(l) + register label l; +{ + if (fit8u(l)) { + put8(sp_dlb1); + put8(l); + } + else { + put8(sp_dlb2); + put16((int)l); + } +} + +C_pt_cst(l) + register arith l; +{ + if (l >= (arith) -sp_zcst0 && l < (arith) (sp_ncst0 - sp_zcst0)) { + /* we can convert 'l' to an int because its value + can be stored in a byte. + */ + put8((int)l + (sp_zcst0 + sp_fcst0)); + } + else + if (fit16i(l)) { /* the cast from long to int causes no trouble here */ + put8(sp_cst2); + put16((int) l); + } + else { + put8(sp_cst4); + put32(l); + } +} + +C_pt_doff(l, v) + label l; + arith v; +{ + if (v == 0) { + C_pt_dlb(l); + } + else { + put8(sp_doff); + C_pt_dlb(l); + C_pt_cst(v); + } +} + +C_pt_noff(s, v) + char *s; + arith v; +{ + if (v == 0) { + C_pt_dnam(s); + } + else { + put8(sp_doff); + C_pt_dnam(s); + C_pt_cst(v); + } +} + +C_pt_dnam(s) + char *s; +{ + put8(sp_dnam); + C_pt_str(s); +} + +C_pt_pnam(s) + char *s; +{ + put8(sp_pnam); + C_pt_str(s); +} + +C_pt_wcon(sp, v, sz) /* sp_icon, sp_ucon or sp_fcon with int repr */ + int sp; + char *v; + arith sz; +{ + /* how 'bout signextension int --> long ??? */ + put8(sp); + C_pt_cst(sz); + C_pt_str(v); +} + +C_pt_str(s) + register char *s; +{ + register int len; + + C_pt_cst((arith) (len = strlen(s))); + while (--len >= 0) { + put8(*s++); + } +} + +C_pt_scon(b, n) + register char *b; + register arith n; +{ + put8(sp_scon); + C_pt_cst(n); + while (--n >= 0) { + put8(*b++); + } +} +#endif /* READABLE_EM */ diff --git a/modules/src/em_code/make.sh b/modules/src/em_code/make.sh index 923e16888..c480c74af 100755 --- a/modules/src/em_code/make.sh +++ b/modules/src/em_code/make.sh @@ -1,50 +1,22 @@ -if $cc $cflags bhcst.c ; then : ; else exit 1 ; fi -if $cc $cflags bhdlb.c ; then : ; else exit 1 ; fi -if $cc $cflags bhdnam.c ; then : ; else exit 1 ; fi -if $cc $cflags bhfcon.c ; then : ; else exit 1 ; fi -if $cc $cflags bhicon.c ; then : ; else exit 1 ; fi -if $cc $cflags bhilb.c ; then : ; else exit 1 ; fi -if $cc $cflags bhpnam.c ; then : ; else exit 1 ; fi -if $cc $cflags bhucon.c ; then : ; else exit 1 ; fi -if $cc $cflags crcst.c ; then : ; else exit 1 ; fi -if $cc $cflags crdlb.c ; then : ; else exit 1 ; fi -if $cc $cflags crdnam.c ; then : ; else exit 1 ; fi -if $cc $cflags crfcon.c ; then : ; else exit 1 ; fi -if $cc $cflags cricon.c ; then : ; else exit 1 ; fi -if $cc $cflags crilb.c ; then : ; else exit 1 ; fi -if $cc $cflags crpnam.c ; then : ; else exit 1 ; fi -if $cc $cflags crscon.c ; then : ; else exit 1 ; fi -if $cc $cflags crucon.c ; then : ; else exit 1 ; fi -if $cc $cflags cst.c ; then : ; else exit 1 ; fi -if $cc $cflags dfdlb.c ; then : ; else exit 1 ; fi -if $cc $cflags dfdnam.c ; then : ; else exit 1 ; fi -if $cc $cflags dfilb.c ; then : ; else exit 1 ; fi -if $cc $cflags dlb.c ; then : ; else exit 1 ; fi -if $cc $cflags dnam.c ; then : ; else exit 1 ; fi -if $cc $cflags end.c ; then : ; else exit 1 ; fi -if $cc $cflags endarg.c ; then : ; else exit 1 ; fi -if $cc $cflags exc.c ; then : ; else exit 1 ; fi -if $cc $cflags fcon.c ; then : ; else exit 1 ; fi -if $cc $cflags icon.c ; then : ; else exit 1 ; fi -if $cc $cflags ilb.c ; then : ; else exit 1 ; fi -if $cc $cflags msend.c ; then : ; else exit 1 ; fi -if $cc $cflags op.c ; then : ; else exit 1 ; fi -if $cc $cflags opcst.c ; then : ; else exit 1 ; fi -if $cc $cflags opdlb.c ; then : ; else exit 1 ; fi -if $cc $cflags opdnam.c ; then : ; else exit 1 ; fi -if $cc $cflags opilb.c ; then : ; else exit 1 ; fi -if $cc $cflags opnarg.c ; then : ; else exit 1 ; fi -if $cc $cflags oppnam.c ; then : ; else exit 1 ; fi -if $cc $cflags pnam.c ; then : ; else exit 1 ; fi -if $cc $cflags pro.c ; then : ; else exit 1 ; fi -if $cc $cflags pronarg.c ; then : ; else exit 1 ; fi -if $cc $cflags msstart.c ; then : ; else exit 1 ; fi -if $cc $cflags psdlb.c ; then : ; else exit 1 ; fi -if $cc $cflags psdnam.c ; then : ; else exit 1 ; fi -if $cc $cflags pspnam.c ; then : ; else exit 1 ; fi -if $cc $cflags scon.c ; then : ; else exit 1 ; fi -if $cc $cflags ucon.c ; then : ; else exit 1 ; fi +list= +target=$1 +shift +for i +do + echo "+$cc $cflags $i" + if $cc $cflags $i + then + list="$list `basename $i .c`.o" + else + exit 1 + fi +done +echo "+$cc $cflags -I../read_em C_out.c" if $cc $cflags -I../read_em C_out.c ; then : ; else exit 1 ; fi -if $cc $cflags $1/em.c ; then : ; else exit 1 ; fi -if mv em.$suf em$1.$suf ; then : ; else exit 1 ; fi -if $ar rc libem$1.$libsuf bhcst.$suf bhdlb.$suf bhdnam.$suf bhfcon.$suf bhicon.$suf bhilb.$suf bhpnam.$suf bhucon.$suf crcst.$suf crdlb.$suf crdnam.$suf crfcon.$suf cricon.$suf crilb.$suf crpnam.$suf crscon.$suf crucon.$suf cst.$suf dfdlb.$suf dfdnam.$suf dfilb.$suf dlb.$suf dnam.$suf end.$suf endarg.$suf exc.$suf fcon.$suf getid.$suf icon.$suf ilb.$suf insert.$suf internerr.$suf msend.$suf op.$suf opcst.$suf opdlb.$suf opdnam.$suf opilb.$suf opnarg.$suf oppnam.$suf pnam.$suf pro.$suf pronarg.$suf msstart.$suf psdlb.$suf psdnam.$suf pspnam.$suf scon.$suf ucon.$suf C_out.$suf em$1.$suf failed.$suf ; then : ; else exit 1 ; fi +echo "+$ar rc libem$target.$libsuf $list" +if $ar rc libem$target.$libsuf $list +then + : +else + exit 1 +fi