+ }
+}
+
+static int option_mode = 0;
+
+void options(unsigned char *cp)
+{
+ nkf_char i, j;
+ unsigned char *p;
+ unsigned char *cp_back = NULL;
+ char codeset[32];
+ nkf_encoding *enc;
+
+ if (option_mode==1)
+ return;
+ while(*cp && *cp++!='-');
+ while (*cp || cp_back) {
+ if(!*cp){
+ cp = cp_back;
+ cp_back = NULL;
+ continue;
+ }
+ p = 0;
+ switch (*cp++) {
+ case '-': /* literal options */
+ if (!*cp || *cp == SP) { /* ignore the rest of arguments */
+ option_mode = 1;
+ return;
+ }
+ for (i=0;i<sizeof(long_option)/sizeof(long_option[0]);i++) {
+ p = (unsigned char *)long_option[i].name;
+ for (j=0;*p && *p != '=' && *p == cp[j];p++, j++);
+ if (*p == cp[j] || cp[j] == SP){
+ p = &cp[j] + 1;
+ break;
+ }
+ p = 0;
+ }
+ if (p == 0) {
+ fprintf(stderr, "unknown long option: --%s\n", cp);
+ return;
+ }
+ while(*cp && *cp != SP && cp++);
+ if (long_option[i].alias[0]){
+ cp_back = cp;
+ cp = (unsigned char *)long_option[i].alias;
+ }else{
+ if (strcmp(long_option[i].name, "ic=") == 0){
+ nkf_str_upcase((char *)p, codeset, 32);
+ enc = nkf_enc_find(codeset);
+ if (!enc) continue;
+ input_encoding = enc;
+ set_input_encoding(enc);
+ continue;
+ }
+ if (strcmp(long_option[i].name, "oc=") == 0){
+ nkf_str_upcase((char *)p, codeset, 32);
+ enc = nkf_enc_find(codeset);
+ if (enc <= 0) continue;
+ output_encoding = enc;
+ set_output_encoding(output_encoding);