2 * PROJECT: ReactOS Console Configuration DLL
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: dll/win32/console/console.c
5 * PURPOSE: initialization of DLL
6 * PROGRAMMERS: Johannes Anderwald (johannes.anderwald@student.tugraz.at)
11 #define NUM_APPLETS (1)
12 #define WM_SETCONSOLE (WM_USER+10)
15 LONG APIENTRY
InitApplet(HWND hwnd
, UINT uMsg
, LPARAM wParam
, LPARAM lParam
);
16 INT_PTR CALLBACK
OptionsProc(HWND hwndDlg
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
);
17 INT_PTR CALLBACK
FontProc(HWND hwndDlg
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
);
18 INT_PTR CALLBACK
LayoutProc(HWND hwndDlg
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
);
19 INT_PTR CALLBACK
ColorsProc(HWND hwndDlg
, UINT uMsg
, WPARAM wParam
, LPARAM lParam
);
21 HINSTANCE hApplet
= 0;
24 APPLET Applets
[NUM_APPLETS
] =
26 {IDC_CPLICON
, IDS_CPLNAME
, IDS_CPLDESCRIPTION
, InitApplet
}
29 static COLORREF s_Colors
[] =
50 InitPropSheetPage(PROPSHEETPAGE
*psp
, WORD idDlg
, DLGPROC DlgProc
, LPARAM lParam
)
52 ZeroMemory(psp
, sizeof(PROPSHEETPAGE
));
53 psp
->dwSize
= sizeof(PROPSHEETPAGE
);
54 psp
->dwFlags
= PSP_DEFAULT
;
55 psp
->hInstance
= hApplet
;
56 psp
->pszTemplate
= MAKEINTRESOURCE(idDlg
);
57 psp
->pfnDlgProc
= DlgProc
;
64 PConsoleInfo pConInfo
;
66 pConInfo
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, sizeof(ConsoleInfo
));
72 InitConsoleDefaults(PConsoleInfo pConInfo
)
74 /* Initialize struct */
75 pConInfo
->InsertMode
= TRUE
;
76 pConInfo
->HistoryBufferSize
= 50;
77 pConInfo
->NumberOfHistoryBuffers
= 5;
78 pConInfo
->ScreenText
= RGB(192, 192, 192);
79 pConInfo
->ScreenBackground
= RGB(0, 0, 0);
80 pConInfo
->PopupText
= RGB(128, 0, 128);
81 pConInfo
->PopupBackground
= RGB(255, 255, 255);
82 pConInfo
->WindowSize
= (DWORD
)MAKELONG(80, 25);
83 pConInfo
->WindowPosition
= UINT_MAX
;
84 pConInfo
->ScreenBuffer
= MAKELONG(80, 300);
85 pConInfo
->UseRasterFonts
= TRUE
;
86 pConInfo
->FontSize
= (DWORD
)MAKELONG(8, 12);
87 pConInfo
->FontWeight
= FW_NORMAL
;
88 memcpy(pConInfo
->Colors
, s_Colors
, sizeof(s_Colors
));
103 UNREFERENCED_PARAMETER(lParam
);
109 hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_RADIO_APPLY_CURRENT
);
110 SendMessage(hDlgCtrl
, BM_SETCHECK
, BST_CHECKED
, 0);
115 if (LOWORD(wParam
) == IDOK
)
117 hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_RADIO_APPLY_CURRENT
);
118 if ( SendMessage(hDlgCtrl
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
119 EndDialog(hwndDlg
, IDC_RADIO_APPLY_CURRENT
);
121 EndDialog(hwndDlg
, IDC_RADIO_APPLY_ALL
);
123 else if (LOWORD(wParam
) == IDCANCEL
)
125 EndDialog(hwndDlg
, IDCANCEL
);
137 ApplyConsoleInfo(HWND hwndDlg
, PConsoleInfo pConInfo
)
141 res
= DialogBox(hApplet
, MAKEINTRESOURCE(IDD_APPLYOPTIONS
), hwndDlg
, ApplyProc
);
145 /* Don't destroy when user presses cancel */
146 SetWindowLongPtr(hwndDlg
, DWL_MSGRESULT
, PSNRET_INVALID_NOCHANGEPAGE
);
148 else if ( res
== IDC_RADIO_APPLY_ALL
)
150 pConInfo
->AppliedConfig
= TRUE
;
151 SetWindowLongPtr(hwndDlg
, DWL_MSGRESULT
, PSNRET_NOERROR
);
152 SendMessage(pConInfo
->hConsoleWindow
, PM_APPLY_CONSOLE_INFO
, (WPARAM
)pConInfo
, (LPARAM
)TRUE
);
154 else if ( res
== IDC_RADIO_APPLY_CURRENT
)
156 pConInfo
->AppliedConfig
= TRUE
;
157 SetWindowLongPtr(hwndDlg
, DWL_MSGRESULT
, PSNRET_NOERROR
);
158 SendMessage(pConInfo
->hConsoleWindow
, PM_APPLY_CONSOLE_INFO
, (WPARAM
)pConInfo
, (LPARAM
)TRUE
);
164 InitApplet(HWND hwnd
, UINT uMsg
, LPARAM wParam
, LPARAM lParam
)
166 PROPSHEETPAGE psp
[4];
169 PConsoleInfo pConInfo
;
171 PConsoleInfo pSharedInfo
= (PConsoleInfo
)wParam
;
173 UNREFERENCED_PARAMETER(uMsg
);
176 * console.dll shares information with win32csr with wParam, lParam
178 * wParam is a pointer to a ConsoleInfo struct
179 * lParam is a boolean parameter which specifies whether defaults should be shown
182 pConInfo
= AllocConsoleInfo();
191 InitConsoleDefaults(pConInfo
);
195 if (IsBadReadPtr((const void *)pSharedInfo
, sizeof(ConsoleInfo
)))
198 InitConsoleDefaults(pConInfo
);
202 pConInfo
->InsertMode
= pSharedInfo
->InsertMode
;
203 pConInfo
->HistoryBufferSize
= pSharedInfo
->HistoryBufferSize
;
204 pConInfo
->NumberOfHistoryBuffers
= pSharedInfo
->NumberOfHistoryBuffers
;
205 pConInfo
->ScreenText
= pSharedInfo
->ScreenText
;
206 pConInfo
->ScreenBackground
= pSharedInfo
->ScreenBackground
;
207 pConInfo
->PopupText
= pSharedInfo
->PopupText
;
208 pConInfo
->PopupBackground
= pSharedInfo
->PopupBackground
;
209 pConInfo
->WindowSize
= pSharedInfo
->WindowSize
;
210 pConInfo
->WindowPosition
= pSharedInfo
->WindowPosition
;
211 pConInfo
->ScreenBuffer
= pSharedInfo
->ScreenBuffer
;
212 pConInfo
->UseRasterFonts
= pSharedInfo
->UseRasterFonts
;
213 pConInfo
->FontSize
= pSharedInfo
->FontSize
;
214 pConInfo
->FontWeight
= pSharedInfo
->FontWeight
;
215 memcpy(pConInfo
->Colors
, pSharedInfo
->Colors
, sizeof(s_Colors
));
219 /* console window -> is notified on a property change event */
220 pConInfo
->hConsoleWindow
= hwnd
;
222 ZeroMemory(&psh
, sizeof(PROPSHEETHEADER
));
223 psh
.dwSize
= sizeof(PROPSHEETHEADER
);
224 psh
.dwFlags
= PSH_PROPSHEETPAGE
| PSH_NOAPPLYNOW
;
225 if(_tcslen(pConInfo
->szProcessName
))
227 psh
.dwFlags
|= PSH_PROPTITLE
;
228 psh
.pszCaption
= pConInfo
->szProcessName
;
232 if (!GetConsoleTitleW(szTitle
, sizeof(szTitle
)/sizeof(WCHAR
)))
234 _tcscpy(szTitle
, _T("cmd.exe"));
236 szTitle
[(sizeof(szTitle
)/sizeof(WCHAR
))-1] = _T('\0');
237 psh
.pszCaption
= szTitle
;
240 psh
.hwndParent
= hwnd
;
241 psh
.hInstance
= hApplet
;
242 psh
.hIcon
= LoadIcon(hApplet
, MAKEINTRESOURCE(IDC_CPLICON
));
247 InitPropSheetPage(&psp
[i
++], IDD_PROPPAGEOPTIONS
, (DLGPROC
) OptionsProc
, (LPARAM
)pConInfo
);
248 InitPropSheetPage(&psp
[i
++], IDD_PROPPAGEFONT
, (DLGPROC
) FontProc
, (LPARAM
)pConInfo
);
249 InitPropSheetPage(&psp
[i
++], IDD_PROPPAGELAYOUT
, (DLGPROC
) LayoutProc
, (LPARAM
)pConInfo
);
250 InitPropSheetPage(&psp
[i
++], IDD_PROPPAGECOLORS
, (DLGPROC
) ColorsProc
, (LPARAM
)pConInfo
);
252 return (PropertySheet(&psh
) != -1);
255 /* Control Panel Callback */
275 CPLINFO
*CPlInfo
= (CPLINFO
*)lParam2
;
276 CPlInfo
->idIcon
= Applets
[0].idIcon
;
277 CPlInfo
->idName
= Applets
[0].idName
;
278 CPlInfo
->idInfo
= Applets
[0].idDescription
;
283 InitApplet(hwndCPl
, uMsg
, lParam1
, lParam2
);
298 UNREFERENCED_PARAMETER(lpvReserved
);
302 case DLL_PROCESS_ATTACH
:
303 case DLL_THREAD_ATTACH
: