Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

432 lines
14 KiB

  1. /* Notepad.h */
  2. #pragma warning(disable: 4201) // nonstd extension: nameless struct/union
  3. #pragma warning(disable:4127) // conditional expression is constant
  4. #define NOCOMM
  5. #define NOSOUND
  6. #define STRICT
  7. #include <windows.h>
  8. #include <ole2.h>
  9. #include <commdlg.h>
  10. #include <commctrl.h>
  11. // we need this for CharSizeOf(), ByteCountOf(),
  12. #include "uniconv.h"
  13. /* handy debug macro */
  14. #define ODS OutputDebugString
  15. #define CP_UTF16 1200
  16. #define CP_UTF16BE 1201
  17. #define CP_AUTO 65536 // Internal to notepad
  18. #define BOM_UTF8_HALF 0xBBEF
  19. #define BOM_UTF8_2HALF 0xBF
  20. /* openfile filter for all text files */
  21. #define FILE_TEXT 1
  22. #define FILE_ENCODED 4
  23. typedef enum WB
  24. {
  25. wbDefault, // New file or loaded from encoding without BOM
  26. wbNo, // BOM was not present
  27. wbYes, // BOM was not present
  28. } WB;
  29. /* ID for the status window */
  30. #define ID_STATUS_WINDOW WM_USER+1
  31. #define PT_LEN 40 /* max length of page setup strings */
  32. #define CCHFILTERMAX 256 /* max. length of filter name buffers */
  33. // Menu IDs
  34. #define ID_APPICON 1 /* must be one for explorer to find this */
  35. #define ID_ICON 2
  36. #define ID_MENUBAR 1
  37. // Dialog IDs
  38. #define IDD_ABORTPRINT 11
  39. #define IDD_PAGESETUP 12
  40. #define IDD_SAVEDIALOG 13 // template for save dialog
  41. #define IDD_GOTODIALOG 14 // goto line number dialog
  42. #define IDD_SELECT_ENCODING 15 // Select Encoding dialog
  43. #define IDD_SAVE_UNICODE_DIALOG 16 //
  44. // Control IDs
  45. #define IDC_CODEPAGE 257 // listbox in save dialog
  46. #define IDC_GOTO 258 // line number to goto
  47. #define IDC_ENCODING 259 // static text in save dialog
  48. #define IDC_SAVE_AS_UNICODE 260
  49. // Menu IDs
  50. // File
  51. #define M_NEW 1
  52. #define M_OPEN 2
  53. #define M_SAVE 3
  54. #define M_SAVEAS 4
  55. #define M_PAGESETUP 5
  56. #define M_PRINT 6
  57. #define M_EXIT 7
  58. // Edit
  59. #define M_UNDO 16
  60. #define M_CUT WM_CUT /* These just get passed down to the edit control */
  61. #define M_COPY WM_COPY
  62. #define M_PASTE WM_PASTE
  63. #define M_CLEAR WM_CLEAR
  64. #define M_FIND 21
  65. #define M_FINDNEXT 22
  66. #define M_REPLACE 23
  67. #define M_GOTO 24
  68. #define M_SELECTALL 25
  69. #define M_DATETIME 26
  70. #define M_STATUSBAR 27
  71. // Format
  72. #define M_WW 32
  73. #define M_SETFONT 33
  74. // Help
  75. #define M_HELP 64
  76. #define M_ABOUT 65
  77. // Control IDs
  78. #define ID_EDIT 15
  79. #define ID_FILENAME 20
  80. #define ID_PAGENUMBER 21
  81. #define ID_HEADER 30
  82. #define ID_FOOTER 31
  83. #define ID_HEADER_LABEL 32
  84. #define ID_FOOTER_LABEL 33
  85. #define ID_ASCII 50
  86. #define ID_UNICODE 51
  87. // IDs used to load RC strings
  88. #define IDS_DISKERROR 1
  89. #define IDS_FNF 2
  90. #define IDS_SCBC 3
  91. #define IDS_UNTITLED 4
  92. #define IDS_NOTEPAD 5
  93. #define IDS_CFS 6
  94. #define IDS_ERRSPACE 7
  95. #define IDS_FTL 8
  96. #define IDS_NN 9
  97. #define IDS_COMMDLGINIT 10
  98. #define IDS_PRINTDLGINIT 11
  99. #define IDS_CANTPRINT 12
  100. #define IDS_NVF 13
  101. #define IDS_CREATEERR 14
  102. #define IDS_NOWW 15
  103. #define IDS_MERGE1 16
  104. #define IDS_HELPFILE 17
  105. #define IDS_HEADER 18
  106. #define IDS_FOOTER 19
  107. #define IDS_TEXTFILES 20
  108. #define IDS_HTMLFILES 21
  109. #define IDS_XMLFILES 22
  110. #define IDS_ENCODEDTEXT 23
  111. #define IDS_ALLFILES 24
  112. #define IDS_MOREENCODING 25
  113. #define IDS_CANNOTQUIT 28
  114. #define IDS_LOADDRVFAIL 29
  115. #define IDS_ACCESSDENY 30
  116. #define IDS_FONTTOOBIG 31
  117. #define IDS_COMMDLGERR 32
  118. #define IDS_LINEERROR 33 /* line number error */
  119. #define IDS_LINETOOLARGE 34 /* line number too large */
  120. #define IDS_INVALIDCP 35 /* invalid codepage */
  121. #define IDS_INVALIDIANA 36 /* invalid encoding */
  122. #define IDS_ENCODINGMISMATCH 37
  123. #define IDS_CURRENT_PAGE 38 /* currently printing page on abort dlg */
  124. // constants for the status bar
  125. #define IDS_LINECOL 39
  126. #define IDS_COMPRESSED_FILE 40
  127. #define IDS_ENCRYPTED_FILE 41
  128. #define IDS_HIDDEN_FILE 42
  129. #define IDS_OFFLINE_FILE 43
  130. #define IDS_READONLY_FILE 44
  131. #define IDS_SYSTEM_FILE 45
  132. #define IDS_FILE 46
  133. #define IDS_NOSTATUSAVAIL 47
  134. #define CCHKEYMAX 128 /* max characters in search string */
  135. #define CCHNPMAX 0 /* no limit on file size */
  136. #define SETHANDLEINPROGRESS 0x0001 /* EM_SETHANDLE has been sent */
  137. #define SETHANDLEFAILED 0x0002 /* EM_SETHANDLE caused EN_ERRSPACE */
  138. /* Standard edit control style:
  139. * ES_NOHIDESEL set so that find/replace dialog doesn't undo selection
  140. * of text while it has the focus away from the edit control. Makes finding
  141. * your text easier.
  142. */
  143. #define ES_STD (WS_CHILD|WS_VSCROLL|WS_VISIBLE|ES_MULTILINE|ES_NOHIDESEL)
  144. /* EXTERN decls for data */
  145. extern BOOL fCase; /* Flag specifying case sensitive search */
  146. extern BOOL fReverse; /* Flag for direction of search */
  147. extern TCHAR szSearch[];
  148. extern HWND hDlgFind; /* handle to modeless FindText window */
  149. extern HANDLE hEdit;
  150. extern HANDLE hFont;
  151. extern HANDLE hAccel;
  152. extern HANDLE hInstanceNP;
  153. extern HANDLE hStdCursor, hWaitCursor;
  154. extern HWND hwndNP, hwndEdit, hwndStatus;
  155. extern LOGFONT FontStruct;
  156. extern INT iPointSize;
  157. extern BOOL fRunBySetup;
  158. extern DWORD dwEmSetHandle;
  159. extern TCHAR chMerge;
  160. extern BOOL fWrap;
  161. extern TCHAR szFileOpened[];
  162. extern HANDLE fp;
  163. //
  164. // Holds header and footer strings to be used in printing.
  165. // use HEADER and FOOTER to index.
  166. //
  167. extern TCHAR chPageText[2][PT_LEN]; // header and footer strings
  168. #define HEADER 0
  169. #define FOOTER 1
  170. //
  171. // Holds header and footer from pagesetupdlg during destroy.
  172. // if the user hit ok, then keep. Otherwise ignore.
  173. //
  174. extern TCHAR chPageTextTemp[2][PT_LEN];
  175. extern TCHAR szNotepad[];
  176. extern TCHAR *szMerge;
  177. extern TCHAR *szUntitled, *szNpTitle, *szNN, *szErrSpace;
  178. extern TCHAR **const rgsz[]; /* More strings. */
  179. extern TCHAR *szNVF;
  180. extern TCHAR *szPDIE;
  181. extern TCHAR *szDiskError;
  182. extern TCHAR *szCREATEERR;
  183. extern TCHAR *szWE;
  184. extern TCHAR *szFTL;
  185. extern TCHAR *szINF;
  186. extern TCHAR *szFNF;
  187. extern TCHAR *szNEDSTP;
  188. extern TCHAR *szNEMTP;
  189. extern TCHAR *szCFS;
  190. extern TCHAR *szPE;
  191. extern TCHAR *szCP;
  192. extern TCHAR *szACCESSDENY;
  193. extern TCHAR *szFontTooBig;
  194. extern TCHAR *szLoadDrvFail;
  195. extern TCHAR *szCommDlgErr;
  196. extern TCHAR *szCommDlgInitErr;
  197. extern TCHAR *szInvalidCP;
  198. extern TCHAR *szInvalidIANA;
  199. extern TCHAR *szEncodingMismatch;
  200. extern TCHAR *szHelpFile;
  201. extern TCHAR *szCurrentPage;
  202. extern TCHAR *szHeader;
  203. extern TCHAR *szFooter;
  204. /* variables for the new File/Open and File/Saveas dialogs */
  205. extern OPENFILENAME OFN; /* passed to the File Open/save APIs */
  206. extern TCHAR szOpenFilterSpec[]; /* default open filter spec */
  207. extern TCHAR szSaveFilterSpec[]; /* default save filter spec */
  208. extern TCHAR *szTextFiles; /* File/Open TXT filter spec. string */
  209. extern TCHAR *szHtmlFiles; /* File/Open HTML filter spec. string */
  210. extern TCHAR *szXmlFiles; /* File/Open XML filter spec. string */
  211. extern TCHAR *szEncodedText; /* File/Open TXT Filter spec. string */
  212. extern TCHAR *szAllFiles; /* File/Open Filter spec. string */
  213. extern TCHAR *szMoreEncoding;
  214. extern FINDREPLACE FR; /* Passed to FindText() */
  215. extern PAGESETUPDLG g_PageSetupDlg;
  216. extern TCHAR szPrinterName[]; /* name of the printer passed to PrintTo */
  217. extern UINT g_cpANSI; /* system ANSI codepage (GetACP()) */
  218. extern UINT g_cpOEM; /* system OEM codepage (GetOEMCP()) */
  219. extern UINT g_cpUserLangANSI; /* user UI language ANSI codepage */
  220. extern UINT g_cpUserLangOEM; /* user UI language OEM codepage */
  221. extern UINT g_cpUserLocaleANSI; /* user default LCID ANSI codepage */
  222. extern UINT g_cpUserLocaleOEM; /* user default LCID OEM codepage */
  223. extern UINT g_cpKeyboardANSI; /* keyboard ANSI codepage */
  224. extern UINT g_cpKeyboardOEM; /* keyboard OEM codepage */
  225. extern BOOL g_fSelectEncoding; /* Prompt for encoding by default */
  226. extern UINT g_cpDefault; /* codepage default */
  227. extern UINT g_cpOpened; /* codepage of open file */
  228. extern UINT g_cpSave; /* codepage in which to save */
  229. extern WB g_wbOpened; /* BOM was present when opened */
  230. extern WB g_wbSave; /* BOM should be saved */
  231. extern BOOL g_fSaveEntity; /* Entities should be saved */
  232. extern UINT wFRMsg; /* message used in communicating */
  233. /* with Find/Replace dialog */
  234. extern UINT wHlpMsg; /* message used in invoking help */
  235. extern HMENU hSysMenuSetup; /* Save Away for disabled Minimize */
  236. extern BOOL fStatus;
  237. extern INT dyStatus;
  238. /* Macro for setting status bar - x is the text to set and n is the part number
  239. in the statusbar */
  240. #define SetStatusBarText(x, n) if(hwndStatus)SendMessage(hwndStatus, SB_SETTEXT, n, (LPARAM)(LPTSTR)(x));
  241. /* EXTERN procs */
  242. /* procs in notepad.c */
  243. VOID
  244. PASCAL
  245. SetPageSetupDefaults(
  246. VOID
  247. );
  248. BOOL far PASCAL SaveAsDlgHookProc (HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam);
  249. LPCTSTR PFileInPath(LPCTSTR szFile);
  250. BOOL CheckSave(BOOL fSysModal);
  251. LRESULT NPWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
  252. BOOL FUntitled(void);
  253. const TCHAR *SzTitle(void);
  254. void SetFileName(LPCTSTR szFile);
  255. INT AlertBox(HWND hwndParent, LPCTSTR szCaption, LPCTSTR szText1,
  256. LPCTSTR szText2, UINT style);
  257. void NpWinIniChange(VOID);
  258. void FreeGlobalPD(void);
  259. INT_PTR CALLBACK GotoDlgProc(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam);
  260. INT_PTR CALLBACK SaveUnicodeDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
  261. INT_PTR CALLBACK SelectEncodingDlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
  262. VOID CALLBACK WinEventFunc(HWINEVENTHOOK hWinEventHook, DWORD event, HWND hwnd, LONG idObject,
  263. LONG idChild, DWORD dwEventThread, DWORD dwmsEventTime);
  264. VOID GotoAndScrollInView( INT OneBasedLineNumber );
  265. void NPSize (int cxNew, int cyNew);
  266. /* procs in npcss.c */
  267. BOOL FDetectCssEncodingA(LPCSTR rgch, UINT cch, UINT *pcp);
  268. BOOL FDetectCssEncodingW(LPCWSTR rgch, UINT cch, UINT *pcp);
  269. /* procs in npdate.c */
  270. VOID InsertDateTime (BOOL fCrlf);
  271. /* procs in npfile.c */
  272. BOOL SaveFile(HWND hwndParent, LPCTSTR szFile, BOOL fSaveAs);
  273. BOOL LoadFile(LPCTSTR szFile, BOOL fSelectEncoding);
  274. VOID New(BOOL fCheck);
  275. void AddExt(TCHAR *sz);
  276. void AlertUser_FileFail(LPCTSTR szFile);
  277. BOOL FDetectEncodingW(LPCTSTR szFile, LPCWSTR rgch, UINT cch, UINT *pcp);
  278. /* procs in nphtml.c */
  279. BOOL FDetectHtmlEncodingA(LPCSTR rgch, UINT cch, UINT* pcp);
  280. BOOL FDetectHtmlEncodingW(LPCWSTR rgch, UINT cch, UINT* pcp);
  281. /* procs in npinit.c */
  282. INT NPInit(HANDLE hInstance, HANDLE hPrevInstance, LPTSTR lpCmdLine, INT cmdShow);
  283. void GetKeyboardCodepages(LANGID);
  284. void GetUserLocaleCodepages(void);
  285. void InitLocale(VOID);
  286. void SaveGlobals(VOID);
  287. /* procs in npmisc.c */
  288. INT FindDlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
  289. BOOL Search(TCHAR *szSearch);
  290. INT AboutDlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
  291. BOOL NpReCreate(LONG style);
  292. LPTSTR ForwardScan(LPTSTR lpSource, LPTSTR lpSearch, BOOL fCaseSensitive);
  293. /* procs in npmlang.c */
  294. UINT ConvertFromUnicode(UINT cp, BOOL fNoBestFit, BOOL fWriteEntities, LPCWSTR rgchUtf16, UINT cchUtf16, LPSTR rgchMbcs, UINT cchMbcs, BOOL *pfDefCharUsed);
  295. UINT ConvertToUnicode(UINT cp, LPCSTR rgchMbcs, UINT cchMbcs, LPWSTR rgchUtf16, UINT cchUtf16);
  296. BOOL FDetectEncodingA(LPCSTR rgch, UINT cch, UINT* pcp);
  297. BOOL FLookupCodepageNameA(LPCSTR rgchEncoding, UINT cch, UINT* pcp);
  298. BOOL FLookupCodepageNameW(LPCWSTR rgchEncoding, UINT cch, UINT* pcp);
  299. BOOL FSupportWriteEntities(UINT cp);
  300. BOOL FValidateCodepage(HWND hwnd, UINT cp);
  301. void PopulateCodePages(HWND hWnd, BOOL fSelectEncoding, UINT cpSelect, UINT cpExtra);
  302. void UnloadMlang();
  303. /* procs in npprint.c */
  304. typedef enum _PRINT_DIALOG_TYPE {
  305. UseDialog,
  306. DoNotUseDialog,
  307. NoDialogNonDefault
  308. } PRINT_DIALOG_TYPE;
  309. INT AbortProc( HDC hPrintDC, INT reserved );
  310. INT_PTR AbortDlgProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam );
  311. INT NpPrint( PRINT_DIALOG_TYPE type );
  312. INT NpPrintGivenDC( HDC hPrintDC );
  313. UINT_PTR
  314. CALLBACK
  315. PageSetupHookProc(
  316. HWND hWnd,
  317. UINT Message,
  318. WPARAM wParam,
  319. LPARAM lParam
  320. );
  321. HANDLE GetPrinterDC (VOID);
  322. HANDLE GetNonDefPrinterDC (VOID);
  323. VOID PrintIt(PRINT_DIALOG_TYPE type);
  324. /* procs in nputf.c */
  325. INT IsTextUTF8 (LPSTR lpstrInputStream, INT iLen);
  326. INT IsInputTextUnicode(LPSTR lpstrInputStream, INT iLen);
  327. /* procs in nxpml.c */
  328. BOOL FDetectXmlEncodingA(LPCSTR rgch, UINT cch, UINT *pcp);
  329. BOOL FDetectXmlEncodingW(LPCWSTR rgch, UINT cch, UINT *pcp);
  330. BOOL FIsXmlW(LPCWSTR rgwch, UINT cch);
  331. // Help IDs for Notepad
  332. #define NO_HELP ((DWORD) -1) // Disables Help for a control
  333. #define IDH_PAGE_FOOTER 1000
  334. #define IDH_PAGE_HEADER 1001
  335. #define IDH_FILETYPE 1002
  336. #define IDH_GOTO 1003
  337. #define IDH_CODEPAGE 1004
  338. // Private message to track the HKL switch
  339. #define PWM_CHECK_HKL (WM_APP + 1)