OSDN Git Service

* Fixed: Guess Next line broken. [Nkf-dev 44]
[nkf/nkf.git] / nkf.c
diff --git a/nkf.c b/nkf.c
index 4e3381f..3415fd1 100644 (file)
--- a/nkf.c
+++ b/nkf.c
@@ -1,7 +1,7 @@
 /** Network Kanji Filter. (PDS Version)
 ************************************************************************
 ** Copyright (C) 1987, Fujitsu LTD. (Itaru ICHIKAWA)
-** \e$BO"Mm@h!'\e(B \e$B!J3t!KIY;NDL8&5f=j!!%=%U%H#38&!!;T@n!!;j\e(B 
+** \e$BO"Mm@h!'\e(B \e$B!J3t!KIY;NDL8&5f=j!!%=%U%H#38&!!;T@n!!;j\e(B
 ** \e$B!J\e(BE-Mail Address: ichikawa@flab.fujitsu.co.jp\e$B!K\e(B
 ** Copyright (C) 1996,1998
 ** Copyright (C) 2002
 **    \e$B%P%$%J%j$NG[I[$N:]$K$O\e(Bversion message\e$B$rJ]B8$9$k$3$H$r>r7o$H$7$^$9!#\e(B
 **    \e$B$3$N%W%m%0%i%`$K$D$$$F$OFC$K2?$NJ]>Z$b$7$J$$!"0-$7$+$i$:!#\e(B
 **
-**    Everyone is permitted to do anything on this program 
+**    Everyone is permitted to do anything on this program
 **    including copying, modifying, improving,
 **    as long as you don't try to pretend that you wrote it.
-**    i.e., the above copyright notice has to appear in all copies.  
+**    i.e., the above copyright notice has to appear in all copies.
 **    Binary distribution requires original version messages.
 **    You don't have to ask before copying, redistribution or publishing.
 **    THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE.
 ***********************************************************************/
 
 /***********************************************************************
-** UTF-8 \e$B%5%]!<%H$K$D$$$F\e(B
-**    \e$B=>Mh$N\e(B nkf \e$B$HF~$l$+$($F$=$N$^$^;H$($k$h$&$K$J$C$F$$$^$9\e(B
-**    nkf -e \e$B$J$I$H$7$F5/F0$9$k$H!"<+F0H=JL$G\e(B UTF-8 \e$B$HH=Dj$5$l$l$P!"\e(B
-**    \e$B$=$N$^$^\e(B euc-jp \e$B$KJQ49$5$l$^$9\e(B
-**
-**    \e$B$^$@%P%0$,$"$k2DG=@-$,9b$$$G$9!#\e(B
-**    (\e$BFC$K<+F0H=JL!"%3!<%I:.:_!"%(%i!<=hM}7O\e(B)
-**
-**    \e$B2?$+LdBj$r8+$D$1$?$i!"\e(B
-**        E-Mail: furukawa@tcp-ip.or.jp
-**    \e$B$^$G8fO"Mm$r$*4j$$$7$^$9!#\e(B
+ * \e$B8=:_!"\e(Bnkf \e$B$O\e(B SorceForge \e$B$K$F%a%s%F%J%s%9$,B3$1$i$l$F$$$^$9!#\e(B
+ * http://sourceforge.jp/projects/nkf/
 ***********************************************************************/
-/* $Id: nkf.c,v 1.134 2007/09/19 13:06:23 naruse Exp $ */
+/* $Id: nkf.c,v 1.138 2007/10/01 19:55:25 naruse Exp $ */
 #define NKF_VERSION "2.0.8"
-#define NKF_RELEASE_DATE "2007-09-19"
-#include "config.h"
-#include "utf8tbl.h"
-
+#define NKF_RELEASE_DATE "2007-10-01"
 #define COPY_RIGHT \
     "Copyright (C) 1987, FUJITSU LTD. (I.Ichikawa),2000 S. Kono, COW\n" \
     "Copyright (C) 2002-2007 Kono, Furukawa, Naruse, mastodon"
 
-
-/*
-**
-**
-**
-** USAGE:       nkf [flags] [file] 
-**
-** Flags:
-** b    Output is buffered             (DEFAULT)
-** u    Output is unbuffered
-**
-** t    no operation
-**
-** j    Output code is JIS 7 bit        (DEFAULT SELECT) 
-** s    Output code is MS Kanji         (DEFAULT SELECT) 
-** e    Output code is AT&T JIS         (DEFAULT SELECT) 
-** w    Output code is AT&T JIS         (DEFAULT SELECT) 
-** l    Output code is JIS 7bit and ISO8859-1 Latin-1
-**
-** m    MIME conversion for ISO-2022-JP
-** I    Convert non ISO-2022-JP charactor to GETA by Pekoe <pekoe@lair.net>
-** i_ Output sequence to designate JIS-kanji (DEFAULT_J)
-** o_ Output sequence to designate single-byte roman characters (DEFAULT_R)
-** M    MIME output conversion 
-**
-** r  {de/en}crypt ROT13/47
-**
-** v  display Version
-**
-** T  Text mode output        (for MS-DOS)
-**
-** x    Do not convert X0201 kana into X0208
-** Z    Convert X0208 alphabet to ASCII
-**
-** f60  fold option
-**
-** m    MIME decode
-** B    try to fix broken JIS, missing Escape
-** B[1-9]  broken level
-**
-** O   Output to 'nkf.out' file or last file name
-** d   Delete \r in line feed 
-** c   Add \r in line feed 
-** -- other long option
-** -- ignore following option (don't use with -O )
-**
-**/
-
+#include "config.h"
+#include "utf8tbl.h"
 #if (defined(__TURBOC__) || defined(_MSC_VER) || defined(LSI_C) || defined(__MINGW32__) || defined(__EMX__) || defined(__MSDOS__) || defined(__WINDOWS__) || defined(__DOS__) || defined(__OS2__)) && !defined(MSDOS)
 #define MSDOS
 #if (defined(__Win32__) || defined(_WIN32)) && !defined(__WIN32__)
@@ -196,7 +138,7 @@ void  djgpp_setbinmode(FILE *fp)
 #define         FALSE   0
 #define         TRUE    1
 
-/* state of output_mode and input_mode  
+/* state of output_mode and input_mode
 
    c2           0 means ASCII
                 X0201
@@ -249,10 +191,10 @@ void  djgpp_setbinmode(FILE *fp)
 
 #define         BS      0x08
 #define         TAB     0x09
-#define         NL      0x0a
+#define         LF      0x0a
 #define         CR      0x0d
 #define         ESC     0x1b
-#define         SPACE   0x20
+#define         SP      0x20
 #define         AT      0x40
 #define         SSP     0xa0
 #define         DEL     0x7f
@@ -260,6 +202,7 @@ void  djgpp_setbinmode(FILE *fp)
 #define         SO      0x0e
 #define         SSO     0x8e
 #define         SS3     0x8f
+#define         CRLF    0x0D0A
 
 #define                is_alnum(c)  \
             (('a'<=c && c<='z')||('A'<= c && c<='Z')||('0'<=c && c<='9'))
@@ -269,15 +212,15 @@ void  djgpp_setbinmode(FILE *fp)
 #define nkf_isoctal(c)  ('0'<=c && c<='7')
 #define nkf_isdigit(c)  ('0'<=c && c<='9')
 #define nkf_isxdigit(c)  (nkf_isdigit(c) || ('a'<=c && c<='f') || ('A'<=c && c <= 'F'))
-#define nkf_isblank(c) (c == SPACE || c == TAB)
-#define nkf_isspace(c) (nkf_isblank(c) || c == CR || c == NL)
+#define nkf_isblank(c) (c == SP || c == TAB)
+#define nkf_isspace(c) (nkf_isblank(c) || c == CR || c == LF)
 #define nkf_isalpha(c) (('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z'))
 #define nkf_isalnum(c) (nkf_isdigit(c) || nkf_isalpha(c))
-#define nkf_isprint(c) (' '<=c && c<='~')
+#define nkf_isprint(c) (SP<=c && c<='~')
 #define nkf_isgraph(c) ('!'<=c && c<='~')
 #define hex2bin(c) (('0'<=c&&c<='9') ? (c-'0') : \
                     ('A'<=c&&c<='F') ? (c-'A'+10) : \
-                    ('a'<=c&&c<='f') ? (c-'a'+10) : 0 )
+                    ('a'<=c&&c<='f') ? (c-'a'+10) : 0)
 #define bin2hex(c) ("0123456789ABCDEF"[c&15])
 #define is_eucg3(c2) (((unsigned short)c2 >> 8) == SS3)
 
@@ -331,7 +274,7 @@ struct input_code{
     int _file_stat;
 };
 
-static char *input_codename = "";
+static char *input_codename = NULL; /* NULL: unestablished, "": BINARY */
 
 #ifndef PERL_XS
 static const char *CopyRight = COPY_RIGHT;
