549 lines
13 KiB
C
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;
|
|
}
|