ReactOS  0.4.15-dev-2964-ge2a8585
dialog.c
Go to the documentation of this file.
1 /*
2  * Notepad (dialog.c)
3  *
4  * Copyright 1998,99 Marcel Baur <mbaur@g26.ethz.ch>
5  * Copyright 2002 Sylvain Petreolle <spetreolle@yahoo.fr>
6  * Copyright 2002 Andriy Palamarchuk
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12  *
13  * This library is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with this library; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21  */
22 
23 #include "notepad.h"
24 
25 #include <assert.h>
26 #include <commctrl.h>
27 #include <strsafe.h>
28 
30 
31 static const TCHAR helpfile[] = _T("notepad.hlp");
32 static const TCHAR empty_str[] = _T("");
33 static const TCHAR szDefaultExt[] = _T("txt");
34 static const TCHAR txt_files[] = _T("*.txt");
35 
37 
39 {
41  if (error != NO_ERROR)
42  {
43  LPTSTR lpMsgBuf = NULL;
45 
47 
49  NULL,
50  error,
51  0,
52  (LPTSTR) &lpMsgBuf,
53  0,
54  NULL);
55 
56  MessageBox(NULL, lpMsgBuf, szTitle, MB_OK | MB_ICONERROR);
57  LocalFree(lpMsgBuf);
58  }
59 }
60 
66 void UpdateWindowCaption(BOOL clearModifyAlert)
67 {
68  TCHAR szCaption[MAX_STRING_LEN];
69  TCHAR szNotepad[MAX_STRING_LEN];
70  TCHAR szFilename[MAX_STRING_LEN];
71 
72  /* Load the name of the application */
73  LoadString(Globals.hInstance, STRING_NOTEPAD, szNotepad, ARRAY_SIZE(szNotepad));
74 
75  /* Determine if the file has been saved or if this is a new file */
76  if (Globals.szFileTitle[0] != 0)
77  StringCchCopy(szFilename, ARRAY_SIZE(szFilename), Globals.szFileTitle);
78  else
79  LoadString(Globals.hInstance, STRING_UNTITLED, szFilename, ARRAY_SIZE(szFilename));
80 
81  /* When a file is being opened or created, there is no need to have the edited flag shown
82  when the new or opened file has not been edited yet */
83  if (clearModifyAlert)
84  {
85  StringCbPrintf(szCaption, sizeof(szCaption), _T("%s - %s"),
86  szFilename, szNotepad);
87  }
88  else
89  {
90  BOOL isModified = (SendMessage(Globals.hEdit, EM_GETMODIFY, 0, 0) ? TRUE : FALSE);
91 
92  /* Update the caption based upon if the user has modified the contents of the file or not */
93  StringCbPrintf(szCaption, sizeof(szCaption), _T("%s%s - %s"),
94  (isModified ? _T("*") : _T("")), szFilename, szNotepad);
95  }
96 
97  /* Update the window caption */
98  SetWindowText(Globals.hMainWnd, szCaption);
99 }
100 
101 int DIALOG_StringMsgBox(HWND hParent, int formatId, LPCTSTR szString, DWORD dwFlags)
102 {
103  TCHAR szMessage[MAX_STRING_LEN];
104  TCHAR szResource[MAX_STRING_LEN];
105 
106  /* Load and format szMessage */
107  LoadString(Globals.hInstance, formatId, szResource, ARRAY_SIZE(szResource));
108  _sntprintf(szMessage, ARRAY_SIZE(szMessage), szResource, szString);
109 
110  /* Load szCaption */
112  LoadString(Globals.hInstance, STRING_ERROR, szResource, ARRAY_SIZE(szResource));
113  else
114  LoadString(Globals.hInstance, STRING_NOTEPAD, szResource, ARRAY_SIZE(szResource));
115 
116  /* Display Modal Dialog */
117  // if (hParent == NULL)
118  // hParent = Globals.hMainWnd;
119  return MessageBox(hParent, szMessage, szResource, dwFlags);
120 }
121 
122 static void AlertFileNotFound(LPCTSTR szFileName)
123 {
125 }
126 
127 static int AlertFileNotSaved(LPCTSTR szFileName)
128 {
129  TCHAR szUntitled[MAX_STRING_LEN];
130 
131  LoadString(Globals.hInstance, STRING_UNTITLED, szUntitled, ARRAY_SIZE(szUntitled));
132 
134  szFileName[0] ? szFileName : szUntitled,
136 }
137 
138 static void AlertPrintError(void)
139 {
140  TCHAR szUntitled[MAX_STRING_LEN];
141 
142  LoadString(Globals.hInstance, STRING_UNTITLED, szUntitled, ARRAY_SIZE(szUntitled));
143 
145  Globals.szFileName[0] ? Globals.szFileName : szUntitled,
147 }
148 
155 {
157  HANDLE hFile;
158 
159  hFile = FindFirstFile(szFilename, &entry);
160  FindClose(hFile);
161 
162  return (hFile != INVALID_HANDLE_VALUE);
163 }
164 
166 {
167  LPCTSTR s;
168 
169  s = _tcsrchr(szFilename, _T('\\'));
170  if (s)
171  szFilename = s;
172  return _tcsrchr(szFilename, _T('.')) != NULL;
173 }
174 
176 {
177  DWORD dwStart = 0;
178  DWORD dwEnd = 0;
179 
180  SendMessage(hWnd, EM_GETSEL, (WPARAM)&dwStart, (LPARAM)&dwEnd);
181 
182  return dwEnd - dwStart;
183 }
184 
186 {
187  DWORD dwStart = 0;
188  DWORD dwEnd = 0;
189  DWORD dwSize;
190  HRESULT hResult;
191  LPTSTR lpTemp;
192 
193  if (!lpString)
194  {
195  return 0;
196  }
197 
198  SendMessage(hWnd, EM_GETSEL, (WPARAM)&dwStart, (LPARAM)&dwEnd);
199 
200  if (dwStart == dwEnd)
201  {
202  return 0;
203  }
204 
206  lpTemp = HeapAlloc(GetProcessHeap(), 0, dwSize * sizeof(TCHAR));
207  if (!lpTemp)
208  {
209  return 0;
210  }
211 
212  dwSize = GetWindowText(hWnd, lpTemp, dwSize);
213 
214  if (!dwSize)
215  {
216  HeapFree(GetProcessHeap(), 0, lpTemp);
217  return 0;
218  }
219 
220  hResult = StringCchCopyN(lpString, nMaxCount, lpTemp + dwStart, dwEnd - dwStart);
221  HeapFree(GetProcessHeap(), 0, lpTemp);
222 
223  switch (hResult)
224  {
225  case S_OK:
226  {
227  return dwEnd - dwStart;
228  }
229 
231  {
232  return nMaxCount - 1;
233  }
234 
235  default:
236  {
237  return 0;
238  }
239  }
240 }
241 
242 static RECT
244 {
245  int iLogPixelsX, iLogPixelsY;
246  int iHorzRes, iVertRes;
247  int iPhysPageX, iPhysPageY, iPhysPageW, iPhysPageH;
248  RECT rcPrintRect;
249 
250  iPhysPageX = GetDeviceCaps(hdc, PHYSICALOFFSETX);
251  iPhysPageY = GetDeviceCaps(hdc, PHYSICALOFFSETY);
252  iPhysPageW = GetDeviceCaps(hdc, PHYSICALWIDTH);
253  iPhysPageH = GetDeviceCaps(hdc, PHYSICALHEIGHT);
254  iLogPixelsX = GetDeviceCaps(hdc, LOGPIXELSX);
255  iLogPixelsY = GetDeviceCaps(hdc, LOGPIXELSY);
256  iHorzRes = GetDeviceCaps(hdc, HORZRES);
257  iVertRes = GetDeviceCaps(hdc, VERTRES);
258 
259  rcPrintRect.left = (margins.left * iLogPixelsX / 2540) - iPhysPageX;
260  rcPrintRect.top = (margins.top * iLogPixelsY / 2540) - iPhysPageY;
261  rcPrintRect.right = iHorzRes - (((margins.left * iLogPixelsX / 2540) - iPhysPageX) + ((margins.right * iLogPixelsX / 2540) - (iPhysPageW - iPhysPageX - iHorzRes)));
262  rcPrintRect.bottom = iVertRes - (((margins.top * iLogPixelsY / 2540) - iPhysPageY) + ((margins.bottom * iLogPixelsY / 2540) - (iPhysPageH - iPhysPageY - iVertRes)));
263 
264  return rcPrintRect;
265 }
266 
268 {
269  BOOL bRet = TRUE;
270  HANDLE hFile;
271  LPTSTR pTemp;
272  DWORD size;
273 
277  {
278  ShowLastError();
279  return FALSE;
280  }
281 
282  size = GetWindowTextLength(Globals.hEdit) + 1;
283  pTemp = HeapAlloc(GetProcessHeap(), 0, size * sizeof(*pTemp));
284  if (!pTemp)
285  {
287  ShowLastError();
288  return FALSE;
289  }
290  size = GetWindowText(Globals.hEdit, pTemp, size);
291 
292  if (size)
293  {
294  if (!WriteText(hFile, (LPWSTR)pTemp, size, Globals.encFile, Globals.iEoln))
295  {
296  ShowLastError();
297  bRet = FALSE;
298  }
299  else
300  {
302  bRet = TRUE;
303  }
304  }
305 
307  HeapFree(GetProcessHeap(), 0, pTemp);
308 
309  if (bRet)
310  {
311  SetFileName(Globals.szFileName);
312  }
313 
314  return bRet;
315 }
316 
323 {
324  int nResult;
325 
326  if (SendMessage(Globals.hEdit, EM_GETMODIFY, 0, 0))
327  {
328  /* prompt user to save changes */
329  nResult = AlertFileNotSaved(Globals.szFileName);
330  switch (nResult)
331  {
332  case IDYES:
333  if(!DIALOG_FileSave())
334  return FALSE;
335  break;
336 
337  case IDNO:
338  break;
339 
340  case IDCANCEL:
341  return FALSE;
342 
343  default:
344  return FALSE;
345  }
346  }
347 
350 
351  return TRUE;
352 }
353 
355 {
356  static const TCHAR dotlog[] = _T(".LOG");
357  HANDLE hFile;
358  LPTSTR pszText = NULL;
359  DWORD dwTextLen;
360  TCHAR log[5];
361 
362  /* Close any files and prompt to save changes */
363  if (!DoCloseFile())
364  return;
365 
369  {
370  ShowLastError();
371  goto done;
372  }
373 
374  if (!ReadText(hFile, (LPWSTR *)&pszText, &dwTextLen, &Globals.encFile, &Globals.iEoln))
375  {
376  ShowLastError();
377  goto done;
378  }
379  SetWindowText(Globals.hEdit, pszText);
380 
382  SendMessage(Globals.hEdit, EM_EMPTYUNDOBUFFER, 0, 0);
383  SetFocus(Globals.hEdit);
384 
385  /* If the file starts with .LOG, add a time/date at the end and set cursor after
386  * See http://support.microsoft.com/?kbid=260563
387  */
388  if (GetWindowText(Globals.hEdit, log, ARRAY_SIZE(log)) && !_tcscmp(log, dotlog))
389  {
390  static const TCHAR lf[] = _T("\r\n");
395  }
396 
397  SetFileName(szFileName);
400 done:
403  if (pszText)
404  HeapFree(GetProcessHeap(), 0, pszText);
405 }
406 
408 {
409  /* Close any files and prompt to save changes */
410  if (DoCloseFile()) {
412  SendMessage(Globals.hEdit, EM_EMPTYUNDOBUFFER, 0, 0);
413  SetFocus(Globals.hEdit);
415  }
416 }
417 
419 {
420  TCHAR pszNotepadExe[MAX_PATH];
421  GetModuleFileName(NULL, pszNotepadExe, ARRAYSIZE(pszNotepadExe));
422  ShellExecute(NULL, NULL, pszNotepadExe, NULL, NULL, SW_SHOWNORMAL);
423 }
424 
426 {
427  OPENFILENAME openfilename;
429 
430  ZeroMemory(&openfilename, sizeof(openfilename));
431 
432  if (Globals.szFileName[0] == 0)
434  else
435  _tcscpy(szPath, Globals.szFileName);
436 
437  openfilename.lStructSize = sizeof(openfilename);
438  openfilename.hwndOwner = Globals.hMainWnd;
439  openfilename.hInstance = Globals.hInstance;
440  openfilename.lpstrFilter = Globals.szFilter;
441  openfilename.lpstrFile = szPath;
442  openfilename.nMaxFile = ARRAY_SIZE(szPath);
444  openfilename.lpstrDefExt = szDefaultExt;
445 
446  if (GetOpenFileName(&openfilename)) {
447  if (FileExists(openfilename.lpstrFile))
448  DoOpenFile(openfilename.lpstrFile);
449  else
450  AlertFileNotFound(openfilename.lpstrFile);
451  }
452 }
453 
455 {
456  if (Globals.szFileName[0] == 0)
457  {
458  return DIALOG_FileSaveAs();
459  }
460  else if (DoSaveFile())
461  {
463  return TRUE;
464  }
465  return FALSE;
466 }
467 
468 static UINT_PTR
469 CALLBACK
471 {
472  TCHAR szText[128];
473  HWND hCombo;
474 
476 
477  switch(msg)
478  {
479  case WM_INITDIALOG:
480  hCombo = GetDlgItem(hDlg, ID_ENCODING);
481 
483  SendMessage(hCombo, CB_ADDSTRING, 0, (LPARAM) szText);
484 
486  SendMessage(hCombo, CB_ADDSTRING, 0, (LPARAM) szText);
487 
489  SendMessage(hCombo, CB_ADDSTRING, 0, (LPARAM) szText);
490 
492  SendMessage(hCombo, CB_ADDSTRING, 0, (LPARAM) szText);
493 
494  SendMessage(hCombo, CB_SETCURSEL, Globals.encFile, 0);
495 
496  hCombo = GetDlgItem(hDlg, ID_EOLN);
497 
499  SendMessage(hCombo, CB_ADDSTRING, 0, (LPARAM) szText);
500 
502  SendMessage(hCombo, CB_ADDSTRING, 0, (LPARAM) szText);
503 
505  SendMessage(hCombo, CB_ADDSTRING, 0, (LPARAM) szText);
506 
507  SendMessage(hCombo, CB_SETCURSEL, Globals.iEoln, 0);
508  break;
509 
510  case WM_NOTIFY:
511  if (((NMHDR *) lParam)->code == CDN_FILEOK)
512  {
513  hCombo = GetDlgItem(hDlg, ID_ENCODING);
514  if (hCombo)
515  Globals.encFile = (ENCODING) SendMessage(hCombo, CB_GETCURSEL, 0, 0);
516 
517  hCombo = GetDlgItem(hDlg, ID_EOLN);
518  if (hCombo)
519  Globals.iEoln = (int) SendMessage(hCombo, CB_GETCURSEL, 0, 0);
520  }
521  break;
522  }
523  return 0;
524 }
525 
527 {
528  OPENFILENAME saveas;
530 
531  ZeroMemory(&saveas, sizeof(saveas));
532 
533  if (Globals.szFileName[0] == 0)
535  else
536  _tcscpy(szPath, Globals.szFileName);
537 
538  saveas.lStructSize = sizeof(OPENFILENAME);
539  saveas.hwndOwner = Globals.hMainWnd;
540  saveas.hInstance = Globals.hInstance;
541  saveas.lpstrFilter = Globals.szFilter;
542  saveas.lpstrFile = szPath;
543  saveas.nMaxFile = ARRAY_SIZE(szPath);
546  saveas.lpstrDefExt = szDefaultExt;
549 
550  if (GetSaveFileName(&saveas))
551  {
552  /* HACK: Because in ROS, Save-As boxes don't check the validity
553  * of file names and thus, here, szPath can be invalid !! We only
554  * see its validity when we call DoSaveFile()... */
556  if (DoSaveFile())
557  {
559  return TRUE;
560  }
561  else
562  {
563  SetFileName(_T(""));
564  return FALSE;
565  }
566  }
567  else
568  {
569  return FALSE;
570  }
571 }
572 
574 {
575  DOCINFO di;
576  TEXTMETRIC tm;
577  PRINTDLG printer;
578  SIZE szMetric;
579  int border;
580  int xLeft, yTop, pagecount, dopage, copycount;
581  unsigned int i;
582  LOGFONT hdrFont;
583  HFONT font, old_font=0;
584  DWORD size;
585  LPTSTR pTemp;
586  static const TCHAR times_new_roman[] = _T("Times New Roman");
587  RECT rcPrintRect;
588 
589  /* Get a small font and print some header info on each page */
590  ZeroMemory(&hdrFont, sizeof(hdrFont));
591  hdrFont.lfHeight = 100;
592  hdrFont.lfWeight = FW_BOLD;
593  hdrFont.lfCharSet = ANSI_CHARSET;
596  hdrFont.lfQuality = PROOF_QUALITY;
598  _tcscpy(hdrFont.lfFaceName, times_new_roman);
599 
600  font = CreateFontIndirect(&hdrFont);
601 
602  /* Get Current Settings */
603  ZeroMemory(&printer, sizeof(printer));
604  printer.lStructSize = sizeof(printer);
605  printer.hwndOwner = Globals.hMainWnd;
606  printer.hInstance = Globals.hInstance;
607 
608  /* Set some default flags */
609  printer.Flags = PD_RETURNDC | PD_SELECTION;
610 
611  /* Disable the selection radio button if there is no text selected */
612  if (!GetSelectionTextLength(Globals.hEdit))
613  {
614  printer.Flags = printer.Flags | PD_NOSELECTION;
615  }
616 
617  printer.nFromPage = 0;
618  printer.nMinPage = 1;
619  /* we really need to calculate number of pages to set nMaxPage and nToPage */
620  printer.nToPage = (WORD)-1;
621  printer.nMaxPage = (WORD)-1;
622 
623  /* Let commdlg manage copy settings */
624  printer.nCopies = (WORD)PD_USEDEVMODECOPIES;
625 
626  printer.hDevMode = Globals.hDevMode;
627  printer.hDevNames = Globals.hDevNames;
628 
629  if (!PrintDlg(&printer))
630  {
632  return;
633  }
634 
635  Globals.hDevMode = printer.hDevMode;
636  Globals.hDevNames = printer.hDevNames;
637 
638  assert(printer.hDC != 0);
639 
640  /* initialize DOCINFO */
641  di.cbSize = sizeof(DOCINFO);
642  di.lpszDocName = Globals.szFileTitle;
643  di.lpszOutput = NULL;
644  di.lpszDatatype = NULL;
645  di.fwType = 0;
646 
647  if (StartDoc(printer.hDC, &di) <= 0)
648  {
650  return;
651  }
652 
653 
654  /* Get the file text */
655  if (printer.Flags & PD_SELECTION)
656  {
657  size = GetSelectionTextLength(Globals.hEdit) + 1;
658  }
659  else
660  {
661  size = GetWindowTextLength(Globals.hEdit) + 1;
662  }
663 
664  pTemp = HeapAlloc(GetProcessHeap(), 0, size * sizeof(TCHAR));
665  if (!pTemp)
666  {
667  EndDoc(printer.hDC);
669  ShowLastError();
670  return;
671  }
672 
673  if (printer.Flags & PD_SELECTION)
674  {
675  size = GetSelectionText(Globals.hEdit, pTemp, size);
676  }
677  else
678  {
679  size = GetWindowText(Globals.hEdit, pTemp, size);
680  }
681 
682  /* Get the current printing area */
683  rcPrintRect = GetPrintingRect(printer.hDC, Globals.lMargins);
684 
685  /* Ensure that each logical unit maps to one pixel */
686  SetMapMode(printer.hDC, MM_TEXT);
687 
688  /* Needed to get the correct height of a text line */
689  GetTextMetrics(printer.hDC, &tm);
690 
691  border = 15;
692  for (copycount=1; copycount <= printer.nCopies; copycount++) {
693  i = 0;
694  pagecount = 1;
695  do {
696  /* Don't start a page if none of the conditions below are true */
697  dopage = 0;
698 
699  /* The user wants to print the current selection */
700  if (printer.Flags & PD_SELECTION)
701  {
702  dopage = 1;
703  }
704 
705  /* The user wants to print the entire document */
706  if (!(printer.Flags & PD_PAGENUMS) && !(printer.Flags & PD_SELECTION))
707  {
708  dopage = 1;
709  }
710 
711  /* The user wants to print a specified range of pages */
712  if ((pagecount >= printer.nFromPage && pagecount <= printer.nToPage))
713  {
714  dopage = 1;
715  }
716 
717  old_font = SelectObject(printer.hDC, font);
718 
719  if (dopage) {
720  if (StartPage(printer.hDC) <= 0) {
721  SelectObject(printer.hDC, old_font);
722  EndDoc(printer.hDC);
723  DeleteDC(printer.hDC);
724  HeapFree(GetProcessHeap(), 0, pTemp);
726  AlertPrintError();
727  return;
728  }
729 
730  SetViewportOrgEx(printer.hDC, rcPrintRect.left, rcPrintRect.top, NULL);
731 
732  /* Write a rectangle and header at the top of each page */
733  Rectangle(printer.hDC, border, border, rcPrintRect.right - border, border + tm.tmHeight * 2);
734  /* I don't know what's up with this TextOut command. This comes out
735  kind of mangled.
736  */
737  TextOut(printer.hDC,
738  border * 2,
739  border + tm.tmHeight / 2,
740  Globals.szFileTitle,
741  lstrlen(Globals.szFileTitle));
742  }
743 
744  /* The starting point for the main text */
745  xLeft = 0;
746  yTop = border + tm.tmHeight * 4;
747 
748  SelectObject(printer.hDC, old_font);
749 
750  /* Since outputting strings is giving me problems, output the main
751  * text one character at a time. */
752  do {
753  if (pTemp[i] == '\n') {
754  xLeft = 0;
755  yTop += tm.tmHeight;
756  }
757  else if (pTemp[i] != '\r') {
758  if (dopage)
759  TextOut(printer.hDC, xLeft, yTop, &pTemp[i], 1);
760 
761  /* We need to get the width for each individual char, since a proportional font may be used */
762  GetTextExtentPoint32(printer.hDC, &pTemp[i], 1, &szMetric);
763  xLeft += szMetric.cx;
764 
765  /* Insert a line break if the current line does not fit into the printing area */
766  if (xLeft > rcPrintRect.right)
767  {
768  xLeft = 0;
769  yTop = yTop + tm.tmHeight;
770  }
771  }
772  } while (i++ < size && yTop < rcPrintRect.bottom);
773 
774  if (dopage)
775  EndPage(printer.hDC);
776  pagecount++;
777  } while (i < size);
778  }
779 
780  if (old_font != 0)
781  SelectObject(printer.hDC, old_font);
782  EndDoc(printer.hDC);
783  DeleteDC(printer.hDC);
784  HeapFree(GetProcessHeap(), 0, pTemp);
786 }
787 
789 {
791 }
792 
794 {
795  SendMessage(Globals.hEdit, EM_UNDO, 0, 0);
796 }
797 
799 {
800  SendMessage(Globals.hEdit, WM_CUT, 0, 0);
801 }
802 
804 {
805  SendMessage(Globals.hEdit, WM_COPY, 0, 0);
806 }
807 
809 {
810  SendMessage(Globals.hEdit, WM_PASTE, 0, 0);
811 }
812 
814 {
815  SendMessage(Globals.hEdit, WM_CLEAR, 0, 0);
816 }
817 
819 {
820  SendMessage(Globals.hEdit, EM_SETSEL, 0, (LPARAM)-1);
821 }
822 
824 {
825  SYSTEMTIME st;
826  TCHAR szDate[MAX_STRING_LEN];
827  TCHAR szText[MAX_STRING_LEN * 2 + 2];
828 
829  GetLocalTime(&st);
830 
832  _tcscpy(szText, szDate);
833  _tcscat(szText, _T(" "));
835  _tcscat(szText, szDate);
837 }
838 
840 {
841  RECT rc;
842  RECT rcstatus;
843  BOOL bStatusBarVisible;
844 
845  /* Check if status bar object already exists. */
846  if (Globals.hStatusBar == NULL)
847  {
848  /* Try to create the status bar */
850  NULL,
853 
854  if (Globals.hStatusBar == NULL)
855  {
856  ShowLastError();
857  return;
858  }
859 
860  /* Load the string for formatting column/row text output */
861  LoadString(Globals.hInstance, STRING_LINE_COLUMN, Globals.szStatusBarLineCol, MAX_PATH - 1);
862 
863  /* Set the status bar for single-text output */
864  SendMessage(Globals.hStatusBar, SB_SIMPLE, (WPARAM)TRUE, (LPARAM)0);
865  }
866 
867  /* Set status bar visiblity according to the settings. */
868  if ((Globals.bWrapLongLines != FALSE) || (Globals.bShowStatusBar == FALSE))
869  {
870  bStatusBarVisible = FALSE;
871  ShowWindow(Globals.hStatusBar, SW_HIDE);
872  }
873  else
874  {
875  bStatusBarVisible = TRUE;
876  ShowWindow(Globals.hStatusBar, SW_SHOW);
877  SendMessage(Globals.hStatusBar, WM_SIZE, 0, 0);
878  }
879 
880  /* Set check state in show status bar item. */
881  if (bStatusBarVisible)
882  {
884  }
885  else
886  {
888  }
889 
890  /* Update menu mar with the previous changes */
892 
893  /* Sefety test is edit control exists */
894  if (Globals.hEdit != NULL)
895  {
896  /* Retrieve the sizes of the controls */
898  GetClientRect(Globals.hStatusBar, &rcstatus);
899 
900  /* If status bar is currently visible, update dimensions of edit control */
901  if (bStatusBarVisible)
902  rc.bottom -= (rcstatus.bottom - rcstatus.top);
903 
904  /* Resize edit control to right size. */
905  MoveWindow(Globals.hEdit,
906  rc.left,
907  rc.top,
908  rc.right - rc.left,
909  rc.bottom - rc.top,
910  TRUE);
911  }
912 
913  /* Update content with current row/column text */
915 }
916 
918 {
919  DWORD dwStyle;
920  int iSize;
921  LPTSTR pTemp = NULL;
922  BOOL bModified = FALSE;
923 
924  iSize = 0;
925 
926  /* If the edit control already exists, try to save its content */
927  if (Globals.hEdit != NULL)
928  {
929  /* number of chars currently written into the editor. */
930  iSize = GetWindowTextLength(Globals.hEdit);
931  if (iSize)
932  {
933  /* Allocates temporary buffer. */
934  pTemp = HeapAlloc(GetProcessHeap(), 0, (iSize + 1) * sizeof(TCHAR));
935  if (!pTemp)
936  {
937  ShowLastError();
938  return;
939  }
940 
941  /* Recover the text into the control. */
942  GetWindowText(Globals.hEdit, pTemp, iSize + 1);
943 
944  if (SendMessage(Globals.hEdit, EM_GETMODIFY, 0, 0))
945  bModified = TRUE;
946  }
947 
948  /* Restore original window procedure */
950 
951  /* Destroy the edit control */
952  DestroyWindow(Globals.hEdit);
953  }
954 
955  /* Update wrap status into the main menu and recover style flags */
956  if (Globals.bWrapLongLines)
957  {
958  dwStyle = EDIT_STYLE_WRAP;
960  } else {
961  dwStyle = EDIT_STYLE;
963  }
964 
965  /* Update previous changes */
967 
968  /* Create the new edit control */
970  EDIT_CLASS,
971  NULL,
972  dwStyle,
978  NULL,
980  NULL);
981 
982  if (Globals.hEdit == NULL)
983  {
984  if (pTemp)
985  {
986  HeapFree(GetProcessHeap(), 0, pTemp);
987  }
988 
989  ShowLastError();
990  return;
991  }
992 
994  SendMessage(Globals.hEdit, EM_LIMITTEXT, 0, 0);
995 
996  /* If some text was previously saved, restore it. */
997  if (iSize != 0)
998  {
999  SetWindowText(Globals.hEdit, pTemp);
1000  HeapFree(GetProcessHeap(), 0, pTemp);
1001 
1002  if (bModified)
1003  SendMessage(Globals.hEdit, EM_SETMODIFY, TRUE, 0);
1004  }
1005 
1006  /* Sub-class a new window callback for row/column detection. */
1007  Globals.EditProc = (WNDPROC)SetWindowLongPtr(Globals.hEdit,
1008  GWLP_WNDPROC,
1010 
1011  /* Create/update status bar */
1013 
1014  /* Finally shows new edit control and set focus into it. */
1015  ShowWindow(Globals.hEdit, SW_SHOW);
1016  SetFocus(Globals.hEdit);
1017 }
1018 
1020 {
1021  Globals.bWrapLongLines = !Globals.bWrapLongLines;
1022 
1023  if (Globals.bWrapLongLines)
1024  {
1026  }
1027  else
1028  {
1030  }
1031 
1033 }
1034 
1036 {
1037  CHOOSEFONT cf;
1038  LOGFONT lf = Globals.lfFont;
1039 
1040  ZeroMemory( &cf, sizeof(cf) );
1041  cf.lStructSize = sizeof(cf);
1042  cf.hwndOwner = Globals.hMainWnd;
1043  cf.lpLogFont = &lf;
1045 
1046  if (ChooseFont(&cf))
1047  {
1048  HFONT currfont = Globals.hFont;
1049 
1050  Globals.hFont = CreateFontIndirect(&lf);
1051  Globals.lfFont = lf;
1053  if (currfont != NULL)
1054  DeleteObject(currfont);
1055  }
1056 }
1057 
1059 
1061 {
1062  if (Globals.hFindReplaceDlg != NULL)
1063  {
1064  SetFocus(Globals.hFindReplaceDlg);
1065  return;
1066  }
1067 
1068  ZeroMemory(&Globals.find, sizeof(Globals.find));
1069  Globals.find.lStructSize = sizeof(Globals.find);
1070  Globals.find.hwndOwner = Globals.hMainWnd;
1072  Globals.find.lpstrFindWhat = Globals.szFindText;
1073  Globals.find.wFindWhatLen = ARRAY_SIZE(Globals.szFindText);
1074  Globals.find.lpstrReplaceWith = Globals.szReplaceText;
1075  Globals.find.wReplaceWithLen = ARRAY_SIZE(Globals.szReplaceText);
1076  Globals.find.Flags = FR_DOWN;
1077 
1078  /* We only need to create the modal FindReplace dialog which will */
1079  /* notify us of incoming events using hMainWnd Window Messages */
1080 
1081  Globals.hFindReplaceDlg = pfnProc(&Globals.find);
1082  assert(Globals.hFindReplaceDlg != NULL);
1083 }
1084 
1086 {
1088 }
1089 
1091 {
1092  if (Globals.find.lpstrFindWhat != NULL)
1094  else
1095  DIALOG_Search();
1096 }
1097 
1099 {
1101 }
1102 
1103 static INT_PTR
1104 CALLBACK
1106 {
1107  BOOL bResult = FALSE;
1108  HWND hTextBox;
1109  TCHAR szText[32];
1110 
1111  switch(uMsg) {
1112  case WM_INITDIALOG:
1113  hTextBox = GetDlgItem(hwndDialog, ID_LINENUMBER);
1115  SetWindowText(hTextBox, szText);
1116  break;
1117  case WM_COMMAND:
1118  if (HIWORD(wParam) == BN_CLICKED)
1119  {
1120  if (LOWORD(wParam) == IDOK)
1121  {
1122  hTextBox = GetDlgItem(hwndDialog, ID_LINENUMBER);
1123  GetWindowText(hTextBox, szText, ARRAY_SIZE(szText));
1124  EndDialog(hwndDialog, _ttoi(szText));
1125  bResult = TRUE;
1126  }
1127  else if (LOWORD(wParam) == IDCANCEL)
1128  {
1129  EndDialog(hwndDialog, 0);
1130  bResult = TRUE;
1131  }
1132  }
1133  break;
1134  }
1135 
1136  return bResult;
1137 }
1138 
1140 {
1141  INT_PTR nLine;
1142  LPTSTR pszText;
1143  int nLength, i;
1144  DWORD dwStart, dwEnd;
1145 
1147  pszText = (LPTSTR) HeapAlloc(GetProcessHeap(), 0, (nLength + 1) * sizeof(*pszText));
1148  if (!pszText)
1149  return;
1150 
1151  /* Retrieve current text */
1152  GetWindowText(Globals.hEdit, pszText, nLength + 1);
1153  SendMessage(Globals.hEdit, EM_GETSEL, (WPARAM) &dwStart, (LPARAM) &dwEnd);
1154 
1155  nLine = 1;
1156  for (i = 0; (i < (int) dwStart) && pszText[i]; i++)
1157  {
1158  if (pszText[i] == '\n')
1159  nLine++;
1160  }
1161 
1164  Globals.hMainWnd,
1166  nLine);
1167 
1168  if (nLine >= 1)
1169  {
1170  for (i = 0; pszText[i] && (nLine > 1) && (i < nLength - 1); i++)
1171  {
1172  if (pszText[i] == '\n')
1173  nLine--;
1174  }
1175  SendMessage(Globals.hEdit, EM_SETSEL, i, i);
1176  SendMessage(Globals.hEdit, EM_SCROLLCARET, 0, 0);
1177  }
1178  HeapFree(GetProcessHeap(), 0, pszText);
1179 }
1180 
1182 {
1183  int line, col;
1184  TCHAR buff[MAX_PATH];
1185  DWORD dwStart, dwSize;
1186 
1187  SendMessage(Globals.hEdit, EM_GETSEL, (WPARAM)&dwStart, (LPARAM)&dwSize);
1188  line = SendMessage(Globals.hEdit, EM_LINEFROMCHAR, (WPARAM)dwStart, 0);
1189  col = dwStart - SendMessage(Globals.hEdit, EM_LINEINDEX, (WPARAM)line, 0);
1190 
1191  _stprintf(buff, Globals.szStatusBarLineCol, line + 1, col + 1);
1193 }
1194 
1196 {
1197  Globals.bShowStatusBar = !Globals.bShowStatusBar;
1198 
1200 }
1201 
1203 {
1205 }
1206 
1208 {
1209  TCHAR szNotepad[MAX_STRING_LEN];
1210  TCHAR szNotepadAuthors[MAX_STRING_LEN];
1211 
1213 
1214  LoadString(Globals.hInstance, STRING_NOTEPAD, szNotepad, ARRAY_SIZE(szNotepad));
1215  LoadString(Globals.hInstance, STRING_NOTEPAD_AUTHORS, szNotepadAuthors, ARRAY_SIZE(szNotepadAuthors));
1216 
1217  ShellAbout(Globals.hMainWnd, szNotepad, szNotepadAuthors, notepadIcon);
1218  DeleteObject(notepadIcon);
1219 }
1220 
1221 /***********************************************************************
1222  *
1223  * DIALOG_FilePageSetup
1224  */
1226 {
1228 
1229  ZeroMemory(&page, sizeof(page));
1230  page.lStructSize = sizeof(page);
1231  page.hwndOwner = Globals.hMainWnd;
1233  page.hInstance = Globals.hInstance;
1234  page.rtMargin = Globals.lMargins;
1235  page.hDevMode = Globals.hDevMode;
1236  page.hDevNames = Globals.hDevNames;
1237  page.lpPageSetupTemplateName = MAKEINTRESOURCE(DIALOG_PAGESETUP);
1238  page.lpfnPageSetupHook = DIALOG_PAGESETUP_Hook;
1239 
1240  PageSetupDlg(&page);
1241 
1242  Globals.hDevMode = page.hDevMode;
1243  Globals.hDevNames = page.hDevNames;
1244  Globals.lMargins = page.rtMargin;
1245 }
1246 
1247 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
1248  *
1249  * DIALOG_PAGESETUP_Hook
1250  */
1251 
1253 {
1254  switch (msg)
1255  {
1256  case WM_COMMAND:
1257  if (HIWORD(wParam) == BN_CLICKED)
1258  {
1259  switch (LOWORD(wParam))
1260  {
1261  case IDOK:
1262  /* save user input and close dialog */
1263  GetDlgItemText(hDlg, 0x141, Globals.szHeader, ARRAY_SIZE(Globals.szHeader));
1264  GetDlgItemText(hDlg, 0x143, Globals.szFooter, ARRAY_SIZE(Globals.szFooter));
1265  return FALSE;
1266 
1267  case IDCANCEL:
1268  /* discard user input and close dialog */
1269  return FALSE;
1270 
1271  case IDHELP:
1272  {
1273  /* FIXME: Bring this to work */
1274  static const TCHAR sorry[] = _T("Sorry, no help available");
1275  static const TCHAR help[] = _T("Help");
1277  return TRUE;
1278  }
1279 
1280  default:
1281  break;
1282  }
1283  }
1284  break;
1285 
1286  case WM_INITDIALOG:
1287  /* fetch last user input prior to display dialog */
1288  SetDlgItemText(hDlg, 0x141, Globals.szHeader);
1289  SetDlgItemText(hDlg, 0x143, Globals.szFooter);
1290  break;
1291  }
1292 
1293  return FALSE;
1294 }
#define MB_ICONMASK
Definition: winuser.h:813
#define EM_LIMITTEXT
Definition: winuser.h:1982
static UINT_PTR CALLBACK DIALOG_PAGESETUP_Hook(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
Definition: dialog.c:1252
#define OFN_FILEMUSTEXIST
Definition: commdlg.h:106
static IClassFactory * cf
void UpdateWindowCaption(BOOL clearModifyAlert)
Definition: dialog.c:66
#define OFN_EXPLORER
Definition: commdlg.h:104
VOID DIALOG_Search(VOID)
Definition: dialog.c:1085
#define STRING_LINE_COLUMN
Definition: notepad_res.h:100
#define MAKEINTRESOURCE
Definition: winuser.h:591
#define STRING_LF
Definition: notepad_res.h:97
#define HORZRES
Definition: wingdi.h:715
#define LOGPIXELSX
Definition: wingdi.h:717
BOOL WINAPI SetViewportOrgEx(_In_ HDC, _In_ int, _In_ int, _Out_opt_ LPPOINT)
Definition: coord.c:655
static HICON
Definition: imagelist.c:84
#define MF_DISABLED
Definition: winuser.h:130
#define PD_NOSELECTION
Definition: commdlg.h:149
static UINT_PTR CALLBACK DIALOG_FileSaveAs_Hook(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
Definition: dialog.c:470
const CHAR * LPCTSTR
Definition: xmlstorage.h:193
#define IDOK
Definition: winuser.h:824
#define CloseHandle
Definition: compat.h:598
WORD nMaxPage
Definition: commdlg.h:474
BOOL WINAPI DrawMenuBar(_In_ HWND)
#define VARIABLE_PITCH
Definition: wingdi.h:444
static const TCHAR empty_str[]
Definition: dialog.c:32
#define STRING_ANSI
Definition: notepad_res.h:91
#define MF_BYCOMMAND
Definition: winuser.h:202
VOID DoOpenFile(LPCTSTR szFileName)
Definition: dialog.c:354
#define PSD_ENABLEPAGESETUPTEMPLATE
Definition: commdlg.h:184
#define PageSetupDlg
Definition: commdlg.h:667
#define WM_CUT
Definition: winuser.h:1843
#define error(str)
Definition: mkdosfs.c:1605
#define IDYES
Definition: winuser.h:829
VOID DIALOG_FileExit(VOID)
Definition: dialog.c:788
BOOL WINAPI Rectangle(_In_ HDC, _In_ int, _In_ int, _In_ int, _In_ int)
HWND hwndOwner
Definition: commdlg.h:330
#define STRING_UTF8
Definition: notepad_res.h:94
Definition: mk_font.cpp:20
static BOOL DoSaveFile(VOID)
Definition: dialog.c:267
int _tcscmp(const _TCHAR *s1, const _TCHAR *s2)
Definition: tcscmp.h:8
#define TRUE
Definition: types.h:120
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:317
#define SW_HIDE
Definition: winuser.h:762
#define PSD_MARGINS
Definition: commdlg.h:173
VOID DIALOG_EditSelectAll(VOID)
Definition: dialog.c:818
#define LOCALE_USER_DEFAULT
static HDC
Definition: imagelist.c:92
#define CALLBACK
Definition: compat.h:35
_In_ DWORD nLength
Definition: wincon.h:473
HWND hWnd
Definition: settings.c:17
LONG top
Definition: windef.h:307
HANDLE HWND
Definition: compat.h:19
#define ARRAYSIZE(array)
Definition: filtermapper.c:47
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1499
#define WM_PASTE
Definition: winuser.h:1845
#define INVALID_HANDLE_VALUE
Definition: compat.h:590
_TCHAR * _tcscpy(_TCHAR *to, const _TCHAR *from)
Definition: tcscpy.h:8
#define assert(x)
Definition: debug.h:53
#define StringCchCopyN
Definition: strsafe.h:227
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1040
#define ZeroMemory
Definition: winbase.h:1664
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
LPCSTR lpstrDefExt
Definition: commdlg.h:345
#define MAX_STRING_LEN
Definition: precomp.h:36
HWND WINAPI SetFocus(_In_opt_ HWND)
BYTE lfCharSet
Definition: dimm.idl:50
WORD nCopies
Definition: commdlg.h:475
static void AlertFileNotFound(LPCTSTR szFileName)
Definition: dialog.c:122
UINT_PTR WPARAM
Definition: windef.h:207
#define WS_CHILD
Definition: pedump.c:617
BOOL WriteText(HANDLE hFile, LPCWSTR pszText, DWORD dwTextLen, ENCODING encFile, int iEoln)
Definition: text.c:368
LPCSTR lpTemplateName
Definition: commdlg.h:348
LONG left
Definition: windef.h:306
#define FILE_SHARE_WRITE
Definition: nt_native.h:681
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
VOID DIALOG_EditCopy(VOID)
Definition: dialog.c:803
int32_t INT_PTR
Definition: typedefs.h:64
BOOL NOTEPAD_FindNext(FINDREPLACE *pFindReplace, BOOL bReplace, BOOL bShowAlert)
Definition: main.c:144
BOOL HasFileExtension(LPCTSTR szFilename)
Definition: dialog.c:165
#define GetTextMetrics
Definition: wingdi.h:4473
#define CMD_GOTO
Definition: notepad_res.h:56
#define WM_CLEAR
Definition: winuser.h:1846
LONG right
Definition: windef.h:308
#define NO_ERROR
Definition: dderror.h:5
BOOL WINAPI DestroyWindow(_In_ HWND)
#define STRSAFE_E_INSUFFICIENT_BUFFER
Definition: strsafe.h:103
#define PROOF_QUALITY
Definition: wingdi.h:437
#define SetWindowLongPtr
Definition: treelist.c:70
#define GetOpenFileName
Definition: commdlg.h:665
#define CB_GETCURSEL
Definition: winuser.h:1925
WPARAM wParam
Definition: combotst.c:138
CHAR * LPTSTR
Definition: xmlstorage.h:192
int WINAPI EndPage(_In_ HDC)
#define FILE_SHARE_READ
Definition: compat.h:136
static RECT GetPrintingRect(HDC hdc, RECT margins)
Definition: dialog.c:243
BYTE lfOutPrecision
Definition: dimm.idl:51
#define ID_ENCODING
Definition: notepad_res.h:28
WORD nMinPage
Definition: commdlg.h:473
#define GetWindowText
Definition: winuser.h:5773
#define STRING_NOTEPAD_AUTHORS
Definition: notepad_res.h:105
DWORD nMaxFile
Definition: commdlg.h:337
#define IDHELP
Definition: resource_2.h:8
#define EM_GETSEL
Definition: winuser.h:1979
int WINAPI StartPage(_In_ HDC)
#define MB_ICONEXCLAMATION
Definition: winuser.h:779
#define ChooseFont
Definition: commdlg.h:662
#define PHYSICALHEIGHT
Definition: wingdi.h:735
#define GetSaveFileName
Definition: commdlg.h:666
BOOL ReadText(HANDLE hFile, LPWSTR *ppszText, DWORD *pdwTextLen, ENCODING *pencFile, int *piEoln)
Definition: text.c:96
#define PrintDlg
Definition: commdlg.h:668
CLIPBOARD_GLOBALS Globals
Definition: clipbrd.c:13
#define CMD_STATUSBAR
Definition: notepad_res.h:61
BOOL WINAPI EnableMenuItem(_In_ HMENU, _In_ UINT, _In_ UINT)
LPOFNHOOKPROC lpfnHook
Definition: commdlg.h:347
#define STRING_NOTEPAD
Definition: notepad_res.h:75
#define FALSE
Definition: types.h:117
static const WCHAR szText[]
Definition: dialog.c:139
#define DIALOG_PAGESETUP
Definition: notepad_res.h:25
#define WM_COPY
Definition: winuser.h:1844
BOOL FileExists(LPCTSTR szFilename)
Definition: dialog.c:154
unsigned int BOOL
Definition: ntddk_ex.h:94
int WINAPI SetMapMode(_In_ HDC, _In_ int)
#define CreateStatusWindow
Definition: commctrl.h:1933
#define CF_SCREENFONTS
Definition: commdlg.h:59
LONG lfHeight
Definition: dimm.idl:42
#define GENERIC_WRITE
Definition: nt_native.h:90
#define ShellExecute
Definition: shellapi.h:691
#define CLIP_DEFAULT_PRECIS
Definition: wingdi.h:425
BOOL DoCloseFile(VOID)
Definition: dialog.c:322
#define OFN_ENABLEHOOK
Definition: commdlg.h:99
#define STRING_NOTSAVED
Definition: notepad_res.h:85
#define FORMAT_MESSAGE_ALLOCATE_BUFFER
Definition: winbase.h:416
#define SB_SIMPLEID
Definition: precomp.h:15
VOID DIALOG_EditDelete(VOID)
Definition: dialog.c:813
#define OFN_ENABLETEMPLATE
Definition: commdlg.h:102
#define CreateWindowEx
Definition: winuser.h:5730
#define CW_USEDEFAULT
Definition: winuser.h:225
#define SB_SIMPLE
Definition: commctrl.h:1958
#define CB_ADDSTRING
Definition: winuser.h:1918
VOID DIALOG_FilePageSetup(void)
Definition: dialog.c:1225
LONG lfWeight
Definition: dimm.idl:46
WORD nFromPage
Definition: commdlg.h:471
#define MB_ICONQUESTION
Definition: winuser.h:783
VOID DoCreateStatusBar(VOID)
Definition: dialog.c:839
#define MB_YESNOCANCEL
Definition: winuser.h:812
int GetSelectionText(HWND hWnd, LPTSTR lpString, int nMaxCount)
Definition: dialog.c:185
LONG cx
Definition: windef.h:334
#define PD_SELECTION
Definition: commdlg.h:147
LONG_PTR LPARAM
Definition: windef.h:208
Definition: parser.c:48
#define PD_RETURNDC
Definition: commdlg.h:155
Definition: module.h:566
VOID WINAPI GetLocalTime(OUT LPSYSTEMTIME lpSystemTime)
Definition: time.c:286
#define STRING_UNICODE_BE
Definition: notepad_res.h:93
HINSTANCE hInstance
Definition: commdlg.h:331
BYTE lfPitchAndFamily
Definition: dimm.idl:54
static const TCHAR szDefaultExt[]
Definition: dialog.c:33
OPENFILENAMEA OPENFILENAME
Definition: commdlg.h:657
#define FindFirstFile
Definition: winbase.h:3638
#define SW_SHOW
Definition: winuser.h:769
VOID DIALOG_SelectFont(VOID)
Definition: dialog.c:1035
VOID DIALOG_GoTo(VOID)
Definition: dialog.c:1139
#define FORMAT_MESSAGE_FROM_SYSTEM
Definition: winbase.h:420
VOID DIALOG_SearchNext(VOID)
Definition: dialog.c:1090
#define STRING_CRLF
Definition: notepad_res.h:96
VOID DoCreateEditWindow(VOID)
Definition: dialog.c:917
#define STRING_PRINTERROR
Definition: notepad_res.h:101
#define PostMessage
Definition: winuser.h:5807
#define OFN_PATHMUSTEXIST
Definition: commdlg.h:117
r l[0]
Definition: byte_order.h:167
static VOID SetFileName(PCONSOLE_CHILDFRM_WND Info, PWSTR pFileName)
Definition: console.c:179
#define MF_CHECKED
Definition: winuser.h:132
#define DIALOG_ENCODING
Definition: notepad_res.h:27
char TCHAR
Definition: xmlstorage.h:189
#define DIALOG_GOTO
Definition: notepad_res.h:30
#define _T(x)
Definition: vfdio.h:22
DWORD fwType
Definition: wingdi.h:1679
VOID ShowLastError(VOID)
Definition: dialog.c:38
GLsizeiptr size
Definition: glext.h:5919
LPCSTR lpszOutput
Definition: wingdi.h:1677
#define GetDlgItemText
Definition: winuser.h:5760
#define GetProcessHeap()
Definition: compat.h:595
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
#define PHYSICALOFFSETY
Definition: wingdi.h:737
#define STRING_UNTITLED
Definition: notepad_res.h:79
#define WM_SIZE
Definition: winuser.h:1593
LONG HRESULT
Definition: typedefs.h:79
#define EDIT_CLASS
Definition: main.h:32
VOID DIALOG_EditPaste(VOID)
Definition: dialog.c:808
VOID DIALOG_FileOpen(VOID)
Definition: dialog.c:425
#define CDN_FILEOK
Definition: commdlg.h:38
#define StringCbPrintf
Definition: strsafe.h:544
#define MF_ENABLED
Definition: winuser.h:128
#define WM_CLOSE
Definition: winuser.h:1603
GLint GLint GLsizei GLsizei GLsizei GLint border
Definition: gl.h:1546
#define MAX_PATH
Definition: compat.h:34
DWORD lStructSize
Definition: commdlg.h:329
#define EM_GETMODIFY
Definition: winuser.h:1976
VOID DIALOG_StatusBarUpdateCaretPos(VOID)
Definition: dialog.c:1181
#define WINAPI
Definition: msvc.h:6
#define EM_SETSEL
Definition: winuser.h:2000
#define ReplaceText
Definition: commdlg.h:669
VOID DIALOG_FilePrint(VOID)
Definition: dialog.c:573
unsigned short WORD
Definition: ntddk_ex.h:93
#define OUT_DEFAULT_PRECIS
Definition: wingdi.h:414
#define BN_CLICKED
Definition: winuser.h:1907
unsigned long DWORD
Definition: ntddk_ex.h:95
HGLOBAL hDevMode
Definition: commdlg.h:467
DWORD WINAPI CheckMenuItem(_In_ HMENU, _In_ UINT, _In_ UINT)
#define ShellAbout
Definition: shellapi.h:690
#define GetModuleFileName
Definition: winbase.h:3687
unsigned __int3264 UINT_PTR
Definition: mstsclib_h.h:274
#define OPEN_ALWAYS
Definition: disk.h:70
#define SetDlgItemText
Definition: winuser.h:5824
#define ID_EOLN
Definition: notepad_res.h:29
TCHAR szTitle[MAX_LOADSTRING]
Definition: magnifier.c:35
#define PD_PAGENUMS
Definition: commdlg.h:148
#define FormatMessage
Definition: winbase.h:3651
#define DialogBoxParam
Definition: winuser.h:5739
LPCSTR lpszDatatype
Definition: wingdi.h:1678
#define FILE_ATTRIBUTE_NORMAL
Definition: compat.h:137
#define EM_UNDO
Definition: winuser.h:2003
int DIALOG_StringMsgBox(HWND hParent, int formatId, LPCTSTR szString, DWORD dwFlags)
Definition: dialog.c:101
#define EM_EMPTYUNDOBUFFER
Definition: winuser.h:1967
#define StringCchCopy
Definition: strsafe.h:139
HDC hdc
Definition: main.c:9
#define PD_USEDEVMODECOPIES
Definition: commdlg.h:165
static const TCHAR txt_files[]
Definition: dialog.c:34
#define SB_SETTEXT
Definition: commctrl.h:1949
HWND(WINAPI * FINDPROC)(LPFINDREPLACE lpfr)
Definition: dialog.c:1058
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1175
#define MB_ICONERROR
Definition: winuser.h:781
int WINAPI GetDeviceCaps(_In_opt_ HDC, _In_ int)
const DOCKBAR PVOID HWND hParent
Definition: tooldock.h:22
uint32_t entry
Definition: isohybrid.c:63
#define _sntprintf
Definition: xmlstorage.h:201
#define OFN_HIDEREADONLY
Definition: commdlg.h:107
GLdouble s
Definition: gl.h:2039
#define MessageBox
Definition: winuser.h:5797
#define HELP_INDEX
Definition: winuser.h:2385
#define GENERIC_READ
Definition: compat.h:135
#define CB_SETCURSEL
Definition: winuser.h:1943
#define EM_SETMODIFY
Definition: winuser.h:1995
Definition: time.h:76
#define FF_ROMAN
Definition: wingdi.h:449
#define WM_COMMAND
Definition: winuser.h:1722
Definition: inflate.c:139
IN PCTCH line
Definition: pager.h:36
int cbSize
Definition: wingdi.h:1675
#define MF_UNCHECKED
Definition: winuser.h:204
_In_ HANDLE hFile
Definition: mswsock.h:90
BOOL WINAPI MoveWindow(_In_ HWND, _In_ int, _In_ int, _In_ int, _In_ int, _In_ BOOL)
static RECT margins
Definition: print.c:55
#define GWLP_WNDPROC
Definition: treelist.c:66
BYTE lfQuality
Definition: dimm.idl:53
HWND hwndOwner
Definition: commdlg.h:466
LRESULT(CALLBACK * WNDPROC)(HWND, UINT, WPARAM, LPARAM)
Definition: winuser.h:2881
#define PHYSICALOFFSETX
Definition: wingdi.h:736
#define GetTimeFormat
Definition: winnls.h:1189
#define _stprintf
Definition: utility.h:124
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
ENCODING
Definition: more.c:491
#define PHYSICALWIDTH
Definition: wingdi.h:734
#define S_OK
Definition: intsafe.h:52
#define CREATE_ALWAYS
Definition: disk.h:72
#define SW_SHOWNORMAL
Definition: winuser.h:764
#define lstrlen
Definition: winbase.h:3732
LRESULT CALLBACK EDIT_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
Definition: main.c:310
#define FW_BOLD
Definition: wingdi.h:377
BOOL WINAPI EndDialog(HWND hwnd, INT_PTR retval)
Definition: dialog.c:2083
#define WS_EX_CLIENTEDGE
Definition: winuser.h:384
HINSTANCE hInstance
Definition: commdlg.h:476
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
VOID DIALOG_EditUndo(VOID)
Definition: dialog.c:793
BOOL WINAPI DeleteDC(_In_ HDC)
IN OUT PVCB OUT PDIRENT OUT PBCB IN BOOLEAN CreateFile
Definition: fatprocs.h:913
#define EM_LINEFROMCHAR
Definition: winuser.h:1983
LPSTR lpstrFile
Definition: commdlg.h:336
LPCWSTR szPath
Definition: env.c:37
static VOID DIALOG_SearchDialog(FINDPROC pfnProc)
Definition: dialog.c:1060
#define GetDateFormat
Definition: winnls.h:1184
#define ARRAY_SIZE(a)
Definition: main.h:24
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1577
LPCSTR lpszDocName
Definition: wingdi.h:1676
BYTE lfClipPrecision
Definition: dimm.idl:52
HGLOBAL hDevNames
Definition: commdlg.h:468
#define FindText
Definition: commdlg.h:663
#define IDI_NPICON
Definition: notepad_res.h:32
#define OFN_OVERWRITEPROMPT
Definition: commdlg.h:116
#define DATE_LONGDATE
Definition: winnls.h:197
int CDECL _ttoi(const _TCHAR *str)
Definition: atoi.c:10
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
#define STRING_ERROR
Definition: notepad_res.h:76
#define SetWindowText
Definition: winuser.h:5832
LPCSTR lpstrFilter
Definition: commdlg.h:332
#define ID_LINENUMBER
Definition: notepad_res.h:31
#define CreateFontIndirect
Definition: wingdi.h:4443
unsigned int UINT
Definition: ndis.h:50
#define NULL
Definition: types.h:112
#define MB_OK
Definition: winuser.h:784
#define VERTRES
Definition: wingdi.h:716
#define STRING_NOTFOUND
Definition: notepad_res.h:87
static const TCHAR helpfile[]
Definition: dialog.c:31
VOID DIALOG_Replace(VOID)
Definition: dialog.c:1098
#define WM_SETFONT
Definition: winuser.h:1632
VOID DIALOG_EditCut(VOID)
Definition: dialog.c:798
#define FR_DOWN
Definition: commdlg.h:127
DWORD lStructSize
Definition: commdlg.h:465
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
#define msg(x)
Definition: auth_time.c:54
VOID NOTEPAD_EnableSearchMenu()
Definition: main.c:34
BOOL DIALOG_FileSaveAs(VOID)
Definition: dialog.c:526
WORD nToPage
Definition: commdlg.h:472
#define STRING_UNICODE
Definition: notepad_res.h:92
#define MM_TEXT
Definition: wingdi.h:872
#define GetTextExtentPoint32
Definition: wingdi.h:4471
#define SendMessage
Definition: winuser.h:5818
_TCHAR * _tcscat(_TCHAR *s, const _TCHAR *append)
Definition: tcscat.h:8
_TCHAR * _tcsrchr(const _TCHAR *s, _XINT c)
Definition: tcsrchr.h:4
#define EM_LINEINDEX
Definition: winuser.h:1984
HWND WINAPI GetDlgItem(HWND hDlg, int nIDDlgItem)
Definition: dialog.c:2181
#define HIWORD(l)
Definition: typedefs.h:247
#define EDIT_STYLE_WRAP
Definition: main.h:28
#define TextOut
Definition: wingdi.h:4482
#define EDIT_STYLE
Definition: main.h:30
#define GetWindowTextLength
Definition: winuser.h:5774
CHAR lfFaceName[LF_FACESIZE]
Definition: dimm.idl:55
VOID DIALOG_HelpAboutNotepad(VOID)
Definition: dialog.c:1207
LONG bottom
Definition: windef.h:309
#define LOGPIXELSY
Definition: wingdi.h:718
VOID DIALOG_FileNew(VOID)
Definition: dialog.c:407
DWORD Flags
Definition: commdlg.h:470
#define StartDoc
Definition: wingdi.h:4481
VOID DIALOG_EditWrap(VOID)
Definition: dialog.c:1019
#define LoadIcon
Definition: winuser.h:5788
#define IDNO
Definition: winuser.h:830
static void AlertPrintError(void)
Definition: dialog.c:138
int GetSelectionTextLength(HWND hWnd)
Definition: dialog.c:175
#define MF_GRAYED
Definition: winuser.h:129
#define ANSI_CHARSET
Definition: wingdi.h:382
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define IDCANCEL
Definition: winuser.h:825
#define CF_NOVERTFONTS
Definition: commdlg.h:86
#define PSD_ENABLEPAGESETUPHOOK
Definition: commdlg.h:183
LONG_PTR LRESULT
Definition: windef.h:209
VOID DIALOG_HelpContents(VOID)
Definition: dialog.c:1202
VOID DIALOG_EditTimeDate(VOID)
Definition: dialog.c:823
HINSTANCE hInstance
Definition: precomp.h:43
VOID DIALOG_ViewStatusBar(VOID)
Definition: dialog.c:1195
#define WS_VISIBLE
Definition: pedump.c:620
#define CMD_STATUSBAR_WND_ID
Definition: notepad_res.h:62
HDC hDC
Definition: commdlg.h:469
int help
Definition: sort.c:20
#define WM_INITDIALOG
Definition: winuser.h:1721
#define WS_EX_STATICEDGE
Definition: winuser.h:403
LPARAM lParam
Definition: combotst.c:139
_In_ int nMaxCount
Definition: winuser.h:4852
#define LOWORD(l)
Definition: pedump.c:82
static unsigned char buff[32768]
Definition: fatten.c:17
#define STRING_CR
Definition: notepad_res.h:98
VOID DIALOG_FileNewWindow(VOID)
Definition: dialog.c:418
static int AlertFileNotSaved(LPCTSTR szFileName)
Definition: dialog.c:127
#define HeapFree(x, y, z)
Definition: compat.h:594
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56
#define LoadString
Definition: winuser.h:5794
#define log(outFile, fmt,...)
Definition: util.h:15
#define CF_INITTOLOGFONTSTRUCT
Definition: commdlg.h:66
#define WM_NOTIFY
Definition: richedit.h:61
#define EM_REPLACESEL
Definition: winuser.h:1988
BOOL DIALOG_FileSave(VOID)
Definition: dialog.c:454
#define EM_SCROLLCARET
Definition: richedit.h:81
DOCINFOA DOCINFO
Definition: wingdi.h:4413
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:31
int WINAPI EndDoc(_In_ HDC)
DWORD Flags
Definition: commdlg.h:342
BOOL WINAPI FindClose(HANDLE hFindFile)
Definition: find.c:502
#define WinHelp
Definition: winuser.h:5839
static INT_PTR CALLBACK DIALOG_GoTo_DialogProc(HWND hwndDialog, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: dialog.c:1105