home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1998 May / Pcwk5b98.iso / Borland / Cplus45 / BC45 / BOLEUI.PAK / OLE2UI.H < prev    next >
C/C++ Source or Header  |  1995-08-29  |  37KB  |  991 lines

  1. //
  2. /*
  3.  * OLE2UI.H
  4.  *
  5.  * Published definitions, structures, types, and function prototypes for the
  6.  * OLE 2.0 User Interface support library.
  7.  *
  8.  */
  9.  
  10. /* NOTE: All dialog and string resource ID's defined in this file are
  11.  *    in the range:
  12.  *          32248 - 32504   (0x7DF8 - 0x7EF8)
  13. */
  14.  
  15. /*
  16.  *      C/C++ Run Time Library - Version 6.5
  17.  *
  18.  *      Copyright (c) 1994 by Borland International
  19.  *      All Rights Reserved.
  20.  *
  21.  */
  22.  
  23. #ifndef _OLE2UI_H_
  24. #define _OLE2UI_H_
  25.  
  26. #ifndef RC_INVOKED
  27. //#pragma message ("Including OLE2UI.H from " __FILE__)
  28. #endif  // !RC_INVOKED
  29.  
  30. #ifdef WIN32
  31. #define _INC_OLE
  32. #define __RPC_H__
  33. #endif
  34.  
  35. #if !defined(__cplusplus) && !defined( __TURBOC__)
  36. #define NONAMELESSUNION     // use strict ANSI standard (for DVOBJ.H)
  37. #endif
  38.  
  39. #ifndef RC_INVOKED
  40. #include <windows.h>
  41. #include <shellapi.h>
  42. #include <ole2.h>
  43. #include <string.h>
  44. #endif // !RC_INVOKED
  45. #include <dlgs.h>           //For fileopen dlg; standard include
  46.  
  47. #include "olestd.h"
  48.  
  49. #ifdef __TURBOC__
  50. #define _getcwd getcwd
  51. #define _itoa   itoa
  52. #define __max   max
  53. #define _find_t find_t
  54. #endif // __TURBOC__
  55.  
  56. #ifdef WIN32
  57. #define _fmemset memset
  58. #define _fmemcpy memcpy
  59. #define _fmemcmp memcmp
  60. #define _fstrcpy strcpy
  61. #define _fstrlen strlen
  62. #define _fstrrchr strrchr
  63. #define _fstrtok strtok
  64. #define lstrcpyn strncpy
  65.  
  66. // BUGBUG32: isspace function does not seem to work properly
  67. #undef isspace
  68. #define isspace(j) (j==' ' || j=='\t' || j=='\n')
  69. #endif  // WIN32
  70.  
  71. #if !defined( EXPORT )
  72. #ifdef WIN32
  73. #define EXPORT
  74. #else
  75. #define EXPORT  __export
  76. #endif  // WIN32
  77. #endif  // !EXPORT
  78.  
  79. #ifndef RC_INVOKED
  80. void BOleHelpNotify (DWORD, int);
  81. #endif // !RC_INVOKED
  82.  
  83. /*
  84.  * Initialization / Uninitialization routines.  OleUIInitialize
  85.  * must be called prior to using any functions in OLE2UI, and OleUIUnInitialize
  86.  * must be called before you app shuts down and when you are done using the
  87.  * library.
  88.  *
  89.  * NOTE:  If you are using the DLL version of this library, these functions
  90.  * are automatically called in the DLL's LibMain and WEP, so you should
  91.  * not call them directly from your application.
  92.  */
  93.  
  94. #ifndef RC_INVOKED
  95.  
  96. // Backward compatibility with older library
  97. #define OleUIUninitialize OleUIUnInitialize
  98.  
  99. STDAPI_(BOOL) OleUIInitialize(HINSTANCE hInstance, HINSTANCE hPrevInst);
  100. STDAPI_(BOOL) OleUIUninitialize(void);
  101.  
  102. #endif // !RC_INVOKED
  103.  
  104. #if !defined( SZCLASSICONBOX )
  105. #define SZCLASSICONBOX  "ole2uiIBCls"
  106. #endif
  107.  
  108. #if !defined( SZCLASSRESULTIMAGE )
  109. #define SZCLASSRESULTIMAGE  "ole2uiRICls"
  110. #endif
  111.  
  112. #ifndef RC_INVOKED
  113.  
  114. // object count, used to support DllCanUnloadNow and OleUICanUnloadNow
  115. extern DWORD g_dwObjectCount;
  116.  
  117. STDAPI OleUICanUnloadNow(void);
  118. STDAPI OleUILockLibrary(BOOL fLock);
  119.  
  120. #endif // !RC_INVOKED
  121.  
  122. //Dialog Identifiers as passed in Help messages to identify the source.
  123. #define IDD_INSERTOBJECT        32248
  124. #define IDD_CHANGEICON          32249
  125. #define IDD_CONVERT             32250
  126. #define IDD_PASTESPECIAL        32251
  127. #define IDD_EDITLINKS           32252
  128. #define IDD_FILEOPEN            32253
  129. #define IDD_BUSY                32254
  130. #define IDD_UPDATELINKS         32255
  131. #define IDD_CANNOTUPDATELINK    32256
  132. #define IDD_CHANGESOURCE        32257
  133. #define IDD_INSERTFILEBROWSE    32258
  134. #define IDD_CHANGEICONBROWSE    32259
  135.  
  136. // The following Dialogs are message dialogs used by OleUIPromptUser API
  137. #define IDD_LINKSOURCEUNAVAILABLE   32260
  138. #define IDD_SERVERNOTREG        32261
  139. #define IDD_LINKTYPECHANGED     32262
  140. #define IDD_SERVERNOTFOUND      32263
  141. #define IDD_OUTOFMEMORY         32264
  142.  
  143. // Stringtable identifers
  144. #define IDS_OLE2UIUNKNOWN       32300
  145. #define IDS_OLE2UILINK          32301
  146. #define IDS_OLE2UIOBJECT        32302
  147. #define IDS_OLE2UIEDIT          32303
  148. #define IDS_OLE2UICONVERT       32304
  149. #define IDS_OLE2UIEDITLINKCMD_1VERB     32305
  150. #define IDS_OLE2UIEDITOBJECTCMD_1VERB   32306
  151. #define IDS_OLE2UIEDITLINKCMD_NVERB     32307
  152. #define IDS_OLE2UIEDITOBJECTCMD_NVERB   32308
  153. #define IDS_OLE2UIEDITNOOBJCMD  32309
  154. // def. icon label (usu. "Document")
  155. #define IDS_DEFICONLABEL        32310
  156. #define IDS_OLE2UIPASTELINKEDTYPE  32311
  157.  
  158.  
  159. #define IDS_FILTERS             32320
  160. #define IDS_ICONFILTERS         32321
  161. #define IDS_BROWSE              32322
  162.  
  163. //Resource identifiers for bitmaps
  164. #define IDB_RESULTSEGA                  32325
  165. #define IDB_RESULTSVGA                  32326
  166. #define IDB_RESULTSHIRESVGA             32327
  167.  
  168.  
  169. #ifndef RC_INVOKED
  170.  
  171. //Missing from windows.h
  172. #ifndef PVOID
  173. typedef VOID *PVOID;
  174. #endif
  175.  
  176.  
  177. //Hook type used in all structures.
  178. typedef UINT (CALLBACK *LPFNOLEUIHOOK)(HWND, UINT, WPARAM, LPARAM);
  179.  
  180.  
  181. //Strings for registered messages
  182. #define SZOLEUI_MSG_HELP                "OLEUI_MSG_HELP"
  183. #define SZOLEUI_MSG_ENDDIALOG           "OLEUI_MSG_ENDDIALOG"
  184. #define SZOLEUI_MSG_BROWSE              "OLEUI_MSG_BROWSE"
  185. #define SZOLEUI_MSG_CHANGEICON          "OLEUI_MSG_CHANGEICON"
  186. #define SZOLEUI_MSG_CLOSEBUSYDIALOG     "OLEUI_MSG_CLOSEBUSYDIALOG"
  187. #define SZOLEUI_MSG_FILEOKSTRING        "OLEUI_MSG_FILEOKSTRING"
  188.  
  189. #endif // !RC_INVOKED
  190.  
  191. //Standard error definitions
  192. #define OLEUI_FALSE                     0
  193. #define OLEUI_SUCCESS                   1     //No error, same as OLEUI_OK
  194. #define OLEUI_OK                        1     //OK button pressed
  195. #define OLEUI_CANCEL                    2     //Cancel button pressed
  196.  
  197. #define OLEUI_ERR_STANDARDMIN           100
  198. #define OLEUI_ERR_STRUCTURENULL         101   //Standard field validation
  199. #define OLEUI_ERR_STRUCTUREINVALID      102
  200. #define OLEUI_ERR_CBSTRUCTINCORRECT     103
  201. #define OLEUI_ERR_HWNDOWNERINVALID      104
  202. #define OLEUI_ERR_LPSZCAPTIONINVALID    105
  203. #define OLEUI_ERR_LPFNHOOKINVALID       106
  204. #define OLEUI_ERR_HINSTANCEINVALID      107
  205. #define OLEUI_ERR_LPSZTEMPLATEINVALID   108
  206. #define OLEUI_ERR_HRESOURCEINVALID      109
  207.  
  208. #define OLEUI_ERR_FINDTEMPLATEFAILURE   110   //Initialization errors
  209. #define OLEUI_ERR_LOADTEMPLATEFAILURE   111
  210. #define OLEUI_ERR_DIALOGFAILURE         112
  211. #define OLEUI_ERR_LOCALMEMALLOC         113
  212. #define OLEUI_ERR_GLOBALMEMALLOC        114
  213. #define OLEUI_ERR_LOADSTRING            115
  214.  
  215. #define OLEUI_ERR_STANDARDMAX           116   //Start here for specific errors.
  216.  
  217.  
  218. //Help Button Identifier
  219. #define ID_OLEUIHELP                    99
  220.  
  221. // Help button for fileopen.dlg  (need this for resizing) 1038 is pshHelp
  222. #define IDHELP  1038
  223.  
  224. // Static text control (use this instead of -1 so things work correctly for
  225. // localization
  226. #define  ID_STATIC                      98
  227.  
  228. //Maximum key size we read from the RegDB.
  229. #define OLEUI_CCHKEYMAX                 256  // make any changes to this in geticon.c too
  230.  
  231. //Maximum verb length and length of Object menu
  232. #define OLEUI_CCHVERBMAX                32
  233. #define OLEUI_OBJECTMENUMAX             256
  234.  
  235. //Maximum MS-DOS pathname.
  236. #define OLEUI_CCHPATHMAX                256 // make any changes to this in geticon.c too
  237. #define OLEUI_CCHFILEMAX                13
  238.  
  239. //Icon label length
  240. #define OLEUI_CCHLABELMAX               40  // make any changes to this in geticon.c too
  241.  
  242. //Length of the CLSID string
  243. #define OLEUI_CCHCLSIDSTRING            39
  244.  
  245.  
  246. /*
  247.  * What follows here are first function prototypes for general utility
  248.  * functions, then sections laid out by dialog.  Each dialog section
  249.  * defines the dialog structure, the API prototype, flags for the dwFlags
  250.  * field, the dialog-specific error values, and dialog control IDs (for
  251.  * hooks and custom templates.
  252.  */
  253.  
  254. #ifndef RC_INVOKED
  255.  
  256. //Miscellaneous utility functions.
  257. STDAPI_(BOOL) OleUIAddVerbMenu(LPOLEOBJECT lpOleObj,
  258.                              LPSTR lpszShortType,
  259.                              HMENU hMenu,
  260.                              UINT uPos,
  261.                              UINT uIDVerbMin,
  262.                              UINT uIDVerbMax,
  263.                              BOOL bAddConvert,
  264.                              UINT idConvert,
  265.                              HMENU FAR *lphMenu);
  266.  
  267. //Metafile utility functions
  268. STDAPI_(HGLOBAL) OleUIMetafilePictFromIconAndLabel(HICON, LPSTR, LPSTR, UINT);
  269. STDAPI_(void)    OleUIMetafilePictIconFree(HGLOBAL);
  270. STDAPI_(BOOL)    OleUIMetafilePictIconDraw(HDC, LPRECT, HGLOBAL, BOOL);
  271. STDAPI_(UINT)    OleUIMetafilePictExtractLabel(HGLOBAL, LPSTR, UINT, LPDWORD);
  272. STDAPI_(HICON)   OleUIMetafilePictExtractIcon(HGLOBAL);
  273. STDAPI_(BOOL)    OleUIMetafilePictExtractIconSource(HGLOBAL,LPSTR,UINT FAR *);
  274.  
  275. #endif // !RC_INVOKED
  276.  
  277.  
  278. /*************************************************************************
  279. ** INSERT OBJECT DIALOG
  280. *************************************************************************/
  281.  
  282. #ifndef RC_INVOKED
  283.  
  284. typedef struct tagOLEUIINSERTOBJECT
  285.     {
  286.     //These IN fields are standard across all OLEUI dialog functions.
  287.     DWORD           cbStruct;         //Structure Size
  288.     DWORD           dwFlags;          //IN-OUT:  Flags
  289.     HWND            hWndOwner;        //Owning window
  290.     LPCSTR          lpszCaption;      //Dialog caption bar contents
  291.     LPFNOLEUIHOOK   lpfnHook;         //Hook callback
  292.     LPARAM          lCustData;        //Custom data to pass to hook
  293.     HINSTANCE       hInstance;        //Instance for customized template name
  294.     LPCSTR          lpszTemplate;     //Customized template name
  295.     HRSRC           hResource;        //Customized template handle
  296.     DWORD           dwIBApplication;  //Bolero app ptr for help
  297.     HHOOK           hHook;            //Bolero F1 hook
  298.     HTASK           hTask;            //Bolero task for F1 hook
  299.  
  300.     //Specifics for OLEUIINSERTOBJECT.  All are IN-OUT unless otherwise spec.
  301.     CLSID           clsid;            //Return space for class ID
  302.     LPSTR           lpszFile;         //Filename for inserts or links
  303.     UINT            cchFile;          //Size of lpszFile buffer: OLEUI_CCHPATHMAX
  304.     UINT            cClsidExclude;    //IN only:  CLSIDs in lpClsidExclude
  305.     LPCLSID         lpClsidExclude;   //List of CLSIDs to exclude from listing.
  306.  
  307.     BOOL                 fBrowseHelp; //PHP whether to do help on browse?
  308.  
  309.     //Specific to create objects if flags say so
  310.     IID             iid;              //Requested interface on creation.
  311.     DWORD           oleRender;        //Rendering option
  312.     LPFORMATETC     lpFormatEtc;      //Desired format
  313.     LPOLECLIENTSITE lpIOleClientSite; //Site to be use for the object.
  314.     LPSTORAGE       lpIStorage;       //Storage used for the object
  315.     LPVOID FAR     *ppvObj;           //Where the object is returned.
  316.     SCODE           sc;               //Result of creation calls.
  317.     HGLOBAL         hMetaPict;        //OUT: METAFILEPICT containing iconic aspect.
  318.                                       //IFF we couldn't stuff it in the cache.
  319.     } OLEUIINSERTOBJECT, *POLEUIINSERTOBJECT, FAR *LPOLEUIINSERTOBJECT;
  320.  
  321. //API prototype
  322. STDAPI_(UINT) OleUIInsertObject(LPOLEUIINSERTOBJECT);
  323.  
  324. #endif // !RC_INVOKED
  325.  
  326. //Insert Object flags
  327. #define IOF_SHOWHELP                0x00000001L
  328. #define IOF_SELECTCREATENEW         0x00000002L
  329. #define IOF_SELECTCREATEFROMFILE    0x00000004L
  330. #define IOF_CHECKLINK               0x00000008L
  331. #define IOF_CHECKDISPLAYASICON      0x00000010L
  332. #define IOF_CREATENEWOBJECT         0x00000020L
  333. #define IOF_CREATEFILEOBJECT        0x00000040L
  334. #define IOF_CREATELINKOBJECT        0x00000080L
  335. #define IOF_DISABLELINK             0x00000100L
  336. #define IOF_VERIFYSERVERSEXIST      0x00000200L
  337. #define IOF_DISABLEDISPLAYASICON    0x00000400L
  338.  
  339.  
  340. //Insert Object specific error codes
  341. #define OLEUI_IOERR_LPSZFILEINVALID         (OLEUI_ERR_STANDARDMAX+0)
  342. #define OLEUI_IOERR_LPSZLABELINVALID        (OLEUI_ERR_STANDARDMAX+1)
  343. #define OLEUI_IOERR_HICONINVALID            (OLEUI_ERR_STANDARDMAX+2)
  344. #define OLEUI_IOERR_LPFORMATETCINVALID      (OLEUI_ERR_STANDARDMAX+3)
  345. #define OLEUI_IOERR_PPVOBJINVALID           (OLEUI_ERR_STANDARDMAX+4)
  346. #define OLEUI_IOERR_LPIOLECLIENTSITEINVALID (OLEUI_ERR_STANDARDMAX+5)
  347. #define OLEUI_IOERR_LPISTORAGEINVALID       (OLEUI_ERR_STANDARDMAX+6)
  348. #define OLEUI_IOERR_SCODEHASERROR           (OLEUI_ERR_STANDARDMAX+7)
  349. #define OLEUI_IOERR_LPCLSIDEXCLUDEINVALID   (OLEUI_ERR_STANDARDMAX+8)
  350. #define OLEUI_IOERR_CCHFILEINVALID          (OLEUI_ERR_STANDARDMAX+9)
  351.  
  352.  
  353. //Insert Object Dialog identifiers
  354. #define ID_IO_CREATENEW                 2100
  355. #define ID_IO_CREATEFROMFILE            2101
  356. #define ID_IO_LINKFILE                  2102
  357. #define ID_IO_OBJECTTYPELIST            2103
  358. #define ID_IO_DISPLAYASICON             2104
  359. #define ID_IO_CHANGEICON                2105
  360. #define ID_IO_FILE                      2106
  361. #define ID_IO_FILEDISPLAY               2107
  362. #define ID_IO_RESULTIMAGE               2108
  363. #define ID_IO_RESULTTEXT                2109
  364. #define ID_IO_ICONDISPLAY               2110
  365. #define ID_IO_OBJECTTYPETEXT            2111
  366. #define ID_IO_FILETEXT                  2112
  367. #define ID_IO_FILETYPE                  2113
  368.  
  369. // Strings in OLE2UI resources
  370. #define IDS_IORESULTNEW                 32400
  371. #define IDS_IORESULTNEWICON             32401
  372. #define IDS_IORESULTFROMFILE1           32402
  373. #define IDS_IORESULTFROMFILE2           32403
  374. #define IDS_IORESULTFROMFILEICON2       32404
  375. #define IDS_IORESULTLINKFILE1           32405
  376. #define IDS_IORESULTLINKFILE2           32406
  377. #define IDS_IORESULTLINKFILEICON1       32407
  378. #define IDS_IORESULTLINKFILEICON2       32408
  379.  
  380. /*************************************************************************
  381. ** PASTE SPECIAL DIALOG
  382. *************************************************************************/
  383.  
  384. #ifndef RC_INVOKED
  385.  
  386. // Maximum number of link types
  387. #define     PS_MAXLINKTYPES  8
  388.  
  389. //NOTE: OLEUIPASTEENTRY and OLEUIPASTEFLAG structs are defined in OLESTD.H
  390.  
  391. typedef struct tagOLEUIPASTESPECIAL
  392.     {
  393.     //These IN fields are standard across all OLEUI dialog functions.
  394.     DWORD           cbStruct;       //Structure Size
  395.     DWORD           dwFlags;        //IN-OUT:  Flags
  396.     HWND            hWndOwner;      //Owning window
  397.     LPCSTR          lpszCaption;    //Dialog caption bar contents
  398.     LPFNOLEUIHOOK   lpfnHook;       //Hook callback
  399.     LPARAM          lCustData;      //Custom data to pass to hook
  400.     HINSTANCE       hInstance;      //Instance for customized template name
  401.     LPCSTR          lpszTemplate;   //Customized template name
  402.     HRSRC           hResource;      //Customized template handle
  403.     DWORD           dwIBApplication;  //Bolero app ptr for help
  404.     HHOOK           hHook;            //Bolero F1 hook
  405.     HTASK           hTask;            //Bolero task for F1 hook
  406.  
  407.     //Specifics for OLEUIPASTESPECIAL.
  408.  
  409.     //IN  fields
  410.     LPDATAOBJECT    lpSrcDataObj;       //Source IDataObject* (on the
  411.                                         // clipboard) for data to paste
  412.  
  413.     LPOLEUIPASTEENTRY arrPasteEntries;  //OLEUIPASTEENTRY array which
  414.                                         // specifies acceptable formats. See
  415.                                         // OLEUIPASTEENTRY for more info.
  416.     int             cPasteEntries;      //No. of OLEUIPASTEENTRY array entries
  417.  
  418.     UINT        FAR *arrLinkTypes;      //List of link types that are
  419.                                         // acceptable. Link types are referred
  420.                                         // to using OLEUIPASTEFLAGS in
  421.                                         // arrPasteEntries
  422.     int             cLinkTypes;         //Number of link types
  423.     UINT            cClsidExclude;      //Number of CLSIDs in lpClsidExclude
  424.     LPCLSID         lpClsidExclude;     //List of CLSIDs to exclude from list.
  425.  
  426.     //OUT fields
  427.     int             nSelectedIndex;     //Index of arrPasteEntries[] that the
  428.                                         // user selected
  429.     BOOL            fLink;              //Indicates if Paste or Paste Link was
  430.                                         // selected by the user
  431.     HGLOBAL         hMetaPict;          //Handle to Metafile containing icon
  432.                                         // and icon title selected by the user
  433.                                         // Use the Metafile utility functions
  434.                                         // defined in this header to
  435.                                         // manipulate hMetaPict
  436.     SIZEL           sizel;              // size of object/link in its source
  437.                                         //  if the display aspect chosen by
  438.                                         //  the user matches the aspect
  439.                                         //  displayed in the source. if
  440.                                         //  different aspect is chosen then
  441.                                         //  sizel.cx=sizel.cy=0 is returned.
  442.                                         //  sizel displayed in source is
  443.                                         //  retrieved from the
  444.                                         //  ObjectDescriptor if fLink is FALSE
  445.                                         //  LinkSrcDescriptor if fLink is TRUE
  446.     } OLEUIPASTESPECIAL, *POLEUIPASTESPECIAL, FAR *LPOLEUIPASTESPECIAL;
  447.  
  448.  
  449. //API to bring up PasteSpecial dialog
  450. STDAPI_(UINT) OleUIPasteSpecial(LPOLEUIPASTESPECIAL);
  451.  
  452. //Paste Special flags
  453. // Show Help button. IN flag.
  454. #define PSF_SHOWHELP                0x00000001L
  455.  
  456. //Select Paste radio button at dialog startup. This is the default if
  457. // PSF_SELECTPASTE or PSF_SELECTPASTELINK are not specified. Also specifies
  458. // state of button on dialog termination. IN/OUT flag.
  459. #define PSF_SELECTPASTE             0x00000002L
  460.  
  461. //Select PasteLink radio button at dialog startup. Also specifies state of
  462. // button on dialog termination. IN/OUT flag.
  463. #define PSF_SELECTPASTELINK         0x00000004L
  464.  
  465. //Specfies if DisplayAsIcon button was checked on dialog termination. OUT flag
  466. #define PSF_CHECKDISPLAYASICON      0x00000008L
  467. #define PSF_DISABLEDISPLAYASICON    0x00000010L
  468.  
  469.  
  470. //Paste Special specific error codes
  471. #define OLEUI_IOERR_SRCDATAOBJECTINVALID      (OLEUI_ERR_STANDARDMAX+0)
  472. #define OLEUI_IOERR_ARRPASTEENTRIESINVALID    (OLEUI_ERR_STANDARDMAX+1)
  473. #define OLEUI_IOERR_ARRLINKTYPESINVALID       (OLEUI_ERR_STANDARDMAX+2)
  474. #define OLEUI_PSERR_CLIPBOARDCHANGED          (OLEUI_ERR_STANDARDMAX+3)
  475.  
  476. #endif // !RC_INVOKED
  477.  
  478. //Paste Special Dialog identifiers
  479. #define ID_PS_PASTE                    500
  480. #define ID_PS_PASTELINK                501
  481. #define ID_PS_SOURCETEXT               502
  482. #define ID_PS_PASTELIST                503
  483. #define ID_PS_PASTELINKLIST            504
  484. #define ID_PS_DISPLAYLIST              505
  485. #define ID_PS_DISPLAYASICON            506
  486. #define ID_PS_ICONDISPLAY              507
  487. #define ID_PS_CHANGEICON               508
  488. #define ID_PS_RESULTIMAGE              509
  489. #define ID_PS_RESULTTEXT               510
  490. #define ID_PS_RESULTGROUP              511
  491. #define ID_PS_STXSOURCE                512
  492. #define ID_PS_STXAS                    513
  493.  
  494. // Paste Special String IDs
  495. #define IDS_PSPASTEDATA                32410
  496. #define IDS_PSPASTEOBJECT              32411
  497. #define IDS_PSPASTEOBJECTASICON        32412
  498. #define IDS_PSPASTELINKDATA            32413
  499. #define IDS_PSPASTELINKOBJECT          32414
  500. #define IDS_PSPASTELINKOBJECTASICON    32415
  501. #define IDS_PSNONOLE                   32416
  502. #define IDS_PSUNKNOWNTYPE              32417
  503. #define IDS_PSUNKNOWNSRC               32418
  504. #define IDS_PSUNKNOWNAPP               32419
  505.  
  506.  
  507. /*************************************************************************
  508. ** EDIT LINKS DIALOG
  509. *************************************************************************/
  510.  
  511. #ifndef RC_INVOKED
  512.  
  513. /* IOleUILinkContainer Interface
  514. ** -----------------------------
  515. **    This interface must be implemented by container applications that
  516. **    want to use the EditLinks dialog. the EditLinks dialog calls back
  517. **    to the container app to perform the OLE functions to manipulate
  518. **    the links within the container.
  519. */
  520.  
  521. #define LPOLEUILINKCONTAINER     IOleUILinkContainer FAR*
  522.  
  523. #undef  INTERFACE
  524. #define INTERFACE   IOleUILinkContainer
  525.  
  526. DECLARE_INTERFACE_(IOleUILinkContainer, IUnknown)
  527. {
  528.     //*** IUnknown methods ***/
  529.     STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
  530.     STDMETHOD_(ULONG,AddRef) (THIS) PURE;
  531.     STDMETHOD_(ULONG,Release) (THIS) PURE;
  532.  
  533.     STDMETHOD_(DWORD,GetNextLink) (THIS_ DWORD dwLink) PURE;
  534.     STDMETHOD(SetLinkUpdateOptions) (THIS_ DWORD dwLink, DWORD dwUpdateOpt) PURE;
  535.     STDMETHOD(GetLinkUpdateOptions) (THIS_ DWORD dwLink, DWORD FAR* lpdwUpdateOpt) PURE;
  536.     STDMETHOD(SetLinkSource) (THIS_
  537.             DWORD       dwLink,
  538.             LPSTR       lpszDisplayName,
  539.             ULONG       lenFileName,
  540.             ULONG FAR*  pchEaten,
  541.             BOOL        fValidateSource) PURE;
  542.     STDMETHOD(GetLinkSource) (THIS_
  543.             DWORD       dwLink,
  544.             LPSTR FAR*  lplpszDisplayName,
  545.             ULONG FAR*  lplenFileName,
  546.             LPSTR FAR*  lplpszFullLinkType,
  547.             LPSTR FAR*  lplpszShortLinkType,
  548.             BOOL FAR*   lpfSourceAvailable,
  549.             BOOL FAR*   lpfIsSelected) PURE;
  550.     STDMETHOD(OpenLinkSource) (THIS_ DWORD dwLink) PURE;
  551.     STDMETHOD(UpdateLink) (THIS_
  552.             DWORD dwLink,
  553.             BOOL fErrorMessage,
  554.             BOOL fErrorAction) PURE;
  555.     STDMETHOD(CancelLink) (THIS_ DWORD dwLink) PURE;
  556. };
  557.  
  558.  
  559. typedef struct tagOLEUIEDITLINKS
  560.     {
  561.     //These IN fields are standard across all OLEUI dialog functions.
  562.     DWORD           cbStruct;       //Structure Size
  563.     DWORD           dwFlags;        //IN-OUT:  Flags
  564.     HWND            hWndOwner;      //Owning window
  565.     LPCSTR          lpszCaption;    //Dialog caption bar contents
  566.     LPFNOLEUIHOOK   lpfnHook;       //Hook callback
  567.     LPARAM          lCustData;      //Custom data to pass to hook
  568.     HINSTANCE       hInstance;      //Instance for customized template name
  569.     LPCSTR          lpszTemplate;   //Customized template name
  570.     HRSRC           hResource;      //Customized template handle
  571.     DWORD           dwIBApplication;  //Bolero app ptr for help
  572.     HHOOK           hHook;            //Bolero F1 hook
  573.     HTASK           hTask;            //Bolero task for F1 hook
  574.  
  575.     BOOL            fChangeSourceHelp; //PHP
  576.  
  577.     //Specifics for OLEUI<STRUCT>.  All are IN-OUT unless otherwise spec.
  578.  
  579.     LPOLEUILINKCONTAINER lpOleUILinkContainer;  //IN: Interface to manipulate
  580.                                                 //links in the container
  581.     } OLEUIEDITLINKS, *POLEUIEDITLINKS, FAR *LPOLEUIEDITLINKS;
  582.  
  583.  
  584. //API Prototype
  585. STDAPI_(UINT) OleUIEditLinks(LPOLEUIEDITLINKS);
  586.  
  587. #endif // !RC_INVOKED
  588.  
  589. // Edit Links flags
  590. #define ELF_SHOWHELP                0x00000001L
  591. #define ELF_DISABLEUPDATENOW        0x00000002L
  592. #define ELF_DISABLEOPENSOURCE       0x00000004L
  593. #define ELF_DISABLECHANGESOURCE     0x00000008L
  594. #define ELF_DISABLECANCELLINK       0x00000010L
  595.  
  596. // Edit Links Dialog identifiers
  597. #define ID_EL_CHANGESOURCE             201
  598. #define ID_EL_AUTOMATIC                202
  599. #define ID_EL_CLOSE                    208
  600. #define ID_EL_CANCELLINK               209
  601. #define ID_EL_UPDATENOW                210
  602. #define ID_EL_OPENSOURCE               211
  603. #define ID_EL_MANUAL                   212
  604. #define ID_EL_LINKSOURCE               216
  605. #define ID_EL_LINKTYPE                 217
  606. #define ID_EL_UPDATE                   218
  607. #define ID_EL_NULL                     -1
  608. #define ID_EL_LINKSLISTBOX             206
  609. #define ID_EL_COL1                     220
  610. #define ID_EL_COL2                     221
  611. #define ID_EL_COL3                     222
  612.  
  613.  
  614.  
  615. /*************************************************************************
  616. ** CHANGE ICON DIALOG
  617. *************************************************************************/
  618.  
  619. #ifndef RC_INVOKED
  620.  
  621. typedef struct tagOLEUICHANGEICON
  622.     {
  623.     //These IN fields are standard across all OLEUI dialog functions.
  624.     DWORD           cbStruct;       //Structure Size
  625.     DWORD           dwFlags;        //IN-OUT:  Flags
  626.     HWND            hWndOwner;      //Owning window
  627.     LPCSTR          lpszCaption;    //Dialog caption bar contents
  628.     LPFNOLEUIHOOK   lpfnHook;       //Hook callback
  629.     LPARAM          lCustData;      //Custom data to pass to hook
  630.     HINSTANCE       hInstance;      //Instance for customized template name
  631.     LPCSTR          lpszTemplate;   //Customized template name
  632.     HRSRC           hResource;      //Customized template handle
  633.     DWORD           dwIBApplication;  //Bolero app ptr for help
  634.     HHOOK           hHook;            //Bolero F1 hook
  635.     HTASK           hTask;            //Bolero task for F1 hook
  636.  
  637.     BOOL fBrowseIconHelp; //PHP
  638.  
  639.     //Specifics for OLEUICHANGEICON.  All are IN-OUT unless otherwise spec.
  640.     HGLOBAL         hMetaPict;      //Current and final image.  Source of the
  641.                                     //icon is embedded in the metafile itself.
  642.     CLSID           clsid;          //IN only: class used to get Default icon
  643.     char            szIconExe[OLEUI_CCHPATHMAX];
  644.     int             cchIconExe;
  645.     } OLEUICHANGEICON, *POLEUICHANGEICON, FAR *LPOLEUICHANGEICON;
  646.  
  647.  
  648. //API prototype
  649. STDAPI_(UINT) OleUIChangeIcon(LPOLEUICHANGEICON);
  650.  
  651. #endif // !RC_INVOKED
  652.  
  653. //Change Icon flags
  654. #define CIF_SHOWHELP                0x00000001L
  655. #define CIF_SELECTCURRENT           0x00000002L
  656. #define CIF_SELECTDEFAULT           0x00000004L
  657. #define CIF_SELECTFROMFILE          0x00000008L
  658. #define CIF_USEICONEXE              0x0000000aL
  659.  
  660.  
  661. //Change Icon specific error codes
  662. #define OLEUI_CIERR_MUSTHAVECLSID           (OLEUI_ERR_STANDARDMAX+0)
  663. #define OLEUI_CIERR_MUSTHAVECURRENTMETAFILE (OLEUI_ERR_STANDARDMAX+1)
  664. #define OLEUI_CIERR_SZICONEXEINVALID        (OLEUI_ERR_STANDARDMAX+2)
  665.  
  666.  
  667. //Change Icon Dialog identifiers
  668. #define ID_GROUP                    120
  669. #define ID_CURRENT                  121
  670. #define ID_CURRENTICON              122
  671. #define ID_DEFAULT                  123
  672. #define ID_DEFAULTICON              124
  673. #define ID_FROMFILE                 125
  674. #define ID_FROMFILEEDIT             126
  675. #define ID_ICONLIST                 127
  676. #define ID_LABEL                    128
  677. #define ID_LABELEDIT                129
  678. #define ID_BROWSE                   130
  679. #define ID_RESULTICON               132
  680. #define ID_RESULTLABEL              133
  681.  
  682. // Stringtable defines for Change Icon
  683. #define IDS_CINOICONSINFILE         32430
  684. #define IDS_CIINVALIDFILE           32431
  685. #define IDS_CIFILEACCESS            32432
  686. #define IDS_CIFILESHARE             32433
  687. #define IDS_CIFILEOPENFAIL          32434
  688.  
  689.  
  690.  
  691. /*************************************************************************
  692. ** CONVERT DIALOG
  693. *************************************************************************/
  694.  
  695. #ifndef RC_INVOKED
  696.  
  697. typedef struct tagOLEUICONVERT
  698.     {
  699.     //These IN fields are standard across all OLEUI dialog functions.
  700.     DWORD           cbStruct;         //Structure Size
  701.     DWORD           dwFlags;          //IN-OUT:  Flags
  702.     HWND            hWndOwner;        //Owning window
  703.     LPCSTR          lpszCaption;      //Dialog caption bar contents
  704.     LPFNOLEUIHOOK   lpfnHook;         //Hook callback
  705.     LPARAM          lCustData;        //Custom data to pass to hook
  706.     HINSTANCE       hInstance;        //Instance for customized template name
  707.     LPCSTR          lpszTemplate;     //Customized template name
  708.     HRSRC           hResource;        //Customized template handle
  709.     DWORD           dwIBApplication;  //Bolero app ptr for help
  710.     HHOOK           hHook;            //Bolero F1 hook
  711.     HTASK           hTask;            //Bolero task for F1 hook
  712.  
  713.     //Specifics for OLEUICONVERT.  All are IN-OUT unless otherwise spec.
  714.     CLSID           clsid;            //Class ID sent in to dialog: IN only
  715.     CLSID           clsidConvertDefault;  //Class ID to use as convert default: IN only
  716.     CLSID           clsidActivateDefault;  //Class ID to use as activate default: IN only
  717.  
  718.     CLSID           clsidNew;         //Selected Class ID: OUT only
  719.     DWORD           dvAspect;         //IN-OUT, either DVASPECT_CONTENT or
  720.                                       //DVASPECT_ICON
  721.     WORD            wFormat;          //Original data format
  722.     BOOL            fIsLinkedObject;  //IN only; true if object is linked
  723.     HGLOBAL         hMetaPict;        //IN-OUT: METAFILEPICT containing iconic aspect.
  724.     LPSTR           lpszUserType;     //IN-OUT: user type name of original class.
  725.                                       //  We'll do lookup if it's NULL.
  726.                                       //  This gets freed on exit.
  727.     BOOL            fObjectsIconChanged;  // OUT; TRUE if ChangeIcon was called (and not cancelled)
  728.     LPSTR           lpszDefLabel;     //IN-OUT: default label to use for icon.
  729.                                       //  if NULL, the short user type name
  730.                                       //  will be used. if the object is a
  731.                                       //  link, the caller should pass the
  732.                                       //  DisplayName of the link source
  733.                                       //  This gets freed on exit.
  734.  
  735.     UINT            cClsidExclude;    //IN: No. of CLSIDs in lpClsidExclude
  736.     LPCLSID         lpClsidExclude;   //IN: List of CLSIDs to exclude from list
  737.     } OLEUICONVERT, *POLEUICONVERT, FAR *LPOLEUICONVERT;
  738.  
  739.  
  740. //API prototype
  741. STDAPI_(UINT) OleUIConvert(LPOLEUICONVERT);
  742.  
  743. // Determine if there is at least one class that can Convert or ActivateAs
  744. // the given clsid.
  745. STDAPI_(BOOL) OleUICanConvertOrActivateAs(
  746.         REFCLSID    rClsid,
  747.         BOOL        fIsLinkedObject,
  748.         WORD        wFormat
  749. );
  750.  
  751. //Convert Dialog flags
  752.  
  753. // IN only: Shows "HELP" button
  754. #define CF_SHOWHELPBUTTON          0x00000001L
  755.  
  756. // IN only: lets you set the convert default object - the one that is
  757. // selected as default in the convert listbox.
  758. #define CF_SETCONVERTDEFAULT       0x00000002L
  759.  
  760.  
  761. // IN only: lets you set the activate default object - the one that is
  762. // selected as default in the activate listbox.
  763.  
  764. #define CF_SETACTIVATEDEFAULT       0x00000004L
  765.  
  766.  
  767. // IN/OUT: Selects the "Convert To" radio button, is set on exit if
  768. // this button was selected
  769. #define CF_SELECTCONVERTTO         0x00000008L
  770.  
  771. // IN/OUT: Selects the "Activate As" radio button, is set on exit if
  772. // this button was selected
  773. #define CF_SELECTACTIVATEAS        0x00000010L
  774. #define CF_DISABLEDISPLAYASICON    0x00000020L
  775. #define CF_DISABLEACTIVATEAS       0x00000040L
  776.  
  777.  
  778. //Convert specific error codes
  779. #define OLEUI_CTERR_CLASSIDINVALID      (OLEUI_ERR_STANDARDMAX+1)
  780. #define OLEUI_CTERR_DVASPECTINVALID     (OLEUI_ERR_STANDARDMAX+2)
  781. #define OLEUI_CTERR_CBFORMATINVALID     (OLEUI_ERR_STANDARDMAX+3)
  782. #define OLEUI_CTERR_HMETAPICTINVALID    (OLEUI_ERR_STANDARDMAX+4)
  783. #define OLEUI_CTERR_STRINGINVALID       (OLEUI_ERR_STANDARDMAX+5)
  784.  
  785. #endif // !RC_INVOKED
  786.  
  787. //Convert Dialog identifiers
  788. #define IDCV_OBJECTTYPE             150
  789. #define IDCV_DISPLAYASICON          152
  790. #define IDCV_CHANGEICON             153
  791. #define IDCV_ACTIVATELIST           154
  792. #define IDCV_CONVERTTO              155
  793. #define IDCV_ACTIVATEAS             156
  794. #define IDCV_RESULTTEXT             157
  795. #define IDCV_CONVERTLIST            158
  796. #define IDCV_ICON                   159
  797. #define IDCV_ICONLABEL1             160
  798. #define IDCV_ICONLABEL2             161
  799. #define IDCV_STXCURTYPE             162
  800. #define IDCV_GRPRESULT              163
  801. #define IDCV_STXCONVERTTO           164
  802.  
  803. // String IDs for Convert dialog
  804. #define IDS_CVRESULTCONVERTLINK     32440
  805. #define IDS_CVRESULTCONVERTTO       32441
  806. #define IDS_CVRESULTNOCHANGE        32442
  807. #define IDS_CVRESULTDISPLAYASICON   32443
  808. #define IDS_CVRESULTACTIVATEAS      32444
  809. #define IDS_CVRESULTACTIVATEDIFF    32445
  810.  
  811.  
  812. /*************************************************************************
  813. ** BUSY DIALOG
  814. *************************************************************************/
  815.  
  816. #ifndef RC_INVOKED
  817.  
  818. typedef struct tagOLEUIBUSY
  819.     {
  820.     //These IN fields are standard across all OLEUI dialog functions.
  821.     DWORD           cbStruct;         //Structure Size
  822.     DWORD           dwFlags;          //IN-OUT:  Flags ** NOTE ** this dialog has no flags
  823.     HWND            hWndOwner;        //Owning window
  824.     LPCSTR          lpszCaption;      //Dialog caption bar contents
  825.     LPFNOLEUIHOOK   lpfnHook;         //Hook callback
  826.     LPARAM          lCustData;        //Custom data to pass to hook
  827.     HINSTANCE       hInstance;        //Instance for customized template name
  828.     LPCSTR          lpszTemplate;     //Customized template name
  829.     HRSRC           hResource;        //Customized template handle
  830.  
  831.     //Specifics for OLEUIBUSY.
  832.     HTASK           hTask;            //IN: HTask which is blocking
  833.     HWND FAR *      lphWndDialog;     //IN: Dialog's HWND is placed here
  834.     } OLEUIBUSY, *POLEUIBUSY, FAR *LPOLEUIBUSY;
  835.  
  836. //API prototype
  837. STDAPI_(UINT) OleUIBusy(LPOLEUIBUSY);
  838.  
  839. // Flags for this dialog
  840.  
  841. // IN only: Disables "Cancel" button
  842. #define BZ_DISABLECANCELBUTTON          0x00000001L
  843.  
  844. // IN only: Disables "Switch To..." button
  845. #define BZ_DISABLESWITCHTOBUTTON        0x00000002L
  846.  
  847. // IN only: Disables "Retry" button
  848. #define BZ_DISABLERETRYBUTTON           0x00000004L
  849.  
  850. // IN only: Generates a "Not Responding" dialog as opposed to the
  851. // "Busy" dialog.  The wording in the text is slightly different, and
  852. // the "Cancel" button is grayed out if you set this flag.
  853. #define BZ_NOTRESPONDINGDIALOG          0x00000008L
  854.  
  855. // Busy specific error/return codes
  856. #define OLEUI_BZERR_HTASKINVALID     (OLEUI_ERR_STANDARDMAX+0)
  857.  
  858. // SWITCHTOSELECTED is returned when user hit "switch to"
  859. #define OLEUI_BZ_SWITCHTOSELECTED    (OLEUI_ERR_STANDARDMAX+1)
  860.  
  861. // RETRYSELECTED is returned when user hit "retry"
  862. #define OLEUI_BZ_RETRYSELECTED       (OLEUI_ERR_STANDARDMAX+2)
  863.  
  864. // CALLUNBLOCKED is returned when call has been unblocked
  865. #define OLEUI_BZ_CALLUNBLOCKED       (OLEUI_ERR_STANDARDMAX+3)
  866.  
  867. #endif // !RC_INVOKED
  868.  
  869. // Busy dialog identifiers
  870. #define IDBZ_RETRY                      600
  871. #define IDBZ_ICON                       601
  872. #define IDBZ_MESSAGE1                   602
  873. #define IDBZ_SWITCHTO                   604
  874.  
  875. // Busy dialog stringtable defines
  876. #define IDS_BZRESULTTEXTBUSY            32447
  877. #define IDS_BZRESULTTEXTNOTRESPONDING   32448
  878.  
  879. // Links dialog stringtable defines
  880. #define IDS_LINK_AUTO           32450
  881. #define IDS_LINK_MANUAL         32451
  882. #define IDS_LINK_UNKNOWN        32452
  883. #define IDS_LINKS               32453
  884. #define IDS_FAILED              32454
  885. #define IDS_CHANGESOURCE        32455
  886. #define IDS_INVALIDSOURCE       32456
  887. #define IDS_ERR_GETLINKSOURCE   32457
  888. #define IDS_ERR_GETLINKUPDATEOPTIONS    32458
  889. #define IDS_ERR_ADDSTRING       32459
  890. #define IDS_CHANGEADDITIONALLINKS   32460
  891. #define IDS_CLOSE               32461
  892.  
  893.  
  894. /*************************************************************************
  895. ** PROMPT USER DIALOGS
  896. *************************************************************************/
  897. #define ID_PU_LINKS             900
  898. #define ID_PU_TEXT              901
  899. #define ID_PU_CONVERT           902
  900. #define ID_PU_BROWSE            904
  901. #define ID_PU_METER             905
  902. #define ID_PU_PERCENT           906
  903. #define ID_PU_STOP              907
  904.  
  905. // used for -1 ids in dialogs:
  906. #define ID_DUMMY    999
  907.  
  908. #ifndef RC_INVOKED
  909.  
  910. /* inside ole2ui.c */
  911. #ifdef __cplusplus
  912. extern "C"
  913. #endif
  914. int EXPORT FAR CDECL OleUIPromptUser(WORD nTemplate, HWND hwndParent, ...);
  915.  
  916. #define UPDATELINKS_STARTDELAY  2000    // Delay before 1st link updates
  917.                                         //  to give the user a chance to
  918.                                         //  dismiss the dialog before any
  919.                                         //  links update.
  920.  
  921. STDAPI_(BOOL) OleUIUpdateLinks(
  922.         LPOLEUILINKCONTAINER lpOleUILinkCntr,
  923.         HWND hwndParent,
  924.         LPSTR lpszTitle,
  925.         int cLinks);
  926.  
  927. #endif // !RC_INVOKED
  928.  
  929. /*************************************************************************
  930. ** OLE OBJECT FEEDBACK EFFECTS
  931. *************************************************************************/
  932.  
  933. #ifndef RC_INVOKED
  934.  
  935. #define OLEUI_HANDLES_USEINVERSE    0x00000001L
  936. #define OLEUI_HANDLES_NOBORDER      0x00000002L
  937. #define OLEUI_HANDLES_INSIDE        0x00000004L
  938. #define OLEUI_HANDLES_OUTSIDE       0x00000008L
  939.  
  940.  
  941. #define OLEUI_SHADE_FULLRECT        1
  942. #define OLEUI_SHADE_BORDERIN        2
  943. #define OLEUI_SHADE_BORDEROUT       3
  944.  
  945. /* objfdbk.c function prototypes */
  946. STDAPI_(void) OleUIDrawHandles(LPRECT lpRect, HDC hdc, DWORD dwFlags, UINT cSize, BOOL fDraw);
  947. STDAPI_(void) OleUIDrawShading(LPRECT lpRect, HDC hdc, DWORD dwFlags, UINT cWidth);
  948. STDAPI_(void) OleUIShowObject(LPCRECT lprc, HDC hdc, BOOL fIsLink);
  949.  
  950. #endif // !RC_INVOKED
  951.  
  952. /*************************************************************************
  953. ** Hatch window definitions and prototypes                              **
  954. *************************************************************************/
  955.  
  956. #ifndef RC_INVOKED
  957.  
  958. #define DEFAULT_HATCHBORDER_WIDTH   4
  959.  
  960. STDAPI_(BOOL) RegisterHatchWindowClass(HINSTANCE hInst);
  961. STDAPI_(HWND) CreateHatchWindow(HWND hWndParent, HINSTANCE hInst);
  962. STDAPI_(UINT) GetHatchWidth(HWND hWndHatch);
  963. STDAPI_(void) GetHatchRect(HWND hWndHatch, LPRECT lpHatchRect);
  964. STDAPI_(void) SetHatchRect(HWND hWndHatch, LPRECT lprcHatchRect);
  965. STDAPI_(void) SetHatchWindowSize(
  966.         HWND        hWndHatch,
  967.         LPRECT      lprcIPObjRect,
  968.         LPRECT      lprcClipRect,
  969.         LPPOINT     lpptOffset
  970. );
  971.  
  972. #endif // !RC_INVOKED
  973.  
  974. /*************************************************************************
  975. ** VERSION VERIFICATION INFORMATION
  976. *************************************************************************/
  977.  
  978. // The following magic number is used to verify that the resources we bind
  979. // to our EXE are the same "version" as the LIB (or DLL) file which
  980. // contains these routines.  This is not the same as the Version information
  981. // resource that we place in OLE2UI.RC, this is a special ID that we will
  982. // have compiled in to our EXE.  Upon initialization of OLE2UI, we will
  983. // look in our resources for an RCDATA called "VERIFICATION" (see OLE2UI.RC),
  984. // and make sure that the magic number there equals the magic number below.
  985.  
  986.  
  987. #define OLEUI_VERSION_MAGIC 0x4D42
  988.  
  989. #endif  //_OLE2UI_H_
  990.  
  991.