Source code of Windows XP (NT5)
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.

603 lines
22 KiB

  1. /*++
  2. Copyright (c) 1990 Microsoft Corporation
  3. Module Name:
  4. ext.h
  5. Abstract:
  6. Microsoft Editor extension definitions.
  7. #ifndef SHIP
  8. NOTES:
  9. THIS FILE IS SHIPPED WITH THE PRODUCT!!!!
  10. BE VERY carefull what gets put into this file. Technically, if it
  11. is NOT required for extension writers, it does NOT belong here.
  12. 1) This note, the file history and all code within "#ifndef SHIP" and
  13. "#if defined EDITOR" conditionals should be REMOVED before shipping.
  14. Author:
  15. Ramon Juan San Andres (ramonsa) 06-Nov-1990 ported from M 1.02
  16. Revision History:
  17. 26-Nov-1991 mz Strip off near/far
  18. #endif
  19. --*/
  20. #include <windows.h>
  21. //
  22. // Macro Definitions
  23. //
  24. // BUFLEN is the maximum line length that can be passed or will be returned
  25. // by the editor.
  26. //
  27. #define BUFLEN 2048
  28. //
  29. // NT versions of the editor no longer use 16-bit specific attributes.
  30. // Set them into ignore state
  31. //
  32. #define near
  33. #define far
  34. #define LOADDS
  35. #define EXPORT
  36. #define EXTERNAL
  37. #define INTERNAL
  38. #undef pascal
  39. #define pascal
  40. //
  41. // RQ_... are various request types supported for Get/Set EditorObject
  42. //
  43. #define RQ_FILE 0x1000 // GetEditorObject: File request
  44. #define RQ_FILE_HANDLE 0x1000 // File Handle
  45. #define RQ_FILE_NAME 0x1100 // ASCIIZ filename
  46. #define RQ_FILE_FLAGS 0x1200 // flags
  47. #define RQ_FILE_REFCNT 0x1300 // reference count
  48. #define RQ_FILE_MODTIME 0x1400 // modified time
  49. #define RQ_WIN 0x2000 // Window request
  50. #define RQ_WIN_HANDLE 0x2000 // Window Handle
  51. #define RQ_WIN_CONTENTS 0x2100 // Window Contents
  52. #define RQ_WIN_CUR 0x2200 // Current Window
  53. #define RQ_COLOR 0x9000 // Color request
  54. #define RQ_CLIP 0xf000 // clipboard type
  55. #define RQ_THIS_OBJECT 0x00FF // function is directed to input object
  56. #define RQ_FILE_INIT 0x00FE // file is init file
  57. //
  58. // toPif is used when placing numeric or boolean switches in the swiDesc table
  59. // to eliminate C 5.X compiler warnings.
  60. //
  61. // For example: { "Switchname", toPIF(switchvar), SWI_BOOLEAN },
  62. //
  63. #define toPIF(x) (PIF)(LONG_PTR)(void *)&x
  64. //
  65. // Editor color table endicies. (Colors USERCOLORMIN - USERCOLORMAX are
  66. // unassigned and available for extension use).
  67. //
  68. #define FGCOLOR 21 // foreground (normal) color
  69. #define HGCOLOR (1 + FGCOLOR) // highlighted region color
  70. #define INFCOLOR (1 + HGCOLOR) // information color
  71. #define SELCOLOR (1 + INFCOLOR) // selection color
  72. #define WDCOLOR (1 + SELCOLOR) // window border color
  73. #define STACOLOR (1 + WDCOLOR) // status line color
  74. #define ERRCOLOR (1 + STACOLOR) // error message color
  75. #define USERCOLORMIN (1 + ERRCOLOR) // begining of extension colors
  76. #define USERCOLORMAX 35 // end of extension colors
  77. //
  78. // General type Definitions
  79. //
  80. typedef int COL; // column or position with line
  81. #if !defined (EDITOR)
  82. #if !defined( _FLAGTYPE_DEFINED_ )
  83. #define _FLAGTYPE_DEFINED_ 1
  84. typedef char flagType;
  85. #endif
  86. typedef long LINE; // line number within file
  87. typedef void* PFILE; // editor file handle
  88. #if !defined (EXTINT)
  89. typedef void* PWND; // editor window handle
  90. #endif // EXTINT
  91. #endif // EDITOR
  92. typedef char buffer[BUFLEN]; // miscellaneous buffer
  93. typedef char linebuf[BUFLEN]; // line buffer
  94. typedef char pathbuf[MAX_PATH]; // Pathname buffer
  95. typedef struct fl { // file location
  96. LINE lin; // - line number
  97. COL col; // - column
  98. } fl;
  99. typedef struct sl { // screen location
  100. int lin; // - line number
  101. int col; // - column
  102. } sl;
  103. typedef struct rn { // file range
  104. fl flFirst; // - Lower line, or leftmost col
  105. fl flLast; // - Higher, or rightmost
  106. } rn;
  107. typedef struct lineAttr { // Line color attribute info
  108. unsigned char attr; // - Attribute of piece
  109. unsigned short len; // - Bytes in colored piece
  110. } lineAttr;
  111. #if !defined (cwExtraWnd)
  112. typedef struct ARC {
  113. BYTE axLeft;
  114. BYTE ayTop;
  115. BYTE axRight;
  116. BYTE ayBottom;
  117. } ARC;
  118. #endif // cwExtraWnd
  119. //
  120. // Argument defininition structures.
  121. //
  122. // We define a structure for each of the argument types that may be
  123. // passed to an extension function. Then, we define the structure
  124. // argType which is used to pass these arguments around in a union.
  125. //
  126. typedef struct noargType { // no argument specified
  127. LINE y; // - cursor line
  128. COL x; // - cursor column
  129. } NOARGTYPE;
  130. typedef struct textargType { // text argument specified
  131. int cArg; // - count of <arg>s pressed
  132. LINE y; // - cursor line
  133. COL x; // - cursor column
  134. char *pText; // - ptr to text of arg
  135. } TEXTARGTYPE;
  136. typedef struct nullargType { // null argument specified
  137. int cArg; // - count of <arg>s pressed
  138. LINE y; // - cursor line
  139. COL x; // - cursor column
  140. } NULLARGTYPE;
  141. typedef struct lineargType { // line argument specified
  142. int cArg; // - count of <arg>s pressed
  143. LINE yStart; // - starting line of range
  144. LINE yEnd; // - ending line of range
  145. } LINEARGTYPE;
  146. typedef struct streamargType { // stream argument specified
  147. int cArg; // - count of <arg>s pressed
  148. LINE yStart; // - starting line of region
  149. COL xStart; // - starting column of region
  150. LINE yEnd; // - ending line of region
  151. COL xEnd; // - ending column of region
  152. } STREAMARGTYPE;
  153. typedef struct boxargType { // box argument specified
  154. int cArg; // - count of <arg>s pressed
  155. LINE yTop; // - top line of box
  156. LINE yBottom; // - bottom line of bix
  157. COL xLeft; // - left column of box
  158. COL xRight; // - right column of box
  159. } BOXARGTYPE;
  160. typedef union ARGUNION {
  161. struct noargType noarg;
  162. struct textargType textarg;
  163. struct nullargType nullarg;
  164. struct lineargType linearg;
  165. struct streamargType streamarg;
  166. struct boxargType boxarg;
  167. } ARGUNION;
  168. typedef struct argType {
  169. int argType;
  170. ARGUNION arg;
  171. } ARG;
  172. //
  173. // Function definition table definitions
  174. //
  175. typedef ULONG_PTR CMDDATA;
  176. typedef flagType (*funcCmd)(CMDDATA argData, ARG *pArg, flagType fMeta);
  177. typedef struct cmdDesc { // function definition entry
  178. char *name; // - pointer to name of fcn
  179. funcCmd func; // - pointer to function
  180. CMDDATA arg; // - used internally by editor
  181. unsigned argType; // - user args allowed
  182. } CMD, *PCMD;
  183. typedef unsigned short KeyHandle;
  184. #define NOARG 0x0001 // no argument specified
  185. #define TEXTARG 0x0002 // text specified
  186. #define NULLARG 0x0004 // arg + no cursor movement
  187. #define NULLEOL 0x0008 // null arg => text from arg->eol
  188. #define NULLEOW 0x0010 // null arg => text from arg->end word
  189. #define LINEARG 0x0020 // range of entire lines
  190. #define STREAMARG 0x0040 // from low-to-high, viewed 1-D
  191. #define BOXARG 0x0080 // box delimited by arg, cursor
  192. #define NUMARG 0x0100 // text => delta to y position
  193. #define MARKARG 0x0200 // text => mark at end of arg
  194. #define BOXSTR 0x0400 // single-line box => text
  195. #define FASTKEY 0x0800 // Fast repeat function
  196. #define MODIFIES 0x1000 // modifies file
  197. #define KEEPMETA 0x2000 // do not eat meta flag
  198. #define WINDOWFUNC 0x4000 // moves window
  199. #define CURSORFUNC 0x8000 // moves cursor
  200. //
  201. // Switch definition table defintions
  202. //
  203. typedef flagType (*PIF)(char *);
  204. typedef char* (*PIFC)(char *);
  205. typedef union swiAct { // switch location or routine
  206. PIF pFunc; // - routine for text
  207. PIFC pFunc2; // - routine for text
  208. int *ival; // - integer value for NUMERIC
  209. flagType *fval; // - flag value for BOOLEAN
  210. } swiAct;
  211. typedef struct swiDesc { // switch definition entry
  212. char *name; // - pointer to name of switch
  213. swiAct act; // - pointer to value or fcn
  214. int type; // - flags defining switch type
  215. } SWI, *PSWI;
  216. #define SWI_BOOLEAN 0 // Boolean switch
  217. #define SWI_NUMERIC 1 // hex or decimal switch
  218. #define SWI_SCREEN 4 // switch affects screen
  219. #define SWI_SPECIAL 5 // textual switch
  220. #define SWI_SPECIAL2 6 // #5, returning an error string
  221. #define RADIX10 (0x0A << 8) // numeric switch is decimal
  222. #define RADIX16 (0x10 << 8) // numeric switch is hex
  223. //
  224. // Get/Set EditorObject data structures
  225. //
  226. typedef struct winContents{ // define window contents
  227. PFILE pFile; // - handle of file displayed
  228. ARC arcWin; // - location of window
  229. fl flPos; // - upper left corner wrt file
  230. } winContents;
  231. //
  232. // FILE flags values
  233. //
  234. #define DIRTY 0x01 // file had been modified
  235. #define FAKE 0x02 // file is a pseudo file
  236. #define REAL 0x04 // file has been read from disk
  237. #define DOSFILE 0x08 // file has CR-LF
  238. #define TEMP 0x10 // file is a temp file
  239. #define NEW 0x20 // file has been created by editor
  240. #define REFRESH 0x40 // file needs to be refreshed
  241. #define READONLY 0x80 // file may not be editted
  242. #define DISKRO 0x0100 // file on disk is read only
  243. #define MODE1 0x0200 // Meaning depends on the file
  244. #define VALMARKS 0x0400 // file has valid marks defined
  245. //
  246. // Event processing definitions
  247. //
  248. typedef struct mouseevent { // mouse event data
  249. short msg; // type of message
  250. short wParam; // CW wParam
  251. long lParam; // CW lParam
  252. sl sl; // screen location of mouse event
  253. fl fl; // file location (if event in win)
  254. } MOUSEEVENT, *PMOUSEEVENT;
  255. typedef struct KEY_DATA {
  256. BYTE Ascii; // Ascii code
  257. BYTE Scan; // Scan code
  258. BYTE Flags; // Flags
  259. BYTE Unused; // Unused byte
  260. } KEY_DATA, *PKEY_DATA;
  261. //
  262. // Following are the values for the Flags field of KEY_DATA
  263. //
  264. #define FLAG_SHIFT 0x01
  265. #define FLAG_CTRL 0x04
  266. #define FLAG_ALT 0x08
  267. #define FLAG_NUMLOCK 0x20
  268. typedef union KEY_INFO {
  269. KEY_DATA KeyData;
  270. long LongData;
  271. } KEY_INFO, *PKEY_INFO;
  272. typedef union EVTARGUNION {
  273. KEY_INFO key; // keystroke for key event
  274. char * pfn; // asciiz filename
  275. PMOUSEEVENT pmouse; // ptr to mouse event data
  276. union Rec *pUndoRec; // undo information
  277. } EVTARGUNION;
  278. typedef struct EVTargs { // arguments to event dispatches
  279. PFILE pfile; // -file handle for file events
  280. EVTARGUNION arg;
  281. } EVTargs, *PEVTARGS;
  282. typedef struct eventType { // event definition struct
  283. unsigned evtType; // - type
  284. flagType (*func)(EVTargs *); // - handler
  285. struct eventType *pEVTNext; // - next handler in list
  286. PFILE focus; // - applicable focus
  287. EVTargs arg; // - applicable agruments
  288. } EVT, *PEVT;
  289. #define EVT_RAWKEY 1 // ALL keystrokes
  290. #define EVT_KEY 2 // Editting keystrokes
  291. #define EVT_GETFOCUS 3 // file GETs focus.
  292. #define EVT_LOSEFOCUS 4 // file looses focus.
  293. #define EVT_EXIT 5 // about to exit.
  294. #define EVT_SHELL 6 // about to sell or compile
  295. #define EVT_UNLOAD 7 // about to be unloaded.
  296. #define EVT_IDLE 8 // idle event
  297. #define EVT_CANCEL 9 // do-nothing cancel
  298. #define EVT_REFRESH 10 // about to refresh a file
  299. #define EVT_FILEREADSTART 11 // about to read file
  300. #define EVT_FILEREADEND 12 // finshed reading file
  301. #define EVT_FILEWRITESTART 13 // about to write file
  302. #define EVT_FILEWRITEEND 14 // finshed writing file
  303. // 15
  304. // 16
  305. // 17
  306. // 18
  307. // 19
  308. #define EVT_EDIT 20 // editting action
  309. #define EVT_UNDO 21 // undone action
  310. #define EVT_REDO 22 // redone action
  311. //
  312. // Undo, Redo and Edit event structs
  313. //
  314. #define EVENT_REPLACE 0
  315. #define EVENT_INSERT 1
  316. #define EVENT_DELETE 2
  317. #define EVENT_BOUNDARY 3
  318. #if !defined (EDITOR)
  319. typedef struct replaceRec {
  320. int op; // operation
  321. long dummy[2]; // editor interal
  322. LINE length; // length of repalcement
  323. LINE line; // start of replacement
  324. } REPLACEREC;
  325. typedef struct insertRec {
  326. int op; // operation
  327. long dummy[2]; // editor interal
  328. LINE length; // length of file
  329. LINE line; // line number that was operated on
  330. LINE cLine; // number of lines inserted
  331. } INSERTREC;
  332. typedef struct deleteRec {
  333. int op; // operation
  334. long dummy[2]; // editor interal
  335. LINE length; // length of file
  336. LINE line; // line number that was operated on
  337. LINE cLine; // Number of lines deleted
  338. } DELETEREC;
  339. typedef struct boundRec {
  340. int op; // operation (BOUND)
  341. long dummy[2]; // editor interal
  342. int flags; // flags of file
  343. long modify; // Date/Time of last modify
  344. fl flWindow; // position in file of window
  345. fl flCursor; // position in file of cursor
  346. } BOUNDREC;
  347. typedef union Rec {
  348. struct replaceRec r;
  349. struct insertRec i;
  350. struct deleteRec d;
  351. struct boundRec b;
  352. } REC;
  353. #endif // editor
  354. //
  355. // Build command definitions
  356. //
  357. #define MAKE_FILE 1 // rule is for a filename
  358. #define MAKE_SUFFIX 2 // rule is a suffix rule
  359. #define MAKE_TOOL 4 // rule is for a tool
  360. #define MAKE_BLDMACRO 8 // rule is for a build macro
  361. #define MAKE_DEBUG 0x80 // rule is debug version
  362. #define LOWVERSION 0x0015 // lowest version of extensions we handle
  363. #define HIGHVERSION 0x0015 // highest version of extensions we handle
  364. #define VERSION 0x0015 // our current version
  365. typedef struct ExtensionTable {
  366. long version;
  367. long cbStruct;
  368. PCMD cmdTable;
  369. PSWI swiTable;
  370. struct CallBack {
  371. PFILE (*AddFile) (char *);
  372. flagType (*BadArg) (void);
  373. char (*Confirm) (char *, char *);
  374. void (*CopyBox) (PFILE, PFILE, COL, LINE, COL, LINE, COL, LINE);
  375. void (*CopyLine) (PFILE, PFILE, LINE, LINE, LINE);
  376. void (*CopyStream) (PFILE, PFILE, COL, LINE, COL, LINE, COL, LINE);
  377. void (*DeRegisterEvent) (EVT *);
  378. flagType (*DeclareEvent) (unsigned, EVTargs *);
  379. void (*DelBox) (PFILE, COL, LINE, COL, LINE);
  380. void (*DelFile) (PFILE);
  381. void (*DelLine) (PFILE, LINE, LINE);
  382. void (*DelStream) (PFILE, COL, LINE, COL, LINE);
  383. void (*Display) (void);
  384. int (*DoMessage) (char *);
  385. flagType (*DoSpawn) (char *, flagType);
  386. flagType (*fChangeFile) (flagType, char *);
  387. void (*Free) (void *);
  388. flagType (*fExecute) (char *);
  389. int (*fGetMake) (int, char *, char *);
  390. LINE (*FileLength) (PFILE);
  391. PFILE (*FileNameToHandle) (char *, char *);
  392. flagType (*FileRead) (char *, PFILE);
  393. flagType (*FileWrite) (char *, PFILE);
  394. PSWI (*FindSwitch) (char *);
  395. flagType (*fSetMake) (int, char *, char *);
  396. flagType (*FuncNameToKeyEvent) (char *, PKEY_EVENT_RECORD);
  397. flagType (*GetColor) (LINE, lineAttr *, PFILE);
  398. void (*GetTextCursor) (COL *, LINE *);
  399. flagType (*GetEditorObject) (unsigned, void *, void *);
  400. char * (*GetEnv) (char *);
  401. int (*GetLine) (LINE, char *, PFILE);
  402. char * (*GetListEntry) (PCMD, int, flagType);
  403. flagType (*GetString) (char *, int, char *, flagType);
  404. int (*KbHook) (void);
  405. void (*KbUnHook) (void);
  406. void * (*Malloc) (size_t);
  407. void (*MoveCur) (COL, LINE);
  408. char * (*NameToKeys) (char *, char *);
  409. PCMD (*NameToFunc) (char *);
  410. flagType (*pFileToTop) (PFILE);
  411. void (*PutColor) (LINE, lineAttr *, PFILE);
  412. void (*PutLine) (LINE, char *, PFILE);
  413. int (*REsearch) (PFILE, flagType, flagType, flagType, flagType, char *, fl *);
  414. long (*ReadChar) (void);
  415. PCMD (*ReadCmd) (void);
  416. void (*RegisterEvent) (EVT *);
  417. void (*RemoveFile) (PFILE);
  418. flagType (*Replace) (char, COL, LINE, PFILE, flagType);
  419. char * (*ScanList) (PCMD, flagType);
  420. int (*search) (PFILE, flagType, flagType, flagType, flagType, char *, fl *);
  421. void (*SetColor) (PFILE, LINE, COL, COL, int);
  422. flagType (*SetEditorObject) (unsigned, void *, void *);
  423. void (*SetHiLite) (PFILE, rn, int);
  424. flagType (*SetKey) (char *, char *);
  425. flagType (*SplitWnd) (PWND, flagType, int);
  426. } CallBack;
  427. } EXTTAB;
  428. //
  429. // Editor low level function prototypes.
  430. //
  431. // This list defines the routines within the editor which may be called
  432. // by extension functions.
  433. //
  434. #if !defined (EDITOR)
  435. extern EXTTAB ModInfo;
  436. #define AddFile(x) ModInfo.CallBack.AddFile(x)
  437. #define BadArg ModInfo.CallBack.BadArg
  438. #define Confirm(x,y) ModInfo.CallBack.Confirm(x,y)
  439. #define CopyBox(x,y,z,a,b,c,d,e) ModInfo.CallBack.CopyBox(x,y,z,a,b,c,d,e)
  440. #define CopyLine(x,y,z,a,b) ModInfo.CallBack.CopyLine(x,y,z,a,b)
  441. #define CopyStream(x,y,z,a,b,c,d,e) ModInfo.CallBack.CopyStream(x,y,z,a,b,c,d,e)
  442. #define DeRegisterEvent(x) ModInfo.CallBack.DeRegisterEvent(x)
  443. #define DeclareEvent(x,y) ModInfo.CallBack.DeclareEvent(x,y)
  444. #define DelBox(x,y,z,a,b) ModInfo.CallBack.DelBox(x,y,z,a,b)
  445. #define DelFile(x) ModInfo.CallBack.DelFile(x)
  446. #define DelLine(x,y,z) ModInfo.CallBack.DelLine(x,y,z)
  447. #define DelStream(x,y,z,a,b) ModInfo.CallBack.DelStream(x,y,z,a,b)
  448. #define Display ModInfo.CallBack.Display
  449. #define DoMessage(x) ModInfo.CallBack.DoMessage(x)
  450. #define DoSpawn(x,y) ModInfo.CallBack.DoSpawn(x,y)
  451. #define fChangeFile(x,y) ModInfo.CallBack.fChangeFile(x,y)
  452. #define Free(x) ModInfo.CallBack.Free(x)
  453. #define fExecute(x) ModInfo.CallBack.fExecute(x)
  454. #define fGetMake(x,y,z) ModInfo.CallBack.fGetMake(x,y,z)
  455. #define FileLength(x) ModInfo.CallBack.FileLength(x)
  456. #define FileNameToHandle(x,y) ModInfo.CallBack.FileNameToHandle(x,y)
  457. #define FileRead(x,y) ModInfo.CallBack.FileRead(x,y)
  458. #define FileWrite(x,y) ModInfo.CallBack.FileWrite(x,y)
  459. #define FindSwitch(x) ModInfo.CallBack.FindSwitch(x)
  460. #define fSetMake(x,y,z) ModInfo.CallBack.fSetMake(x,y,z)
  461. #define FuncNameToKeyEvent(x,y) ModInfo.CallBack.FuncNameToKeyEvent(x,y)
  462. #define GetColor(x,y,z) ModInfo.CallBack.GetColor(x,y,z)
  463. #define GetTextCursor(x,y) ModInfo.CallBack.GetTextCursor(x,y)
  464. #define GetEditorObject(x,y,z) ModInfo.CallBack.GetEditorObject(x,y,z)
  465. #define GetEnv(x) ModInfo.CallBack.GetEnv(x)
  466. #define GetLine(x,y,z) ModInfo.CallBack.GetLine(x,y,z)
  467. #define GetListEntry(x,y,z) ModInfo.CallBack.GetListEntry(x,y,z)
  468. #define GetString(x,a,y,z) ModInfo.CallBack.GetString(x,a,y,z)
  469. #define KbHook ModInfo.CallBack.KbHook
  470. #define KbUnHook ModInfo.CallBack.KbUnHook
  471. #define Malloc(x) ModInfo.CallBack.Malloc(x)
  472. #define MoveCur(x,y) ModInfo.CallBack.MoveCur(x,y)
  473. #define NameToKeys(x,y) ModInfo.CallBack.NameToKeys(x,y)
  474. #define NameToFunc(x) ModInfo.CallBack.NameToFunc(x)
  475. #define pFileToTop(x) ModInfo.CallBack.pFileToTop(x)
  476. #define PutColor(x,y,z) ModInfo.CallBack.PutColor(x,y,z)
  477. #define PutLine(x,y,z) ModInfo.CallBack.PutLine(x,y,z)
  478. #define REsearch(x,y,z,a,b,c,d) ModInfo.CallBack.REsearch(x,y,z,a,b,c,d)
  479. #define ReadChar ModInfo.CallBack.ReadChar
  480. #define ReadCmd ModInfo.CallBack.ReadCmd
  481. #define RegisterEvent(x) ModInfo.CallBack.RegisterEvent(x)
  482. #define RemoveFile(x) ModInfo.CallBack.RemoveFile(x)
  483. #define Replace(x,y,z,a,b) ModInfo.CallBack.Replace(x,y,z,a,b)
  484. #define ScanList(x,y) ModInfo.CallBack.ScanList(x,y)
  485. #define search(x,y,z,a,b,c,d) ModInfo.CallBack.search(x,y,z,a,b,c,d)
  486. #define SetColor(x,y,z,a,b) ModInfo.CallBack.SetColor(x,y,z,a,b)
  487. #define SetEditorObject(x,y,z) ModInfo.CallBack.SetEditorObject(x,y,z)
  488. #define SetHiLite(x,y,z) ModInfo.CallBack.SetHiLite(x,y,z)
  489. #define SetKey(x,y) ModInfo.CallBack.SetKey(x,y)
  490. #define SplitWnd(x,y,z) ModInfo.CallBack.SplitWnd(x,y,z)
  491. void WhenLoaded (void);
  492. #endif // EDITOR