169 lines
4.3 KiB
C++
169 lines
4.3 KiB
C++
// convert.cpp : Defines the class behaviors for the application.
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "tchar.h"
|
|
#include "stdio.h"
|
|
|
|
#include "convert.h"
|
|
#include "convertDlg.h"
|
|
#include "FileConv.h"
|
|
#include "Msg.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
BOOL CConvertApp::CommandLineHandle()
|
|
{
|
|
// GBTOUNIC.EXE [/U] [/G] [/?] [/H] Filename1 [Filename2]
|
|
// If Filename2 is not provided, the tool should create a file named
|
|
// Filename1.old as the copy of Filename1, and perform the appropriate
|
|
// conversion from Filename1.old to Filename1,
|
|
// Filename1 as the final converted destination file.
|
|
//
|
|
// /U or /u performing GB18030 to Unicode conversion
|
|
// /G or /g performing Unicode to GB18030 conversion
|
|
// /H or /? Displaying help message.
|
|
|
|
TCHAR* tszFlag = NULL;
|
|
|
|
TCHAR* tszSrc = NULL;
|
|
CString strTar;
|
|
BOOL fAnsiToUnicode;
|
|
BOOL fRet = FALSE;
|
|
FILE* pFile = NULL;
|
|
|
|
if (__argc > 4 || __argc < 3) {
|
|
MsgUsage();
|
|
goto Exit;
|
|
}
|
|
|
|
tszFlag = __targv[1];
|
|
|
|
if (*tszFlag != TEXT('-') && *tszFlag != TEXT('/')) {
|
|
MsgUsage();
|
|
goto Exit;
|
|
}
|
|
if (lstrlen(tszFlag) != 2) {
|
|
MsgUsage();
|
|
goto Exit;
|
|
}
|
|
|
|
// Convert direct
|
|
if (tszFlag[1] == TEXT('U') || tszFlag[1] == TEXT('u')) {
|
|
fAnsiToUnicode = TRUE;
|
|
} else if (tszFlag[1] == TEXT('G') || tszFlag[1] == TEXT('g')) {
|
|
fAnsiToUnicode = FALSE;
|
|
} else {
|
|
MsgUsage();
|
|
goto Exit;
|
|
}
|
|
|
|
tszSrc = __targv[2];
|
|
/*
|
|
pFile = _tfopen(tszSrc, TEXT("r"));
|
|
if (!pFile) {
|
|
MsgOpenSourceFileError(tszSrc);
|
|
return FALSE;
|
|
}
|
|
fclose(pFile);
|
|
*/
|
|
// Source and Target file name
|
|
if (__argc == 3) {
|
|
/*
|
|
// Hasn't give target file name
|
|
// Save source file set target file name
|
|
tszBuf = new TCHAR[lstrlen(tszSrc) + 5]; // 5, sizeof(TEXT(".old"))/sizeof(TCHAR)
|
|
lstrcpy(tszBuf, tszSrc);
|
|
lstrcat(tszBuf, TEXT(".old"));
|
|
|
|
BOOL f = CopyFile (tszSrc, tszBuf, TRUE);
|
|
if (f) {
|
|
tszTar = tszSrc;
|
|
tszSrc = tszBuf;
|
|
} else {
|
|
MsgFailToBackupFile(tszSrc, tszBuf);
|
|
goto Exit;
|
|
}
|
|
*/
|
|
if (!GenerateTargetFileName(tszSrc, &strTar, fAnsiToUnicode)) {
|
|
goto Exit;
|
|
}
|
|
} else if (__argc == 4) {
|
|
strTar = __targv[3];
|
|
} else {
|
|
ASSERT(FALSE);
|
|
}
|
|
|
|
fRet = Convert(tszSrc, strTar, fAnsiToUnicode);
|
|
|
|
Exit:
|
|
/*
|
|
if (tszBuf) {
|
|
delete[] tszBuf;
|
|
tszBuf = NULL;
|
|
}
|
|
*/
|
|
return fRet;
|
|
}
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CConvertApp
|
|
|
|
BEGIN_MESSAGE_MAP(CConvertApp, CWinApp)
|
|
//{{AFX_MSG_MAP(CConvertApp)
|
|
// NOTE - the ClassWizard will add and remove mapping macros here.
|
|
// DO NOT EDIT what you see in these blocks of generated code!
|
|
//}}AFX_MSG
|
|
ON_COMMAND(ID_HELP, CWinApp::OnHelp)
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CConvertApp construction
|
|
|
|
CConvertApp::CConvertApp()
|
|
{
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// The one and only CConvertApp object
|
|
|
|
CConvertApp theApp;
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CConvertApp initialization
|
|
|
|
BOOL CConvertApp::InitInstance()
|
|
{
|
|
AfxEnableControlContainer();
|
|
|
|
// Standard initialization
|
|
// If you are not using these features and wish to reduce the size
|
|
// of your final executable, you should remove from the following
|
|
// the specific initialization routines you do not need.
|
|
|
|
#ifdef _AFXDLL
|
|
Enable3dControls(); // Call this when using MFC in a shared DLL
|
|
#else
|
|
Enable3dControlsStatic(); // Call this when linking to MFC statically
|
|
#endif
|
|
|
|
if (__argc >= 2) {
|
|
CommandLineHandle();
|
|
return FALSE;
|
|
}
|
|
|
|
CConvertDlg dlg;
|
|
m_pMainWnd = &dlg;
|
|
INT_PTR nResponse = dlg.DoModal();
|
|
|
|
// Since the dialog has been closed, return FALSE so that we exit the
|
|
// application, rather than start the application's message pump.
|
|
return FALSE;
|
|
}
|
|
|