示例#1
0
static int
BitmapOpenBitmap (FontPathElementPtr fpe, FontPtr *ppFont, int flags, 
		  FontEntryPtr entry, char *fileName, 
		  fsBitmapFormat format, fsBitmapFormatMask fmask,
		  FontPtr non_cachable_font) /* We don't do licensing */
{
    FontFilePtr	file;
    FontPtr     pFont;
    int         i;
    int         ret;
    int         bit,
                byte,
                glyph,
                scan,
		image;

    i = BitmapGetRenderIndex(entry->u.bitmap.renderer);
    file = FontFileOpen (fileName);
    if (!file)
	return BadFontName;
    if (!(pFont = CreateFontRec())) {
	fprintf(stderr, "Error: Couldn't allocate pFont (%ld)\n",
		(unsigned long)sizeof(FontRec));
	FontFileClose (file);
	return AllocError;
    }
    /* set up default values */
    FontDefaultFormat(&bit, &byte, &glyph, &scan);
    /* get any changes made from above */
    ret = CheckFSFormat(format, fmask, &bit, &byte, &scan, &glyph, &image);

    /* Fill in font record. Data format filled in by reader. */
    pFont->refcnt = 0;

    ret = (*readers[i].ReadFont) (pFont, file, bit, byte, glyph, scan);

    FontFileClose (file);
    if (ret != Successful) {
	free(pFont);
    } else {
	*ppFont = pFont;
    }
    return ret;
}
示例#2
0
static int
BitmapGetInfoBitmap (FontPathElementPtr fpe, FontInfoPtr pFontInfo, 
		     FontEntryPtr entry, char *fileName)
{
    FontFilePtr file;
    int		i;
    int		ret;
    FontRendererPtr renderer;

    renderer = FontFileMatchRenderer (fileName);
    if (!renderer)
	return BadFontName;
    i = BitmapGetRenderIndex(renderer);
    file = FontFileOpen (fileName);
    if (!file)
	return BadFontName;
    ret = (*readers[i].ReadInfo) (pFontInfo, file);
    FontFileClose (file);
    return ret;
}
示例#3
0
int
main(int argc, char *argv[])
{
    FontRec font = { 0 };

    FontFilePtr input, output;

    char *input_name = NULL, *output_name = NULL;

    char *program_name;

    int bit, byte, glyph, scan;

    FontDefaultFormat(&bit, &byte, &glyph, &scan);
    program_name = argv[0];
    argc--, argv++;
    while (argc-- > 0) {
        if (argv[0][0] == '-') {
            switch (argv[0][1]) {
            case 'p':
                switch (argv[0][2]) {
                case '1':
                case '2':
                case '4':
                case '8':
                    if (argv[0][3] != '\0')
                        goto usage;
                    glyph = argv[0][2] - '0';
                    break;
                default:
                    goto usage;
                }
                break;

            case 'u':
                switch (argv[0][2]) {
                case '1':
                case '2':
                case '4':
                    if (argv[0][3] != '\0')
                        goto usage;
                    scan = argv[0][2] - '0';
                    break;
                default:
                    goto usage;
                }
                break;

            case 'm':
                if (argv[0][2] != '\0')
                    goto usage;
                bit = MSBFirst;
                break;

            case 'l':
                if (argv[0][2] != '\0')
                    goto usage;
                bit = LSBFirst;
                break;

            case 'M':
                if (argv[0][2] != '\0')
                    goto usage;
                byte = MSBFirst;
                break;

            case 'L':
                if (argv[0][2] != '\0')
                    goto usage;
                byte = LSBFirst;
                break;

            case 't':          /* attempt to make terminal fonts if possible */
                if (argv[0][2] != '\0')
                    goto usage;
                break;

            case 'i':          /* inhibit ink metric computation */
                if (argv[0][2] != '\0')
                    goto usage;
                break;
            case 'o':
                if (argv[0][2])
                    output_name = argv[0] + 2;
                else {
                    if (!argv[1])
                        goto usage;
                    argv++;
                    argc--;
                    output_name = argv[0];
                }
                break;

            case 'v':
                printf("%s\n", PACKAGE_STRING);
                exit(0);

            default:
                goto usage;
            }
        }
        else {
            if (input_name) {
 usage:
                fprintf(stderr, "%s: invalid option '%s'\n",
                        program_name, argv[0]);
                fprintf(stderr,
                        "usage: %s [-p#] [-u#] [-m] [-l] [-M] [-L] [-t] [-i] [-o pcf file] [bdf file]\n"
                        "       where # for -p is 1, 2, 4, or 8\n"
                        "       and   # for -u is 1, 2, or 4\n",
                        program_name);
                exit(1);
            }
            input_name = argv[0];
        }
        argv++;
    }
    if (input_name) {
        input = FontFileOpen(input_name);
        if (!input) {
            fprintf(stderr, "%s: can't open bdf source file %s\n",
                    program_name, input_name);
            exit(1);
        }
    }
    else
        input = FontFileOpenFd(STDIN_FILENO);
    if (bdfReadFont(&font, input, bit, byte, glyph, scan) != Successful) {
        fprintf(stderr, "%s: bdf input, %s, corrupt\n",
                program_name, input_name ? input_name : "<stdin>");
        exit(1);
    }
    if (output_name) {
        output = FontFileOpenWrite(output_name);
        if (!output) {
            fprintf(stderr, "%s: can't open pcf sink file %s\n",
                    program_name, output_name);
            exit(1);
        }
    }
    else
        output = FontFileOpenWriteFd(STDOUT_FILENO);
    if (pcfWriteFont(&font, output) != Successful) {
        fprintf(stderr, "%s: can't write pcf file %s\n",
                program_name, output_name ? output_name : "<stdout>");
        if (output_name)
            remove(output_name);
        exit(1);
    }
    else
        FontFileClose(output);
    return (0);
}