#include <stdio.h> #include <stdlib.h> #include <string.h> #define HEXA_STRING "0123456789abcdef" #ifdef WIN32 #include <io.h> #include <ctype.h> #define MKSTEMP mktemp #else #define MKSTEMP mkstemp #endif int to_8bit(char *); main(int argc, char *argv[]) { int i; char args[128], cmd[128]; #ifdef WIN32 strcpy(args, ""); #else bzero(args, 128); #endif for(i=1; i<argc; i++) { strcat(args, " "); strcat(args, argv[i]); } to_8bit(argv[argc-1]); sprintf(cmd, "bibtex %s", args); system(cmd); exit(0); } int to_8bit(char *bib) { FILE *in, *out; int x; char line[1024], *l, *h1, *h2, tempfile[10]; l=strrchr(bib, '.'); if(l==NULL || strcmp(l, ".aux")!=0) { strcat(bib, ".aux"); } in = fopen(bib, "r"); if(!in) { printf("\tError opening auxiliary file \"%s\"!!!\n", bib); exit(1); } strcpy(tempfile, "BIBXXXXXX"); MKSTEMP(tempfile); out = fopen(tempfile, "w"); if(!out) { printf("\tError opening temporary file \"%s\"!!!\n", tempfile); exit(1); } while(fgets(line, 1024, in)) { l=line; while(*l) { if(*l=='^'&&*(l+1)=='^' &&(h1=strchr(HEXA_STRING, *(l+2))) &&(h2=strchr(HEXA_STRING, *(l+3)))) { if(*h1>'9') x=*h1-87; else x=*h1-48; x*=16; if(*h2>'9') x+=*h2-87; else x+=*h2-48; fputc(x, out); l+=4; } else { fputc(*l++, out); } } } fflush(NULL); fclose(in); fclose(out); rename(tempfile, bib); return(1); }