summaryrefslogtreecommitdiff
path: root/usr/src/ucbcmd/plot/libplot/aed/subr.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/ucbcmd/plot/libplot/aed/subr.c')
-rw-r--r--usr/src/ucbcmd/plot/libplot/aed/subr.c105
1 files changed, 105 insertions, 0 deletions
diff --git a/usr/src/ucbcmd/plot/libplot/aed/subr.c b/usr/src/ucbcmd/plot/libplot/aed/subr.c
new file mode 100644
index 0000000000..57ea924424
--- /dev/null
+++ b/usr/src/ucbcmd/plot/libplot/aed/subr.c
@@ -0,0 +1,105 @@
+/* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */
+/* All Rights Reserved */
+
+
+#ident "%Z%%M% %I% %E% SMI" /* SVr4.0 1.1 */
+
+/*
+ * Copyright (c) 1983, 1984 1985, 1986, 1987, 1988, Sun Microsystems, Inc.
+ * All Rights Reserved.
+ */
+
+/*
+ * Copyright (c) 1980 Regents of the University of California.
+ * All rights reserved. The Berkeley software License Agreement
+ * specifies the terms and conditions for redistribution.
+ */
+
+
+#include "aed.h"
+
+/*
+ * The following table is used to convert numbers to hex. We cannot use
+ * standard C library conversion because it generates lower case letters
+ * which are bad news to the AED512.
+ */
+
+static char hex[] = "0123456789ABCDEF";
+
+/*---------------------------------------------------------
+ * This is a local routine that converts an integer to a string
+ * of hexadecimal characters.
+ *
+ * Results: None.
+ *
+ * Side Effects:
+ * The string contains the value of the low-order nchars 4-bit chunks
+ * of val, as represented in hexadecimal. String is zero-filled.
+ *---------------------------------------------------------
+ */
+chex(val, string, nchars)
+int val; /* Integer value to be converted. */
+char *string; /* Pointer to area for converted result. */
+int nchars; /* Number of characters to be converted. */
+{
+ string = &(string[nchars]);
+ *string = '\0';
+ for (; nchars>0 ; nchars--)
+ {
+ *(--string) = hex[val & 017];
+ val >>= 4;
+ }
+}
+
+/*---------------------------------------------------------
+ * This local routine outputs an x-y coordinate pair in the standard
+ * format required by the AED display.
+ *
+ * Results: None.
+ *
+ * Side Effects:
+ * Characters are output to the AED512 in the standard way required
+ * for values indicated by "xy20" in the user manual.
+ *
+ * Errors: None.
+ *---------------------------------------------------------
+ */
+outxy20(x, y)
+int x, y; /* The coordinates to be output. Note:
+ * these are world coordinates, not screen
+ * ones. We scale in this routine.
+ */
+{
+ char s1[4], s2[4], s3[4];
+ x = ((x - xbot) * scale)>>12;
+ y = ((y - ybot) * scale)>>12;
+ chex(((y>>8)&03) | ((x>>6)&014), s1, 1);
+ chex(x&0377, s2, 2);
+ chex(y&0377, s3, 2);
+ fprintf(stdout, "%s%s%s", s1, s2, s3);
+}
+
+/*---------------------------------------------------------
+ * This routine sets the display's current color.
+ *
+ * Results: None.
+ *
+ * Side Effects:
+ * The current color in the display is set to pcolor, if it
+ * isn't that already.
+ *---------------------------------------------------------
+ */
+setcolor(pcolor)
+char *pcolor; /* Pointer to a string giving the desired
+ * color in hexadecimal.
+ */
+{
+ static char curcolor[] = "xx";
+ if ((pcolor[0] != curcolor[0]) || (pcolor[1] != curcolor[1]))
+ {
+ curcolor[0] = pcolor[0];
+ curcolor[1] = pcolor[1];
+ putc('L', stdout);
+ fputs(curcolor, stdout);
+ }
+}