OSDN Git Service

* merge from nkf32.dll
authorNARUSE, Yui <naruse@users.sourceforge.jp>
Sun, 20 Feb 2005 21:17:50 +0000 (21:17 +0000)
committerNARUSE, Yui <naruse@users.sourceforge.jp>
Sun, 20 Feb 2005 21:17:50 +0000 (21:17 +0000)
nkf32dll.c [new file with mode: 0644]

diff --git a/nkf32dll.c b/nkf32dll.c
new file mode 100644 (file)
index 0000000..227fffd
--- /dev/null
@@ -0,0 +1,969 @@
+/* nkf32.dll nfk32dll.c */
+// e-mail:tkaneto@nifty.com
+// URL: http://www1.ttcn.ne.jp/~kaneto
+
+/*WIN32DLL*/
+/* \82±\82¿\82ç\82Ì\83o\81[\83W\83\87\83\93\82à\8dX\90V\82µ\82Ä\82­\82¾\82³\82¢\81B */
+#define NKF_VERSIONW L"2.0.4"
+/* NKF_VERSION \82Ì\83\8f\83C\83h\95\8e\9a */
+#define DLL_VERSION   "2.0.4.1 1"
+/* DLL\82ª\95Ô\82· */
+#define DLL_VERSIONW L"2.0.4.1 1"
+/* DLL\82ª\95Ô\82· DLL_VERSION \82Ì\83\8f\83C\83h\95\8e\9a */
+
+/* nkf32.dll main */
+#include <windows.h>
+#include <tchar.h>
+#include <stdarg.h>
+#include "nkf.h"
+
+#ifdef DLLDBG /* DLLDBG @@*/
+void dumpn(unsigned char *buff,unsigned n)
+{
+    int i;
+
+    i = 0;
+    while ( n ) {
+        if ( i == 0 ) {
+            printf(":%x  ",buff);
+        }
+        printf("%02x ",*buff++);
+        i++;
+        if ( i == 16 ) {
+            printf("\n");
+            i = 0;
+        }
+        n--;
+    }
+    printf("\n");
+}
+
+void dumpf(char *f);
+void mkfile(char *f,char *p);
+#endif /* DLLDBG @@*/
+
+#ifndef GUESS
+#define GUESS 64
+#endif /*GUESS*/
+
+char guessbuffA[MAX_PATH + GUESS];
+#ifdef UNICODESUPPORT
+wchar_t guessbuffW[MAX_PATH + GUESS];
+UINT guessCodePage = CP_OEMCP;
+DWORD guessdwFlags = MB_PRECOMPOSED;
+
+wchar_t *tounicode(char *p)
+{
+static wchar_t buff[GUESS];
+    int sts;
+
+    sts = MultiByteToWideChar(guessCodePage,guessdwFlags,p,-1,buff,sizeof(buff) / sizeof(wchar_t));
+    if ( sts ) {
+        return buff;
+    } else {
+        return L"(NULL)";
+    }
+}
+#endif /*UNICODESUPPORT*/
+
+char *ubuff;
+int ulen;
+int uret;
+
+int dllprintf(FILE *fp,char *fmt,...)
+{
+    va_list argp;
+    int sts;
+
+    if ( uret != FALSE && ulen >= 1 && fmt != NULL && *fmt != 0 ) {
+        va_start(argp, fmt);
+        sts = _vsnprintf(ubuff,ulen - 1,fmt,argp);
+        va_end(argp);
+        if ( sts >= 0 ) {
+            ubuff += sts;
+            ulen -= sts;
+        } else {
+            uret = FALSE;
+        }
+        return sts;
+    } else return 0;
+}
+
+/** Network Kanji Filter. (PDS Version)
+************************************************************************
+** Copyright (C) 1987, Fujitsu LTD. (Itaru ICHIKAWA)
+** \98A\97\8d\90æ\81\81i\8a\94\81j\95x\8em\92Ê\8c¤\8b\86\8f\8a\81@\83\\83t\83g\82R\8c¤\81@\8es\90ì\81@\8e\8a 
+** \81iE-Mail Address: ichikawa@flab.fujitsu.co.jp\81j
+** Copyright (C) 1996,1998
+** Copyright (C) 2002
+** \98A\97\8d\90æ\81\97®\8b\85\91å\8aw\8fî\95ñ\8dH\8aw\89È \89Í\96ì \90^\8e¡  mime/X0208 support
+** \81iE-Mail Address: kono@ie.u-ryukyu.ac.jp\81j
+** \98A\97\8d\90æ\81F COW for DOS & Win16 & Win32 & OS/2
+** \81iE-Mail Address: GHG00637@niftyserve.or.p\81j
+**
+**    \82±\82Ì\83\\81[\83X\82Ì\82¢\82©\82È\82é\95¡\8eÊ\81C\89ü\95Ï\81C\8fC\90³\82à\8b\96\91ø\82µ\82Ü\82·\81B\82½\82¾\82µ\81A
+**    \82»\82Ì\8dÛ\82É\82Í\81A\92N\82ª\8dv\8c£\82µ\82½\82ð\8e¦\82·\82±\82Ì\95\94\95ª\82ð\8ec\82·\82±\82Æ\81B
+**    \8dÄ\94z\95z\82â\8eG\8e\8f\82Ì\95t\98^\82È\82Ç\82Ì\96â\82¢\8d\87\82í\82¹\82à\95K\97v\82 \82è\82Ü\82¹\82ñ\81B
+**    \89c\97\98\97\98\97p\82à\8fã\8bL\82É\94½\82µ\82È\82¢\94Í\88Í\82Å\8b\96\89Â\82µ\82Ü\82·\81B
+**    \83o\83C\83i\83\8a\82Ì\94z\95z\82Ì\8dÛ\82É\82Íversion message\82ð\95Û\91\82·\82é\82±\82Æ\82ð\8fð\8c\8f\82Æ\82µ\82Ü\82·\81B
+**    \82±\82Ì\83v\83\8d\83O\83\89\83\80\82É\82Â\82¢\82Ä\82Í\93Á\82É\89½\82Ì\95Û\8fØ\82à\82µ\82È\82¢\81A\88«\82µ\82©\82ç\82¸\81B
+**
+**    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.  
+**    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.
+***********************************************************************/
+
+static const unsigned char *cin = NULL;
+static int nin = -1;
+static int ninmax = -1;
+static int std_getc_mode = 1;
+
+int 
+std_getc(f)
+FILE *f;
+{
+    if (std_gc_ndx){
+        return std_gc_buf[--std_gc_ndx];
+    } else {
+        if ( std_getc_mode == 1 ) {
+            return getc(f);
+        }
+        if ( std_getc_mode == 2 && cin != NULL ) {
+            if ( ninmax >= 0 ) {
+                if ( nin >= ninmax ) {
+                    return EOF;
+                } else {
+                    nin++;
+                    return *cin++;
+                }
+            } else {
+                if ( *cin ) {
+                    return *cin++;
+                } else {
+                    return EOF;
+                }
+            }
+        }
+    }
+    return EOF;
+}
+
+static FILE *fout = stdout;
+static unsigned char *cout = NULL;
+static int nout = -1;
+static int noutmax = -1;
+static int std_putc_mode = 1;
+
+void 
+std_putc(c)
+int c;
+{
+    if(c!=EOF)
+    {
+        if ( (std_putc_mode & 1) && fout != NULL ) {
+            putc(c,fout);
+        }
+        if ( (std_putc_mode & 4) && nout != -1 ) {
+            if ( noutmax >= 0 && nout >= noutmax ) std_putc_mode &= ~2;
+            nout++;
+        }
+        if ( (std_putc_mode & 2) && cout != NULL ) {
+            *cout++ = c;
+        }
+    }
+}
+
+void
+print_guessed_code (filename)
+    char *filename;
+{
+    char *codename = "BINARY";
+    if (!is_inputcode_mixed) {
+        if (strcmp(input_codename, "") == 0) {
+            codename = "ASCII";
+        } else {
+            codename = input_codename;
+        }
+    }
+    if (filename != NULL) {
+        sprintf(guessbuffA,"%s:%s", filename,codename);
+#ifdef UNICODESUPPORT
+        swprintf(guessbuffW,L"%s:%s",filename,tounicode(codename));
+#endif /*UNICODESUPPORT*/
+    } else {
+        sprintf(guessbuffA,"%s", codename);
+#ifdef UNICODESUPPORT
+        swprintf(guessbuffW,L"%s",tounicode(codename));
+#endif /*UNICODESUPPORT*/
+    }
+}
+
+/**
+ ** \83p\83b\83`\90§\8dì\8eÒ
+ **  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)
+ **
+ **/
+
+void 
+reinitdll()
+{
+    cin = NULL;
+    nin = -1;
+    ninmax = -1;
+    std_getc_mode = 1;
+    fout = stdout;
+    cout = NULL;
+    nout = -1;
+    noutmax = -1;
+    std_putc_mode = 1;
+}
+
+#ifndef DLLDBG /* DLLDBG @@*/
+int WINAPI DllEntryPoint(HINSTANCE hinst,unsigned long reason,void* lpReserved)
+{
+        return 1;
+}
+#endif /* DLLDBG @@*/
+
+static LPSTR nkfverA = NKF_VERSION;
+static LPSTR dllverA = DLL_VERSION;
+#ifdef UNICODESUPPORT
+static LPWSTR nkfverW = NKF_VERSIONW;
+static LPWSTR dllverW = DLL_VERSIONW;
+#endif /*UNICODESUPPORT*/
+
+BOOL scp(LPSTR s,LPSTR t,DWORD n)
+{
+    while ( n ) {
+        if ( (*s = *t) == 0 ) return TRUE;
+        if ( --n == 0 ) {
+            *s = 0;
+            break;
+        }
+        s++;
+        t++;
+    }
+    return FALSE;
+}
+
+#ifdef UNICODESUPPORT
+BOOL wscp(LPWSTR s,LPWSTR t,DWORD n)
+{
+    while ( n ) {
+        if ( (*s = *t) == 0 ) return TRUE;
+        if ( --n == 0 ) {
+            *s = 0;
+            break;
+        }
+        s++;
+        t++;
+    }
+    return FALSE;
+}
+#endif /*UNICODESUPPORT*/
+
+void CALLBACK GetNkfVersion(LPSTR verStr){
+    strcpy(verStr,dllverA);
+}
+
+BOOL WINAPI GetNkfVersionSafeA(LPSTR verStr,DWORD nBufferLength /*in TCHARs*/,LPDWORD lpTCHARsReturned /*in TCHARs*/)
+{
+    *lpTCHARsReturned = strlen(dllverA) + 1;
+    if ( verStr == NULL || nBufferLength == 0 ) return FALSE;
+    return scp(verStr,dllverA,nBufferLength);
+}
+
+BOOL WINAPI GetNkfVersionSafeW(LPWSTR verStr,DWORD nBufferLength /*in TCHARs*/,LPDWORD lpTCHARsReturned /*in TCHARs*/)
+{
+#ifdef UNICODESUPPORT
+    *lpTCHARsReturned = wcslen(dllverW) + 1;
+    if ( verStr == NULL || nBufferLength == 0 ) return FALSE;
+    wcsncpy(verStr,dllverW,nBufferLength);
+    if ( wcslen(dllverW) >= nBufferLength )  {
+        *(verStr + nBufferLength - 1) = 0;
+        return FALSE;
+    }
+    return TRUE;
+#else /*UNICODESUPPORT*/
+    return FALSE;
+#endif /*UNICODESUPPORT*/
+}
+
+int CALLBACK SetNkfOption(LPCSTR optStr)
+{
+    LPSTR p;
+
+    if ( *optStr == '-' ) {
+        reinit();
+        options(optStr);
+    } else {
+        p = malloc(strlen(optStr) + 2);
+        if ( p == NULL ) return -1;
+        *p = '-';
+        strcpy(p + 1,optStr);
+        reinit();
+        options(p);
+        free(p);
+    }
+    return 0;
+}
+
+void CALLBACK NkfConvert(LPSTR outStr, LPCSTR inStr)
+{
+    std_putc_mode = 2;
+    cout = outStr;
+    noutmax = -1;
+    nout = -1;
+    std_getc_mode = 2;
+    cin = inStr;
+    ninmax = -1;
+    nin = -1;
+    kanji_convert(NULL);
+    *cout = 0;
+}
+
+BOOL WINAPI NkfConvertSafe(LPSTR outStr,DWORD nOutBufferLength /*in Bytes*/,LPDWORD lpBytesReturned /*in Bytes*/, LPCSTR inStr,DWORD nInBufferLength /*in Bytes*/){
+    if ( inStr == NULL ) return FALSE;
+    std_putc_mode = 6;
+    cout = outStr;
+    noutmax = nOutBufferLength;
+    nout = 0;
+    std_getc_mode = 2;
+    cin = inStr;
+    ninmax = nInBufferLength;
+    nin = 0;
+    kanji_convert(NULL);
+    *lpBytesReturned = nout;
+    if ( nout < noutmax ) *cout = 0;
+    return TRUE;
+}
+
+void CALLBACK ToHankaku(LPSTR inStr)
+{
+    unsigned char *p;
+    int len;
+
+    len = strlen(inStr) + 1;
+    p = malloc(len);
+    if ( p == NULL ) return;
+    memcpy(p,inStr,len);
+    reinit();
+    options("-ZSs");
+    NkfConvert(inStr,p);
+    free(p);
+}
+
+BOOL WINAPI ToHankakuSafe(LPSTR outStr,DWORD nOutBufferLength /*in Bytes*/,LPDWORD lpBytesReturned /*in Bytes*/,LPCSTR inStr,DWORD nInBufferLength /*in Bytes*/)
+{
+    reinit();
+    options("-ZSs");
+    return NkfConvertSafe(outStr,nOutBufferLength,lpBytesReturned,inStr,nInBufferLength);
+}
+
+void CALLBACK ToZenkakuKana(LPSTR outStr, LPCSTR inStr)
+{
+    reinit();
+    options("-Ss");
+    NkfConvert(outStr, inStr);
+}
+
+BOOL WINAPI ToZenkakuKanaSafe(LPSTR outStr,DWORD nOutBufferLength /*in Bytes*/,LPDWORD lpBytesReturned /*in Bytes*/,LPCSTR inStr,DWORD nInBufferLength /*in Bytes*/)
+{
+    reinit();
+    options("-Ss");
+    return NkfConvertSafe(outStr,nOutBufferLength,lpBytesReturned,inStr,nInBufferLength);
+}
+
+void CALLBACK EncodeSubject(LPSTR outStr ,LPCSTR inStr){
+    reinit();
+    options("-jM");
+    NkfConvert(outStr, inStr);
+}
+
+BOOL WINAPI EncodeSubjectSafe(LPSTR outStr,DWORD nOutBufferLength /*in Bytes*/,LPDWORD lpBytesReturned /*in Bytes*/,LPCSTR inStr,DWORD nInBufferLength /*in Bytes*/)
+{
+    reinit();
+    options("-jM");
+    return NkfConvertSafe(outStr,nOutBufferLength,lpBytesReturned,inStr,nInBufferLength);
+}
+
+#ifdef TOMIME
+void CALLBACK ToMime(LPSTR outStr ,LPCSTR inStr)
+{
+    EncodeSubject(outStr,inStr);
+}
+#endif /*TOMIME*/
+
+#ifdef GETKANJICODE
+int CALLBACK NkfGetKanjiCode(VOID)
+{
+    int iCode=0;
+    //if(iconv == s_iconv)iCode=0; /* 0:\83V\83t\83gJIS */
+    if(iconv == w_iconv)iCode=3; /* UTF-8 */
+    else if(iconv == w_iconv16){
+        if(utf16_mode == UTF16LE_INPUT)iCode=5; /* 5:UTF-16BE */
+        else iCode=4; /* 4:UTF-16LE */
+    }else if(iconv == e_iconv){
+        if(estab_f == FALSE)iCode=2; /* 2:ISO-2022-JP */
+        else iCode=1; /* 1:EUC */
+    }
+    return iCode;
+}
+#endif /*GETKANJICODE*/
+
+#ifdef FILECONVERT1
+void CALLBACK NkfFileConvert1(LPCSTR fName)
+{
+    FILE *fin;
+    char *tempdname;
+    char tempfname[MAX_PATH];
+    char d[4];
+    DWORD len;
+    BOOL sts;
+
+    len = GetTempPath(sizeof d,d);
+    tempdname = malloc(len + 1);
+    if ( tempdname == NULL ) return;
+    len = GetTempPath(len + 1,tempdname);
+    sts = GetTempFileName(tempdname,"NKF",0,tempfname);
+    if ( sts != 0 )  {
+        sts = CopyFileA(fName,tempfname,FALSE);
+         if ( sts ) {
+             if ((fin = fopen(tempfname, "rb")) != NULL) {
+                 if ((fout = fopen(fName, "wb")) != NULL) {
+                     cin = NULL;
+                     nin = -1;
+                     ninmax = -1;
+                     std_getc_mode = 1;
+                     cout = NULL;
+                     nout = -1;
+                     noutmax = -1;
+                     std_putc_mode = 1;
+                     kanji_convert(fin);
+                     fclose(fin);
+                 }
+                 fclose(fout);
+             }
+        DeleteFile(tempfname);
+        }
+    }
+    free(tempdname);
+}
+#endif /*FILECONVERT1*/
+
+BOOL WINAPI NkfFileConvert1SafeA(LPCSTR fName,DWORD nBufferLength /*in TCHARs*/)
+{
+    FILE *fin;
+    char *tempdname;
+    char tempfname[MAX_PATH];
+    char d[4];
+    DWORD len;
+    BOOL sts;
+    BOOL ret;
+    LPCSTR p;
+
+    ret = FALSE;
+    p = fName;
+    for ( ;; ) {
+        if ( nBufferLength == 0 ) return ret;
+        if ( *p == 0 ) break;
+        p++;
+        --nBufferLength;
+    }
+    if ( chmod(fName,_S_IREAD | _S_IWRITE) == -1 ) return ret;
+    len = GetTempPath(sizeof d,d);
+    tempdname = malloc(len + 1);
+    if ( tempdname == NULL ) return FALSE;
+    len = GetTempPath(len + 1,tempdname);
+    sts = GetTempFileName(tempdname,"NKF",0,tempfname);
+    if ( sts != 0 )  {
+        sts = CopyFileA(fName,tempfname,FALSE);
+        if ( sts ) {
+            if ((fin = fopen(tempfname, "rb")) != NULL) {
+                if ((fout = fopen(fName, "wb")) != NULL) {
+                    cin = NULL;
+                    nin = -1;
+                    ninmax = -1;
+                    std_getc_mode = 1;
+                    cout = NULL;
+                    nout = -1;
+                    noutmax = -1;
+                    std_putc_mode = 1;
+                    kanji_convert(fin);
+                    fclose(fin);
+                    ret = TRUE;
+                }
+                fclose(fout);
+            }
+            DeleteFileA(tempfname);
+        }
+    }
+    free(tempdname);
+    return ret;
+}
+
+BOOL WINAPI NkfFileConvert1SafeW(LPCWSTR fName,DWORD nBufferLength /*in TCHARs*/)
+{
+#ifdef UNICODESUPPORT
+    FILE *fin;
+    wchar_t *tempdname;
+    wchar_t tempfname[MAX_PATH];
+    wchar_t d[2];
+    DWORD len;
+    BOOL sts;
+    BOOL ret;
+    LPCWSTR p;
+
+    ret = FALSE;
+    p = fName;
+    for ( ;; ) {
+        if ( nBufferLength == 0 ) return ret;
+        if ( *p == 0 ) break;
+        p++;
+        --nBufferLength;
+    }
+    if ( _wchmod(fName,_S_IREAD | _S_IWRITE) == -1 ) return ret;
+    len = GetTempPathW(sizeof d / sizeof(WCHAR),d);
+    tempdname = malloc((len + 1) * sizeof(WCHAR));
+    if ( tempdname == NULL ) return FALSE;
+    len = GetTempPathW(len + 1,tempdname);
+    sts = GetTempFileNameW(tempdname,L"NKF",0,tempfname);
+    if ( sts != 0 )  {
+        sts = CopyFileW(fName,tempfname,FALSE);
+        if ( sts ) {
+            if ((fin = _wfopen(tempfname,L"rb")) != NULL) {
+                if ((fout = _wfopen(fName,L"wb")) != NULL) {
+                    cin = NULL;
+                    nin = -1;
+                    ninmax = -1;
+                    std_getc_mode = 1;
+                    cout = NULL;
+                    nout = -1;
+                    noutmax = -1;
+                    std_putc_mode = 1;
+                    kanji_convert(fin);
+                    fclose(fin);
+                    ret = TRUE;
+                }
+                fclose(fout);
+            }
+            DeleteFileW(tempfname);
+        }
+    }
+    free(tempdname);
+    return ret;
+#else /*UNICODESUPPORT*/
+    return FALSE;
+#endif /*UNICODESUPPORT*/
+}
+
+#ifdef FILECONVERT2
+void CALLBACK NkfFileConvert2(LPCSTR fInName,LPCSTR fOutName)
+{
+    FILE *fin;
+
+    if ((fin = fopen(fInName, "rb")) == NULL) return;
+    if((fout=fopen(fOutName, "wb")) == NULL) {
+        fclose(fin);
+        return;
+    }
+    cin = NULL;
+    nin = -1;
+    ninmax = -1;
+    std_getc_mode = 1;
+    cout = NULL;
+    nout = -1;
+    noutmax = -1;
+    std_putc_mode = 1;
+    kanji_convert(fin);
+    fclose(fin);
+    fclose(fout);
+}
+#endif /*FILECONVERT2*/
+
+BOOL WINAPI NkfFileConvert2SafeA(LPCSTR fInName,DWORD fInBufferLength /*in TCHARs*/,LPCSTR fOutName,DWORD fOutBufferLength /*in TCHARs*/)
+{
+    FILE *fin;
+    BOOL sts;
+    BOOL ret;
+    LPCSTR p;
+
+    ret = FALSE;
+    p = fInName;
+    for ( ;; ) {
+        if ( fInBufferLength == 0 ) return ret;
+        if ( *p == 0 ) break;
+        p++;
+        --fInBufferLength;
+    }
+    p = fOutName;
+    for ( ;; ) {
+        if ( fOutBufferLength == 0 ) return ret;
+        if ( *p == 0 ) break;
+        p++;
+        --fOutBufferLength;
+    }
+    if ((fin = fopen(fInName, "rb")) != NULL) {
+        if((fout=fopen(fOutName, "wb")) != NULL) {
+            cin = NULL;
+            nin = -1;
+            ninmax = -1;
+            std_getc_mode = 1;
+            cout = NULL;
+            nout = -1;
+            noutmax = -1;
+            std_putc_mode = 1;
+            kanji_convert(fin);
+            fclose(fin);
+            ret = TRUE;
+        }
+        fclose(fout);
+    }
+    return ret;
+}
+
+BOOL WINAPI NkfFileConvert2SafeW(LPCWSTR fInName,DWORD fInBufferLength /*in TCHARs*/,LPCWSTR fOutName,DWORD fOutBufferLength /*in TCHARs*/)
+{
+#ifdef UNICODESUPPORT
+    FILE *fin;
+    BOOL sts;
+    BOOL ret;
+    LPCWSTR p;
+
+    ret = FALSE;
+    p = fInName;
+    for ( ;; ) {
+        if ( fInBufferLength == 0 ) return ret;
+        if ( *p == 0 ) break;
+        p++;
+        --fInBufferLength;
+    }
+    p = fOutName;
+    for ( ;; ) {
+        if ( fOutBufferLength == 0 ) return ret;
+        if ( *p == 0 ) break;
+        p++;
+        --fOutBufferLength;
+    }
+    if ( (fin = _wfopen(fInName,L"rb")) != NULL) {
+        if( (fout = _wfopen(fOutName,L"wb")) != NULL) {
+            cin = NULL;
+            nin = -1;
+            ninmax = -1;
+            std_getc_mode = 1;
+            cout = NULL;
+            nout = -1;
+            noutmax = -1;
+            std_putc_mode = 1;
+            kanji_convert(fin);
+            fclose(fin);
+            ret = TRUE;
+        }
+        fclose(fout);
+    }
+    return ret;
+#else /*UNICODESUPPORT*/
+    return FALSE;
+#endif /*UNICODESUPPORT*/
+}
+
+BOOL WINAPI GetNkfGuessA(LPSTR outStr,DWORD nBufferLength /*in TCHARs*/,LPDWORD lpTCHARsReturned /*in TCHARs*/)
+{
+    if ( outStr == NULL || nBufferLength == 0 ) return FALSE;
+    print_guessed_code(NULL);
+    *lpTCHARsReturned = strlen(guessbuffA) + 1;
+    return scp(outStr,guessbuffA,nBufferLength);
+}
+
+BOOL WINAPI GetNkfGuessW(LPWSTR outStr,DWORD nBufferLength /*in TCHARs*/,LPDWORD lpTCHARsReturned /*in TCHARs*/)
+{
+#ifdef UNICODESUPPORT
+    if ( outStr == NULL || nBufferLength == 0 ) return FALSE;
+    print_guessed_code(NULL);
+    *lpTCHARsReturned = wcslen(guessbuffW) + 1;
+    return wscp(outStr,guessbuffW,nBufferLength);
+#else /*UNICODESUPPORT*/
+    return FALSE;
+#endif /*UNICODESUPPORT*/
+}
+
+static struct NKFSUPPORTFUNCTIONS NkfSupportFunctions = {
+sizeof(struct NKFSUPPORTFUNCTIONS),
+NULL,
+NKF_VERSION,
+NKF_RELEASE_DATE,
+1 /* nkf32103a.lzh uminchu 1.03 */
+/* | 2 */ /* nkf32dll.zip 0.91 */
+#if defined(TOMIME) && defined(GETKANJICODE) && defined(FILECONVERT1) && defined(FILECONVERT2) 
+| 4 /* nkf32204.zip Kaneto 2.0.4.0 */
+#endif
+| 8 /* this */
+#ifdef UNICODESUPPORT
+| 0x80000000
+#endif /*UNICODESUPPORT*/
+,
+};
+
+BOOL WINAPI GetNkfSupportFunctions(void *outStr,DWORD nBufferLength /*in Bytes*/,LPDWORD lpBytesReturned /*in Bytes*/)
+{
+    *lpBytesReturned = sizeof NkfSupportFunctions;
+    if ( outStr == NULL || nBufferLength == 0 ) return FALSE;
+    NkfSupportFunctions.copyrightA = CopyRight;
+    memcpy(outStr,&NkfSupportFunctions,sizeof NkfSupportFunctions > nBufferLength ? nBufferLength : sizeof NkfSupportFunctions);
+    return TRUE;
+}
+
+BOOL WINAPI NkfUsage(LPSTR outStr,DWORD nBufferLength /*in Bytes*/,LPDWORD lpBytesReturned /*in Bytes*/)
+{
+    ubuff = outStr;
+    ulen = nBufferLength;
+    uret = TRUE;
+    usage();
+    if ( uret == TRUE ) {
+        *lpBytesReturned = nBufferLength - ulen;
+    }
+    return uret;
+}
+
+/* nkf32.dll main end */
+
+#ifdef DLLDBG /* DLLDBG @@*/
+/* dbg.exe */
+unsigned char buff[65536];
+unsigned char buff2[65536];
+unsigned char buff3[65536];
+unsigned char buff4[65536];
+char *code[] = {"\83V\83t\83gJIS","EUC","ISO-2022-JP","UTF-8","UTF-16LE","UTF-16BE"};
+
+    int n;
+    BOOL sts;
+    DWORD len;
+
+void mimeencode(unsigned char *buff2)
+{
+    memset(buff,0,sizeof buff);
+    EncodeSubject(buff,buff2);
+    printf("EncodeSubject(%s)=%s\n",buff2,buff);
+        memset(buff,0,sizeof buff);
+        ToMime(buff,buff2);
+        printf("ToMime(%s)=%s\n",buff2,buff);
+        memset(buff,0,sizeof buff);
+        sts = EncodeSubjectSafe(buff,sizeof buff,&len,buff2,strlen(buff2));
+        printf("EncodeSubjectSafe(%s)=%d len=%d '%s'\n",buff,sts,len,buff);
+        dumpn(buff2,strlen(buff2));
+        dumpn(buff,len);
+}
+
+void convert(char *arg,unsigned char *buff2)
+{
+    sts = SetNkfOption(arg);
+    printf("SetNkfOption(%s)=%d\n",arg,sts);
+    memset(buff,0,sizeof buff);
+    NkfConvert(buff,buff2);
+    printf("NkfConvert(%s)=%s\n",buff2,buff);
+    n = NkfGetKanjiCode();
+    printf("NkfGetKanjiCode()=%d\n",n);
+        sts = SetNkfOption(arg);
+        printf("SetNkfOption(%s)=%d\n",arg,sts);
+        memset(buff,0,sizeof buff);
+        sts = NkfConvertSafe(buff,sizeof buff,&len,buff2,strlen(buff2));
+        printf("NkfConvertSafe(%s)=%d len=%d '%s'\n",buff2,sts,len,buff);
+        dumpn(buff2,strlen(buff2));
+        dumpn(buff,len);
+        n = NkfGetKanjiCode();
+        printf("NkfGetKanjiCode()=%d\n",n);
+}
+
+void guess(unsigned char *buff2)
+{
+    char *g = "--guess";
+
+        sts = SetNkfOption(g);
+        printf("SetNkfOption(%s)=%d\n",g,sts);
+        memset(buff,0,sizeof buff);
+        NkfConvert(buff,buff2);
+        printf("NkfConvert(%s)=%s\n",buff2,buff);
+        dumpn(buff2,strlen(buff2));
+        n = NkfGetKanjiCode();
+        printf("NkfGetKanjiCode()=%d %s\n",n,code[n]);
+        memset(buff,0,sizeof buff);
+        sts = GetNkfGuessA(buff,sizeof buff,&len);
+        printf("GetNkfGuessA()=%d len=%d '%s'\n",sts,len,buff);
+        dumpn(buff,len);
+        memset(buff,0,sizeof buff);
+        sts = GetNkfGuessW((LPWSTR)buff,sizeof buff / sizeof(WCHAR),&len);
+        printf("GetNkfGuessW()=%d len=%d\n",sts,len);
+        dumpn(buff,len * sizeof(WCHAR));
+}
+
+void dumpf(char *f)
+{
+    FILE *fp;
+    unsigned int n;
+
+    fp = fopen(f,"rb");
+    if ( fp == NULL ) return;
+    n = fread(buff,1,sizeof buff,fp);
+    fclose(fp);
+    printf("dumpf(%s,%d)\n",f,n);
+    dumpn(buff,n);
+}
+
+void mkfile(char *f,char *p)
+{
+    FILE *fp;
+
+    fp = fopen(f,"w");
+    if ( fp == NULL ) return;
+    fputs(p,fp);
+    fclose(fp);
+    dumpf(f);
+}
+
+void file(char *arg2,char *arg3,unsigned char *buf)
+{
+            sts = SetNkfOption(arg2);
+            printf("SetNkfOption(%s)=%d\n",arg2,sts);
+            mkfile(arg3,buf);
+            NkfFileConvert1(arg3);
+            printf("NkfFileConvert1(%s)\n",arg3);
+            dumpf(arg3);
+            sts = SetNkfOption(arg2);
+            printf("SetNkfOption(%s)=%d\n",arg2,sts);
+            mkfile(arg3,buf);
+            sts = NkfFileConvert1SafeA(arg3,strlen(arg3) + 1);
+            printf("NkfFileConvert1SafeA(%s)=%d\n",arg3,sts);
+            dumpf(arg3);
+            sts = SetNkfOption(arg2);
+            printf("SetNkfOption(%s)=%d\n",arg2,sts);
+            mkfile(arg3,buf);
+            sts = MultiByteToWideChar(CP_OEMCP,MB_PRECOMPOSED,arg3,-1,(wchar_t *)buff,sizeof(buff) / sizeof(wchar_t));
+            printf("MultiByteToWideChar(%s)=%d\n",arg3,sts);
+            dumpn(buff,(wcslen((wchar_t *)buff) + 1) * sizeof(wchar_t));
+            sts = NkfFileConvert1SafeW((wchar_t *)buff,sizeof buff / sizeof(wchar_t) /*wcslen((wchar_t *)buff) + 1*/);
+            printf("NkfFileConvert1SafeW()=%d\n",sts);
+            dumpf(arg3);
+}
+
+void file2(char *arg2,char *arg3,char *arg4,unsigned char *buf)
+{
+            sts = SetNkfOption(arg2);
+            printf("SetNkfOption(%s)=%d\n",arg2,sts);
+            mkfile(arg3,buf);
+            NkfFileConvert2(arg3,arg4);
+            printf("NkfFileConvert1(%s,%s)\n",arg3,arg4);
+            dumpf(arg3);
+            dumpf(arg4);
+            sts = SetNkfOption(arg2);
+            printf("SetNkfOption(%s)=%d\n",arg2,sts);
+            mkfile(arg3,buf);
+            sts = NkfFileConvert2SafeA(arg3,strlen(arg3) + 1,arg4,strlen(arg4) + 1);
+            printf("NkfFileConvert2SafeA(%s,%s)=%d\n",arg3,arg4,sts);
+            dumpf(arg3);
+            dumpf(arg4);
+            sts = SetNkfOption(arg2);
+            printf("SetNkfOption(%s)=%d\n",arg2,sts);
+            mkfile(arg3,buf);
+            sts = MultiByteToWideChar(CP_OEMCP,MB_PRECOMPOSED,arg3,-1,(wchar_t *)buff,sizeof(buff) / sizeof(wchar_t));
+            printf("MultiByteToWideChar(%s)=%d\n",arg3,sts);
+            dumpn(buff,(wcslen((wchar_t *)buff) + 1) * sizeof(wchar_t));
+            sts = MultiByteToWideChar(CP_OEMCP,MB_PRECOMPOSED,arg4,-1,(wchar_t *)buff4,sizeof(buff4) / sizeof(wchar_t));
+            printf("MultiByteToWideChar(%s)=%d\n",arg4,sts);
+            dumpn(buff4,(wcslen((wchar_t *)buff4) + 1) * sizeof(wchar_t));
+            sts = NkfFileConvert2SafeW((wchar_t *)buff,sizeof buff / sizeof(wchar_t) ,(wchar_t *)buff4,sizeof buff4 / sizeof(wchar_t));
+            printf("NkfFileConvert2SafeW()=%d\n",sts);
+            dumpf(arg3);
+            dumpf(arg4);
+}
+
+int main(int argc,char **argv)
+{
+    struct NKFSUPPORTFUNCTIONS fnc;
+
+    if ( argc < 2 ) return 0;
+    switch ( *argv[1] ) {
+      case 'v':
+        memset(buff,0,sizeof buff);
+        GetNkfVersion(buff);
+        printf("GetNkfVersion() '%s'\n",buff);
+            sts = GetNkfVersionSafeA(buff,sizeof buff,&len);
+            printf("GetNkfVersionSafeA()=%d len=%d '%s'\n",sts,len,buff);
+            sts = GetNkfVersionSafeW((LPWSTR)buff,sizeof buff / sizeof(WCHAR),&len);
+            printf("GetNkfVersionSafeW()=%d len=%d\n",sts,len);
+            dumpn(buff,len * sizeof(WCHAR));
+            sts = GetNkfSupportFunctions(&fnc,sizeof fnc,&len);
+            printf("GetNkfSupportFunctions()=%d len=%d\n",sts,len);
+            printf("size=%d\n",fnc.size);
+            printf("copyrightA='%s'\n",fnc.copyrightA);
+            printf("versionA='%s'\n",fnc.versionA);
+            printf("dateA='%s'\n",fnc.dateA);
+            printf("functions=%d %x\n",fnc.functions,fnc.functions);
+        break;
+      case 'm':
+        if ( argc < 3 ) return 0;
+        mimeencode(argv[2]);
+        break;
+      case 'M':
+        if ( argc < 2 ) return 0;
+        gets(buff2);
+        mimeencode(buff2);
+        break;
+      case 'c':
+        if ( argc < 4 ) return 0;
+        convert(argv[2],argv[3]);
+        break;
+      case 'C':
+        if ( argc < 3 ) return 0;
+        gets(buff2);
+        convert(argv[2],buff2);
+        break;
+      case 'g':
+        if ( argc < 3 ) return 0;
+        guess(argv[2]);
+        break;
+      case 'G':
+        if ( argc < 2 ) return 0;
+        gets(buff2);
+        guess(buff2);
+        break;
+      case 'f':
+        if ( argc < 5 ) return 0;
+        file(argv[2],argv[3],argv[4]);
+        break;
+      case 'F':
+        if ( argc < 4 ) return 0;
+        gets(buff3);
+        file(argv[2],argv[3],buff3);
+        break;
+      case '2':
+        if ( argc < 6 ) return 0;
+        file2(argv[2],argv[3],argv[4],argv[5]);
+        break;
+      case '#':
+        if ( argc < 5 ) return 0;
+        gets(buff3);
+        file2(argv[2],argv[3],argv[4],buff3);
+        break;
+      case 'u':
+        sts = NkfUsage(buff,sizeof buff * 0 + 2073,&len);
+        printf("strlen(buff)=%d\n",strlen(buff));
+        printf("NkfUsage()=%d len=%d \n%s",sts,len,buff);
+        break;
+    }
+    return 0;
+}
+/* dbg.exe end */
+#endif /* DLLDBG @@*/
+/*WIN32DLL*/