comparison TOOLS/subfont-c/subfont.c @ 1506:94d929f91b06

return value of iconv fixed for glibc 2.1.3, using strrchr instead of basename, as basename is buggy
author arpi
date Mon, 13 Aug 2001 18:39:23 +0000
parents 842c29861e25
children 47a49d6d7132
comparison
equal deleted inserted replaced
1505:842c29861e25 1506:94d929f91b06
59 //int const max_charset_size = 256; 59 //int const max_charset_size = 256;
60 unsigned charset_size = 0; 60 unsigned charset_size = 0;
61 61
62 //// 62 ////
63 char *command; 63 char *command;
64 char *encoding_name;
64 char *font_path; 65 char *font_path;
65 //char *font_metrics; 66 //char *font_metrics;
66 int append_mode = 0; 67 int append_mode = 0;
67 68
68 unsigned char *buffer, *abuffer; 69 unsigned char *buffer, *abuffer;
115 void write_bitmap() { 116 void write_bitmap() {
116 FILE *f; 117 FILE *f;
117 int const max_name = 128; 118 int const max_name = 128;
118 char name[max_name]; 119 char name[max_name];
119 120
120 snprintf(name, max_name, "%s-b.raw", encoding); 121 snprintf(name, max_name, "%s-b.raw", encoding_name);
121 f = fopen(name, "wb"); 122 f = fopen(name, "wb");
122 if (f==NULL) ERROR("fopen failed."); 123 if (f==NULL) ERROR("fopen failed.");
123 write_header(f); 124 write_header(f);
124 fwrite(buffer, 1, width*height, f); 125 fwrite(buffer, 1, width*height, f);
125 fclose(f); 126 fclose(f);
126 127
127 snprintf(name, max_name, "%s-a.raw", encoding); 128 snprintf(name, max_name, "%s-a.raw", encoding_name);
128 f = fopen(name, "wb"); 129 f = fopen(name, "wb");
129 if (f==NULL) ERROR("fopen failed."); 130 if (f==NULL) ERROR("fopen failed.");
130 write_header(f); 131 write_header(f);
131 fwrite(abuffer, 1, width*height, f); 132 fwrite(abuffer, 1, width*height, f);
132 fclose(f); 133 fclose(f);
231 if (f==NULL) ERROR("fopen failed."); 232 if (f==NULL) ERROR("fopen failed.");
232 233
233 /* print font.desc header */ 234 /* print font.desc header */
234 if (append_mode) { 235 if (append_mode) {
235 fprintf(f, "\n\n# Subtitle font for %s encoding, face \"%s%s%s\", ppem=%i\n", 236 fprintf(f, "\n\n# Subtitle font for %s encoding, face \"%s%s%s\", ppem=%i\n",
236 encoding, 237 encoding_name,
237 face->family_name, 238 face->family_name,
238 face->style_name ? " ":"", face->style_name ? face->style_name:"", 239 face->style_name ? " ":"", face->style_name ? face->style_name:"",
239 ppem); 240 ppem);
240 } else { 241 } else {
241 fprintf(f, "# This file was generated with subfont for Mplayer.\n# Subfont by Artur Zaprzala <zybi@fanthom.irc.pl>.\n\n"); 242 fprintf(f, "# This file was generated with subfont for Mplayer.\n# Subfont by Artur Zaprzala <zybi@fanthom.irc.pl>.\n\n");
242 fprintf(f, "[info]\n"); 243 fprintf(f, "[info]\n");
243 fprintf(f, "name 'Subtitle font for %s encoding, face \"%s%s%s\", ppem=%i'\n", 244 fprintf(f, "name 'Subtitle font for %s encoding, face \"%s%s%s\", ppem=%i'\n",
244 encoding, 245 encoding_name,
245 face->family_name, 246 face->family_name,
246 face->style_name ? " ":"", face->style_name ? face->style_name:"", 247 face->style_name ? " ":"", face->style_name ? face->style_name:"",
247 ppem); 248 ppem);
248 fprintf(f, "descversion 1\n"); 249 fprintf(f, "descversion 1\n");
249 fprintf(f, "spacewidth %i\n", 2*padding + space_advance); 250 fprintf(f, "spacewidth %i\n", 2*padding + space_advance);
250 fprintf(f, "charspace %i\n", -2*padding); 251 fprintf(f, "charspace %i\n", -2*padding);
251 fprintf(f, "height %i\n", f266toInt(face->size->metrics.height)); 252 fprintf(f, "height %i\n", f266toInt(face->size->metrics.height));
252 } 253 }
253 fprintf(f, "\n[files]\n"); 254 fprintf(f, "\n[files]\n");
254 fprintf(f, "alpha %s-a.raw\n", encoding); 255 fprintf(f, "alpha %s-a.raw\n", encoding_name);
255 fprintf(f, "bitmap %s-b.raw\n", encoding); 256 fprintf(f, "bitmap %s-b.raw\n", encoding_name);
256 fprintf(f, "\n[characters]\n"); 257 fprintf(f, "\n[characters]\n");
257 258
258 259
259 /* compute bbox and [characters] section*/ 260 /* compute bbox and [characters] section*/
260 pen_x = 0; 261 pen_x = 0;
375 char *outbuf = (char*)&o; 376 char *outbuf = (char*)&o;
376 int inbytesleft = 1; 377 int inbytesleft = 1;
377 int outbytesleft = sizeof(FT_ULong); 378 int outbytesleft = sizeof(FT_ULong);
378 379
379 size_t count = iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft); 380 size_t count = iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft);
380 if (count==-1) o = 0; 381 // if (count==-1) o = 0; // not OK, at least my iconv() returns E2BIG for all
382 if (outbytesleft!=0) o = 0;
381 383
382 /* convert unicode BE -> LE */ 384 /* convert unicode BE -> LE */
383 o = ((o>>24)&0xff) 385 o = ((o>>24)&0xff)
384 | ((o>>8)&0xff00) 386 | ((o>>8)&0xff00)
385 | ((o&0xff00)<<8) 387 | ((o&0xff00)<<8)
433 charset[charset_size] = character; 435 charset[charset_size] = character;
434 charcodes[charset_size] = count==2 ? code : character; 436 charcodes[charset_size] = count==2 ? code : character;
435 ++charset_size; 437 ++charset_size;
436 } 438 }
437 fclose(f); 439 fclose(f);
438 encoding = basename(encoding); 440 // encoding = basename(encoding);
439 } 441 }
440 if (charset_size==0) ERROR("No characters to render!"); 442 if (charset_size==0) ERROR("No characters to render!");
441 } 443 }
442 444
443 445
659 661
660 if (argc<3) usage(); 662 if (argc<3) usage();
661 663
662 if (argv[a][0]!=0) 664 if (argv[a][0]!=0)
663 encoding = argv[a]; 665 encoding = argv[a];
666 encoding_name = strrchr(encoding, '/');
667 if (!encoding_name) encoding_name=encoding;
668 else ++encoding_name;
669
664 ++a; --argc; 670 ++a; --argc;
665 671
666 i = atoi(argv[a]); 672 i = atoi(argv[a]);
667 if (i>1) ppem = i; 673 if (i>1) ppem = i;
668 ++a; --argc; 674 ++a; --argc;