cleaned up considerably
authorceriel <none@none>
Fri, 13 Oct 1989 18:26:05 +0000 (18:26 +0000)
committerceriel <none@none>
Fri, 13 Oct 1989 18:26:05 +0000 (18:26 +0000)
modules/src/em_code/.distr
modules/src/em_code/Makefile
modules/src/em_code/em.c [new file with mode: 0644]
modules/src/em_code/make.sh

index 9501309..0ee811f 100644 (file)
@@ -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
index d672258..e4e9c72 100644 (file)
@@ -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 (file)
index 0000000..eebdef1
--- /dev/null
@@ -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 <alloc.h>
+#include <em_path.h>
+#include <em_arith.h>
+#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 */
index 923e168..c480c74 100755 (executable)
@@ -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