1 /*-
2 * Copyright (c) 1983, 1993
3 * The Regents of the University of California. All rights reserved.
4 *
5 * %sccs.include.proprietary.c%
6 */
7
8 #ifndef lint
9 static char sccsid[] = "@(#)subr.c 8.1 (Berkeley) 06/04/93";
10 #endif /* not lint */
11
12 #include "aed.h"
13
14 /*
15 * The following table is used to convert numbers to hex. We cannot use
16 * standard C library conversion because it generates lower case letters
17 * which are bad news to the AED512.
18 */
19
20 static char hex[] = "0123456789ABCDEF";
21
22 /*---------------------------------------------------------
23 * This is a local routine that converts an integer to a string
24 * of hexadecimal characters.
25 *
26 * Results: None.
27 *
28 * Side Effects:
29 * The string contains the value of the low-order nchars 4-bit chunks
30 * of val, as represented in hexadecimal. String is zero-filled.
31 *---------------------------------------------------------
32 */
chex(val,string,nchars)33 chex(val, string, nchars)
34 int val; /* Integer value to be converted. */
35 char *string; /* Pointer to area for converted result. */
36 int nchars; /* Number of characters to be converted. */
37 {
38 string = &(string[nchars]);
39 *string = '\0';
40 for (; nchars>0 ; nchars--)
41 {
42 *(--string) = hex[val & 017];
43 val >>= 4;
44 }
45 }
46
47 /*---------------------------------------------------------
48 * This local routine outputs an x-y coordinate pair in the standard
49 * format required by the AED display.
50 *
51 * Results: None.
52 *
53 * Side Effects:
54 * Characters are output to the AED512 in the standard way required
55 * for values indicated by "xy20" in the user manual.
56 *
57 * Errors: None.
58 *---------------------------------------------------------
59 */
outxy20(x,y)60 outxy20(x, y)
61 int x, y; /* The coordinates to be output. Note:
62 * these are world coordinates, not screen
63 * ones. We scale in this routine.
64 */
65 {
66 char s1[4], s2[4], s3[4];
67 x = ((x - xbot) * scale)>>12;
68 y = ((y - ybot) * scale)>>12;
69 chex(((y>>8)&03) | ((x>>6)&014), s1, 1);
70 chex(x&0377, s2, 2);
71 chex(y&0377, s3, 2);
72 fprintf(stdout, "%s%s%s", s1, s2, s3);
73 }
74
75 /*---------------------------------------------------------
76 * This routine sets the display's current color.
77 *
78 * Results: None.
79 *
80 * Side Effects:
81 * The current color in the display is set to pcolor, if it
82 * isn't that already.
83 *---------------------------------------------------------
84 */
setcolor(pcolor)85 setcolor(pcolor)
86 char *pcolor; /* Pointer to a string giving the desired
87 * color in hexadecimal.
88 */
89 {
90 static char curcolor[] = "xx";
91 if ((pcolor[0] != curcolor[0]) || (pcolor[1] != curcolor[1]))
92 {
93 curcolor[0] = pcolor[0];
94 curcolor[1] = pcolor[1];
95 putc('L', stdout);
96 fputs(curcolor, stdout);
97 }
98 }
99