2020-09-30 17:12:32 +02:00

549 lines
13 KiB
C

/*
** Module: RNAUI.DLL
** File: scripter.c
** Descriptions: Remote Network Access Scripting dialog
** Contains: Scripting tools dialog boxes
** Copyright (c) 1992-1993, Microsoft Corporation, all rights reserved
** History: Thu 19-Aug-1993 -by- Viroon Touranachun [viroont]
** Created
** Tue 08-Nov-1994 -by- Viroon Touranachun [viroont]
** Moved from sessmgr.c
*/
#include "rnaui.h"
#include "scripter.h"
#include "rnahelp.h"
// Macros
#define ISMINIMIZED(cmd) (cmd==SW_SHOWMINNOACTIVE || cmd==SW_SHOWMINIMIZED)
// Global Parameters
#pragma data_seg(DATASEG_READONLY)
char const g_szProfile[] = REGSTR_KEY_PROF;
char const g_szScript[] = REGSTR_VAL_SCRIPT;
char const g_szMode[] = REGSTR_VAL_MODE;
char const g_szPlacement[]=REGSTR_VAL_TERM;
char const cszHelpFile[] = "winhelp.hlp>proc4";
#pragma data_seg()
// BOOL CALLBACK _export ScriptAppletDlgProc (HWND, UINT, WPARAM, LPARAM)
// This function handles the modal connection info setting dialog box.
// History:
// Fri 05-May-1995 08:58:47 -by- Viroon Touranachun [viroont]
// Created.
BOOL CALLBACK ScriptAppletDlgProc (HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
{
PCONNENTDLG pConnEntDlg;
switch (message)
{
case WM_INITDIALOG:
pConnEntDlg = (PCONNENTDLG)(((LPPROPSHEETPAGE)lParam)->lParam);
SetWindowLong(hwnd, DWL_USER, (LONG)pConnEntDlg);
// Initilialize the script page
InitScriptDlg(hwnd);
break;
case WM_DESTROY:
DeInitScriptDlg (hwnd);
break;
case WM_HELP:
case WM_CONTEXTMENU:
ContextHelp(gaScripter, message, wParam, lParam);
break;
case WM_NOTIFY:
switch(((NMHDR FAR *)lParam)->code)
{
case PSN_KILLACTIVE:
// Update the selected SMM settings
SetWindowLong(hwnd, DWL_MSGRESULT,
(LONG)(CheckScriptDlgData(hwnd) != ERROR_SUCCESS));
return TRUE;
case PSN_APPLY:
// The property sheet information is permanently applied
SaveScriptDlgData(hwnd);
return FALSE;
default:
break;
};
break;
case WM_COMMAND:
// Determine the end-user action
switch (GET_WM_COMMAND_ID(wParam, lParam))
{
case IDC_SCRIPT_NAME:
// Adjust the dialog appearance
if (GET_WM_COMMAND_CMD(wParam, lParam)==EN_CHANGE)
{
BOOL bEnable = (0 < Edit_GetTextLength(GET_WM_COMMAND_HWND(wParam, lParam)));
EnableWindow(GetDlgItem(hwnd, IDC_DEBUG), bEnable);
EnableWindow(GetDlgItem(hwnd, IDC_EDIT), bEnable);
};
break;
case IDC_EDIT:
// Edit script file
EditScriptFile(hwnd);
break;
case IDC_SCRIPT_BROWSE:
// Browse an existing file
BrowseScriptFile(hwnd);
break;
#ifdef SCRPT_HELP_ENABLED
case IDC_SCRIPT_HELP:
WinHelp(hwnd, cszHelpFile, HELP_CONTEXT, CREATE_SCRIPT_MAIN);
break;
#endif // SCRPT_HELP_ENABLED
};
break;
default:
break;
}
return FALSE;
}
// DWORD NEAR PASCAL InitScriptDlg (HWND hwnd)
// This function initializes the scripting page.
// History:
// Tue 08-Nov-1994 09:14:13 -by- Viroon Touranachun [viroont]
// Created.
DWORD NEAR PASCAL InitScriptDlg (HWND hwnd)
{
PCONNENTDLG pConnEntDlg;
WINDOWPLACEMENT wp;
HKEY hkey, hkeyEntry;
DWORD cbSize, dwType;
UINT uMode;
char szFileName[MAX_PATH];
// Get the currently selected connection name
pConnEntDlg = (PCONNENTDLG)GetWindowLong(hwnd, DWL_USER);
// Assume no assigned script
szFileName[0] = '\0';
uMode = NORMAL_MODE;
wp.showCmd = SW_SHOWMINNOACTIVE;
// Look up the registry for the current script name
if (RegOpenKey(HKEY_CURRENT_USER, g_szProfile, &hkey) == ERROR_SUCCESS)
{
if (RegOpenKey(hkey, pConnEntDlg->pConnEntry->pszEntry, &hkeyEntry)
== ERROR_SUCCESS)
{
cbSize = sizeof(szFileName);
if (RegQueryValueEx(hkeyEntry, g_szScript, 0, &dwType, szFileName,
&cbSize) != ERROR_SUCCESS)
{
szFileName[0] = '\0';
};
cbSize = sizeof(uMode);
if (RegQueryValueEx(hkeyEntry, g_szMode, 0, &dwType, (LPBYTE)&uMode,
&cbSize) != ERROR_SUCCESS)
{
uMode = NORMAL_MODE;
};
// Get the current window setting
cbSize = sizeof(wp);
if (RegQueryValueEx(hkeyEntry, g_szPlacement, 0, &dwType, (LPBYTE)&wp,
&cbSize) != ERROR_SUCCESS)
{
// It is not there, signify the default values
wp.showCmd= SW_SHOWMINNOACTIVE;
};
RegCloseKey(hkeyEntry);
};
RegCloseKey(hkey);
};
// Set the name to the script name box
Edit_SetText(GetDlgItem(hwnd, IDC_SCRIPT_NAME), szFileName);
// Set the minimized options
CheckDlgButton(hwnd, IDC_MINIMIZED,
ISMINIMIZED(wp.showCmd) ? BST_CHECKED : BST_UNCHECKED);
// Set the test mode
CheckDlgButton(hwnd, IDC_DEBUG,
uMode == TEST_MODE ? BST_CHECKED : BST_UNCHECKED);
EnableWindow(GetDlgItem(hwnd, IDC_DEBUG),
(szFileName[0] == '\0') ? FALSE : TRUE);
// Enable/disable edit button
EnableWindow(GetDlgItem(hwnd, IDC_EDIT), 0 != szFileName[0]);
// Prepare to browse from the scripts directory
if (GetWindowsDirectory(szFileName, sizeof(szFileName)))
{
LPSTR lpsz = szFileName;
while((*lpsz != '\\') && (*lpsz != '\0'))
{
lpsz = CharNext(lpsz);
};
if (*lpsz == '\\')
{
// Try to use it as the current directory
if ((LoadString(ghInstance, IDS_INI_SCRIPT_DIR, lpsz,
MAX_PATH - (lpsz - szFileName)) == 0) ||
(!SetCurrentDirectory(szFileName)))
{
// Try the short name
if (LoadString(ghInstance, IDS_INI_SCRIPT_SHORTDIR, lpsz,
MAX_PATH - (lpsz - szFileName)))
{
SetCurrentDirectory(szFileName);
};
};
};
};
return ERROR_SUCCESS;
}
// DWORD NEAR PASCAL DeInitScriptDlg (HWND)
// This function initializes the advanced device options box.
// History:
// Mon 01-Mar-1993 13:51:30 -by- Viroon Touranachun [viroont]
// Created.
DWORD NEAR PASCAL DeInitScriptDlg (HWND hwnd)
{
return ERROR_SUCCESS;
}
// DWORD NEAR PASCAL EditScriptFile (HWND)
// This function brings up the associated editor for the script.
// History:
// Tue 07-Jun-1995 08:02:00 -by- Scott Hysom [scotth]
// Created.
DWORD NEAR PASCAL EditScriptFile(HWND hwnd)
{
HWND hCtrl;
SHELLEXECUTEINFO sei;
char szFileName[MAX_PATH];
DWORD dwRet;
hCtrl = GetDlgItem(hwnd, IDC_SCRIPT_NAME);
Edit_GetText(hCtrl, szFileName, sizeof(szFileName));
ZeroMemory(&sei, sizeof(sei));
sei.cbSize = sizeof(sei);
sei.fMask = SEE_MASK_FLAG_NO_UI | SEE_MASK_DOENVSUBST;
sei.hwnd = hwnd;
sei.lpVerb = "Open";
sei.lpFile = szFileName;
sei.nShow = SW_NORMAL;
sei.hInstApp = ghInstance;
dwRet = ERROR_SUCCESS; // assume success
if (!ShellExecuteEx(&sei))
{
char szCommand[MAX_PATH];
// We failed to open the file, default to Notepad
lstrcpy(szCommand, "notepad");
sei.lpFile = szCommand;
sei.lpParameters = szFileName;
sei.fMask &= ~SEE_MASK_FLAG_NO_UI; // show any errors this time
if (!ShellExecuteEx(&sei))
dwRet = GetLastError();
};
return dwRet;
}
// DWORD NEAR PASCAL BrowseScriptFile (HWND)
// This function adjusts the dialog layout.
// History:
// Tue 08-Nov-1994 09:14:13 -by- Viroon Touranachun [viroont]
// Created.
DWORD NEAR PASCAL BrowseScriptFile(HWND hwnd)
{
HWND hCtrl;
OPENFILENAME ofn;
LPSTR pszFiles, szFileName, szFilter;
DWORD dwRet;
// Allocate filename buffer
if ((pszFiles = (LPSTR)LocalAlloc(LPTR, 2*MAX_PATH)) == NULL)
return ERROR_OUTOFMEMORY;
szFileName = pszFiles;
szFilter = szFileName+MAX_PATH;
// Start file browser dialog
LoadString(ghInstance, IDS_FILE_FILTER, szFilter, MAX_PATH);
*szFileName = '\0';
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hwnd;
ofn.hInstance = ghInstance;
ofn.lpstrFilter = szFilter;
ofn.lpstrCustomFilter = NULL;
ofn.nMaxCustFilter = 0;
ofn.nFilterIndex = 2;
ofn.lpstrFile = szFileName;
ofn.nMaxFile = MAX_PATH;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.lpstrTitle = NULL;
ofn.Flags = OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
ofn.nFileOffset = 0;
ofn.nFileExtension = 0;
ofn.lpstrDefExt = NULL;
ofn.lCustData = 0;
ofn.lpfnHook = NULL;
ofn.lpTemplateName = NULL;
if (GetOpenFileName(&ofn))
{
// Set the filename to a new name
hCtrl = GetDlgItem(hwnd, IDC_SCRIPT_NAME);
Edit_SetText(hCtrl, szFileName);
Edit_SetSel(hCtrl, 0, -1);
SetFocus(hCtrl);
EnableWindow(GetDlgItem(hwnd, IDC_DEBUG),
(*szFileName == '\0') ? FALSE : TRUE);
EnableWindow(GetDlgItem(hwnd, IDC_EDIT), 0 != *szFileName);
dwRet = ERROR_SUCCESS;
}
else
{
dwRet = ERROR_OPEN_FAILED;
};
LocalFree(pszFiles);
return dwRet;
}
// DWORD NEAR PASCAL CheckScriptDlgData (HWND)
// This function checks the valid data..
// History:
// Tue 08-Nov-1994 09:14:13 -by- Viroon Touranachun [viroont]
// Created.
DWORD NEAR PASCAL CheckScriptDlgData(HWND hwnd)
{
HWND hCtrl;
OFSTRUCT of;
DWORD dwRet = ERROR_SUCCESS;
// Get the current script name
hCtrl = GetDlgItem(hwnd, IDC_SCRIPT_NAME);
Edit_GetText(hCtrl, of.szPathName, sizeof(of.szPathName));
// Check whether the file exist
if (of.szPathName[0] != '\0')
{
of.cBytes = sizeof(of);
if (OpenFile(of.szPathName, &of, OF_EXIST) == HFILE_ERROR)
{
if (RuiUserMessage(hwnd,
IDS_ERR_FILE_NOT_EXIST,
MB_YESNO | MB_ICONEXCLAMATION) == IDNO)
{
Edit_SetSel(hCtrl, 0, -1);
SetFocus(hCtrl);
dwRet = ERROR_FILE_NOT_FOUND;
};
};
};
return dwRet;
}
// DWORD NEAR PASCAL SaveScriptDlgData (HWND)
// This function saves the data permanently.
// History:
// Tue 08-Nov-1994 09:14:13 -by- Viroon Touranachun [viroont]
// Created.
DWORD NEAR PASCAL SaveScriptDlgData(HWND hwnd)
{
PCONNENTDLG pConnEntDlg;
HWND hCtrl;
WINDOWPLACEMENT wp;
UINT uMode;
HKEY hkey, hkeyEntry;
DWORD dwRet;
char szPathName[MAX_PATH];
// Get the current script name
hCtrl = GetDlgItem(hwnd, IDC_SCRIPT_NAME);
Edit_GetText(hCtrl, szPathName, sizeof(szPathName));
// Get the connection entry
pConnEntDlg = (PCONNENTDLG)GetWindowLong(hwnd, DWL_USER);
// Write the name to the registry key
if (RegCreateKey(HKEY_CURRENT_USER, g_szProfile, &hkey) == ERROR_SUCCESS)
{
if (RegCreateKey(hkey, pConnEntDlg->pConnEntry->pszEntry, &hkeyEntry)
== ERROR_SUCCESS)
{
DWORD cbSize, dwType;
// If the name exists, update it. Otherwise, remove it.
if (szPathName[0] != '\0')
{
RegSetValueEx(hkeyEntry, g_szScript, 0, REG_SZ, szPathName,
lstrlen(szPathName)+1);
}
else
{
RegDeleteValue(hkeyEntry, g_szScript);
};
// Get the current window setting
cbSize = sizeof(wp);
if (RegQueryValueEx(hkeyEntry, g_szPlacement, 0, &dwType, (LPBYTE)&wp,
&cbSize) != ERROR_SUCCESS)
{
// The current setting is not there, use the default value
ZeroMemory(&wp, sizeof(wp));
wp.showCmd = SW_SHOWMINNOACTIVE;
};
if (IsDlgButtonChecked(hwnd, IDC_MINIMIZED))
{
wp.showCmd = SW_SHOWMINNOACTIVE;
}
else
{
// If the user specifed not-minimized but it is minimized
if (ISMINIMIZED(wp.showCmd))
{
// Set to show normal
wp.showCmd = SW_SHOWNORMAL;
};
};
RegSetValueEx(hkeyEntry, g_szPlacement, 0, REG_BINARY, (LPBYTE)&wp,
sizeof(wp));
// Set the debug mode
uMode = (IsWindowEnabled(GetDlgItem(hwnd, IDC_DEBUG)) &&
IsDlgButtonChecked(hwnd, IDC_DEBUG)) ? TEST_MODE : NORMAL_MODE;
RegSetValueEx(hkeyEntry, g_szMode, 0, REG_BINARY, (LPBYTE)&uMode,
sizeof(uMode));
RegCloseKey(hkeyEntry);
dwRet = ERROR_SUCCESS;
}
else
{
dwRet = ERROR_CANNOT_OPEN_PHONEBOOK;
};
RegCloseKey(hkey);
}
else
{
dwRet = ERROR_CANNOT_OPEN_PHONEBOOK;
};
return dwRet;
}