Blame nkf32dll.c

Packit 5b6b86
/* nkf32.dll nfk32dll.c */
Packit 5b6b86
/* e-mail:tkaneto@nifty.com */
Packit 5b6b86
/* URL: http://www1.ttcn.ne.jp/~kaneto */
Packit 5b6b86
Packit 5b6b86
/*WIN32DLL*/
Packit 5b6b86
/* こちらのバージョンも更新してください。 */
Packit 5b6b86
#define NKF_VERSIONW L"2.1.4"
Packit 5b6b86
/* NKF_VERSION のワイド文字 */
Packit 5b6b86
#define DLL_VERSION   "2.1.4.0 2"
Packit 5b6b86
/* DLLが返す */
Packit 5b6b86
#define DLL_VERSIONW L"2.1.4.0 2"
Packit 5b6b86
/* DLLが返す DLL_VERSION のワイド文字 */
Packit 5b6b86
Packit 5b6b86
/* nkf32.dll main */
Packit 5b6b86
#include <windows.h>
Packit 5b6b86
#include <tchar.h>
Packit 5b6b86
#include <stdarg.h>
Packit 5b6b86
Packit 5b6b86
#ifdef DLLDBG /* DLLDBG @@*/
Packit 5b6b86
#include "nkf.h"
Packit 5b6b86
Packit 5b6b86
void dumpn(unsigned char *buff,unsigned n)
Packit 5b6b86
{
Packit 5b6b86
    int i;
Packit 5b6b86
Packit 5b6b86
    i = 0;
Packit 5b6b86
    while ( n ) {
Packit 5b6b86
        if ( i == 0 ) {
Packit 5b6b86
            printf(":%x  ",buff);
Packit 5b6b86
        }
Packit 5b6b86
        printf("%02x ",*buff++);
Packit 5b6b86
        i++;
Packit 5b6b86
        if ( i == 16 ) {
Packit 5b6b86
            printf("\n");
Packit 5b6b86
            i = 0;
Packit 5b6b86
        }
Packit 5b6b86
        n--;
Packit 5b6b86
    }
Packit 5b6b86
    printf("\n");
Packit 5b6b86
}
Packit 5b6b86
Packit 5b6b86
void dumpf(char *f);
Packit 5b6b86
void mkfile(char *f,char *p);
Packit 5b6b86
#endif /* DLLDBG @@*/
Packit 5b6b86
Packit 5b6b86
#ifndef GUESS
Packit 5b6b86
#define GUESS 64
Packit 5b6b86
#endif /*GUESS*/
Packit 5b6b86
Packit 5b6b86
char *guessbuffA = NULL;
Packit 5b6b86
#ifdef UNICODESUPPORT
Packit 5b6b86
wchar_t *guessbuffW = NULL;
Packit 5b6b86
UINT guessCodePage = CP_OEMCP;
Packit 5b6b86
DWORD guessdwFlags = MB_PRECOMPOSED;
Packit 5b6b86
Packit 5b6b86
wchar_t *tounicode(const char *p)
Packit 5b6b86
{
Packit 5b6b86
static wchar_t buff[GUESS];
Packit 5b6b86
    int sts;
Packit 5b6b86
Packit 5b6b86
    sts = MultiByteToWideChar(guessCodePage,guessdwFlags,p,-1,buff,sizeof(buff) / sizeof(wchar_t));
Packit 5b6b86
    if ( sts ) {
Packit 5b6b86
        return buff;
Packit 5b6b86
    } else {
Packit 5b6b86
        return L"(NULL)";
Packit 5b6b86
    }
Packit 5b6b86
}
Packit 5b6b86
#endif /*UNICODESUPPORT*/
Packit 5b6b86
Packit 5b6b86
char *ubuff;
Packit 5b6b86
int ulen;
Packit 5b6b86
int uret;
Packit 5b6b86
Packit 5b6b86
int dllprintf(FILE *fp,char *fmt,...)
Packit 5b6b86
{
Packit 5b6b86
    va_list argp;
Packit 5b6b86
    int sts;
Packit 5b6b86
Packit 5b6b86
    if ( uret != FALSE && ulen >= 1 && fmt != NULL && *fmt != 0 ) {
Packit 5b6b86
        va_start(argp, fmt);
Packit 5b6b86
        sts = _vsnprintf(ubuff,ulen - 1,fmt,argp);
Packit 5b6b86
        va_end(argp);
Packit 5b6b86
        if ( sts >= 0 ) {
Packit 5b6b86
            ubuff += sts;
Packit 5b6b86
            ulen -= sts;
Packit 5b6b86
        } else {
Packit 5b6b86
            uret = FALSE;
Packit 5b6b86
        }
Packit 5b6b86
        return sts;
Packit 5b6b86
    } else return 0;
Packit 5b6b86
}
Packit 5b6b86
Packit 5b6b86
/** Network Kanji Filter. (PDS Version)
Packit 5b6b86
************************************************************************
Packit 5b6b86
** Copyright (C) 1987, Fujitsu LTD. (Itaru ICHIKAWA)
Packit 5b6b86
** 連絡先: (株)富士通研究所 ソフト3研 市川 至 
Packit 5b6b86
** (E-Mail Address: ichikawa@flab.fujitsu.co.jp)
Packit 5b6b86
** Copyright (C) 1996,1998
Packit 5b6b86
** Copyright (C) 2002
Packit 5b6b86
** 連絡先: 琉球大学情報工学科 河野 真治  mime/X0208 support
Packit 5b6b86
** (E-Mail Address: kono@ie.u-ryukyu.ac.jp)
Packit 5b6b86
** 連絡先: COW for DOS & Win16 & Win32 & OS/2
Packit 5b6b86
** (E-Mail Address: GHG00637@niftyserve.or.p)
Packit 5b6b86
**
Packit 5b6b86
**    このソースのいかなる複写,改変,修正も許諾します。ただし、
Packit 5b6b86
**    その際には、誰が貢献したを示すこの部分を残すこと。
Packit 5b6b86
**    再配布や雑誌の付録などの問い合わせも必要ありません。
Packit 5b6b86
**    営利利用も上記に反しない範囲で許可します。
Packit 5b6b86
**    バイナリの配布の際にはversion messageを保存することを条件とします。
Packit 5b6b86
**    このプログラムについては特に何の保証もしない、悪しからず。
Packit 5b6b86
**
Packit 5b6b86
**    Everyone is permitted to do anything on this program 
Packit 5b6b86
**    including copying, modifying, improving,
Packit 5b6b86
**    as long as you don't try to pretend that you wrote it.
Packit 5b6b86
**    i.e., the above copyright notice has to appear in all copies.  
Packit 5b6b86
**    Binary distribution requires original version messages.
Packit 5b6b86
**    You don't have to ask before copying, redistribution or publishing.
Packit 5b6b86
**    THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE.
Packit 5b6b86
***********************************************************************/
Packit 5b6b86
Packit 5b6b86
static const unsigned char *cin = NULL;
Packit 5b6b86
static int nin = -1;
Packit 5b6b86
static int ninmax = -1;
Packit 5b6b86
static int std_getc_mode = 1;
Packit 5b6b86
Packit 5b6b86
int 
Packit 5b6b86
std_getc(f)
Packit 5b6b86
FILE *f;
Packit 5b6b86
{
Packit 5b6b86
    if (!nkf_buf_empty_p(nkf_state->std_gc_buf)) {
Packit 5b6b86
        return nkf_buf_pop(nkf_state->std_gc_buf);
Packit 5b6b86
    } else {
Packit 5b6b86
        if ( std_getc_mode == 1 ) {
Packit 5b6b86
            return getc(f);
Packit 5b6b86
        }
Packit 5b6b86
        if ( std_getc_mode == 2 && cin != NULL ) {
Packit 5b6b86
            if ( ninmax >= 0 ) {
Packit 5b6b86
                if ( nin >= ninmax ) {
Packit 5b6b86
                    return EOF;
Packit 5b6b86
                } else {
Packit 5b6b86
                    nin++;
Packit 5b6b86
                    return *cin++;
Packit 5b6b86
                }
Packit 5b6b86
            } else {
Packit 5b6b86
                if ( *cin ) {
Packit 5b6b86
                    return *cin++;
Packit 5b6b86
                } else {
Packit 5b6b86
                    return EOF;
Packit 5b6b86
                }
Packit 5b6b86
            }
Packit 5b6b86
        }
Packit 5b6b86
    }
Packit 5b6b86
    return EOF;
Packit 5b6b86
}
Packit 5b6b86
Packit 5b6b86
static FILE *fout = NULL;
Packit 5b6b86
static unsigned char *cout = NULL;
Packit 5b6b86
static int nout = -1;
Packit 5b6b86
static int noutmax = -1;
Packit 5b6b86
static int std_putc_mode = 1;
Packit 5b6b86
Packit 5b6b86
void 
Packit 5b6b86
std_putc(c)
Packit 5b6b86
int c;
Packit 5b6b86
{
Packit 5b6b86
    if(c!=EOF)
Packit 5b6b86
    {
Packit 5b6b86
        if ( (std_putc_mode & 1) && fout != NULL ) {
Packit 5b6b86
            putc(c,fout);
Packit 5b6b86
        }
Packit 5b6b86
        if ( (std_putc_mode & 4) && nout != -1 ) {
Packit 5b6b86
            if ( noutmax >= 0 && nout >= noutmax ) std_putc_mode &= ~2;
Packit 5b6b86
            nout++;
Packit 5b6b86
        }
Packit 5b6b86
        if ( (std_putc_mode & 2) && cout != NULL ) {
Packit 5b6b86
            *cout++ = c;
Packit 5b6b86
        }
Packit 5b6b86
    }
Packit 5b6b86
}
Packit 5b6b86
Packit 5b6b86
void
Packit 5b6b86
print_guessed_code (filename)
Packit 5b6b86
    char *filename;
