Files
tack/modules/src/em_code/e/em.c
1987-08-06 10:48:14 +00:00

160 lines
2.0 KiB
C

/* $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 */
#include "io.c"
#include "em_private.h"
/*
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('?'); }