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.

508 lines
17 KiB

  1. /****************************************************************************
  2. *
  3. * WINCOM.H
  4. *
  5. * Exported definitions for MM/Windows common code library.
  6. *
  7. ****************************************************************************/
  8. #ifndef _WINCOM_H_
  9. #define _WINCOM_H_
  10. /*************************************
  11. *
  12. * OPEN FILE DIALOG BOX
  13. *
  14. *************************************/
  15. int FAR PASCAL OpenFileDialog(HWND hwndParent, LPSTR lpszTitle,
  16. LPSTR lpszExtension, WORD wFlags,
  17. LPSTR lpszFileBuf, WORD wFileLen );
  18. /* Flags for OpenFileDialog */
  19. #define DLGOPEN_MUSTEXIST 0x0001
  20. #define DLGOPEN_NOSHOWSPEC 0x0002
  21. #define DLGOPEN_SAVE 0x0004
  22. #define DLGOPEN_OPEN 0x0008
  23. #define DLGOPEN_SHOWDEFAULT 0x0020
  24. #define DLGOPEN_NOBEEPS 0x0040
  25. #define DLGOPEN_SEARCHPATH 0x0080
  26. /* Return codes */
  27. #define DLG_CANCEL 0
  28. #define DLG_MISSINGFILE -1
  29. #define DLG_OKFILE 1
  30. /**************************************************
  31. *
  32. * DEFAULT FILE OPEN DIALOG PROCEDURE STUFF
  33. *
  34. **************************************************/
  35. BOOL FAR PASCAL DefDlgOpenProc(HWND hwnd, unsigned msg,
  36. WORD wParam, LONG lParam);
  37. typedef struct _DlgOpenCreate {
  38. LPSTR lpszTitle; // NULL if use default dialog caption
  39. LPSTR lpszExt; // NULL defaults to *.*
  40. LPSTR lpszBuf; // final filename buffer
  41. WORD wBufLen; // length of this buffer
  42. WORD wFlags; // DLGOPEN_xxx flags
  43. DWORD dwExtra; // for use by the owner of the dialog
  44. } DlgOpenCreate;
  45. typedef DlgOpenCreate FAR *FPDlgOpenCreate;
  46. #define SetDialogReturn(hwnd, val) SetWindowLong(hwnd, 0, val)
  47. /* These messages are sent to/from DefDlgOpenProc to make the
  48. * Dialog box work. They may be answered by the "owner" of the dialog
  49. * box.
  50. */
  51. #define DLGOPEN_OKTOCLOSE (WM_USER + 1) // ask whether ok to close box
  52. #define DLGOPEN_CLOSEBOX (WM_USER + 2) // tell dlgOpen to close box
  53. #define DLGOPEN_SETEXTEN (WM_USER + 3) // sets default extensions
  54. // #define DLGOPEN_SETEDITTEXT (WM_USER + 4) // sets editbox contents
  55. // #define DLGOPEN_REFRESH (WM_USER + 5) // refresh the box?
  56. #define DLGOPEN_CHANGED (WM_USER + 6) // edit box has been changed
  57. #define DLGOPEN_RESETDIR (WM_USER + 7) // directory change
  58. BOOL FAR PASCAL IconDirBox(HWND hwnd, WORD wId, unsigned msg,
  59. WORD wParam, LONG lParam);
  60. BOOL FAR PASCAL IconDirBoxFixup(HWND hwndDirbox);
  61. /*
  62. * HUGE READ/WRITE functions
  63. *
  64. */
  65. typedef char huge * HPSTR;
  66. // LONG FAR PASCAL _hread( int hFile, HPSTR hpBuffer, DWORD dwBytes );
  67. // LONG FAR PASCAL _hwrite( int hFile, HPSTR hpBuffer, DWORD dwBytes );
  68. /*
  69. * FAR STRING FUNCTIONS
  70. */
  71. LPSTR FAR PASCAL lstrncpy(LPSTR dest, LPSTR source, WORD count);
  72. LPSTR FAR PASCAL lstrncat(LPSTR dest, LPSTR source, WORD count);
  73. int FAR PASCAL lstrncmp(LPSTR d, LPSTR s, WORD n);
  74. /*
  75. * FAR MEMORY FUNCTIONS
  76. */
  77. void FAR * FAR PASCAL lmemcpy(LPSTR dest, LPSTR source, WORD count);
  78. void FAR * FAR PASCAL hmemmove(HPSTR dest, HPSTR source, LONG count);
  79. HANDLE FAR PASCAL CopyHandle(WORD wFlags, HANDLE h);
  80. void FAR PASCAL fmemfill (LPSTR lpMem, DWORD count, BYTE bFill);
  81. /*
  82. * BYTE SWAPPING FUNCTIONS
  83. */
  84. WORD FAR PASCAL ByteSwapWORD( WORD w );
  85. DWORD FAR PASCAL ByteSwapDWORD( DWORD dw );
  86. /*
  87. * atol for far strings
  88. */
  89. LONG FAR PASCAL StringToLong( LPSTR lpstr );
  90. /*
  91. * PATH PARSING FUNCTIONS
  92. */
  93. BOOL FAR PASCAL AddExtension(LPSTR lpszPath, LPSTR lpszExt, WORD wBufLen);
  94. WORD FAR PASCAL SplitPath(LPSTR path, LPSTR drive, LPSTR dir,
  95. LPSTR fname, LPSTR ext);
  96. void FAR PASCAL MakePath(LPSTR lpPath, LPSTR lpDrive, LPSTR lpDir,
  97. LPSTR lpFname, LPSTR lpExt);
  98. LPSTR FAR PASCAL QualifyPathname(LPSTR lpszFile);
  99. /* return codes from SplitPath */
  100. #define PATH_OK 0 /* path is fine */
  101. #define PATH_TOOLONG 1 /* filename too long */
  102. #define PATH_ILLEGAL 2 /* filename is illegal */
  103. /* Definitions stolen from <stdlib.h> */
  104. #ifndef _MAX_PATH
  105. #define _MAX_PATH 144 /* max. length of full pathname */
  106. #define _MAX_DRIVE 3 /* max. length of drive component */
  107. #define _MAX_DIR 130 /* max. length of path component */
  108. #define _MAX_FNAME 9 /* max. length of file name component */
  109. #define _MAX_EXT 5 /* max. length of extension component */
  110. #endif
  111. /*
  112. * DOS FAR UTILITY FUNCTIONS
  113. */
  114. typedef struct _FindFileStruct {
  115. char chReserved[21];
  116. BYTE bAttribute;
  117. WORD wTime;
  118. WORD wDate;
  119. DWORD dwSize;
  120. char chFilename[13];
  121. } FindFileStruct;
  122. typedef FindFileStruct FAR *FPFindFileStruct;
  123. typedef FindFileStruct NEAR *NPFindFileStruct;
  124. #define DOS_READONLY 0x0001
  125. #define DOS_HIDDEN 0x0002
  126. #define DOS_SYSTEM 0x0004
  127. #define DOS_VOLUME 0x0008
  128. #define DOS_DIRECTORY 0x0010
  129. #define DOS_ARCHIVE 0x0020
  130. #define DOS_FILES (DOS_READONLY | DOS_SYSTEM)
  131. #define DOS_ALL (DOS_FILES | DOS_DIRECTORY | DOS_HIDDEN)
  132. /* Return codes from DosFindFirst and DosFindNext */
  133. #define DOSFF_OK 0
  134. #define DOSFF_FILENOTFOUND 2
  135. #define DOSFF_PATHINVALID 3
  136. #define DOSFF_NOMATCH 0x12
  137. WORD FAR PASCAL DosFindFirst(FPFindFileStruct lpFindStruct,
  138. LPSTR lpszFileSpec, WORD wAttrib);
  139. WORD FAR PASCAL DosFindNext(FPFindFileStruct lpFindStruct);
  140. int FAR PASCAL DosChangeDir(LPSTR lpszPath);
  141. WORD FAR PASCAL DosGetCurrentDrive();
  142. BOOL FAR PASCAL DosSetCurrentDrive(WORD wDrive);
  143. WORD FAR PASCAL DosGetCurrentDir(WORD wCurdrive, LPSTR lpszBuf);
  144. BOOL FAR PASCAL DosGetCurrentPath(LPSTR lpszBuf, WORD wLen);
  145. WORD FAR PASCAL DosDeleteFile(LPSTR lpszFile);
  146. BOOL FAR PASCAL DosGetVolume(BYTE chDrive, LPSTR lpszBuf);
  147. WORD FAR PASCAL DosQueryNet(WORD wIndex, LPSTR lpszLocal, LPSTR lspzRemote);
  148. WORD FAR PASCAL mscdGetDrives(LPSTR lpszDriveBuf);
  149. /* Return codes from DosQueryNet() */
  150. #define NET_ERROR (-1)
  151. #define NET_INVALID (0x0100)
  152. #define NET_TYPEMASK (0x00ff)
  153. #define NET_PRINTER (0x0003)
  154. #define NET_DRIVE (0x0004)
  155. /*
  156. * ERROR MESSAGE REPORTING BOX
  157. */
  158. short FAR cdecl ErrorResBox( HWND hwnd,
  159. HANDLE hInst,
  160. WORD flags,
  161. WORD idAppName,
  162. WORD idErrorStr, ...);
  163. /*
  164. * PROGRESS BAR GRAPH CONTROL - class "ProgBar"
  165. */
  166. #define BAR_SETRANGE (WM_USER + 0)
  167. #define BAR_SETPOS (WM_USER + 2)
  168. #define BAR_DELTAPOS (WM_USER + 4)
  169. #define CTLCOLOR_PROGBAR (CTLCOLOR_MAX + 2)
  170. /*
  171. * STATUS TEXT CONTROL - class "MPStatusText".
  172. *
  173. * See wincom project file status.c for more information on control.
  174. */
  175. #define ST_GETSTATUSHEIGHT (WM_USER + 0)
  176. #define ST_SETRIGHTSIDE (WM_USER + 1)
  177. #define ST_GETRIGHTSIDE (WM_USER + 2)
  178. #define CTLCOLOR_STATUSTEXT (CTLCOLOR_MAX + 1)
  179. /*
  180. * ARROW CONTROL - class "ComArrow".
  181. */
  182. LONG FAR PASCAL ArrowEditChange( HWND hwndEdit, WORD wParam,
  183. LONG lMin, LONG lMax );
  184. /*
  185. * CHOOSER CONTROL - class "CHOOSER".
  186. */
  187. /* Chooser Window control messages */
  188. #define CM_SETITEMRECTSIZE (WM_USER + 1)
  189. #define CM_CALCSIZE (WM_USER + 2)
  190. #define CM_ADDITEM (WM_USER + 3)
  191. #define CM_INSERTITEM (WM_USER + 4)
  192. #define CM_DELETEITEM (WM_USER + 5)
  193. #define CM_GETCOUNT (WM_USER + 6)
  194. #define CM_GETITEMDATA (WM_USER + 7)
  195. #define CM_GETCURSEL (WM_USER + 8)
  196. #define CM_SETCURSEL (WM_USER + 9)
  197. #define CM_FINDITEM (WM_USER + 10)
  198. #define CM_ERR LB_ERR
  199. /* Chooser Window notification messages */
  200. #define CN_SELECTED 100
  201. #define CN_DESELECTED 101
  202. /*
  203. * Mac-like small Non-client window message handler
  204. */
  205. LONG FAR PASCAL ncMsgFilter(HWND hwnd,unsigned msg, WORD wParam, LONG lParam);
  206. /* Window styles used by ncMsgFilter */
  207. #define WF_SIZEFRAME WS_THICKFRAME
  208. #define WF_SYSMENU WS_SYSMENU
  209. #define WF_MINIMIZED WS_MINIMIZE
  210. #define WF_SIZEBOX 0x0002
  211. /* Obscure stuff to deal with DLL loading/unloading */
  212. typedef HANDLE HLIBLIST;
  213. typedef WORD DYNALIBID;
  214. typedef struct _DynaLib {
  215. HANDLE hModule;
  216. WORD wRefcount;
  217. char achLibname[_MAX_PATH];
  218. } DynaLib;
  219. typedef DynaLib FAR *FPDynaLib;
  220. HLIBLIST FAR PASCAL dllMakeList(WORD wSize, LPSTR lpszLoadPoint,
  221. LPSTR lpszFreePoint);
  222. BOOL FAR PASCAL dllUnloadLib(HLIBLIST hlist, DYNALIBID id, BOOL fDestroy);
  223. BOOL FAR PASCAL dllDestroyList(HLIBLIST hlist);
  224. BOOL FAR PASCAL dllForceUnload(HLIBLIST hlist);
  225. HANDLE FAR PASCAL dllLoadLib(HLIBLIST hlist, DYNALIBID libid);
  226. BOOL FAR PASCAL dllGetInfo(HLIBLIST hlist, DYNALIBID libid, FPDynaLib fpLib);
  227. BOOL FAR PASCAL dllIsLoaded(HLIBLIST hlist, DYNALIBID libid);
  228. DYNALIBID FAR PASCAL dllAddLib(HLIBLIST hlist, LPSTR lpszName);
  229. DYNALIBID FAR PASCAL dllIterAll(HLIBLIST hlist, DYNALIBID idLast);
  230. DYNALIBID FAR PASCAL dllFindHandle(HLIBLIST hlist, HANDLE hModHandle);
  231. DYNALIBID FAR PASCAL dllFindName(HLIBLIST hlist, LPSTR lpszName);
  232. DYNALIBID FAR PASCAL dllAddLoadedLib(HLIBLIST hlist,HANDLE hModule,BOOL fLoad);
  233. /**********************************
  234. *
  235. * FOR DOS FILE FUNCTIONS (SWITCH PSP)
  236. *
  237. **********************************/
  238. /* flags for DosSeek */
  239. #define SEEK_CUR 1
  240. #define SEEK_END 2
  241. #define SEEK_SET 0
  242. /* DOS attributes */
  243. #define ATTR_READONLY 0x0001
  244. #define ATTR_HIDDEN 0x0002
  245. #define ATTR_SYSTEM 0x0004
  246. #define ATTR_VOLUME 0x0008
  247. #define ATTR_DIR 0x0010
  248. #define ATTR_ARCHIVE 0x0020
  249. #define ATTR_FILES (ATTR_READONLY+ATTR_SYSTEM)
  250. #define ATTR_ALL_FILES (ATTR_READONLY+ATTR_SYSTEM+ATTR_HIDDEN)
  251. #define ATTR_ALL (ATTR_READONLY+ATTR_DIR+ATTR_HIDDEN+ATTR_SYSTEM)
  252. typedef struct {
  253. char Reserved[21];
  254. BYTE Attr;
  255. WORD Time;
  256. WORD Date;
  257. DWORD Length;
  258. char szName[13];
  259. } FCB;
  260. typedef FCB * PFCB;
  261. typedef FCB FAR * LPFCB;
  262. /* functions from dos.asm */
  263. extern int FAR PASCAL DosError(void);
  264. extern int FAR PASCAL DosOpen(LPSTR szFile,WORD acc);
  265. extern int FAR PASCAL DosCreate(LPSTR szFile,WORD acc);
  266. extern int FAR PASCAL DosDup(int fh);
  267. extern void FAR PASCAL DosClose(int fh);
  268. extern DWORD FAR PASCAL DosSeek(int fh,DWORD ulPos,WORD org);
  269. extern DWORD FAR PASCAL DosRead(int fh,LPSTR pBuf,DWORD ulSize);
  270. extern DWORD FAR PASCAL DosWrite(int fh,LPSTR pBuf,DWORD ulSize);
  271. /* DOS ERROR CODES */
  272. #define ERROR_OK 0x00
  273. #define ERROR_FILENOTFOUND 0x02 /* File not found */
  274. #define ERROR_PATHNOTFOUND 0x03 /* Path not found */
  275. #define ERROR_NOFILEHANDLES 0x04 /* Too many open files */
  276. #define ERROR_ACCESSDENIED 0x05 /* Access denied */
  277. #define ERROR_INVALIDHANDLE 0x06 /* Handle invalid */
  278. #define ERROR_FCBNUKED 0x07 /* Memory control blocks destroyed */
  279. #define ERROR_NOMEMORY 0x08 /* Insufficient memory */
  280. #define ERROR_FCBINVALID 0x09 /* Memory block address invalid */
  281. #define ERROR_ENVINVALID 0x0A /* Environment invalid */
  282. #define ERROR_FORMATBAD 0x0B /* Format invalid */
  283. #define ERROR_ACCESSCODEBAD 0x0C /* Access code invalid */
  284. #define ERROR_DATAINVALID 0x0D /* Data invalid */
  285. #define ERROR_UNKNOWNUNIT 0x0E /* Unknown unit */
  286. #define ERROR_DISKINVALID 0x0F /* Disk drive invalid */
  287. #define ERROR_RMCHDIR 0x10 /* Attempted to remove current directory */
  288. #define ERROR_NOSAMEDEV 0x11 /* Not same device */
  289. #define ERROR_NOFILES 0x12 /* No more files */
  290. #define ERROR_13 0x13 /* Write-protected disk */
  291. #define ERROR_14 0x14 /* Unknown unit */
  292. #define ERROR_15 0x15 /* Drive not ready */
  293. #define ERROR_16 0x16 /* Unknown command */
  294. #define ERROR_17 0x17 /* Data error (CRC) */
  295. #define ERROR_18 0x18 /* Bad request-structure length */
  296. #define ERROR_19 0x19 /* Seek error */
  297. #define ERROR_1A 0x1A /* Unknown media type */
  298. #define ERROR_1B 0x1B /* Sector not found */
  299. #define ERROR_WRITE 0x1D /* Write fault */
  300. #define ERROR_1C 0x1C /* Printer out of paper */
  301. #define ERROR_READ 0x1E /* Read fault */
  302. #define ERROR_1F 0x1F /* General failure */
  303. #define ERROR_SHARE 0x20 /* Sharing violation */
  304. #define ERROR_21 0x21 /* File-lock violation */
  305. #define ERROR_22 0x22 /* Disk change invalid */
  306. #define ERROR_23 0x23 /* FCB unavailable */
  307. #define ERROR_24 0x24 /* Sharing buffer exceeded */
  308. #define ERROR_32 0x32 /* Unsupported network request */
  309. #define ERROR_33 0x33 /* Remote machine not listening */
  310. #define ERROR_34 0x34 /* Duplicate name on network */
  311. #define ERROR_35 0x35 /* Network name not found */
  312. #define ERROR_36 0x36 /* Network busy */
  313. #define ERROR_37 0x37 /* Device no longer exists on network */
  314. #define ERROR_38 0x38 /* NetBIOS command limit exceeded */
  315. #define ERROR_39 0x39 /* Error in network adapter hardware */
  316. #define ERROR_3A 0x3A /* Incorrect response from network */
  317. #define ERROR_3B 0x3B /* Unexpected network error */
  318. #define ERROR_3C 0x3C /* Remote adapter incompatible */
  319. #define ERROR_3D 0x3D /* Print queue full */
  320. #define ERROR_3E 0x3E /* Not enough room for print file */
  321. #define ERROR_3F 0x3F /* Print file was deleted */
  322. #define ERROR_40 0x40 /* Network name deleted */
  323. #define ERROR_41 0x41 /* Network access denied */
  324. #define ERROR_42 0x42 /* Incorrect network device type */
  325. #define ERROR_43 0x43 /* Network name not found */
  326. #define ERROR_44 0x44 /* Network name limit exceeded */
  327. #define ERROR_45 0x45 /* NetBIOS session limit exceeded */
  328. #define ERROR_46 0x46 /* Temporary pause */
  329. #define ERROR_47 0x47 /* Network request not accepted */
  330. #define ERROR_48 0x48 /* Print or disk redirection paused */
  331. #define ERROR_50 0x50 /* File already exists */
  332. #define ERROR_51 0x51 /* Reserved */
  333. #define ERROR_52 0x52 /* Cannot make directory */
  334. #define ERROR_53 0x53 /* Fail on Int 24H (critical error) */
  335. #define ERROR_54 0x54 /* Too many redirections */
  336. #define ERROR_55 0x55 /* Duplicate redirection */
  337. #define ERROR_56 0x56 /* Invalid password */
  338. #define ERROR_57 0x57 /* Invalid parameter */
  339. #define ERROR_58 0x58 /* Net write fault */
  340. /*
  341. * DIB and BITMAP UTILITIES
  342. */
  343. HANDLE FAR PASCAL dibCreate(DWORD dwWidth, DWORD dwHeight, WORD wBitCount,
  344. WORD wPalSize, WORD wGmemFlags, WORD wDibFlags);
  345. #define DBC_PALINDEX 0x0001
  346. #define dibWIDTHBYTES(i) (((i) + 31) / 32 * 4)
  347. /*
  348. * WPF OUTPUT WINDOW
  349. */
  350. #define WPF_CHARINPUT 0x00000001L
  351. int FAR cdecl wpfVprintf(HWND hwnd, LPSTR lpszFormat, LPSTR pargs);
  352. int FAR cdecl wpfPrintf(HWND hwnd, LPSTR lpszFormat, ...);
  353. void FAR PASCAL wpfOut(HWND hwnd, LPSTR lpsz);
  354. HWND FAR PASCAL wpfCreateWindow(HWND hwndParent, HANDLE hInst,LPSTR lpszTitle,
  355. DWORD dwStyle, WORD x, WORD y,
  356. WORD dx, WORD dy, int iMaxLines, WORD wID);
  357. /* Control messages sent to WPF window */
  358. //#define WPF_SETNLINES (WM_USER + 1)
  359. #define WPF_GETNLINES (WM_USER + 2)
  360. #define WPF_SETTABSTOPS (WM_USER + 4)
  361. #define WPF_GETTABSTOPS (WM_USER + 5)
  362. #define WPF_GETNUMTABS (WM_USER + 6)
  363. #define WPF_SETOUTPUT (WM_USER + 7)
  364. #define WPF_GETOUTPUT (WM_USER + 8)
  365. #define WPF_CLEARWINDOW (WM_USER + 9)
  366. /* Flags for WPF_SET/GETOUTPUT */
  367. #define WPFOUT_WINDOW 1
  368. #define WPFOUT_COM1 2
  369. #define WPFOUT_NEWFILE 3
  370. #define WPFOUT_APPENDFILE 4
  371. #define WPFOUT_DISABLED 5
  372. /* Messages sent to owner of window */
  373. #define WPF_NTEXT (0xbff0)
  374. #define WPF_NCHAR (0xbff1)
  375. /**********************************
  376. *
  377. * DEBUGGING SUPPORT
  378. *
  379. **********************************/
  380. BOOL FAR PASCAL wpfDbgSetLocation(WORD wLoc, LPSTR lpszFile);
  381. int FAR cdecl wpfDbgOut(LPSTR lpszFormat, ...);
  382. BOOL FAR PASCAL wpfSetDbgWindow(HWND hwnd, BOOL fDestroyOld);
  383. #define WinPrintf wpfDbgOut
  384. #ifdef DEBUG
  385. BOOL __fEval;
  386. BOOL __iDebugLevel;
  387. int FAR PASCAL __WinAssert(LPSTR lpszFile, int iLine);
  388. #define WinAssert(exp) \
  389. ((exp) ? 0 : __WinAssert((LPSTR) __FILE__, __LINE__))
  390. #define WinEval(exp) (__fEval=(exp), WinAssert(__fEval), __fEval)
  391. #define wpfGetDebugLevel(lpszModule) \
  392. (__iDebugLevel = GetProfileInt("MMDebug", (lpszModule), 0))
  393. #define wpfSetDebugLevel(i) \
  394. (__iDebugLevel = (i))
  395. #define wpfDebugLevel() (__iDebugLevel)
  396. #define dprintf if (__iDebugLevel) wpfDbgOut
  397. #define dprintf1 if (__iDebugLevel >= 1) wpfDbgOut
  398. #define dprintf2 if (__iDebugLevel >= 2) wpfDbgOut
  399. #define dprintf3 if (__iDebugLevel >= 3) wpfDbgOut
  400. #define dprintf4 if (__iDebugLevel >= 4) wpfDbgOut
  401. #else
  402. #define WinAssert(exp) 0
  403. #define WinEval(exp) (exp)
  404. #define wpfGetDebugLevel(lpszModule) 0
  405. #define wpfSetDebugLevel(i) 0
  406. #define wpfDebugLevel() 0
  407. #define dprintf if (0) ((int (*)(char *, ...)) 0)
  408. #define dprintf1 if (0) ((int (*)(char *, ...)) 0)
  409. #define dprintf2 if (0) ((int (*)(char *, ...)) 0)
  410. #define dprintf3 if (0) ((int (*)(char *, ...)) 0)
  411. #define dprintf4 if (0) ((int (*)(char *, ...)) 0)
  412. #endif
  413. /** THIS MUST BE LAST LINE OF FILE **/
  414. #endif