MAIN.CPP
//**************************************************************************** 
//  Module:     NMFT.EXE 
//  File:       MAIN.CPP 
//  Content:     
//               
// 
//  Copyright (c) Microsoft Corporation 1997 
// 
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF  
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO  
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A  
// PARTICULAR PURPOSE. 
//**************************************************************************** 
 
#include "precomp.h" 
 
 
//**************************************************************************** 
// 
// Global variables. 
// 
//**************************************************************************** 
 
HINSTANCE ghInst        = NULL;   // Current Instance 
HWND      ghwndMain     = NULL;   // Main Window 
BOOL      g_fQuiet      = FALSE;  //  
TCHAR     g_szFile[MAX_PATH];     // 
 
CONST TCHAR g_szAppClassName[] = TEXT("NMFT Dialog"); 
 
 
//**************************************************************************** 
// 
// BOOL ParseCmdLine(void) 
// 
//**************************************************************************** 
 
BOOL ParseCmdLine(void) 
{ 
LPTSTR pch = ::GetCommandLine(); 
if (NULL == pch) 
return FALSE; 
 
// Work on a copy of the buffer 
TCHAR sz[MAX_PATH*2]; 
lstrcpyn(sz, pch, CCHMAX(sz)); 
pch = sz; 
 
BOOL fInStr = FALSE; 
BOOL fInName = FALSE; 
BOOL fInApp = TRUE; 
TCHAR ch; 
LPTSTR lpsz = NULL; 
 
// walk through the command line, parsing filenames and options 
while (_T('\0') != (ch = *pch)) 
{ 
switch (ch) 
{ 
case _T('\"'):      // Double quoted filename 
fInStr = !fInStr; 
if (fInStr) 
{ 
 lpsz = CharNext(pch); 
 break; 
 } 
 
case _T(' '):       // Space usually terminates a filename 
if (fInStr)  // except in a long filename 
break; 
 
case _T('\0'): 
if (fInApp) 
{ 
// Skip the application name (first string on command line) 
fInApp = FALSE; 
fInName = FALSE; 
 lpsz = CharNext(pch); 
break; 
} 
 
if (!fInName) 
{ 
 lpsz = CharNext(pch); 
break; // ignore extra whitespace 
} 
 
{ 
LPTSTR pchT = CharNext(pch); 
*pch = _T('\0'); // null terminate string 
fInName = FALSE; 
pch = pchT; 
continue; // continue loop 
} 
break; 
 
case _T('/'):      // Command line option 
{ 
if (fInName || fInStr) 
break; 
 
pch = CharNext(pch); 
ch = *pch; 
if (_T('\0') == ch) 
return FALSE; 
 
if ((_T('Q') == ch) || (_T('q') == ch)) 
{ 
g_fQuiet = TRUE; 
} 
// TODO: other options 
 
 break; 
} 
 
default:        // Normal character 
fInName = TRUE; 
break; 
} /* switch (ch) */ 
 
pch = CharNext(pch); 
} 
 
if ((NULL == lpsz) || (_T('\0') == *lpsz)) 
return FALSE; 
 
lstrcpyn(g_szFile, lpsz, MAX_PATH); 
return TRUE; 
} 
 
 
//**************************************************************************** 
// 
// BOOL FVerifyFile(void) 
// 
//**************************************************************************** 
 
BOOL FVerifyFile(void) 
{ 
// Check if filename was specified on command line 
if (ParseCmdLine()) 
return TRUE; 
 
// Prompt the user to select a file 
if (FGetFileName(g_szFile)) 
return TRUE; 
 
return FALSE; 
} 
 
 
//**************************************************************************** 
// 
// BOOL FInitMain(void) 
// 
//**************************************************************************** 
 
BOOL FInitMain(void) 
{ 
TCHAR szTitle[MAX_PATH]; 
WNDCLASS  wc; 
 
ASSERT(NULL != ghInst); 
 
LoadString(ghInst, IDS_APP_TITLE, szTitle, CCHMAX(szTitle)); 
 
ClearStruct(&wc); 
 
wc.style         = CS_HREDRAW | CS_VREDRAW; 
wc.lpfnWndProc   = (WNDPROC)WndProc; 
wc.cbClsExtra    = 0; 
wc.cbWndExtra    = DLGWINDOWEXTRA; 
wc.hInstance     = ghInst; 
wc.hIcon         = LoadIcon(ghInst, MAKEINTRESOURCE(ICO_MAIN)); 
wc.hCursor       = LoadCursor(NULL, IDC_ARROW); 
wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1); 
wc.lpszMenuName  = MAKEINTRESOURCE(IDM_APP); 
wc.lpszClassName = g_szAppClassName; 
 
// Register the window class and return FALSE if unsuccesful. 
if (!RegisterClass(&wc)) 
return FALSE; 
 
ghwndMain = CreateDialog(ghInst, MAKEINTRESOURCE(IDD_PROGRESS), 0, NULL); 
 
if (NULL == ghwndMain) 
return FALSE; 
 
if (!FInitNm()) 
{ 
// TODO: Display error message 
// Unable to initialize, no conference, etc. 
return FALSE; 
} 
 
if (!FVerifyFile()) 
return FALSE; 
 
LPTSTR pszFile; 
GetFullPathName(g_szFile, MAX_PATH, g_szFile, &pszFile); 
 
if (!FFileExists(g_szFile)) 
{ 
TCHAR szMsg[MAX_PATH*2]; 
wsprintf(szMsg, TEXT("Unable to send the file\r\n%s"), g_szFile); 
MessageBox(NULL, szMsg, TEXT("NmFt Error"), MB_OK | MB_ICONSTOP); 
return FALSE; 
} 
 
if (FAILED(SendFile())) 
return FALSE; 
 
return TRUE; 
} 
 
 
//**************************************************************************** 
// 
// int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow) 
// 
// Main Windows entrypoint 
// 
//**************************************************************************** 
 
#ifdef _DEBUG 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow) 
#else  // _DEBUG 
int __cdecl main() 
#endif // _DEBUG 
{ 
#ifdef _DEBUG 
ghInst = hInstance; 
#else 
ghInst = ::GetModuleHandle(NULL); 
#endif // ! _DEBUG 
 
InitCommonControls(); 
 
 if (FAILED(CoInitialize(NULL))) 
return 0; 
 
if (FInitMain() && !g_fQuiet) 
{ 
MSG  msg; 
while (GetMessage(&msg, NULL, 0, 0)) 
{ 
TranslateMessage(&msg); 
DispatchMessage(&msg); 
} 
} 
 
FreeNmObjects(); 
    CoUninitialize(); 
 
#ifndef DEBUG 
ExitProcess(0); 
#endif 
 
return 0; 
}