ReactOS  0.4.12-dev-43-g63b00d8
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 
46  LoadString(Globals.hInstance, STRING_ERROR, szTitle, ARRAY_SIZE(szTitle));
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  StringCbPrintf(szCaption, ARRAY_SIZE(szCaption), _T("%s - %s"), szFilename, szNotepad);
85  else
86  {
87  BOOL isModified = (SendMessage(Globals.hEdit, EM_GETMODIFY, 0, 0) ? TRUE : FALSE);
88 
89  /* Update the caption based upon if the user has modified the contents of the file or not */
90  StringCbPrintf(szCaption, ARRAY_SIZE(szCaption), _T("%s%s - %s"),
91  (isModified ? _T("*") : _T("")), szFilename, szNotepad);
92  }
93 
94  /* Update the window caption */
95  SetWindowText(Globals.hMainWnd, szCaption);
96 }
97 
98 int DIALOG_StringMsgBox(HWND hParent, int formatId, LPCTSTR szString, DWORD dwFlags)
99 {
100  TCHAR szMessage[MAX_STRING_LEN];
101  TCHAR szResource[MAX_STRING_LEN];
102 
103  /* Load and format szMessage */
104  LoadString(Globals.hInstance, formatId, szResource, ARRAY_SIZE(szResource));
105  _sntprintf(szMessage, ARRAY_SIZE(szMessage), szResource, szString);
106 
107  /* Load szCaption */
108  if ((dwFlags & MB_ICONMASK) == MB_ICONEXCLAMATION)
109  LoadString(Globals.hInstance, STRING_ERROR, szResource, ARRAY_SIZE(szResource));
110  else
111  LoadString(Globals.hInstance, STRING_NOTEPAD, szResource, ARRAY_SIZE(szResource));
112 
113  /* Display Modal Dialog */
114  // if (hParent == NULL)
115  // hParent = Globals.hMainWnd;
116  return MessageBox(hParent, szMessage, szResource, dwFlags);
117 }
118 
119 static void AlertFileNotFound(LPCTSTR szFileName)
120 {
122 }
123 
124 static int AlertFileNotSaved(LPCTSTR szFileName)
125 {
126  TCHAR szUntitled[MAX_STRING_LEN];
127 
128  LoadString(Globals.hInstance, STRING_UNTITLED, szUntitled, ARRAY_SIZE(szUntitled));
129 
131  szFileName[0] ? szFileName : szUntitled,
133 }
134 
135 static void AlertPrintError(void)
136 {
137  TCHAR szUntitled[MAX_STRING_LEN];
138 
139  LoadString(Globals.hInstance, STRING_UNTITLED, szUntitled, ARRAY_SIZE(szUntitled));
140 
142  Globals.szFileName[0] ? Globals.szFileName : szUntitled,
144 }
145 
152 {
154  HANDLE hFile;
155 
156  hFile = FindFirstFile(szFilename, &entry);
157  FindClose(hFile);
158 
159  return (hFile != INVALID_HANDLE_VALUE);
160 }
161 
163 {
164  LPCTSTR s;
165 
166  s = _tcsrchr(szFilename, _T('\\'));
167  if (s)
168  szFilename = s;
169  return _tcsrchr(szFilename, _T('.')) != NULL;
170 }
171 
173 {
174  DWORD dwStart = 0;
175  DWORD dwEnd = 0;
176 
177  SendMessage(hWnd, EM_GETSEL, (WPARAM)&dwStart, (LPARAM)&dwEnd);
178 
179  return dwEnd - dwStart;
180 }
181 
183 {
184  DWORD dwStart = 0;
185  DWORD dwEnd = 0;
186  DWORD dwSize;
187  HRESULT hResult;
188  LPTSTR lpTemp;
189 
190  if (!lpString)
191  {
192  return 0;
193  }
194 
195  SendMessage(hWnd, EM_GETSEL, (WPARAM)&dwStart, (LPARAM)&dwEnd);
196 
197  if (dwStart == dwEnd)
198  {
199  return 0;
200  }
201 
202  dwSize = GetWindowTextLength(hWnd) + 1;
203  lpTemp = HeapAlloc(GetProcessHeap(), 0, dwSize * sizeof(TCHAR));
204  if (!lpTemp)
205  {
206  return 0;
207  }
208 
209  dwSize = GetWindowText(hWnd, lpTemp, dwSize);
210 
211  if (!dwSize)
212  {
213  HeapFree(GetProcessHeap(), 0, lpTemp);
214  return 0;
215  }
216 
217  hResult = StringCchCopyN(lpString, nMaxCount, lpTemp + dwStart, dwEnd - dwStart);
218  HeapFree(GetProcessHeap(), 0, lpTemp);
219 
220  switch (hResult)
221  {
222  case S_OK:
223  {
224  return dwEnd - dwStart;
225  }
226 
228  {
229  return nMaxCount - 1;
230  }
231 
232  default:
233  {
234  return 0;
235  }
236  }
237 }
238 
239 static RECT
241 {
242  int iLogPixelsX, iLogPixelsY;
243  int iHorzRes, iVertRes;
244  int iPhysPageX, iPhysPageY, iPhysPageW, iPhysPageH;
245  RECT rcPrintRect;
246 
247  iPhysPageX = GetDeviceCaps(hdc, PHYSICALOFFSETX);
248  iPhysPageY = GetDeviceCaps(hdc, PHYSICALOFFSETY);
249  iPhysPageW = GetDeviceCaps(hdc, PHYSICALWIDTH);
250  iPhysPageH = GetDeviceCaps(hdc, PHYSICALHEIGHT);
251  iLogPixelsX = GetDeviceCaps(hdc, LOGPIXELSX);
252  iLogPixelsY = GetDeviceCaps(hdc, LOGPIXELSY);
253  iHorzRes = GetDeviceCaps(hdc, HORZRES);
254  iVertRes = GetDeviceCaps(hdc, VERTRES);
255 
256  rcPrintRect.left = (margins.left * iLogPixelsX / 2540) - iPhysPageX;
257  rcPrintRect.top = (margins.top * iLogPixelsY / 2540) - iPhysPageY;
258  rcPrintRect.right = iHorzRes - (((margins.left * iLogPixelsX / 2540) - iPhysPageX) + ((margins.right * iLogPixelsX / 2540) - (iPhysPageW - iPhysPageX - iHorzRes)));
259  rcPrintRect.bottom = iVertRes - (((margins.top * iLogPixelsY / 2540) - iPhysPageY) + ((margins.bottom * iLogPixelsY / 2540) - (iPhysPageH - iPhysPageY - iVertRes)));
260 
261  return rcPrintRect;
262 }
263 
265 {
266  BOOL bRet = TRUE;
267  HANDLE hFile;
268  LPTSTR pTemp;
269  DWORD size;
270 
271  hFile = CreateFile(Globals.szFileName, GENERIC_WRITE, FILE_SHARE_WRITE,
273  if(hFile == INVALID_HANDLE_VALUE)
274  {
275  ShowLastError();
276  return FALSE;
277  }
278 
279  size = GetWindowTextLength(Globals.hEdit) + 1;
280  pTemp = HeapAlloc(GetProcessHeap(), 0, size * sizeof(*pTemp));
281  if (!pTemp)
282  {
283  CloseHandle(hFile);
284  ShowLastError();
285  return FALSE;
286  }
287  size = GetWindowText(Globals.hEdit, pTemp, size);
288 
289  if (size)
290  {
291  if (!WriteText(hFile, (LPWSTR)pTemp, size, Globals.encFile, Globals.iEoln))
292  {
293  ShowLastError();
294  bRet = FALSE;
295  }
296  else
297  {
299  bRet = TRUE;
300  }
301  }
302 
303  CloseHandle(hFile);
304  HeapFree(GetProcessHeap(), 0, pTemp);
305  return bRet;
306 }
307 
314 {
315  int nResult;
316 
317  if (SendMessage(Globals.hEdit, EM_GETMODIFY, 0, 0))
318  {
319  /* prompt user to save changes */
320  nResult = AlertFileNotSaved(Globals.szFileName);
321  switch (nResult)
322  {
323  case IDYES:
324  if(!DIALOG_FileSave())
325  return FALSE;
326  break;
327 
328  case IDNO:
329  break;
330 
331  case IDCANCEL:
332  return FALSE;
333 
334  default:
335  return FALSE;
336  }
337  }
338 
341 
342  return TRUE;
343 }
344 
346 {
347  static const TCHAR dotlog[] = _T(".LOG");
348  HANDLE hFile;
349  LPTSTR pszText = NULL;
350  DWORD dwTextLen;
351  TCHAR log[5];
352 
353  /* Close any files and prompt to save changes */
354  if (!DoCloseFile())
355  return;
356 
359  if (hFile == INVALID_HANDLE_VALUE)
360  {
361  ShowLastError();
362  goto done;
363  }
364 
365  if (!ReadText(hFile, (LPWSTR *)&pszText, &dwTextLen, &Globals.encFile, &Globals.iEoln))
366  {
367  ShowLastError();
368  goto done;
369  }
370  SetWindowText(Globals.hEdit, pszText);
371 
373  SendMessage(Globals.hEdit, EM_EMPTYUNDOBUFFER, 0, 0);
374  SetFocus(Globals.hEdit);
375 
376  /* If the file starts with .LOG, add a time/date at the end and set cursor after
377  * See http://support.microsoft.com/?kbid=260563
378  */
379  if (GetWindowText(Globals.hEdit, log, ARRAY_SIZE(log)) && !_tcscmp(log, dotlog))
380  {
381  static const TCHAR lf[] = _T("\r\n");
386  }
387 
388  SetFileName(szFileName);
391 done:
392  if (hFile != INVALID_HANDLE_VALUE)
393  CloseHandle(hFile);
394  if (pszText)
395  HeapFree(GetProcessHeap(), 0, pszText);
396 }
397 
399 {
400  /* Close any files and prompt to save changes */
401  if (DoCloseFile()) {
403  SendMessage(Globals.hEdit, EM_EMPTYUNDOBUFFER, 0, 0);
404  SetFocus(Globals.hEdit);
406  }
407 }
408 
410 {
411  OPENFILENAME openfilename;
413 
414  ZeroMemory(&openfilename, sizeof(openfilename));
415 
416  if (Globals.szFileName[0] == 0)
417  _tcscpy(szPath, txt_files);
418  else
419  _tcscpy(szPath, Globals.szFileName);
420 
421  openfilename.lStructSize = sizeof(openfilename);
422  openfilename.hwndOwner = Globals.hMainWnd;
423  openfilename.hInstance = Globals.hInstance;
424  openfilename.lpstrFilter = Globals.szFilter;
425  openfilename.lpstrFile = szPath;
426  openfilename.nMaxFile = ARRAY_SIZE(szPath);
428  openfilename.lpstrDefExt = szDefaultExt;
429 
430  if (GetOpenFileName(&openfilename)) {
431  if (FileExists(openfilename.lpstrFile))
432  DoOpenFile(openfilename.lpstrFile);
433  else
434  AlertFileNotFound(openfilename.lpstrFile);
435  }
436 }
437 
439 {
440  if (Globals.szFileName[0] == 0)
441  {
442  return DIALOG_FileSaveAs();
443  }
444  else if (DoSaveFile())
445  {
447  return TRUE;
448  }
449  return FALSE;
450 }
451 
452 static UINT_PTR
453 CALLBACK
455 {
456  TCHAR szText[128];
457  HWND hCombo;
458 
459  UNREFERENCED_PARAMETER(wParam);
460 
461  switch(msg)
462  {
463  case WM_INITDIALOG:
464  hCombo = GetDlgItem(hDlg, ID_ENCODING);
465 
467  SendMessage(hCombo, CB_ADDSTRING, 0, (LPARAM) szText);
468 
470  SendMessage(hCombo, CB_ADDSTRING, 0, (LPARAM) szText);
471 
473  SendMessage(hCombo, CB_ADDSTRING, 0, (LPARAM) szText);
474 
476  SendMessage(hCombo, CB_ADDSTRING, 0, (LPARAM) szText);
477 
478  SendMessage(hCombo, CB_SETCURSEL, Globals.encFile, 0);
479 
480  hCombo = GetDlgItem(hDlg, ID_EOLN);
481 
483  SendMessage(hCombo, CB_ADDSTRING, 0, (LPARAM) szText);
484 
485  LoadString(Globals.hInstance, STRING_LF, szText, ARRAY_SIZE(szText));
486  SendMessage(hCombo, CB_ADDSTRING, 0, (LPARAM) szText);
487 
488  LoadString(Globals.hInstance, STRING_CR, szText, ARRAY_SIZE(szText));
489  SendMessage(hCombo, CB_ADDSTRING, 0, (LPARAM) szText);
490 
491  SendMessage(hCombo, CB_SETCURSEL, Globals.iEoln, 0);
492  break;
493 
494  case WM_NOTIFY:
495  if (((NMHDR *) lParam)->code == CDN_FILEOK)
496  {
497  hCombo = GetDlgItem(hDlg, ID_ENCODING);
498  if (hCombo)
499  Globals.encFile = (ENCODING) SendMessage(hCombo, CB_GETCURSEL, 0, 0);
500 
501  hCombo = GetDlgItem(hDlg, ID_EOLN);
502  if (hCombo)
503  Globals.iEoln = (int) SendMessage(hCombo, CB_GETCURSEL, 0, 0);
504  }
505  break;
506  }
507  return 0;
508 }
509 
511 {
512  OPENFILENAME saveas;
514 
515  ZeroMemory(&saveas, sizeof(saveas));
516 
517  if (Globals.szFileName[0] == 0)
518  _tcscpy(szPath, txt_files);
519  else
520  _tcscpy(szPath, Globals.szFileName);
521 
522  saveas.lStructSize = sizeof(OPENFILENAME);
523  saveas.hwndOwner = Globals.hMainWnd;
524  saveas.hInstance = Globals.hInstance;
525  saveas.lpstrFilter = Globals.szFilter;
526  saveas.lpstrFile = szPath;
527  saveas.nMaxFile = ARRAY_SIZE(szPath);
530  saveas.lpstrDefExt = szDefaultExt;
533 
534  if (GetSaveFileName(&saveas))
535  {
536  /* HACK: Because in ROS, Save-As boxes don't check the validity
537  * of file names and thus, here, szPath can be invalid !! We only
538  * see its validity when we call DoSaveFile()... */
539  SetFileName(szPath);
540  if (DoSaveFile())
541  {
543  return TRUE;
544  }
545  else
546  {
547  SetFileName(_T(""));
548  return FALSE;
549  }
550  }
551  else
552  {
553  return FALSE;
554  }
555 }
556 
558 {
559  DOCINFO di;
560  TEXTMETRIC tm;
561  PRINTDLG printer;
562  SIZE szMetric;
563  int border;
564  int xLeft, yTop, pagecount, dopage, copycount;
565  unsigned int i;
566  LOGFONT hdrFont;
567  HFONT font, old_font=0;
568  DWORD size;
569  LPTSTR pTemp;
570  static const TCHAR times_new_roman[] = _T("Times New Roman");
571  RECT rcPrintRect;
572 
573  /* Get a small font and print some header info on each page */
574  ZeroMemory(&hdrFont, sizeof(hdrFont));
575  hdrFont.lfHeight = 100;
576  hdrFont.lfWeight = FW_BOLD;
577  hdrFont.lfCharSet = ANSI_CHARSET;
580  hdrFont.lfQuality = PROOF_QUALITY;
582  _tcscpy(hdrFont.lfFaceName, times_new_roman);
583 
584  font = CreateFontIndirect(&hdrFont);
585 
586  /* Get Current Settings */
587  ZeroMemory(&printer, sizeof(printer));
588  printer.lStructSize = sizeof(printer);
589  printer.hwndOwner = Globals.hMainWnd;
590  printer.hInstance = Globals.hInstance;
591 
592  /* Set some default flags */
593  printer.Flags = PD_RETURNDC | PD_SELECTION;
594 
595  /* Disable the selection radio button if there is no text selected */
596  if (!GetSelectionTextLength(Globals.hEdit))
597  {
598  printer.Flags = printer.Flags | PD_NOSELECTION;
599  }
600 
601  printer.nFromPage = 0;
602  printer.nMinPage = 1;
603  /* we really need to calculate number of pages to set nMaxPage and nToPage */
604  printer.nToPage = (WORD)-1;
605  printer.nMaxPage = (WORD)-1;
606 
607  /* Let commdlg manage copy settings */
608  printer.nCopies = (WORD)PD_USEDEVMODECOPIES;
609 
610  printer.hDevMode = Globals.hDevMode;
611  printer.hDevNames = Globals.hDevNames;
612 
613  if (!PrintDlg(&printer))
614  {
615  DeleteObject(font);
616  return;
617  }
618 
619  Globals.hDevMode = printer.hDevMode;
620  Globals.hDevNames = printer.hDevNames;
621 
622  assert(printer.hDC != 0);
623 
624  /* initialize DOCINFO */
625  di.cbSize = sizeof(DOCINFO);
626  di.lpszDocName = Globals.szFileTitle;
627  di.lpszOutput = NULL;
628  di.lpszDatatype = NULL;
629  di.fwType = 0;
630 
631  if (StartDoc(printer.hDC, &di) <= 0)
632  {
633  DeleteObject(font);
634  return;
635  }
636 
637 
638  /* Get the file text */
639  if (printer.Flags & PD_SELECTION)
640  {
641  size = GetSelectionTextLength(Globals.hEdit) + 1;
642  }
643  else
644  {
645  size = GetWindowTextLength(Globals.hEdit) + 1;
646  }
647 
648  pTemp = HeapAlloc(GetProcessHeap(), 0, size * sizeof(TCHAR));
649  if (!pTemp)
650  {
651  EndDoc(printer.hDC);
652  DeleteObject(font);
653  ShowLastError();
654  return;
655  }
656 
657  if (printer.Flags & PD_SELECTION)
658  {
659  size = GetSelectionText(Globals.hEdit, pTemp, size);
660  }
661  else
662  {
663  size = GetWindowText(Globals.hEdit, pTemp, size);
664  }
665 
666  /* Get the current printing area */
667  rcPrintRect = GetPrintingRect(printer.hDC, Globals.lMargins);
668 
669  /* Ensure that each logical unit maps to one pixel */
670  SetMapMode(printer.hDC, MM_TEXT);
671 
672  /* Needed to get the correct height of a text line */
673  GetTextMetrics(printer.hDC, &tm);
674 
675  border = 15;
676  for (copycount=1; copycount <= printer.nCopies; copycount++) {
677  i = 0;
678  pagecount = 1;
679  do {
680  /* Don't start a page if none of the conditions below are true */
681  dopage = 0;
682 
683  /* The user wants to print the current selection */
684  if (printer.Flags & PD_SELECTION)
685  {
686  dopage = 1;
687  }
688 
689  /* The user wants to print the entire document */
690  if (!(printer.Flags & PD_PAGENUMS) && !(printer.Flags & PD_SELECTION))
691  {
692  dopage = 1;
693  }
694 
695  /* The user wants to print a specified range of pages */
696  if ((pagecount >= printer.nFromPage && pagecount <= printer.nToPage))
697  {
698  dopage = 1;
699  }
700 
701  old_font = SelectObject(printer.hDC, font);
702 
703  if (dopage) {
704  if (StartPage(printer.hDC) <= 0) {
705  SelectObject(printer.hDC, old_font);
706  EndDoc(printer.hDC);
707  DeleteDC(printer.hDC);
708  HeapFree(GetProcessHeap(), 0, pTemp);
709  DeleteObject(font);
710  AlertPrintError();
711  return;
712  }
713 
714  SetViewportOrgEx(printer.hDC, rcPrintRect.left, rcPrintRect.top, NULL);
715 
716  /* Write a rectangle and header at the top of each page */
717  Rectangle(printer.hDC, border, border, rcPrintRect.right - border, border + tm.tmHeight * 2);
718  /* I don't know what's up with this TextOut command. This comes out
719  kind of mangled.
720  */
721  TextOut(printer.hDC,
722  border * 2,
723  border + tm.tmHeight / 2,
724  Globals.szFileTitle,
725  lstrlen(Globals.szFileTitle));
726  }
727 
728  /* The starting point for the main text */
729  xLeft = 0;
730  yTop = border + tm.tmHeight * 4;
731 
732  SelectObject(printer.hDC, old_font);
733 
734  /* Since outputting strings is giving me problems, output the main
735  * text one character at a time. */
736  do {
737  if (pTemp[i] == '\n') {
738  xLeft = 0;
739  yTop += tm.tmHeight;
740  }
741  else if (pTemp[i] != '\r') {
742  if (dopage)
743  TextOut(printer.hDC, xLeft, yTop, &pTemp[i], 1);
744 
745  /* We need to get the width for each individual char, since a proportional font may be used */
746  GetTextExtentPoint32(printer.hDC, &pTemp[i], 1, &szMetric);
747  xLeft += szMetric.cx;
748 
749  /* Insert a line break if the current line does not fit into the printing area */
750  if (xLeft > rcPrintRect.right)
751  {
752  xLeft = 0;
753  yTop = yTop + tm.tmHeight;
754  }
755  }
756  } while (i++ < size && yTop < rcPrintRect.bottom);
757 
758  if (dopage)
759  EndPage(printer.hDC);
760  pagecount++;
761  } while (i < size);
762  }
763 
764  if (old_font != 0)
765  SelectObject(printer.hDC, old_font);
766  EndDoc(printer.hDC);
767  DeleteDC(printer.hDC);
768  HeapFree(GetProcessHeap(), 0, pTemp);
769  DeleteObject(font);
770 }
771 
773 {
775 }
776 
778 {
779  SendMessage(Globals.hEdit, EM_UNDO, 0, 0);
780 }
781 
783 {
784  SendMessage(Globals.hEdit, WM_CUT, 0, 0);
785 }
786 
788 {
789  SendMessage(Globals.hEdit, WM_COPY, 0, 0);
790 }
791 
793 {
794  SendMessage(Globals.hEdit, WM_PASTE, 0, 0);
795 }
796 
798 {
799  SendMessage(Globals.hEdit, WM_CLEAR, 0, 0);
800 }
801 
803 {
804  SendMessage(Globals.hEdit, EM_SETSEL, 0, (LPARAM)-1);
805 }
806 
808 {
809  SYSTEMTIME st;
811  TCHAR szText[MAX_STRING_LEN * 2 + 2];
812 
813  GetLocalTime(&st);
814 
816  _tcscpy(szText, szDate);
817  _tcscat(szText, _T(" "));
819  _tcscat(szText, szDate);
820  SendMessage(Globals.hEdit, EM_REPLACESEL, TRUE, (LPARAM)szText);
821 }
822 
824 {
825  RECT rc;
826  RECT rcstatus;
827  BOOL bStatusBarVisible;
828 
829  /* Check if status bar object already exists. */
830  if (Globals.hStatusBar == NULL)
831  {
832  /* Try to create the status bar */
834  NULL,
837 
838  if (Globals.hStatusBar == NULL)
839  {
840  ShowLastError();
841  return;
842  }
843 
844  /* Load the string for formatting column/row text output */
845  LoadString(Globals.hInstance, STRING_LINE_COLUMN, Globals.szStatusBarLineCol, MAX_PATH - 1);
846 
847  /* Set the status bar for single-text output */
848  SendMessage(Globals.hStatusBar, SB_SIMPLE, (WPARAM)TRUE, (LPARAM)0);
849  }
850 
851  /* Set status bar visiblity according to the settings. */
852  if ((Globals.bWrapLongLines != FALSE) || (Globals.bShowStatusBar == FALSE))
853  {
854  bStatusBarVisible = FALSE;
855  ShowWindow(Globals.hStatusBar, SW_HIDE);
856  }
857  else
858  {
859  bStatusBarVisible = TRUE;
860  ShowWindow(Globals.hStatusBar, SW_SHOW);
861  SendMessage(Globals.hStatusBar, WM_SIZE, 0, 0);
862  }
863 
864  /* Set check state in show status bar item. */
865  if (bStatusBarVisible)
866  {
868  }
869  else
870  {
872  }
873 
874  /* Update menu mar with the previous changes */
876 
877  /* Sefety test is edit control exists */
878  if (Globals.hEdit != NULL)
879  {
880  /* Retrieve the sizes of the controls */
882  GetClientRect(Globals.hStatusBar, &rcstatus);
883 
884  /* If status bar is currently visible, update dimensions of edit control */
885  if (bStatusBarVisible)
886  rc.bottom -= (rcstatus.bottom - rcstatus.top);
887 
888  /* Resize edit control to right size. */
889  MoveWindow(Globals.hEdit,
890  rc.left,
891  rc.top,
892  rc.right - rc.left,
893  rc.bottom - rc.top,
894  TRUE);
895  }
896 
897  /* Update content with current row/column text */
899 }
900 
902 {
903  DWORD dwStyle;
904  int iSize;
905  LPTSTR pTemp = NULL;
906  BOOL bModified = FALSE;
907 
908  iSize = 0;
909 
910  /* If the edit control already exists, try to save its content */
911  if (Globals.hEdit != NULL)
912  {
913  /* number of chars currently written into the editor. */
914  iSize = GetWindowTextLength(Globals.hEdit);
915  if (iSize)
916  {
917  /* Allocates temporary buffer. */
918  pTemp = HeapAlloc(GetProcessHeap(), 0, (iSize + 1) * sizeof(TCHAR));
919  if (!pTemp)
920  {
921  ShowLastError();
922  return;
923  }
924 
925  /* Recover the text into the control. */
926  GetWindowText(Globals.hEdit, pTemp, iSize + 1);
927 
928  if (SendMessage(Globals.hEdit, EM_GETMODIFY, 0, 0))
929  bModified = TRUE;
930  }
931 
932  /* Restore original window procedure */
934 
935  /* Destroy the edit control */
936  DestroyWindow(Globals.hEdit);
937  }
938 
939  /* Update wrap status into the main menu and recover style flags */
940  if (Globals.bWrapLongLines)
941  {
942  dwStyle = EDIT_STYLE_WRAP;
944  } else {
945  dwStyle = EDIT_STYLE;
947  }
948 
949  /* Update previous changes */
951 
952  /* Create the new edit control */
954  EDIT_CLASS,
955  NULL,
956  dwStyle,
962  NULL,
964  NULL);
965 
966  if (Globals.hEdit == NULL)
967  {
968  if (pTemp)
969  {
970  HeapFree(GetProcessHeap(), 0, pTemp);
971  }
972 
973  ShowLastError();
974  return;
975  }
976 
978  SendMessage(Globals.hEdit, EM_LIMITTEXT, 0, 0);
979 
980  /* If some text was previously saved, restore it. */
981  if (iSize != 0)
982  {
983  SetWindowText(Globals.hEdit, pTemp);
984  HeapFree(GetProcessHeap(), 0, pTemp);
985 
986  if (bModified)
987  SendMessage(Globals.hEdit, EM_SETMODIFY, TRUE, 0);
988  }
989 
990  /* Sub-class a new window callback for row/column detection. */
991  Globals.EditProc = (WNDPROC)SetWindowLongPtr(Globals.hEdit,
992  GWLP_WNDPROC,
994 
995  /* Create/update status bar */
997 
998  /* Finally shows new edit control and set focus into it. */
999  ShowWindow(Globals.hEdit, SW_SHOW);
1000  SetFocus(Globals.hEdit);
1001 }
1002 
1004 {
1005  Globals.bWrapLongLines = !Globals.bWrapLongLines;
1006 
1007  if (Globals.bWrapLongLines)
1008  {
1010  }
1011  else
1012  {
1014  }
1015 
1017 }
1018 
1020 {
1021  CHOOSEFONT cf;
1022  LOGFONT lf = Globals.lfFont;
1023 
1024  ZeroMemory( &cf, sizeof(cf) );
1025  cf.lStructSize = sizeof(cf);
1026  cf.hwndOwner = Globals.hMainWnd;
1027  cf.lpLogFont = &lf;
1029 
1030  if (ChooseFont(&cf))
1031  {
1032  HFONT currfont = Globals.hFont;
1033 
1034  Globals.hFont = CreateFontIndirect(&lf);
1035  Globals.lfFont = lf;
1037  if (currfont != NULL)
1038  DeleteObject(currfont);
1039  }
1040 }
1041 
1043 
1045 {
1046  if (Globals.hFindReplaceDlg != NULL)
1047  {
1048  SetFocus(Globals.hFindReplaceDlg);
1049  return;
1050  }
1051 
1052  ZeroMemory(&Globals.find, sizeof(Globals.find));
1053  Globals.find.lStructSize = sizeof(Globals.find);
1054  Globals.find.hwndOwner = Globals.hMainWnd;
1056  Globals.find.lpstrFindWhat = Globals.szFindText;
1057  Globals.find.wFindWhatLen = ARRAY_SIZE(Globals.szFindText);
1058  Globals.find.lpstrReplaceWith = Globals.szReplaceText;
1059  Globals.find.wReplaceWithLen = ARRAY_SIZE(Globals.szReplaceText);
1060  Globals.find.Flags = FR_DOWN;
1061 
1062  /* We only need to create the modal FindReplace dialog which will */
1063  /* notify us of incoming events using hMainWnd Window Messages */
1064 
1065  Globals.hFindReplaceDlg = pfnProc(&Globals.find);
1066  assert(Globals.hFindReplaceDlg != NULL);
1067 }
1068 
1070 {
1072 }
1073 
1075 {
1076  if (Globals.find.lpstrFindWhat != NULL)
1078  else
1079  DIALOG_Search();
1080 }
1081 
1083 {
1085 }
1086 
1087 static INT_PTR
1088 CALLBACK
1090 {
1091  BOOL bResult = FALSE;
1092  HWND hTextBox;
1093  TCHAR szText[32];
1094 
1095  switch(uMsg) {
1096  case WM_INITDIALOG:
1097  hTextBox = GetDlgItem(hwndDialog, ID_LINENUMBER);
1098  _sntprintf(szText, ARRAY_SIZE(szText), _T("%ld"), lParam);
1099  SetWindowText(hTextBox, szText);
1100  break;
1101  case WM_COMMAND:
1102  if (HIWORD(wParam) == BN_CLICKED)
1103  {
1104  if (LOWORD(wParam) == IDOK)
1105  {
1106  hTextBox = GetDlgItem(hwndDialog, ID_LINENUMBER);
1107  GetWindowText(hTextBox, szText, ARRAY_SIZE(szText));
1108  EndDialog(hwndDialog, _ttoi(szText));
1109  bResult = TRUE;
1110  }
1111  else if (LOWORD(wParam) == IDCANCEL)
1112  {
1113  EndDialog(hwndDialog, 0);
1114  bResult = TRUE;
1115  }
1116  }
1117  break;
1118  }
1119 
1120  return bResult;
1121 }
1122 
1124 {
1125  INT_PTR nLine;
1126  LPTSTR pszText;
1127  int nLength, i;
1128  DWORD dwStart, dwEnd;
1129 
1130  nLength = GetWindowTextLength(Globals.hEdit);
1131  pszText = (LPTSTR) HeapAlloc(GetProcessHeap(), 0, (nLength + 1) * sizeof(*pszText));
1132  if (!pszText)
1133  return;
1134 
1135  /* Retrieve current text */
1136  GetWindowText(Globals.hEdit, pszText, nLength + 1);
1137  SendMessage(Globals.hEdit, EM_GETSEL, (WPARAM) &dwStart, (LPARAM) &dwEnd);
1138 
1139  nLine = 1;
1140  for (i = 0; (i < (int) dwStart) && pszText[i]; i++)
1141  {
1142  if (pszText[i] == '\n')
1143  nLine++;
1144  }
1145 
1148  Globals.hMainWnd,
1150  nLine);
1151 
1152  if (nLine >= 1)
1153  {
1154  for (i = 0; pszText[i] && (nLine > 1) && (i < nLength - 1); i++)
1155  {
1156  if (pszText[i] == '\n')
1157  nLine--;
1158  }
1159  SendMessage(Globals.hEdit, EM_SETSEL, i, i);
1160  SendMessage(Globals.hEdit, EM_SCROLLCARET, 0, 0);
1161  }
1162  HeapFree(GetProcessHeap(), 0, pszText);
1163 }
1164 
1166 {
1167  int line, col;
1168  TCHAR buff[MAX_PATH];
1169  DWORD dwStart, dwSize;
1170 
1171  SendMessage(Globals.hEdit, EM_GETSEL, (WPARAM)&dwStart, (LPARAM)&dwSize);
1172  line = SendMessage(Globals.hEdit, EM_LINEFROMCHAR, (WPARAM)dwStart, 0);
1173  col = dwStart - SendMessage(Globals.hEdit, EM_LINEINDEX, (WPARAM)line, 0);
1174 
1175  _stprintf(buff, Globals.szStatusBarLineCol, line + 1, col + 1);
1176  SendMessage(Globals.hStatusBar, SB_SETTEXT, SB_SIMPLEID, (LPARAM)buff);
1177 }
1178 
1180 {
1181  Globals.bShowStatusBar = !Globals.bShowStatusBar;
1182 
1184 }
1185 
1187 {
1189 }
1190 
1192 {
1193  TCHAR szNotepad[MAX_STRING_LEN];
1194  TCHAR szNotepadAuthors[MAX_STRING_LEN];
1195 
1197 
1198  LoadString(Globals.hInstance, STRING_NOTEPAD, szNotepad, ARRAY_SIZE(szNotepad));
1199  LoadString(Globals.hInstance, STRING_NOTEPAD_AUTHORS, szNotepadAuthors, ARRAY_SIZE(szNotepadAuthors));
1200 
1201  ShellAbout(Globals.hMainWnd, szNotepad, szNotepadAuthors, notepadIcon);
1202  DeleteObject(notepadIcon);
1203 }
1204 
1205 /***********************************************************************
1206  *
1207  * DIALOG_FilePageSetup
1208  */
1210 {
1212 
1213  ZeroMemory(&page, sizeof(page));
1214  page.lStructSize = sizeof(page);
1215  page.hwndOwner = Globals.hMainWnd;
1217  page.hInstance = Globals.hInstance;
1218  page.rtMargin = Globals.lMargins;
1219  page.hDevMode = Globals.hDevMode;
1220  page.hDevNames = Globals.hDevNames;
1223 
1224  PageSetupDlg(&page);
1225 
1226  Globals.hDevMode = page.hDevMode;
1227  Globals.hDevNames = page.hDevNames;
1228  Globals.lMargins = page.rtMargin;
1229 }
1230 
1231 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
1232  *
1233  * DIALOG_PAGESETUP_Hook
1234  */
1235 
1237 {
1238  switch (msg)
1239  {
1240  case WM_COMMAND:
1241  if (HIWORD(wParam) == BN_CLICKED)
1242  {
1243  switch (LOWORD(wParam))
1244  {
1245  case IDOK:
1246  /* save user input and close dialog */
1247  GetDlgItemText(hDlg, 0x141, Globals.szHeader, ARRAY_SIZE(Globals.szHeader));
1248  GetDlgItemText(hDlg, 0x143, Globals.szFooter, ARRAY_SIZE(Globals.szFooter));
1249  return FALSE;
1250 
1251  case IDCANCEL:
1252  /* discard user input and close dialog */
1253  return FALSE;
1254 
1255  case IDHELP:
1256  {
1257  /* FIXME: Bring this to work */
1258  static const TCHAR sorry[] = _T("Sorry, no help available");
1259  static const TCHAR help[] = _T("Help");
1261  return TRUE;
1262  }
1263 
1264  default:
1265  break;
1266  }
1267  }
1268  break;
1269 
1270  case WM_INITDIALOG:
1271  /* fetch last user input prior to display dialog */
1272  SetDlgItemText(hDlg, 0x141, Globals.szHeader);
1273  SetDlgItemText(hDlg, 0x143, Globals.szFooter);
1274  break;
1275  }
1276 
1277  return FALSE;
1278 }
#define MB_ICONMASK
Definition: winuser.h:813
#define EM_LIMITTEXT
Definition: winuser.h:1961
static UINT_PTR CALLBACK DIALOG_PAGESETUP_Hook(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
Definition: dialog.c:1236
#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
#define HDC
Definition: msvc.h:22
VOID DIALOG_Search(VOID)
Definition: dialog.c:1069
HGLOBAL hDevMode
Definition: commdlg.h:435
#define STRING_LINE_COLUMN
Definition: notepad_res.h:99
#define MAKEINTRESOURCE
Definition: winuser.h:591
#define STRING_LF
Definition: notepad_res.h:96
#define HORZRES
Definition: wingdi.h:714
#define LOGPIXELSX
Definition: wingdi.h:716
BOOL WINAPI SetViewportOrgEx(_In_ HDC, _In_ int, _In_ int, _Out_opt_ LPPOINT)
Definition: coord.c:648
static HICON
Definition: imagelist.c:84
#define MF_DISABLED
Definition: winuser.h:130
#define PD_NOSELECTION
Definition: commdlg.h:149
LPLOGFONTA lpLogFont
Definition: commdlg.h:264
#define TRUE
Definition: types.h:120
static UINT_PTR CALLBACK DIALOG_FileSaveAs_Hook(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
Definition: dialog.c:454
const CHAR * LPCTSTR
Definition: xmlstorage.h:193
#define IDOK
Definition: winuser.h:824
#define CloseHandle
Definition: compat.h:398
WORD nMaxPage
Definition: commdlg.h:474
BOOL WINAPI DrawMenuBar(_In_ HWND)
#define VARIABLE_PITCH
Definition: wingdi.h:443
static const TCHAR empty_str[]
Definition: dialog.c:32
#define STRING_ANSI
Definition: notepad_res.h:90
#define MF_BYCOMMAND
Definition: winuser.h:202
VOID DoOpenFile(LPCTSTR szFileName)
Definition: dialog.c:345
#define PSD_ENABLEPAGESETUPTEMPLATE
Definition: commdlg.h:184
#define PageSetupDlg
Definition: commdlg.h:667
#define WM_CUT
Definition: winuser.h:1822
#define error(str)
Definition: mkdosfs.c:1605
#define IDYES
Definition: winuser.h:829
VOID DIALOG_FileExit(VOID)
Definition: dialog.c:772
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:93
Definition: mk_font.cpp:20
static BOOL DoSaveFile(VOID)
Definition: dialog.c:264
int _tcscmp(const _TCHAR *s1, const _TCHAR *s2)
Definition: tcscmp.h:8
#define UNREFERENCED_PARAMETER(P)
Definition: ntbasedef.h:323
#define SW_HIDE
Definition: winuser.h:762
#define PSD_MARGINS
Definition: commdlg.h:173
VOID DIALOG_EditSelectAll(VOID)
Definition: dialog.c:802
#define LOCALE_USER_DEFAULT
HWND hwndOwner
Definition: commdlg.h:434
uint8_t entry
Definition: isohybrid.c:63
LPCWSTR pszText
Definition: msvc.h:103
#define CALLBACK
Definition: compat.h:27
_In_ DWORD nLength
Definition: wincon.h:461
HWND hWnd
Definition: settings.c:17
LONG top
Definition: windef.h:297
HANDLE HWND
Definition: compat.h:13
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1497
#define WM_PASTE
Definition: winuser.h:1824
#define INVALID_HANDLE_VALUE
Definition: compat.h:391
_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:1059
#define ZeroMemory
Definition: winbase.h:1635
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
LPCSTR lpPageSetupTemplateName
Definition: commdlg.h:445
DWORD lStructSize
Definition: commdlg.h:261
WORD nCopies
Definition: commdlg.h:475
static void AlertFileNotFound(LPCTSTR szFileName)
Definition: dialog.c:119
#define WS_CHILD
Definition: pedump.c:617
BOOL WriteText(HANDLE hFile, LPCWSTR pszText, DWORD dwTextLen, ENCODING encFile, int iEoln)
Definition: text.c:319
LPCSTR lpTemplateName
Definition: commdlg.h:348
LONG left
Definition: windef.h:296
#define FILE_SHARE_WRITE
Definition: nt_native.h:681
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
VOID DIALOG_EditCopy(VOID)
Definition: dialog.c:787
int32_t INT_PTR
Definition: typedefs.h:62
BOOL NOTEPAD_FindNext(FINDREPLACE *pFindReplace, BOOL bReplace, BOOL bShowAlert)
Definition: main.c:138
BOOL HasFileExtension(LPCTSTR szFilename)
Definition: dialog.c:162
#define GetTextMetrics
Definition: wingdi.h:4451
#define CMD_GOTO
Definition: notepad_res.h:55
#define WM_CLEAR
Definition: winuser.h:1825
LONG right
Definition: windef.h:298
#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:436
RECT rtMargin
Definition: commdlg.h:440
#define SetWindowLongPtr
Definition: treelist.c:70
#define GetOpenFileName
Definition: commdlg.h:665
#define CB_GETCURSEL
Definition: winuser.h:1904
WPARAM wParam
Definition: combotst.c:138
CHAR * LPTSTR
Definition: xmlstorage.h:192
int WINAPI EndPage(_In_ HDC)
#define FILE_SHARE_READ
Definition: compat.h:125
static RECT GetPrintingRect(HDC hdc, RECT margins)
Definition: dialog.c:240
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:5664
#define STRING_NOTEPAD_AUTHORS
Definition: notepad_res.h:104
DWORD nMaxFile
Definition: commdlg.h:337
UINT_PTR WPARAM
Definition: windef.h:207
#define IDHELP
Definition: resource_2.h:8
#define EM_GETSEL
Definition: winuser.h:1958
int WINAPI StartPage(_In_ HDC)
#define MB_ICONEXCLAMATION
Definition: winuser.h:779
#define ChooseFont
Definition: commdlg.h:662
#define PHYSICALHEIGHT
Definition: wingdi.h:734
HANDLE hDevNames
Definition: commdlg.h:468
#define GetSaveFileName
Definition: commdlg.h:666
BOOL ReadText(HANDLE hFile, LPWSTR *ppszText, DWORD *pdwTextLen, ENCODING *pencFile, int *piEoln)
Definition: text.c:51
#define PrintDlg
Definition: commdlg.h:668
CLIPBOARD_GLOBALS Globals
Definition: clipbrd.c:13
#define CMD_STATUSBAR
Definition: notepad_res.h:60
GLenum GLclampf GLint i
Definition: glfuncs.h:14
BOOL WINAPI EnableMenuItem(_In_ HMENU, _In_ UINT, _In_ UINT)
LPOFNHOOKPROC lpfnHook
Definition: commdlg.h:347
#define STRING_NOTEPAD
Definition: notepad_res.h:74
static const WCHAR szText[]
Definition: dialog.c:139
#define DIALOG_PAGESETUP
Definition: notepad_res.h:25
#define WM_COPY
Definition: winuser.h:1823
BOOL FileExists(LPCTSTR szFilename)
Definition: dialog.c:151
int WINAPI SetMapMode(_In_ HDC, _In_ int)
LONG_PTR LPARAM
Definition: windef.h:208
#define CreateStatusWindow
Definition: commctrl.h:1903
#define CF_SCREENFONTS
Definition: commdlg.h:59
LONG lfHeight
Definition: dimm.idl:42
#define GENERIC_WRITE
Definition: nt_native.h:90
#define CLIP_DEFAULT_PRECIS
Definition: wingdi.h:424
BOOL DoCloseFile(VOID)
Definition: dialog.c:313
#define OFN_ENABLEHOOK
Definition: commdlg.h:99
#define STRING_NOTSAVED
Definition: notepad_res.h:84
#define FORMAT_MESSAGE_ALLOCATE_BUFFER
Definition: winbase.h:400
#define SB_SIMPLEID
Definition: precomp.h:15
VOID DIALOG_EditDelete(VOID)
Definition: dialog.c:797
#define OFN_ENABLETEMPLATE
Definition: commdlg.h:102
#define CreateWindowEx
Definition: winuser.h:5621
#define CW_USEDEFAULT
Definition: winuser.h:225
#define SB_SIMPLE
Definition: commctrl.h:1928
#define CB_ADDSTRING
Definition: winuser.h:1897
HDC hdc
Definition: msvc.h:53
VOID DIALOG_FilePageSetup(void)
Definition: dialog.c:1209
LONG lfWeight
Definition: dimm.idl:46
UINT msg
Definition: msvc.h:92
WORD nFromPage
Definition: commdlg.h:471
smooth NULL
Definition: ftsmooth.c:416
#define MB_ICONQUESTION
Definition: winuser.h:783
VOID DoCreateStatusBar(VOID)
Definition: dialog.c:823
#define MB_YESNOCANCEL
Definition: winuser.h:812
int GetSelectionText(HWND hWnd, LPTSTR lpString, int nMaxCount)
Definition: dialog.c:182
LONG cx
Definition: windef.h:324
#define PD_SELECTION
Definition: commdlg.h:147
#define PD_RETURNDC
Definition: commdlg.h:155
Definition: module.h:566
VOID WINAPI GetLocalTime(OUT LPSYSTEMTIME lpSystemTime)
Definition: time.c:276
DWORD lStructSize
Definition: commdlg.h:433
#define STRING_UNICODE_BE
Definition: notepad_res.h:92
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:3596
#define SW_SHOW
Definition: winuser.h:769
VOID DIALOG_SelectFont(VOID)
Definition: dialog.c:1019
VOID DIALOG_GoTo(VOID)
Definition: dialog.c:1123
#define FORMAT_MESSAGE_FROM_SYSTEM
Definition: winbase.h:404
VOID DIALOG_SearchNext(VOID)
Definition: dialog.c:1074
#define STRING_CRLF
Definition: notepad_res.h:95
VOID DoCreateEditWindow(VOID)
Definition: dialog.c:901
#define STRING_PRINTERROR
Definition: notepad_res.h:100
#define PostMessage
Definition: winuser.h:5698
#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:177
#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:1657
VOID ShowLastError(VOID)
Definition: dialog.c:38
DWORD Flags
Definition: commdlg.h:437
unsigned int BOOL
Definition: ntddk_ex.h:94
GLsizeiptr size
Definition: glext.h:5919
LPCSTR lpszOutput
Definition: wingdi.h:1655
#define GetDlgItemText
Definition: winuser.h:5651
#define GetProcessHeap()
Definition: compat.h:395
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
#define PHYSICALOFFSETY
Definition: wingdi.h:736
LONG tmHeight
Definition: wingdi.h:2338
#define STRING_UNTITLED
Definition: notepad_res.h:78
#define WM_SIZE
Definition: winuser.h:1593
LONG HRESULT
Definition: typedefs.h:77
HINSTANCE hInstance
Definition: commdlg.h:441
#define EDIT_CLASS
Definition: main.h:32
VOID DIALOG_EditPaste(VOID)
Definition: dialog.c:792
VOID DIALOG_FileOpen(VOID)
Definition: dialog.c:409
#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:26
DWORD lStructSize
Definition: commdlg.h:329
#define EM_GETMODIFY
Definition: winuser.h:1955
VOID DIALOG_StatusBarUpdateCaretPos(VOID)
Definition: dialog.c:1165
#define EM_SETSEL
Definition: winuser.h:1979
#define ReplaceText
Definition: commdlg.h:669
unsigned int UINT
Definition: ndis.h:50
VOID DIALOG_FilePrint(VOID)
Definition: dialog.c:557
unsigned short WORD
Definition: ntddk_ex.h:93
#define OUT_DEFAULT_PRECIS
Definition: wingdi.h:413
#define BN_CLICKED
Definition: winuser.h:1886
unsigned long DWORD
Definition: ntddk_ex.h:95
DWORD WINAPI CheckMenuItem(_In_ HMENU, _In_ UINT, _In_ UINT)
#define ShellAbout
Definition: shellapi.h:678
unsigned __int3264 UINT_PTR
Definition: mstsclib_h.h:274
#define OPEN_ALWAYS
Definition: disk.h:70
#define SetDlgItemText
Definition: winuser.h:5715
#define ID_EOLN
Definition: notepad_res.h:29
TCHAR szTitle[MAX_LOADSTRING]
Definition: magnifier.c:36
#define PD_PAGENUMS
Definition: commdlg.h:148
#define FormatMessage
Definition: winbase.h:3609
#define DialogBoxParam
Definition: winuser.h:5630
LPCSTR lpszDatatype
Definition: wingdi.h:1656
char line[200]
Definition: main.c:97
#define FILE_ATTRIBUTE_NORMAL
Definition: compat.h:126
#define EM_UNDO
Definition: winuser.h:1982
int DIALOG_StringMsgBox(HWND hParent, int formatId, LPCTSTR szString, DWORD dwFlags)
Definition: dialog.c:98
#define EM_EMPTYUNDOBUFFER
Definition: winuser.h:1946
#define StringCchCopy
Definition: strsafe.h:139
#define PD_USEDEVMODECOPIES
Definition: commdlg.h:165
static const TCHAR txt_files[]
Definition: dialog.c:34
#define SB_SETTEXT
Definition: commctrl.h:1919
HWND(WINAPI * FINDPROC)(LPFINDREPLACE lpfr)
Definition: dialog.c:1042
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
Definition: wincrypt.h:1175
static const WCHAR szDate[]
Definition: http.c:99
#define MB_ICONERROR
Definition: winuser.h:781
int WINAPI GetDeviceCaps(_In_opt_ HDC, _In_ int)
const DOCKBAR PVOID HWND hParent
Definition: tooldock.h:22
#define _sntprintf
Definition: xmlstorage.h:201
#define OFN_HIDEREADONLY
Definition: commdlg.h:107
GLdouble s
Definition: gl.h:2039
#define MessageBox
Definition: winuser.h:5688
#define HELP_INDEX
Definition: winuser.h:2364
#define GENERIC_READ
Definition: compat.h:124
#define CB_SETCURSEL
Definition: winuser.h:1922
#define EM_SETMODIFY
Definition: winuser.h:1974
Definition: time.h:76
#define FF_ROMAN
Definition: wingdi.h:448
#define WM_COMMAND
Definition: winuser.h:1716
int cbSize
Definition: wingdi.h:1653
#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)
#define WINAPI
Definition: msvc.h:20
static RECT margins
Definition: print.c:55
#define GWLP_WNDPROC
Definition: treelist.c:66
DWORD Flags
Definition: commdlg.h:266
BYTE lfQuality
Definition: dimm.idl:53
HWND hwndOwner
Definition: commdlg.h:466
LRESULT(CALLBACK * WNDPROC)(HWND, UINT, WPARAM, LPARAM)
Definition: winuser.h:2859
#define PHYSICALOFFSETX
Definition: wingdi.h:735
#define GetTimeFormat
Definition: winnls.h:1157
#define _stprintf
Definition: utility.h:124
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
ENCODING
Definition: more.c:155
#define PHYSICALWIDTH
Definition: wingdi.h:733
#define S_OK
Definition: intsafe.h:59
#define CREATE_ALWAYS
Definition: disk.h:72
#define lstrlen
Definition: winbase.h:3690
LRESULT CALLBACK EDIT_WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
Definition: main.c:304
#define FW_BOLD
Definition: wingdi.h:376
BOOL WINAPI EndDialog(HWND hwnd, INT_PTR retval)
Definition: dialog.c:2015
#define WS_EX_CLIENTEDGE
Definition: winuser.h:384
HINSTANCE hInstance
Definition: commdlg.h:476
VOID DIALOG_EditUndo(VOID)
Definition: dialog.c:777
BOOL WINAPI DeleteDC(_In_ HDC)
IN OUT PVCB OUT PDIRENT OUT PBCB IN BOOLEAN CreateFile
Definition: fatprocs.h:904
#define EM_LINEFROMCHAR
Definition: winuser.h:1962
LPSTR lpstrFile
Definition: commdlg.h:336
HWND hwndOwner
Definition: commdlg.h:262
LPCWSTR szPath
Definition: env.c:35
static VOID DIALOG_SearchDialog(FINDPROC pfnProc)
Definition: dialog.c:1044
#define GetDateFormat
Definition: winnls.h:1152
#define ARRAY_SIZE(a)
Definition: main.h:24
HLOCAL NTAPI LocalFree(HLOCAL hMem)
Definition: heapmem.c:1577
LPCSTR lpszDocName
Definition: wingdi.h:1654
BYTE lfClipPrecision
Definition: dimm.idl:52
#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:194
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:75
#define SetWindowText
Definition: winuser.h:5723
LPCSTR lpstrFilter
Definition: commdlg.h:332
#define ID_LINENUMBER
Definition: notepad_res.h:31
#define CreateFontIndirect
Definition: wingdi.h:4421
#define MB_OK
Definition: winuser.h:784
#define VERTRES
Definition: wingdi.h:715
#define STRING_NOTFOUND
Definition: notepad_res.h:86
static const TCHAR helpfile[]
Definition: dialog.c:31
VOID DIALOG_Replace(VOID)
Definition: dialog.c:1082
#define WM_SETFONT
Definition: winuser.h:1632
VOID DIALOG_EditCut(VOID)
Definition: dialog.c:782
#define FR_DOWN
Definition: commdlg.h:127
DWORD lStructSize
Definition: commdlg.h:465
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
VOID NOTEPAD_EnableSearchMenu()
Definition: main.c:32
BOOL DIALOG_FileSaveAs(VOID)
Definition: dialog.c:510
WORD nToPage
Definition: commdlg.h:472
#define STRING_UNICODE
Definition: notepad_res.h:91
#define MM_TEXT
Definition: wingdi.h:871
#define GetTextExtentPoint32
Definition: wingdi.h:4449
#define SendMessage
Definition: winuser.h:5709
_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:1963
HWND WINAPI GetDlgItem(HWND hDlg, int nIDDlgItem)
Definition: dialog.c:2113
#define HIWORD(l)
Definition: typedefs.h:246
#define EDIT_STYLE_WRAP
Definition: main.h:28
#define TextOut
Definition: wingdi.h:4460
#define EDIT_STYLE
Definition: main.h:30
#define GetWindowTextLength
Definition: winuser.h:5665
CHAR lfFaceName[LF_FACESIZE]
Definition: dimm.idl:55
VOID DIALOG_HelpAboutNotepad(VOID)
Definition: dialog.c:1191
LONG bottom
Definition: windef.h:299
#define LOGPIXELSY
Definition: wingdi.h:717
VOID DIALOG_FileNew(VOID)
Definition: dialog.c:398
DWORD Flags
Definition: commdlg.h:470
#define StartDoc
Definition: wingdi.h:4459
VOID DIALOG_EditWrap(VOID)
Definition: dialog.c:1003
#define LoadIcon
Definition: winuser.h:5679
#define IDNO
Definition: winuser.h:830
static void AlertPrintError(void)
Definition: dialog.c:135
int GetSelectionTextLength(HWND hWnd)
Definition: dialog.c:172
#define MF_GRAYED
Definition: winuser.h:129
#define ANSI_CHARSET
Definition: wingdi.h:381
WCHAR * LPWSTR
Definition: xmlstorage.h:184
#define IDCANCEL
Definition: winuser.h:825
LPPAGESETUPHOOK lpfnPageSetupHook
Definition: commdlg.h:443
HGLOBAL hDevNames
Definition: commdlg.h:436
#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:1186
VOID DIALOG_EditTimeDate(VOID)
Definition: dialog.c:807
HINSTANCE hInstance
Definition: precomp.h:43
VOID DIALOG_ViewStatusBar(VOID)
Definition: dialog.c:1179
#define WS_VISIBLE
Definition: pedump.c:620
#define CMD_STATUSBAR_WND_ID
Definition: notepad_res.h:61
HDC hDC
Definition: commdlg.h:469
int help
Definition: sort.c:20
#define WM_INITDIALOG
Definition: winuser.h:1715
#define WS_EX_STATICEDGE
Definition: winuser.h:403
LPARAM lParam
Definition: combotst.c:139
_In_ int nMaxCount
Definition: winuser.h:4746
#define LOWORD(l)
Definition: pedump.c:82
HANDLE hDevMode
Definition: commdlg.h:467
static unsigned char buff[32768]
Definition: fatten.c:17
#define STRING_CR
Definition: notepad_res.h:97
static int AlertFileNotSaved(LPCTSTR szFileName)
Definition: dialog.c:124
#define HeapFree(x, y, z)
Definition: compat.h:394
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:54
#define LoadString
Definition: winuser.h:5685
#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:1967
BOOL DIALOG_FileSave(VOID)
Definition: dialog.c:438
#define EM_SCROLLCARET
Definition: richedit.h:81
DOCINFOA DOCINFO
Definition: wingdi.h:4391
unsigned int(__cdecl typeof(jpeg_read_scanlines))(struct jpeg_decompress_struct *
Definition: typeof.h:29
int WINAPI EndDoc(_In_ HDC)
HWND hwndDialog
Definition: powershemes.c:43
DWORD Flags
Definition: commdlg.h:342
BOOL WINAPI FindClose(HANDLE hFindFile)
Definition: find.c:502
#define WinHelp
Definition: winuser.h:5730
static INT_PTR CALLBACK DIALOG_GoTo_DialogProc(HWND hwndDialog, UINT uMsg, WPARAM wParam, LPARAM lParam)
Definition: dialog.c:1089