Changeset 21916 for trunk/src/odincrt/initterm.cpp
- Timestamp:
 - Dec 18, 2011, 10:28:22 PM (14 years ago)
 - Location:
 - trunk
 - Files:
 - 
      
- 2 edited
 
- 
          
  . (modified) (2 props)
 - 
          
  src/odincrt/initterm.cpp (modified) (3 diffs)
 
 
Legend:
- Unmodified
 - Added
 - Removed
 
- 
      
trunk
- Property svn:ignore
- 
      
old new 1 bin 2 Makefile.inc 1 env.cmd 2 LocalConfig.kmk  
 - 
      
 - 
Property       svn:mergeinfo
 set to       
/branches/gcc-kmk merged eligible  
 - Property svn:ignore
 - 
      
trunk/src/odincrt/initterm.cpp
r21538 r21916 1 1 /* 2 * DLL entry point2 * ODINCRT DLL entry point 3 3 * 4 4 * Copyright 1998 Sander van Leeuwen 5 5 * Copyright 1998 Peter Fitzsimmons 6 6 * 7 *8 7 * Project Odin Software License can be found in LICENSE.TXT 9 *10 8 */ 11 9 … … 14 12 #define INCL_DOSERRORS 15 13 #include <os2wrap.h> // Odin32 OS/2 api wrappers 16 #include <stdlib.h>17 #include <stdio.h>18 #include <string.h>19 #include <odin.h>20 #include <misc.h>21 14 #include <exitlist.h> 22 15 #include <initdll.h> 23 16 24 #ifdef __IBMCPP__ 25 26 static void APIENTRY cleanup(ULONG reason); 27 28 /* 29 * _DLL_InitTerm is the function that gets called by the operating system 30 * loader when it loads and frees this DLL for each process that accesses 31 * this DLL. However, it only gets called the first time the DLL is loaded 32 * and the last time it is freed for a particular process. The system 33 * linkage convention MUST be used because the operating system loader is 34 * calling this function. 35 * 36 * If ulFlag is zero then the DLL is being loaded so initialization should 37 * be performed. If ulFlag is 1 then the DLL is being freed so 38 * termination should be performed. 39 * 40 * A non-zero value must be returned to indicate success. 41 */ 42 unsigned long SYSTEM _DLL_InitTerm(unsigned long hModule, unsigned long ulFlag) 17 ULONG SYSTEM DLL_Init(ULONG hModule) 43 18 { 44 APIRET rc;45 46 switch (ulFlag)47 {48 case 0:49 {50 19 #ifdef WITH_KLIB 51 /* 52 * We need to reserve memory for the executable image 53 * before initiating any heaps. Lets do reserve 32MBs 54 */ 55 PVOID pvReserved = NULL; 56 DosAllocMem(&pvReserved, 32*1024*1024, PAG_READ); 57 #endif 58 /* initialize C and C++ runtime */ 59 if (_CRT_init() == -1) 60 return 0UL; 61 ctordtorInit(); 62 63 /* 64 * Register an exit list routine to clean up runtime at termination. 65 * We can't simply do it at DLL unload time because this is forbidden 66 * for VAC runtime Odin runtime is based on (see CPPLIB.INF from VAC 67 * for details). 68 */ 69 rc = DosExitList(EXITLIST_ODINCRT|EXLST_ADD, cleanup); 70 if(rc) 71 return 0UL; 72 #if 1 73 /* 74 * Experimental console hack. Sets apptype to PM anyhow. 75 * First Dll to be initiated should now allways be OdinCrt! 76 * So include odincrt first! 77 */ 78 PPIB pPIB; 79 PTIB pTIB; 80 rc = DosGetInfoBlocks(&pTIB, &pPIB); 81 if (rc != NO_ERROR) 82 return 0UL; 83 pPIB->pib_ultype = 3; 20 /* 21 * We need to reserve memory for the executable image 22 * before initiating any heaps. Lets do reserve 32MBs 23 */ 24 PVOID pvReserved = NULL; 25 DosAllocMem(&pvReserved, 32*1024*1024, PAG_READ); 84 26 #endif 85 27 86 #ifdef WITH_KLIB 87 /* cleanup - hacking is done */ 88 DosFreeMem(pvReserved); 89 #endif 90 break; 91 } 92 case 1: 93 break; 94 default: 95 return 0UL; 96 } 28 if (DLL_InitDefault(hModule) == -1) 29 return -1; 97 30 98 /* success */99 return 1UL;100 }101 102 static void APIENTRY cleanup(ULONG /*ulReason*/)103 {104 /* cleanup C++ and C runtime */105 ctordtorTerm();106 _CRT_term();107 DosExitList(EXLST_EXIT, cleanup);108 return ;109 }110 111 112 #elif defined(__WATCOM_CPLUSPLUS__)113 114 int __dll_initialize(unsigned long hModule, unsigned long ulFlag)115 {116 31 #if 1 117 32 /* … … 120 35 * So include odincrt first! 121 36 */ 122 APIRET rc;123 37 PPIB pPIB; 124 38 PTIB pTIB; 125 rc = DosGetInfoBlocks(&pTIB, &pPIB);39 APIRET rc = DosGetInfoBlocks(&pTIB, &pPIB); 126 40 if (rc != NO_ERROR) 127 return 0UL;41 return -1; 128 42 pPIB->pib_ultype = 3; 129 43 #endif 130 return 1; 44 45 #ifdef WITH_KLIB 46 /* cleanup - hacking is done */ 47 DosFreeMem(pvReserved); 48 #endif 49 50 return EXITLIST_ODINCRT; 131 51 } 132 52 133 int __dll_terminate(unsigned long hModule, unsigned long ulFlag)53 void SYSTEM DLL_Term(ULONG hModule) 134 54 { 135 return 1;55 DLL_TermDefault(hModule); 136 56 } 137 57 138 #else139 #error message("compiler is not supported");140 #endif141  
  Note:
 See   TracChangeset
 for help on using the changeset viewer.
  