|
|
1.1 ! root 1: #include <X/mit-copyright.h> ! 2: ! 3: /* Copyright 1985, Massachusetts Institute of Technology */ ! 4: #ifndef lint ! 5: static char *rcsid_xfd_c = "$Header: xfd.c,v 10.8 86/02/01 15:58:54 tony Rel $"; ! 6: #endif ! 7: ! 8: #include <X/Xlib.h> ! 9: #include <stdio.h> ! 10: #include <strings.h> ! 11: ! 12: short gray_bits[16] = { ! 13: 0xaaaa, 0x5555, 0xaaaa, 0x5555, ! 14: 0xaaaa, 0x5555, 0xaaaa, 0x5555, ! 15: 0xaaaa, 0x5555, 0xaaaa, 0x5555, ! 16: 0xaaaa, 0x5555, 0xaaaa, 0x5555}; ! 17: ! 18: ! 19: char chars[9]; ! 20: int last_line; ! 21: ! 22: main(argc, argv) ! 23: int argc; ! 24: char **argv; ! 25: { ! 26: Window w; ! 27: FontInfo *fontInfo; ! 28: int width; ! 29: char *fontname = "vtsingle"; ! 30: register char *option; ! 31: char *border_color; ! 32: char *back_color; ! 33: char *fore_color; ! 34: int border_width; ! 35: int reverse = 0; ! 36: char *geometry; /* user supplied geometry spec */ ! 37: char def[32]; /* default size */ ! 38: int defwidth; ! 39: int defheight; ! 40: char display[128]; ! 41: register int i; ! 42: OpaqueFrame window; /* frame for the window */ ! 43: Pixmap border_pixmap; ! 44: int background; /* color of background */ ! 45: int foreground; /* color of graph */ ! 46: int highlight; /* color of text, scale */ ! 47: Color cdef; ! 48: ! 49: if ((option = XGetDefault(argv[0],"ReverseVideo")) != NULL ) ! 50: if (strcmp (option, "on") == 0) ! 51: reverse = 1; ! 52: if ((option = XGetDefault(argv[0],"BorderWidth")) != NULL) ! 53: border_width = atoi(option); ! 54: if ((border_color = XGetDefault(argv[0],"Border")) == NULL) ! 55: border_color = XGetDefault(argv[0],"BorderColor"); ! 56: back_color = XGetDefault(argv[0],"Background"); ! 57: fore_color = XGetDefault(argv[0],"Foreground"); ! 58: display[0] = '\0'; ! 59: ! 60: for (i = 1; i < argc; i++) { /* Parse line */ ! 61: if (argv[i][0] == '=') { ! 62: geometry = argv[i]; ! 63: continue; ! 64: } ! 65: if (index(argv[i], ':') != NULL) { /* host:display */ ! 66: (void)strncpy(display, argv[i], sizeof(display)); ! 67: continue; ! 68: } ! 69: if (strcmp(argv[i], "-rv") == 0 || ! 70: strcmp(argv[i], "-reverse") == 0) { /* black on white */ ! 71: reverse = 1; ! 72: continue; ! 73: } ! 74: if (strcmp(argv[i], "-fw") == 0 || ! 75: strcmp(argv[i], "-forward") == 0) { /* white on black */ ! 76: reverse = 0; ! 77: continue; ! 78: } ! 79: if (strcmp(argv[i], "-bw") == 0 || ! 80: strcmp(argv[i], "-border") == 0) { /* border width */ ! 81: if (++i >= argc) usage(argv[0]); ! 82: border_width = atoi(argv[i]); ! 83: continue; ! 84: } ! 85: if (strcmp(argv[i], "-bd") == 0 || ! 86: strcmp(argv[i], "-color") == 0) { /* border color */ ! 87: if (++i >= argc) usage(argv[0]); ! 88: border_color = argv[i]; ! 89: continue; ! 90: } ! 91: if (strcmp(argv[i], "-fg") == 0 || ! 92: strcmp(argv[i], "-foreground") == 0) { /* foreground color */ ! 93: if (++i >= argc) usage(argv[0]); ! 94: fore_color = argv[i]; ! 95: continue; ! 96: } ! 97: if (strcmp(argv[i], "-bg") == 0 || ! 98: strcmp(argv[i], "-background") == 0) { /* background color */ ! 99: if (++i >= argc) usage(argv[0]); ! 100: back_color = argv[i]; ! 101: continue; ! 102: } ! 103: if (argv[i][0] == '-') usage (argv[0]); ! 104: fontname = argv[i]; ! 105: } ! 106: if (!XOpenDisplay(display)) { ! 107: fprintf (stderr, "%s: Could not open display %s!\n", argv[0], display); ! 108: exit(1); ! 109: } ! 110: if (!(fontInfo = XOpenFont (fontname))) { ! 111: fprintf (stderr, "%s: Could not open font %s!\n", argv[0], fontname); ! 112: exit(1); ! 113: } ! 114: last_line = (unsigned char)(fontInfo->lastchar)/8; ! 115: width = ComputeWidth (fontInfo); ! 116: ! 117: if (border_color && DisplayCells() > 2 && ! 118: XParseColor(border_color, &cdef) && XGetHardwareColor(&cdef)) ! 119: border_pixmap = XMakeTile(cdef.pixel); ! 120: else if (border_color && strcmp(border_color, "black") == 0) ! 121: border_pixmap = BlackPixmap; ! 122: else if (border_color && strcmp(border_color, "white") == 0) ! 123: border_pixmap = WhitePixmap; ! 124: else ! 125: border_pixmap = XMakePixmap (XStoreBitmap (16, 16, gray_bits), ! 126: BlackPixel, WhitePixel); ! 127: ! 128: if (back_color && DisplayCells() > 2 && ! 129: XParseColor(back_color, &cdef) && XGetHardwareColor(&cdef)) { ! 130: background = cdef.pixel; ! 131: } else if (back_color && strcmp(back_color, "white") == 0) { ! 132: background = WhitePixel; ! 133: reverse = 0; ! 134: } else if (back_color && strcmp(back_color, "black") == 0) { ! 135: background = BlackPixel; ! 136: reverse = 0; ! 137: } else ! 138: background = BlackPixel; ! 139: ! 140: if (fore_color && DisplayCells() > 2 && ! 141: XParseColor(fore_color, &cdef) && XGetHardwareColor(&cdef)) { ! 142: foreground = cdef.pixel; ! 143: } else if (fore_color && strcmp(fore_color, "black") == 0) { ! 144: foreground = BlackPixel; ! 145: reverse = 0; ! 146: } else if (fore_color && strcmp(fore_color, "white") == 0) { ! 147: foreground = WhitePixel; ! 148: reverse = 0; ! 149: } else ! 150: foreground = WhitePixel; ! 151: ! 152: if (reverse) { ! 153: highlight = background; ! 154: background = foreground; ! 155: foreground = highlight; ! 156: } ! 157: ! 158: window.bdrwidth = border_width; ! 159: window.border = border_pixmap; ! 160: window.background = XMakeTile(background); ! 161: ! 162: defwidth = width + 10; ! 163: defheight = fontInfo->height * (last_line + 1) + 10; ! 164: (void) sprintf(def, "=%dx%d+300+300", defwidth, defheight); ! 165: w = XCreate ("Font Display", argv[0], geometry, def, &window, ! 166: defwidth, defheight); ! 167: ! 168: if (!w) { ! 169: fprintf (stderr, "XCreateWindow failed\n"); ! 170: exit(1); ! 171: } ! 172: XSelectInput (w, ExposeWindow | ButtonPressed); ! 173: XMapWindow (w); ! 174: while (1) { ! 175: XEvent event; ! 176: int i, j; ! 177: XWindowEvent (w, ExposeWindow | ButtonPressed, &event); ! 178: if(event.type == ButtonPressed) exit(0); ! 179: for (i=0;i<=last_line;i++) { ! 180: for (j=0;j<8;j++) ! 181: chars[j] = (char)((8*i)+j); ! 182: XText (w, 5, 5+(i*fontInfo->height), chars, 8, ! 183: fontInfo->id, foreground, background); ! 184: } ! 185: } ! 186: } ! 187: ! 188: usage (program) ! 189: char *program; ! 190: { ! 191: fprintf(stderr, ! 192: "usage: %s [host:display] [=geom] [-fw] [-rv] [-bw] [-bd] [-fg] [-bg] fontname\n", program); ! 193: exit(1); ! 194: } ! 195: ! 196: ComputeWidth (fontInfo) ! 197: FontInfo *fontInfo; ! 198: { ! 199: int maxwidth, i, j; ! 200: ! 201: /* Horrible hack needed for first line because line starts ! 202: with \0, and XStringWidth considers \0 to terminate string */ ! 203: for (j=1;j<8;j++) ! 204: chars[j] = j; ! 205: maxwidth = XStringWidth (&chars[1], fontInfo, 0, 0); ! 206: /* add the width of the '\0' character, if it has one */ ! 207: if (fontInfo->firstchar == '\0') ! 208: maxwidth += (fontInfo->fixedwidth ? ! 209: fontInfo->width : fontInfo->widths[0]); ! 210: ! 211: /* now measure the width of remaining lines */ ! 212: for (i=1;i<=last_line;i++) { ! 213: int this_width; ! 214: for (j=0;j<8;j++) ! 215: chars[j] = (char)((8*i)+j); ! 216: this_width = XStringWidth (chars, fontInfo, 0, 0); ! 217: if (this_width > maxwidth) ! 218: maxwidth = this_width; ! 219: } ! 220: return (maxwidth); ! 221: } ! 222:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.