home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
messroms.de
/
2007-01-13_www.messroms.de.zip
/
VZ200
/
TOOLS
/
ZCCSRC.ZIP
/
scc
/
gen.c
< prev
next >
Wrap
C/C++ Source or Header
|
2000-03-01
|
2KB
|
138 lines
/* File gen.c: 2.1 (83/03/20,16:02:06) */
/*% cc -O -c %
*
*/
#include <stdio.h>
#include "defs.h"
#include "data.h"
#include "proto.h"
/*
* return next available internal label number
*
*/
int getlabel(void)
{
return (nxtlab++);
}
/*
* print specified number as label
*/
void printlabel(int label)
{
olprfix();
outdec(label);
}
/*
* glabel - generate label
*/
void glabel(char *lab)
{
prefix();
outstr(lab);
col();
nl();
}
/*
* gnlabel - generate numeric label
*/
void gnlabel(int nlab)
{
printlabel(nlab);
col();
nl();
}
char outbyte(char c)
{
if (c == 0)
return (0);
fputc(c, output);
return (c);
}
void outstr(char ptr[])
{
int k;
k = 0;
while (outbyte(ptr[k++]))
;
}
void tab(void)
{
outbyte(9);
}
void ol(char ptr[])
{
ot(ptr);
nl();
}
void ot(char ptr[])
{
tab();
outstr(ptr);
}
void outdec(int number)
{
int k, zs;
char c;
if (number == -32768)
{
outstr("-32768");
return;
}
zs = 0;
k = 10000;
if (number < 0)
{
number = (-number);
outbyte('-');
}
while (k >= 1)
{
c = number / k + '0';
if (c != '0' || k == 1 || zs)
{
zs = 1;
outbyte(c);
}
number = number % k;
k = k / 10;
}
}
void store(int *lval)
{
if (lval[1] == 0)
putmem((char*)lval[0]);
else
putstk(lval[1]);
}
void rvalue(int *lval)
{
if ((lval[0] != 0) & (lval[1] == 0))
getmem((char*)lval[0]);
else
indirect(lval[1]);
}
void test(int label, int ft)
{
needbrack("(");
expression(YES);
needbrack(")");
testjump(label, ft);
}