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.

412 lines
7.8 KiB

  1. /*++
  2. Copyright (c) 1998 Microsoft Corporation
  3. Module Name:
  4. dialogs.c
  5. Abstract:
  6. functions handling the dialog boxes in memdbe.exe
  7. Author:
  8. Matthew Vanderzee (mvander) 13-Aug-1999
  9. Revision History:
  10. --*/
  11. #include "pch.h"
  12. #include "dbeditp.h"
  13. BOOL CALLBACK pAboutProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
  14. {
  15. switch (message)
  16. {
  17. case WM_INITDIALOG:
  18. return TRUE;
  19. case WM_COMMAND:
  20. if (LOWORD(wParam) == IDOK)
  21. {
  22. EndDialog(hDlg, LOWORD(wParam));
  23. return TRUE;
  24. }
  25. break;
  26. }
  27. return FALSE;
  28. }
  29. VOID
  30. AboutDialog (
  31. HWND hwnd
  32. )
  33. {
  34. DialogBox(g_hInst, MAKEINTRESOURCE(IDD_DIALOG_ABOUT), hwnd, pAboutProc);
  35. }
  36. typedef struct {
  37. PSTR StringBuffer;
  38. BOOL UsePattern;
  39. } FINDSTRUCT, *PFINDSTRUCT;
  40. BOOL CALLBACK pKeyFindDialogProc (
  41. HWND hdlg,
  42. UINT uMsg,
  43. WPARAM wParam,
  44. LPARAM lParam
  45. )
  46. {
  47. static BOOL UsePatternState = TRUE;
  48. static PFINDSTRUCT fs;
  49. switch (uMsg) {
  50. case WM_INITDIALOG:
  51. fs = (PFINDSTRUCT)lParam;
  52. if (fs->StringBuffer) {
  53. SetDlgItemText (hdlg, IDC_EDIT_KEYPATTERN, fs->StringBuffer);
  54. }
  55. SetFocus (GetDlgItem (hdlg, IDC_EDIT_KEYPATTERN));
  56. SendMessage(GetDlgItem (hdlg, IDC_EDIT_KEYPATTERN), EM_SETSEL, 0, -1);
  57. CheckDlgButton (hdlg, IDC_CHECK_USEPATTERN, UsePatternState ? BST_CHECKED : BST_UNCHECKED);
  58. break;
  59. case WM_COMMAND:
  60. switch (LOWORD(wParam)) {
  61. case IDOK:
  62. if (fs->StringBuffer) {
  63. GetDlgItemText (hdlg, IDC_EDIT_KEYPATTERN, fs->StringBuffer, MEMDB_MAX);
  64. }
  65. UsePatternState = (IsDlgButtonChecked (hdlg, IDC_CHECK_USEPATTERN) == BST_CHECKED);
  66. fs->UsePattern = UsePatternState;
  67. EndDialog (hdlg, TRUE);
  68. break;
  69. case IDCANCEL:
  70. EndDialog (hdlg, FALSE);
  71. break;
  72. default:
  73. return DefWindowProc(hdlg, uMsg, wParam, lParam);
  74. };
  75. break;
  76. };
  77. return FALSE;
  78. }
  79. BOOL
  80. KeyFindDialog (
  81. HWND hwnd,
  82. PSTR StringBuffer,
  83. PBOOL UsePattern
  84. )
  85. {
  86. BOOL b;
  87. FINDSTRUCT fs;
  88. fs.StringBuffer = StringBuffer;
  89. if (!DialogBoxParam (
  90. g_hInst,
  91. MAKEINTRESOURCE(IDD_DIALOG_KEYFIND),
  92. hwnd,
  93. pKeyFindDialogProc,
  94. (LPARAM)&fs
  95. )) {
  96. return FALSE;
  97. }
  98. if (UsePattern) {
  99. *UsePattern = fs.UsePattern;
  100. }
  101. return TRUE;
  102. }
  103. typedef struct {
  104. BYTE DataFlag;
  105. UINT DataValue;
  106. BOOL AddData;
  107. BYTE Instance;
  108. } DATASTRUCT, *PDATASTRUCT;
  109. #define DATA_STR_LEN 16
  110. BOOL
  111. CALLBACK
  112. pShortDataDialogProc (
  113. HWND hdlg,
  114. UINT uMsg,
  115. WPARAM wParam,
  116. LPARAM lParam
  117. )
  118. {
  119. static INT InitBaseButtonCheck = IDC_RADIO_HEX;
  120. static BOOL AddButtonCheck = FALSE;
  121. static PDATASTRUCT pds = NULL;
  122. static CHAR DataStr[DATA_STR_LEN];
  123. switch (uMsg) {
  124. case WM_INITDIALOG:
  125. pds = (PDATASTRUCT)lParam;
  126. pds->DataValue = 0;
  127. CheckDlgButton (hdlg, InitBaseButtonCheck, BST_CHECKED);
  128. CheckDlgButton (hdlg, AddButtonCheck ? IDC_RADIO_ADDDATA : IDC_RADIO_SETDATA, BST_CHECKED);
  129. switch (pds->DataFlag) {
  130. case DATAFLAG_VALUE:
  131. SetWindowText (hdlg, "Set Value");
  132. break;
  133. case DATAFLAG_FLAGS:
  134. SetWindowText (hdlg, "Set Flags");
  135. break;
  136. };
  137. SetFocus (GetDlgItem (hdlg, IDC_EDIT_DATA));
  138. break;
  139. case WM_COMMAND:
  140. switch (LOWORD(wParam)) {
  141. case IDOK:
  142. GetDlgItemText (hdlg, IDC_EDIT_DATA, DataStr, DATA_STR_LEN);
  143. if (IsDlgButtonChecked (hdlg, IDC_RADIO_HEX) == BST_CHECKED) {
  144. pds->DataValue = strtol (DataStr, NULL, 16);
  145. InitBaseButtonCheck = IDC_RADIO_HEX;
  146. } else {
  147. pds->DataValue = strtol (DataStr, NULL, 10);
  148. InitBaseButtonCheck = IDC_RADIO_DEC;
  149. }
  150. pds->AddData = (IsDlgButtonChecked (hdlg, IDC_RADIO_ADDDATA) == BST_CHECKED);
  151. AddButtonCheck = pds->AddData;
  152. EndDialog (hdlg, TRUE);
  153. break;
  154. case IDCANCEL:
  155. EndDialog (hdlg, FALSE);
  156. break;
  157. default:
  158. return DefWindowProc(hdlg, uMsg, wParam, lParam);
  159. };
  160. break;
  161. };
  162. return FALSE;
  163. }
  164. BOOL
  165. ShortDataDialog (
  166. HWND hwnd,
  167. BYTE DataFlag,
  168. PDWORD DataValue,
  169. PBOOL AddData,
  170. PBYTE Instance
  171. )
  172. {
  173. DATASTRUCT ds;
  174. if ((DataFlag != DATAFLAG_VALUE) && (DataFlag != DATAFLAG_FLAGS)) {
  175. return FALSE;
  176. }
  177. ZeroMemory (&ds, sizeof (ds));
  178. ds.DataFlag = DataFlag;
  179. if (!DialogBoxParam (
  180. g_hInst,
  181. MAKEINTRESOURCE(IDD_DIALOG_SHORTDATA),
  182. hwnd,
  183. pShortDataDialogProc,
  184. (LPARAM)&ds
  185. )) {
  186. return FALSE;
  187. }
  188. if (DataValue) {
  189. *DataValue = ds.DataValue;
  190. }
  191. if (AddData) {
  192. *AddData = ds.AddData;
  193. }
  194. if (Instance) {
  195. *Instance = ds.Instance;
  196. }
  197. return TRUE;
  198. }
  199. typedef struct {
  200. PSTR Key1, Key2;
  201. } LINKAGESTRUCT, *PLINKAGESTRUCT;
  202. BOOL CALLBACK pLinkageDialogProc (
  203. HWND hdlg,
  204. UINT uMsg,
  205. WPARAM wParam,
  206. LPARAM lParam
  207. )
  208. {
  209. static PLINKAGESTRUCT pls = NULL;
  210. switch (uMsg) {
  211. case WM_INITDIALOG:
  212. pls = (PLINKAGESTRUCT)lParam;
  213. SetDlgItemText (hdlg, IDC_EDIT_KEY1, pls->Key1);
  214. SetDlgItemText (hdlg, IDC_EDIT_KEY2, pls->Key2);
  215. SetFocus (GetDlgItem (hdlg, (pls->Key1[0]=='\0') ? IDC_EDIT_KEY1 : IDC_EDIT_KEY2));
  216. break;
  217. case WM_COMMAND:
  218. switch (LOWORD(wParam)) {
  219. case IDOK:
  220. GetDlgItemText (hdlg, IDC_EDIT_KEY1, pls->Key1, MEMDB_MAX);
  221. GetDlgItemText (hdlg, IDC_EDIT_KEY2, pls->Key2, MEMDB_MAX);
  222. EndDialog (hdlg, TRUE);
  223. break;
  224. case IDCANCEL:
  225. EndDialog (hdlg, FALSE);
  226. break;
  227. default:
  228. return DefWindowProc(hdlg, uMsg, wParam, lParam);
  229. };
  230. break;
  231. };
  232. return FALSE;
  233. }
  234. BOOL
  235. LinkageDialog (
  236. HWND hwnd,
  237. PSTR Key1,
  238. PSTR Key2
  239. )
  240. {
  241. LINKAGESTRUCT ls;
  242. if (!Key1 || !Key2) {
  243. return FALSE;
  244. }
  245. ls.Key1 = Key1;
  246. ls.Key2 = Key2;
  247. if (!DialogBoxParam (
  248. g_hInst,
  249. MAKEINTRESOURCE(IDD_DIALOG_LINKAGE),
  250. hwnd,
  251. pLinkageDialogProc,
  252. (LPARAM)&ls
  253. )) {
  254. return FALSE;
  255. }
  256. return (Key1[0]!='\0' && Key2[0]!='\0');
  257. }
  258. BOOL CALLBACK pCreateKeyDialogProc (
  259. HWND hdlg,
  260. UINT uMsg,
  261. WPARAM wParam,
  262. LPARAM lParam
  263. )
  264. {
  265. static PSTR Str = NULL;
  266. switch (uMsg) {
  267. case WM_INITDIALOG:
  268. Str = (PSTR)lParam;
  269. SetFocus (GetDlgItem (hdlg, IDC_EDIT_KEY));
  270. break;
  271. case WM_COMMAND:
  272. switch (LOWORD(wParam)) {
  273. case IDOK:
  274. GetDlgItemText (hdlg, IDC_EDIT_KEY, Str, MEMDB_MAX);
  275. EndDialog (hdlg, TRUE);
  276. break;
  277. case IDCANCEL:
  278. EndDialog (hdlg, FALSE);
  279. break;
  280. default:
  281. return DefWindowProc(hdlg, uMsg, wParam, lParam);
  282. };
  283. break;
  284. };
  285. return FALSE;
  286. }
  287. BOOL
  288. CreateKeyDialog (
  289. HWND hwnd,
  290. PSTR KeyName
  291. )
  292. {
  293. if (!KeyName) {
  294. return FALSE;
  295. }
  296. return DialogBoxParam (
  297. g_hInst,
  298. MAKEINTRESOURCE(IDD_DIALOG_CREATEKEY),
  299. hwnd,
  300. pCreateKeyDialogProc,
  301. (LPARAM)KeyName
  302. );
  303. }