Annotation of 43BSDTahoe/new/X/xfd/xfd.c, revision 1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.