00001 
00025 
00026 
00027 
00028 
00029 
00030 
00031 
00032 #include "app.h"
00033 
00034 #ifdef CHARACTER_CONVERSION
00035 
00036 static boolean convert_enabled = FALSE; 
00037 
00046 static boolean
00047 charconv_setup_real(char *fromcode, char *tocode)
00048 {
00049   boolean enabled;
00050   boolean ret;
00051 
00052   
00053 #ifdef HAVE_ICONV
00054   ret = charconv_iconv_setup(fromcode, tocode, &enabled);
00055 #endif
00056 #ifdef USE_LIBJCODE
00057   ret = charconv_libjcode_setup(fromcode, tocode, &enabled);
00058 #endif
00059 #ifdef USE_WIN32_MULTIBYTE
00060   ret = charconv_win32_setup(fromcode, tocode, &enabled);
00061 #endif
00062 
00063   
00064   convert_enabled = enabled;
00065 
00066   
00067   return(ret);
00068 }
00069 
00080 char *
00081 charconv(char *instr, char *outstr, int maxoutlen)
00082 {
00083   char *ret;
00084 
00085   
00086   if (convert_enabled == FALSE) return(instr); 
00087 
00088   
00089 #ifdef HAVE_ICONV
00090   ret = charconv_iconv(instr, outstr, maxoutlen);
00091 #endif
00092 #ifdef USE_LIBJCODE
00093   ret = charconv_libjcode(instr, outstr, maxoutlen);
00094 #endif
00095 #ifdef USE_WIN32_MULTIBYTE
00096   ret = charconv_win32(instr, outstr, maxoutlen);
00097 #endif
00098 
00099   
00100 
00101   return(ret);
00102 }
00103 
00104 #endif 
00105 
00106 
00107 
00108 static char *from_code = NULL;
00109 static char *to_code = NULL;
00110 
00111 static boolean
00112 opt_charconv(Jconf *jconf, char *arg[], int argnum)
00113 {
00114 #ifdef CHARACTER_CONVERSION
00115   if (from_code) free(from_code);
00116   if (to_code) free(to_code);
00117   from_code = strcpy((char*)mymalloc(strlen(arg[0])+1), arg[0]);
00118   to_code = strcpy((char*)mymalloc(strlen(arg[1])+1), arg[1]);
00119 #else
00120   fprintf(stderr, "Warning: character set conversion disabled, option \"-charconv\" ignored\n");
00121 #endif
00122   return TRUE;
00123 }
00124 static boolean
00125 opt_nocharconv(Jconf *jconf, char *arg[], int argnum)
00126 {
00127 #ifdef CHARACTER_CONVERSION
00128   if (from_code) free(from_code);
00129   if (to_code) free(to_code);
00130   from_code = NULL;
00131   to_code = NULL;
00132 #else
00133   fprintf(stderr, "Warning: character set conversion disabled, option \"-nocharconv\" ignored\n");
00134 #endif
00135   return TRUE;
00136 }
00137 static boolean
00138 opt_kanji(Jconf *jconf, char *arg[], int argnum)
00139 {
00140 #ifdef CHARACTER_CONVERSION
00141   if (from_code) free(from_code);
00142   if (to_code) free(to_code);
00143   from_code = NULL;
00144   if (!strcmp(arg[0], "noconv")) {
00145     to_code = NULL;
00146   } else {
00147     to_code = strcpy((char*)mymalloc(strlen(arg[0])+1),arg[0]);
00148   }
00149 #else
00150   fprintf(stderr, "Warning: character set conversion disabled, option \"-kanji\" ignored\n");
00151 #endif
00152   return TRUE;
00153 }
00154 
00155 void
00156 charconv_add_option()
00157 {
00158   j_add_option("-charconv", 2, 2, "convert character set for output", opt_charconv);
00159   j_add_option("-nocharconv", 0, 0, "disable charconv", opt_nocharconv);
00160   j_add_option("-kanji", 1, 1, "convert character set for output", opt_kanji);
00161 }
00162 
00163 boolean
00164 charconv_setup()
00165 {
00166 #ifdef CHARACTER_CONVERSION
00167   if (from_code != NULL && to_code != NULL) {
00168     if (charconv_setup_real(from_code, to_code) == FALSE) {
00169       fprintf(stderr, "Error: character set conversion setup failed\n");
00170       return FALSE;
00171     }
00172   }
00173 #endif 
00174   return TRUE;
00175 }