Packit 5b6b86
{
Packit 5b6b86
    const char *codename = get_guessed_code();
Packit 5b6b86
    if (filename != NULL) {
Packit 5b6b86
        guessbuffA = realloc(guessbuffA,(strlen(filename) + GUESS + 1) * sizeof (char) );
Packit 5b6b86
        sprintf(guessbuffA,"%s:%s", filename,codename);
Packit 5b6b86
    } else {
Packit 5b6b86
        guessbuffA = realloc(guessbuffA,(GUESS + 1) * sizeof (char) );
Packit 5b6b86
        sprintf(guessbuffA,"%s", codename);
Packit 5b6b86
    }
Packit 5b6b86
}
Packit 5b6b86
Packit 5b6b86
#ifdef UNICODESUPPORT
Packit 5b6b86
void
Packit 5b6b86
print_guessed_codeW (filename)
Packit 5b6b86
    wchar_t *filename;
Packit 5b6b86
{
Packit 5b6b86
    const char *codename = get_guessed_code();
Packit 5b6b86
    size_t size;
Packit 5b6b86
    if (filename != NULL) {
Packit 5b6b86
	size = (wcslen(filename) + GUESS + 1) * sizeof (wchar_t);
Packit 5b6b86
	guessbuffW = realloc(guessbuffW, size);
Packit 5b6b86
	_snwprintf(guessbuffW, size, L"%s:%s", filename, tounicode(codename));
Packit 5b6b86
    } else {
Packit 5b6b86
	size = (GUESS + 1) * sizeof (wchar_t);
Packit 5b6b86
	guessbuffW = realloc(guessbuffW, size);
Packit 5b6b86
	_snwprintf(guessbuffW, size, L"%s", tounicode(codename));
Packit 5b6b86
    }
Packit 5b6b86
}
Packit 5b6b86
#endif /*UNICODESUPPORT*/
Packit 5b6b86
Packit 5b6b86
/**
Packit 5b6b86
 ** パッチ制作者
Packit 5b6b86
 **  void@merope.pleiades.or.jp (Kusakabe Youichi)
Packit 5b6b86
 **  NIDE Naoyuki <nide@ics.nara-wu.ac.jp>
Packit 5b6b86
 **  ohta@src.ricoh.co.jp (Junn Ohta)
Packit 5b6b86
 **  inouet@strl.nhk.or.jp (Tomoyuki Inoue)
Packit 5b6b86
 **  kiri@pulser.win.or.jp (Tetsuaki Kiriyama)
Packit 5b6b86
 **  Kimihiko Sato <sato@sail.t.u-tokyo.ac.jp>
Packit 5b6b86
 **  a_kuroe@kuroe.aoba.yokohama.jp (Akihiko Kuroe)
Packit 5b6b86
 **  kono@ie.u-ryukyu.ac.jp (Shinji Kono)
Packit 5b6b86
 **  GHG00637@nifty-serve.or.jp (COW)
Packit 5b6b86
 **
Packit 5b6b86
 **/
