bdftopcf.c revision fb4ebca8
129459361Smrg/* 229459361Smrg 329459361SmrgCopyright 1991, 1993, 1998 The Open Group 429459361Smrg 529459361SmrgPermission to use, copy, modify, distribute, and sell this software and its 629459361Smrgdocumentation for any purpose is hereby granted without fee, provided that 729459361Smrgthe above copyright notice appear in all copies and that both that 829459361Smrgcopyright notice and this permission notice appear in supporting 929459361Smrgdocumentation. 1029459361Smrg 1129459361SmrgThe above copyright notice and this permission notice shall be included 1229459361Smrgin all copies or substantial portions of the Software. 1329459361Smrg 1429459361SmrgTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 1529459361SmrgOR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 1629459361SmrgMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 1729459361SmrgIN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR 1829459361SmrgOTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 1929459361SmrgARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 2029459361SmrgOTHER DEALINGS IN THE SOFTWARE. 2129459361Smrg 2229459361SmrgExcept as contained in this notice, the name of The Open Group shall 2329459361Smrgnot be used in advertising or otherwise to promote the sale, use or 2429459361Smrgother dealings in this Software without prior written authorization 2529459361Smrgfrom The Open Group. 2629459361Smrg 2729459361Smrg*/ 2829459361Smrg 295dd2154eSmrg#ifdef HAVE_CONFIG_H 305dd2154eSmrg# include "config.h" 315dd2154eSmrg#endif 325dd2154eSmrg 3329459361Smrg#include <X11/X.h> 3429459361Smrg#include <X11/Xproto.h> 3529459361Smrg#include <X11/fonts/fontmisc.h> 3629459361Smrg#include <X11/fonts/fontstruct.h> 3729459361Smrg#include <X11/fonts/fntfilio.h> 3829459361Smrg#include <X11/fonts/fntfil.h> 3929459361Smrg#include <X11/fonts/bdfint.h> 4029459361Smrg#include <X11/fonts/pcf.h> 4129459361Smrg#include <stdio.h> 4229459361Smrg#include <X11/Xos.h> 4329459361Smrg 4429459361Smrgint 455dd2154eSmrgmain(int argc, char *argv[]) 4629459361Smrg{ 475dd2154eSmrg FontRec font = { 0 }; 485dd2154eSmrg 495dd2154eSmrg FontFilePtr input, output; 505dd2154eSmrg 515dd2154eSmrg char *input_name = NULL, *output_name = NULL; 5229459361Smrg 535dd2154eSmrg char *program_name; 5429459361Smrg 555dd2154eSmrg int bit, byte, glyph, scan; 565dd2154eSmrg 575dd2154eSmrg FontDefaultFormat(&bit, &byte, &glyph, &scan); 5829459361Smrg program_name = argv[0]; 5929459361Smrg argc--, argv++; 6029459361Smrg while (argc-- > 0) { 615dd2154eSmrg if (argv[0][0] == '-') { 625dd2154eSmrg switch (argv[0][1]) { 635dd2154eSmrg case 'p': 645dd2154eSmrg switch (argv[0][2]) { 655dd2154eSmrg case '1': 665dd2154eSmrg case '2': 675dd2154eSmrg case '4': 685dd2154eSmrg case '8': 695dd2154eSmrg if (argv[0][3] != '\0') 705dd2154eSmrg goto usage; 715dd2154eSmrg glyph = argv[0][2] - '0'; 725dd2154eSmrg break; 735dd2154eSmrg default: 745dd2154eSmrg goto usage; 755dd2154eSmrg } 765dd2154eSmrg break; 775dd2154eSmrg 785dd2154eSmrg case 'u': 795dd2154eSmrg switch (argv[0][2]) { 805dd2154eSmrg case '1': 815dd2154eSmrg case '2': 825dd2154eSmrg case '4': 835dd2154eSmrg if (argv[0][3] != '\0') 845dd2154eSmrg goto usage; 855dd2154eSmrg scan = argv[0][2] - '0'; 865dd2154eSmrg break; 875dd2154eSmrg default: 885dd2154eSmrg goto usage; 895dd2154eSmrg } 905dd2154eSmrg break; 915dd2154eSmrg 925dd2154eSmrg case 'm': 935dd2154eSmrg if (argv[0][2] != '\0') 945dd2154eSmrg goto usage; 955dd2154eSmrg bit = MSBFirst; 965dd2154eSmrg break; 975dd2154eSmrg 985dd2154eSmrg case 'l': 995dd2154eSmrg if (argv[0][2] != '\0') 1005dd2154eSmrg goto usage; 1015dd2154eSmrg bit = LSBFirst; 1025dd2154eSmrg break; 1035dd2154eSmrg 1045dd2154eSmrg case 'M': 1055dd2154eSmrg if (argv[0][2] != '\0') 1065dd2154eSmrg goto usage; 1075dd2154eSmrg byte = MSBFirst; 1085dd2154eSmrg break; 1095dd2154eSmrg 1105dd2154eSmrg case 'L': 1115dd2154eSmrg if (argv[0][2] != '\0') 1125dd2154eSmrg goto usage; 1135dd2154eSmrg byte = LSBFirst; 1145dd2154eSmrg break; 1155dd2154eSmrg 1165dd2154eSmrg case 't': /* attempt to make terminal fonts if possible */ 1175dd2154eSmrg if (argv[0][2] != '\0') 1185dd2154eSmrg goto usage; 1195dd2154eSmrg break; 1205dd2154eSmrg 1215dd2154eSmrg case 'i': /* inhibit ink metric computation */ 1225dd2154eSmrg if (argv[0][2] != '\0') 1235dd2154eSmrg goto usage; 1245dd2154eSmrg break; 1255dd2154eSmrg case 'o': 1265dd2154eSmrg if (argv[0][2]) 1275dd2154eSmrg output_name = argv[0] + 2; 1285dd2154eSmrg else { 1295dd2154eSmrg if (!argv[1]) 1305dd2154eSmrg goto usage; 1315dd2154eSmrg argv++; 1325dd2154eSmrg argc--; 1335dd2154eSmrg output_name = argv[0]; 1345dd2154eSmrg } 1355dd2154eSmrg break; 1365dd2154eSmrg 1375dd2154eSmrg case 'v': 1385dd2154eSmrg printf("%s\n", PACKAGE_STRING); 1395dd2154eSmrg exit(0); 1405dd2154eSmrg 1415dd2154eSmrg default: 1425dd2154eSmrg goto usage; 1435dd2154eSmrg } 1445dd2154eSmrg } 1455dd2154eSmrg else { 1465dd2154eSmrg if (input_name) { 1475dd2154eSmrg usage: 148fb4ebca8Smrg fprintf(stderr, "%s: invalid option '%s'\n", 149fb4ebca8Smrg program_name, argv[0]); 1505dd2154eSmrg fprintf(stderr, 1515dd2154eSmrg "usage: %s [-p#] [-u#] [-m] [-l] [-M] [-L] [-t] [-i] [-o pcf file] [bdf file]\n" 1525dd2154eSmrg " where # for -p is 1, 2, 4, or 8\n" 153fb4ebca8Smrg " and # for -u is 1, 2, or 4\n", 1545dd2154eSmrg program_name); 1555dd2154eSmrg exit(1); 1565dd2154eSmrg } 1575dd2154eSmrg input_name = argv[0]; 1585dd2154eSmrg } 1595dd2154eSmrg argv++; 16029459361Smrg } 1615dd2154eSmrg if (input_name) { 1625dd2154eSmrg input = FontFileOpen(input_name); 1635dd2154eSmrg if (!input) { 1645dd2154eSmrg fprintf(stderr, "%s: can't open bdf source file %s\n", 1655dd2154eSmrg program_name, input_name); 1665dd2154eSmrg exit(1); 1675dd2154eSmrg } 16829459361Smrg } 16929459361Smrg else 1705dd2154eSmrg input = FontFileOpenFd(STDIN_FILENO); 1715dd2154eSmrg if (bdfReadFont(&font, input, bit, byte, glyph, scan) != Successful) { 1725dd2154eSmrg fprintf(stderr, "%s: bdf input, %s, corrupt\n", 1735dd2154eSmrg program_name, input_name ? input_name : "<stdin>"); 1745dd2154eSmrg exit(1); 1755dd2154eSmrg } 1765dd2154eSmrg if (output_name) { 1775dd2154eSmrg output = FontFileOpenWrite(output_name); 1785dd2154eSmrg if (!output) { 1795dd2154eSmrg fprintf(stderr, "%s: can't open pcf sink file %s\n", 1805dd2154eSmrg program_name, output_name); 1815dd2154eSmrg exit(1); 1825dd2154eSmrg } 18329459361Smrg } 18429459361Smrg else 1855dd2154eSmrg output = FontFileOpenWriteFd(STDOUT_FILENO); 1865dd2154eSmrg if (pcfWriteFont(&font, output) != Successful) { 1875dd2154eSmrg fprintf(stderr, "%s: can't write pcf file %s\n", 1885dd2154eSmrg program_name, output_name ? output_name : "<stdout>"); 1895dd2154eSmrg if (output_name) 1905dd2154eSmrg remove(output_name); 1915dd2154eSmrg exit(1); 19229459361Smrg } 19329459361Smrg else 1945dd2154eSmrg FontFileClose(output); 19529459361Smrg return (0); 19629459361Smrg} 197