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