#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 #endif #include #include #include #include #include #ifdef TM_IN_SYS_TIME #include #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 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=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>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 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=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>bitshift)&1)==1?PIXEL_MAXVAL:0; bP+= offset; } curr_row--; } else {bitshift= -1; for(col= 0,xP= pixelrow;col>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=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>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>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++))<=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++))<>8),j= 0;j>8),j= 0;jhbf_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*/