Mercurial > mplayer.hg
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; |