Some corrections to make it work on small machines

This commit is contained in:
ceriel 1988-01-14 13:34:42 +00:00
parent 629fc3f824
commit 1ee5101ba7
6 changed files with 39 additions and 32 deletions

View file

@ -10,6 +10,8 @@ static pseudo();
extern char em_flag[];
#define flags(pp) (em_flag[(pp)->em_opcode - sp_fmnem] & EM_PAR)
struct e_instr *
C_alloc()
{
@ -30,12 +32,11 @@ C_out(p)
switch(p->em_type) {
case EM_MNEM:
OP(p->em_opcode);
if (em_flag[p->em_opcode - sp_fmnem] == PAR_B &&
p->em_argtype == cst_ptyp) {
if (flags(p) == PAR_B && p->em_argtype == cst_ptyp) {
p->em_ilb = p->em_cst;
p->em_argtype = ilb_ptyp;
}
if (em_flag[p->em_opcode - sp_fmnem] != PAR_NO) arg(p, 0);
if (flags(p) != PAR_NO) arg(p, 0);
NL();
break;
@ -86,7 +87,7 @@ arg(p, comma)
switch(p->em_argtype) {
case 0:
if (p->em_type == EM_MNEM && em_flag[p->em_opcode - sp_fmnem] != PAR_W) {
if (p->em_type == EM_MNEM && flags(p) != PAR_W) {
abort();
}
CCEND();

View file

@ -33,11 +33,11 @@ em_code.3: em_code.3X
-sh -c 'if test -s em_code.3 ; then : ; else cp em_code.3X em_code.3 ; fi '
libeme.a: e/em_private.h e/em.c $(OBS) io.c
EMHOME=$(EMHOME); cc="$(CC)"; cflags="-c -Ie $(CFLAGS)" ar="$(AR)"; export EMHOME cc ar cflags; sh make.sh e
EMHOME=$(EMHOME); cc="$(CC)"; cflags="-c -Ie $(CFLAGS)" ar="$(AR)"; export EMHOME cc ar cflags; sh -x make.sh e
-sh -c 'ranlib libeme.a'
libemk.a: k/em_private.h k/em.c $(OBS) io.c
EMHOME=$(EMHOME); cc="$(CC)"; cflags="-c -Ik $(CFLAGS)" ar="$(AR)"; export EMHOME cc ar cflags; sh make.sh k
EMHOME=$(EMHOME); cc="$(CC)"; cflags="-c -Ik $(CFLAGS)" ar="$(AR)"; export EMHOME cc ar cflags; sh -x make.sh k
-sh -c 'ranlib libemk.a'
em_codeEK.h: make.em.gen $(ETC)/em_table em.nogen

View file

@ -29,21 +29,21 @@ getbyte(b)
C_flush();
if (nb != curr_pos) {
if (sys_seek(tfr, nb, 0, &curr_pos) == 0) {
if (sys_seek(C_tfr, nb, 0, &curr_pos) == 0) {
C_failed();
}
}
if (! ibuf) {
ibuf = Malloc(BUFSIZ);
if (! C_ibuf) {
C_ibuf = Malloc(BUFSIZ);
}
if (sys_read(tfr, ibuf, BUFSIZ, &n) == 0) {
if (sys_read(C_tfr, C_ibuf, BUFSIZ, &n) == 0) {
C_failed();
}
curr_pos += n;
start_core = nb;
}
return ibuf[(int) (b - start_core)];
return C_ibuf[(int) (b - start_core)];
}
#endif
@ -80,7 +80,7 @@ C_out_parts(pp)
while (pp) {
if (pp->pp_type == INSERT) {
C_outpart(pp->pp_id);
(*C_outpart)(pp->pp_id);
}
else {
/* copy the chunk to output */
@ -119,7 +119,7 @@ C_findpart(part)
}
static
switchtotmp()
swttmp()
{
#ifndef INCORE
if (C_tmpfile == 0) {
@ -128,7 +128,7 @@ switchtotmp()
strcpy(p, C_tmpdir);
strcat(p, "/CodeXXXXXX");
tmpfile = mktemp(p);
C_tmpfile = mktemp(p);
if (! sys_open(p, OP_WRITE, &C_old_ofp)) {
C_failed();
}
@ -161,7 +161,7 @@ switchtotmp()
}
static
switchtoout()
swtout()
{
#ifndef INCORE
if (C_ontmpfile) {
@ -277,7 +277,7 @@ resume(p)
*/
register PartOfPart *pp = (PartOfPart *) Malloc(sizeof(PartOfPart));
switchtotmp();
swttmp();
C_curr_part = p;
pp->pp_next = p->p_parts;
p->p_parts = pp;
@ -296,8 +296,8 @@ C_insertpart(part)
register PartOfPart *pp;
C_outpart = outpart;
C_switchtotmp = switchtotmp;
C_switchtoout = switchtoout;
C_swttmp = swttmp;
C_swtout = swtout;
if (C_sequential && available(part)) {
outpart(part);
return;
@ -333,8 +333,8 @@ C_beginpart(part)
register Part *p = mkpart(part);
C_outpart = outpart;
C_switchtotmp = switchtotmp;
C_switchtoout = switchtoout;
C_swttmp = swttmp;
C_swtout = swtout;
end_partofpart(C_curr_part);
@ -359,6 +359,6 @@ C_endpart(part)
if (p->p_prevpart) resume(p->p_prevpart);
else {
C_curr_part = 0;
switchtoout();
swtout();
}
}

View file

@ -5,8 +5,11 @@
*/
#include <system.h>
#include <local.h>
#if BIGMACHINE
#define INCORE /* mechanism implemented incore */
#endif
typedef struct partofpart {
struct partofpart *pp_next;
@ -49,18 +52,20 @@ extern long
extern char *C_opp;
#define C_BASE 0
#endif
extern int (*C_outpart)(), (*C_switchtoout)(), (*C_switchtotmp)();
extern int (*C_outpart)(), (*C_swtout)(), (*C_swttmp)();
extern File *C_ofp;
#ifndef INCORE
extern File *C_tfr, *C_old_ofp;
extern char *C_tmpfile;
extern char *C_tmpdir;
#endif
extern char *C_top;
extern char *C_old_top;
extern char *C_old_opp;
extern char *C_ibuf;
#define put(c) if (C_opp == C_top) C_flush(); *C_opp++ = (c)

View file

@ -6,7 +6,6 @@
#include <alloc.h>
#include <em_path.h>
#include <em_arith.h>
#include <local.h>
#include "insert.h"
int C_ontmpfile = 0;
@ -14,7 +13,7 @@ int C_sequential = 1;
Part *C_curr_part;
Part *C_stable[TABSIZ];
char *C_tmpdir = TMP_DIR;
int (*C_outpart)(), (*C_switchtoout)(), (*C_switchtotmp)();
int (*C_outpart)(), (*C_swtout)(), (*C_swttmp)();
#ifdef INCORE
char *C_BASE;
@ -26,7 +25,7 @@ File *C_ofp;
File *C_tfr, *C_old_ofp;
char *C_tmpfile;
char *strcpy(), *strcat(), *mktemp();
static char *ibuf = 0;
char *C_ibuf = 0;
long C_current_out;
#endif
@ -42,6 +41,8 @@ char *C_old_top;
char *C_old_opp;
#ifdef INCORE
char *C_current_out = obuf;
#else
char *C_opp = obuf;
#endif
C_flush() {
@ -109,8 +110,8 @@ C_close()
#ifndef INCORE
C_flush();
if (tmpfile) {
(*C_switchtotmp)();
if (C_tmpfile) {
(*C_swttmp)();
sys_close(C_ofp);
#else
if (C_BASE) {
@ -118,14 +119,14 @@ C_close()
if (C_curr_part) {
C_curr_part->p_parts->pp_end = C_current_out - C_BASE;
}
(*C_switchtoout)();
(*C_swtout)();
if (! C_sequential) {
(*C_outpart)(0);
}
#ifndef INCORE
sys_close(C_tfr);
sys_remove(tmpfile);
if (ibuf) free(ibuf);
sys_remove(C_tmpfile);
if (C_ibuf) free(C_ibuf);
#else
free(C_BASE);
#endif

View file

@ -1,10 +1,10 @@
#include "em_private.h"
CC_msstart(cst)
arith cst;
int cst;
{
/* start of message
*/
PS(ps_mes);
CST(cst);
CST((arith)cst);
}