home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / som30tk.zip / som30os2.zip / include / imod.efw < prev    next >
Text File  |  1996-12-24  |  11KB  |  369 lines

  1. :copyrightS
  2. /* @(#) 1.15 src/somc/fwemit/imod/imod.efw, somemit.fmwk.imod, som3.0 10/16/96 17:22:16 [12/24/96 07:59:04]
  3.  *
  4.  *   COMPONENT_NAME: somemit.fmwk.imod
  5.  *
  6.  *   ORIGINS: 27
  7.  *
  8.  *
  9.  *   10H9767, 25H7912  (C) COPYRIGHT International Business Machines Corp. 1995, 1996
  10.  *   All Rights Reserved
  11.  *   Licensed Materials - Property of IBM
  12.  *   US Government Users Restricted Rights - Use, duplication or
  13.  *   disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
  14.  */
  15. :prologS
  16. /*
  17.  * The functions contained within this source file are used to
  18.  * initialize/uninitialize the SOMObjects 3.0 style class library named
  19.  * <dllFileName>.
  20.  *
  21.  * The functions contained are:
  22.  *
  23.  * - createClasses               Calls NewClass procedures for all classes
  24.  * - somInitTermDependents       For initializing dependent classes
  25.  * - <dllNameStem>SOMInitTerm    Main init/term function
  26.  * - SOMInitModule               Entry used by SOM runtime after library loading
  27.  *
  28.  * The following functions in this source file may be customized:
  29.  *
  30.  * - somInitTermDependents
  31.  * - <dllNameStem>SOMInitTerm
  32.  *
  33.  * Search for lines containing !!! for the the places where these functions
  34.  * may be customized.
  35.  *
  36.  * This source file may be conditionally compiled for OS/2, AIX and Windows.
  37.  *
  38.  *    OS/2 C Set ++ users:  Compile with flag -DDYNA_LINK_C if you are
  39.  *                          dynamically linking the C runtimes.
  40.  *
  41.  *    Windows users:        Compile with flag -D_WIN16
  42.  *
  43.  *    AIX users:            Be sure to customize somInitTermDependents
  44.  *                          appropriately.
  45.  *
  46.  * Note: This file was generated based on the contents of the file
  47.  *       imod.efw in the toolkit include directory.
  48.  *
  49.  */
  50. #if defined __OS2__
  51.   #define INCL_DOSMODULEMGR
  52.   #include \<os2.h>
  53. #elif defined(_WIN32)
  54.   #define WIN32_LEAN_AND_MEAN
  55.   #include \<windows.h>
  56. #else
  57.   #ifdef _WIN16
  58.   #include \<windows.h>
  59.   #endif
  60. #endif
  61. #include \<som.h>
  62. #define SOM_LIBRARY_INITIALIZE 0L
  63. #define SOM_LIBRARY_TERMINATE  1L
  64. #ifdef SOM_STRICT_IDL
  65.   typedef SOMClass imodSOMClass;
  66. #else
  67.   typedef SOMClass *imodSOMClass;
  68. #endif
  69. #if defined(__IBMC__) &&  defined(__OS2__)
  70. #pragma linkage(SOMInitModule, system)
  71. #pragma linkage(<dllNameStem>SOMInitTerm, system)
  72. #pragma linkage(somTP_NewClassFn, system)
  73. #pragma linkage(createClasses, system)
  74. #endif
  75. typedef imodSOMClass SOMLINK somTP_NewClassFn(integer4 majv, integer4 minv);
  76. typedef somTP_NewClassFn *SOMNewClassFnPtr;
  77.  
  78. :classS
  79. /* \<NewClassProcExterns> follow this line. Do not remove this line. */
  80. <NewClassProcExterns>/* \<NewClassProcExterns> inserted above this line. Do not remove this line. */
  81.  
  82. /* Do not change the name of the following array. The imod emitter  */
  83. /* depends on the name of the array to locate and add               */
  84. /* secondary NewClass calls.                                        */
  85. static SOMNewClassFnPtr somInitModArray[] = {
  86. <classNameNewClassCalls>}; /* Do not remove this line. */
  87.  
  88. static long numSOMClasses = sizeof(somInitModArray)/sizeof(SOMNewClassFnPtr);
  89.  
  90. /* This function is called to create the SOM class objects for this
  91.  * class library. The class objects are destroyed at termination time.
  92.  */
  93. static void SOMLINK createClasses(void)
  94. {
  95.    SOMNewClassFnPtr *ncp;
  96.    int i;
  97.    for (i = 0, ncp = (SOMNewClassFnPtr *)somInitModArray;
  98.         i \< numSOMClasses ; ncp++, i++)
  99.       (*ncp)(0,0);
  100. }
  101.  
  102. #if defined(__OS2__)||defined(_WIN32)
  103.   #define SOM_SYS_DEPENDENT_INITTERM(flag) 0
  104.   /*
  105.    * Init/term processing for load time links is handled by the OS.
  106.    */
  107. #else
  108.   /*
  109.    * The somInitTermDependents function is provided for systems that must
  110.    * perform init/term processing for references to other SOM class
  111.    * library externals that this class library is dependent upon and
  112.    * that are resolved at load time (as opposed to references resolved by run
  113.    * time dynamic linking).
  114.    *
  115.    * On AIX, for example: if this class library, a.dll, has explicit
  116.    * references to externals in the class library b.dll that are resolved
  117.    * at link time, then somInitTermDependents should call that class library's
  118.    * \<dllstem>SOMInitTerm function explicitly:
  119.    *
  120.    *        rc = bSOMInitTerm(flag);
  121.    *
  122.    */
  123.   #define SOM_SYS_DEPENDENT_INITTERM(flag) somInitTermDependents(flag)
  124.   static long somInitTermDependents(unsigned long flag)
  125.   {
  126.      long rc = 0L; /* success */
  127.  
  128.      /*
  129.       *  !!! Place user customization here !!!
  130.       *  for example:  rc = bSOMInitTerm(flag);
  131.       */
  132.      return(rc);
  133.   }
  134. #endif
  135.  
  136. /*
  137.  * This function provides an initialization and termination function for a
  138.  * SOM class library.
  139.  *
  140.  * The function returns zero to indicate success.
  141.  *
  142.  * System notes:
  143.  *
  144.  *    AIX: This function must be exported by the class library.
  145.  *
  146.  *    OS2: This function may be exported by the class library but it is not
  147.  *         required.
  148.  *
  149.  */
  150. SOMEXTERN long SOMLINK <dllNameStem>SOMInitTerm (unsigned long flag)
  151. {
  152.    long rc = 0L; /* success */
  153.  
  154.    switch (flag) {
  155.       case SOM_LIBRARY_INITIALIZE:
  156.          if (SOM_SYS_DEPENDENT_INITTERM(flag) == 0) {
  157.             somRegisterClassLibrary("<dllFileName>",
  158.                                     (somMethodProc*)createClasses);
  159.             /*
  160.              *  !!! Place user customization here !!!
  161.              */
  162.          }
  163.          break;
  164.  
  165.       case SOM_LIBRARY_TERMINATE:
  166.          somUnregisterClassLibrary("<dllFileName>");
  167.          rc = SOM_SYS_DEPENDENT_INITTERM(flag);
  168.          /*
  169.           *  !!! Place user customization here !!!
  170.           */
  171.          break;
  172.  
  173.        default:
  174.          rc = 1L; /* Failure */
  175.    }
  176.    return(rc);
  177. }
  178.  
  179. /*
  180.  * This function is called by the SOM run time in response to
  181.  * a call to somFindClass, following the loading of a class library.
  182.  */
  183. SOMEXTERN void SOMLINK SOMInitModule( long majorVersion,
  184.                                       long minorVersion,
  185.                                       string className )
  186. {
  187.    <dllNameStem>SOMInitTerm(SOM_LIBRARY_INITIALIZE);
  188. }
  189.  
  190. #if defined(__OS2__) || defined(_WIN32)
  191. #define INITTERM_SUCCESS 1
  192. #define INITTERM_FAILURE 0
  193.  
  194. #if defined(__IBMC__)||defined(__IBMCPP__) /* IBM C Set ++ */
  195.   #ifdef __cplusplus
  196.   extern "C" {
  197.   #endif
  198.   int _CRT_init (void);
  199.   void _CRT_term (void);
  200.   void __ctordtorInit(void);
  201.   void __ctordtorTerm(void);
  202. #ifdef _WIN32
  203.   #define DLL_INITTERM \\
  204.    unsigned long _System _DLL_InitTerm (HMODULE hMod , \\
  205.                                         DWORD fdwReason, LPVOID lpvReserved)
  206. #else
  207.   #define DLL_INITTERM \\
  208.    unsigned long _System _DLL_InitTerm (unsigned long hModule, \\
  209.                                         unsigned long flag)
  210. #endif
  211.   #ifdef __cplusplus
  212.   }
  213.   #endif
  214.   /*
  215.    * Note: define DYNA_LINK_C if you are dynamically linking to the
  216.    *       C runtime library.
  217.    */
  218.   #ifndef DYNA_LINK_C /* C Set runtime is not dynamically linked (default) */
  219.      #define CRUNTIME_INIT if (_CRT_init() == -1) \\
  220.                               return(INITTERM_FAILURE)
  221.   #else
  222.      #define CRUNTIME_INIT
  223.   #endif
  224.   #ifndef DYNA_LINK_C /* C Set runtime is not dynamically linked (default) */
  225.      #define CRUNTIME_TERM _CRT_term()
  226.   #else
  227.      #define CRUNTIME_TERM
  228.   #endif
  229.   #define CPPRUNTIME_INIT __ctordtorInit()
  230.   #define CPPRUNTIME_TERM __ctordtorTerm()
  231.  
  232. #elif defined(_MSC_VER)
  233.   #define DLL_INITTERM \\
  234.      BOOL WINAPI DllMain(HMODULE hMod , \\
  235.                                         DWORD fdwReason, LPVOID lpvReserved)
  236.      #define CRUNTIME_INIT
  237.      #define CRUNTIME_TERM
  238.      #define CPPRUNTIME_INIT 
  239.      #define CPPRUNTIME_TERM 
  240.  
  241. #elif defined(__WATCOMC__)
  242.   #define DLL_INITTERM \\
  243.    unsigned long _DLL_InitTerm (unsigned long hModule, \\
  244.                                 unsigned long flag); \\
  245.    static unsigned long modHandle() \\
  246.    {HMODULE hModule; DosQueryModuleHandle("<dllNameStem>", &hModule); \\
  247.     return((unsigned long)hModule);}\\
  248.    int __dll_initialize() \\
  249.    {return((int)_DLL_InitTerm(modHandle(), SOM_LIBRARY_INITIALIZE));}\\
  250.    int __dll_terminate() \\
  251.    {return((int)_DLL_InitTerm(modHandle(), SOM_LIBRARY_TERMINATE));}\\
  252.    unsigned long _DLL_InitTerm (unsigned long hModule, \\
  253.                                 unsigned long flag)
  254.   #define CRUNTIME_INIT
  255.   #define CRUNTIME_TERM
  256.   #define CPPRUNTIME_INIT
  257.   #define CPPRUNTIME_TERM
  258.  
  259. #elif defined(__BORLANDC__)
  260.   #define DLL_INITTERM \\
  261.    unsigned long _dllmain(unsigned long flag, \\
  262.                           unsigned long hModule)
  263.   #define CRUNTIME_INIT
  264.   #define CRUNTIME_TERM
  265.   #define CPPRUNTIME_INIT
  266.   #define CPPRUNTIME_TERM
  267.  
  268. #elif defined(__HIGHC__)
  269.   #define DLL_INITTERM \\
  270.    unsigned long _DLL_InitTerm (unsigned long hModule, \\
  271.                                 unsigned long flag)
  272.   #define CRUNTIME_INIT
  273.   #define CRUNTIME_TERM
  274.   #define CPPRUNTIME_INIT
  275.   #define CPPRUNTIME_TERM
  276.  
  277. #else  /* default */
  278.   #define DLL_INITTERM \\
  279.    unsigned long _System _DLL_InitTerm (unsigned long hModule, \\
  280.                                         unsigned long flag)
  281.   #define CRUNTIME_INIT
  282.   #define CRUNTIME_TERM
  283.   #define CPPRUNTIME_INIT
  284.   #define CPPRUNTIME_TERM
  285. #endif
  286.  
  287. #ifdef _WIN32
  288. /* \<_WIN32_EXIT_HANDLER>: DO NOT REMOVE THIS and the FOLLOWING LINE */
  289. <exitHandlerDecl>
  290.  
  291. #ifdef _WIN32_EXIT_HANDLER
  292. SOMEXTERN void SOMLINK SOM_TERMINATION_HANDLER(void);
  293. #endif
  294.  
  295. DLL_INITTERM
  296. {
  297. unsigned long rc = INITTERM_SUCCESS;
  298.  
  299.   switch (fdwReason) {
  300.  
  301.     case DLL_PROCESS_ATTACH:
  302.          CRUNTIME_INIT ; 
  303.          CPPRUNTIME_INIT;
  304.          rc = (<dllNameStem>SOMInitTerm(SOM_LIBRARY_INITIALIZE))?
  305.         INITTERM_FAILURE :INITTERM_SUCCESS;
  306.     break;
  307.  
  308.     case DLL_PROCESS_DETACH:
  309. #ifdef _WIN32_EXIT_HANDLER
  310.     SOM_TERMINATION_HANDLER();
  311. #endif
  312.          <dllNameStem>SOMInitTerm(SOM_LIBRARY_TERMINATE);
  313.          CPPRUNTIME_TERM; /* Zeynal, defect 26191:calling order swaped. */
  314.          CRUNTIME_TERM;
  315.     break;
  316.  
  317.     case DLL_THREAD_ATTACH:
  318.     break;
  319.  
  320.     case DLL_THREAD_DETACH:
  321.     break;
  322.  
  323.     default:
  324.          return 0UL;
  325.   }
  326.  
  327.   return rc;
  328. }
  329. #else /* _WIN32 */
  330. DLL_INITTERM
  331. {
  332.    unsigned long rc = INITTERM_SUCCESS;
  333.  
  334.    switch (flag) {
  335.       case SOM_LIBRARY_INITIALIZE:
  336.          CRUNTIME_INIT;
  337.          CPPRUNTIME_INIT;
  338.          rc = (<dllNameStem>SOMInitTerm(flag))?INITTERM_FAILURE
  339.                                               :INITTERM_SUCCESS;
  340.          break;
  341.  
  342.       case SOM_LIBRARY_TERMINATE:
  343.          <dllNameStem>SOMInitTerm(flag);
  344.          CPPRUNTIME_TERM;
  345.          CRUNTIME_TERM;
  346.          break;
  347.  
  348.        default:
  349.          rc = INITTERM_FAILURE;
  350.    }
  351.    return(rc);
  352. }
  353. #endif /* _WIN32 */
  354. #else /* __OS2__ || _WIN32 */
  355.   #ifdef _WIN16
  356.   int CALLBACK LibMain (HINSTANCE inst, WORD ds, WORD heapSize, LPSTR cmdLine)
  357.   {
  358.       SOM_IgnoreWarning (inst);
  359.       SOM_IgnoreWarning (ds);
  360.       SOM_IgnoreWarning (heapSize);
  361.       SOM_IgnoreWarning (cmdLine);
  362.  
  363.       <dllNameStem>SOMInitTerm(SOM_LIBRARY_INITIALIZE);
  364.       return 1;
  365.   }
  366.   #endif
  367. #endif /* __OS2__ || _WIN32*/
  368.  
  369.