Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

6.0 KiB

#include <windows.h>

#include <windowsx.h>
#include "resource.h"

char g_szCurrentDir[MAX_PATH];
char *g_szLicenseText;
//---------------------------------------------------------------------------
BOOL _PathRemoveFileSpec(LPSTR pFile)
{
LPSTR pT;
LPSTR pT2 = pFile;

for (pT = pT2; *pT2; pT2 = CharNext(pT2)) {
if (*pT2 == '\\')
pT = pT2; // last "\" found, (we will strip here)
else if (*pT2 == ':') { // skip ":\" so we don't
if (pT2[1] =='\\') // strip the "\" from "C:\"
pT2++;
pT = pT2 + 1;
}
}
if (*pT == 0)
return FALSE; // didn't strip anything

//
// handle the \foo case
//
else if ((pT == pFile) && (*pT == '\\')) {
// Is it just a '\'?
if (*(pT+1) != '\0') {
// Nope.
*(pT+1) = '\0';
return TRUE; // stripped something
}
else {
// Yep.
return FALSE;
}
}
else {
*pT = 0;
return TRUE; // stripped something
}
}


//---------------------------------------------------------------------------
// L O A D R E A D M E
//
// ISK3
// This will load the readme data file
//
//---------------------------------------------------------------------------
void LoadReadme( char *szLicenseText)
{
CHAR szLicensePath[MAX_PATH];
const CHAR szLicenseFile[] = "\\license.txt";
BOOL retval = FALSE;
HANDLE hLicense;
INT filesize;
DWORD cbRead;

lstrcpy( szLicensePath, g_szCurrentDir );
lstrcat( szLicensePath, "\\Moreinfo.txt" );

if (GetFileAttributes(szLicensePath) != (DWORD) -1)
{
// Open the file
hLicense = CreateFile(szLicensePath, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hLicense != INVALID_HANDLE_VALUE)
{

// Get size and allocate buffer
filesize = GetFileSize(hLicense, NULL);

// Read File
if (ReadFile( hLicense, szLicenseText, filesize, &cbRead, NULL))
{
// NULL terminate it
szLicenseText[ filesize ] = '\0';

}
}
CloseHandle( hLicense );
}
}

void ReadmeCenterWindow( HWND hwnd )
{
int screenx;
int screeny;
int height, width, x, y;
RECT rect;

screenx = GetSystemMetrics( SM_CXSCREEN );
screeny = GetSystemMetrics( SM_CYSCREEN );

GetWindowRect( hwnd, &rect );

width = rect.right - rect.left;
height = rect.bottom - rect.top;
x = (screenx / 2) - (width / 2);
y = (screeny / 2) - (height / 2);

SetWindowPos( hwnd, HWND_TOP, x, y, width, height, SWP_NOZORDER );

}

void InitSysFont(HWND hDlg, int iCtrlID)
{
static HFONT hfontSys;

LOGFONT lf;
HDC hDC;
HWND hwndCtrl = GetDlgItem(hDlg, iCtrlID);
HFONT hFont;
int cyLogPixels;

hDC = GetDC(NULL);
if (hDC == NULL)
return;

cyLogPixels = GetDeviceCaps(hDC, LOGPIXELSY);
ReleaseDC(NULL, hDC);

if (hfontSys == NULL) {
LOGFONT lfTemp;
HFONT hfontDef = (HFONT)GetStockObject(DEFAULT_GUI_FONT);

GetObject(hfontDef, sizeof(lfTemp), &lfTemp);
hFont = GetWindowFont(hwndCtrl);
if (hFont != NULL)
if (GetObject(hFont, sizeof(LOGFONT), (PVOID)&lf)) {
lstrcpy(lf.lfFaceName, lfTemp.lfFaceName);
lf.lfQuality = lfTemp.lfQuality;
lf.lfPitchAndFamily = lfTemp.lfPitchAndFamily;
lf.lfCharSet = lfTemp.lfCharSet;

hfontSys = CreateFontIndirect(&lf);
}
}

if (iCtrlID == 0xFFFF)
return;

if (hfontSys != NULL)
SetWindowFont(hwndCtrl, hfontSys, FALSE);
}

INT_PTR CALLBACK ReadmeProc( HWND hDlg, UINT msg, WPARAM wparam, LPARAM lparam )
{
switch( msg )
{
case WM_INITDIALOG:
InitSysFont(hDlg, IDC_README);
ReadmeCenterWindow( hDlg );
SetDlgItemText( hDlg, IDC_README, g_szLicenseText );
return(0);
case WM_COMMAND:
if( wparam == IDOK )
EndDialog( hDlg, 0 );
break;
if( wparam == IDC_README )
return(0);
break;

case WM_CLOSE:
EndDialog( hDlg, 0 );
break;
}
return(0);
}

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow )
{
char *szLicenseText = (char *) LocalAlloc( LPTR, 64000 );

g_szLicenseText = szLicenseText;

GetModuleFileName( NULL, g_szCurrentDir, MAX_PATH );
_PathRemoveFileSpec( g_szCurrentDir );

LoadReadme( szLicenseText );

DialogBox( hInstance, MAKEINTRESOURCE( IDD_README ), NULL, ReadmeProc );

LocalFree( szLicenseText );

szLicenseText = NULL;

return(0);
}

int _stdcall ModuleEntry(void)
{
int i;
STARTUPINFO si;
LPSTR pszCmdLine = GetCommandLine();


if ( *pszCmdLine == '\"' ) {
/*
* Scan, and skip over, subsequent characters until
* another double-quote or a null is encountered.
*/
while ( *++pszCmdLine && (*pszCmdLine != '\"') )
;
/*
* If we stopped on a double-quote (usual case), skip
* over it.
*/
if ( *pszCmdLine == '\"' )
pszCmdLine++;
}
else {
while (*pszCmdLine > ' ')
pszCmdLine++;
}

/*
* Skip past any white space preceeding the second token.
*/
while (*pszCmdLine && (*pszCmdLine <= ' ')) {
pszCmdLine++;
}

si.dwFlags = 0;
GetStartupInfoA(&si);

i = WinMain(GetModuleHandle(NULL), NULL, pszCmdLine,
si.dwFlags & STARTF_USESHOWWINDOW ? si.wShowWindow : SW_SHOWDEFAULT);
ExitProcess(i);
return i; // We never comes here.
}