Windows2003-3790/base/win32/winnls/data/dlls/tools/gb18030/gbunicnv/convert.cpp
2020-09-30 16:53:55 +02:00

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;
}