No longer directly accessing debuggee memory.
[wine] / programs / notepad / main.c
1 /*
2  *  Notepad
3  *
4  *  Copyright 1997,98 Marcel Baur <mbaur@g26.ethz.ch>
5  *  To be distributed under the Wine License
6  */
7
8 #include <stdio.h>
9 #include "windows.h"
10
11 #ifdef LCC
12 #include "lcc.h"
13 #endif
14
15 #include "main.h"
16 #include "license.h"
17 #include "dialog.h"
18 #include "language.h"
19
20 NOTEPAD_GLOBALS Globals;
21
22 /***********************************************************************
23  *
24  *           NOTEPAD_MenuCommand
25  *
26  *  All handling of main menu events
27  */
28
29 int NOTEPAD_MenuCommand (WPARAM wParam)
30 {  
31    switch (wParam) {
32      case NP_FILE_NEW:          DIALOG_FileNew(); break;
33      case NP_FILE_OPEN:         DIALOG_FileOpen(); break;
34      case NP_FILE_SAVE:         DIALOG_FileSave(); break;
35      case NP_FILE_SAVEAS:       DIALOG_FileSaveAs(); break;
36      case NP_FILE_PRINT:        DIALOG_FilePrint(); break;
37      case NP_FILE_PAGESETUP:    DIALOG_FilePageSetup(); break;
38      case NP_FILE_PRINTSETUP:   DIALOG_FilePrinterSetup();break;
39      case NP_FILE_EXIT:         DIALOG_FileExit(); break;
40
41      case NP_EDIT_UNDO:         DIALOG_EditUndo(); break;
42      case NP_EDIT_CUT:          DIALOG_EditCut(); break;
43      case NP_EDIT_COPY:         DIALOG_EditCopy(); break;
44      case NP_EDIT_PASTE:        DIALOG_EditPaste(); break;
45      case NP_EDIT_DELETE:       DIALOG_EditDelete(); break;
46      case NP_EDIT_SELECTALL:    DIALOG_EditSelectAll(); break;
47      case NP_EDIT_TIMEDATE:     DIALOG_EditTimeDate();break;
48      case NP_EDIT_WRAP:         DIALOG_EditWrap(); break;
49
50      case NP_SEARCH_SEARCH:     DIALOG_Search(); break;
51      case NP_SEARCH_NEXT:       DIALOG_SearchNext(); break;
52
53      case NP_HELP_CONTENTS:     DIALOG_HelpContents(); break;
54      case NP_HELP_SEARCH:       DIALOG_HelpSearch(); break;
55      case NP_HELP_ON_HELP:      DIALOG_HelpHelp(); break;
56      case NP_HELP_LICENSE:      DIALOG_HelpLicense(); break;
57      case NP_HELP_NO_WARRANTY:  DIALOG_HelpNoWarranty(); break;
58      case NP_HELP_ABOUT_WINE:   DIALOG_HelpAboutWine(); break;
59      
60      /* Handle languages */
61      default:
62       LANGUAGE_DefaultHandle(wParam);
63    }
64    return 0;
65 }
66
67
68
69 /***********************************************************************
70  *
71  *           NOTEPAD_WndProc
72  */
73
74 LRESULT NOTEPAD_WndProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
75 {
76     PAINTSTRUCT ps;
77     HDC hContext;
78     HANDLE hDrop;                      /* drag & drop */
79     CHAR szFileName[MAX_STRING_LEN];
80     RECT Windowsize;
81
82     lstrcpy(szFileName, "");
83
84     switch (msg) {
85
86        case WM_CREATE:
87         break;
88
89        case WM_PAINT:
90           hContext = BeginPaint(hWnd, &ps);
91           TextOut(hContext, 1, 1, Globals.Buffer, strlen(Globals.Buffer));
92           EndPaint(hWnd, &ps);
93         break;
94
95        case WM_COMMAND:
96           NOTEPAD_MenuCommand(wParam);
97           break;
98
99        case WM_DESTROYCLIPBOARD:
100           MessageBox(Globals.hMainWnd, "Empty clipboard", "Debug", MB_ICONEXCLAMATION);
101           break;
102
103        case WM_CLOSE:
104           if (DoCloseFile()) {
105              PostQuitMessage(0);
106           }
107           break;
108
109        case WM_DESTROY:
110              PostQuitMessage (0);
111           break;
112
113        case WM_SIZE:
114           GetClientRect(Globals.hMainWnd, &Windowsize);
115           break;
116
117        case WM_DROPFILES:
118           /* User has dropped a file into main window */
119           hDrop = (HANDLE) wParam;
120           DragQueryFile(hDrop, 0, (CHAR *) &szFileName, sizeof(szFileName));
121           DragFinish(hDrop);
122           DoOpenFile(szFileName);
123           break;        
124
125        default:
126           return DefWindowProc (hWnd, msg, wParam, lParam);
127     }
128     return 0l;
129 }
130
131
132
133 /***********************************************************************
134  *
135  *           WinMain
136  */
137
138 int PASCAL WinMain (HANDLE hInstance, HANDLE prev, LPSTR cmdline, int show)
139 {
140     MSG      msg;
141     WNDCLASS class;
142     char className[] = "NPClass";  /* To make sure className >= 0x10000 */
143     char winName[]   = "Notepad";
144
145     /* Select Language */
146     LANGUAGE_Init();
147
148
149     /* Setup Globals */
150
151     Globals.lpszIniFile = "notepad.ini";
152     Globals.lpszIcoFile = "notepad.ico";
153
154     Globals.hInstance       = hInstance;
155
156 #ifndef LCC
157     Globals.hMainIcon       = ExtractIcon(Globals.hInstance, 
158                                         Globals.lpszIcoFile, 0);
159 #endif
160     if (!Globals.hMainIcon) {
161         Globals.hMainIcon = LoadIcon(0, MAKEINTRESOURCE(DEFAULTICON));
162     }
163
164     lstrcpy(Globals.szFindText,     "");
165     lstrcpy(Globals.szFileName,     "");
166     lstrcpy(Globals.szMarginTop,    "25 mm");
167     lstrcpy(Globals.szMarginBottom, "25 mm");
168     lstrcpy(Globals.szMarginLeft,   "20 mm");
169     lstrcpy(Globals.szMarginRight,  "20 mm");
170     lstrcpy(Globals.szHeader,       "&n");
171     lstrcpy(Globals.szFooter,       "Page &s");
172     lstrcpy(Globals.Buffer, "Hello World");
173
174     if (!prev){
175         class.style         = CS_HREDRAW | CS_VREDRAW;
176         class.lpfnWndProc   = NOTEPAD_WndProc;
177         class.cbClsExtra    = 0;
178         class.cbWndExtra    = 0;
179         class.hInstance     = Globals.hInstance;
180         class.hIcon         = LoadIcon (0, IDI_APPLICATION);
181         class.hCursor       = LoadCursor (0, IDC_ARROW);
182         class.hbrBackground = GetStockObject (WHITE_BRUSH);
183         class.lpszMenuName  = 0;
184         class.lpszClassName = className;
185     }
186
187     if (!RegisterClass (&class)) return FALSE;
188
189     /* Setup windows */
190
191
192     Globals.hMainWnd = CreateWindow (className, winName, 
193        WS_OVERLAPPEDWINDOW + WS_HSCROLL + WS_VSCROLL,
194        CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, 0, 
195        LoadMenu(Globals.hInstance, STRING_MENU_Xx),
196        Globals.hInstance, 0);
197
198     Globals.hFindReplaceDlg = 0;
199
200     LANGUAGE_SelectByName(Globals.lpszLanguage);
201
202     SetMenu(Globals.hMainWnd, Globals.hMainMenu);               
203                         
204     ShowWindow (Globals.hMainWnd, show);
205     UpdateWindow (Globals.hMainWnd);
206
207     /* Set up dialogs */
208
209     /* Identify Messages originating from FindReplace */
210
211     Globals.nCommdlgFindReplaceMsg = RegisterWindowMessage("commdlg_FindReplace");
212     if (Globals.nCommdlgFindReplaceMsg==0) {
213        MessageBox(Globals.hMainWnd, "Could not register commdlg_FindReplace window message", 
214                   "Error", MB_ICONEXCLAMATION);
215     }
216
217     /* now handle command line */
218     
219     while (*cmdline && (*cmdline == ' ' || *cmdline == '-')) 
220     
221     {
222         CHAR   option;
223 /*      LPCSTR topic_id; */
224
225         if (*cmdline++ == ' ') continue;
226
227         option = *cmdline;
228         if (option) cmdline++;
229         while (*cmdline && *cmdline == ' ') cmdline++;
230
231         switch(option)
232         {
233             case 'p':
234             case 'P': printf("Print file: ");
235                       /* Not yet able to print a file */
236                       break;
237         }
238     }
239
240     /* Set up Drag&Drop */
241
242     DragAcceptFiles(Globals.hMainWnd, TRUE);
243
244     MessageBox(Globals.hMainWnd, "BEWARE!\nThis is ALPHA software that may destroy your file system.\nPlease take care.", 
245     "A note from the developer...", MB_ICONEXCLAMATION);
246
247     /* now enter mesage loop     */
248     
249     while (GetMessage (&msg, 0, 0, 0)) {
250         if (IsDialogMessage(Globals.hFindReplaceDlg, &msg)!=0) {
251           /* Message belongs to FindReplace dialog */
252           /* We just let IsDialogMessage handle it */
253         } 
254           else
255         { 
256           /* Message belongs to the Notepad Main Window */
257           TranslateMessage (&msg);
258           DispatchMessage (&msg);
259         }
260     }
261     return 0;
262 }