#include <X11/X.h>
#include <X11/Xproto.h>
#include "fontmisc.h"
#include "fontstruct.h"
#include "fntfilio.h"
#include "fntfil.h"
#include "bdfint.h"
#include "pcf.h"
#include <stdio.h>
#include <X11/Xos.h>
int
main (int argc, char *argv[])
{
FontRec font;
FontFilePtr input, output;
char *input_name = 0, *output_name = 0;
char *program_name;
int bit, byte, glyph, scan;
bzero(&font, sizeof(FontRec));
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':
if (argv[0][2] != '\0')
goto usage;
break;
case 'i':
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;
default:
goto usage;
}
} else {
if (input_name)
{
usage:
fprintf(stderr,
"usage: %s [-p#] [-u#] [-m] [-l] [-M] [-L] [-t] [-i] [-o pcf file] [bdf file]\n",
program_name);
fprintf(stderr,
" where # for -p is 1, 2, 4, or 8\n");
fprintf(stderr,
" and # for -s is 1, 2, or 4\n");
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 (0);
if (bdfReadFont (&font, input, bit, byte, glyph, scan) != Successful)
{
fprintf (stderr, "%s: bdf input, %s, corrupt\n",
program_name, input_name);
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 (1);
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)
unlink (output_name);
exit (1);
}
else
FontFileClose (output);
return (0);
}