diff options
Diffstat (limited to 'language/korean/HLaTeX/contrib/hbibtex.c')
-rw-r--r-- | language/korean/HLaTeX/contrib/hbibtex.c | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/language/korean/HLaTeX/contrib/hbibtex.c b/language/korean/HLaTeX/contrib/hbibtex.c new file mode 100644 index 0000000000..0124461c56 --- /dev/null +++ b/language/korean/HLaTeX/contrib/hbibtex.c @@ -0,0 +1,90 @@ +#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); +} |