Packit 5b6b86
Packit 5b6b86
void
Packit 5b6b86
reinitdll(void)
Packit 5b6b86
{
Packit 5b6b86
    cin = NULL;
Packit 5b6b86
    nin = -1;
Packit 5b6b86
    ninmax = -1;
Packit 5b6b86
    std_getc_mode = 1;
Packit 5b6b86
    fout = stdout;
Packit 5b6b86
    cout = NULL;
Packit 5b6b86
    nout = -1;
Packit 5b6b86
    noutmax = -1;
Packit 5b6b86
    std_putc_mode = 1;
Packit 5b6b86
    if ( guessbuffA ) {
Packit 5b6b86
        free(guessbuffA);
Packit 5b6b86
        guessbuffA = NULL;
Packit 5b6b86
    }
Packit 5b6b86
#ifdef UNICODESUPPORT
Packit 5b6b86
    if ( guessbuffW ) {
Packit 5b6b86
        free(guessbuffW);
Packit 5b6b86
        guessbuffW = NULL;
Packit 5b6b86
    }
Packit 5b6b86
#endif /*UNICODESUPPORT*/
Packit 5b6b86
}
Packit 5b6b86
Packit 5b6b86
#ifndef DLLDBG /* DLLDBG @@*/
Packit 5b6b86
int WINAPI DllEntryPoint(HINSTANCE hinst,unsigned long reason,void* lpReserved)
Packit 5b6b86
{
Packit 5b6b86
        return 1;
Packit 5b6b86
}
Packit 5b6b86
#endif /* DLLDBG @@*/
Packit 5b6b86
Packit 5b6b86
static LPSTR nkfverA = NKF_VERSION;
Packit 5b6b86
static LPSTR dllverA = DLL_VERSION;
Packit 5b6b86
#ifdef UNICODESUPPORT
Packit 5b6b86
static LPWSTR nkfverW = NKF_VERSIONW;
Packit 5b6b86
static LPWSTR dllverW = DLL_VERSIONW;
Packit 5b6b86
#endif /*UNICODESUPPORT*/
Packit 5b6b86
Packit 5b6b86
BOOL scp(LPSTR s,LPSTR t,DWORD n)
Packit 5b6b86
{
Packit 5b6b86
    while ( n ) {
Packit 5b6b86
        if ( (*s = *t) == 0 ) return TRUE;
Packit 5b6b86
        if ( --n == 0 ) {
Packit 5b6b86
            *s = 0;
Packit 5b6b86
            break;
Packit 5b6b86
        }
Packit 5b6b86
        s++;
Packit 5b6b86
        t++;
Packit 5b6b86
    }
Packit 5b6b86
    return FALSE;
Packit 5b6b86
}
Packit 5b6b86
Packit 5b6b86
#ifdef UNICODESUPPORT
Packit 5b6b86
BOOL wscp(LPWSTR s,LPWSTR t,DWORD n)
Packit 5b6b86
{
Packit 5b6b86
    while ( n ) {
Packit 5b6b86
        if ( (*s = *t) == 0 ) return TRUE;
Packit 5b6b86
        if ( --n == 0 ) {
Packit 5b6b86
            *s = 0;
Packit 5b6b86
            break;
Packit 5b6b86
        }
Packit 5b6b86
        s++;
Packit 5b6b86
        t++;
Packit 5b6b86
    }
Packit 5b6b86
    return FALSE;
Packit 5b6b86
}
Packit 5b6b86
#endif /*UNICODESUPPORT*/
Packit 5b6b86
Packit 5b6b86
void CALLBACK GetNkfVersion(LPSTR verStr){
Packit 5b6b86
    strcpy(verStr,dllverA);
Packit 5b6b86
}
Packit 5b6b86
Packit 5b6b86
BOOL WINAPI GetNkfVersionSafeA(LPSTR verStr,DWORD nBufferLength /*in TCHARs*/,LPDWORD lpTCHARsReturned /*in TCHARs*/)
Packit 5b6b86
{
Packit 5b6b86
    *lpTCHARsReturned = strlen(dllverA) + 1;
Packit 5b6b86
    if ( verStr == NULL || nBufferLength == 0 ) return FALSE;
Packit 5b6b86
    return scp(verStr,dllverA,nBufferLength);
Packit 5b6b86
}
Packit 5b6b86
Packit 5b6b86
BOOL WINAPI GetNkfVersionSafeW(LPWSTR verStr,DWORD nBufferLength /*in TCHARs*/,LPDWORD lpTCHARsReturned /*in TCHARs*/)
Packit 5b6b86
{
Packit 5b6b86
#ifdef UNICODESUPPORT
Packit 5b6b86
    *lpTCHARsReturned = wcslen(dllverW) + 1;
Packit 5b6b86
    if ( verStr == NULL || nBufferLength == 0 ) return FALSE;
Packit 5b6b86
    wcsncpy(verStr,dllverW,nBufferLength);
Packit 5b6b86
    if ( wcslen(dllverW) >= nBufferLength )  {
Packit 5b6b86
        *(verStr + nBufferLength - 1) = 0;
Packit 5b6b86
        return FALSE;
Packit 5b6b86
    }
Packit 5b6b86
    return TRUE;
Packit 5b6b86
#else /*UNICODESUPPORT*/
Packit 5b6b86
    return FALSE;
Packit 5b6b86
#endif /*UNICODESUPPORT*/
Packit 5b6b86
}
Packit 5b6b86
Packit 5b6b86
static LPSTR optStr0 = NULL;
Packit 5b6b86
Packit 5b6b86
int CALLBACK SetNkfOption(LPSTR optStr)
Packit 5b6b86
{
Packit 5b6b86
    LPSTR p;
Packit 5b6b86
    int len;
Packit 5b6b86
Packit 5b6b86
    if ( *optStr == '-' ) {
Packit 5b6b86
        len = strlen(optStr) + 1;
Packit 5b6b86
        p = realloc(optStr0,len);
Packit 5b6b86
        strcpy(p,optStr);
Packit 5b6b86
    } else {
Packit 5b6b86
        len = strlen(optStr) + 2;
Packit 5b6b86
        p = realloc(optStr0,len);
Packit 5b6b86
        *p = '-';
Packit 5b6b86
        strcpy(p + 1,optStr);
Packit 5b6b86
    }
Packit 5b6b86
    optStr0 = p;
Packit 5b6b86
    return 0;
Packit 5b6b86
}
Packit 5b6b86
Packit 5b6b86
int findspace(const char* str)
Packit 5b6b86
{
Packit 5b6b86
	int find_n = 0;
Packit 5b6b86
	while (*str != 0) {
Packit 5b6b86
		if (*str == ' ') {
Packit 5b6b86
			find_n++;
Packit 5b6b86
		}
Packit 5b6b86
		str++;
Packit 5b6b86
	}
Packit 5b6b86
	return find_n;
Packit 5b6b86
}
Packit 5b6b86
// オプションが 空白で区切られている場合に options を複数呼び出す
Packit 5b6b86
void callOptions()
Packit 5b6b86
{
Packit 5b6b86
	char *work = strdup(optStr0);
Packit 5b6b86
	int len = strlen(optStr0);
Packit 5b6b86
	for (int i = 0; i < len; i++) {
Packit 5b6b86
		if (work[i] == ' ') {
Packit 5b6b86
			work[i] = '\0';
Packit 5b6b86
		}
Packit 5b6b86
	}
Packit 5b6b86
	int i = 0;
Packit 5b6b86
	while (i < len)
Packit 5b6b86
	{
Packit 5b6b86
		// 文字を探す
Packit 5b6b86
		if (work[i] != '\0') {
Packit 5b6b86
			// options 呼び出し
Packit 5b6b86
			options(&work[i]);
Packit 5b6b86
Packit 5b6b86
			// 文字の終端を探す
Packit 5b6b86
			while (work[i] != '\0' && i < len) {
Packit 5b6b86
				i++;
Packit 5b6b86
			}
Packit 5b6b86
		}
Packit 5b6b86
		else {
Packit 5b6b86
			i++;
Packit 5b6b86
		}
Packit 5b6b86
	}
Packit 5b6b86
	free(work);
Packit 5b6b86
}
Packit 5b6b86
Packit 5b6b86
void options0(void)
Packit 5b6b86
{
Packit 5b6b86
    reinit();
Packit 5b6b86
    if ( optStr0 != NULL ) {
Packit 5b6b86
		// option の中に 空白があった場合 options を分割して呼び出す
Packit 5b6b86
		if (findspace(optStr0) > 0) {
Packit 5b6b86
			callOptions();
Packit 5b6b86
		}
Packit 5b6b86
		else {
Packit 5b6b86
			options(optStr0);
Packit 5b6b86
		}
Packit 5b6b86
    }
Packit 5b6b86
}
Packit 5b6b86
Packit 5b6b86
void CALLBACK NkfConvert(LPSTR outStr, LPCSTR inStr)
Packit 5b6b86
{
Packit 5b6b86
    options0();
Packit 5b6b86
    std_putc_mode = 2;
Packit 5b6b86
    cout = outStr;
Packit 5b6b86
    noutmax = -1;
Packit 5b6b86
    nout = -1;
Packit 5b6b86
    std_getc_mode = 2;
Packit 5b6b86
    cin = inStr;
Packit 5b6b86
    ninmax = -1;
Packit 5b6b86
    nin = -1;
Packit 5b6b86
    kanji_convert(NULL);
Packit 5b6b86
    *cout = 0;
Packit 5b6b86
}
Packit 5b6b86
Packit 5b6b86
BOOL WINAPI NkfConvertSafe(LPSTR outStr,DWORD nOutBufferLength /*in Bytes*/,LPDWORD lpBytesReturned /*in Bytes*/, LPCSTR inStr,DWORD nInBufferLength /*in Bytes*/){
Packit 5b6b86
    if ( inStr == NULL ) return FALSE;
Packit 5b6b86
    options0();
Packit 5b6b86
    std_putc_mode = 6;
Packit 5b6b86
    cout = outStr;
Packit 5b6b86
    noutmax = nOutBufferLength;
Packit 5b6b86
    nout = 0;
Packit 5b6b86
    std_getc_mode = 2;
Packit 5b6b86
    cin = inStr;
Packit 5b6b86
    ninmax = nInBufferLength;
Packit 5b6b86
    nin = 0;
Packit 5b6b86
    kanji_convert(NULL);
Packit 5b6b86
    *lpBytesReturned = nout;
Packit 5b6b86
    if ( nout < noutmax ) *cout = 0;
Packit 5b6b86
    return TRUE;
Packit 5b6b86
}
Packit 5b6b86
Packit 5b6b86
void CALLBACK ToHankaku(LPSTR inStr)
Packit 5b6b86
{
Packit 5b6b86
    unsigned char *p;
Packit 5b6b86
    int len;
Packit 5b6b86
Packit 5b6b86
    len = strlen(inStr) + 1;
Packit 5b6b86
    p = malloc(len);
Packit 5b6b86
    if ( p == NULL ) return;
Packit 5b6b86
    memcpy(p,inStr,len);
Packit 5b6b86
    options("-ZSs");
Packit 5b6b86
    NkfConvert(inStr,p);
Packit 5b6b86
    free(p);
Packit 5b6b86
}
Packit 5b6b86
Packit 5b6b86
BOOL WINAPI ToHankakuSafe(LPSTR outStr,DWORD nOutBufferLength /*in Bytes*/,LPDWORD lpBytesReturned /*in Bytes*/,LPCSTR inStr,DWORD nInBufferLength /*in Bytes*/)
Packit 5b6b86
{
Packit 5b6b86
    options("-ZSs");
Packit 5b6b86
    return NkfConvertSafe(outStr,nOutBufferLength,lpBytesReturned,inStr,nInBufferLength);
Packit 5b6b86
}
Packit 5b6b86
Packit 5b6b86
void CALLBACK ToZenkakuKana(LPSTR outStr, LPCSTR inStr)
Packit 5b6b86
{
Packit 5b6b86
    options("-Ss");
Packit 5b6b86
    NkfConvert(outStr, inStr);
Packit 5b6b86
}
Packit 5b6b86
Packit 5b6b86
BOOL WINAPI ToZenkakuKanaSafe(LPSTR outStr,DWORD nOutBufferLength /*in Bytes*/,LPDWORD lpBytesReturned /*in Bytes*/,LPCSTR inStr,DWORD nInBufferLength /*in Bytes*/)
Packit 5b6b86
{
Packit 5b6b86
    options("-Ss");
Packit 5b6b86
    return NkfConvertSafe(outStr,nOutBufferLength,lpBytesReturned,inStr,nInBufferLength);
Packit 5b6b86
}
Packit 5b6b86
Packit 5b6b86
void CALLBACK EncodeSubject(LPSTR outStr ,LPCSTR inStr){
Packit 5b6b86
    options("-jM");
Packit 5b6b86
    NkfConvert(outStr, inStr);
Packit 5b6b86
}
Packit 5b6b86
Packit 5b6b86
BOOL WINAPI EncodeSubjectSafe(LPSTR outStr,DWORD nOutBufferLength /*in Bytes*/,LPDWORD lpBytesReturned /*in Bytes*/,LPCSTR inStr,DWORD nInBufferLength /*in Bytes*/)
Packit 5b6b86
{
Packit 5b6b86
    options("-jM");
Packit 5b6b86
    return NkfConvertSafe(outStr,nOutBufferLength,lpBytesReturned,inStr,nInBufferLength);
Packit 5b6b86
}
Packit 5b6b86
Packit 5b6b86
#ifdef TOMIME
Packit 5b6b86
void CALLBACK ToMime(LPSTR outStr ,LPCSTR inStr)
Packit 5b6b86
{
Packit 5b6b86
    EncodeSubject(outStr,inStr);
Packit 5b6b86
}
Packit 5b6b86
#endif /*TOMIME*/
Packit 5b6b86
Packit 5b6b86
#ifdef GETKANJICODE
Packit 5b6b86
int CALLBACK NkfGetKanjiCode(VOID)
Packit 5b6b86
{
Packit 5b6b86
    int iCode=0;
Packit 5b6b86
    /* if(iconv == s_iconv)iCode=0; */ /* 0:シフトJIS */
Packit 5b6b86
    if(iconv == w_iconv)iCode=3; /* UTF-8 */
Packit 5b6b86
    else if(iconv == w_iconv16){
Packit 5b6b86
        if(input_endian == ENDIAN_BIG)iCode=5; /* 5:UTF-16BE */
Packit 5b6b86
        else iCode=4; /* 4:UTF-16LE */
Packit 5b6b86
    }else if(iconv == e_iconv){
Packit 5b6b86
        if(estab_f == FALSE)iCode=2; /* 2:ISO-2022-JP */
Packit 5b6b86
        else iCode=1; /* 1:EUC */
Packit 5b6b86
    }
Packit 5b6b86
    return iCode;
Packit 5b6b86
}
Packit 5b6b86
#endif /*GETKANJICODE*/
Packit 5b6b86
Packit 5b6b86
#ifdef FILECONVERT1
Packit 5b6b86
void CALLBACK NkfFileConvert1(LPCSTR fName)
Packit 5b6b86
{
Packit 5b6b86
    FILE *fin;
Packit 5b6b86
    char *tempdname;
Packit 5b6b86
    char tempfname[MAX_PATH];
Packit 5b6b86
    char d[4];
Packit 5b6b86
    DWORD len;
Packit 5b6b86
    BOOL sts;
Packit 5b6b86
Packit 5b6b86
    options0();
Packit 5b6b86
    len = GetTempPath(sizeof d,d);
Packit 5b6b86
    tempdname = malloc(len + 1);
Packit 5b6b86
    if ( tempdname == NULL ) return;
Packit 5b6b86
    len = GetTempPath(len + 1,tempdname);
Packit 5b6b86
    sts = GetTempFileName(tempdname,"NKF",0,tempfname);
Packit 5b6b86
    if ( sts != 0 )  {
Packit 5b6b86
        sts = CopyFileA(fName,tempfname,FALSE);
Packit 5b6b86
         if ( sts ) {
Packit 5b6b86
             if ((fin = fopen(tempfname, "rb")) != NULL) {
Packit 5b6b86
                 if ((fout = fopen(fName, "wb")) != NULL) {
Packit 5b6b86
                     cin = NULL;
Packit 5b6b86
                     nin = -1;
Packit 5b6b86
                     ninmax = -1;
Packit 5b6b86
                     std_getc_mode = 1;
Packit 5b6b86
                     cout = NULL;
Packit 5b6b86
                     nout = -1;
Packit 5b6b86
                     noutmax = -1;
Packit 5b6b86
                     std_putc_mode = 1;
Packit 5b6b86
                     kanji_convert(fin);
Packit 5b6b86
                     fclose(fin);
Packit 5b6b86
                 }
Packit 5b6b86
                 fclose(fout);
Packit 5b6b86
             }
Packit 5b6b86
        DeleteFile(tempfname);
Packit 5b6b86
        }
Packit 5b6b86
    }
Packit 5b6b86
    free(tempdname);
Packit 5b6b86
}
Packit 5b6b86
#endif /*FILECONVERT1*/
Packit 5b6b86
Packit 5b6b86
BOOL WINAPI NkfFileConvert1SafeA(LPCSTR fName,DWORD nBufferLength /*in TCHARs*/)
Packit 5b6b86
{
Packit 5b6b86
    FILE *fin;
Packit 5b6b86
    char *tempdname;
Packit 5b6b86
    char tempfname[MAX_PATH];
Packit 5b6b86
    char d[4];
Packit 5b6b86
    DWORD len;
Packit 5b6b86
    BOOL sts;
Packit 5b6b86
    BOOL ret;
Packit 5b6b86
    LPCSTR p;
Packit 5b6b86
Packit 5b6b86
    options0();
Packit 5b6b86
    ret = FALSE;
Packit 5b6b86
    p = fName;
Packit 5b6b86
    for ( ;; ) {
Packit 5b6b86
        if ( nBufferLength == 0 ) return ret;
Packit 5b6b86
        if ( *p == 0 ) break;
Packit 5b6b86
        p++;
Packit 5b6b86
        --nBufferLength;
Packit 5b6b86
    }
Packit 5b6b86
    if ( chmod(fName,_S_IREAD | _S_IWRITE) == -1 ) return ret;
Packit 5b6b86
    len = GetTempPath(sizeof d,d);
Packit 5b6b86
    tempdname = malloc(len + 1);
Packit 5b6b86
    if ( tempdname == NULL ) return FALSE;
Packit 5b6b86
    len = GetTempPath(len + 1,tempdname);
Packit 5b6b86
    sts = GetTempFileName(tempdname,"NKF",0,tempfname);
Packit 5b6b86
    if ( sts != 0 )  {
Packit 5b6b86
        sts = CopyFileA(fName,tempfname,FALSE);
Packit 5b6b86
        if ( sts ) {
Packit 5b6b86
            if ((fin = fopen(tempfname, "rb")) != NULL) {
Packit 5b6b86
                if ((fout = fopen(fName, "wb")) != NULL) {
Packit 5b6b86
                    cin = NULL;
Packit 5b6b86
                    nin = -1;
Packit 5b6b86
                    ninmax = -1;
Packit 5b6b86
                    std_getc_mode = 1;
Packit 5b6b86
                    cout = NULL;
Packit 5b6b86
                    nout = -1;
Packit 5b6b86
                    noutmax = -1;
Packit 5b6b86
                    std_putc_mode = 1;
Packit 5b6b86
                    kanji_convert(fin);
Packit 5b6b86
                    fclose(fin);
Packit 5b6b86
                    ret = TRUE;
Packit 5b6b86
                }
Packit 5b6b86
                fclose(fout);
Packit 5b6b86
            }
Packit 5b6b86
            DeleteFileA(tempfname);
Packit 5b6b86
        }
Packit 5b6b86
    }
Packit 5b6b86
    free(tempdname);
Packit 5b6b86
    return ret;
Packit 5b6b86
}
Packit 5b6b86
Packit 5b6b86
BOOL WINAPI NkfFileConvert1SafeW(LPCWSTR fName,DWORD nBufferLength /*in TCHARs*/)
Packit 5b6b86
{
Packit 5b6b86
#ifdef UNICODESUPPORT
Packit 5b6b86
    FILE *fin;
Packit 5b6b86
    wchar_t *tempdname;
Packit 5b6b86
    wchar_t tempfname[MAX_PATH];
Packit 5b6b86
    wchar_t d[2];
Packit 5b6b86
    DWORD len;
Packit 5b6b86
    BOOL sts;
Packit 5b6b86
    BOOL ret;
Packit 5b6b86
    LPCWSTR p;
Packit 5b6b86
Packit 5b6b86
    options0();
Packit 5b6b86
    ret = FALSE;
Packit 5b6b86
    p = fName;
Packit 5b6b86
    for ( ;; ) {
Packit 5b6b86
        if ( nBufferLength == 0 ) return ret;
Packit 5b6b86
        if ( *p == 0 ) break;
Packit 5b6b86
        p++;
Packit 5b6b86
        --nBufferLength;
Packit 5b6b86
    }
Packit 5b6b86
    if ( _wchmod(fName,_S_IREAD | _S_IWRITE) == -1 ) return ret;
Packit 5b6b86
    len = GetTempPathW(sizeof d / sizeof(WCHAR),d);
Packit 5b6b86
    tempdname = malloc((len + 1) * sizeof(WCHAR));
Packit 5b6b86
    if ( tempdname == NULL ) return FALSE;
Packit 5b6b86
    len = GetTempPathW(len + 1,tempdname);
Packit 5b6b86
    sts = GetTempFileNameW(tempdname,L"NKF",0,tempfname);
Packit 5b6b86
    if ( sts != 0 )  {
Packit 5b6b86
        sts = CopyFileW(fName,tempfname,FALSE);
Packit 5b6b86
        if ( sts ) {
Packit 5b6b86
            if ((fin = _wfopen(tempfname,L"rb")) != NULL) {
Packit 5b6b86
                if ((fout = _wfopen(fName,L"wb")) != NULL) {
Packit 5b6b86
                    cin = NULL;
Packit 5b6b86
                    nin = -1;
Packit 5b6b86
                    ninmax = -1;
Packit 5b6b86
                    std_getc_mode = 1;
Packit 5b6b86
                    cout = NULL;
Packit 5b6b86
                    nout = -1;
Packit 5b6b86
                    noutmax = -1;
Packit 5b6b86
                    std_putc_mode = 1;
Packit 5b6b86
                    kanji_convert(fin);
Packit 5b6b86
                    fclose(fin);
Packit 5b6b86
                    ret = TRUE;
Packit 5b6b86
                }
Packit 5b6b86
                fclose(fout);
Packit 5b6b86
            }
Packit 5b6b86
            DeleteFileW(tempfname);
Packit 5b6b86
        }
Packit 5b6b86
    }
Packit 5b6b86
    free(tempdname);
Packit 5b6b86
    return ret;
Packit 5b6b86
#else /*UNICODESUPPORT*/
Packit 5b6b86
    return FALSE;
Packit 5b6b86
#endif /*UNICODESUPPORT*/
Packit 5b6b86
}
Packit 5b6b86
Packit 5b6b86
#ifdef FILECONVERT2
Packit 5b6b86
void CALLBACK NkfFileConvert2(LPCSTR fInName,LPCSTR fOutName)
Packit 5b6b86
{
Packit 5b6b86
    FILE *fin;
Packit 5b6b86
Packit 5b6b86
    options0();
Packit 5b6b86
    if ((fin = fopen(fInName, "rb")) == NULL) return;
Packit 5b6b86
    if((fout=fopen(fOutName, "wb")) == NULL) {
Packit 5b6b86
        fclose(fin);
Packit 5b6b86
        return;
Packit 5b6b86
    }
Packit 5b6b86
    cin = NULL;
Packit 5b6b86
    nin = -1;
Packit 5b6b86
    ninmax = -1;
Packit 5b6b86
    std_getc_mode = 1;
Packit 5b6b86
    cout = NULL;
Packit 5b6b86
    nout = -1;
Packit 5b6b86
    noutmax = -1;
Packit 5b6b86
    std_putc_mode = 1;
Packit 5b6b86
    kanji_convert(fin);
Packit 5b6b86
    fclose(fin);
Packit 5b6b86
    fclose(fout);
Packit 5b6b86
}
Packit 5b6b86
#endif /*FILECONVERT2*/
Packit 5b6b86
Packit 5b6b86
BOOL WINAPI NkfFileConvert2SafeA(LPCSTR fInName,DWORD fInBufferLength /*in TCHARs*/,LPCSTR fOutName,DWORD fOutBufferLength /*in TCHARs*/)
Packit 5b6b86
{
Packit 5b6b86
    FILE *fin;
Packit 5b6b86
    BOOL sts;
Packit 5b6b86
    BOOL ret;
Packit 5b6b86
    LPCSTR p;
Packit 5b6b86
Packit 5b6b86
    options0();
Packit 5b6b86
    ret = FALSE;
Packit 5b6b86
    p = fInName;
Packit 5b6b86
    for ( ;; ) {
Packit 5b6b86
        if ( fInBufferLength == 0 ) return ret;
Packit 5b6b86
        if ( *p == 0 ) break;
Packit 5b6b86
        p++;
Packit 5b6b86
        --fInBufferLength;
Packit 5b6b86
    }
Packit 5b6b86
    p = fOutName;
Packit 5b6b86
    for ( ;; ) {
Packit 5b6b86
        if ( fOutBufferLength == 0 ) return ret;
Packit 5b6b86
        if ( *p == 0 ) break;
Packit 5b6b86
        p++;
Packit 5b6b86
        --fOutBufferLength;
Packit 5b6b86
    }
Packit 5b6b86
    if ((fin = fopen(fInName, "rb")) != NULL) {
Packit 5b6b86
        if((fout=fopen(fOutName, "wb")) != NULL) {
Packit 5b6b86
            cin = NULL;
Packit 5b6b86
            nin = -1;
Packit 5b6b86
            ninmax = -1;
Packit 5b6b86
            std_getc_mode = 1;
Packit 5b6b86
            cout = NULL;
Packit 5b6b86
            nout = -1;
Packit 5b6b86
            noutmax = -1;
Packit 5b6b86
            std_putc_mode = 1;
Packit 5b6b86
            kanji_convert(fin);
Packit 5b6b86
            fclose(fin);
Packit 5b6b86
            ret = TRUE;
Packit 5b6b86
        }
Packit 5b6b86
        fclose(fout);
Packit 5b6b86
    }
Packit 5b6b86
    return ret;
Packit 5b6b86
}
Packit 5b6b86
Packit 5b6b86
BOOL WINAPI NkfFileConvert2SafeW(LPCWSTR fInName,DWORD fInBufferLength /*in TCHARs*/,LPCWSTR fOutName,DWORD fOutBufferLength /*in TCHARs*/)
Packit 5b6b86
{
Packit 5b6b86
#ifdef UNICODESUPPORT
Packit 5b6b86
    FILE *fin;
Packit 5b6b86
    BOOL sts;
Packit 5b6b86
    BOOL ret;
Packit 5b6b86
    LPCWSTR p;
Packit 5b6b86
Packit 5b6b86
    options0();
Packit 5b6b86
    ret = FALSE;
Packit 5b6b86
    p = fInName;
Packit 5b6b86
    for ( ;; ) {
Packit 5b6b86
        if ( fInBufferLength == 0 ) return ret;
Packit 5b6b86
        if ( *p == 0 ) break;
Packit 5b6b86
        p++;
Packit 5b6b86
        --fInBufferLength;
Packit 5b6b86
    }
Packit 5b6b86
    p = fOutName;
Packit 5b6b86
    for ( ;; ) {
Packit 5b6b86
        if ( fOutBufferLength == 0 ) return ret;
Packit 5b6b86
        if ( *p == 0 ) break;
Packit 5b6b86
        p++;
Packit 5b6b86
        --fOutBufferLength;
Packit 5b6b86
    }
Packit 5b6b86
    if ( (fin = _wfopen(fInName,L"rb")) != NULL) {
Packit 5b6b86
        if( (fout = _wfopen(fOutName,L"wb")) != NULL) {
Packit 5b6b86
            cin = NULL;
Packit 5b6b86
            nin = -1;
Packit 5b6b86
            ninmax = -1;
Packit 5b6b86
            std_getc_mode = 1;
Packit 5b6b86
            cout = NULL;
Packit 5b6b86
            nout = -1;
Packit 5b6b86
            noutmax = -1;
Packit 5b6b86
            std_putc_mode = 1;
Packit 5b6b86
            kanji_convert(fin);
Packit 5b6b86
            fclose(fin);
Packit 5b6b86
            ret = TRUE;
Packit 5b6b86
        }
Packit 5b6b86
        fclose(fout);
Packit 5b6b86
    }
Packit 5b6b86
    return ret;
Packit 5b6b86
#else /*UNICODESUPPORT*/
Packit 5b6b86
    return FALSE;
Packit 5b6b86
#endif /*UNICODESUPPORT*/
Packit 5b6b86
}
Packit 5b6b86
Packit 5b6b86
BOOL WINAPI GetNkfGuessA(LPSTR outStr,DWORD nBufferLength /*in TCHARs*/,LPDWORD lpTCHARsReturned /*in TCHARs*/)
Packit 5b6b86
{
Packit 5b6b86
    if ( outStr == NULL || nBufferLength == 0 ) return FALSE;
Packit 5b6b86
    print_guessed_code(NULL);
Packit 5b6b86
    *lpTCHARsReturned = strlen(guessbuffA) + 1;
Packit 5b6b86
    return scp(outStr,guessbuffA,nBufferLength);
Packit 5b6b86
}
Packit 5b6b86
Packit 5b6b86
BOOL WINAPI GetNkfGuessW(LPWSTR outStr,DWORD nBufferLength /*in TCHARs*/,LPDWORD lpTCHARsReturned /*in TCHARs*/)
Packit 5b6b86
{
Packit 5b6b86
#ifdef UNICODESUPPORT
Packit 5b6b86
    if ( outStr == NULL || nBufferLength == 0 ) return FALSE;
Packit 5b6b86
    print_guessed_codeW(NULL);
Packit 5b6b86
    *lpTCHARsReturned = wcslen(guessbuffW) + 1;
Packit 5b6b86
    return wscp(outStr,guessbuffW,nBufferLength);
Packit 5b6b86
#else /*UNICODESUPPORT*/
Packit 5b6b86
    return FALSE;
Packit 5b6b86
#endif /*UNICODESUPPORT*/
Packit 5b6b86
}
Packit 5b6b86
Packit 5b6b86
static struct {
Packit 5b6b86
DWORD size;
Packit 5b6b86
LPCSTR copyrightA;
Packit 5b6b86
LPCSTR versionA;
Packit 5b6b86
LPCSTR dateA;
Packit 5b6b86
DWORD functions;
Packit 5b6b86
} NkfSupportFunctions = {
Packit 5b6b86
sizeof(NkfSupportFunctions),
Packit 5b6b86
NULL,
Packit 5b6b86
NKF_VERSION,
Packit 5b6b86
NKF_RELEASE_DATE,
Packit 5b6b86
1 /* nkf32103a.lzh uminchu 1.03 */
Packit 5b6b86
/* | 2 */ /* nkf32dll.zip 0.91 */
Packit 5b6b86
#if defined(TOMIME) && defined(GETKANJICODE) && defined(FILECONVERT1) && defined(FILECONVERT2) 
Packit 5b6b86
| 4 /* nkf32204.zip Kaneto 2.0.4.0 */
Packit 5b6b86
#endif
Packit 5b6b86
| 8 /* this */
Packit 5b6b86
#ifdef UNICODESUPPORT
Packit 5b6b86
| 0x80000000
Packit 5b6b86
#endif /*UNICODESUPPORT*/
Packit 5b6b86
,
Packit 5b6b86
};
Packit 5b6b86
Packit 5b6b86
BOOL WINAPI GetNkfSupportFunctions(void *outStr,DWORD nBufferLength /*in Bytes*/,LPDWORD lpBytesReturned /*in Bytes*/)
Packit 5b6b86
{
Packit 5b6b86
    *lpBytesReturned = sizeof NkfSupportFunctions;
Packit 5b6b86
    if ( outStr == NULL || nBufferLength == 0 ) return FALSE;
Packit 5b6b86
    NkfSupportFunctions.copyrightA = COPY_RIGHT;
Packit 5b6b86
    memcpy(outStr,&NkfSupportFunctions,sizeof NkfSupportFunctions > nBufferLength ? nBufferLength : sizeof NkfSupportFunctions);
Packit 5b6b86
    return TRUE;
Packit 5b6b86
}
Packit 5b6b86
Packit 5b6b86
BOOL WINAPI NkfUsage(LPSTR outStr,DWORD nBufferLength /*in Bytes*/,LPDWORD lpBytesReturned /*in Bytes*/)
Packit 5b6b86
{
Packit 5b6b86
    ubuff = outStr;
Packit 5b6b86
    ulen = nBufferLength;
Packit 5b6b86
    uret = TRUE;
Packit 5b6b86
    usage();
Packit 5b6b86
    if ( uret == TRUE ) {
Packit 5b6b86
        *lpBytesReturned = nBufferLength - ulen;
Packit 5b6b86
    }
Packit 5b6b86
    return uret;
Packit 5b6b86
}
Packit 5b6b86
Packit 5b6b86
/* nkf32.dll main end */
Packit 5b6b86
Packit 5b6b86
#ifdef DLLDBG /* DLLDBG @@*/
Packit 5b6b86
/* dbg.exe */
Packit 5b6b86
unsigned char buff[65536];
Packit 5b6b86
unsigned char buff2[65536];
Packit 5b6b86
unsigned char buff3[65536];
Packit 5b6b86
unsigned char buff4[65536];
Packit 5b6b86
char *code[] = {"シフトJIS","EUC","ISO-2022-JP","UTF-8","UTF-16LE","UTF-16BE"};
Packit 5b6b86
Packit 5b6b86
    int n;
