date and time created 83/06/27 14:16:36 by sam
[unix-history] / usr / src / lib / libplot / t300s / subr.c
CommitLineData
85ae2565
SL
1#ifndef lint
2static char sccsid[] = "@(#)subr.c 4.1 (Berkeley) %G%";
3#endif
4
5#include <stdio.h>
6#include "con.h"
7abval(q)
8{
9 return (q>=0 ? q : -q);
10}
11
12xconv (xp)
13{
14 /* x position input is -2047 to +2047, output must be 0 to PAGSIZ*HORZRES */
15 xp += 2048;
16 /* the computation is newx = xp*(PAGSIZ*HORZRES)/4096 */
17 return (xoffset + xp /xscale);
18}
19
20yconv (yp)
21{
22 /* see description of xconv */
23 yp += 2048;
24 return (yp / yscale);
25}
26
27inplot()
28{
29 stty(OUTF, &PTTY);
30 spew(ESC);
31 spew (INPLOT);
32}
33
34outplot()
35{
36 spew(ESC);
37 spew(ACK);
38 spew(ESC);
39 spew(ACK);
40 fflush(stdout);
41 stty (OUTF, &ITTY);
42}
43
44spew(ch)
45{
46 putc(ch, stdout);
47}
48
49tobotleft ()
50{
51 move(-2048,-2048);
52}
53reset()
54{
55 outplot();
56 exit();
57}
58
59float
60dist2 (x1, y1, x2, y2)
61{
62 float t,v;
63 t = x2-x1;
64 v = y1-y2;
65 return (t*t+v*v);
66}
67
68swap (pa, pb)
69int *pa, *pb;
70{
71 int t;
72 t = *pa;
73 *pa = *pb;
74 *pb = t;
75}
76
77#define DOUBLE 010
78#define ADDR 0100
79#define COM 060
80#define MAXX 070
81#define MAXY 07
82extern xnow,ynow;
83#define SPACES 7
84movep(ix,iy){
85 int dx,dy,remx,remy,pts,i;
86 int xd,yd;
87 int addr,command;
88 char c;
89 if(xnow == ix && ynow == iy)return;
90 inplot();
91 dx = ix-xnow;
92 dy = iy-ynow;
93 command = COM|PENUP|((dx<0)<<1)|(dy<0);
94 dx = abval(dx);
95 dy = abval(dy);
96 xd = dx/(SPACES*2);
97 yd = dy/(SPACES*2);
98 pts = xd<yd?xd:yd;
99 if((i=pts)>0){
100 c=command|DOUBLE;
101 addr=ADDR;
102 if(xd>0)addr|=MAXX;
103 if(yd>0)addr|=MAXY;
104 spew(c);
105 while(i--){
106 spew(addr);
107 }
108 }
109 if(xd!=yd){
110 if(xd>pts){
111 i=xd-pts;
112 addr=ADDR|MAXX;
113 }
114 else{
115 i=yd-pts;
116 addr=ADDR|MAXY;
117 }
118 c=command|DOUBLE;
119 spew(c);
120 while(i--){
121 spew(addr);
122 }
123 }
124 remx=dx-xd*SPACES*2;
125 remy=dy-yd*SPACES*2;
126 addr=ADDR;
127 i = 0;
128 if(remx>7){
129 i=1;
130 addr|=MAXX;
131 remx -= 7;
132 }
133 if(remy>7){
134 i=1;
135 addr|=MAXY;
136 remy -= 7;
137 }
138 while(i--){
139 spew(command);
140 spew(addr);
141 }
142 if(remx>0||remy>0){
143 spew(command);
144 spew(ADDR|remx<<3|remy);
145 }
146 xnow=ix;
147 ynow=iy;
148 outplot();
149 return;
150}
151xsc(xi){
152 int xa;
153 xa = (xi - obotx) * scalex + botx;
154 return(xa);
155}
156ysc(yi){
157 int ya;
158 ya = (yi - oboty) *scaley +boty;
159 return(ya);
160}