1 #define banner  \
2 "hbf2gf (CJK ver. 4.8.4)" \
3  \
4 
5 #define TRUE 1
6 #define FALSE 0 \
7 
8 #define STRING_LENGTH 255 \
9 
10 #define FILE_NAME_LENGTH 1024 \
11  \
12 
13 #define VERSION  \
14 "\n" \
15 "Copyright (C) 1996-1999 Werner Lemberg.\n" \
16 "There is NO warranty.  You may redistribute this software\n" \
17 "under the terms of the GNU General Public License\n" \
18 "and the HBF library copyright.\n" \
19 "\n" \
20 "For more information about these matters, see the files\n" \
21 "named COPYING and hbf.c.\n" \
22 "\n" \
23 
24 #define USAGE  \
25 "\n" \
26 "Usage: hbf2gf [-q] configuration_file[.cfg]\n" \
27 "       hbf2gf [options] font_name x_resolution [y_scale | y_resolution]\n" \
28 "       hbf2gf -t [-q] font_name\n" \
29 "\n" \
30 "  Convert a font in HBF format to TeX's GF resp. PK format.\n" \
31 "\n" \
32 "         -q             be silent\n" \
33 "         -p             don't produce a PL file\n" \
34 "         -g             don't produce a GF file\n" \
35 "         -n             use no resolution in extension (only `.gf')\n" \
36 "         -t             test for font_name (returns 0 on success)\n" \
37 "         --help         print this message and exit\n" \
38 "         --version      print version number and exit\n" \
39 "\n" \
40 
41 #define GF_ID 131
42 #define PRE 247 \
43 
44 #define headerstring " hbf2gf output " \
45 
46 #define BOC 67
47 #define BOC1 68
48 #define EOC 69 \
49 
50 #define _2_16 65536.0
51 #define _2_20 1048576.0 \
52 
53 #define XXX1 239
54 #define XXX2 240
55 #define XXX3 241
56 #define XXX4 242 \
57 
58 #define YYY 243 \
59 
60 #define POST 248 \
61 
62 #define CHAR_LOC 245
63 #define CHAR_LOC0 246 \
64 
65 #define POSTPOST 249
66 #define POSTPOST_ID 223 \
67 
68 #define BLACK 1
69 #define WHITE 0 \
70 
71 #define PIXEL_MAXVAL 255
72 #define SCALE 4096
73 #define HALFSCALE 2048 \
74 
75 #define MAX_CHAR_SIZE 1023 \
76 
77 #define PAINT_(x) (x)
78 #define PAINT1 64
79 #define PAINT2 65
80 #define PAINT3 66 \
81 
82 #define SKIP0 70
83 #define SKIP1 71
84 #define SKIP2 72
85 #define SKIP3 73 \
86 
87 #define NEW_ROW_(x) ((x) +74)  \
88 
89 #define NOOP 244 \
90 
91 #define EXTENSION_LENGTH 8 \
92 
93 #define GFTOPK_NAME "gftopk"
94 #define PLTOTF_NAME "pltotf"
95 #define OVP2OVF_NAME "ovp2ovf" \
96 
97 #define PRINTER_MIN_RES_X 50
98 #define PRINTER_MIN_RES_Y 50 \
99 
100 #define VALID_SUBCODE 1 \
101 
102 /*4:*/
103 #line 191 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
104 
105 /*10:*/
106 #line 408 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
107 
108 #ifdef HAVE_CONFIG_H
109 #include <c-auto.h>
110 #endif
111 #include <ctype.h>
112 #include <stdio.h>
113 #include <stdlib.h>
114 #include <string.h>
115 #include <time.h>
116 #ifdef TM_IN_SYS_TIME
117 #include <sys/time.h>
118 #endif
119 #include "hbf.h"
120 
121 
122 
123 /*:10*//*69:*/
124 #line 2473 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
125 
126 #if defined(HAVE_LIBKPATHSEA)
127 #include "kpathsea/kpathsea.h"
128 
129 #elif defined(HAVE_EMTEXDIR)
130 #include "emtexdir.h"
131 
132 #elif defined(HAVE_MIKTEX)
133 #include "miktex.h"
134 #endif
135 
136 /*:69*/
137 #line 192 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
138 
139 /*11:*/
140 #line 429 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
141 
142 static void write_file(void);
143 
144 
145 /*:11*//*13:*/
146 #line 491 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
147 
148 static void write_pre(void);
149 
150 
151 /*:13*//*16:*/
152 #line 579 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
153 
154 static void write_data(void);
155 
156 
157 /*:16*//*20:*/
158 #line 690 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
159 
160 static void write_post(void);
161 
162 
163 /*:20*//*25:*/
164 #line 834 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
165 
166 static void fputl(long,FILE*);
167 
168 
169 /*:25*//*29:*/
170 #line 994 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
171 
172 static void make_pixel_array(void);
173 
174 
175 /*:29*//*36:*/
176 #line 1222 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
177 
178 static
179 #ifdef __GNUC__
180 __inline__
181 #endif
182 void read_row(unsigned char*);
183 
184 
185 /*:36*//*39:*/
186 #line 1274 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
187 
188 static
189 #ifdef __GNUC__
190 __inline__
191 #endif
192 void write_row(unsigned char*);
193 
194 
195 /*:39*//*41:*/
196 #line 1329 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
197 
198 static void write_coding(void);
199 
200 
201 /*:41*//*45:*/
202 #line 1490 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
203 
204 static void write_pl(void);
205 
206 
207 /*:45*//*47:*/
208 #line 1587 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
209 
210 static void write_ovp(void);
211 
212 
213 /*:47*//*50:*/
214 #line 1732 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
215 
216 static void write_job(void);
217 
218 
219 /*:50*//*54:*/
220 #line 1981 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
221 
222 static void read_config(void);
223 
224 
225 /*:54*//*64:*/
226 #line 2312 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
227 
228 static int fsearch(const char*);
229 
230 
231 /*:64*//*67:*/
232 #line 2451 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
233 
234 static void config_error(const char*);
235 
236 
237 /*:67*//*71:*/
238 #line 2494 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
239 
240 static const char*TeX_search_version(void);
241 
242 
243 /*:71*//*74:*/
244 #line 2529 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
245 
246 #ifdef HAVE_EMTEXDIR
247 extern int setup_list(struct emtex_dir*,char*,const char*,unsigned);
248 static int dir_setup(struct emtex_dir*,const char*,const char*,unsigned);
249 static char*file_find(char*,struct emtex_dir*);
250 #endif
251 
252 
253 /*:74*//*79:*/
254 #line 2621 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
255 
256 static char*TeX_search_cfg_file(char*);
257 static char*TeX_search_hbf_file(char*);
258 
259 
260 /*:79*/
261 #line 193 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
262 
263 /*2:*/
264 #line 127 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
265 
266 int nmb_files= -1;
267 int unicode= FALSE;
268 
269 int testing= FALSE;
270 
271 int mf_like= FALSE;
272 int file_number= 0;
273 
274 double x_resolution= 0.0;
275 double y_scale= 1.0;
276 
277 int pk_files= TRUE;
278 int tfm_files= TRUE;
279 int long_extension= TRUE;
280 int quiet= FALSE;
281 
282 char config_file[FILE_NAME_LENGTH+4+1];
283 
284 char output_name[STRING_LENGTH+1];
285 
286 FILE*config,*out;
287 HBF*hbf;
288 
289 #ifdef msdos
290 #define WRITE_BIN   "wb"
291 #define WRITE_TXT   "wt"
292 #define READ_BIN    "rb"
293 #define READ_TXT    "rt"
294 #else
295 #define WRITE_BIN   "w"
296 #define WRITE_TXT   "w"
297 #define READ_BIN    "r"
298 #define READ_TXT    "r"
299 #endif
300 
301 int end_of_file= FALSE;
302 
303 
304 /*:2*//*15:*/
305 #line 538 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
306 
307 long char_adr[256];
308 long*char_adr_p;
309 
310 int pk_offset_x;
311 
312 
313 double tfm_offset_x;
314 int pk_offset_y;
315 
316 double tfm_offset_y;
317 
318 int input_size_x;
319 int input_size_y;
320 const char*font_encoding;
321 int pk_width;
322 int pk_output_size_x;
323 
324 double tfm_output_size_x;
325 int pk_output_size_y;
326 double tfm_output_size_y;
327 
328 double design_size= 10.0;
329 double target_size_x;
330 double target_size_y;
331 double magstep_x;
332 double magstep_y;
333 double slant;
334 int rotation;
335 
336 double mag_x;
337 double mag_y;
338 
339 int empty_char;
340 int last_char;
341 
342 int dot_count;
343 
344 
345 
346 /*:15*//*19:*/
347 #line 667 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
348 
349 char coding[STRING_LENGTH+1];
350 char comment[STRING_LENGTH+1];
351 
352 unsigned long checksum;
353 
354 long pk_total_min_x;
355 long pk_total_max_x;
356 long pk_total_min_y;
357 long pk_total_max_y;
358 
359 int dpi_x;
360 int dpi_y;
361 double ppp_x;
362 double ppp_y;
363 
364 
365 /*:19*//*27:*/
366 #line 871 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
367 
368 HBF_CHAR code;
369 const unsigned char*bitmap;
370 
371 const unsigned char*bP;
372 
373 unsigned char out_char[MAX_CHAR_SIZE*MAX_CHAR_SIZE+1];
374 
375 unsigned char*out_char_p;
376 
377 unsigned char pixelrow[MAX_CHAR_SIZE];
378 unsigned char temp_pixelrow[MAX_CHAR_SIZE];
379 unsigned char new_pixelrow[MAX_CHAR_SIZE+1];
380 
381 int curr_row;
382 
383 long grayrow[MAX_CHAR_SIZE];
384 
385 long s_mag_x,s_mag_y,s_slant;
386 
387 
388 /*:27*//*38:*/
389 #line 1269 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
390 
391 int threshold= 128;
392 
393 
394 /*:38*//*49:*/
395 #line 1721 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
396 
397 char job_extension[EXTENSION_LENGTH+1];
398 char rm_command[STRING_LENGTH+1];
399 char cp_command[STRING_LENGTH+1];
400 char pk_directory[STRING_LENGTH+1];
401 char tfm_directory[STRING_LENGTH+1];
402 
403 int ofm_file= FALSE;
404 
405 
406 /*:49*//*53:*/
407 #line 1976 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
408 
409 char Buffer[STRING_LENGTH+1];
410 
411 
412 /*:53*//*58:*/
413 #line 2094 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
414 
415 int offset_x;
416 int offset_y;
417 
418 HBF_CHAR user_min_char;
419 int have_min_char= FALSE;
420 
421 /*:58*//*60:*/
422 #line 2251 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
423 
424 HBF_CHAR min_char,max_char;
425 
426 
427 /*:60*//*62:*/
428 #line 2278 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
429 
430 char b2_codes[256];
431 unsigned char min_2_byte,max_2_byte;
432 int nmb_2_bytes= 0;
433 
434 
435 /*:62*//*70:*/
436 #line 2485 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
437 
438 #if defined(HAVE_EMTEXDIR)
439 char emtex_version_string[]= "emTeXdir";
440 #elif !defined(HAVE_MIKTEX)
441 char no_version_string[]= "no search library";
442 #endif
443 
444 
445 /*:70*//*73:*/
446 #line 2522 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
447 
448 #ifdef HAVE_EMTEXDIR
449 struct emtex_dir cfg_path,hbf_path;
450 #endif
451 
452 
453 /*:73*//*76:*/
454 #line 2569 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
455 
456 #ifdef HAVE_EMTEXDIR
457 char name_buffer[FILE_NAME_LENGTH+1];
458 #endif
459 
460 
461 /*:76*/
462 #line 194 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
463 
464 
465 
main(int argc,char * argv[])466 int main(int argc,char*argv[])
467 {char*p;
468 
469 /*78:*/
470 #line 2594 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
471 
472 #if defined(HAVE_LIBKPATHSEA)
473 kpse_set_program_name(argv[0],"hbf2gf");
474 kpse_init_prog("HBF2GF",300,"cx","cmr10");
475 
476 #elif defined(HAVE_EMTEXDIR)
477 if(!dir_setup(&cfg_path,"HBFCFG",NULL,EDS_BANG))
478 {fprintf(stderr,
479 "Couldn't setup search path for configuration files\n");
480 exit(1);
481 }
482 if(!dir_setup(&hbf_path,"HBFONTS",NULL,EDS_BANG))
483 {fprintf(stderr,
484 "Couldn't setup search path for HBF header files\n");
485 exit(1);
486 }
487 #endif
488 
489 
490 /*:78*/
491 #line 200 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
492 
493 
494 /*7:*/
495 #line 307 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
496 
497 if(argc==2)
498 {if(strcmp(argv[1],"--help")==0)
499 /*6:*/
500 #line 288 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
501 
502 {printf(USAGE);
503 exit(0);
504 }
505 
506 
507 /*:6*/
508 #line 310 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
509 
510 else if(strcmp(argv[1],"--version")==0)
511 /*5:*/
512 #line 261 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
513 
514 {printf("\n");
515 printf(banner);
516 printf(" (%s)\n",TeX_search_version());
517 printf(VERSION);
518 exit(0);
519 }
520 
521 
522 /*:5*/
523 #line 312 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
524 
525 }
526 
527 while(argc> 1)
528 {p= argv[1];
529 if(p[0]!='-')
530 break;
531 if(p[1]=='p')
532 tfm_files= FALSE;
533 else if(p[1]=='g')
534 pk_files= FALSE;
535 else if(p[1]=='n')
536 long_extension= FALSE;
537 else if(p[1]=='q')
538 quiet= TRUE;
539 else if(p[1]=='t')
540 testing= TRUE;
541 
542 argv++;
543 argc--;
544 }
545 
546 if(testing)
547 {if(argc!=2)
548 {fprintf(stderr,"Need exactly one parameter for `-t' option.\n");
549 fprintf(stderr,"Try `hbf2gf --help' for more information.\n");
550 exit(1);
551 }
552 }
553 else if(argc<2||argc> 4)
554 {fprintf(stderr,"Invalid number of parameters.\n");
555 fprintf(stderr,"Try `hbf2gf --help' for more information.\n");
556 exit(1);
557 }
558 
559 
560 /*:7*/
561 #line 202 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
562 
563 
564 if(!quiet)
565 printf("\n%s\n\n",banner);
566 
567 strncpy(config_file,argv[1],FILE_NAME_LENGTH);
568 config_file[FILE_NAME_LENGTH]= '\0';
569 
570 if(argc> 2||testing)
571 {int l= strlen(config_file);
572 
573 if(l> 2)
574 config_file[l-2]= '\0';
575 
576 else
577 {if(!quiet)
578 printf("`%s' can't be a subfont created by hbf2gf\n",
579 config_file);
580 exit(2);
581 }
582 
583 mf_like= TRUE;
584 }
585 
586 read_config();
587 
588 if(mf_like)
589 /*8:*/
590 #line 352 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
591 
592 {if(unicode)
593 file_number= (int)strtol(&argv[1][strlen(argv[1])-2],
594 (char**)NULL,16);
595 else
596 file_number= atoi(&argv[1][strlen(argv[1])-2]);
597 
598 x_resolution= atof(argv[2]);
599 if(x_resolution<PRINTER_MIN_RES_X)
600 {fprintf(stderr,"Invalid horizontal resolution\n");
601 exit(1);
602 }
603 
604 if(argc> 3)
605 {y_scale= atof(argv[3]);
606 if(y_scale<0.01)
607 {fprintf(stderr,
608 "Invalid vertical scaling factor or resolution\n");
609 exit(1);
610 }
611 if(y_scale> 10.0)
612 y_scale= (double)x_resolution/y_scale;
613 }
614 }
615 
616 
617 /*:8*/
618 #line 229 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
619 
620 
621 /*28:*/
622 #line 903 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
623 
624 {int col,offset;
625 
626 if(rotation)
627 {int tmp;
628 
629 
630 tmp= input_size_x;
631 input_size_x= input_size_y;
632 input_size_y= tmp;
633 }
634 
635 if(mf_like)
636 {target_size_x= design_size*(x_resolution/dpi_x);
637 target_size_y= design_size*(x_resolution*y_scale/dpi_y);
638 }
639 else
640 target_size_x= target_size_y= design_size;
641 magstep_x= target_size_x/design_size;
642 magstep_y= target_size_y/design_size;
643 
644 pk_offset_x= offset_x*magstep_x+0.5;
645 pk_offset_y= offset_y*magstep_y+0.5;
646 tfm_offset_x= offset_x/(dpi_x/72.27)/design_size;
647 tfm_offset_y= offset_y/(dpi_y/72.27)/design_size;
648 
649 pk_width= input_size_x*mag_x*magstep_x+0.5;
650 pk_output_size_x= input_size_x*mag_x*magstep_x+
651 input_size_y*mag_y*magstep_y*slant+0.5;
652 pk_output_size_y= input_size_y*mag_y*magstep_y+0.5;
653 tfm_output_size_x= input_size_x*mag_x/
654 (dpi_x/72.27)/design_size;
655 tfm_output_size_y= input_size_y*mag_y/
656 (dpi_y/72.27)/design_size;
657 if(pk_output_size_x> MAX_CHAR_SIZE)
658 {fprintf(stderr,"Output character box width too big\n");
659 exit(1);
660 }
661 if(pk_output_size_y> MAX_CHAR_SIZE)
662 {fprintf(stderr,"Output character box height too big\n");
663 exit(1);
664 }
665 
666 for(col= 0;col<input_size_x;++col)
667 grayrow[col]= HALFSCALE;
668 
669 if(!mf_like)
670 code= (min_char&0xFF00)+min_2_byte;
671 else
672 {if((file_number<(unicode?0:1))||(file_number>=0x100))
673 {fprintf(stderr,"Invalid subfile number\n");
674 exit(1);
675 }
676 
677 if(unicode)
678 {offset= 0;
679 code= file_number*0x100;
680 }
681 else
682 {offset= (file_number-1)*256%nmb_2_bytes;
683 code= (min_char&0xFF00)+min_2_byte+
684 (file_number-1)*256/nmb_2_bytes*0x100;
685 }
686 
687 while(offset--)
688 while(!b2_codes[code++&0xFF])
689 
690 ;
691 
692 if(code> max_char)
693 {fprintf(stderr,"Invalid subfile number\n");
694 exit(1);
695 }
696 }
697 
698 s_mag_x= mag_x*magstep_x*SCALE;
699 s_mag_y= mag_y*magstep_y*SCALE;
700 s_slant= slant*SCALE;
701 }
702 
703 
704 /*:28*/
705 #line 231 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
706 
707 
708 /*9:*/
709 #line 387 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
710 
711 {int j,max_numb;
712 
713 if(!mf_like)
714 {file_number= (unicode==TRUE?(min_char>>8):1);
715 if(nmb_files==-1)
716 max_numb= (unicode==TRUE?0x100:100);
717 else
718 max_numb= nmb_files;
719 }
720 else
721 max_numb= 1;
722 
723 for(j= 0;(j<max_numb)&&!end_of_file;file_number++,j++)
724 write_file();
725 
726 nmb_files= j;
727 }
728 
729 
730 /*:9*/
731 #line 233 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
732 
733 
734 if(tfm_files)
735 write_pl();
736 if(ofm_file)
737 write_ovp();
738 if(!mf_like)
739 write_job();
740 
741 hbfClose(hbf);
742 
743 exit(0);
744 return 0;
745 }
746 
747 
748 /*:4*//*12:*/
749 #line 437 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
750 
write_file(void)751 static void write_file(void)
752 {char output_file[FILE_NAME_LENGTH+1];
753 
754 
755 if(pk_files)
756 {if(mf_like)
757 {if(unicode)
758 sprintf(output_file,"%s%02x.%.0igf",
759 output_name,file_number,
760 long_extension?(int)(x_resolution+0.5):0);
761 else
762 sprintf(output_file,"%s%02i.%.0igf",
763 output_name,file_number,
764 long_extension?(int)(x_resolution+0.5):0);
765 }
766 else
767 {if(unicode)
768 sprintf(output_file,"%s%02x.gf",output_name,file_number);
769 else
770 sprintf(output_file,"%s%02i.gf",output_name,file_number);
771 }
772 if(!(out= fopen(output_file,WRITE_BIN)))
773 {fprintf(stderr,"Couldn't open `%s'\n",output_file);
774 exit(1);
775 }
776 if(!quiet)
777 printf("Writing `%s' ",output_file);
778 
779 write_pre();
780 write_data();
781 write_post();
782 fclose(out);
783 
784 if(!quiet)
785 printf("\n");
786 }
787 else
788 write_data();
789 }
790 
791 
792 /*:12*//*14:*/
793 #line 498 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
794 
write_pre(void)795 static void write_pre(void)
796 {char out_s[40],s[20];
797 time_t secs_now;
798 struct tm*time_now;
799 
800 
801 strcpy(out_s,headerstring);
802 
803 secs_now= time(NULL);
804 time_now= localtime(&secs_now);
805 strftime(s,20,"%Y.%m.%d:%H.%M",time_now);
806 strcat(out_s,s);
807 
808 fputc(PRE,out);
809 fputc(GF_ID,out);
810 fputc(strlen(out_s),out);
811 fputs(out_s,out);
812 }
813 
814 
815 /*:14*//*17:*/
816 #line 584 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
817 
write_data(void)818 static void write_data(void)
819 {dot_count= 0;
820 char_adr_p= char_adr;
821 
822 for(last_char= 0;(last_char<256)&&!end_of_file;last_char++)
823 /*18:*/
824 #line 609 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
825 
826 {if(dot_count++%10==0)
827 if(pk_files&&!quiet)
828 {printf(".");
829 fflush(stdout);
830 }
831 
832 empty_char= FALSE;
833 make_pixel_array();
834 if(end_of_file)
835 return;
836 
837 if(pk_files)
838 {*char_adr_p= ftell(out);
839 char_adr_p++;
840 
841 if(empty_char)
842 {fputc(BOC1,out);
843 fputc((unsigned char)last_char,out);
844 fputc(0,out);
845 fputc(0,out);
846 fputc(0,out);
847 fputc(0,out);
848 fputc(EOC,out);
849 }
850 else
851 {fputc(BOC,out);
852 fputl(last_char,out);
853 fputl(-1L,out);
854 fputl(pk_offset_x,out);
855 fputl(pk_output_size_x+pk_offset_x,out);
856 fputl(pk_offset_y,out);
857 fputl(pk_output_size_y+pk_offset_y,out);
858 
859 write_coding();
860 
861 fputc(EOC,out);
862 }
863 }
864 }
865 
866 
867 /*:18*/
868 #line 590 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
869 
870 }
871 
872 
873 /*:17*//*21:*/
874 #line 695 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
875 
write_post(void)876 static void write_post(void)
877 {long special_adr;
878 long post_adr;
879 
880 long designsize= design_size*_2_20;
881 
882 int pk_dx;
883 long tfm_width;
884 
885 int i;
886 long temp;
887 
888 
889 ppp_x= dpi_x/72.27*magstep_x;
890 ppp_y= dpi_y/72.27*magstep_y;
891 
892 pk_total_min_x= pk_offset_x;
893 pk_total_max_x= pk_output_size_x+2*pk_offset_x;
894 pk_total_min_y= pk_offset_y;
895 pk_total_max_y= pk_output_size_y+pk_offset_y;
896 
897 pk_dx= pk_width+2*pk_offset_x;
898 tfm_width= (tfm_output_size_x+2*tfm_offset_x)*_2_20;
899 
900 
901 /*22:*/
902 #line 741 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
903 
904 special_adr= ftell(out);
905 
906 if(*coding)
907 {fputc(XXX1,out);
908 fputc(strlen(coding),out);
909 fputs(coding,out);
910 }
911 
912 if(*comment)
913 {fputc(XXX1,out);
914 fputc(strlen(comment),out);
915 fputs(comment,out);
916 }
917 
918 
919 /*:22*/
920 #line 721 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
921 
922 /*23:*/
923 #line 770 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
924 
925 post_adr= ftell(out);
926 fputc(POST,out);
927 fputl(special_adr,out);
928 
929 fputl(designsize,out);
930 fputl(checksum,out);
931 fputl(ppp_x*_2_16,out);
932 fputl(ppp_y*_2_16,out);
933 fputl(pk_total_min_x,out);
934 fputl(pk_total_max_x,out);
935 fputl(pk_total_min_y,out);
936 fputl(pk_total_max_y,out);
937 
938 char_adr_p= char_adr;
939 
940 if(pk_dx<256)
941 {for(i= 0;i<last_char;i++)
942 {fputc(CHAR_LOC0,out);
943 fputc(i,out);
944 fputc(pk_dx,out);
945 fputl(tfm_width,out);
946 fputl(*char_adr_p++,out);
947 }
948 }
949 else
950 {for(i= 0;i<last_char;i++)
951 {fputc(CHAR_LOC,out);
952 fputc(i,out);
953 fputl(pk_dx*_2_16,out);
954 fputl(0,out);
955 fputl(tfm_width,out);
956 fputl(*char_adr_p++,out);
957 }
958 }
959 
960 
961 /*:23*/
962 #line 722 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
963 
964 /*24:*/
965 #line 821 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
966 
967 fputc(POSTPOST,out);
968 fputl(post_adr,out);
969 fputc(GF_ID,out);
970 temp= ftell(out);
971 i= (int)(temp%4)+4;
972 while(i--)
973 fputc(POSTPOST_ID,out);
974 
975 
976 /*:24*/
977 #line 723 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
978 
979 }
980 
981 
982 /*:21*//*26:*/
983 #line 839 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
984 
fputl(long num,FILE * f)985 static void fputl(long num,FILE*f)
986 {fputc(num>>24,f);
987 fputc(num>>16,f);
988 fputc(num>>8,f);
989 fputc(num,f);
990 }
991 
992 
993 /*:26*//*30:*/
994 #line 999 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
995 
make_pixel_array(void)996 static void make_pixel_array(void)
997 {unsigned char*prP;
998 unsigned char*temp_prP;
999 unsigned char*new_prP;
1000 long*grP;
1001 
1002 register unsigned char*xP;
1003 register unsigned char*nxP;
1004 
1005 register int row,col;
1006 int rows_read= 0;
1007 register int need_to_read_row= 1;
1008 
1009 long frac_row_to_fill= SCALE;
1010 long frac_row_left= s_mag_y;
1011 
1012 int no_code= FALSE;
1013 
1014 
1015 prP= pixelrow;
1016 temp_prP= temp_pixelrow;
1017 new_prP= new_pixelrow;
1018 grP= grayrow;
1019 out_char_p= out_char;
1020 
1021 again:
1022 if(b2_codes[code&0xFF])
1023 {if(pk_files)
1024 {bitmap= hbfGetBitmap(hbf,code);
1025 bP= bitmap;
1026 
1027 
1028 if(!bitmap)
1029 empty_char= TRUE;
1030 else
1031 /*31:*/
1032 #line 1058 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
1033 
1034 {if(pk_output_size_y==input_size_y)
1035 temp_prP= prP;
1036 
1037 curr_row= input_size_y-1;
1038 for(row= 0;row<pk_output_size_y;++row)
1039 {/*32:*/
1040 #line 1072 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
1041 
1042 if(pk_output_size_y==input_size_y)
1043 
1044 read_row(prP);
1045 else
1046 {while(frac_row_left<frac_row_to_fill)
1047 {if(need_to_read_row)
1048 if(rows_read<input_size_y)
1049 {read_row(prP);
1050 ++rows_read;
1051 }
1052 
1053 for(col= 0,xP= prP;col<input_size_x;++col,++xP)
1054 grP[col]+= frac_row_left*(*xP);
1055 
1056 frac_row_to_fill-= frac_row_left;
1057 frac_row_left= s_mag_y;
1058 need_to_read_row= 1;
1059 }
1060 
1061 /*33:*/
1062 #line 1099 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
1063 
1064 if(need_to_read_row)
1065 if(rows_read<input_size_y)
1066 {read_row(prP);
1067 ++rows_read;
1068 need_to_read_row= 0;
1069 }
1070 
1071 for(col= 0,xP= prP,nxP= temp_prP;
1072 col<input_size_x;++col,++xP,++nxP)
1073 {register long g;
1074 
1075 
1076 g= grP[col]+frac_row_to_fill*(*xP);
1077 g/= SCALE;
1078 if(g> PIXEL_MAXVAL)
1079 g= PIXEL_MAXVAL;
1080 
1081 *nxP= g;
1082 grP[col]= HALFSCALE;
1083 }
1084 
1085 frac_row_left-= frac_row_to_fill;
1086 if(frac_row_left==0)
1087 {frac_row_left= s_mag_y;
1088 need_to_read_row= 1;
1089 }
1090 frac_row_to_fill= SCALE;
1091 
1092 
1093 /*:33*/
1094 #line 1092 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
1095 
1096 }
1097 
1098 
1099 /*:32*/
1100 #line 1064 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
1101 
1102 /*34:*/
1103 #line 1140 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
1104 
1105 if(pk_width==input_size_x&&s_slant==0)
1106 
1107 write_row(temp_prP);
1108 else
1109 {register long g= HALFSCALE;
1110 register long frac_col_to_fill= SCALE;
1111 register long frac_col_left;
1112 register int need_col= 0;
1113 
1114 
1115 nxP= new_prP;
1116 
1117 frac_col_left= (pk_output_size_y-row)*s_slant;
1118 while(frac_col_left>=frac_col_to_fill)
1119 {*(nxP++)= 0;
1120 frac_col_left-= frac_col_to_fill;
1121 }
1122 
1123 if(frac_col_left> 0)
1124 frac_col_to_fill-= frac_col_left;
1125 
1126 for(col= 0,xP= temp_prP;col<input_size_x;++col,++xP)
1127 {frac_col_left= s_mag_x;
1128 while(frac_col_left>=frac_col_to_fill)
1129 {if(need_col)
1130 {++nxP;
1131 g= HALFSCALE;
1132 }
1133 
1134 g+= frac_col_to_fill*(*xP);
1135 g/= SCALE;
1136 if(g> PIXEL_MAXVAL)
1137 g= PIXEL_MAXVAL;
1138 
1139 *nxP= g;
1140 frac_col_left-= frac_col_to_fill;
1141 frac_col_to_fill= SCALE;
1142 need_col= 1;
1143 }
1144 
1145 if(frac_col_left> 0)
1146 {if(need_col)
1147 {++nxP;
1148 g= HALFSCALE;
1149 need_col= 0;
1150 }
1151 
1152 g+= frac_col_left*(*xP);
1153 frac_col_to_fill-= frac_col_left;
1154 }
1155 }
1156 
1157 /*35:*/
1158 #line 1198 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
1159 
1160 if(frac_col_to_fill> 0)
1161 {--xP;
1162 g+= frac_col_to_fill*(*xP);
1163 }
1164 
1165 if(!need_col)
1166 {g/= SCALE;
1167 if(g> PIXEL_MAXVAL)
1168 g= PIXEL_MAXVAL;
1169 *nxP= g;
1170 }
1171 
1172 *(++nxP)= 0;
1173 
1174 write_row(new_prP);
1175 
1176 
1177 /*:35*/
1178 #line 1193 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
1179 
1180 }
1181 
1182 
1183 /*:34*/
1184 #line 1066 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
1185 
1186 }
1187 }
1188 
1189 
1190 /*:31*/
1191 #line 1035 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
1192 
1193 }
1194 }
1195 else
1196 no_code= TRUE;
1197 
1198 if((code&0xFF)==max_2_byte)
1199 code+= 0xFF-(max_2_byte-min_2_byte);
1200 if(code>=max_char)
1201 {end_of_file= TRUE;
1202 return;
1203 }
1204 
1205 code++;
1206 
1207 if(no_code)
1208 {no_code= FALSE;
1209 goto again;
1210 }
1211 }
1212 
1213 
1214 /*:30*//*37:*/
1215 #line 1231 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
1216 
1217 static
1218 #ifdef __GNUC__
1219 __inline__
1220 #endif
read_row(unsigned char * pixelrow)1221 void read_row(unsigned char*pixelrow)
1222 {register int col,bitshift,offset;
1223 register unsigned char*xP;
1224 register unsigned char item= 0;
1225 
1226 if(rotation)
1227 {bitshift= 7-(curr_row%8);
1228 offset= (input_size_y+7)/8;
1229 bP= bitmap+curr_row/8;
1230 for(col= 0,xP= pixelrow;col<input_size_x;++col,++xP)
1231 {*xP= ((*bP>>bitshift)&1)==1?PIXEL_MAXVAL:0;
1232 bP+= offset;
1233 }
1234 curr_row--;
1235 }
1236 else
1237 {bitshift= -1;
1238 for(col= 0,xP= pixelrow;col<input_size_x;++col,++xP)
1239 {if(bitshift==-1)
1240 {item= *(bP++);
1241 bitshift= 7;
1242 }
1243 *xP= ((item>>bitshift)&1)==1?PIXEL_MAXVAL:0;
1244 --bitshift;
1245 }
1246 }
1247 }
1248 
1249 
1250 /*:37*//*40:*/
1251 #line 1283 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
1252 
1253 static
1254 #ifdef __GNUC__
1255 __inline__
1256 #endif
write_row(unsigned char * pixelrow)1257 void write_row(unsigned char*pixelrow)
1258 {register int col;
1259 register unsigned char*xP;
1260 
1261 for(col= 0,xP= pixelrow;col<pk_output_size_x;++col,++xP)
1262 *(out_char_p++)= (*xP>=threshold)?1:0;
1263 
1264 }
1265 
1266 
1267 /*:40*//*42:*/
1268 #line 1337 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
1269 
write_coding(void)1270 static void write_coding(void)
1271 {register int count,skip;
1272 register unsigned char paint;
1273 register int x,y;
1274 register unsigned char*cp;
1275 
1276 x= 0;
1277 y= 0;
1278 cp= out_char+y*pk_output_size_x+x;
1279 count= skip= 0;
1280 paint= WHITE;
1281 goto start;
1282 
1283 while(y<pk_output_size_y)
1284 {/*43:*/
1285 #line 1361 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
1286 
1287 count= 0;
1288 x= 0;
1289 cp= out_char+y*pk_output_size_x+x;
1290 
1291 while(x<pk_output_size_x)
1292 {if(*cp==paint)
1293 count++;
1294 else
1295 {if(skip==0)
1296 {if(count<=164)
1297 fputc(NEW_ROW_(count),out);
1298 else
1299 {fputc(SKIP0,out);
1300 
1301 if(count<256)
1302 {fputc(PAINT1,out);
1303 fputc(count,out);
1304 }
1305 else
1306 {fputc(PAINT2,out);
1307 fputc(count>>8,out);
1308 fputc(count&0xFF,out);
1309 }
1310 }
1311 }
1312 else
1313 {if(skip==1)
1314 fputc(SKIP0,out);
1315 else
1316 {if(skip<256)
1317 {fputc(SKIP1,out);
1318 fputc(skip,out);
1319 }
1320 else
1321 {fputc(SKIP2,out);
1322 fputc(skip>>8,out);
1323 fputc(skip&0xFF,out);
1324 }
1325 }
1326 skip= 0;
1327 if(count<64)
1328 fputc(PAINT_(count),out);
1329 else if(count<256)
1330 {fputc(PAINT1,out);
1331 fputc(count,out);
1332 }
1333 else
1334 {fputc(PAINT2,out);
1335 fputc(count>>8,out);
1336 fputc(count&0xFF,out);
1337 }
1338 }
1339 count= 0;
1340 paint= BLACK;
1341 break;
1342 }
1343 x++;
1344 cp++;
1345 }
1346 if(x>=pk_output_size_x)
1347 {skip++;
1348 y++;
1349 continue;
1350 }
1351 
1352 
1353 /*:43*/
1354 #line 1352 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
1355 
1356 start:
1357 /*44:*/
1358 #line 1429 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
1359 
1360 while(x<pk_output_size_x)
1361 {if(*cp==paint)
1362 count++;
1363 else
1364 {if(count<64)
1365 fputc(PAINT_(count),out);
1366 else if(count<256)
1367 {fputc(PAINT1,out);
1368 fputc(count,out);
1369 }
1370 else
1371 {fputc(PAINT2,out);
1372 fputc(count>>8,out);
1373 fputc(count&0xFF,out);
1374 }
1375 count= 1;
1376 paint= BLACK-paint;
1377 }
1378 x++;
1379 cp++;
1380 }
1381 if(paint==BLACK)
1382 {if(count<64)
1383 fputc(PAINT_(count),out);
1384 else if(count<256)
1385 {fputc(PAINT1,out);
1386 fputc(count,out);
1387 }
1388 else
1389 {fputc(PAINT2,out);
1390 fputc(count>>8,out);
1391 fputc(count&0xFF,out);
1392 }
1393 paint= WHITE;
1394 }
1395 
1396 
1397 
1398 /*:44*/
1399 #line 1354 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
1400 
1401 y++;
1402 }
1403 }
1404 
1405 
1406 /*:42*//*46:*/
1407 #line 1495 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
1408 
write_pl(void)1409 static void write_pl(void)
1410 {int i,pos;
1411 char output_file[FILE_NAME_LENGTH+1];
1412 long t,sc;
1413 char*s;
1414 char tfm_header[]= "Created by hbf2gf";
1415 
1416 file_number--;
1417 
1418 if(mf_like)
1419 {if(unicode)
1420 sprintf(output_file,"%s%02x.pl",output_name,file_number);
1421 else
1422 sprintf(output_file,"%s%02i.pl",output_name,file_number);
1423 }
1424 else
1425 sprintf(output_file,"%s.pl",output_name);
1426 
1427 if(!(out= fopen(output_file,WRITE_TXT)))
1428 {fprintf(stderr,"Couldn't open `%s'\n",output_file);
1429 exit(1);
1430 }
1431 if(!quiet)
1432 printf("\nWriting `%s'\n",output_file);
1433 
1434 fprintf(out,
1435 "\n(FAMILY %s%d)"
1436 "\n(CODINGSCHEME CJK-%s)",
1437 output_name,file_number,font_encoding);
1438 
1439 fprintf(out,
1440 "\n(DESIGNSIZE R %.6f)"
1441 "\n(COMMENT DESIGNSIZE IS IN POINTS)"
1442 "\n(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)"
1443 "\n(CHECKSUM O %lo)"
1444 "\n(FONTDIMEN"
1445 "\n   (SLANT R %.6f)"
1446 "\n   (SPACE R 0.0)"
1447 "\n   (STRETCH R 0.0)"
1448 "\n   (SHRINK R 0.0)"
1449 "\n   (XHEIGHT R 1.0)"
1450 "\n   (QUAD R 1.0)"
1451 "\n   (EXTRASPACE R 0.0)"
1452 "\n   )",design_size,checksum,slant);
1453 
1454 s= tfm_header;
1455 i= strlen(s);
1456 t= ((long)i)<<24;
1457 sc= 16;
1458 pos= 18;
1459 
1460 fprintf(out,"\n");
1461 while(i> 0)
1462 {t|= ((long)(*(unsigned char*)s++))<<sc;
1463 sc-= 8;
1464 if(sc<0)
1465 {fprintf(out,"\n(HEADER D %d O %lo)",pos,t);
1466 t= 0;
1467 sc= 24;
1468 pos++;
1469 }
1470 i--;
1471 }
1472 if(t)
1473 fprintf(out,"\n(HEADER D %d O %lo)",pos,t);
1474 fprintf(out,"\n");
1475 
1476 for(i= 0;i<256;i++)
1477 {fprintf(out,
1478 "\n(CHARACTER O %o"
1479 "\n   (CHARWD R %.6f)"
1480 "\n   (CHARHT R %.6f)"
1481 "\n   (CHARDP R %.6f)"
1482 "\n   (CHARIC R %.6f)"
1483 "\n   )",
1484 i,
1485 tfm_output_size_x+2*tfm_offset_x,
1486 tfm_output_size_y+tfm_offset_y,
1487 -tfm_offset_y,
1488 slant*(tfm_output_size_y+tfm_offset_y));
1489 }
1490 
1491 fclose(out);
1492 }
1493 
1494 
1495 
1496 /*:46*//*48:*/
1497 #line 1592 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
1498 
write_ovp(void)1499 static void write_ovp(void)
1500 {int c,i,nmb_subfonts,remainder,count,pos;
1501 char output_file[FILE_NAME_LENGTH+1];
1502 long t,sc;
1503 char*s;
1504 char ofm_header[]= "Created by hbf2gf";
1505 
1506 nmb_subfonts= ((max_char-(min_char&0xFF00))/256*nmb_2_bytes)
1507 /256+1;
1508 remainder= ((max_char-(min_char&0xFF00))/256*nmb_2_bytes)
1509 %256;
1510 
1511 
1512 for(count= 0;count<(max_char&0xFF);count++)
1513 if(b2_codes[count])
1514 remainder++;
1515 if(remainder>=256)
1516 nmb_subfonts++;
1517 
1518 sprintf(output_file,"%s.ovp",output_name);
1519 
1520 if(!(out= fopen(output_file,WRITE_TXT)))
1521 {fprintf(stderr,"Couldn't open `%s'\n",output_file);
1522 exit(1);
1523 }
1524 if(!quiet)
1525 printf("\nWriting `%s'\n",output_file);
1526 
1527 fprintf(out,
1528 "\n(VTITLE Omega virtual font created by hbf2gf)"
1529 "\n(DESIGNSIZE R %.6f)"
1530 "\n(COMMENT DESIGNSIZE IS IN POINTS)"
1531 "\n(COMMENT OTHER SIZES ARE MULTIPLES OF DESIGNSIZE)"
1532 "\n(CHECKSUM O %lo)"
1533 "\n(FONTDIMEN"
1534 "\n   (SLANT R %.6f)"
1535 "\n   (SPACE R 0.0)"
1536 "\n   (STRETCH R 0.0)"
1537 "\n   (SHRINK R 0.0)"
1538 "\n   (XHEIGHT R 1.0)"
1539 "\n   (QUAD R 1.0)"
1540 "\n   (EXTRASPACE R 0.0)"
1541 "\n   )",design_size,checksum,slant);
1542 
1543 s= ofm_header;
1544 i= strlen(s);
1545 t= ((long)i)<<24;
1546 sc= 16;
1547 pos= 18;
1548 
1549 fprintf(out,"\n");
1550 while(i> 0)
1551 {t|= ((long)(*(unsigned char*)s++))<<sc;
1552 sc-= 8;
1553 if(sc<0)
1554 {fprintf(out,"\n(HEADER D %d O %lo)",pos,t);
1555 t= 0;
1556 sc= 24;
1557 pos++;
1558 }
1559 i--;
1560 }
1561 if(t)
1562 fprintf(out,"\n(HEADER D %d O %lo)",pos,t);
1563 fprintf(out,"\n");
1564 
1565 for(i= 0;i<nmb_subfonts;i++)
1566 {fprintf(out,
1567 "\n(MAPFONT D %i"
1568 "\n   (FONTNAME %s%02i)"
1569 "\n   (FONTCHECKSUM O %lo)"
1570 "\n   (FONTAT R 1.0)"
1571 "\n   (FONTDSIZE R %.6f)"
1572 "\n   )",i,output_name,i+1,checksum,design_size);
1573 }
1574 
1575 for(c= min_char,i= 0,count= 0;c<=max_char;c++)
1576 {if(b2_codes[c&0xFF]==VALID_SUBCODE)
1577 {fprintf(out,
1578 "\n(CHARACTER O %o"
1579 "\n   (CHARWD R %.6f)"
1580 "\n   (CHARHT R %.6f)"
1581 "\n   (CHARDP R %.6f)"
1582 "\n   (CHARIC R %.6f)"
1583 "\n   (MAP"
1584 "\n      (SELECTFONT D %i)"
1585 "\n      (SETCHAR O %o)"
1586 "\n      )"
1587 "\n   )",
1588 c,
1589 tfm_output_size_x+2*tfm_offset_x,
1590 tfm_output_size_y+tfm_offset_y,
1591 -tfm_offset_y,
1592 slant*(tfm_output_size_y+tfm_offset_y),
1593 i,
1594 count);
1595 
1596 count++;
1597 if(count==256)
1598 {count= 0;
1599 i++;
1600 }
1601 }
1602 else
1603 continue;
1604 }
1605 
1606 fclose(out);
1607 }
1608 
1609 
1610 
1611 /*:48*//*51:*/
1612 #line 1737 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
1613 
write_job(void)1614 static void write_job(void)
1615 {FILE*out;
1616 int i,j;
1617 char buffer[FILE_NAME_LENGTH+1];
1618 
1619 
1620 strcpy(buffer,output_name);
1621 strcat(buffer,job_extension);
1622 if(!(out= fopen(buffer,WRITE_TXT)))
1623 {fprintf(stderr,"Couldn't open `%s'\n",buffer);
1624 exit(1);
1625 }
1626 if(!quiet)
1627 printf("\nWriting `%s'\n",buffer);
1628 
1629 if(pk_files)
1630 {if(unicode)
1631 {for(i= (min_char>>8),j= 0;j<nmb_files;i++,j++)
1632 fprintf(out,
1633 "%s %s%02x.gf %s%s%02x.%.0ipk\n"
1634 "%s %s%02x.gf\n",
1635 GFTOPK_NAME,output_name,i,
1636 pk_directory,output_name,i,
1637 long_extension?(int)(dpi_x*magstep_x+0.5):0,
1638 rm_command,output_name,i);
1639 }
1640 else
1641 {for(i= 1;i<=nmb_files;i++)
1642 fprintf(out,
1643 "%s %s%02i.gf %s%s%02i.%.0ipk\n"
1644 "%s %s%02i.gf\n",
1645 GFTOPK_NAME,output_name,i,
1646 pk_directory,output_name,i,
1647 long_extension?(int)(dpi_x*magstep_x+0.5):0,
1648 rm_command,output_name,i);
1649 }
1650 }
1651 
1652 if(tfm_files)
1653 {fprintf(out,
1654 "\n"
1655 "%s %s.pl %s.tfm\n"
1656 "%s %s.pl\n"
1657 "\n",
1658 PLTOTF_NAME,output_name,output_name,
1659 rm_command,output_name);
1660 
1661 if(unicode)
1662 {for(i= (min_char>>8),j= 0;j<nmb_files;i++,j++)
1663 fprintf(out,
1664 "%s %s.tfm %s%s%02x.tfm\n",
1665 cp_command,output_name,
1666 tfm_directory,output_name,i);
1667 }
1668 else
1669 {for(i= 1;i<=nmb_files;i++)
1670 fprintf(out,
1671 "%s %s.tfm %s%s%02i.tfm\n",
1672 cp_command,output_name,
1673 tfm_directory,output_name,i);
1674 }
1675 
1676 fprintf(out,
1677 "\n"
1678 "%s %s.tfm",
1679 rm_command,output_name);
1680 }
1681 
1682 if(ofm_file)
1683 {fprintf(out,
1684 "\n"
1685 "%s %s.ovp %s.ovf %s.ofm\n"
1686 "%s %s.ovp\n"
1687 "\n",
1688 OVP2OVF_NAME,output_name,output_name,output_name,
1689 rm_command,output_name);
1690 }
1691 
1692 fclose(out);
1693 }
1694 
1695 
1696 
1697 /*:51*//*55:*/
1698 #line 1989 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
1699 
read_config(void)1700 static void read_config(void)
1701 {HBF_BBOX*boxp;
1702 char*real_config_file;
1703 
1704 
1705 /*56:*/
1706 #line 2041 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
1707 
1708 {int i,lastext= -1;
1709 
1710 for(i= 0;config_file[i];i++)
1711 if(config_file[i]=='.')
1712 lastext= i;
1713 else if(config_file[i]=='/'||
1714 config_file[i]==':'||
1715 config_file[i]=='\\')
1716 lastext= -1;
1717 
1718 if(lastext==-1)
1719 strcat(config_file,".cfg");
1720 }
1721 
1722 
1723 /*:56*/
1724 #line 1995 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
1725 
1726 
1727 real_config_file= TeX_search_cfg_file(config_file);
1728 if(!real_config_file)
1729 {if(mf_like)
1730 {if(!quiet)
1731 printf("Couldn't find `%s'\n",config_file);
1732 exit(2);
1733 }
1734 else
1735 {fprintf(stderr,"Couldn't find `%s'\n",config_file);
1736 exit(1);
1737 }
1738 }
1739 
1740 if(!(config= fopen(real_config_file,READ_TXT)))
1741 {if(!testing)
1742 {fprintf(stderr,"Couldn't open `%s'\n",config_file);
1743 exit(1);
1744 }
1745 else
1746 {if(!quiet)
1747 fprintf(stderr,"Couldn't find or open `%s'\n",config_file);
1748 exit(2);
1749 }
1750 }
1751 
1752 if(testing)
1753 {if(!quiet)
1754 printf("%s\n",real_config_file);
1755 exit(0);
1756 }
1757 
1758 /*57:*/
1759 #line 2058 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
1760 
1761 {char hbf_header[STRING_LENGTH+1];
1762 char*real_hbf_header;
1763 
1764 if(!fsearch("hbf_header"))
1765 config_error("hbf_header");
1766 else
1767 strcpy(hbf_header,Buffer);
1768 
1769 real_hbf_header= TeX_search_hbf_file(hbf_header);
1770 if(!real_hbf_header)
1771 {fprintf(stderr,"Couldn't find `%s'\n",hbf_header);
1772 exit(1);
1773 }
1774 
1775 hbfDebug= 1;
1776 
1777 
1778 if(!(hbf= hbfOpen(real_hbf_header)))
1779 exit(1);
1780 
1781 hbfDebug= 0;
1782 
1783 boxp= hbfBitmapBBox(hbf);
1784 input_size_x= boxp->hbf_height;
1785 input_size_y= boxp->hbf_width;
1786 font_encoding= hbfProperty(hbf,"HBF_CODE_SCHEME");
1787 
1788 if(!fsearch("output_name"))
1789 config_error("output_name");
1790 else
1791 strcpy(output_name,Buffer);
1792 }
1793 
1794 
1795 /*:57*/
1796 #line 2028 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
1797 
1798 /*59:*/
1799 #line 2102 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
1800 
1801 {if(fsearch("nmb_files"))
1802 nmb_files= atoi(Buffer);
1803 if(fsearch("unicode"))
1804 if(Buffer[0]=='y'||Buffer[0]=='Y')
1805 unicode= TRUE;
1806 if(fsearch("min_char"))
1807 {user_min_char= strtoul(Buffer,(char**)NULL,0);
1808 have_min_char= TRUE;
1809 }
1810 
1811 if(!mf_like)
1812 {if(fsearch("pk_files"))
1813 if(Buffer[0]=='n'||Buffer[0]=='N')
1814 pk_files= FALSE;
1815 if(fsearch("tfm_files"))
1816 if(Buffer[0]=='n'||Buffer[0]=='N')
1817 tfm_files= FALSE;
1818 if(fsearch("ofm_file"))
1819 if(Buffer[0]=='y'||Buffer[0]=='Y')
1820 ofm_file= TRUE;
1821 if(fsearch("long_extension"))
1822 if(Buffer[0]=='n'||Buffer[0]=='N')
1823 long_extension= FALSE;
1824 }
1825 
1826 if(fsearch("slant"))
1827 slant= atof(Buffer);
1828 if(slant<0.0||slant> 1.0)
1829 {fprintf(stderr,"Invalid slant\n");
1830 exit(1);
1831 }
1832 if(fsearch("rotation"))
1833 if(Buffer[0]=='y'||Buffer[0]=='Y')
1834 rotation= TRUE;
1835 
1836 if(fsearch("mag_x"))
1837 mag_x= atof(Buffer);
1838 if(fsearch("mag_y"))
1839 mag_y= atof(Buffer);
1840 if(!mag_x&&!mag_y)
1841 {mag_x= 1.0;
1842 mag_y= 1.0;
1843 }
1844 if(mag_x&&!mag_y)
1845 mag_y= mag_x;
1846 if(mag_y&&!mag_x)
1847 mag_x= mag_y;
1848 if(mag_x<=0.0)
1849 {fprintf(stderr,"Invalid horizontal magnification\n");
1850 exit(1);
1851 }
1852 if(mag_y<=0.0)
1853 {fprintf(stderr,"Invalid vertical magnification\n");
1854 exit(1);
1855 }
1856 
1857 if(fsearch("dpi_x"))
1858 dpi_x= atoi(Buffer);
1859 if(fsearch("dpi_y"))
1860 dpi_y= atoi(Buffer);
1861 if(!dpi_x&&!dpi_y)
1862 {dpi_x= 300;
1863 dpi_y= 300;
1864 }
1865 if(dpi_x&&!dpi_y)
1866 dpi_y= dpi_x;
1867 if(dpi_y&&!dpi_x)
1868 dpi_x= dpi_y;
1869 if(dpi_x<=PRINTER_MIN_RES_X)
1870 {fprintf(stderr,"Invalid horizontal printer resolution\n");
1871 exit(1);
1872 }
1873 if(dpi_y<=PRINTER_MIN_RES_Y)
1874 {fprintf(stderr,"Invalid vertical printer resolution\n");
1875 exit(1);
1876 }
1877 
1878 if(fsearch("design_size"))
1879 design_size= atof(Buffer);
1880 
1881 if(fsearch("x_offset"))
1882 offset_x= atoi(Buffer);
1883 else
1884 offset_x= rotation?0:(boxp->hbf_xDisplacement*mag_x+0.5);
1885 if(fsearch("y_offset"))
1886 offset_y= atoi(Buffer);
1887 else
1888 offset_y= rotation?0:(boxp->hbf_yDisplacement*mag_y+0.5);
1889 if(!fsearch("comment"))
1890 comment[0]= '\0';
1891 else
1892 strcpy(comment,Buffer);
1893 
1894 if(fsearch("threshold"))
1895 threshold= atoi(Buffer);
1896 if(threshold<=0||threshold>=255)
1897 {fprintf(stderr,"Invalid threshold\n");
1898 exit(1);
1899 }
1900 
1901 if(!fsearch("checksum"))
1902 checksum= 0;
1903 else
1904 checksum= strtoul(Buffer,(char**)NULL,0);
1905 
1906 if(!fsearch("coding"))
1907 coding[0]= '\0';
1908 else
1909 strcpy(coding,Buffer);
1910 
1911 if(!fsearch("pk_directory"))
1912 pk_directory[0]= '\0';
1913 else
1914 strcpy(pk_directory,Buffer);
1915 
1916 if(!fsearch("tfm_directory"))
1917 tfm_directory[0]= '\0';
1918 else
1919 strcpy(tfm_directory,Buffer);
1920 
1921 if(fsearch("rm_command"))
1922 strcpy(rm_command,Buffer);
1923 else
1924 strcpy(rm_command,"rm");
1925 
1926 if(fsearch("cp_command"))
1927 strcpy(cp_command,Buffer);
1928 else
1929 strcpy(cp_command,"cp");
1930 
1931 if(!fsearch("job_extension"))
1932 job_extension[0]= '\0';
1933 else
1934 {strncpy(job_extension,Buffer,EXTENSION_LENGTH);
1935 job_extension[EXTENSION_LENGTH]= '\0';
1936 }
1937 }
1938 
1939 
1940 /*:59*/
1941 #line 2029 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
1942 
1943 
1944 /*61:*/
1945 #line 2256 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
1946 
1947 {const void*cp;
1948 HBF_CHAR dummy;
1949 
1950 cp= hbfGetCodeRange(hbf,NULL,&min_char,&max_char);
1951 for(;cp!=NULL;cp= hbfGetCodeRange(hbf,cp,&dummy,&max_char))
1952 ;
1953 
1954 if(have_min_char)
1955 min_char= user_min_char;
1956 }
1957 
1958 
1959 /*:61*/
1960 #line 2031 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
1961 
1962 /*63:*/
1963 #line 2285 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
1964 
1965 {const void*b2r;
1966 unsigned char dummy;
1967 int i;
1968 
1969 for(i= 0;i<256;i++)
1970 b2_codes[i]= 0;
1971 
1972 b2r= hbfGetByte2Range(hbf,NULL,&min_2_byte,&max_2_byte);
1973 dummy= min_2_byte;
1974 for(;b2r!=NULL;b2r= hbfGetByte2Range(hbf,b2r,&dummy,&max_2_byte))
1975 {for(i= dummy;i<=max_2_byte;i++)
1976 b2_codes[i]= VALID_SUBCODE;
1977 }
1978 
1979 for(i= 0;i<256;i++)
1980 if(b2_codes[i]==VALID_SUBCODE)
1981 nmb_2_bytes++;
1982 }
1983 
1984 
1985 /*:63*/
1986 #line 2032 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
1987 
1988 
1989 fclose(config);
1990 }
1991 
1992 
1993 /*:55*//*65:*/
1994 #line 2317 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
1995 
fsearch(const char * search_string)1996 static int fsearch(const char*search_string)
1997 {char*P,p;
1998 const char*Q;
1999 char temp_buffer[STRING_LENGTH+1];
2000 char env_name[STRING_LENGTH+1];
2001 char*env_p;
2002 char*env_value;
2003 char*Buf_p;
2004 int Ch,ch,old_ch= '\n';
2005 int count= STRING_LENGTH;
2006 
2007 rewind(config);
2008 
2009 do
2010 {Q= search_string;
2011 p= tolower((unsigned char)*Q);
2012 Ch= fgetc(config);
2013 ch= tolower(Ch);
2014 while(!(ch==p&&old_ch=='\n')&&Ch!=EOF)
2015 
2016 
2017 {old_ch= ch;
2018 Ch= fgetc(config);
2019 ch= tolower(Ch);
2020 }
2021 
2022 for(;;)
2023 {if(*(++Q)=='\0')
2024 if((Ch= fgetc(config))==' '||Ch=='\t')
2025 
2026 goto success;
2027 Ch= fgetc(config);
2028 if(tolower(Ch)!=tolower((unsigned char)*Q))
2029 break;
2030 }
2031 }
2032 while(Ch!=EOF);
2033 
2034 return 0;
2035 
2036 success:
2037 P= temp_buffer;
2038 
2039 while((Ch= fgetc(config))==' '||Ch=='\t')
2040 
2041 ;
2042 while(Ch!='\n'&&--count> 0&&Ch!=EOF)
2043 {*P++= Ch;
2044 Ch= fgetc(config);
2045 }
2046 *P= '\0';
2047 
2048 if(*temp_buffer)
2049 /*66:*/
2050 #line 2396 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
2051 
2052 {P= temp_buffer;
2053 Buf_p= Buffer;
2054 count= STRING_LENGTH-1;
2055 
2056 while(*P&&count> 0)
2057 {env_p= env_name;
2058 
2059 if(*P=='$')
2060 {P++;
2061 if(*P=='$')
2062 {*(Buf_p++)= *(P++);
2063 count--;
2064 continue;
2065 }
2066 while(*P=='{')
2067 P++;
2068 if(!(isalpha((unsigned char)*P)||*P=='_'))
2069 {fprintf(stderr,
2070 "Invalid environment variable name in configuration file\n");
2071 exit(1);
2072 }
2073 *(env_p++)= *(P++);
2074 while(*P)
2075 {if(isalnum((unsigned char)*P)||*P=='_')
2076 *(env_p++)= *(P++);
2077 else
2078 {while(*P=='}')
2079 P++;
2080 *env_p= '\0';
2081 break;
2082 }
2083 }
2084 
2085 env_value= getenv(env_name);
2086 if(env_value)
2087 {while(*env_value&&count> 0)
2088 {*(Buf_p++)= *(env_value++);
2089 count--;
2090 }
2091 }
2092 }
2093 else
2094 {*(Buf_p++)= *(P++);
2095 count--;
2096 }
2097 }
2098 *Buf_p= '\0';
2099 }
2100 
2101 
2102 /*:66*/
2103 #line 2371 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
2104 
2105 else
2106 *Buffer= '\0';
2107 
2108 return(*Buffer)?1:0;
2109 }
2110 
2111 
2112 /*:65*//*68:*/
2113 #line 2456 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
2114 
config_error(const char * message)2115 static void config_error(const char*message)
2116 {fprintf(stderr,"Couldn't find `%s' entry in configuration file\n",
2117 message);
2118 exit(1);
2119 }
2120 
2121 
2122 
2123 /*:68*//*72:*/
2124 #line 2499 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
2125 
TeX_search_version(void)2126 static const char*TeX_search_version(void)
2127 {
2128 #if defined(HAVE_LIBKPATHSEA)
2129 return kpathsea_version_string;
2130 #elif defined(HAVE_EMTEXDIR)
2131 return emtex_version_string;
2132 #elif defined(HAVE_MIKTEX)
2133 char buf[200];
2134 
2135 strcpy(buf,"MiKTeX ");
2136 miktex_get_miktex_version_string_ex(buf+7,sizeof(buf)-7);
2137 
2138 return buf;
2139 #else
2140 return no_version_string;
2141 #endif
2142 }
2143 
2144 
2145 /*:72*//*75:*/
2146 #line 2541 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
2147 
2148 #ifdef HAVE_EMTEXDIR
dir_setup(ed,env,dir,flags)2149 static int dir_setup(ed,env,dir,flags)
2150 struct emtex_dir*ed;
2151 const char*env;
2152 const char*dir;
2153 unsigned flags;
2154 
2155 {const char*val;
2156 char path[260];
2157 
2158 ed->alloc= 0;
2159 ed->used= 0;
2160 ed->list= NULL;
2161 
2162 if(env!=NULL&&(val= getenv(env))!=NULL)
2163 return setup_list(ed,path,val,flags);
2164 else
2165 fprintf(stderr,
2166 "Environment variable `%s' not set; use current directory\n",
2167 env);
2168 
2169 return TRUE;
2170 }
2171 #endif
2172 
2173 
2174 /*:75*//*77:*/
2175 #line 2576 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
2176 
2177 #ifdef HAVE_EMTEXDIR
file_find(name,list)2178 static char*file_find(name,list)
2179 char*name;
2180 struct emtex_dir*list;
2181 
2182 {if(emtex_dir_find(name_buffer,sizeof(name_buffer),list,name,EDF_CWD))
2183 return name_buffer;
2184 
2185 return NULL;
2186 }
2187 #endif
2188 
2189 
2190 /*:77*//*80:*/
2191 #line 2627 "./cjkutils-4.8.4/hbf2gf/hbf2gf.w"
2192 
2193 #if defined(HAVE_LIBKPATHSEA)
TeX_search_cfg_file(char * name)2194 static char*TeX_search_cfg_file(char*name)
2195 {
2196 return kpse_find_file(name,kpse_program_text_format,TRUE);
2197 }
2198 
2199 
TeX_search_hbf_file(char * name)2200 static char*TeX_search_hbf_file(char*name)
2201 {
2202 return kpse_find_file(name,kpse_miscfonts_format,TRUE);
2203 }
2204 
2205 
2206 #elif defined(HAVE_EMTEXDIR)
TeX_search_cfg_file(char * name)2207 static char*TeX_search_cfg_file(char*name)
2208 {return file_find(name,&cfg_path);
2209 }
2210 
2211 
TeX_search_hbf_file(char * name)2212 static char*TeX_search_hbf_file(char*name)
2213 {return file_find(name,&hbf_path);
2214 }
2215 
2216 
2217 #elif defined(HAVE_MIKTEX)
TeX_search_cfg_file(char * name)2218 static char*TeX_search_cfg_file(char*name)
2219 {char result[_MAX_PATH];
2220 
2221 if(!miktex_find_input_file("hbf2gf",*name,result))
2222 return 0;
2223 return strdup(result);
2224 }
2225 
2226 
TeX_search_hbf_file(char * name)2227 static char*TeX_search_hbf_file(char*name)
2228 {char result[_MAX_PATH];
2229 
2230 
2231 if(!miktex_find_miscfont_file(*name,result))
2232 return 0;
2233 return strdup(result);
2234 }
2235 
2236 
2237 #else
TeX_search_cfg_file(char * name)2238 static char*TeX_search_cfg_file(char*name)
2239 {return name;
2240 }
2241 
2242 
TeX_search_hbf_file(char * name)2243 static char*TeX_search_hbf_file(char*name)
2244 {return name;
2245 }
2246 #endif
2247 
2248 
2249 
2250 /*:80*/
2251