summaryrefslogtreecommitdiff
path: root/language/chinese/CJK/cjk-4.8.5/utils/hbf2gf/hbf2gf.c
diff options
context:
space:
mode:
Diffstat (limited to 'language/chinese/CJK/cjk-4.8.5/utils/hbf2gf/hbf2gf.c')
-rw-r--r--language/chinese/CJK/cjk-4.8.5/utils/hbf2gf/hbf2gf.c2250
1 files changed, 2250 insertions, 0 deletions
diff --git a/language/chinese/CJK/cjk-4.8.5/utils/hbf2gf/hbf2gf.c b/language/chinese/CJK/cjk-4.8.5/utils/hbf2gf/hbf2gf.c
new file mode 100644
index 0000000000..c6f666581d
--- /dev/null
+++ b/language/chinese/CJK/cjk-4.8.5/utils/hbf2gf/hbf2gf.c
@@ -0,0 +1,2250 @@
+#define banner \
+"hbf2gf (CJK ver. 4.8.5)" \
+ \
+
+#define TRUE 1
+#define FALSE 0 \
+
+#define STRING_LENGTH 255 \
+
+#define FILE_NAME_LENGTH 1024 \
+ \
+
+#define VERSION \
+"\n" \
+"Copyright (C) 1996-1999 Werner Lemberg.\n" \
+"There is NO warranty. You may redistribute this software\n" \
+"under the terms of the GNU General Public License\n" \
+"and the HBF library copyright.\n" \
+"\n" \
+"For more information about these matters, see the files\n" \
+"named COPYING and hbf.c.\n" \
+"\n" \
+
+#define USAGE \
+"\n" \
+"Usage: hbf2gf [-q] configuration_file[.cfg]\n" \
+" hbf2gf [options] font_name x_resolution [y_scale | y_resolution]\n" \
+" hbf2gf -t [-q] font_name\n" \
+"\n" \
+" Convert a font in HBF format to TeX's GF resp. PK format.\n" \
+"\n" \
+" -q be silent\n" \
+" -p don't produce a PL file\n" \
+" -g don't produce a GF file\n" \
+" -n use no resolution in extension (only `.gf')\n" \
+" -t test for font_name (returns 0 on success)\n" \
+" --help print this message and exit\n" \
+" --version print version number and exit\n" \
+"\n" \
+
+#define GF_ID 131
+#define PRE 247 \
+
+#define header " hbf2gf output " \
+
+#define BOC 67
+#define BOC1 68
+#define EOC 69 \
+
+#define _2_16 65536.0
+#define _2_20 1048576.0 \
+
+#define XXX1 239
+#define XXX2 240
+#define XXX3 241
+#define XXX4 242 \
+
+#define YYY 243 \
+
+#define POST 248 \
+
+#define CHAR_LOC 245
+#define CHAR_LOC0 246 \
+
+#define POSTPOST 249
+#define POSTPOST_ID 223 \
+
+#define BLACK 1
+#define WHITE 0 \
+
+#define PIXEL_MAXVAL 255
+#define SCALE 4096
+#define HALFSCALE 2048 \
+
+#define MAX_CHAR_SIZE 1023 \
+
+#define PAINT_(x) (x)
+#define PAINT1 64
+#define PAINT2 65
+#define PAINT3 66 \
+
+#define SKIP0 70
+#define SKIP1 71
+#define SKIP2 72
+#define SKIP3 73 \
+
+#define NEW_ROW_(x) ((x) +74) \
+
+#define NOOP 244 \
+
+#define EXTENSION_LENGTH 8 \
+
+#define GFTOPK_NAME "gftopk"
+#define PLTOTF_NAME "pltotf"
+#define OVP2OVF_NAME "ovp2ovf" \
+
+#define PRINTER_MIN_RES_X 50
+#define PRINTER_MIN_RES_Y 50 \
+
+#define VALID_SUBCODE 1 \
+
+/*4:*/
+#line 191 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+/*10:*/
+#line 408 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+#ifdef HAVE_CONFIG_H
+#include <c-auto.h>
+#endif
+#include <ctype.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#ifdef TM_IN_SYS_TIME
+#include <sys/time.h>
+#endif
+#include "hbf.h"
+
+
+
+/*:10*//*69:*/
+#line 2473 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+#if defined(HAVE_LIBKPATHSEA)
+#include "kpathsea/kpathsea.h"
+
+#elif defined(HAVE_EMTEXDIR)
+#include "emtexdir.h"
+
+#elif defined(HAVE_MIKTEX)
+#include "miktex.h"
+#endif
+
+/*:69*/
+#line 192 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+/*11:*/
+#line 429 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+static void write_file(void);
+
+
+/*:11*//*13:*/
+#line 491 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+static void write_pre(void);
+
+
+/*:13*//*16:*/
+#line 579 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+static void write_data(void);
+
+
+/*:16*//*20:*/
+#line 690 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+static void write_post(void);
+
+
+/*:20*//*25:*/
+#line 834 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+static void fputl(long,FILE*);
+
+
+/*:25*//*29:*/
+#line 994 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+static void make_pixel_array(void);
+
+
+/*:29*//*36:*/
+#line 1222 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+static
+#ifdef __GNUC__
+__inline__
+#endif
+void read_row(unsigned char*);
+
+
+/*:36*//*39:*/
+#line 1274 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+static
+#ifdef __GNUC__
+__inline__
+#endif
+void write_row(unsigned char*);
+
+
+/*:39*//*41:*/
+#line 1329 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+static void write_coding(void);
+
+
+/*:41*//*45:*/
+#line 1490 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+static void write_pl(void);
+
+
+/*:45*//*47:*/
+#line 1587 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+static void write_ovp(void);
+
+
+/*:47*//*50:*/
+#line 1732 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+static void write_job(void);
+
+
+/*:50*//*54:*/
+#line 1981 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+static void read_config(void);
+
+
+/*:54*//*64:*/
+#line 2312 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+static int fsearch(const char*);
+
+
+/*:64*//*67:*/
+#line 2451 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+static void config_error(const char*);
+
+
+/*:67*//*71:*/
+#line 2494 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+static const char*TeX_search_version(void);
+
+
+/*:71*//*74:*/
+#line 2529 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+#ifdef HAVE_EMTEXDIR
+extern int setup_list(struct emtex_dir*,char*,const char*,unsigned);
+static int dir_setup(struct emtex_dir*,const char*,const char*,unsigned);
+static char*file_find(char*,struct emtex_dir*);
+#endif
+
+
+/*:74*//*79:*/
+#line 2621 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+static char*TeX_search_cfg_file(char*);
+static char*TeX_search_hbf_file(char*);
+
+
+/*:79*/
+#line 193 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+/*2:*/
+#line 127 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+int nmb_files= -1;
+int unicode= FALSE;
+
+int testing= FALSE;
+
+int mf_like= FALSE;
+int file_number= 0;
+
+double x_resolution= 0.0;
+double y_scale= 1.0;
+
+int pk_files= TRUE;
+int tfm_files= TRUE;
+int long_extension= TRUE;
+int quiet= FALSE;
+
+char config_file[FILE_NAME_LENGTH+4+1];
+
+char output_name[STRING_LENGTH+1];
+
+FILE*config,*out;
+HBF*hbf;
+
+#ifdef msdos
+#define WRITE_BIN "wb"
+#define WRITE_TXT "wt"
+#define READ_BIN "rb"
+#define READ_TXT "rt"
+#else
+#define WRITE_BIN "w"
+#define WRITE_TXT "w"
+#define READ_BIN "r"
+#define READ_TXT "r"
+#endif
+
+int end_of_file= FALSE;
+
+
+/*:2*//*15:*/
+#line 538 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+long char_adr[256];
+long*char_adr_p;
+
+int pk_offset_x;
+
+
+double tfm_offset_x;
+int pk_offset_y;
+
+double tfm_offset_y;
+
+int input_size_x;
+int input_size_y;
+const char*font_encoding;
+int pk_width;
+int pk_output_size_x;
+
+double tfm_output_size_x;
+int pk_output_size_y;
+double tfm_output_size_y;
+
+double design_size= 10.0;
+double target_size_x;
+double target_size_y;
+double magstep_x;
+double magstep_y;
+double slant;
+int rotation;
+
+double mag_x;
+double mag_y;
+
+int empty_char;
+int last_char;
+
+int dot_count;
+
+
+
+/*:15*//*19:*/
+#line 667 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+char coding[STRING_LENGTH+1];
+char comment[STRING_LENGTH+1];
+
+unsigned long checksum;
+
+long pk_total_min_x;
+long pk_total_max_x;
+long pk_total_min_y;
+long pk_total_max_y;
+
+int dpi_x;
+int dpi_y;
+double ppp_x;
+double ppp_y;
+
+
+/*:19*//*27:*/
+#line 871 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+HBF_CHAR code;
+const unsigned char*bitmap;
+
+const unsigned char*bP;
+
+unsigned char out_char[MAX_CHAR_SIZE*MAX_CHAR_SIZE+1];
+
+unsigned char*out_char_p;
+
+unsigned char pixelrow[MAX_CHAR_SIZE];
+unsigned char temp_pixelrow[MAX_CHAR_SIZE];
+unsigned char new_pixelrow[MAX_CHAR_SIZE+1];
+
+int curr_row;
+
+long grayrow[MAX_CHAR_SIZE];
+
+long s_mag_x,s_mag_y,s_slant;
+
+
+/*:27*//*38:*/
+#line 1269 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+int threshold= 128;
+
+
+/*:38*//*49:*/
+#line 1721 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+char job_extension[EXTENSION_LENGTH+1];
+char rm_command[STRING_LENGTH+1];
+char cp_command[STRING_LENGTH+1];
+char pk_directory[STRING_LENGTH+1];
+char tfm_directory[STRING_LENGTH+1];
+
+int ofm_file= FALSE;
+
+
+/*:49*//*53:*/
+#line 1976 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+char Buffer[STRING_LENGTH+1];
+
+
+/*:53*//*58:*/
+#line 2094 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+int offset_x;
+int offset_y;
+
+HBF_CHAR user_min_char;
+int have_min_char= FALSE;
+
+/*:58*//*60:*/
+#line 2251 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+HBF_CHAR min_char,max_char;
+
+
+/*:60*//*62:*/
+#line 2278 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+char b2_codes[256];
+unsigned char min_2_byte,max_2_byte;
+int nmb_2_bytes= 0;
+
+
+/*:62*//*70:*/
+#line 2485 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+#if defined(HAVE_EMTEXDIR)
+char emtex_version_string[]= "emTeXdir";
+#elif !defined(HAVE_MIKTEX)
+char no_version_string[]= "no search library";
+#endif
+
+
+/*:70*//*73:*/
+#line 2522 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+#ifdef HAVE_EMTEXDIR
+struct emtex_dir cfg_path,hbf_path;
+#endif
+
+
+/*:73*//*76:*/
+#line 2569 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+#ifdef HAVE_EMTEXDIR
+char name_buffer[FILE_NAME_LENGTH+1];
+#endif
+
+
+/*:76*/
+#line 194 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+
+
+int main(int argc,char*argv[])
+{char*p;
+
+/*78:*/
+#line 2594 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+#if defined(HAVE_LIBKPATHSEA)
+kpse_set_program_name(argv[0],"hbf2gf");
+kpse_init_prog("HBF2GF",300,"cx","cmr10");
+
+#elif defined(HAVE_EMTEXDIR)
+if(!dir_setup(&cfg_path,"HBFCFG",NULL,EDS_BANG))
+{fprintf(stderr,
+"Couldn't setup search path for configuration files\n");
+exit(1);
+}
+if(!dir_setup(&hbf_path,"HBFONTS",NULL,EDS_BANG))
+{fprintf(stderr,
+"Couldn't setup search path for HBF header files\n");
+exit(1);
+}
+#endif
+
+
+/*:78*/
+#line 200 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+
+/*7:*/
+#line 307 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+if(argc==2)
+{if(strcmp(argv[1],"--help")==0)
+/*6:*/
+#line 288 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+{printf(USAGE);
+exit(0);
+}
+
+
+/*:6*/
+#line 310 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+else if(strcmp(argv[1],"--version")==0)
+/*5:*/
+#line 261 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+{printf("\n");
+printf(banner);
+printf(" (%s)\n",TeX_search_version());
+printf(VERSION);
+exit(0);
+}
+
+
+/*:5*/
+#line 312 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+}
+
+while(argc> 1)
+{p= argv[1];
+if(p[0]!='-')
+break;
+if(p[1]=='p')
+tfm_files= FALSE;
+else if(p[1]=='g')
+pk_files= FALSE;
+else if(p[1]=='n')
+long_extension= FALSE;
+else if(p[1]=='q')
+quiet= TRUE;
+else if(p[1]=='t')
+testing= TRUE;
+
+argv++;
+argc--;
+}
+
+if(testing)
+{if(argc!=2)
+{fprintf(stderr,"Need exactly one parameter for `-t' option.\n");
+fprintf(stderr,"Try `hbf2gf --help' for more information.\n");
+exit(1);
+}
+}
+else if(argc<2||argc> 4)
+{fprintf(stderr,"Invalid number of parameters.\n");
+fprintf(stderr,"Try `hbf2gf --help' for more information.\n");
+exit(1);
+}
+
+
+/*:7*/
+#line 202 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+
+if(!quiet)
+printf("\n%s\n\n",banner);
+
+strncpy(config_file,argv[1],FILE_NAME_LENGTH);
+config_file[FILE_NAME_LENGTH]= '\0';
+
+if(argc> 2||testing)
+{int l= strlen(config_file);
+
+if(l> 2)
+config_file[l-2]= '\0';
+
+else
+{if(!quiet)
+printf("`%s' can't be a subfont created by hbf2gf\n",
+config_file);
+exit(2);
+}
+
+mf_like= TRUE;
+}
+
+read_config();
+
+if(mf_like)
+/*8:*/
+#line 352 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+{if(unicode)
+file_number= (int)strtol(&argv[1][strlen(argv[1])-2],
+(char**)NULL,16);
+else
+file_number= atoi(&argv[1][strlen(argv[1])-2]);
+
+x_resolution= atof(argv[2]);
+if(x_resolution<PRINTER_MIN_RES_X)
+{fprintf(stderr,"Invalid horizontal resolution\n");
+exit(1);
+}
+
+if(argc> 3)
+{y_scale= atof(argv[3]);
+if(y_scale<0.01)
+{fprintf(stderr,
+"Invalid vertical scaling factor or resolution\n");
+exit(1);
+}
+if(y_scale> 10.0)
+y_scale= (double)x_resolution/y_scale;
+}
+}
+
+
+/*:8*/
+#line 229 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+
+/*28:*/
+#line 903 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+{int col,offset;
+
+if(rotation)
+{int tmp;
+
+
+tmp= input_size_x;
+input_size_x= input_size_y;
+input_size_y= tmp;
+}
+
+if(mf_like)
+{target_size_x= design_size*(x_resolution/dpi_x);
+target_size_y= design_size*(x_resolution*y_scale/dpi_y);
+}
+else
+target_size_x= target_size_y= design_size;
+magstep_x= target_size_x/design_size;
+magstep_y= target_size_y/design_size;
+
+pk_offset_x= offset_x*magstep_x+0.5;
+pk_offset_y= offset_y*magstep_y+0.5;
+tfm_offset_x= offset_x/(dpi_x/72.27)/design_size;
+tfm_offset_y= offset_y/(dpi_y/72.27)/design_size;
+
+pk_width= input_size_x*mag_x*magstep_x+0.5;
+pk_output_size_x= input_size_x*mag_x*magstep_x+
+input_size_y*mag_y*magstep_y*slant+0.5;
+pk_output_size_y= input_size_y*mag_y*magstep_y+0.5;
+tfm_output_size_x= input_size_x*mag_x/
+(dpi_x/72.27)/design_size;
+tfm_output_size_y= input_size_y*mag_y/
+(dpi_y/72.27)/design_size;
+if(pk_output_size_x> MAX_CHAR_SIZE)
+{fprintf(stderr,"Output character box width too big\n");
+exit(1);
+}
+if(pk_output_size_y> MAX_CHAR_SIZE)
+{fprintf(stderr,"Output character box height too big\n");
+exit(1);
+}
+
+for(col= 0;col<input_size_x;++col)
+grayrow[col]= HALFSCALE;
+
+if(!mf_like)
+code= (min_char&0xFF00)+min_2_byte;
+else
+{if((file_number<(unicode?0:1))||(file_number>=0x100))
+{fprintf(stderr,"Invalid subfile number\n");
+exit(1);
+}
+
+if(unicode)
+{offset= 0;
+code= file_number*0x100;
+}
+else
+{offset= (file_number-1)*256%nmb_2_bytes;
+code= (min_char&0xFF00)+min_2_byte+
+(file_number-1)*256/nmb_2_bytes*0x100;
+}
+
+while(offset--)
+while(!b2_codes[code++&0xFF])
+
+;
+
+if(code> max_char)
+{fprintf(stderr,"Invalid subfile number\n");
+exit(1);
+}
+}
+
+s_mag_x= mag_x*magstep_x*SCALE;
+s_mag_y= mag_y*magstep_y*SCALE;
+s_slant= slant*SCALE;
+}
+
+
+/*:28*/
+#line 231 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+
+/*9:*/
+#line 387 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+{int j,max_numb;
+
+if(!mf_like)
+{file_number= (unicode==TRUE?(min_char>>8):1);
+if(nmb_files==-1)
+max_numb= (unicode==TRUE?0x100:100);
+else
+max_numb= nmb_files;
+}
+else
+max_numb= 1;
+
+for(j= 0;(j<max_numb)&&!end_of_file;file_number++,j++)
+write_file();
+
+nmb_files= j;
+}
+
+
+/*:9*/
+#line 233 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+
+if(tfm_files)
+write_pl();
+if(ofm_file)
+write_ovp();
+if(!mf_like)
+write_job();
+
+hbfClose(hbf);
+
+exit(0);
+return 0;
+}
+
+
+/*:4*//*12:*/
+#line 437 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+static void write_file(void)
+{char output_file[FILE_NAME_LENGTH+1];
+
+
+if(pk_files)
+{if(mf_like)
+{if(unicode)
+sprintf(output_file,"%s%02x.%.0igf",
+output_name,file_number,
+long_extension?(int)(x_resolution+0.5):0);
+else
+sprintf(output_file,"%s%02i.%.0igf",
+output_name,file_number,
+long_extension?(int)(x_resolution+0.5):0);
+}
+else
+{if(unicode)
+sprintf(output_file,"%s%02x.gf",output_name,file_number);
+else
+sprintf(output_file,"%s%02i.gf",output_name,file_number);
+}
+if(!(out= fopen(output_file,WRITE_BIN)))
+{fprintf(stderr,"Couldn't open `%s'\n",output_file);
+exit(1);
+}
+if(!quiet)
+printf("Writing `%s' ",output_file);
+
+write_pre();
+write_data();
+write_post();
+fclose(out);
+
+if(!quiet)
+printf("\n");
+}
+else
+write_data();
+}
+
+
+/*:12*//*14:*/
+#line 498 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+static void write_pre(void)
+{char out_s[40],s[20];
+time_t secs_now;
+struct tm*time_now;
+
+
+strcpy(out_s,header);
+
+secs_now= time(NULL);
+time_now= localtime(&secs_now);
+strftime(s,20,"%Y.%m.%d:%H.%M",time_now);
+strcat(out_s,s);
+
+fputc(PRE,out);
+fputc(GF_ID,out);
+fputc(strlen(out_s),out);
+fputs(out_s,out);
+}
+
+
+/*:14*//*17:*/
+#line 584 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+static void write_data(void)
+{dot_count= 0;
+char_adr_p= char_adr;
+
+for(last_char= 0;(last_char<256)&&!end_of_file;last_char++)
+/*18:*/
+#line 609 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+{if(dot_count++%10==0)
+if(pk_files&&!quiet)
+{printf(".");
+fflush(stdout);
+}
+
+empty_char= FALSE;
+make_pixel_array();
+if(end_of_file)
+return;
+
+if(pk_files)
+{*char_adr_p= ftell(out);
+char_adr_p++;
+
+if(empty_char)
+{fputc(BOC1,out);
+fputc((unsigned char)last_char,out);
+fputc(0,out);
+fputc(0,out);
+fputc(0,out);
+fputc(0,out);
+fputc(EOC,out);
+}
+else
+{fputc(BOC,out);
+fputl(last_char,out);
+fputl(-1L,out);
+fputl(pk_offset_x,out);
+fputl(pk_output_size_x+pk_offset_x,out);
+fputl(pk_offset_y,out);
+fputl(pk_output_size_y+pk_offset_y,out);
+
+write_coding();
+
+fputc(EOC,out);
+}
+}
+}
+
+
+/*:18*/
+#line 590 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+}
+
+
+/*:17*//*21:*/
+#line 695 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+static void write_post(void)
+{long special_adr;
+long post_adr;
+
+long designsize= design_size*_2_20;
+
+int pk_dx;
+long tfm_width;
+
+int i;
+long temp;
+
+
+ppp_x= dpi_x/72.27*magstep_x;
+ppp_y= dpi_y/72.27*magstep_y;
+
+pk_total_min_x= pk_offset_x;
+pk_total_max_x= pk_output_size_x+2*pk_offset_x;
+pk_total_min_y= pk_offset_y;
+pk_total_max_y= pk_output_size_y+pk_offset_y;
+
+pk_dx= pk_width+2*pk_offset_x;
+tfm_width= (tfm_output_size_x+2*tfm_offset_x)*_2_20;
+
+
+/*22:*/
+#line 741 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+special_adr= ftell(out);
+
+if(*coding)
+{fputc(XXX1,out);
+fputc(strlen(coding),out);
+fputs(coding,out);
+}
+
+if(*comment)
+{fputc(XXX1,out);
+fputc(strlen(comment),out);
+fputs(comment,out);
+}
+
+
+/*:22*/
+#line 721 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+/*23:*/
+#line 770 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+post_adr= ftell(out);
+fputc(POST,out);
+fputl(special_adr,out);
+
+fputl(designsize,out);
+fputl(checksum,out);
+fputl(ppp_x*_2_16,out);
+fputl(ppp_y*_2_16,out);
+fputl(pk_total_min_x,out);
+fputl(pk_total_max_x,out);
+fputl(pk_total_min_y,out);
+fputl(pk_total_max_y,out);
+
+char_adr_p= char_adr;
+
+if(pk_dx<256)
+{for(i= 0;i<last_char;i++)
+{fputc(CHAR_LOC0,out);
+fputc(i,out);
+fputc(pk_dx,out);
+fputl(tfm_width,out);
+fputl(*char_adr_p++,out);
+}
+}
+else
+{for(i= 0;i<last_char;i++)
+{fputc(CHAR_LOC,out);
+fputc(i,out);
+fputl(pk_dx*_2_16,out);
+fputl(0,out);
+fputl(tfm_width,out);
+fputl(*char_adr_p++,out);
+}
+}
+
+
+/*:23*/
+#line 722 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+/*24:*/
+#line 821 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+fputc(POSTPOST,out);
+fputl(post_adr,out);
+fputc(GF_ID,out);
+temp= ftell(out);
+i= (int)(temp%4)+4;
+while(i--)
+fputc(POSTPOST_ID,out);
+
+
+/*:24*/
+#line 723 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+}
+
+
+/*:21*//*26:*/
+#line 839 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+static void fputl(long num,FILE*f)
+{fputc(num>>24,f);
+fputc(num>>16,f);
+fputc(num>>8,f);
+fputc(num,f);
+}
+
+
+/*:26*//*30:*/
+#line 999 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+static void make_pixel_array(void)
+{unsigned char*prP;
+unsigned char*temp_prP;
+unsigned char*new_prP;
+long*grP;
+
+register unsigned char*xP;
+register unsigned char*nxP;
+
+register int row,col;
+int rows_read= 0;
+register int need_to_read_row= 1;
+
+long frac_row_to_fill= SCALE;
+long frac_row_left= s_mag_y;
+
+int no_code= FALSE;
+
+
+prP= pixelrow;
+temp_prP= temp_pixelrow;
+new_prP= new_pixelrow;
+grP= grayrow;
+out_char_p= out_char;
+
+again:
+if(b2_codes[code&0xFF])
+{if(pk_files)
+{bitmap= hbfGetBitmap(hbf,code);
+bP= bitmap;
+
+
+if(!bitmap)
+empty_char= TRUE;
+else
+/*31:*/
+#line 1058 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+{if(pk_output_size_y==input_size_y)
+temp_prP= prP;
+
+curr_row= input_size_y-1;
+for(row= 0;row<pk_output_size_y;++row)
+{/*32:*/
+#line 1072 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+if(pk_output_size_y==input_size_y)
+
+read_row(prP);
+else
+{while(frac_row_left<frac_row_to_fill)
+{if(need_to_read_row)
+if(rows_read<input_size_y)
+{read_row(prP);
+++rows_read;
+}
+
+for(col= 0,xP= prP;col<input_size_x;++col,++xP)
+grP[col]+= frac_row_left*(*xP);
+
+frac_row_to_fill-= frac_row_left;
+frac_row_left= s_mag_y;
+need_to_read_row= 1;
+}
+
+/*33:*/
+#line 1099 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+if(need_to_read_row)
+if(rows_read<input_size_y)
+{read_row(prP);
+++rows_read;
+need_to_read_row= 0;
+}
+
+for(col= 0,xP= prP,nxP= temp_prP;
+col<input_size_x;++col,++xP,++nxP)
+{register long g;
+
+
+g= grP[col]+frac_row_to_fill*(*xP);
+g/= SCALE;
+if(g> PIXEL_MAXVAL)
+g= PIXEL_MAXVAL;
+
+*nxP= g;
+grP[col]= HALFSCALE;
+}
+
+frac_row_left-= frac_row_to_fill;
+if(frac_row_left==0)
+{frac_row_left= s_mag_y;
+need_to_read_row= 1;
+}
+frac_row_to_fill= SCALE;
+
+
+/*:33*/
+#line 1092 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+}
+
+
+/*:32*/
+#line 1064 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+/*34:*/
+#line 1140 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+if(pk_width==input_size_x&&s_slant==0)
+
+write_row(temp_prP);
+else
+{register long g= HALFSCALE;
+register long frac_col_to_fill= SCALE;
+register long frac_col_left;
+register int need_col= 0;
+
+
+nxP= new_prP;
+
+frac_col_left= (pk_output_size_y-row)*s_slant;
+while(frac_col_left>=frac_col_to_fill)
+{*(nxP++)= 0;
+frac_col_left-= frac_col_to_fill;
+}
+
+if(frac_col_left> 0)
+frac_col_to_fill-= frac_col_left;
+
+for(col= 0,xP= temp_prP;col<input_size_x;++col,++xP)
+{frac_col_left= s_mag_x;
+while(frac_col_left>=frac_col_to_fill)
+{if(need_col)
+{++nxP;
+g= HALFSCALE;
+}
+
+g+= frac_col_to_fill*(*xP);
+g/= SCALE;
+if(g> PIXEL_MAXVAL)
+g= PIXEL_MAXVAL;
+
+*nxP= g;
+frac_col_left-= frac_col_to_fill;
+frac_col_to_fill= SCALE;
+need_col= 1;
+}
+
+if(frac_col_left> 0)
+{if(need_col)
+{++nxP;
+g= HALFSCALE;
+need_col= 0;
+}
+
+g+= frac_col_left*(*xP);
+frac_col_to_fill-= frac_col_left;
+}
+}
+
+/*35:*/
+#line 1198 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+if(frac_col_to_fill> 0)
+{--xP;
+g+= frac_col_to_fill*(*xP);
+}
+
+if(!need_col)
+{g/= SCALE;
+if(g> PIXEL_MAXVAL)
+g= PIXEL_MAXVAL;
+*nxP= g;
+}
+
+*(++nxP)= 0;
+
+write_row(new_prP);
+
+
+/*:35*/
+#line 1193 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+}
+
+
+/*:34*/
+#line 1066 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+}
+}
+
+
+/*:31*/
+#line 1035 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+}
+}
+else
+no_code= TRUE;
+
+if((code&0xFF)==max_2_byte)
+code+= 0xFF-(max_2_byte-min_2_byte);
+if(code>=max_char)
+{end_of_file= TRUE;
+return;
+}
+
+code++;
+
+if(no_code)
+{no_code= FALSE;
+goto again;
+}
+}
+
+
+/*:30*//*37:*/
+#line 1231 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+static
+#ifdef __GNUC__
+__inline__
+#endif
+void read_row(unsigned char*pixelrow)
+{register int col,bitshift,offset;
+register unsigned char*xP;
+register unsigned char item= 0;
+
+if(rotation)
+{bitshift= 7-(curr_row%8);
+offset= (input_size_y+7)/8;
+bP= bitmap+curr_row/8;
+for(col= 0,xP= pixelrow;col<input_size_x;++col,++xP)
+{*xP= ((*bP>>bitshift)&1)==1?PIXEL_MAXVAL:0;
+bP+= offset;
+}
+curr_row--;
+}
+else
+{bitshift= -1;
+for(col= 0,xP= pixelrow;col<input_size_x;++col,++xP)
+{if(bitshift==-1)
+{item= *(bP++);
+bitshift= 7;
+}
+*xP= ((item>>bitshift)&1)==1?PIXEL_MAXVAL:0;
+--bitshift;
+}
+}
+}
+
+
+/*:37*//*40:*/
+#line 1283 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+static
+#ifdef __GNUC__
+__inline__
+#endif
+void write_row(unsigned char*pixelrow)
+{register int col;
+register unsigned char*xP;
+
+for(col= 0,xP= pixelrow;col<pk_output_size_x;++col,++xP)
+*(out_char_p++)= (*xP>=threshold)?1:0;
+
+}
+
+
+/*:40*//*42:*/
+#line 1337 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+static void write_coding(void)
+{register int count,skip;
+register unsigned char paint;
+register int x,y;
+register unsigned char*cp;
+
+x= 0;
+y= 0;
+cp= out_char+y*pk_output_size_x+x;
+count= skip= 0;
+paint= WHITE;
+goto start;
+
+while(y<pk_output_size_y)
+{/*43:*/
+#line 1361 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+count= 0;
+x= 0;
+cp= out_char+y*pk_output_size_x+x;
+
+while(x<pk_output_size_x)
+{if(*cp==paint)
+count++;
+else
+{if(skip==0)
+{if(count<=164)
+fputc(NEW_ROW_(count),out);
+else
+{fputc(SKIP0,out);
+
+if(count<256)
+{fputc(PAINT1,out);
+fputc(count,out);
+}
+else
+{fputc(PAINT2,out);
+fputc(count>>8,out);
+fputc(count&0xFF,out);
+}
+}
+}
+else
+{if(skip==1)
+fputc(SKIP0,out);
+else
+{if(skip<256)
+{fputc(SKIP1,out);
+fputc(skip,out);
+}
+else
+{fputc(SKIP2,out);
+fputc(skip>>8,out);
+fputc(skip&0xFF,out);
+}
+}
+skip= 0;
+if(count<64)
+fputc(PAINT_(count),out);
+else if(count<256)
+{fputc(PAINT1,out);
+fputc(count,out);
+}
+else
+{fputc(PAINT2,out);
+fputc(count>>8,out);
+fputc(count&0xFF,out);
+}
+}
+count= 0;
+paint= BLACK;
+break;
+}
+x++;
+cp++;
+}
+if(x>=pk_output_size_x)
+{skip++;
+y++;
+continue;
+}
+
+
+/*:43*/
+#line 1352 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+start:
+/*44:*/
+#line 1429 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+while(x<pk_output_size_x)
+{if(*cp==paint)
+count++;
+else
+{if(count<64)
+fputc(PAINT_(count),out);
+else if(count<256)
+{fputc(PAINT1,out);
+fputc(count,out);
+}
+else
+{fputc(PAINT2,out);
+fputc(count>>8,out);
+fputc(count&0xFF,out);
+}
+count= 1;
+paint= BLACK-paint;
+}
+x++;
+cp++;
+}
+if(paint==BLACK)
+{if(count<64)
+fputc(PAINT_(count),out);
+else if(count<256)
+{fputc(PAINT1,out);
+fputc(count,out);
+}
+else
+{fputc(PAINT2,out);
+fputc(count>>8,out);
+fputc(count&0xFF,out);
+}
+paint= WHITE;
+}
+
+
+
+/*:44*/
+#line 1354 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+y++;
+}
+}
+
+
+/*:42*//*46:*/
+#line 1495 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+static void write_pl(void)
+{int i,pos;
+char output_file[FILE_NAME_LENGTH+1];
+long t,sc;
+char*s;
+char tfm_header[]= "Created by hbf2gf";
+
+file_number--;
+
+if(mf_like)
+{if(unicode)
+sprintf(output_file,"%s%02x.pl",output_name,file_number);
+else
+sprintf(output_file,"%s%02i.pl",output_name,file_number);
+}
+else
+sprintf(output_file,"%s.pl",output_name);
+
+if(!(out= fopen(output_file,WRITE_TXT)))
+{fprintf(stderr,"Couldn't open `%s'\n",output_file);
+exit(1);
+}
+if(!quiet)
+printf("\nWriting `%s'\n",output_file);
+
+fprintf(out,
+"\n(FAMILY %s%d)"
+"\n(CODINGSCHEME CJK-%s)",
+output_name,file_number,font_encoding);
+
+fprintf(out,
+"\n(DESIGNSIZE R %.6f)"
+"\n(COMMENT DESIGNSIZE IS IN POINTS)"
+"\n(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)"
+"\n(CHECKSUM O %lo)"
+"\n(FONTDIMEN"
+"\n (SLANT R %.6f)"
+"\n (SPACE R 0.0)"
+"\n (STRETCH R 0.0)"
+"\n (SHRINK R 0.0)"
+"\n (XHEIGHT R 1.0)"
+"\n (QUAD R 1.0)"
+"\n (EXTRASPACE R 0.0)"
+"\n )",design_size,checksum,slant);
+
+s= tfm_header;
+i= strlen(s);
+t= ((long)i)<<24;
+sc= 16;
+pos= 18;
+
+fprintf(out,"\n");
+while(i> 0)
+{t|= ((long)(*(unsigned char*)s++))<<sc;
+sc-= 8;
+if(sc<0)
+{fprintf(out,"\n(HEADER D %d O %lo)",pos,t);
+t= 0;
+sc= 24;
+pos++;
+}
+i--;
+}
+if(t)
+fprintf(out,"\n(HEADER D %d O %lo)",pos,t);
+fprintf(out,"\n");
+
+for(i= 0;i<256;i++)
+{fprintf(out,
+"\n(CHARACTER O %o"
+"\n (CHARWD R %.6f)"
+"\n (CHARHT R %.6f)"
+"\n (CHARDP R %.6f)"
+"\n (CHARIC R %.6f)"
+"\n )",
+i,
+tfm_output_size_x+2*tfm_offset_x,
+tfm_output_size_y+tfm_offset_y,
+-tfm_offset_y,
+slant*(tfm_output_size_y+tfm_offset_y));
+}
+
+fclose(out);
+}
+
+
+
+/*:46*//*48:*/
+#line 1592 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+static void write_ovp(void)
+{int c,i,nmb_subfonts,remainder,count,pos;
+char output_file[FILE_NAME_LENGTH+1];
+long t,sc;
+char*s;
+char ofm_header[]= "Created by hbf2gf";
+
+nmb_subfonts= ((max_char-(min_char&0xFF00))/256*nmb_2_bytes)
+/256+1;
+remainder= ((max_char-(min_char&0xFF00))/256*nmb_2_bytes)
+%256;
+
+
+for(count= 0;count<(max_char&0xFF);count++)
+if(b2_codes[count])
+remainder++;
+if(remainder>=256)
+nmb_subfonts++;
+
+sprintf(output_file,"%s.ovp",output_name);
+
+if(!(out= fopen(output_file,WRITE_TXT)))
+{fprintf(stderr,"Couldn't open `%s'\n",output_file);
+exit(1);
+}
+if(!quiet)
+printf("\nWriting `%s'\n",output_file);
+
+fprintf(out,
+"\n(VTITLE Omega virtual font created by hbf2gf)"
+"\n(DESIGNSIZE R %.6f)"
+"\n(COMMENT DESIGNSIZE IS IN POINTS)"
+"\n(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)"
+"\n(CHECKSUM O %lo)"
+"\n(FONTDIMEN"
+"\n (SLANT R %.6f)"
+"\n (SPACE R 0.0)"
+"\n (STRETCH R 0.0)"
+"\n (SHRINK R 0.0)"
+"\n (XHEIGHT R 1.0)"
+"\n (QUAD R 1.0)"
+"\n (EXTRASPACE R 0.0)"
+"\n )",design_size,checksum,slant);
+
+s= ofm_header;
+i= strlen(s);
+t= ((long)i)<<24;
+sc= 16;
+pos= 18;
+
+fprintf(out,"\n");
+while(i> 0)
+{t|= ((long)(*(unsigned char*)s++))<<sc;
+sc-= 8;
+if(sc<0)
+{fprintf(out,"\n(HEADER D %d O %lo)",pos,t);
+t= 0;
+sc= 24;
+pos++;
+}
+i--;
+}
+if(t)
+fprintf(out,"\n(HEADER D %d O %lo)",pos,t);
+fprintf(out,"\n");
+
+for(i= 0;i<nmb_subfonts;i++)
+{fprintf(out,
+"\n(MAPFONT D %i"
+"\n (FONTNAME %s%02i)"
+"\n (FONTCHECKSUM O %lo)"
+"\n (FONTAT R 1.0)"
+"\n (FONTDSIZE R %.6f)"
+"\n )",i,output_name,i+1,checksum,design_size);
+}
+
+for(c= min_char,i= 0,count= 0;c<=max_char;c++)
+{if(b2_codes[c&0xFF]==VALID_SUBCODE)
+{fprintf(out,
+"\n(CHARACTER O %o"
+"\n (CHARWD R %.6f)"
+"\n (CHARHT R %.6f)"
+"\n (CHARDP R %.6f)"
+"\n (CHARIC R %.6f)"
+"\n (MAP"
+"\n (SELECTFONT D %i)"
+"\n (SETCHAR O %o)"
+"\n )"
+"\n )",
+c,
+tfm_output_size_x+2*tfm_offset_x,
+tfm_output_size_y+tfm_offset_y,
+-tfm_offset_y,
+slant*(tfm_output_size_y+tfm_offset_y),
+i,
+count);
+
+count++;
+if(count==256)
+{count= 0;
+i++;
+}
+}
+else
+continue;
+}
+
+fclose(out);
+}
+
+
+
+/*:48*//*51:*/
+#line 1737 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+static void write_job(void)
+{FILE*out;
+int i,j;
+char buffer[FILE_NAME_LENGTH+1];
+
+
+strcpy(buffer,output_name);
+strcat(buffer,job_extension);
+if(!(out= fopen(buffer,WRITE_TXT)))
+{fprintf(stderr,"Couldn't open `%s'\n",buffer);
+exit(1);
+}
+if(!quiet)
+printf("\nWriting `%s'\n",buffer);
+
+if(pk_files)
+{if(unicode)
+{for(i= (min_char>>8),j= 0;j<nmb_files;i++,j++)
+fprintf(out,
+"%s %s%02x.gf %s%s%02x.%.0ipk\n"
+"%s %s%02x.gf\n",
+GFTOPK_NAME,output_name,i,
+pk_directory,output_name,i,
+long_extension?(int)(dpi_x*magstep_x+0.5):0,
+rm_command,output_name,i);
+}
+else
+{for(i= 1;i<=nmb_files;i++)
+fprintf(out,
+"%s %s%02i.gf %s%s%02i.%.0ipk\n"
+"%s %s%02i.gf\n",
+GFTOPK_NAME,output_name,i,
+pk_directory,output_name,i,
+long_extension?(int)(dpi_x*magstep_x+0.5):0,
+rm_command,output_name,i);
+}
+}
+
+if(tfm_files)
+{fprintf(out,
+"\n"
+"%s %s.pl %s.tfm\n"
+"%s %s.pl\n"
+"\n",
+PLTOTF_NAME,output_name,output_name,
+rm_command,output_name);
+
+if(unicode)
+{for(i= (min_char>>8),j= 0;j<nmb_files;i++,j++)
+fprintf(out,
+"%s %s.tfm %s%s%02x.tfm\n",
+cp_command,output_name,
+tfm_directory,output_name,i);
+}
+else
+{for(i= 1;i<=nmb_files;i++)
+fprintf(out,
+"%s %s.tfm %s%s%02i.tfm\n",
+cp_command,output_name,
+tfm_directory,output_name,i);
+}
+
+fprintf(out,
+"\n"
+"%s %s.tfm",
+rm_command,output_name);
+}
+
+if(ofm_file)
+{fprintf(out,
+"\n"
+"%s %s.ovp %s.ovf %s.ofm\n"
+"%s %s.ovp\n"
+"\n",
+OVP2OVF_NAME,output_name,output_name,output_name,
+rm_command,output_name);
+}
+
+fclose(out);
+}
+
+
+
+/*:51*//*55:*/
+#line 1989 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+static void read_config(void)
+{HBF_BBOX*boxp;
+char*real_config_file;
+
+
+/*56:*/
+#line 2041 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+{int i,lastext= -1;
+
+for(i= 0;config_file[i];i++)
+if(config_file[i]=='.')
+lastext= i;
+else if(config_file[i]=='/'||
+config_file[i]==':'||
+config_file[i]=='\\')
+lastext= -1;
+
+if(lastext==-1)
+strcat(config_file,".cfg");
+}
+
+
+/*:56*/
+#line 1995 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+
+real_config_file= TeX_search_cfg_file(config_file);
+if(!real_config_file)
+{if(mf_like)
+{if(!quiet)
+printf("Couldn't find `%s'\n",config_file);
+exit(2);
+}
+else
+{fprintf(stderr,"Couldn't find `%s'\n",config_file);
+exit(1);
+}
+}
+
+if(!(config= fopen(real_config_file,READ_TXT)))
+{if(!testing)
+{fprintf(stderr,"Couldn't open `%s'\n",config_file);
+exit(1);
+}
+else
+{if(!quiet)
+fprintf(stderr,"Couldn't find or open `%s'\n",config_file);
+exit(2);
+}
+}
+
+if(testing)
+{if(!quiet)
+printf("%s\n",real_config_file);
+exit(0);
+}
+
+/*57:*/
+#line 2058 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+{char hbf_header[STRING_LENGTH+1];
+char*real_hbf_header;
+
+if(!fsearch("hbf_header"))
+config_error("hbf_header");
+else
+strcpy(hbf_header,Buffer);
+
+real_hbf_header= TeX_search_hbf_file(hbf_header);
+if(!real_hbf_header)
+{fprintf(stderr,"Couldn't find `%s'\n",hbf_header);
+exit(1);
+}
+
+hbfDebug= 1;
+
+
+if(!(hbf= hbfOpen(real_hbf_header)))
+exit(1);
+
+hbfDebug= 0;
+
+boxp= hbfBitmapBBox(hbf);
+input_size_x= boxp->hbf_height;
+input_size_y= boxp->hbf_width;
+font_encoding= hbfProperty(hbf,"HBF_CODE_SCHEME");
+
+if(!fsearch("output_name"))
+config_error("output_name");
+else
+strcpy(output_name,Buffer);
+}
+
+
+/*:57*/
+#line 2028 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+/*59:*/
+#line 2102 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+{if(fsearch("nmb_files"))
+nmb_files= atoi(Buffer);
+if(fsearch("unicode"))
+if(Buffer[0]=='y'||Buffer[0]=='Y')
+unicode= TRUE;
+if(fsearch("min_char"))
+{user_min_char= strtoul(Buffer,(char**)NULL,0);
+have_min_char= TRUE;
+}
+
+if(!mf_like)
+{if(fsearch("pk_files"))
+if(Buffer[0]=='n'||Buffer[0]=='N')
+pk_files= FALSE;
+if(fsearch("tfm_files"))
+if(Buffer[0]=='n'||Buffer[0]=='N')
+tfm_files= FALSE;
+if(fsearch("ofm_file"))
+if(Buffer[0]=='y'||Buffer[0]=='Y')
+ofm_file= TRUE;
+if(fsearch("long_extension"))
+if(Buffer[0]=='n'||Buffer[0]=='N')
+long_extension= FALSE;
+}
+
+if(fsearch("slant"))
+slant= atof(Buffer);
+if(slant<0.0||slant> 1.0)
+{fprintf(stderr,"Invalid slant\n");
+exit(1);
+}
+if(fsearch("rotation"))
+if(Buffer[0]=='y'||Buffer[0]=='Y')
+rotation= TRUE;
+
+if(fsearch("mag_x"))
+mag_x= atof(Buffer);
+if(fsearch("mag_y"))
+mag_y= atof(Buffer);
+if(!mag_x&&!mag_y)
+{mag_x= 1.0;
+mag_y= 1.0;
+}
+if(mag_x&&!mag_y)
+mag_y= mag_x;
+if(mag_y&&!mag_x)
+mag_x= mag_y;
+if(mag_x<=0.0)
+{fprintf(stderr,"Invalid horizontal magnification\n");
+exit(1);
+}
+if(mag_y<=0.0)
+{fprintf(stderr,"Invalid vertical magnification\n");
+exit(1);
+}
+
+if(fsearch("dpi_x"))
+dpi_x= atoi(Buffer);
+if(fsearch("dpi_y"))
+dpi_y= atoi(Buffer);
+if(!dpi_x&&!dpi_y)
+{dpi_x= 300;
+dpi_y= 300;
+}
+if(dpi_x&&!dpi_y)
+dpi_y= dpi_x;
+if(dpi_y&&!dpi_x)
+dpi_x= dpi_y;
+if(dpi_x<=PRINTER_MIN_RES_X)
+{fprintf(stderr,"Invalid horizontal printer resolution\n");
+exit(1);
+}
+if(dpi_y<=PRINTER_MIN_RES_Y)
+{fprintf(stderr,"Invalid vertical printer resolution\n");
+exit(1);
+}
+
+if(fsearch("design_size"))
+design_size= atof(Buffer);
+
+if(fsearch("x_offset"))
+offset_x= atoi(Buffer);
+else
+offset_x= rotation?0:(boxp->hbf_xDisplacement*mag_x+0.5);
+if(fsearch("y_offset"))
+offset_y= atoi(Buffer);
+else
+offset_y= rotation?0:(boxp->hbf_yDisplacement*mag_y+0.5);
+if(!fsearch("comment"))
+comment[0]= '\0';
+else
+strcpy(comment,Buffer);
+
+if(fsearch("threshold"))
+threshold= atoi(Buffer);
+if(threshold<=0||threshold>=255)
+{fprintf(stderr,"Invalid threshold\n");
+exit(1);
+}
+
+if(!fsearch("checksum"))
+checksum= 0;
+else
+checksum= strtoul(Buffer,(char**)NULL,0);
+
+if(!fsearch("coding"))
+coding[0]= '\0';
+else
+strcpy(coding,Buffer);
+
+if(!fsearch("pk_directory"))
+pk_directory[0]= '\0';
+else
+strcpy(pk_directory,Buffer);
+
+if(!fsearch("tfm_directory"))
+tfm_directory[0]= '\0';
+else
+strcpy(tfm_directory,Buffer);
+
+if(fsearch("rm_command"))
+strcpy(rm_command,Buffer);
+else
+strcpy(rm_command,"rm");
+
+if(fsearch("cp_command"))
+strcpy(cp_command,Buffer);
+else
+strcpy(cp_command,"cp");
+
+if(!fsearch("job_extension"))
+job_extension[0]= '\0';
+else
+{strncpy(job_extension,Buffer,EXTENSION_LENGTH);
+job_extension[EXTENSION_LENGTH]= '\0';
+}
+}
+
+
+/*:59*/
+#line 2029 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+
+/*61:*/
+#line 2256 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+{const void*cp;
+HBF_CHAR dummy;
+
+cp= hbfGetCodeRange(hbf,NULL,&min_char,&max_char);
+for(;cp!=NULL;cp= hbfGetCodeRange(hbf,cp,&dummy,&max_char))
+;
+
+if(have_min_char)
+min_char= user_min_char;
+}
+
+
+/*:61*/
+#line 2031 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+/*63:*/
+#line 2285 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+{const void*b2r;
+unsigned char dummy;
+int i;
+
+for(i= 0;i<256;i++)
+b2_codes[i]= 0;
+
+b2r= hbfGetByte2Range(hbf,NULL,&min_2_byte,&max_2_byte);
+dummy= min_2_byte;
+for(;b2r!=NULL;b2r= hbfGetByte2Range(hbf,b2r,&dummy,&max_2_byte))
+{for(i= dummy;i<=max_2_byte;i++)
+b2_codes[i]= VALID_SUBCODE;
+}
+
+for(i= 0;i<256;i++)
+if(b2_codes[i]==VALID_SUBCODE)
+nmb_2_bytes++;
+}
+
+
+/*:63*/
+#line 2032 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+
+fclose(config);
+}
+
+
+/*:55*//*65:*/
+#line 2317 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+static int fsearch(const char*search_string)
+{char*P,p;
+const char*Q;
+char temp_buffer[STRING_LENGTH+1];
+char env_name[STRING_LENGTH+1];
+char*env_p;
+char*env_value;
+char*Buf_p;
+int Ch,ch,old_ch= '\n';
+int count= STRING_LENGTH;
+
+rewind(config);
+
+do
+{Q= search_string;
+p= tolower((unsigned char)*Q);
+Ch= fgetc(config);
+ch= tolower(Ch);
+while(!(ch==p&&old_ch=='\n')&&Ch!=EOF)
+
+
+{old_ch= ch;
+Ch= fgetc(config);
+ch= tolower(Ch);
+}
+
+for(;;)
+{if(*(++Q)=='\0')
+if((Ch= fgetc(config))==' '||Ch=='\t')
+
+goto success;
+Ch= fgetc(config);
+if(tolower(Ch)!=tolower((unsigned char)*Q))
+break;
+}
+}
+while(Ch!=EOF);
+
+return 0;
+
+success:
+P= temp_buffer;
+
+while((Ch= fgetc(config))==' '||Ch=='\t')
+
+;
+while(Ch!='\n'&&--count> 0&&Ch!=EOF)
+{*P++= Ch;
+Ch= fgetc(config);
+}
+*P= '\0';
+
+if(*temp_buffer)
+/*66:*/
+#line 2396 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+{P= temp_buffer;
+Buf_p= Buffer;
+count= STRING_LENGTH-1;
+
+while(*P&&count> 0)
+{env_p= env_name;
+
+if(*P=='$')
+{P++;
+if(*P=='$')
+{*(Buf_p++)= *(P++);
+count--;
+continue;
+}
+while(*P=='{')
+P++;
+if(!(isalpha((unsigned char)*P)||*P=='_'))
+{fprintf(stderr,
+"Invalid environment variable name in configuration file\n");
+exit(1);
+}
+*(env_p++)= *(P++);
+while(*P)
+{if(isalnum((unsigned char)*P)||*P=='_')
+*(env_p++)= *(P++);
+else
+{while(*P=='}')
+P++;
+*env_p= '\0';
+break;
+}
+}
+
+env_value= getenv(env_name);
+if(env_value)
+{while(*env_value&&count> 0)
+{*(Buf_p++)= *(env_value++);
+count--;
+}
+}
+}
+else
+{*(Buf_p++)= *(P++);
+count--;
+}
+}
+*Buf_p= '\0';
+}
+
+
+/*:66*/
+#line 2371 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+else
+*Buffer= '\0';
+
+return(*Buffer)?1:0;
+}
+
+
+/*:65*//*68:*/
+#line 2456 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+static void config_error(const char*message)
+{fprintf(stderr,"Couldn't find `%s' entry in configuration file\n",
+message);
+exit(1);
+}
+
+
+
+/*:68*//*72:*/
+#line 2499 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+static const char*TeX_search_version(void)
+{
+#if defined(HAVE_LIBKPATHSEA)
+return kpathsea_version_string;
+#elif defined(HAVE_EMTEXDIR)
+return emtex_version_string;
+#elif defined(HAVE_MIKTEX)
+char buf[200];
+
+strcpy(buf,"MiKTeX ");
+miktex_get_miktex_version_string_ex(buf+7,sizeof(buf)-7);
+
+return buf;
+#else
+return no_version_string;
+#endif
+}
+
+
+/*:72*//*75:*/
+#line 2541 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+#ifdef HAVE_EMTEXDIR
+static int dir_setup(ed,env,dir,flags)
+struct emtex_dir*ed;
+const char*env;
+const char*dir;
+unsigned flags;
+
+{const char*val;
+char path[260];
+
+ed->alloc= 0;
+ed->used= 0;
+ed->list= NULL;
+
+if(env!=NULL&&(val= getenv(env))!=NULL)
+return setup_list(ed,path,val,flags);
+else
+fprintf(stderr,
+"Environment variable `%s' not set; use current directory\n",
+env);
+
+return TRUE;
+}
+#endif
+
+
+/*:75*//*77:*/
+#line 2576 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+#ifdef HAVE_EMTEXDIR
+static char*file_find(name,list)
+char*name;
+struct emtex_dir*list;
+
+{if(emtex_dir_find(name_buffer,sizeof(name_buffer),list,name,EDF_CWD))
+return name_buffer;
+
+return NULL;
+}
+#endif
+
+
+/*:77*//*80:*/
+#line 2627 "/home/wl/git/cjk/cjk-4.8.5/utils/hbf2gf/hbf2gf.w"
+
+#if defined(HAVE_LIBKPATHSEA)
+static char*TeX_search_cfg_file(char*name)
+{
+return kpse_find_file(name,kpse_program_text_format,TRUE);
+}
+
+
+static char*TeX_search_hbf_file(char*name)
+{
+return kpse_find_file(name,kpse_miscfonts_format,TRUE);
+}
+
+
+#elif defined(HAVE_EMTEXDIR)
+static char*TeX_search_cfg_file(char*name)
+{return file_find(name,&cfg_path);
+}
+
+
+static char*TeX_search_hbf_file(char*name)
+{return file_find(name,&hbf_path);
+}
+
+
+#elif defined(HAVE_MIKTEX)
+static char*TeX_search_cfg_file(char*name)
+{char result[_MAX_PATH];
+
+if(!miktex_find_input_file("hbf2gf",*name,result))
+return 0;
+return strdup(result);
+}
+
+
+static char*TeX_search_hbf_file(char*name)
+{char result[_MAX_PATH];
+
+
+if(!miktex_find_miscfont_file(*name,result))
+return 0;
+return strdup(result);
+}
+
+
+#else
+static char*TeX_search_cfg_file(char*name)
+{return name;
+}
+
+
+static char*TeX_search_hbf_file(char*name)
+{return name;
+}
+#endif
+
+
+
+/*:80*/