@@ -398,7 +341,7 @@ static  nkf_char     e2s_conv(nkf_char c2, nkf_char c1, nkf_char *p2, nkf_char *
 static  void    s_oconv(nkf_char c2,nkf_char c1);
 static  void    j_oconv(nkf_char c2,nkf_char c1);
 static  void    fold_conv(nkf_char c2,nkf_char c1);
-static  void    cr_conv(nkf_char c2,nkf_char c1);
+static  void    nl_conv(nkf_char c2,nkf_char c1);
 static  void    z_conv(nkf_char c2,nkf_char c1);
 static  void    rot_conv(nkf_char c2,nkf_char c1);
 static  void    hira_conv(nkf_char c2,nkf_char c1);
@@ -456,7 +399,7 @@ static int             hold_count = 0;
 /* MIME preprocessor fifo */
 
 #define MIME_BUF_SIZE   (1024)    /* 2^n ring buffer */
-#define MIME_BUF_MASK   (MIME_BUF_SIZE-1)   
+#define MIME_BUF_MASK   (MIME_BUF_SIZE-1)
 #define Fifo(n)         mime_buf[(n)&MIME_BUF_MASK]
 static unsigned char           mime_buf[MIME_BUF_SIZE];
 static unsigned int            mime_top = 0;
@@ -479,7 +422,7 @@ static int             mimebuf_f = FALSE;      /* MIME buffered input */
 static int             broken_f = FALSE;       /* convert ESC-less broken JIS */
 static int             iso8859_f = FALSE;      /* ISO8859 through */
 static int             mimeout_f = FALSE;       /* base64 mode */
-#if defined(MSDOS) || defined(__OS2__) 
+#if defined(MSDOS) || defined(__OS2__)
 static int             x0201_f = TRUE;         /* Assume JISX0201 kana */
 #else
 static int             x0201_f = NO_X0201;     /* Assume NO JISX0201 */
@@ -543,7 +486,6 @@ static  void    print_guessed_code(char *filename);
 #endif
 static  void    set_input_codename(char *codename);
 static int is_inputcode_mixed = FALSE;
-static int is_inputcode_set   = FALSE;
 
 #ifdef EXEC_IO
 static int exec_f = 0;
@@ -637,7 +579,7 @@ static nkf_char (*iconv)(nkf_char c2,nkf_char c1,nkf_char c0) = no_connection2;
 
 static void (*o_zconv)(nkf_char c2,nkf_char c1) = no_connection;
 static void (*o_fconv)(nkf_char c2,nkf_char c1) = no_connection;
-static void (*o_crconv)(nkf_char c2,nkf_char c1) = no_connection;
+static void (*o_nlconv)(nkf_char c2,nkf_char c1) = no_connection;
 static void (*o_rot_conv)(nkf_char c2,nkf_char c1) = no_connection;
 static void (*o_hira_conv)(nkf_char c2,nkf_char c1) = no_connection;
 static void (*o_base64conv)(nkf_char c2,nkf_char c1) = no_connection;
@@ -754,7 +696,6 @@ static const unsigned char fv[] = {
 } ;
 
 
-#define    CRLF      1
 
 static int             file_out_f = FALSE;
 #ifdef OVERWRITE
@@ -765,8 +706,9 @@ static char            *backup_suffix = "";
 static char *get_backup_filename(const char *suffix, const char *filename);
 #endif
 
-static int             crmode_f = 0;   /* CR, NL, CRLF */
-static nkf_char prev_cr = 0;
+static int nlmode_f = 0;   /* CR, LF, CRLF */
+static int input_nextline = 0; /* 0: unestablished, EOF: MIXED */
+static nkf_char prev_cr = 0; /* CR or 0 */
 #ifdef EASYWIN /*Easy Win */
 static int             end_check;
 #endif /*Easy Win */
@@ -827,7 +769,7 @@ int main(int argc, char **argv)
 
     if (binmode_f == TRUE)
 #if defined(__OS2__) && (defined(__IBMC__) || defined(__IBMCPP__))
-    if (freopen("","wb",stdout) == NULL) 
+    if (freopen("","wb",stdout) == NULL)
         return (-1);
 #else
     setbinmode(stdout);
@@ -857,8 +799,7 @@ int main(int argc, char **argv)
        int is_argument_error = FALSE;
       while (argc--) {
            is_inputcode_mixed = FALSE;
-           is_inputcode_set   = FALSE;
-           input_codename = "";
+           input_codename = NULL;
 #ifdef CHECK_OPTION
            iconv_for_check = 0;
 #endif
@@ -913,7 +854,7 @@ int main(int argc, char **argv)
                       }
                   }else
 #endif
-                 if(argc == 1 ) {
+                 if(argc == 1) {
                      outfname = *argv++;
                      argc--;
                  } else {
@@ -926,7 +867,7 @@ int main(int argc, char **argv)
                  }
                   if (binmode_f == TRUE) {
 #if defined(__OS2__) && (defined(__IBMC__) || defined(__IBMCPP__))
-                      if (freopen("","wb",stdout) == NULL) 
+                      if (freopen("","wb",stdout) == NULL)
                            return (-1);
 #else
                       setbinmode(stdout);
@@ -935,11 +876,11 @@ int main(int argc, char **argv)
               }
               if (binmode_f == TRUE)
 #if defined(__OS2__) && (defined(__IBMC__) || defined(__IBMCPP__))
-                 if (freopen("","rb",fin) == NULL) 
+                 if (freopen("","rb",fin) == NULL)
                     return (-1);
 #else
                  setbinmode(fin);
-#endif 
+#endif
               setvbuffer(fin, (char *) stdibuf, IOBUF_SIZE);
               if (nop_f)
                   noconvert(fin);
@@ -1018,12 +959,12 @@ int main(int argc, char **argv)
            return(-1);
     }
 #ifdef EASYWIN /*Easy Win */
-    if (file_out_f == FALSE) 
+    if (file_out_f == FALSE)
         scanf("%d",&end_check);
-    else 
+    else
         fclose(stdout);
 #else /* for Other OS */
-    if (file_out_f == TRUE) 
+    if (file_out_f == TRUE)
         fclose(stdout);
 #endif /*Easy Win */
     return (0);
@@ -1171,27 +1112,27 @@ void options(unsigned char *cp)
        p = 0;
         switch (*cp++) {
         case '-':  /* literal options */
-           if (!*cp || *cp == SPACE) {        /* ignore the rest of arguments */
+           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] == ' '){
+               if (*p == cp[j] || cp[j] == SP){
                    p = &cp[j] + 1;
                    break;
                }
                p = 0;
             }
            if (p == 0) return;
