diff options
| author | stevel@tonic-gate <none@none> | 2005-06-14 00:00:00 -0700 | 
|---|---|---|
| committer | stevel@tonic-gate <none@none> | 2005-06-14 00:00:00 -0700 | 
| commit | 7c478bd95313f5f23a4c958a745db2134aa03244 (patch) | |
| tree | c871e58545497667cbb4b0a4f2daf204743e1fe7 /usr/src/lib/libplot/t300s/common/subr.c | |
| download | illumos-gate-7c478bd95313f5f23a4c958a745db2134aa03244.tar.gz | |
OpenSolaris Launch
Diffstat (limited to 'usr/src/lib/libplot/t300s/common/subr.c')
| -rw-r--r-- | usr/src/lib/libplot/t300s/common/subr.c | 226 | 
1 files changed, 226 insertions, 0 deletions
| diff --git a/usr/src/lib/libplot/t300s/common/subr.c b/usr/src/lib/libplot/t300s/common/subr.c new file mode 100644 index 0000000000..fa7bb487b5 --- /dev/null +++ b/usr/src/lib/libplot/t300s/common/subr.c @@ -0,0 +1,226 @@ +/* + * CDDL HEADER START + * + * The contents of this file are subject to the terms of the + * Common Development and Distribution License, Version 1.0 only + * (the "License").  You may not use this file except in compliance + * with the License. + * + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE + * or http://www.opensolaris.org/os/licensing. + * See the License for the specific language governing permissions + * and limitations under the License. + * + * When distributing Covered Code, include this CDDL HEADER in each + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. + * If applicable, add the following below this CDDL HEADER, with the + * fields enclosed by brackets "[]" replaced with your own identifying + * information: Portions Copyright [yyyy] [name of copyright owner] + * + * CDDL HEADER END + */ +/*	Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T	*/ +/*	  All Rights Reserved  	*/ + + +/* + * Copyright 2005 Sun Microsystems, Inc.  All rights reserved. + * Use is subject to license terms. + */ + +#pragma ident	"%Z%%M%	%I%	%E% SMI"	/* SVr4.0 1.3	*/ +/*LINTLIBRARY*/ + +#include <signal.h> +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <plot.h> +#include "con.h" + +static void +delay(void) +{ +	int i; +	for (i = 0; i < 2; i++) { +		(void) ioctl(OUTF, TCSBRK, 1); +	} +} + +int +xconv(int 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 (int)(xoffset + xp / xscale); +} + +int +yconv(int yp) +{ +	/* see description of xconv */ +	yp += 2048; +	return (int)(yp / yscale); +} + +void +inplot(void) +{ +	spew(ESC); +	spew(INPLOT); +} + +void +outplot(void) +{ +	spew(ESC); +	spew(ACK); +	spew(ESC); +	spew(ACK); +	(void) fflush(stdout); +} + +void +spew(char ch) +{ +	(void) putc(ch, stdout); +} + +void +tobotleft(void) +{ +	move(-2048, -2048); +} + +void +reset(void) +{ +	struct termio ITTY; +	(void) signal(SIGINT, SIG_IGN); +	outplot(); +	(void) ioctl(OUTF, TCSETAW, &ITTY); +	_exit(0); +} + +float +dist2(int x1, int y1, int x2, int y2) +{ +	float t, v; +	t = x2 - x1; +	v = y1 - y2; +	return (t * t + v * v); +} + +void +swap(int *pa, int *pb) +{ +	int t; +	t = *pa; +	*pa = *pb; +	*pb = t; +} + +#define	DOUBLE 010 +#define	ADDR 0100 +#define	COM 060 +#define	MAXX 070 +#define	MAXY 07 +#define	SPACES 7 + +void +movep(int ix, int iy) +{ +	int dx, dy, remx, remy, pts, i; +	int xd, yd; +	char c, addr, command; +	if ((xnow == ix) && (ynow == iy)) +		return; +	inplot(); +	dx = ix - xnow; +	dy = iy - ynow; +	command = COM|PENUP|((dx < 0) << 1)|(dy < 0); +	dx = abs(dx); +	dy = abs(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); +		delay(); +		while (i--) { +			spew(addr); +			delay(); +		} +	} +	if (xd != yd) { +		if (xd > pts) { +			i = xd - pts; +			addr = ADDR|MAXX; +		} else { +			i = yd - pts; +			addr = ADDR|MAXY; +		} +		c = command|DOUBLE; +		spew(c); +		delay(); +		while (i--) { +			spew(addr); +			delay(); +		} +	} +	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); +		delay(); +		spew(addr); +		delay(); +	} +	if ((remx > 0) || (remy > 0)) { +		spew(command); +		delay(); +		spew(ADDR|remx << 3|remy); +		delay(); +	} +	xnow = ix; +	ynow = iy; +	outplot(); +} + +int +xsc(int xi) +{ +	int xa; +	xa = (int)((xi - obotx) * scalex + botx); +	return (xa); +} + +int +ysc(int yi) +{ +	int ya; +	ya = (int)((yi - oboty) * scaley + boty); +	return (ya); +} | 
