* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
+/*
+ * PROJECT: ReactOS Program Manager
+ * COPYRIGHT: GPL - See COPYING in the top level directory
+ * FILE: base/shell/progman/progman.h
+ * PURPOSE: ProgMan header
+ * PROGRAMMERS: Ulrich Schmid
+ * Sylvain Petreolle
+ * Hermes Belusca-Maito (hermes.belusca@sfr.fr)
+ */
+
#ifndef PROGMAN_H
#define PROGMAN_H
#include <stdio.h>
+#include <stdlib.h>
#define WIN32_NO_STATUS
#include <windef.h>
#include <winbase.h>
+#include <winreg.h>
#include <wingdi.h>
#include <winuser.h>
+#include <shellapi.h>
+
+#include <commctrl.h>
+#include <richedit.h>
+
#define MAX_STRING_LEN 255
#define MAX_PATHNAME_LEN 1024
#define MAX_LANGUAGE_NUMBER (PM_LAST_LANGUAGE - PM_FIRST_LANGUAGE)
/* Fallback icon */
#define DEFAULTICON OIC_WINLOGO
-/* Icon index in MS Windows' progman.exe */
-#define PROGMAN_ICON_INDEX 0
-#define GROUP_ICON_INDEX 6
-#define DEFAULT_ICON_INDEX 7
-
#define DEF_GROUP_WIN_XPOS 100
#define DEF_GROUP_WIN_YPOS 100
#define DEF_GROUP_WIN_WIDTH 300
#define DEF_GROUP_WIN_HEIGHT 200
-typedef struct
+
+/*
+ * windowsx.h extensions
+ */
+#define EnableDlgItem(hDlg, nID, bEnable) \
+ EnableWindow(GetDlgItem((hDlg), (nID)), (bEnable))
+
+
+
+
+
+typedef struct _PROGRAM PROGRAM, *PPROGRAM;
+typedef struct _PROGGROUP PROGGROUP, *PPROGGROUP;
+
+struct _PROGRAM
{
- HLOCAL hGroup;
- HLOCAL hPrior;
- HLOCAL hNext;
- HWND hWnd;
- /**/ /* Numbers are byte indexes in *.grp */
-
- /**/ /* Program entry */
- INT x, y; /* 0 - 3 */
- INT nIconIndex; /* 4 - 5 */
- HICON hIcon;
- /* icon flags ??? */ /* 6 - 7 */
- /* iconANDsize */ /* 8 - 9 */
- /* iconXORsize */ /* 10 - 11 */
- /* pointer to IconInfo */ /* 12 - 13 */
- /* pointer to iconXORbits */ /* 14 - 15 */ /* sometimes iconANDbits ?! */
- /* pointer to iconANDbits */ /* 16 - 17 */ /* sometimes iconXORbits ?! */
- HLOCAL hName; /* 18 - 19 */
- HLOCAL hCmdLine; /* 20 - 21 */
- HLOCAL hIconFile; /* 22 - 23 */
- HLOCAL hWorkDir; /* Extension 0x8101 */
- INT nHotKey; /* Extension 0x8102 */
- /* Modifier: bit 8... */
- INT nCmdShow; /* Extension 0x8103 */
-
- /**/ /* IconInfo */
- /* HotSpot x ??? */ /* 0 - 1 */
- /* HotSpot y ??? */ /* 2 - 3 */
- /* Width */ /* 4 - 5 */
- /* Height */ /* 6 - 7 */
- /* WidthBytes ??? */ /* 8 - 9 */
- /* Planes */ /* 10 - 10 */
- /* BitsPerPixel */ /* 11 - 11 */
-} PROGRAM;
-
-typedef struct
+ PROGGROUP* hGroup;
+ PROGRAM* hPrior;
+ PROGRAM* hNext;
+ HWND hWnd;
+
+ INT iItem;
+ INT x;
+ INT y;
+ INT nIconIndex;
+ HICON hIcon;
+ LPWSTR hName;
+ LPWSTR hCmdLine;
+ LPWSTR hIconFile;
+ LPWSTR hWorkDir; /* Extension 0x8101 */
+ INT nHotKey; /* Extension 0x8102 */
+ INT nCmdShow; /* Extension 0x8103 */
+ BOOL bNewVDM; /* Extension 0x8104 */
+
+ SIZE_T TagsSize;
+ PVOID Tags;
+}; // PROGRAM, *PPROGRAM;
+
+typedef enum _GROUPFORMAT
+{
+ Win_311 = 0x0,
+ NT_Ansi = 0x1, // 0x02
+ NT_Unicode = 0x2, // 0x03
+} GROUPFORMAT;
+
+struct _PROGGROUP
{
- HLOCAL hPrior;
- HLOCAL hNext;
- HWND hWnd;
- HLOCAL hGrpFile;
- HLOCAL hActiveProgram;
- BOOL bFileNameModified;
- BOOL bOverwriteFileOk;
- INT seqnum;
-
- /**/ /* Absolute */
- /* magic `PMCC' */ /* 0 - 3 */
- /* checksum */ /* 4 - 5 */
- /* Extension ptr */ /* 6 - 7 */
- INT nCmdShow; /* 8 - 9 */
- INT x, y; /* 10 - 13 */
- INT width, height; /* 14 - 17 */
- INT iconx, icony; /* 18 - 21 */
- HLOCAL hName; /* 22 - 23 */
- /* unknown */ /* 24 - 31 */
- /* number of programs */ /* 32 - 33 */
- HLOCAL hPrograms; /* 34 ... */
-
- /**/ /* Extensions */
- /* Extension type */ /* 0 - 1 */
- /* Program number */ /* 2 - 3 */
- /* Size of entry */ /* 4 - 5 */
- /* Data */ /* 6 ... */
-
- /* magic `PMCC' */ /* Extension 0x8000 */
- /* End of Extensions */ /* Extension 0xffff */
-} PROGGROUP;
-
-typedef struct
+ PROGGROUP* hPrior;
+ PROGGROUP* hNext;
+ HWND hWnd;
+
+ HWND hListView;
+ HIMAGELIST hListLarge;
+ HIMAGELIST hDragImageList;
+ HICON hOldCursor;
+ POINT ptStart;
+ BOOL bDragging;
+
+ GROUPFORMAT format;
+ BOOL bIsCommonGroup;
+ // BOOL bFileNameModified;
+ BOOL bOverwriteFileOk;
+ LPWSTR hGrpFile;
+ INT seqnum;
+ INT nCmdShow;
+ INT x;
+ INT y;
+ INT width;
+ INT height;
+ INT iconx;
+ INT icony;
+ LPWSTR hName;
+ PROGRAM* hPrograms;
+ PROGRAM* hActiveProgram;
+
+ SIZE_T TagsSize;
+ PVOID Tags;
+}; // PROGGROUP, *PPROGGROUP;
+
+
+typedef struct _GLOBALS
{
- HANDLE hInstance;
- HANDLE hAccel;
- HWND hMainWnd;
- HWND hMDIWnd;
- HICON hMainIcon;
- HICON hGroupIcon;
- HICON hDefaultIcon;
- HMENU hMainMenu;
- HMENU hFileMenu;
- HMENU hOptionMenu;
- HMENU hWindowsMenu;
- HMENU hLanguageMenu;
- LPCSTR lpszIniFile;
-#ifndef __REACTOS__
- LPCSTR lpszIcoFile;
-#endif
- BOOL bAutoArrange;
- BOOL bSaveSettings;
- BOOL bMinOnRun;
- HLOCAL hGroups;
- HLOCAL hActiveGroup;
-} GLOBALS;
+ HINSTANCE hInstance;
+ HACCEL hAccel;
+ HWND hMainWnd;
+ HWND hMDIWnd;
+ HICON hDefaultIcon;
+ HICON hMainIcon;
+ // HICON hGroupIcon;
+ HICON hPersonalGroupIcon;
+ HICON hCommonGroupIcon;
+ HMENU hMainMenu;
+ HMENU hFileMenu;
+ HMENU hOptionMenu;
+ HMENU hWindowsMenu;
+ HMENU hLanguageMenu;
+
+ HKEY hKeyProgMan;
+ HKEY hKeyPMSettings;
+ HKEY hKeyPMCommonGroups;
+ HKEY hKeyPMAnsiGroups;
+ HKEY hKeyPMUnicodeGroups;
+ HKEY hKeyAnsiGroups;
+ HKEY hKeyUnicodeGroups;
+ HKEY hKeyCommonGroups;
+
+ BOOL bAutoArrange;
+ BOOL bSaveSettings;
+ BOOL bMinOnRun;
+ PROGGROUP* hGroups;
+ PROGGROUP* hActiveGroup;
+ // int field_74;
+ // int field_78;
+ // PROGGROUP* field_79;
+} GLOBALS, *PGLOBALS;
extern GLOBALS Globals;
+extern WCHAR szTitle[256];
+
+
+/*
+ * Memory management functions
+ */
+PVOID
+Alloc(IN DWORD dwFlags,
+ IN SIZE_T dwBytes);
+
+BOOL
+Free(IN PVOID lpMem);
+
+PVOID
+ReAlloc(IN DWORD dwFlags,
+ IN PVOID lpMem,
+ IN SIZE_T dwBytes);
+
+PVOID
+AppendToBuffer(IN PVOID pBuffer,
+ IN PSIZE_T pdwBufferSize,
+ IN PVOID pData,
+ IN SIZE_T dwDataSize);
+
INT MAIN_MessageBoxIDS(UINT ids_text, UINT ids_title, WORD type);
-INT MAIN_MessageBoxIDS_s(UINT ids_text_s, LPCSTR str, UINT ids_title, WORD type);
-VOID MAIN_ReplaceString(HLOCAL *handle, LPSTR replacestring);
-
-HLOCAL GRPFILE_ReadGroupFile(const char* path);
-BOOL GRPFILE_WriteGroupFile(HLOCAL hGroup);
-
-ATOM GROUP_RegisterGroupWinClass(void);
-HLOCAL GROUP_AddGroup(LPCSTR lpszName, LPCSTR lpszGrpFile, INT nCmdShow,
- INT x, INT y, INT width, INT height,
- INT iconx, INT icony,
- BOOL bFileNameModified, BOOL bOverwriteFileOk,
- /* FIXME shouldn't be necessary */
- BOOL bSuppressShowWindow);
-VOID GROUP_NewGroup(void);
-VOID GROUP_ModifyGroup(HLOCAL hGroup);
-VOID GROUP_DeleteGroup(HLOCAL hGroup);
+INT MAIN_MessageBoxIDS_s(UINT ids_text, LPCWSTR str, UINT ids_title, WORD type);
+VOID MAIN_ReplaceString(LPWSTR* string, LPWSTR replace);
+
+DWORD GRPFILE_ReadGroupFile(LPCWSTR lpszPath, BOOL bIsCommonGroup);
+BOOL GRPFILE_WriteGroupFile(PROGGROUP* hGroup);
+
+ATOM GROUP_RegisterGroupWinClass(VOID);
+PROGGROUP* GROUP_AddGroup(GROUPFORMAT format, BOOL bIsCommonGroup, LPCWSTR lpszName, LPCWSTR lpszGrpFile,
+ INT left, INT top, INT right, INT bottom, INT xMin, INT yMin, INT nCmdShow,
+ WORD cxIcon, WORD cyIcon, BOOL bOverwriteFileOk,
+ /* FIXME shouldn't be necessary */
+ BOOL bSuppressShowWindow);
+VOID GROUP_NewGroup(GROUPFORMAT format, BOOL bIsCommonGroup);
+VOID GROUP_ModifyGroup(PROGGROUP* hGroup);
+VOID GROUP_DeleteGroup(PROGGROUP* hGroup);
/* FIXME shouldn't be necessary */
-VOID GROUP_ShowGroupWindow(HLOCAL hGroup);
-HLOCAL GROUP_FirstGroup(void);
-HLOCAL GROUP_NextGroup(HLOCAL hGroup);
-HLOCAL GROUP_ActiveGroup(void);
-HWND GROUP_GroupWnd(HLOCAL hGroup);
-LPCSTR GROUP_GroupName(HLOCAL hGroup);
-
-ATOM PROGRAM_RegisterProgramWinClass(void);
-HLOCAL PROGRAM_AddProgram(HLOCAL hGroup, HICON hIcon, LPCSTR lpszName,
- INT x, INT y, LPCSTR lpszCmdLine,
- LPCSTR lpszIconFile, INT nIconIndex,
- LPCSTR lpszWorkDir, INT nHotKey, INT nCmdShow);
-VOID PROGRAM_NewProgram(HLOCAL hGroup);
-VOID PROGRAM_ModifyProgram(HLOCAL hProgram);
-VOID PROGRAM_CopyMoveProgram(HLOCAL hProgram, BOOL bMove);
-VOID PROGRAM_DeleteProgram(HLOCAL hProgram, BOOL BUpdateGrpFile);
-HLOCAL PROGRAM_FirstProgram(HLOCAL hGroup);
-HLOCAL PROGRAM_NextProgram(HLOCAL hProgram);
-HLOCAL PROGRAM_ActiveProgram(HLOCAL hGroup);
-LPCSTR PROGRAM_ProgramName(HLOCAL hProgram);
-VOID PROGRAM_ExecuteProgram(HLOCAL hLocal);
-
-INT DIALOG_New(INT nDefault);
-HLOCAL DIALOG_CopyMove(LPCSTR lpszProgramName, LPCSTR lpszGroupName, BOOL bMove);
-BOOL DIALOG_Delete(UINT ids_format_s, LPCSTR lpszName);
-BOOL DIALOG_GroupAttributes(LPSTR lpszTitle, LPSTR lpszPath, INT nSize);
-BOOL DIALOG_ProgramAttributes(LPSTR lpszTitle, LPSTR lpszCmdLine,
- LPSTR lpszWorkDir, LPSTR lpszIconFile,
- HICON *lphIcon, INT *nIconIndex,
- INT *lpnHotKey, INT *lpnCmdShow, INT nSize);
-VOID DIALOG_Execute(void);
-
-VOID STRING_LoadMenus(VOID);
+VOID GROUP_ShowGroupWindow(PROGGROUP* hGroup);
+PROGGROUP* GROUP_ActiveGroup(VOID);
+
+PROGRAM* PROGRAM_AddProgram(PROGGROUP* hGroup, HICON hIcon, LPCWSTR lpszName,
+ INT x, INT y, LPCWSTR lpszCmdLine, LPCWSTR lpszIconFile, INT nIconIndex,
+ LPCWSTR lpszWorkDir, INT nHotKey, INT nCmdShow, BOOL bNewVDM);
+VOID PROGRAM_NewProgram(PROGGROUP* hGroup);
+VOID PROGRAM_ModifyProgram(PROGRAM* hProgram);
+VOID PROGRAM_CopyMoveProgram(PROGRAM* hProgram, BOOL bMove);
+VOID PROGRAM_DeleteProgram(PROGRAM* hProgram, BOOL bUpdateGrpFile);
+VOID PROGRAM_ExecuteProgram(PROGRAM* hProgram);
+PROGRAM* PROGRAM_ActiveProgram(PROGGROUP* hGroup);
+
+BOOL DIALOG_New(INT nDefault, PINT pnResult);
+PROGGROUP* DIALOG_CopyMove(PROGRAM* hProgram, BOOL bMove);
+BOOL DIALOG_Delete(UINT ids_text_s, LPCWSTR lpszName);
+BOOL DIALOG_GroupAttributes(GROUPFORMAT format, LPWSTR lpszTitle, LPWSTR lpszGrpFile, INT nSize);
+BOOL DIALOG_ProgramAttributes(LPWSTR lpszTitle, LPWSTR lpszCmdLine, LPWSTR lpszWorkDir, LPWSTR lpszIconFile,
+ HICON* lphIcon, INT* lpnIconIndex, INT* lpnHotKey, INT* lpnCmdShow, BOOL* lpbNewVDM, INT nSize);
+VOID DIALOG_Execute(VOID);
+
+VOID STRING_LoadStrings(VOID);
+VOID STRING_LoadMenus(VOID);
/* Class names */
-extern WCHAR STRING_MAIN_WIN_CLASS_NAME[];
-extern WCHAR STRING_MDI_WIN_CLASS_NAME[];
-extern WCHAR STRING_GROUP_WIN_CLASS_NAME[];
-extern WCHAR STRING_PROGRAM_WIN_CLASS_NAME[];
+#define STRING_MAIN_WIN_CLASS_NAME L"PMMain"
+#define STRING_GROUP_WIN_CLASS_NAME L"PMGroup"
#endif /* PROGMAN_H */
-
-/* Local Variables: */
-/* c-file-style: "GNU" */
-/* End: */