|
|
researchv10 Norman
#include <jerq.h>
#define TRUE 1
#define FALSE 0
extern getdots();
extern putdots();
extern void idmaxx ();
extern void idmaxy ();
extern void idminx ();
extern void idminy ();
extern void idwidth ();
extern void idcolwid ();
extern char *scanstr();
extern char *scanfloat();
extern idline ();
extern idarc ();
extern idleft ();
extern idcenter ();
extern idright ();
extern idspline ();
extern idknot ();
extern idendspline ();
extern yeserase ();
extern noerase();
extern idendbound();
char input[10000];
char *ip = input;
long maxx, maxy;
long minx, miny;
long width = 4;
long colwid = 6;
long scale;
#define boolean int
boolean maxxset, maxyset;
boolean minxset, minyset;
boolean widset, colset;
boolean boundset;
boolean veryfirst = TRUE;
boolean wanterase = TRUE;
POINT textpos;
char temp[100];
print (s)
char *s;
{
jmoveto(textpos);
jstring ("*");
jstring(s);
jstring ("*");
textpos.x = 30;
textpos.y += 15;
}
main (argc, argv)
int argc;
char *argv[];
{
jinit();
qinit();
binit();
aciainit();
spl0();
jBonW();
cursinhibit();
textpos.x = 30;
textpos.y = XMAX+20;
for (;;) {
getdots();
if (wanterase == TRUE)
jrectf(screenmap.rect, F_CLR);
putdots();
}
}
getdots()
{
register char *start, *ip;
ip = input;
jputchar('*');
do {
start = ip;
while ((*ip++ = jgetchar()) != '\n')
jputchar('*');
} while (strncmp (start, ".IS", 3));
ip = input;
do {
start = ip;
while ((*ip++ = jgetchar()) != '\n')
jputchar('*');
*ip = '\0';
} while (strncmp (start, ".IE", 3) && strncmp (start, ".IF", 3));
maxxset = minxset = FALSE;
maxyset = minyset = FALSE;
widset = colset = boundset = FALSE;
}
#define getfloats(n) for (i = 0; i < n; i ++) ip = scanfloat (&f[i], ip);
putdots()
{
register char *ip;
char cmd[10];
long f[10];
int i;
POINT pos;
char *ip2;
ip = input;
while (*ip) {
ip = scanstr(cmd,ip);
if (!boundset) {
if (strcmp (cmd, "...maxx") == 0) {
getfloats(1);
idmaxx (f[0]);
} else if (strcmp (cmd, "...maxy") == 0) {
getfloats(1);
idmaxy (f[0]);
} else if (strcmp (cmd, "...minx") == 0) {
getfloats(1);
idminx (f[0]);
} else if (strcmp (cmd, "...miny") == 0) {
getfloats(1);
idminy (f[0]);
} else if (strcmp (cmd, "...width") == 0) {
getfloats(1);
idwidth (f[0]);
} else if (strcmp (cmd, "...colwid") == 0) {
getfloats(1);
idcolwid (f[0]);
} else if (strcmp (cmd, "...obbox") == 0) {
if (!veryfirst) {
maxxset = maxyset = TRUE;
minxset = minyset = TRUE;
boundset = TRUE;
}
} else if (strcmp (cmd, "...noerase") == 0) {
idnoerase ();
} else if (strcmp (cmd, "...yeserase") == 0) {
idyeserase ();
} else {
idendbound ();
veryfirst = FALSE;
}
}
if (boundset) {
if (strcmp (cmd, "...line") == 0) {
getfloats(4);
idline (f[0], f[1], f[2], f[3]);
} else if (strcmp (cmd, "...circle") == 0) {
getfloats(3);
idcircle (f[0], f[1], f[2]);
} else if (strcmp (cmd, "...arc") == 0) {
getfloats(9);
idarc (f[0], f[1], f[2], f[3], f[4], f[5], f[6], f[7], f[8]);
} else if (strcmp (cmd, "...left") == 0) {
getfloats(2);
ip2 = ip;
while (*ip2++ != '\n')
;
*--ip2 = '\0';
idleft(f[0],f[1],ip);
ip = ip2+1;
} else if (strcmp (cmd, "...center") == 0) {
getfloats(2);
ip2 = ip;
while (*ip2++ != '\n')
;
*--ip2 = '\0';
idcenter(f[0],f[1],ip);
ip = ip2+1;
} else if (strcmp (cmd, "...right") == 0) {
getfloats(2);
ip2 = ip;
while (*ip2++ != '\n')
;
*--ip2 = '\0';
idright(f[0],f[1],ip);
ip = ip2+1;
} else if (strcmp (cmd, "...spline") == 0) {
getfloats(2);
idspline (f[0], f[1]);
} else if (strcmp (cmd, "...knot") == 0) {
getfloats(2);
idknot (f[0], f[1]);
} else if (strcmp (cmd, "...endspline") == 0) {
idendspline ();
}
}
}
}
void idmaxx (x)
long x;
{
if (!maxxset) {
maxx = x;
maxxset = TRUE;
}
}
void idmaxy (y)
long y;
{
if (!maxyset) {
maxy = y;
maxyset = TRUE;
}
}
void idminx (x)
long x;
{
if (!minxset) {
minx = x;
minxset = TRUE;
}
}
void idminy (y)
long y;
{
if (!minyset) {
miny = y;
minyset = TRUE;
}
}
void idwidth (wid)
long wid;
{
if (!widset) {
width = wid;
widset = TRUE;
}
}
void idcolwid (wid)
long wid;
{
if (!colset) {
colwid = wid;
colset = TRUE;
}
}
char *scanstr(object, source)
char *object, *source;
{
while (*source != '\0' && (*source == ' ' || *source == '\n'))
source++;
while (*source != '\0' && *source != ' ' && *source != '\n')
*object++ = *source++;
*object = '\0';
return (source);
}
#define isdigit(ch) ((ch) >= '0' && (ch) <= '9')
#define PRECISION 1000
char *scanfloat(f, source)
long *f;
char *source;
{
int i;
boolean negflag;
long part[2];
int len[2];
long n;
negflag = FALSE;
while (!isdigit(*source) && *source != '.' && *source != '-')
source++;
if (*source == '-') {
negflag = TRUE;
source ++;
}
part[0] = part[1] = 0;
len[0] = len[1] = 0;
for (i = 0; i < 2; i++) {
while (isdigit(*source)) {
part[i] = 10*part[i] + *source++ - '0';
len[i]++;
}
if (*source != '.')
break;
source++;
}
n = 1;
for (i = 0; i < len[1]; i ++)
n *= 10;
*f = part[0]*PRECISION + (PRECISION*part[1])/n;
if (negflag)
*f *= -1;
return (source);
}
#define jx(x) XMAX*((x)-minx)/scale
#define jy(y) XMAX*(maxy-(y))/scale
idline (x0, y0, x1, y1)
long x0, y0, x1, y1;
{
POINT p;
p.x = jx(x0);
p.y = jy(y0);
jmoveto(p);
p.x = jx(x1);
p.y = jy(y1);
jlineto(p,F_STORE);
}
#define abs(x) ((x)>0?(x):-(x))
idcircle (x0, y0, r)
long x0, y0, r;
{
POINT p;
p.x = jx(x0);
p.y = jy(y0);
jcircle(p, (short)(XMAX*abs(r)/scale), F_STORE);
}
idarc (x0, y0, x1, y1, x2, y2, t1, t2, r)
long x0, y0, x1, y1, x2, y2, t1, t2, r;
{
POINT p0, p1, p2;
p0.x = jx(x0);
p0.y = jy(y0);
p1.x = jx(x1);
p1.y = jy(y1);
p2.x = jx(x2);
p2.y = jy(y2);
jarc (p0, p2, p1, F_XOR);
}
idleft (x0, y0, s)
long x0, y0;
char *s;
{
POINT p;
p.x = jx(x0);
p.y = jy(y0);
jmoveto(p);
jstring(s);
}
idcenter (x0, y0, s)
long x0, y0;
char *s;
{
POINT p;
p.x = jx(x0) - strwidth(s)/2;
p.y = jy(y0);
jmoveto(p);
jstring(s);
}
idright (x0, y0, s)
long x0, y0;
char *s;
{
POINT p;
p.x = jx(x0) - strwidth(s);
p.y = jy(y0);
jmoveto(p);
jstring(s);
}
idspline (x0,y0)
long x0,y0;
{
}
idknot (x0,y0)
long x0,y0;
{
}
idendspline ()
{
}
idnoerase ()
{
wanterase = FALSE;
}
idyeserase ()
{
wanterase = TRUE;
}
idendbound ()
{
if (boundset)
return;
boundset = TRUE;
idmaxx ((long)6);
idminx ((long)-6);
idmaxy ((long)6);
idminy ((long)-6);
scale = maxx - minx;
if (scale < maxy - miny)
scale = maxy - miny;
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.