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> 35fa2b3b63Smrg#include "fontmisc.h" 3629459361Smrg#include <X11/fonts/fontstruct.h> 37fa2b3b63Smrg#include "fntfilio.h" 38fa2b3b63Smrg#include "fntfil.h" 39fa2b3b63Smrg#include "bdfint.h" 40fa2b3b63Smrg#include "pcf.h" 4129459361Smrg#include <stdio.h> 4229459361Smrg#include <X11/Xos.h> 4329459361Smrg 4429459361Smrgint 455dd2154eSmrgmain(int argc, char *argv[]) 4629459361Smrg{ 475dd2154eSmrg FontRec font = { 0 }; 485dd2154eSmrg FontFilePtr input, output; 495dd2154eSmrg char *input_name = NULL, *output_name = NULL; 505dd2154eSmrg char *program_name; 515dd2154eSmrg int bit, byte, glyph, scan; 525dd2154eSmrg 535dd2154eSmrg FontDefaultFormat(&bit, &byte, &glyph, &scan); 5429459361Smrg program_name = argv[0]; 5529459361Smrg argc--, argv++; 5629459361Smrg while (argc-- > 0) { 575dd2154eSmrg if (argv[0][0] == '-') { 585dd2154eSmrg switch (argv[0][1]) { 595dd2154eSmrg case 'p': 605dd2154eSmrg switch (argv[0][2]) { 615dd2154eSmrg case '1': 625dd2154eSmrg case '2': 635dd2154eSmrg case '4': 645dd2154eSmrg case '8': 655dd2154eSmrg if (argv[0][3] != '\0') 665dd2154eSmrg goto usage; 675dd2154eSmrg glyph = argv[0][2] - '0'; 685dd2154eSmrg break; 695dd2154eSmrg default: 705dd2154eSmrg goto usage; 715dd2154eSmrg } 725dd2154eSmrg break; 735dd2154eSmrg 745dd2154eSmrg case 'u': 755dd2154eSmrg switch (argv[0][2]) { 765dd2154eSmrg case '1': 775dd2154eSmrg case '2': 785dd2154eSmrg case '4': 795dd2154eSmrg if (argv[0][3] != '\0') 805dd2154eSmrg goto usage; 815dd2154eSmrg scan = argv[0][2] - '0'; 825dd2154eSmrg break; 835dd2154eSmrg default: 845dd2154eSmrg goto usage; 855dd2154eSmrg } 865dd2154eSmrg break; 875dd2154eSmrg 885dd2154eSmrg case 'm': 895dd2154eSmrg if (argv[0][2] != '\0') 905dd2154eSmrg goto usage; 915dd2154eSmrg bit = MSBFirst; 925dd2154eSmrg break; 935dd2154eSmrg 945dd2154eSmrg case 'l': 955dd2154eSmrg if (argv[0][2] != '\0') 965dd2154eSmrg goto usage; 975dd2154eSmrg bit = LSBFirst; 985dd2154eSmrg break; 995dd2154eSmrg 1005dd2154eSmrg case 'M': 1015dd2154eSmrg if (argv[0][2] != '\0') 1025dd2154eSmrg goto usage; 1035dd2154eSmrg byte = MSBFirst; 1045dd2154eSmrg break; 1055dd2154eSmrg 1065dd2154eSmrg case 'L': 1075dd2154eSmrg if (argv[0][2] != '\0') 1085dd2154eSmrg goto usage; 1095dd2154eSmrg byte = LSBFirst; 1105dd2154eSmrg break; 1115dd2154eSmrg 1125dd2154eSmrg case 't': /* attempt to make terminal fonts if possible */ 1135dd2154eSmrg if (argv[0][2] != '\0') 1145dd2154eSmrg goto usage; 1155dd2154eSmrg break; 1165dd2154eSmrg 1175dd2154eSmrg case 'i': /* inhibit ink metric computation */ 1185dd2154eSmrg if (argv[0][2] != '\0') 1195dd2154eSmrg goto usage; 1205dd2154eSmrg break; 1215dd2154eSmrg case 'o': 1225dd2154eSmrg if (argv[0][2]) 1235dd2154eSmrg output_name = argv[0] + 2; 1245dd2154eSmrg else { 1255dd2154eSmrg if (!argv[1]) 1265dd2154eSmrg goto usage; 1275dd2154eSmrg argv++; 1285dd2154eSmrg argc--; 1295dd2154eSmrg output_name = argv[0]; 1305dd2154eSmrg } 1315dd2154eSmrg break; 1325dd2154eSmrg 1335dd2154eSmrg case 'v': 1345dd2154eSmrg printf("%s\n", PACKAGE_STRING); 1355dd2154eSmrg exit(0); 1365dd2154eSmrg 1375dd2154eSmrg default: 1385dd2154eSmrg goto usage; 1395dd2154eSmrg } 1405dd2154eSmrg } 1415dd2154eSmrg else { 1425dd2154eSmrg if (input_name) { 1435dd2154eSmrg usage: 144fb4ebca8Smrg fprintf(stderr, "%s: invalid option '%s'\n", 145fb4ebca8Smrg program_name, argv[0]); 1465dd2154eSmrg fprintf(stderr, 1475dd2154eSmrg "usage: %s [-p#] [-u#] [-m] [-l] [-M] [-L] [-t] [-i] [-o pcf file] [bdf file]\n" 1485dd2154eSmrg " where # for -p is 1, 2, 4, or 8\n" 149fb4ebca8Smrg " and # for -u is 1, 2, or 4\n", 1505dd2154eSmrg program_name); 1515dd2154eSmrg exit(1); 1525dd2154eSmrg } 1535dd2154eSmrg input_name = argv[0]; 1545dd2154eSmrg } 1555dd2154eSmrg argv++; 15629459361Smrg } 1575dd2154eSmrg if (input_name) { 1585dd2154eSmrg input = FontFileOpen(input_name); 1595dd2154eSmrg if (!input) { 1605dd2154eSmrg fprintf(stderr, "%s: can't open bdf source file %s\n", 1615dd2154eSmrg program_name, input_name); 1625dd2154eSmrg exit(1); 1635dd2154eSmrg } 16429459361Smrg } 16529459361Smrg else 1665dd2154eSmrg input = FontFileOpenFd(STDIN_FILENO); 1675dd2154eSmrg if (bdfReadFont(&font, input, bit, byte, glyph, scan) != Successful) { 1685dd2154eSmrg fprintf(stderr, "%s: bdf input, %s, corrupt\n", 1695dd2154eSmrg program_name, input_name ? input_name : "<stdin>"); 1705dd2154eSmrg exit(1); 1715dd2154eSmrg } 1725dd2154eSmrg if (output_name) { 1735dd2154eSmrg output = FontFileOpenWrite(output_name); 1745dd2154eSmrg if (!output) { 1755dd2154eSmrg fprintf(stderr, "%s: can't open pcf sink file %s\n", 1765dd2154eSmrg program_name, output_name); 1775dd2154eSmrg exit(1); 1785dd2154eSmrg } 17929459361Smrg } 18029459361Smrg else 1815dd2154eSmrg output = FontFileOpenWriteFd(STDOUT_FILENO); 1825dd2154eSmrg if (pcfWriteFont(&font, output) != Successful) { 1835dd2154eSmrg fprintf(stderr, "%s: can't write pcf file %s\n", 1845dd2154eSmrg program_name, output_name ? output_name : "<stdout>"); 1855dd2154eSmrg if (output_name) 1865dd2154eSmrg remove(output_name); 1875dd2154eSmrg exit(1); 18829459361Smrg } 18929459361Smrg else 1905dd2154eSmrg FontFileClose(output); 19129459361Smrg return (0); 19229459361Smrg} 193