134 lines
2.0 KiB
C
Executable File
134 lines
2.0 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 "@(#)subr.c 1.2 90/11/01 SMI" /* SVr4.0 1.1 */
|
|
|
|
/*
|
|
* Copyright (c) 1980 Regents of the University of California.
|
|
* All rights reserved. The Berkeley software License Agreement
|
|
* specifies the terms and conditions for redistribution.
|
|
*/
|
|
|
|
/*
|
|
* Copyright (c) 1983, 1984 1985, 1986, 1987, 1988, Sun Microsystems, Inc.
|
|
* All Rights Reserved.
|
|
*/
|
|
|
|
|
|
#include <stdio.h>
|
|
#include "con.h"
|
|
abval(q)
|
|
{
|
|
return (q>=0 ? q : -q);
|
|
}
|
|
|
|
xconv (xp)
|
|
{
|
|
/* x position input is -2047 to +2047, output must be 0 to PAGSIZ*HORZRES */
|
|
xp += 2048;
|
|
/* the computation is newx = xp*(PAGSIZ*HORZRES)/4096 */
|
|
return (xoffset + xp /xscale);
|
|
}
|
|
|
|
yconv (yp)
|
|
{
|
|
/* see description of xconv */
|
|
yp += 2048;
|
|
return (yp / yscale);
|
|
}
|
|
|
|
inplot()
|
|
{
|
|
stty(OUTF, &PTTY);
|
|
spew (ACK);
|
|
}
|
|
|
|
outplot()
|
|
{
|
|
spew(ESC);
|
|
spew(ACK);
|
|
fflush(stdout);
|
|
stty(OUTF, &ITTY);
|
|
}
|
|
|
|
spew(ch)
|
|
{
|
|
if(ch == UP)putc(ESC,stdout);
|
|
putc(ch, stdout);
|
|
}
|
|
|
|
tobotleft ()
|
|
{
|
|
move(-2048,-2048);
|
|
}
|
|
reset()
|
|
{
|
|
outplot();
|
|
exit(0);
|
|
}
|
|
|
|
float
|
|
dist2 (x1, y1, x2, y2)
|
|
{
|
|
float t,v;
|
|
t = x2-x1;
|
|
v = y1-y2;
|
|
return (t*t+v*v);
|
|
}
|
|
|
|
swap (pa, pb)
|
|
int *pa, *pb;
|
|
{
|
|
int t;
|
|
t = *pa;
|
|
*pa = *pb;
|
|
*pb = t;
|
|
}
|
|
movep (xg, yg)
|
|
{
|
|
int i,ch;
|
|
if((xg == xnow) && (yg == ynow))return;
|
|
/* if we need to go to left margin, just CR */
|
|
if (xg < xnow/2)
|
|
{
|
|
spew(CR);
|
|
xnow = 0;
|
|
}
|
|
i = (xg-xnow)/HORZRES;
|
|
if(xnow < xg)ch = RIGHT;
|
|
else ch = LEFT;
|
|
xnow += i*HORZRES;
|
|
i = abval(i);
|
|
while(i--)spew(ch);
|
|
i = abval(xg-xnow);
|
|
inplot();
|
|
while(i--) spew(ch);
|
|
outplot();
|
|
i=(yg-ynow)/VERTRES;
|
|
if(ynow < yg)ch = UP;
|
|
else ch = DOWN;
|
|
ynow += i*VERTRES;
|
|
i = abval(i);
|
|
while(i--)spew(ch);
|
|
i=abval(yg-ynow);
|
|
inplot();
|
|
while(i--)spew(ch);
|
|
outplot();
|
|
xnow = xg; ynow = yg;
|
|
}
|
|
|
|
xsc(xi){
|
|
int xa;
|
|
xa = (xi - obotx) * scalex + botx;
|
|
return(xa);
|
|
}
|
|
ysc(yi){
|
|
int ya;
|
|
ya = (yi - oboty) *scaley +boty;
|
|
return(ya);
|
|
}
|