V7/usr/src/libplot/t300s.c.a
earc.c ) arc(){
}
circle.c ) circle(){
}
close.c ) T #include <stdio.h>
closevt(){
closepl();
}
closepl(){
fflush(stdout);
reset();
}
dot.c ) dot(){
}
<erase.c ) f #include "con.h"
erase(){
int i;
for(i=0; i<11*(VERTRESP/VERTRES); i++)
spew(DOWN);
return;
}
label.c ) | #include "con.h"
label(s)
char *s;
{
int i,c;
while((c = *s++) != '\0'){
xnow =+ HORZRES;
spew(c);
}
return;
}
line.c ) #include "con.h"
line(x0,y0,x1,y1){
iline(xconv(xsc(x0)),yconv(ysc(y0)),xconv(xsc(x1)),yconv(ysc(y1)));
return;
}
cont(x0,y0){
iline(xnow,ynow,xconv(xsc(x0)),yconv(ysc(y0)));
return;
}
iline(cx0,cy0,cx1,cy1){
int maxp,tt,j,np;
char chx,chy,command;
float xd,yd;
float dist2(),sqrt();
movep(cx0,cy0);
maxp = sqrt(dist2(cx0,cy0,cx1,cy1))/2.;
xd = cx1-cx0;
yd = cy1-cy0;
command = COM|((xd<0)<<1)|(yd<0);
if(maxp == 0){
xd=0;
yd=0;
}
else {
xd =/maxp;
yd =/maxp;
}
inplot();
spew(command);
for (tt=0; tt<=maxp; tt++){
chx= cx0+xd*tt-xnow;
xnow =+ chx;
chx = abval(chx);
chy = cy0+yd*tt-ynow;
ynow =+ chy;
chy = abval(chy);
spew(ADDR|chx<<3|chy);
}
outplot();
return;
}
clinmod.c )
linemod(){
}
tmove.c ) A move(xi,yi){
movep(xconv(xsc(xi)),yconv(ysc(yi)));
return;
}
=open.c @) #
/* gsi plotting output routines */
# define DOWN 012
# define UP 013
# define LEFT 010
# define RIGHT 040
# define BEL 007
# define ACK 006
# define CR 015
# define FF 014
# define VERTRESP 48
# define HORZRESP 60.
# define HORZRES 6.
# define VERTRES 8.
/* down is line feed, up is reverse oyne feed,
left is bwckspace, right is space. 48 points per inch
vertically, 60 horizontally */
int xnow, ynow;
int ITTY[3], PTTY[3], OUTF;
float HEIGHT 6.0, WIDTH 6.0, OFFSET 0.0;
int xscale, xoffset, yscale;
float botx 0., boty 0., obotx 0., oboty 0.;
float scalex 1., scaley 1.;
openpl ()
{
int reset();
xnow = ynow = 0;
OUTF = 1;
printf("\r");
gtty(OUTF, ITTY);
signal (2, &reset);
PTTY[0] = ITTY[0];
PTTY[1] = ITTY[1];
PTTY[2] = ITTY[2] & (~ 020); /* don't map lf */
PTTY[2] =| 001; /* no delays */
/* initialize constants */
xscale = 4096./(HORZRESP * WIDTH);
yscale = 4096 /(VERTRESP * HEIGHT);
xoffset = OFFSET * HORZRESP;
return;
}
openvt(){
openpl();
}
point.c ) H #include "con.h"
point(xi,yi){
move(xi,yi);
label(".");
return;
}
space.c ) # include "con.h"
float deltx 4095.;
float delty 4095.;
space(x0,y0,x1,y1){
botx = -2047.;
boty = -2047.;
obotx = x0;
oboty = y0;
scalex = deltx/(x1-x0);
scaley = delty/(y1-y0);
}
subr.c ) #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(ESC);
spew (INPLOT);
}
outplot()
{
spew(ESC);
spew(ACK);
spew(ESC);
spew(ACK);
fflush(stdout);
stty (OUTF, ITTY);
}
spew(ch)
{
putc(ch, stdout);
}
tobotleft ()
{
move(-2048,-2048);
}
reset()
{
outplot();
exit();
}
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;
}
#define DOUBLE 010
#define ADDR 0100
#define COM 060
#define MAXX 070
#define MAXY 07
extern xnow,ynow;
#define SPACES 7
movep(ix,iy){
int dx,dy,remx,remy,pts,i;
int xd,yd;
int addr,command;
char c;
if(xnow == ix && ynow == iy)return;
inplot();
dx = ix-xnow;
dy = iy-ynow;
command = COM|PENUP|((dx<0)<<1)|(dy<0);
dx = abval(dx);
dy = abval(dy);
xd = dx/(SPACES*2);
yd = dy/(SPACES*2);
pts = xd<yd?xd:yd;
if((i=pts)>0){
c=command|DOUBLE;
addr=ADDR;
if(xd>0)addr=|MAXX;
if(yd>0)addr=|MAXY;
spew(c);
while(i--){
spew(addr);
}
}
if(xd!=yd){
if(xd>pts){
i=xd-pts;
addr=ADDR|MAXX;
}
else{
i=yd-pts;
addr=ADDR|MAXY;
}
c=command|DOUBLE;
spew(c);
while(i--){
spew(addr);
}
}
remx=dx-xd*SPACES*2;
remy=dy-yd*SPACES*2;
addr=ADDR;
i = 0;
if(remx>7){
i=1;
addr=|MAXX;
remx =- 7;
}
if(remy>7){
i=1;
addr=|MAXY;
remy =- 7;
}
while(i--){
spew(command);
spew(addr);
}
if(remx>0||remy>0){
spew(command);
spew(ADDR|remx<<3|remy);
}
xnow=ix;
ynow=iy;
outplot();
return;
}
xsc(xi){
int xa;
xa = (xi - obotx) * scalex + botx;
return(xa);
}
ysc(yi){
int ya;
ya = (yi - oboty) *scaley +boty;
return(ya);
}
Ocon.h ) #
/* gsi plotting output routines */
# define DOUBLE 010
#define ADDR 0100
#define COM 060
#define PENUP 04
#define MAXX 070
#define MAXY 07
#define SPACES 7
# define DOWN 012
# define UP 013
# define LEFT 010
# define RIGHT 040
# define BEL 007
# define ESC 033
# define ACK 006
# define INPLOT 'P'
# define CR 015
# define FF 014
# define VERTRESP 48
# define HORZRESP 60.
# define VERTRES 8.
# define HORZRES 6.
/* down is line feed, up is reverse line feed,
left is backspace, right is space. 48 points per inch
vertically, 60 horizontally */
extern int xnow, ynow;
extern int ITTY[3], PTTY[3], OUTF;
extern float HEIGHT, WIDTH, OFFSET;
extern int xscale, xoffset, yscale;
extern float botx, boty, obotx, oboty, scalex,scaley;
box.c r box(x0, y0, x1, y1)
{
move(x0, y0);
cont(x0, y1);
cont(x1, y1);
cont(x1, y0);
cont(x0, y0);
move(x1, y1);
}