Packit 5b6b86
    BOOL sts;
Packit 5b6b86
    DWORD len;
Packit 5b6b86
Packit 5b6b86
void mimeencode(unsigned char *buff2)
Packit 5b6b86
{
Packit 5b6b86
    memset(buff,0,sizeof buff);
Packit 5b6b86
    EncodeSubject(buff,buff2);
Packit 5b6b86
    printf("EncodeSubject(%s)=%s\n",buff2,buff);
Packit 5b6b86
        memset(buff,0,sizeof buff);
Packit 5b6b86
        ToMime(buff,buff2);
Packit 5b6b86
        printf("ToMime(%s)=%s\n",buff2,buff);
Packit 5b6b86
        memset(buff,0,sizeof buff);
Packit 5b6b86
        sts = EncodeSubjectSafe(buff,sizeof buff,&len,buff2,strlen(buff2));
Packit 5b6b86
        printf("EncodeSubjectSafe(%s)=%d len=%d '%s'\n",buff,sts,len,buff);
Packit 5b6b86
        dumpn(buff2,strlen(buff2));
Packit 5b6b86
        dumpn(buff,len);
Packit 5b6b86
}
Packit 5b6b86
Packit 5b6b86
void convert(char *arg,unsigned char *buff2)
Packit 5b6b86
{
Packit 5b6b86
    sts = SetNkfOption(arg);
Packit 5b6b86
    printf("SetNkfOption(%s)=%d\n",arg,sts);
Packit 5b6b86
    memset(buff,0,sizeof buff);
Packit 5b6b86
    NkfConvert(buff,buff2);
Packit 5b6b86
    printf("NkfConvert(%s)=%s\n",buff2,buff);
Packit 5b6b86
    n = NkfGetKanjiCode();
Packit 5b6b86
    printf("NkfGetKanjiCode()=%d\n",n);
Packit 5b6b86
        sts = SetNkfOption(arg);
Packit 5b6b86
        printf("SetNkfOption(%s)=%d\n",arg,sts);
Packit 5b6b86
        memset(buff,0,sizeof buff);
Packit 5b6b86
        sts = NkfConvertSafe(buff,sizeof buff,&len,buff2,strlen(buff2));
Packit 5b6b86
        printf("NkfConvertSafe(%s)=%d len=%d '%s'\n",buff2,sts,len,buff);
Packit 5b6b86
        dumpn(buff2,strlen(buff2));
Packit 5b6b86
        dumpn(buff,len);
Packit 5b6b86
        n = NkfGetKanjiCode();
Packit 5b6b86
        printf("NkfGetKanjiCode()=%d\n",n);
Packit 5b6b86
}
Packit 5b6b86
Packit 5b6b86
void guess(unsigned char *buff2)
Packit 5b6b86
{
Packit 5b6b86
    char *g = "--guess";
Packit 5b6b86
Packit 5b6b86
        sts = SetNkfOption(g);
Packit 5b6b86
        printf("SetNkfOption(%s)=%d\n",g,sts);
Packit 5b6b86
        memset(buff,0,sizeof buff);
Packit 5b6b86
        NkfConvert(buff,buff2);
Packit 5b6b86
        printf("NkfConvert(%s)=%s\n",buff2,buff);
Packit 5b6b86
        dumpn(buff2,strlen(buff2));
Packit 5b6b86
        n = NkfGetKanjiCode();
Packit 5b6b86
        printf("NkfGetKanjiCode()=%d %s\n",n,code[n]);
Packit 5b6b86
        memset(buff,0,sizeof buff);
Packit 5b6b86
        sts = GetNkfGuessA(buff,sizeof buff,&len;;
Packit 5b6b86
        printf("GetNkfGuessA()=%d len=%d '%s'\n",sts,len,buff);
Packit 5b6b86
        dumpn(buff,len);
Packit 5b6b86
        memset(buff,0,sizeof buff);
Packit 5b6b86
        sts = GetNkfGuessW((LPWSTR)buff,sizeof buff / sizeof(WCHAR),&len;;
Packit 5b6b86
        printf("GetNkfGuessW()=%d len=%d\n",sts,len);
Packit 5b6b86
        dumpn(buff,len * sizeof(WCHAR));
Packit 5b6b86
}
Packit 5b6b86
Packit 5b6b86
void dumpf(char *f)
Packit 5b6b86
{
Packit 5b6b86
    FILE *fp;
Packit 5b6b86
    unsigned int n;
Packit 5b6b86
Packit 5b6b86
    fp = fopen(f,"rb");
Packit 5b6b86
    if ( fp == NULL ) return;
Packit 5b6b86
    n = fread(buff,1,sizeof buff,fp);
Packit 5b6b86
    fclose(fp);
Packit 5b6b86
    printf("dumpf(%s,%d)\n",f,n);
Packit 5b6b86
    dumpn(buff,n);
Packit 5b6b86
}
Packit 5b6b86
Packit 5b6b86
void mkfile(char *f,char *p)
Packit 5b6b86
{
Packit 5b6b86
    FILE *fp;
Packit 5b6b86
Packit 5b6b86
    fp = fopen(f,"w");
Packit 5b6b86
    if ( fp == NULL ) return;
Packit 5b6b86
    fputs(p,fp);
Packit 5b6b86
    fclose(fp);
Packit 5b6b86
    dumpf(f);
Packit 5b6b86
}
Packit 5b6b86
Packit 5b6b86
void file(char *arg2,char *arg3,unsigned char *buf)
Packit 5b6b86
{
Packit 5b6b86
            sts = SetNkfOption(arg2);
Packit 5b6b86
            printf("SetNkfOption(%s)=%d\n",arg2,sts);
Packit 5b6b86
            mkfile(arg3,buf);
Packit 5b6b86
            NkfFileConvert1(arg3);
Packit 5b6b86
            printf("NkfFileConvert1(%s)\n",arg3);
Packit 5b6b86
            dumpf(arg3);
Packit 5b6b86
            sts = SetNkfOption(arg2);
Packit 5b6b86
            printf("SetNkfOption(%s)=%d\n",arg2,sts);
Packit 5b6b86
            mkfile(arg3,buf);
Packit 5b6b86
            sts = NkfFileConvert1SafeA(arg3,strlen(arg3) + 1);
Packit 5b6b86
            printf("NkfFileConvert1SafeA(%s)=%d\n",arg3,sts);
Packit 5b6b86
            dumpf(arg3);
Packit 5b6b86
            sts = SetNkfOption(arg2);
Packit 5b6b86
            printf("SetNkfOption(%s)=%d\n",arg2,sts);
Packit 5b6b86
            mkfile(arg3,buf);
Packit 5b6b86
            sts = MultiByteToWideChar(CP_OEMCP,MB_PRECOMPOSED,arg3,-1,(wchar_t *)buff,sizeof(buff) / sizeof(wchar_t));
Packit 5b6b86
            printf("MultiByteToWideChar(%s)=%d\n",arg3,sts);
Packit 5b6b86
            dumpn(buff,(wcslen((wchar_t *)buff) + 1) * sizeof(wchar_t));
Packit 5b6b86
            sts = NkfFileConvert1SafeW((wchar_t *)buff,sizeof buff / sizeof(wchar_t) /*wcslen((wchar_t *)buff) + 1*/);
Packit 5b6b86
            printf("NkfFileConvert1SafeW()=%d\n",sts);
Packit 5b6b86
            dumpf(arg3);
Packit 5b6b86
}
Packit 5b6b86
Packit 5b6b86
void file2(char *arg2,char *arg3,char *arg4,unsigned char *buf)
Packit 5b6b86
{
Packit 5b6b86
            sts = SetNkfOption(arg2);
Packit 5b6b86
            printf("SetNkfOption(%s)=%d\n",arg2,sts);
Packit 5b6b86
            mkfile(arg3,buf);
Packit 5b6b86
            NkfFileConvert2(arg3,arg4);
Packit 5b6b86
            printf("NkfFileConvert1(%s,%s)\n",arg3,arg4);
Packit 5b6b86
            dumpf(arg3);
Packit 5b6b86
            dumpf(arg4);
Packit 5b6b86
            sts = SetNkfOption(arg2);
Packit 5b6b86
            printf("SetNkfOption(%s)=%d\n",arg2,sts);
Packit 5b6b86
            mkfile(arg3,buf);
Packit 5b6b86
            sts = NkfFileConvert2SafeA(arg3,strlen(arg3) + 1,arg4,strlen(arg4) + 1);
Packit 5b6b86
            printf("NkfFileConvert2SafeA(%s,%s)=%d\n",arg3,arg4,sts);
Packit 5b6b86
            dumpf(arg3);
Packit 5b6b86
            dumpf(arg4);
Packit 5b6b86
            sts = SetNkfOption(arg2);
Packit 5b6b86
            printf("SetNkfOption(%s)=%d\n",arg2,sts);
Packit 5b6b86
            mkfile(arg3,buf);
Packit 5b6b86
            sts = MultiByteToWideChar(CP_OEMCP,MB_PRECOMPOSED,arg3,-1,(wchar_t *)buff,sizeof(buff) / sizeof(wchar_t));
Packit 5b6b86
            printf("MultiByteToWideChar(%s)=%d\n",arg3,sts);
Packit 5b6b86
            dumpn(buff,(wcslen((wchar_t *)buff) + 1) * sizeof(wchar_t));
Packit 5b6b86
            sts = MultiByteToWideChar(CP_OEMCP,MB_PRECOMPOSED,arg4,-1,(wchar_t *)buff4,sizeof(buff4) / sizeof(wchar_t));
Packit 5b6b86
            printf("MultiByteToWideChar(%s)=%d\n",arg4,sts);
Packit 5b6b86
            dumpn(buff4,(wcslen((wchar_t *)buff4) + 1) * sizeof(wchar_t));
Packit 5b6b86
            sts = NkfFileConvert2SafeW((wchar_t *)buff,sizeof buff / sizeof(wchar_t) ,(wchar_t *)buff4,sizeof buff4 / sizeof(wchar_t));
Packit 5b6b86
            printf("NkfFileConvert2SafeW()=%d\n",sts);
Packit 5b6b86
            dumpf(arg3);
Packit 5b6b86
            dumpf(arg4);
Packit 5b6b86
}
Packit 5b6b86
Packit 5b6b86
int main(int argc,char **argv)
Packit 5b6b86
{
Packit 5b6b86
    struct NKFSUPPORTFUNCTIONS fnc;
Packit 5b6b86
Packit 5b6b86
    if ( argc < 2 ) return 0;
Packit 5b6b86
    switch ( *argv[1] ) {
Packit 5b6b86
      case 'v':
Packit 5b6b86
        memset(buff,0,sizeof buff);
Packit 5b6b86
        GetNkfVersion(buff);
Packit 5b6b86
        printf("GetNkfVersion() '%s'\n",buff);
Packit 5b6b86
            sts = GetNkfVersionSafeA(buff,sizeof buff,&len;;
Packit 5b6b86
            printf("GetNkfVersionSafeA()=%d len=%d '%s'\n",sts,len,buff);
Packit 5b6b86
            sts = GetNkfVersionSafeW((LPWSTR)buff,sizeof buff / sizeof(WCHAR),&len;;
Packit 5b6b86
            printf("GetNkfVersionSafeW()=%d len=%d\n",sts,len);
Packit 5b6b86
            dumpn(buff,len * sizeof(WCHAR));
Packit 5b6b86
            sts = GetNkfSupportFunctions(&fnc,sizeof fnc,&len;;
Packit 5b6b86
            printf("GetNkfSupportFunctions()=%d len=%d\n",sts,len);
Packit 5b6b86
            printf("size=%d\n",fnc.size);
Packit 5b6b86
            printf("copyrightA='%s'\n",fnc.copyrightA);
Packit 5b6b86
            printf("versionA='%s'\n",fnc.versionA);
Packit 5b6b86
            printf("dateA='%s'\n",fnc.dateA);
Packit 5b6b86
            printf("functions=%d %x\n",fnc.functions,fnc.functions);
Packit 5b6b86
        break;
Packit 5b6b86
      case 'm':
Packit 5b6b86
        if ( argc < 3 ) return 0;
Packit 5b6b86
        mimeencode(argv[2]);
Packit 5b6b86
        break;
Packit 5b6b86
      case 'M':
Packit 5b6b86
        if ( argc < 2 ) return 0;
Packit 5b6b86
        gets(buff2);
Packit 5b6b86
        mimeencode(buff2);
Packit 5b6b86
        break;
Packit 5b6b86
      case 'c':
Packit 5b6b86
        if ( argc < 4 ) return 0;
Packit 5b6b86
        convert(argv[2],argv[3]);
Packit 5b6b86
        break;
Packit 5b6b86
      case 'C':
Packit 5b6b86
        if ( argc < 3 ) return 0;
Packit 5b6b86
        gets(buff2);
Packit 5b6b86
        convert(argv[2],buff2);
Packit 5b6b86
        break;
Packit 5b6b86
      case 'g':
Packit 5b6b86
        if ( argc < 3 ) return 0;
Packit 5b6b86
        guess(argv[2]);
Packit 5b6b86
        break;
Packit 5b6b86
      case 'G':
Packit 5b6b86
        if ( argc < 2 ) return 0;
Packit 5b6b86
        gets(buff2);
Packit 5b6b86
        guess(buff2);
Packit 5b6b86
        break;
Packit 5b6b86
      case 'f':
Packit 5b6b86
        if ( argc < 5 ) return 0;
Packit 5b6b86
        file(argv[2],argv[3],argv[4]);
Packit 5b6b86
        break;
Packit 5b6b86
      case 'F':
Packit 5b6b86
        if ( argc < 4 ) return 0;
Packit 5b6b86
        gets(buff3);
Packit 5b6b86
        file(argv[2],argv[3],buff3);
Packit 5b6b86
        break;
Packit 5b6b86
      case '2':
Packit 5b6b86
        if ( argc < 6 ) return 0;
Packit 5b6b86
        file2(argv[2],argv[3],argv[4],argv[5]);
Packit 5b6b86
        break;
Packit 5b6b86
      case '#':
Packit 5b6b86
        if ( argc < 5 ) return 0;
Packit 5b6b86
        gets(buff3);
Packit 5b6b86
        file2(argv[2],argv[3],argv[4],buff3);
Packit 5b6b86
        break;
Packit 5b6b86
      case 'u':
Packit 5b6b86
        sts = NkfUsage(buff,sizeof buff,&len;;
Packit 5b6b86
        printf("strlen(buff)=%d\n",strlen(buff));
Packit 5b6b86
        printf("NkfUsage()=%d len=%d \n%s",sts,len,buff);
Packit 5b6b86
        break;
Packit 5b6b86
    }
Packit 5b6b86
    return 0;
Packit 5b6b86
}
Packit 5b6b86
/* dbg.exe end */
Packit 5b6b86
#endif /* DLLDBG @@*/
Packit 5b6b86
/*WIN32DLL*/