xref: /csrg-svn/lib/libplot/t300/subr.c (revision 61401)
148521Sbostic /*-
2*61401Sbostic  * Copyright (c) 1983, 1993
3*61401Sbostic  *	The Regents of the University of California.  All rights reserved.
448521Sbostic  *
548521Sbostic  * %sccs.include.proprietary.c%
648521Sbostic  */
748521Sbostic 
813322Ssam #ifndef lint
9*61401Sbostic static char sccsid[] = "@(#)subr.c	8.1 (Berkeley) 06/04/93";
1048521Sbostic #endif /* not lint */
1113322Ssam 
1213322Ssam #include <stdio.h>
1313322Ssam #include "con.h"
abval(q)1413322Ssam abval(q)
1513322Ssam {
1613322Ssam 	return (q>=0 ? q : -q);
1713322Ssam }
1813322Ssam 
xconv(xp)1913322Ssam xconv (xp)
2013322Ssam {
2113322Ssam 	/* x position input is -2047 to +2047, output must be 0 to PAGSIZ*HORZRES */
2213322Ssam 	xp += 2048;
2313322Ssam 	/* the computation is newx = xp*(PAGSIZ*HORZRES)/4096 */
2413322Ssam 	return (xoffset + xp /xscale);
2513322Ssam }
2613322Ssam 
yconv(yp)2713322Ssam yconv (yp)
2813322Ssam {
2913322Ssam 	/* see description of xconv */
3013322Ssam 	yp += 2048;
3113322Ssam 	return (yp / yscale);
3213322Ssam }
3313322Ssam 
inplot()3413322Ssam inplot()
3513322Ssam {
3613322Ssam 	stty(OUTF, &PTTY);
3713322Ssam 	spew (ACK);
3813322Ssam }
3913322Ssam 
outplot()4013322Ssam outplot()
4113322Ssam {
4213322Ssam 	spew(ESC);
4313322Ssam 	spew(ACK);
4413322Ssam 	fflush(stdout);
4513322Ssam 	stty(OUTF, &ITTY);
4613322Ssam }
4713322Ssam 
spew(ch)4813322Ssam spew(ch)
4913322Ssam {
5013322Ssam 	if(ch == UP)putc(ESC,stdout);
5113322Ssam 	putc(ch, stdout);
5213322Ssam }
5313322Ssam 
tobotleft()5413322Ssam tobotleft ()
5513322Ssam {
5613322Ssam 	move(-2048,-2048);
5713322Ssam }
reset()5813322Ssam reset()
5913322Ssam {
6013322Ssam 	outplot();
6113322Ssam 	exit();
6213322Ssam }
6313322Ssam 
6457885Storek double
dist2(x1,y1,x2,y2)6513322Ssam dist2 (x1, y1, x2, y2)
6613322Ssam {
6713322Ssam 	float t,v;
6813322Ssam 	t = x2-x1;
6913322Ssam 	v = y1-y2;
7013322Ssam 	return (t*t+v*v);
7113322Ssam }
7213322Ssam 
swap(pa,pb)7313322Ssam swap (pa, pb)
7413322Ssam int *pa, *pb;
7513322Ssam {
7613322Ssam 	int t;
7713322Ssam 	t = *pa;
7813322Ssam 	*pa = *pb;
7913322Ssam 	*pb = t;
8013322Ssam }
movep(xg,yg)8113322Ssam movep (xg, yg)
8213322Ssam {
8313322Ssam 	int i,ch;
8413322Ssam 	if((xg == xnow) && (yg == ynow))return;
8513322Ssam 	/* if we need to go to left margin, just CR */
8613322Ssam 	if (xg < xnow/2)
8713322Ssam 	{
8813322Ssam 		spew(CR);
8913322Ssam 		xnow = 0;
9013322Ssam 	}
9113322Ssam 	i = (xg-xnow)/HORZRES;
9213322Ssam 	if(xnow < xg)ch = RIGHT;
9313322Ssam 	else ch = LEFT;
9413322Ssam 	xnow += i*HORZRES;
9513322Ssam 	i = abval(i);
9613322Ssam 	while(i--)spew(ch);
9713322Ssam 	i = abval(xg-xnow);
9813322Ssam 	inplot();
9913322Ssam 	while(i--) spew(ch);
10013322Ssam 	outplot();
10113322Ssam 	i=(yg-ynow)/VERTRES;
10213322Ssam 	if(ynow < yg)ch = UP;
10313322Ssam 	else ch = DOWN;
10413322Ssam 	ynow += i*VERTRES;
10513322Ssam 	i = abval(i);
10613322Ssam 	while(i--)spew(ch);
10713322Ssam 	i=abval(yg-ynow);
10813322Ssam 	inplot();
10913322Ssam 	while(i--)spew(ch);
11013322Ssam 	outplot();
11113322Ssam 	xnow = xg; ynow = yg;
11213322Ssam }
11313322Ssam 
xsc(xi)11413322Ssam xsc(xi){
11513322Ssam 	int xa;
11613322Ssam 	xa = (xi - obotx) * scalex + botx;
11713322Ssam 	return(xa);
11813322Ssam }
ysc(yi)11913322Ssam ysc(yi){
12013322Ssam 	int ya;
12113322Ssam 	ya = (yi - oboty) *scaley +boty;
12213322Ssam 	return(ya);
12313322Ssam }
124