159 lines
2.6 KiB
C
Executable File
159 lines
2.6 KiB
C
Executable File
/* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
|
|
/* All Rights Reserved */
|
|
|
|
/* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T */
|
|
/* The copyright notice above does not evidence any */
|
|
/* actual or intended publication of such source code. */
|
|
|
|
#ident "@(#)driver.c 1.2 92/07/22 SMI"
|
|
#include <stdio.h>
|
|
#include <math.h>
|
|
#include <errno.h>
|
|
|
|
float deltx = 4095.0;
|
|
float delty = 4095.0;
|
|
|
|
main(argc,argv) char **argv; {
|
|
int std=1;
|
|
FILE *fin;
|
|
|
|
while(argc-- > 1) {
|
|
if(*argv[1] == '-')
|
|
switch(argv[1][1]) {
|
|
case 'l':
|
|
deltx = atoi(&argv[1][2]) - 1;
|
|
break;
|
|
case 'w':
|
|
delty = atoi(&argv[1][2]) - 1;
|
|
break;
|
|
}
|
|
|
|
else {
|
|
std = 0;
|
|
if ((fin = fopen(argv[1], "r")) == NULL) {
|
|
fprintf(stderr, "can't open %s\n", argv[1]);
|
|
exit(1);
|
|
}
|
|
fplt(fin);
|
|
}
|
|
argv++;
|
|
}
|
|
if (std)
|
|
fplt( stdin );
|
|
exit(0);
|
|
}
|
|
|
|
|
|
fplt(fin) FILE *fin; {
|
|
int c;
|
|
char s[256];
|
|
int xi,yi,x0,y0,x1,y1,r,dx,n,i;
|
|
int pat[256];
|
|
|
|
openpl();
|
|
while((c=getc(fin)) != EOF){
|
|
switch(c){
|
|
case 'm':
|
|
xi = getsi(fin);
|
|
yi = getsi(fin);
|
|
move(xi,yi);
|
|
break;
|
|
case 'l':
|
|
x0 = getsi(fin);
|
|
y0 = getsi(fin);
|
|
x1 = getsi(fin);
|
|
y1 = getsi(fin);
|
|
line(x0,y0,x1,y1);
|
|
break;
|
|
case 't':
|
|
getsd(s,fin);
|
|
label(s);
|
|
break;
|
|
case 'e':
|
|
erase();
|
|
break;
|
|
case 'p':
|
|
xi = getsi(fin);
|
|
yi = getsi(fin);
|
|
point(xi,yi);
|
|
break;
|
|
case 'n':
|
|
xi = getsi(fin);
|
|
yi = getsi(fin);
|
|
cont(xi,yi);
|
|
break;
|
|
case 's':
|
|
x0 = getsi(fin);
|
|
y0 = getsi(fin);
|
|
x1 = getsi(fin);
|
|
y1 = getsi(fin);
|
|
space(x0,y0,x1,y1);
|
|
break;
|
|
case 'a':
|
|
xi = getsi(fin);
|
|
yi = getsi(fin);
|
|
x0 = getsi(fin);
|
|
y0 = getsi(fin);
|
|
x1 = getsi(fin);
|
|
y1 = getsi(fin);
|
|
arc(xi,yi,x0,y0,x1,y1);
|
|
break;
|
|
case 'c':
|
|
xi = getsi(fin);
|
|
yi = getsi(fin);
|
|
r = getsi(fin);
|
|
circle(xi,yi,r);
|
|
break;
|
|
case 'f':
|
|
getsd(s,fin);
|
|
linemod(s);
|
|
break;
|
|
case 'd':
|
|
xi = getsi(fin);
|
|
yi = getsi(fin);
|
|
dx = getsi(fin);
|
|
n = getsi(fin);
|
|
for(i=0; i<n; i++)pat[i] = getsi(fin);
|
|
dot(xi,yi,dx,n,pat);
|
|
break;
|
|
}
|
|
}
|
|
closepl();
|
|
}
|
|
getsi(fin) FILE *fin; { /* get an integer stored in 2 ascii bytes. */
|
|
short a, b;
|
|
if((b = getc(fin)) == EOF)
|
|
return(EOF);
|
|
if((a = getc(fin)) == EOF)
|
|
return(EOF);
|
|
a = a<<8;
|
|
return(a|b);
|
|
}
|
|
getsd(s,fin) char *s; FILE *fin; {
|
|
for( ; *s = getc(fin); s++)
|
|
if(*s == '\n')
|
|
break;
|
|
*s = '\0';
|
|
return;
|
|
}
|
|
|
|
|
|
matherr(x)
|
|
struct exception *x;
|
|
{
|
|
if(x->type==DOMAIN)
|
|
{errno=EDOM;
|
|
if(!strcmp("log",x->name))x->retval = (-HUGE);
|
|
else x->retval = 0;
|
|
return(1);
|
|
}
|
|
else if ((x->type)==SING)
|
|
{errno=EDOM;
|
|
x->retval = (-HUGE);
|
|
return(1);
|
|
}
|
|
else return(0);
|
|
}
|
|
|
|
|