|
|
1.1 ! root 1: /* ! 2: * $Locker: $ ! 3: */ ! 4: static char *rcsid = "$Header: bm-convert.c,v 1.1 87/06/24 10:54:58 toddb Exp $"; ! 5: #include <stdio.h> ! 6: #include <strings.h> ! 7: ! 8: #define boolean int ! 9: ! 10: unsigned short *ReadX10BitmapFile (prefix, width, height, x_hot, y_hot) ! 11: char *prefix; /* RETURN */ ! 12: int *width, *height; /* RETURN */ ! 13: int *x_hot, *y_hot; /* RETURN */ ! 14: { ! 15: char variable[81]; ! 16: int status, value, i, data_length; ! 17: unsigned short *data; ! 18: FILE *file = stdin; ! 19: ! 20: *width = *height = -1; ! 21: *x_hot = *y_hot = -1; ! 22: while ((status = fscanf (file, "#define %80s %d\n", variable, &value))==2) ! 23: { ! 24: if (StringEndsWith (variable, "width")) ! 25: *width = value; ! 26: else if (StringEndsWith (variable, "height")) ! 27: *height = value; ! 28: else if (StringEndsWith (variable, "x_hot")) ! 29: *x_hot = value; ! 30: else if (StringEndsWith (variable, "y_hot")) ! 31: *y_hot = value; ! 32: } ! 33: ! 34: if (*width <= 0) { ! 35: fprintf (stderr, "No valid width parameter found\n"); ! 36: exit (-1); ! 37: } ! 38: ! 39: if (*height <= 0) { ! 40: fprintf (stderr, "No valid height parameter found\n"); ! 41: exit (-2); ! 42: } ! 43: ! 44: data_length = ((*width+15)/16) * *height; ! 45: data = (unsigned short *) malloc (data_length*sizeof(unsigned short)); ! 46: ! 47: status = fscanf (file, "static short %80s = { 0x%4hx", variable, ! 48: data); /* fills in 0th element of data array */ ! 49: if ((status != 2) || !StringEndsWith (variable, "bits[]")) { ! 50: fprintf (stderr, "First element of short bits array invalid or not found\n"); ! 51: exit (-3); ! 52: } ! 53: ! 54: { ! 55: int prefix_len = strlen(variable) - strlen("_bits[]"); ! 56: strncpy (prefix, variable, prefix_len); ! 57: prefix[prefix_len] = '\0'; ! 58: } ! 59: ! 60: for (i=1;i<data_length;i++) { ! 61: /* fill in i'th element of data array */ ! 62: status = fscanf (file, ", 0x%4hx", data + i); ! 63: if (status != 1) { ! 64: fprintf (stderr, "%dth short bits array element is invalid\n", i+1); ! 65: exit (-4); ! 66: } ! 67: } ! 68: return (data); ! 69: } ! 70: ! 71: WriteX11BitmapFile (prefix, width, height, x_hot, y_hot, data) ! 72: char *prefix; ! 73: int width, height, x_hot, y_hot; ! 74: unsigned short *data; ! 75: { ! 76: int i, j; ! 77: int shorts_per_line = (width + 15) / 16; ! 78: int data_length = shorts_per_line * height; ! 79: FILE *file = stdout; ! 80: boolean line_pad = ((width % 16) > 0) && ((width % 16) < 9); ! 81: ! 82: fprintf (file, "#define %s_width %d\n", prefix, width); ! 83: fprintf (file, "#define %s_height %d\n", prefix, height); ! 84: if (x_hot >= 0) ! 85: fprintf (file, "#define %s_x_hot %d\n", prefix, x_hot); ! 86: if (y_hot >= 0) ! 87: fprintf (file, "#define %s_y_hot %d\n", prefix, y_hot); ! 88: fprintf (file, "static char %s_bits[] = {", prefix); ! 89: for (i = j = 0; i < data_length; i++, j++) { ! 90: unsigned short datum = data[i]; ! 91: unsigned char b0 = datum & 0xff; ! 92: unsigned char b1 = (datum & 0xff00) >> 8; ! 93: if (j == 0) fprintf (file, "\n "); ! 94: else if ((j % 12) == 0) fprintf (file, ",\n "); ! 95: else fprintf (file, ", "); ! 96: fprintf (file, "0x%02x", b0); ! 97: if (!line_pad || ((i + 1) % shorts_per_line)) { ! 98: if ((++j % 12) == 0) fprintf (file, ",\n "); ! 99: else fprintf (file, ", "); ! 100: fprintf (file, "0x%02x", b1); ! 101: } ! 102: } ! 103: fprintf (file, "};\n"); ! 104: } ! 105: ! 106: /* StringEndsWith returns TRUE if "s" ends with "suffix", else returns FALSE */ ! 107: boolean StringEndsWith (s, suffix) ! 108: char *s, *suffix; ! 109: { ! 110: int s_len = strlen (s); ! 111: int suffix_len = strlen (suffix); ! 112: return (strcmp (s + s_len - suffix_len, suffix) == 0); ! 113: } ! 114: ! 115: main() { ! 116: char prefix[80]; ! 117: int width, height, x_hot, y_hot; ! 118: unsigned short *data = ReadX10BitmapFile (prefix, &width, &height, &x_hot, &y_hot); ! 119: WriteX11BitmapFile (prefix, width, height, x_hot, y_hot, data); ! 120: } ! 121:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.