-           while(*cp && *cp != SPACE && cp++);
+           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){
-                   for (i=0; i < 16 && SPACE < p[i] && p[i] < DEL; i++){
+                   for (i=0; i < 16 && SP < p[i] && p[i] < DEL; i++){
                        codeset[i] = nkf_toupper(p[i]);
                    }
                    codeset[i] = 0;
@@ -1319,7 +1260,7 @@ void options(unsigned char *cp)
                }
                 if (strcmp(long_option[i].name, "oc=") == 0){
                    x0201_f = FALSE;
-                   for (i=0; i < 16 && SPACE < p[i] && p[i] < DEL; i++){
+                   for (i=0; i < 16 && SP < p[i] && p[i] < DEL; i++){
                        codeset[i] = nkf_toupper(p[i]);
                    }
                    codeset[i] = 0;
@@ -1587,7 +1528,7 @@ void options(unsigned char *cp)
                    encode_fallback = encode_fallback_html;
                     continue;
                 }
-                if (strcmp(long_option[i].name, "fb-xml" ) == 0){
+                if (strcmp(long_option[i].name, "fb-xml") == 0){
                    encode_fallback = encode_fallback_xml;
                     continue;
                 }
@@ -1692,27 +1633,27 @@ void options(unsigned char *cp)
             input_f = LATIN1_INPUT;
             continue;
         case 'i':           /* Kanji IN ESC-$-@/B */
-            if (*cp=='@'||*cp=='B') 
+            if (*cp=='@'||*cp=='B')
                 kanji_intro = *cp++;
             continue;
         case 'o':           /* ASCII IN ESC-(-J/B */
-            if (*cp=='J'||*cp=='B'||*cp=='H') 
+            if (*cp=='J'||*cp=='B'||*cp=='H')
                 ascii_intro = *cp++;
             continue;
         case 'h':
-            /*  
+            /*
                 bit:1   katakana->hiragana
                 bit:2   hiragana->katakana
             */
-            if ('9'>= *cp && *cp>='0') 
+            if ('9'>= *cp && *cp>='0')
                 hira_f |= (*cp++ -'0');
-            else 
+            else
                 hira_f |= 1;
             continue;
         case 'r':
             rot_f = TRUE;
             continue;
-#if defined(MSDOS) || defined(__OS2__) 
+#if defined(MSDOS) || defined(__OS2__)
         case 'T':
             binmode_f = FALSE;
             continue;
@@ -1818,11 +1759,11 @@ void options(unsigned char *cp)
                     ESC-(-I     in JIS, EUC, MS Kanji
                     SI/SO       in JIS, EUC, MS Kanji
                     SSO         in EUC, JIS, not in MS Kanji
-                    MS Kanji (0xa0-0xdf) 
+                    MS Kanji (0xa0-0xdf)
                output  X0201
                     ESC-(-I     in JIS (0x20-0x5f)
                     SSO         in EUC (0xa0-0xdf)
-                    0xa0-0xd    in MS Kanji (0xa0-0xdf) 
+                    0xa0-0xd    in MS Kanji (0xa0-0xdf)
             */
             continue;
         case 'X':   /* Assume X0201 kana */
@@ -1838,7 +1779,7 @@ void options(unsigned char *cp)
                fold_len *= 10;
                fold_len += *cp++ - '0';
            }
-            if (!(0<fold_len && fold_len<BUFSIZ)) 
+            if (!(0<fold_len && fold_len<BUFSIZ))
                 fold_len = DEFAULT_FOLD;
            if (*cp=='-') {
                fold_margin = 0;
@@ -1879,9 +1820,9 @@ void options(unsigned char *cp)
                 bit:1   allow any x on ESC-(-x or ESC-$-x
                 bit:2   reset to ascii on NL
             */
-            if ('9'>= *cp && *cp>='0') 
+            if ('9'>= *cp && *cp>='0')
                 broken_f |= 1<<(*cp++ -'0');
-            else 
+            else
                 broken_f |= TRUE;
             continue;
 #ifndef PERL_XS
@@ -1890,23 +1831,23 @@ void options(unsigned char *cp)
             continue;
 #endif
         case 'c':/* add cr code */
-            crmode_f = CRLF;
+            nlmode_f = CRLF;
             continue;
         case 'd':/* delete cr code */
-            crmode_f = NL;
+            nlmode_f = LF;
             continue;
         case 'I':   /* ISO-2022-JP output */
             iso2022jp_f = TRUE;
             continue;
         case 'L':  /* line mode */
             if (*cp=='u') {         /* unix */
-                crmode_f = NL; cp++;
+                nlmode_f = LF; cp++;
             } else if (*cp=='m') { /* mac */
-                crmode_f = CR; cp++;
+                nlmode_f = CR; cp++;
             } else if (*cp=='w') { /* windows */
-                crmode_f = CRLF; cp++;
+                nlmode_f = CRLF; cp++;
             } else if (*cp=='0') { /* no conversion  */
-                crmode_f = 0; cp++;
+                nlmode_f = 0; cp++;
             }
             continue;
         case 'g':
@@ -1914,7 +1855,7 @@ void options(unsigned char *cp)
             guess_f = TRUE;
 #endif
             continue;
-        case ' ':    
+        case SP:
         /* module muliple options in a string are allowed for Perl moudle  */
            while(*cp && *cp++!='-');
             continue;
@@ -1960,7 +1901,7 @@ void set_iconv(nkf_char f, nkf_char (*iconv_func)(nkf_char c2,nkf_char c1,nkf_ch
         struct input_code *p = find_inputcode_byfunc(iconv);
         if (p){
             set_input_codename(p->name);
-            debug(input_codename);
+            debug(p->name);
         }
         iconv_for_check = iconv;
     }
@@ -2321,7 +2262,7 @@ nkf_char noconvert(FILE *f)
 
 void module_connection(void)
 {
-    oconv = output_conv; 
+    oconv = output_conv;
     o_putc = std_putc;
 
     /* replace continucation module, from output side */
@@ -2341,8 +2282,8 @@ void module_connection(void)
        /* base64_count = 0; */
     }
 
-    if (crmode_f) {
-       o_crconv = oconv; oconv = cr_conv;
+    if (nlmode_f || guess_f) {
+       o_nlconv = oconv; oconv = nl_conv;
     }
     if (rot_f) {
        o_rot_conv = oconv; oconv = rot_conv;
@@ -2530,7 +2471,7 @@ void check_bom(FILE *f)
 }
 
 /*
-   Conversion main loop. Code detection only. 
+   Conversion main loop. Code detection only.
  */
 
 nkf_char kanji_convert(FILE *f)
@@ -2569,9 +2510,9 @@ nkf_char kanji_convert(FILE *f)
                 if (!estab_f&&!mime_decode_mode) {
                     /* in case of not established yet */
                     /* It is still ambiguious */
-                    if (h_conv(f, c2, c1)==EOF) 
+                    if (h_conv(f, c2, c1)==EOF)
                         LAST;
-                    else 
+                    else
                         c2 = 0;
                     NEXT;
                 } else {
@@ -2587,7 +2528,7 @@ nkf_char kanji_convert(FILE *f)
             } else
                 /* second byte, 7 bit code */
                 /* it might be kanji shitfted */
-                if ((c1 == DEL) || (c1 <= SPACE)) {
+                if ((c1 == DEL) || (c1 <= SP)) {
                     /* ignore bogus first code */
                     c2 = 0;
                     NEXT;
@@ -2702,14 +2643,14 @@ nkf_char kanji_convert(FILE *f)
                        NEXT;
                     }
                 }
-            } else if ((c1 > SPACE) && (c1 != DEL)) {
+            } else if ((c1 > SP) && (c1 != DEL)) {
                 /* in case of Roman characters */
-                if (shift_mode) { 
+                if (shift_mode) {
                     /* output 1 shifted byte */
                     if (iso8859_f) {
                         c2 = ISO8859_1;
                         SEND;
-                    } else if (SPACE<=c1 && c1<(0xe0&0x7f) ){
+                    } else if (SP <= c1 && c1 < (0xe0&0x7f)){
                       /* output 1 shifted byte */
                        if(iso2022jp_f && x0201_f==NO_X0201) {
                            (*oconv)(GETA1, GETA2);
@@ -2727,7 +2668,7 @@ nkf_char kanji_convert(FILE *f)
                     /* in case of Kanji shifted */
                     c2 = c1;
                     NEXT;
-                } else if (c1 == '=' && mime_f && !mime_decode_mode ) {
+                } else if (c1 == '=' && mime_f && !mime_decode_mode) {
                     /* Check MIME code */
                     if ((c1 = (*i_getc)(f)) == EOF) {
                         (*oconv)(0, '=');
@@ -2736,11 +2677,11 @@ nkf_char kanji_convert(FILE *f)
                         /* =? is mime conversion start sequence */
                        if(mime_f == STRICT_MIME) {
                            /* check in real detail */
-                           if (mime_begin_strict(f) == EOF) 
+                           if (mime_begin_strict(f) == EOF)
                                LAST;
                            else
                                NEXT;
-                       } else if (mime_begin(f) == EOF) 
+                       } else if (mime_begin(f) == EOF)
                             LAST;
                         else
                             NEXT;
@@ -2750,14 +2691,14 @@ nkf_char kanji_convert(FILE *f)
                         NEXT;
                     }
                 } else {
-                    /* normal ASCII code */ 
+                    /* normal ASCII code */
                     SEND;
                 }
             } else if (c1 == SI && (!is_8bit || mime_decode_mode)) {
-                shift_mode = FALSE; 
+                shift_mode = FALSE;
                 NEXT;
             } else if (c1 == SO && (!is_8bit || mime_decode_mode)) {
-                shift_mode = TRUE; 
+                shift_mode = TRUE;
                 NEXT;
             } else if (c1 == ESC && (!is_8bit || mime_decode_mode)) {
                 if ((c1 = (*i_getc)(f)) == EOF) {
@@ -2766,7 +2707,7 @@ nkf_char kanji_convert(FILE *f)
                 } else if (c1 == '$') {
                     if ((c1 = (*i_getc)(f)) == EOF) {
                         /*
-                        (*oconv)(0, ESC); don't send bogus code 
+                        (*oconv)(0, ESC); don't send bogus code
                         (*oconv)(0, '$'); */
                         LAST;
                     } else if (c1 == '@'|| c1 == 'B') {
@@ -2775,12 +2716,12 @@ nkf_char kanji_convert(FILE *f)
                         shift_mode = FALSE;
                         set_input_codename("ISO-2022-JP");
 #ifdef CHECK_OPTION
-                        debug(input_codename);
+                        debug("ISO-2022-JP");
 #endif
                         NEXT;
                     } else if (c1 == '(') {
                         if ((c1 = (*i_getc)(f)) == EOF) {
-                            /* don't send bogus code 
+                            /* don't send bogus code
                             (*oconv)(0, ESC);
                             (*oconv)(0, '$');
                             (*oconv)(0, '(');
@@ -2826,7 +2767,7 @@ nkf_char kanji_convert(FILE *f)
                     }
                 } else if (c1 == '(') {
                     if ((c1 = (*i_getc)(f)) == EOF) {
-                        /* don't send bogus code 
+                        /* don't send bogus code
                         (*oconv)(0, ESC);
                         (*oconv)(0, '('); */
                         LAST;
@@ -2849,10 +2790,10 @@ nkf_char kanji_convert(FILE *f)
                             SEND;
                         }
                     }
-               } else if ( c1 == 'N' || c1 == 'n' ){
+               } else if ( c1 == 'N' || c1 == 'n'){
                    /* SS2 */
                    c3 = (*i_getc)(f);  /* skip SS2 */
-                   if ( (SPACE<=c3 && c3 < 0x60) || (0xa0<=c3 && c3 < 0xe0)){
+                   if ( (SP<=c3 && c3 < 0x60) || (0xa0<=c3 && c3 < 0xe0)){
                        c1 = c3;
                        c2 = X0201;
                        SEND;
@@ -2876,7 +2817,7 @@ nkf_char kanji_convert(FILE *f)
                    /* J-PHONE emoji */
                    if ((c1 = (*i_getc)(f)) == EOF) {
                        /*
-                          (*oconv)(0, ESC); don't send bogus code 
+                          (*oconv)(0, ESC); don't send bogus code
                           (*oconv)(0, '$'); */
                        LAST;
                    } else {
@@ -2890,9 +2831,9 @@ nkf_char kanji_convert(FILE *f)
                               NUM : 2 0 3 4 5 X 1
                             */
                            static const char jphone_emoji_first_table[7] = {2, 0, 3, 4, 5, 0, 1};
-                           c0 = (jphone_emoji_first_table[c1 % 7] << 8) - SPACE + 0xE000 + CLASS_UNICODE;
+                           c0 = (jphone_emoji_first_table[c1 % 7] << 8) - SP + 0xE000 + CLASS_UNICODE;
                            while ((c1 = (*i_getc)(f)) != EOF) {
-                               if (SPACE <= c1 && c1 <= 'z') {
+                               if (SP <= c1 && c1 <= 'z') {
                                    (*oconv)(0, c1 + c0);
                                } else break; /* c1 == SO */
                            }
@@ -2905,32 +2846,32 @@ nkf_char kanji_convert(FILE *f)
                    (*oconv)(0, ESC);
                    SEND;
                }
-           } else if (c1 == NL || c1 == CR) {
+           } else if (c1 == LF || c1 == CR) {
                if (broken_f&4) {
                    input_mode = ASCII; set_iconv(FALSE, 0);
                    SEND;
                } else if (mime_decode_f && !mime_decode_mode){
-                   if (c1 == NL) {
-                       if ((c1=(*i_getc)(f))!=EOF && c1 == SPACE) {
-                           i_ungetc(SPACE,f);
+                   if (c1 == LF) {
+                       if ((c1=(*i_getc)(f))!=EOF && c1 == SP) {
+                           i_ungetc(SP,f);
                            continue;
                        } else {
                            i_ungetc(c1,f);
                        }
-                       c1 = NL;
+                       c1 = LF;
                        SEND;
                    } else  { /* if (c1 == CR)*/
                        if ((c1=(*i_getc)(f))!=EOF) {
-                           if (c1==SPACE) {
-                               i_ungetc(SPACE,f);
+                           if (c1==SP) {
+                               i_ungetc(SP,f);
                                continue;
-                           } else if (c1 == NL && (c1=(*i_getc)(f))!=EOF && c1 == SPACE) {
-                               i_ungetc(SPACE,f);
+                           } else if (c1 == LF && (c1=(*i_getc)(f))!=EOF && c1 == SP) {
+                               i_ungetc(SP,f);
                                continue;
                            } else {
                                i_ungetc(c1,f);
                            }
-                           i_ungetc(NL,f);
+                           i_ungetc(LF,f);
                        } else {
                            i_ungetc(c1,f);
                        }
@@ -2938,15 +2879,11 @@ nkf_char kanji_convert(FILE *f)
                        SEND;
                    }
                }
-               if (!crmode_f) {
-                   if (prev_cr && c1 == NL) crmode_f = CRLF;
-                   else crmode_f = c1;
-               }
-           } else if (c1 == DEL && input_mode == X0208 ) {
+           } else if (c1 == DEL && input_mode == X0208) {
                /* CP5022x */
                c2 = c1;
                NEXT;
-           } else 
+           } else
                 SEND;
         }
         /* send: */
@@ -3005,7 +2942,7 @@ nkf_char kanji_convert(FILE *f)
 
     /* epilogue */
     (*iconv)(EOF, 0, 0);
-    if (!is_inputcode_set)
+    if (!input_codename)
     {
        if (is_8bit) {
            struct input_code *p = input_code_list;
@@ -3015,6 +2952,9 @@ nkf_char kanji_convert(FILE *f)
                ++p;
            }
            set_input_codename(result->name);
+#ifdef CHECK_OPTION
+           debug(result->name);
+#endif
        }
     }
     return 1;
@@ -3198,7 +3138,7 @@ nkf_char s2e_conv(nkf_char c2, nkf_char c1, nkf_char *p2, nkf_char *p1)
            if (0x9E < c1) c2++;
        }
        if (c1 < 0x9F)
-           c1 = c1 - ((c1 > DEL) ? SPACE : 0x1F);
+           c1 = c1 - ((c1 > DEL) ? SP : 0x1F);
        else {
            c1 = c1 - 0x7E;
        }
@@ -3216,7 +3156,7 @@ nkf_char s_iconv(nkf_char c2, nkf_char c1, nkf_char c0)
 {
     if (c2 == X0201) {
        c1 &= 0x7f;
-    } else if ((c2 == EOF) || (c2 == 0) || c2 < SPACE) {
+    } else if ((c2 == EOF) || (c2 == 0) || c2 < SP) {
         /* NOP */
     } else if (!x0213_f && 0xF0 <= c2 && c2 <= 0xF9 && 0x40 <= c1 && c1 <= 0xFC) {
        /* CP932 UDC */
@@ -3264,7 +3204,7 @@ nkf_char e_iconv(nkf_char c2, nkf_char c1, nkf_char c0)
     } else if (c2 == SSO){
         c2 = X0201;
         c1 &= 0x7f;
-    } else if ((c2 == EOF) || (c2 == 0) || c2 < SPACE) {
+    } else if ((c2 == EOF) || (c2 == 0) || c2 < SP) {
         /* NOP */
     } else {
        if (!cp51932_f && ms_ucs_map_f && 0xF5 <= c2 && c2 <= 0xFE && 0xA1 <= c1 && c1 <= 0xFE) {
@@ -3322,7 +3262,7 @@ nkf_char w_iconv(nkf_char c2, nkf_char c1, nkf_char c0)
        21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
        30, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 33, 33,
        40, 41, 41, 41, 42, 43, 43, 43, 50, 50, 50, 50, 60, 60, 70, 70};
-    
+
     if (c2 < 0 || 0xff < c2) {
     }else if (c2 == 0) { /* 0 : 1 byte*/
        c0 = 0;
@@ -3858,7 +3798,7 @@ void w_oconv(nkf_char c2, nkf_char c1)
     }
 #endif
 
-    if (c2 == 0) { 
+    if (c2 == 0) {
        output_mode = ASCII;
         (*o_putc)(c1);
     } else if (c2 == ISO8859_1) {
@@ -4017,7 +3957,7 @@ void e_oconv(nkf_char c2, nkf_char c1)
     if (c2 == EOF) {
         (*o_putc)(EOF);
         return;
-    } else if (c2 == 0) { 
+    } else if (c2 == 0) {
        output_mode = ASCII;
         (*o_putc)(c1);
     } else if (c2 == X0201) {
@@ -4263,7 +4203,7 @@ void j_oconv(nkf_char c2, nkf_char c1)
         (*o_putc)(c1);
     } else if (c2==ISO8859_1) {
             /* iso8859 introduction, or 8th bit on */
-            /* Can we convert in 7bit form using ESC-'-'-A ? 
+            /* Can we convert in 7bit form using ESC-'-'-A ?
                Is this popular? */
        output_mode = ISO8859_1;
         (*o_putc)(c1|0x80);
@@ -4316,19 +4256,19 @@ nkf_char broken_getc(FILE *f)
        return broken_buf[--broken_counter];
     }
     c= (*i_bgetc)(f);
-    if (c=='$' && broken_last != ESC 
+    if (c=='$' && broken_last != ESC
             && (input_mode==ASCII || input_mode==X0201)) {
        c1= (*i_bgetc)(f);
        broken_last = 0;
        if (c1=='@'|| c1=='B') {
-           broken_buf[0]=c1; broken_buf[1]=c; 
+           broken_buf[0]=c1; broken_buf[1]=c;
            broken_counter=2;
            return ESC;
        } else {
            (*i_bungetc)(c1,f);
            return c;
        }
-    } else if (c=='(' && broken_last != ESC 
+    } else if (c=='(' && broken_last != ESC
             && (input_mode==X0208 || input_mode==X0201)) { /* ) */
        c1= (*i_bgetc)(f);
        broken_last = 0;
@@ -4353,46 +4293,41 @@ nkf_char broken_ungetc(nkf_char c, FILE *f)
     return c;
 }
 
-void cr_conv(nkf_char c2, nkf_char c1)
+void nl_conv(nkf_char c2, nkf_char c1)
 {
-    if (prev_cr) {
+    if (guess_f && input_nextline != EOF) {
+       if (c2 == 0 && c1 == LF) {
+           if (!input_nextline) input_nextline = prev_cr ? CRLF : LF;
+           else if (input_nextline != (prev_cr ? CRLF : LF)) input_nextline = EOF;
+       } else if (c2 == 0 && c1 == CR && input_nextline == LF) input_nextline = EOF;
+       else if (!prev_cr);
+       else if (!input_nextline) input_nextline = CR;
+       else if (input_nextline != CR) input_nextline = EOF;
+    }
+    if (prev_cr || c2 == 0 && c1 == LF) {
        prev_cr = 0;
-       if (! (c2==0&&c1==NL) ) {
-           cr_conv(0,'\n');
-       }
-    }
-    if (c2) {
-        (*o_crconv)(c2,c1);
-    } else if (c1=='\r') {
-       prev_cr = c1;
-    } else if (c1=='\n') {
-        if (crmode_f==CRLF) {
-            (*o_crconv)(0,'\r');
-       } else if (crmode_f==CR) {
-            (*o_crconv)(0,'\r');
-           return;
-       } 
-       (*o_crconv)(0,NL);
-    } else if (c1!='\032' || crmode_f!=NL){
-        (*o_crconv)(c2,c1);
+       if (nlmode_f != LF) (*o_nlconv)(0, CR);
+       if (nlmode_f != CR) (*o_nlconv)(0, LF);
     }
+    if (c2 == 0 && c1 == CR) prev_cr = CR;
+    else if (c2 != 0 || c1 != LF) (*o_nlconv)(c2, c1);
 }
 
-/* 
+/*
   Return value of fold_conv()
 
-       \n  add newline  and output char
-       \r  add newline  and output nothing
-       ' ' space
-       0   skip  
-       1   (or else) normal output 
+       LF  add newline  and output char
+       CR  add newline  and output nothing
+       SP  space
+       0   skip
+       1   (or else) normal output
 
   fold state in prev (previous character)
 
       >0x80 Japanese (X0208/X0201)
       <0x80 ASCII
-      \n    new line 
-      ' '   space
+      LF    new line
+      SP    space
 
   This fold algorthm does not preserve heading space in a line.
   This is the main difference from fmt.
@@ -4401,34 +4336,34 @@ void cr_conv(nkf_char c2, nkf_char c1)
 #define char_size(c2,c1) (c2?2:1)
 
 void fold_conv(nkf_char c2, nkf_char c1)
-{ 
+{
     nkf_char prev0;
     nkf_char fold_state;
 
-    if (c1== '\r' && !fold_preserve_f) {
+    if (c1== CR && !fold_preserve_f) {
        fold_state=0;  /* ignore cr */
-    }else if (c1== '\n'&&f_prev=='\r' && fold_preserve_f) {
-        f_prev = '\n';
+    }else if (c1== LF&&f_prev==CR && fold_preserve_f) {
+        f_prev = LF;
        fold_state=0;  /* ignore cr */
     } else if (c1== BS) {
         if (f_line>0) f_line--;
         fold_state =  1;
     } else if (c2==EOF && f_line != 0) {    /* close open last line */
-            fold_state = '\n';
-    } else if ((c1=='\n' && !fold_preserve_f)
-               || ((c1=='\r'||(c1=='\n'&&f_prev!='\r'))
+            fold_state = LF;
+    } else if ((c1==LF && !fold_preserve_f)
+               || ((c1==CR||(c1==LF&&f_prev!=CR))
                    && fold_preserve_f)) {
         /* new line */
-        if (fold_preserve_f) { 
+        if (fold_preserve_f) {
             f_prev = c1;
             f_line = 0;
-            fold_state =  '\r';
+            fold_state =  CR;
        } else if ((f_prev == c1 && !fold_preserve_f)
-                   || (f_prev == '\n' && fold_preserve_f)
+                   || (f_prev == LF && fold_preserve_f)
                    ) {        /* duplicate newline */
             if (f_line) {
                 f_line = 0;
-                fold_state =  '\n';    /* output two newline */
+                fold_state =  LF;    /* output two newline */
             } else {
                 f_line = 0;
                 fold_state =  1;
@@ -4437,41 +4372,41 @@ void fold_conv(nkf_char c2, nkf_char c1)
             if (f_prev&0x80) {     /* Japanese? */
                 f_prev = c1;
                 fold_state =  0;       /* ignore given single newline */
-            } else if (f_prev==' ') {
+            } else if (f_prev==SP) {
                 fold_state =  0;
             } else {
                 f_prev = c1;
-                if (++f_line<=fold_len) 
-                    fold_state =  ' ';
+                if (++f_line<=fold_len)
+                    fold_state =  SP;
                 else {
                     f_line = 0;
-                    fold_state =  '\r';        /* fold and output nothing */
+                    fold_state =  CR;        /* fold and output nothing */
                 }
             }
         }
     } else if (c1=='\f') {
-        f_prev = '\n';
+        f_prev = LF;
         f_line = 0;
-        fold_state =  '\n';            /* output newline and clear */
-    } else if ( (c2==0  && c1==' ')||
-               (c2==0  && c1=='\t')||
+        fold_state =  LF;            /* output newline and clear */
+    } else if ( (c2==0  && c1==SP)||
+               (c2==0  && c1==TAB)||
                (c2=='!'&& c1=='!')) {
         /* X0208 kankaku or ascii space */
-            if (f_prev == ' ') {
+            if (f_prev == SP) {
                 fold_state = 0;         /* remove duplicate spaces */
             } else {
-                f_prev = ' ';    
-                if (++f_line<=fold_len) 
-                    fold_state = ' ';         /* output ASCII space only */
+                f_prev = SP;
+                if (++f_line<=fold_len)
+                    fold_state = SP;         /* output ASCII space only */
                 else {
-                    f_prev = ' '; f_line = 0;
-                    fold_state = '\r';        /* fold and output nothing */
+                    f_prev = SP; f_line = 0;
+                    fold_state = CR;        /* fold and output nothing */
                 }
             }
     } else {
         prev0 = f_prev; /* we still need this one... , but almost done */
         f_prev = c1;
-        if (c2 || c2==X0201) 
+        if (c2 || c2==X0201)
             f_prev |= 0x80;  /* this is Japanese */
         f_line += char_size(c2,c1);
         if (f_line<=fold_len) {   /* normal case */
@@ -4479,7 +4414,7 @@ void fold_conv(nkf_char c2, nkf_char c1)
         } else {
             if (f_line>fold_len+fold_margin) { /* too many kinsoku suspension */
                 f_line = char_size(c2,c1);
-                fold_state =  '\n';       /* We can't wait, do fold now */
+                fold_state =  LF;       /* We can't wait, do fold now */
             } else if (c2==X0201) {
             /* simple kinsoku rules  return 1 means no folding  */
                 if (c1==(0xde&0x7f)) fold_state = 1; /* \e$B!+\e(B*/
@@ -4488,15 +4423,15 @@ void fold_conv(nkf_char c2, nkf_char c1)
                 else if (c1==(0xa3&0x7f)) fold_state = 1; /* \e$B!$\e(B*/
                 else if (c1==(0xa1&0x7f)) fold_state = 1; /* \e$B!W\e(B*/
                 else if (c1==(0xb0&0x7f)) fold_state = 1; /* - */
-                else if (SPACE<=c1 && c1<=(0xdf&0x7f)) {      /* X0201 */
+                else if (SP<=c1 && c1<=(0xdf&0x7f)) {      /* X0201 */
                    f_line = 1;
-                   fold_state = '\n';/* add one new f_line before this character */
+                   fold_state = LF;/* add one new f_line before this character */
                } else {
                    f_line = 1;
-                   fold_state = '\n';/* add one new f_line before this character */
+                   fold_state = LF;/* add one new f_line before this character */
                }
             } else if (c2==0) {
-                /* kinsoku point in ASCII */ 
+                /* kinsoku point in ASCII */
                if (  c1==')'||    /* { [ ( */
                      c1==']'||
                      c1=='}'||
@@ -4506,17 +4441,17 @@ void fold_conv(nkf_char c2, nkf_char c1)
                      c1=='?'||
                      c1=='/'||
                      c1==':'||
-                     c1==';' ) {
+                     c1==';') {
                    fold_state = 1;
                /* just after special */
                } else if (!is_alnum(prev0)) {
                    f_line = char_size(c2,c1);
-                   fold_state = '\n';
-               } else if ((prev0==' ') ||   /* ignored new f_line */
-                      (prev0=='\n')||        /* ignored new f_line */
+                   fold_state = LF;
+               } else if ((prev0==SP) ||   /* ignored new f_line */
+                      (prev0==LF)||        /* ignored new f_line */
                       (prev0&0x80)) {        /* X0208 - ASCII */
                    f_line = char_size(c2,c1);
-                    fold_state = '\n';/* add one new f_line before this character */
+                    fold_state = LF;/* add one new f_line before this character */
                 } else {
                     fold_state = 1;  /* default no fold in ASCII */
                 }
@@ -4535,14 +4470,14 @@ void fold_conv(nkf_char c2, nkf_char c1)
                     else if (c1=='+')  fold_state = 1; /* \e$B!+\e(B */
                     else if (c1==',')  fold_state = 1; /* \e$B!,\e(B */
                          /* default no fold in kinsoku */
-                   else { 
-                       fold_state = '\n';
+                   else {
+                       fold_state = LF;
                        f_line = char_size(c2,c1);
                        /* add one new f_line before this character */
                    }
                 } else {
                    f_line = char_size(c2,c1);
-                    fold_state = '\n'; 
+                    fold_state = LF;
                     /* add one new f_line before this character */
                 }
             }
@@ -4550,18 +4485,18 @@ void fold_conv(nkf_char c2, nkf_char c1)
     }
     /* terminator process */
     switch(fold_state) {
-        case '\n': 
-            (*o_fconv)(0,'\n');
+        case LF:
+            (*o_fconv)(0,LF);
             (*o_fconv)(c2,c1);
             break;
-        case 0:    
+        case 0:
             return;
-        case '\r': 
-            (*o_fconv)(0,'\n');
+        case CR:
+            (*o_fconv)(0,LF);
             break;
-        case '\t': 
-        case ' ': 
-            (*o_fconv)(0,' ');
+        case TAB:
+        case SP:
+            (*o_fconv)(0,SP);
             break;
         default:
             (*o_fconv)(c2,c1);
@@ -4585,25 +4520,25 @@ void z_conv(nkf_char c2, nkf_char c1)
            if (c2 == X0201) {
                if (c1 == (0xde&0x7f)) { /* \e$BByE@\e(B */
                    z_prev2 = 0;
-                   (*o_zconv)(dv[(z_prev1-SPACE)*2], dv[(z_prev1-SPACE)*2+1]);
+                   (*o_zconv)(dv[(z_prev1-SP)*2], dv[(z_prev1-SP)*2+1]);
                    return;
-               } else if (c1 == (0xdf&0x7f) && ev[(z_prev1-SPACE)*2]) {  /* \e$BH>ByE@\e(B */
+               } else if (c1 == (0xdf&0x7f) && ev[(z_prev1-SP)*2]) {  /* \e$BH>ByE@\e(B */
                    z_prev2 = 0;
-                   (*o_zconv)(ev[(z_prev1-SPACE)*2], ev[(z_prev1-SPACE)*2+1]);
+                   (*o_zconv)(ev[(z_prev1-SP)*2], ev[(z_prev1-SP)*2+1]);
                    return;
                }
            }
            z_prev2 = 0;
-           (*o_zconv)(cv[(z_prev1-SPACE)*2], cv[(z_prev1-SPACE)*2+1]);
+           (*o_zconv)(cv[(z_prev1-SP)*2], cv[(z_prev1-SP)*2+1]);
        }
        if (c2 == X0201) {
-           if (dv[(c1-SPACE)*2] || ev[(c1-SPACE)*2]) {
+           if (dv[(c1-SP)*2] || ev[(c1-SP)*2]) {
                /* wait for \e$BByE@\e(B or \e$BH>ByE@\e(B */
                z_prev1 = c1;
                z_prev2 = c2;
                return;
            } else {
-               (*o_zconv)(cv[(c1-SPACE)*2], cv[(c1-SPACE)*2+1]);
+               (*o_zconv)(cv[(c1-SP)*2], cv[(c1-SP)*2+1]);
                return;
            }
        }
@@ -4614,24 +4549,24 @@ void z_conv(nkf_char c2, nkf_char c1)
         return;
     }
 
-    if (alpha_f&1 && c2 == 0x23 ) {
+    if (alpha_f&1 && c2 == 0x23) {
        /* JISX0208 Alphabet */
         c2 = 0;
-    } else if (c2 == 0x21) { 
+    } else if (c2 == 0x21) {
        /* JISX0208 Kigou */
        if (0x21==c1) {
            if (alpha_f&2) {
                c2 = 0;
-               c1 = ' ';
+               c1 = SP;
            } else if (alpha_f&4) {
-                (*o_zconv)(0, ' ');
-                (*o_zconv)(0, ' ');
+                (*o_zconv)(0, SP);
+                (*o_zconv)(0, SP);
                 return;
-           } 
+           }
        } else if (alpha_f&1 && 0x20<c1 && c1<0x7f && fv[c1-0x20]) {
            c2 =  0;
            c1 = fv[c1-0x20];
-       } 
+       }
     }
 
     if (alpha_f&8 && c2 == 0) {
@@ -4723,7 +4658,7 @@ void z_conv(nkf_char c2, nkf_char c1)
 
 
 #define rot13(c)  ( \
-      ( c < 'A' ) ? c: \
+      ( c < 'A') ? c: \
       (c <= 'M')  ? (c + 13): \
       (c <= 'Z')  ? (c - 13): \
       (c < 'a')   ? (c): \
@@ -4733,9 +4668,9 @@ void z_conv(nkf_char c2, nkf_char c1)
 )
 
 #define  rot47(c) ( \
-      ( c < '!' ) ? c: \
-      ( c <= 'O' ) ? (c + 47) : \
-      ( c <= '~' ) ?  (c - 47) : \
+      ( c < '!') ? c: \
+      ( c <= 'O') ? (c + 47) : \
+      ( c <= '~') ?  (c - 47) : \
       c \
 )
 
@@ -4916,8 +4851,8 @@ nkf_char mime_begin_strict(FILE *f)
     p = mime_pattern[j];
     r[0]='='; r[1]='?';
 
-    for(i=2;p[i]>' ';i++) {                   /* start at =? */
-        if ( ((r[i] = c1 = (*i_getc)(f))==EOF) || nkf_toupper(c1) != p[i] ) {
+    for(i=2;p[i]>SP;i++) {                   /* start at =? */
+        if (((r[i] = c1 = (*i_getc)(f))==EOF) || nkf_toupper(c1) != p[i]) {
             /* pattern fails, try next one */
             q = p;
             while (mime_pattern[++j]) {
@@ -4947,7 +4882,7 @@ nkf_char mime_begin_strict(FILE *f)
         if (!unbuf_f) {
             /* do MIME integrity check */
             return mime_integrity(f,mime_pattern[j]);
-        } 
+        }
     }
     switch_mime_getc();
     mimebuf_f = TRUE;
@@ -4966,7 +4901,7 @@ nkf_char mime_ungetc_buf(nkf_char c, FILE *f)
 {
     if (mimebuf_f)
        (*i_mungetc_buf)(c,f);
-    else 
+    else
        Fifo(--mime_input) = (unsigned char)c;
     return c;
 }
@@ -4985,8 +4920,8 @@ nkf_char mime_begin(FILE *f)
     for(i=2;i<MAXRECOVER;i++) {                   /* start at =? */
         /* We accept any character type even if it is breaked by new lines */
         c1 = (*i_getc)(f); Fifo(mime_last++) = (unsigned char)c1;
-        if (c1=='\n'||c1==' '||c1=='\r'||
-                c1=='-'||c1=='_'||is_alnum(c1) ) continue;
+        if (c1==LF||c1==SP||c1==CR||
+                c1=='-'||c1=='_'||is_alnum(c1)) continue;
         if (c1=='=') {
             /* Failed. But this could be another MIME preemble */
             (*i_ungetc)(c1,f);
@@ -5036,46 +4971,42 @@ void no_putc(nkf_char c)
 void debug(const char *str)
 {
     if (debug_f){
-        fprintf(stderr, "%s\n", str);
+        fprintf(stderr, "%s\n", str ? str : "NULL");
     }
 }
 #endif
 
 void set_input_codename(char *codename)
 {
-    if (guess_f && 
-        is_inputcode_set &&
-        strcmp(codename, "") != 0 && 
-        strcmp(codename, input_codename) != 0)
-    {
+    if (!input_codename) {
+       input_codename = codename;
+    } else if (strcmp(codename, input_codename) != 0) {
         is_inputcode_mixed = TRUE;
+       input_codename = "";
     }
-    input_codename = codename;
-    is_inputcode_set = TRUE;
 }
 
 #if !defined(PERL_XS) && !defined(WIN32DLL)
 void print_guessed_code(char *filename)
 {
     char *codename = "BINARY";
-    char *str_crmode = NULL;
-    if (!is_inputcode_mixed) {
-        if (strcmp(input_codename, "") == 0) {
-            codename = "ASCII";
-        } else {
-            codename = input_codename;
-        }
-        if (crmode_f == CR) str_crmode = "CR";
-        else if (crmode_f == NL) str_crmode = "LF";
-        else if (crmode_f == CRLF) str_crmode = "CRLF";
+    char *str_nlmode = NULL;
+    if (filename != NULL) printf("%s: ", filename);
+    if (input_codename && !*input_codename) {
+       printf("BINARY\n");
+    } else {
+       printf("%s%s\n",
+              (input_codename ? input_codename : "ASCII"),
+              input_nextline == CR   ? " (CR)" :
+              input_nextline == LF   ? " (LF)" :
+              input_nextline == CRLF ? " (CRLF)" :
+              input_nextline == EOF  ? " (MIXED NL)" :
+              "");
     }
-    if (filename != NULL) printf("%s:", filename);
-    if (str_crmode != NULL) printf("%s (%s)\n", codename, str_crmode);
-    else printf("%s\n", codename);
 }
 #endif /*WIN32DLL*/
 
-#ifdef INPUT_OPTION 
+#ifdef INPUT_OPTION
 
 nkf_char hex_getc(nkf_char ch, FILE *f, nkf_char (*g)(FILE *f), nkf_char (*u)(nkf_char c, FILE *f))
 {
@@ -5189,7 +5120,7 @@ nkf_char nfc_getc(FILE *f)
     int i=0, j, k=1, lower, upper;
     nkf_char buf[9];
     const nkf_nfchar *array;
-    
+
     buf[i] = (*g)(f);
     while (k > 0 && ((buf[i] & 0xc0) != 0x80)){
        lower=0, upper=NORMALIZATION_TABLE_LENGTH-1;
@@ -5225,7 +5156,7 @@ nkf_char nfc_ungetc(nkf_char c, FILE *f)
 #endif /* UNICODE_NORMALIZATION */
 
 
-nkf_char 
+nkf_char
 mime_getc(FILE *f)
 {
     nkf_char c1, c2, c3, c4, cc;
@@ -5251,15 +5182,15 @@ mime_getc(FILE *f)
     if (mime_decode_mode == 'Q') {
         if ((c1 = (*i_mgetc)(f)) == EOF) return (EOF);
 restart_mime_q:
-        if (c1=='_' && mimebuf_f != FIXED_MIME) return ' ';
-       if (c1<=' ' || DEL<=c1) {
+        if (c1=='_' && mimebuf_f != FIXED_MIME) return SP;
+       if (c1<=SP || DEL<=c1) {
            mime_decode_mode = exit_mode; /* prepare for quit */
            return c1;
        }
         if (c1!='=' && (c1!='?' || mimebuf_f == FIXED_MIME)) {
            return c1;
        }
-                
+
         mime_decode_mode = exit_mode; /* prepare for quit */
         if ((c2 = (*i_mgetc)(f)) == EOF) return (EOF);
         if (c1=='?'&&c2=='=' && mimebuf_f != FIXED_MIME) {
@@ -5273,32 +5204,32 @@ restart_mime_q:
            }
            while ((c1=(*i_getc)(f))!=EOF) {
                switch (c1) {
-               case NL:
+               case LF:
                case CR:
-                   if (c1==NL) {
-                       if ((c1=(*i_getc)(f))!=EOF && (c1==SPACE||c1==TAB)) {
-                           i_ungetc(SPACE,f);
+                   if (c1==LF) {
+                       if ((c1=(*i_getc)(f))!=EOF && (c1==SP||c1==TAB)) {
+                           i_ungetc(SP,f);
                            continue;
                        } else {
                            i_ungetc(c1,f);
                        }
-                       c1 = NL;
+                       c1 = LF;
                    } else {
-                       if ((c1=(*i_getc)(f))!=EOF && c1 == NL) {
-                           if ((c1=(*i_getc)(f))!=EOF && (c1==SPACE||c1==TAB)) {
-                               i_ungetc(SPACE,f);
+                       if ((c1=(*i_getc)(f))!=EOF && c1 == LF) {
+                           if ((c1=(*i_getc)(f))!=EOF && (c1==SP||c1==TAB)) {
+                               i_ungetc(SP,f);
                                continue;
                            } else {
                                i_ungetc(c1,f);
                            }
-                           i_ungetc(NL,f);
+                           i_ungetc(LF,f);
                        } else {
                            i_ungetc(c1,f);
                        }
                        c1 = CR;
                    }
                    break;
-               case SPACE:
+               case SP:
                case TAB:
                    lwsp_buf[lwsp_count] = (unsigned char)c1;
                    if (lwsp_count++>lwsp_size){
@@ -5315,7 +5246,7 @@ restart_mime_q:
                }
                break;
            }
-           if (lwsp_count > 0 && (c1 != '=' || (lwsp_buf[lwsp_count-1] != SPACE && lwsp_buf[lwsp_count-1] != TAB))) {
+           if (lwsp_count > 0 && (c1 != '=' || (lwsp_buf[lwsp_count-1] != SP && lwsp_buf[lwsp_count-1] != TAB))) {
                i_ungetc(c1,f);
                for(lwsp_count--;lwsp_count>0;lwsp_count--)
                    i_ungetc(lwsp_buf[lwsp_count],f);
@@ -5324,8 +5255,8 @@ restart_mime_q:
            free(lwsp_buf);
             return c1;
         }
-        if (c1=='='&&c2<' ') { /* this is soft wrap */
-            while((c1 =  (*i_mgetc)(f)) <=' ') {
+        if (c1=='='&&c2<SP) { /* this is soft wrap */
+            while((c1 =  (*i_mgetc)(f)) <=SP) {
                if ((c1 = (*i_mgetc)(f)) == EOF) return (EOF);
            }
             mime_decode_mode = 'Q'; /* still in MIME */
@@ -5337,7 +5268,7 @@ restart_mime_q:
             return c1;
         }
         if ((c3 = (*i_mgetc)(f)) == EOF) return (EOF);
-        if (c2<=' ') return c2;
+        if (c2<=SP) return c2;
         mime_decode_mode = 'Q'; /* still in MIME */
         return ((hex2bin(c2)<<4) + hex2bin(c3));
     }
@@ -5349,26 +5280,26 @@ restart_mime_q:
 
 
     /* Base64 encoding */
-    /* 
-        MIME allows line break in the middle of 
+    /*
+        MIME allows line break in the middle of
         Base64, but we are very pessimistic in decoding
-        in unbuf mode because MIME encoded code may broken by 
+        in unbuf mode because MIME encoded code may broken by
         less or editor's control sequence (such as ESC-[-K in unbuffered
         mode. ignore incomplete MIME.
     */
     mode = mime_decode_mode;
     mime_decode_mode = exit_mode;  /* prepare for quit */
 
-    while ((c1 = (*i_mgetc)(f))<=' ') {
+    while ((c1 = (*i_mgetc)(f))<=SP) {
         if (c1==EOF)
             return (EOF);
     }
 mime_c2_retry:
-    if ((c2 = (*i_mgetc)(f))<=' ') {
+    if ((c2 = (*i_mgetc)(f))<=SP) {
         if (c2==EOF)
             return (EOF);
        if (mime_f != STRICT_MIME) goto mime_c2_retry;
-        if (mimebuf_f!=FIXED_MIME) input_mode = ASCII;  
+        if (mimebuf_f!=FIXED_MIME) input_mode = ASCII;
         return c2;
     }
     if ((c1 == '?') && (c2 == '=')) {
@@ -5381,35 +5312,35 @@ mime_c2_retry:
        }
        while ((c1=(*i_getc)(f))!=EOF) {
            switch (c1) {
-           case NL:
+           case LF:
            case CR:
-               if (c1==NL) {
-                   if ((c1=(*i_getc)(f))!=EOF && (c1==SPACE||c1==TAB)) {
-                       i_ungetc(SPACE,f);
+               if (c1==LF) {
+                   if ((c1=(*i_getc)(f))!=EOF && (c1==SP||c1==TAB)) {
+                       i_ungetc(SP,f);
                        continue;
                    } else {
                        i_ungetc(c1,f);
                    }
-                   c1 = NL;
+                   c1 = LF;
                } else {
                    if ((c1=(*i_getc)(f))!=EOF) {
-                       if (c1==SPACE) {
-                           i_ungetc(SPACE,f);
+                       if (c1==SP) {
+                           i_ungetc(SP,f);
                            continue;
-                       } else if ((c1=(*i_getc)(f))!=EOF && (c1==SPACE||c1==TAB)) {
-                           i_ungetc(SPACE,f);
+                       } else if ((c1=(*i_getc)(f))!=EOF && (c1==SP||c1==TAB)) {
+                           i_ungetc(SP,f);
                            continue;
                        } else {
                            i_ungetc(c1,f);
                        }
-                       i_ungetc(NL,f);
+                       i_ungetc(LF,f);
                    } else {
                        i_ungetc(c1,f);
                    }
                    c1 = CR;
                }
                break;
-           case SPACE:
+           case SP:
            case TAB:
                lwsp_buf[lwsp_count] = (unsigned char)c1;
                if (lwsp_count++>lwsp_size){
@@ -5426,7 +5357,7 @@ mime_c2_retry:
            }
            break;
        }
-       if (lwsp_count > 0 && (c1 != '=' || (lwsp_buf[lwsp_count-1] != SPACE && lwsp_buf[lwsp_count-1] != TAB))) {
+       if (lwsp_count > 0 && (c1 != '=' || (lwsp_buf[lwsp_count-1] != SP && lwsp_buf[lwsp_count-1] != TAB))) {
            i_ungetc(c1,f);
            for(lwsp_count--;lwsp_count>0;lwsp_count--)
                i_ungetc(lwsp_buf[lwsp_count],f);
@@ -5436,19 +5367,19 @@ mime_c2_retry:
         return c1;
     }
 mime_c3_retry:
-    if ((c3 = (*i_mgetc)(f))<=' ') {
+    if ((c3 = (*i_mgetc)(f))<=SP) {
         if (c3==EOF)
             return (EOF);
        if (mime_f != STRICT_MIME) goto mime_c3_retry;
-        if (mimebuf_f!=FIXED_MIME) input_mode = ASCII;  
+        if (mimebuf_f!=FIXED_MIME) input_mode = ASCII;
         return c3;
     }
 mime_c4_retry:
-    if ((c4 = (*i_mgetc)(f))<=' ') {
+    if ((c4 = (*i_mgetc)(f))<=SP) {
         if (c4==EOF)
             return (EOF);
        if (mime_f != STRICT_MIME) goto mime_c4_retry;
-        if (mimebuf_f!=FIXED_MIME) input_mode = ASCII;  
+        if (mimebuf_f!=FIXED_MIME) input_mode = ASCII;
         return c4;
     }
 
@@ -5467,7 +5398,7 @@ mime_c4_retry:
         if (c3 != '=') {
             Fifo(mime_last++) = (unsigned char)cc;
             cc = ((t3 << 6) & 0x0c0) | (t4 & 0x3f);
-            if (c4 != '=') 
+            if (c4 != '=')
                 Fifo(mime_last++) = (unsigned char)cc;
         }
     } else {
@@ -5490,7 +5421,7 @@ nkf_char mime_integrity(FILE *f, const unsigned char *p)
      */
     mime_input = mime_top;
     mime_last = mime_top;
-    
+
     while(*p) Fifo(mime_input++) = *p++;
     d = 0;
     q = mime_input;
@@ -5502,7 +5433,7 @@ nkf_char mime_integrity(FILE *f, const unsigned char *p)
             /* checked. skip header, start decode */
             Fifo(mime_input++) = (unsigned char)c;
             /* mime_last_input = mime_input; */
-            mime_input = q; 
+            mime_input = q;
            switch_mime_getc();
             return 1;
         }
@@ -5562,26 +5493,26 @@ void open_mime(nkf_char mode)
        }
     }
     mimeout_mode = mime_encode_method[i];
-    
+
     i = 0;
     if (base64_count>45) {
        if (mimeout_buf_count>0 && nkf_isblank(mimeout_buf[i])){
             (*o_mputc)(mimeout_buf[i]);
            i++;
        }
-       (*o_mputc)(NL);
-       (*o_mputc)(SPACE);
+       (*o_mputc)(LF);
+       (*o_mputc)(SP);
        base64_count = 1;
        if (!mimeout_preserve_space && mimeout_buf_count>0
-           && (mimeout_buf[i]==SPACE || mimeout_buf[i]==TAB
-               || mimeout_buf[i]==CR || mimeout_buf[i]==NL )) {
+           && (mimeout_buf[i]==SP || mimeout_buf[i]==TAB
+               || mimeout_buf[i]==CR || mimeout_buf[i]==LF)) {
            i++;
        }
     }
     if (!mimeout_preserve_space) {
        for (;i<mimeout_buf_count;i++) {
-           if (mimeout_buf[i]==SPACE || mimeout_buf[i]==TAB
-               || mimeout_buf[i]==CR || mimeout_buf[i]==NL ) {
+           if (mimeout_buf[i]==SP || mimeout_buf[i]==TAB
+               || mimeout_buf[i]==CR || mimeout_buf[i]==LF) {
                (*o_mputc)(mimeout_buf[i]);
                base64_count ++;
            } else {
@@ -5590,7 +5521,7 @@ void open_mime(nkf_char mode)
        }
     }
     mimeout_preserve_space = FALSE;
-    
+
     while(*p) {
         (*o_mputc)(*p++);
         base64_count ++;
@@ -5630,7 +5561,7 @@ void eof_mime(void)
     }
     if (mimeout_mode) {
        if (mimeout_f!=FIXED_MIME) {
-           close_mime(); 
+           close_mime();
        } else if (mimeout_mode != 'Q')
            mimeout_mode = 'B';
     }
@@ -5640,7 +5571,7 @@ void mimeout_addchar(nkf_char c)
 {
     switch(mimeout_mode) {
     case 'Q':
-       if (c==CR||c==NL) {
+       if (c==CR||c==LF) {
            (*o_mputc)(c);
            base64_count = 0;
        } else if(!nkf_isalnum(c)) {
@@ -5686,24 +5617,24 @@ void mime_prechar(nkf_char c2, nkf_char c1)
         if (c2 == EOF){
             if (base64_count + mimeout_buf_count/3*4> 73){
                 (*o_base64conv)(EOF,0);
-                (*o_base64conv)(0,NL);
-                (*o_base64conv)(0,SPACE);
+                (*o_base64conv)(0,LF);
+                (*o_base64conv)(0,SP);
             }
         } else if (c2){
             if (base64_count + mimeout_buf_count/3*4> 66){
                 (*o_base64conv)(EOF,0);
-                (*o_base64conv)(0,NL);
-                (*o_base64conv)(0,SPACE);
+                (*o_base64conv)(0,LF);
+                (*o_base64conv)(0,SP);
             }
         }/*else if (mime_lastchar2){
             if (c1 <=DEL && !nkf_isspace(c1)){
-                (*o_base64conv)(0,SPACE);
+                (*o_base64conv)(0,SP);
             }
         }*/
     }/*else{
         if (c2 && mime_lastchar2 == 0
             && mime_lastchar1 && !nkf_isspace(mime_lastchar1)){
-            (*o_base64conv)(0,SPACE);
+            (*o_base64conv)(0,SP);
         }
     }*/
     /*mime_lastchar2 = c2;
@@ -5718,16 +5649,16 @@ void mime_putc(nkf_char c)
     if (mimeout_f == FIXED_MIME){
         if (mimeout_mode == 'Q'){
             if (base64_count > 71){
-                if (c!=CR && c!=NL) {
+                if (c!=CR && c!=LF) {
                     (*o_mputc)('=');
-                    (*o_mputc)(NL);
+                    (*o_mputc)(LF);
                 }
                 base64_count = 0;
             }
         }else{
             if (base64_count > 71){
                 eof_mime();
-                (*o_mputc)(NL);
+                (*o_mputc)(LF);
                 base64_count = 0;
             }
             if (c == EOF) { /* c==EOF */
@@ -5739,7 +5670,7 @@ void mime_putc(nkf_char c)
         }
         return;
     }
-    
+
     /* mimeout_f != FIXED_MIME */
 
     if (c == EOF) { /* c==EOF */
@@ -5773,20 +5704,20 @@ void mime_putc(nkf_char c)
     }
 
     if (mimeout_mode=='Q') {
-        if (c <= DEL && (output_mode==ASCII ||output_mode == ISO8859_1 ) ) {
-           if (c == CR || c == NL) {
+        if (c <= DEL && (output_mode==ASCII ||output_mode == ISO8859_1)) {
+           if (c == CR || c == LF) {
                close_mime();
                (*o_mputc)(c);
                base64_count = 0;
                return;
-            } else if (c <= SPACE) {
+            } else if (c <= SP) {
                 close_mime();
                if (base64_count > 70) {
-                   (*o_mputc)(NL);
+                   (*o_mputc)(LF);
                    base64_count = 0;
                }
                if (!nkf_isblank(c)) {
-                   (*o_mputc)(SPACE);
+                   (*o_mputc)(SP);
                    base64_count++;
                }
             }
@@ -5805,12 +5736,12 @@ void mime_putc(nkf_char c)
     if (!mimeout_mode) {
         if (c <= DEL && (output_mode==ASCII ||output_mode == ISO8859_1)) {
             if (nkf_isspace(c)) {
-                if (c==CR || c==NL) {
+                if (c==CR || c==LF) {
                     base64_count=0;
                 }
                 for (i=0;i<mimeout_buf_count;i++) {
                     (*o_mputc)(mimeout_buf[i]);
-                    if (mimeout_buf[i] == CR || mimeout_buf[i] == NL){
+                    if (mimeout_buf[i] == CR || mimeout_buf[i] == LF){
                         base64_count = 0;
                     }else{
                         base64_count++;
@@ -5821,11 +5752,11 @@ void mime_putc(nkf_char c)
             }else{
                 if (base64_count > 1
                     && base64_count + mimeout_buf_count > 76
-                   && mimeout_buf[0] != CR && mimeout_buf[0] != NL){
-                    (*o_mputc)(NL);
+                   && mimeout_buf[0] != CR && mimeout_buf[0] != LF){
+                    (*o_mputc)(LF);
                     base64_count = 0;
                     if (!nkf_isspace(mimeout_buf[0])){
-                        (*o_mputc)(SPACE);
+                        (*o_mputc)(SP);
                         base64_count++;
                     }
                 }
@@ -5836,33 +5767,33 @@ void mime_putc(nkf_char c)
             }
             return;
         }else{
-            if (lastchar==CR || lastchar == NL){
+            if (lastchar==CR || lastchar == LF){
                 for (i=0;i<mimeout_buf_count;i++) {
                     (*o_mputc)(mimeout_buf[i]);
                 }
                 base64_count = 0;
                 mimeout_buf_count = 0;
             }
-            if (lastchar==SPACE) {
+            if (lastchar==SP) {
                 for (i=0;i<mimeout_buf_count-1;i++) {
                     (*o_mputc)(mimeout_buf[i]);
                     base64_count++;
                 }
-                mimeout_buf[0] = SPACE;
+                mimeout_buf[0] = SP;
                 mimeout_buf_count = 1;
             }
             open_mime(output_mode);
         }
     }else{
         /* mimeout_mode == 'B', 1, 2 */
-        if ( c<=DEL && (output_mode==ASCII ||output_mode == ISO8859_1 ) ) {
-            if (lastchar == CR || lastchar == NL){
+        if ( c<=DEL && (output_mode==ASCII ||output_mode == ISO8859_1)) {
+            if (lastchar == CR || lastchar == LF){
                 if (nkf_isblank(c)) {
                     for (i=0;i<mimeout_buf_count;i++) {
                         mimeout_addchar(mimeout_buf[i]);
                     }
                     mimeout_buf_count = 0;
-                } else if (SPACE<c && c<DEL) {
+                } else if (SP<c && c<DEL) {
                     eof_mime();
                     for (i=0;i<mimeout_buf_count;i++) {
                         (*o_mputc)(mimeout_buf[i]);
@@ -5871,9 +5802,9 @@ void mime_putc(nkf_char c)
                     mimeout_buf_count = 0;
                 }
             }
-            if (c==SPACE || c==TAB || c==CR || c==NL) {
+            if (c==SP || c==TAB || c==CR || c==LF) {
                 for (i=0;i<mimeout_buf_count;i++) {
-                    if (SPACE<mimeout_buf[i] && mimeout_buf[i]<DEL) {
+                    if (SP<mimeout_buf[i] && mimeout_buf[i]<DEL) {
                         eof_mime();
                         for (i=0;i<mimeout_buf_count;i++) {
                             (*o_mputc)(mimeout_buf[i]);
@@ -5893,7 +5824,7 @@ void mime_putc(nkf_char c)
                 }
                 return;
             }
-            if (mimeout_buf_count>0 && SPACE<c && c!='=') {
+            if (mimeout_buf_count>0 && SP<c && c!='=') {
                 mimeout_buf[mimeout_buf_count++] = (char)c;
                 if (mimeout_buf_count>MIMEOUT_BUF_LENGTH) {
                     j = mimeout_buf_count;
@@ -5910,7 +5841,7 @@ void mime_putc(nkf_char c)
        j = mimeout_buf_count;
        mimeout_buf_count = 0;
        for (i=0;i<j;i++) {
-           if (mimeout_buf[i]==CR || mimeout_buf[i]==NL)
+           if (mimeout_buf[i]==CR || mimeout_buf[i]==LF)
                break;
            mimeout_addchar(mimeout_buf[i]);
        }
@@ -5984,7 +5915,6 @@ void reinit(void)
 #endif
     guess_f = FALSE;
     is_inputcode_mixed = FALSE;
-    is_inputcode_set   = FALSE;
 #ifdef EXEC_IO
     exec_f = 0;
 #endif
@@ -6018,7 +5948,7 @@ void reinit(void)
     oconv = DEFAULT_CONV;
     o_zconv = no_connection;
     o_fconv = no_connection;
-    o_crconv = no_connection;
+    o_nlconv = no_connection;
     o_rot_conv = no_connection;
     o_hira_conv = no_connection;
     o_base64conv = no_connection;
@@ -6038,7 +5968,7 @@ void reinit(void)
     shift_mode =  FALSE;
     mime_decode_mode = FALSE;
     file_out_f = FALSE;
-    crmode_f = 0;
+    nlmode_f = 0;
     option_mode = 0;
     broken_counter = 0;
     broken_last = 0;
@@ -6046,7 +5976,7 @@ void reinit(void)
 #ifdef CHECK_OPTION
     iconv_for_check = 0;
 #endif
-    input_codename = "";
+    input_codename = NULL;
 #ifdef WIN32DLL
     reinitdll();
 #endif /*WIN32DLL*/
@@ -6166,19 +6096,3 @@ void version(void)
     fprintf(stderr,"\n%s\n",CopyRight);
 }
 #endif /*PERL_XS*/
-
-/**
- ** \e$B%Q%C%A@):n<T\e(B
- **  void@merope.pleiades.or.jp (Kusakabe Youichi)
- **  NIDE Naoyuki <nide@ics.nara-wu.ac.jp>
- **  ohta@src.ricoh.co.jp (Junn Ohta)
- **  inouet@strl.nhk.or.jp (Tomoyuki Inoue)
- **  kiri@pulser.win.or.jp (Tetsuaki Kiriyama)
- **  Kimihiko Sato <sato@sail.t.u-tokyo.ac.jp>
- **  a_kuroe@kuroe.aoba.yokohama.jp (Akihiko Kuroe)
- **  kono@ie.u-ryukyu.ac.jp (Shinji Kono)
- **  GHG00637@nifty-serve.or.jp (COW)
- **
- **/
-
-/* end */