tear16.cxx
Upload User: caisha3
Upload Date: 2013-09-21
Package Size: 208739k
Code Size: 19k
Category:

Windows Develop

Development Platform:

Visual C++

  1. //+------------------------------------------------------------------------
  2. //
  3. //  File:       toff16.cxx
  4. //
  5. //  Contents:   Tear off interfaces for win16.
  6. //
  7. //  History:    25-Jan-97 stevepro
  8. //
  9. //-------------------------------------------------------------------------
  10. #include <headers.hxx>
  11. #ifndef X_TEAROFF_HXX_
  12. #define X_TEAROFF_HXX_
  13. #include "tearoff.hxx"
  14. #endif
  15. #if 0
  16. struct TEAROFF_THUNK
  17. {
  18.     void *      papfnVtblThis;     // Thunk's vtable
  19.     ULONG       ulRef;             // Reference count for this thunk.
  20.     DWORD       unused;            // BUGBUG delete when can be compiled and tested on ALPHA
  21.     void *      pvObject1;         // Delegate other methods to this object using...
  22.     void *      apfnVtblObject1;   // ...this array of pointers to member functions.
  23.     void *      pvObject2;         // Delegate methods to this object using...
  24.     void *      apfnVtblObject2;   // ...this array of pointers to member functions...
  25.     DWORD       dwMask;            // ...the index of the method is set in the mask.
  26. };
  27. #endif
  28. extern void (*s_apfnPlainTearoffVtable[])();
  29. #ifdef WIN16
  30. EXTERN_C void __declspec(naked) TearoffThunk3()
  31. {   __asm   {
  32. push bp
  33. mov  bp, sp
  34. les  bx, ss:[bp+6] /* this = thisArg */
  35.         test word ptr es:[bx+28], 0x08 /* pvObject = (this->_dwMask & 1<<n) ? pvObject2 : pvObject1 */
  36. jz  Object1
  37. add  bx, 8                  /* increment to pvObject2 */
  38.     Object1:
  39. add  bx, 12                 /* offset pvObject1 */
  40.         mov  ax, word ptr es:[bx] /* get pvObject */
  41. mov  dx, word ptr es:[bx+2] 
  42.         les  bx, word ptr es:[bx+4]  /* get apfnVtblObject */
  43.         mov  ss:[bp+6], ax             /* thisArg = pvObject, adjusted for the final jmp */
  44.         mov  ss:[bp+8], dx
  45. pop  bp
  46.         jmp dword ptr es:[bx+12]   /* 4 byte ptrs, so 3*4 */
  47. };
  48. }
  49. EXTERN_C void __declspec(naked) TearoffThunk4()
  50. {   __asm   {
  51. push bp
  52. mov  bp, sp
  53. les  bx, ss:[bp+6] /* this = thisArg */
  54.         test word ptr es:[bx+28], 0x10 /* pvObject = (this->_dwMask & 1<<n) ? pvObject2 : pvObject1 */
  55. jz  Object1
  56. add  bx, 8                  /* increment to pvObject2 */
  57.     Object1:
  58. add  bx, 12                 /* offset pvObject1 */
  59.         mov  ax, word ptr es:[bx] /* get pvObject */
  60. mov  dx, word ptr es:[bx+2] 
  61.         les  bx, word ptr es:[bx+4]  /* get apfnVtblObject */
  62.         mov  ss:[bp+6], ax             /* thisArg = pvObject, adjusted for the final jmp */
  63.         mov  ss:[bp+8], dx
  64. pop  bp
  65.         jmp dword ptr es:[bx+16]   /* 4 byte ptrs, so 4*4 */
  66. };
  67. }
  68. EXTERN_C void __declspec(naked) TearoffThunk5()
  69. {   __asm   {
  70. push bp
  71. mov  bp, sp
  72. les  bx, ss:[bp+6] /* this = thisArg */
  73.         test word ptr es:[bx+28], 0x20 /* pvObject = (this->_dwMask & 1<<n) ? pvObject2 : pvObject1 */
  74. jz  Object1
  75. add  bx, 8                  /* increment to pvObject2 */
  76.     Object1:
  77. add  bx, 12                 /* offset pvObject1 */
  78.         mov  ax, word ptr es:[bx] /* get pvObject */
  79. mov  dx, word ptr es:[bx+2] 
  80.         les  bx, word ptr es:[bx+4]  /* get apfnVtblObject */
  81.         mov  ss:[bp+6], ax             /* thisArg = pvObject, adjusted for the final jmp */
  82.         mov  ss:[bp+8], dx
  83. pop  bp
  84.         jmp dword ptr es:[bx+20]   /* 4 byte ptrs, so 5*4 */
  85. };
  86. }
  87. EXTERN_C void __declspec(naked) TearoffThunk6()
  88. {   __asm   {
  89. push bp
  90. mov  bp, sp
  91. les  bx, ss:[bp+6] /* this = thisArg */
  92.         test word ptr es:[bx+28], 0x40 /* pvObject = (this->_dwMask & 1<<n) ? pvObject2 : pvObject1 */
  93. jz  Object1
  94. add  bx, 8                  /* increment to pvObject2 */
  95.     Object1:
  96. add  bx, 12                 /* offset pvObject1 */
  97.         mov  ax, word ptr es:[bx] /* get pvObject */
  98. mov  dx, word ptr es:[bx+2] 
  99.         les  bx, word ptr es:[bx+4]  /* get apfnVtblObject */
  100.         mov  ss:[bp+6], ax             /* thisArg = pvObject, adjusted for the final jmp */
  101.         mov  ss:[bp+8], dx
  102. pop  bp
  103.         jmp dword ptr es:[bx+24]   /* 4 byte ptrs, so 6*4 */
  104. };
  105. }
  106. EXTERN_C void __declspec(naked) TearoffThunk7()
  107. {   __asm   {
  108. push bp
  109. mov  bp, sp
  110. les  bx, ss:[bp+6] /* this = thisArg */
  111.         test word ptr es:[bx+28], 0x80 /* pvObject = (this->_dwMask & 1<<n) ? pvObject2 : pvObject1 */
  112. jz  Object1
  113. add  bx, 8                  /* increment to pvObject2 */
  114.     Object1:
  115. add  bx, 12                 /* offset pvObject1 */
  116.         mov  ax, word ptr es:[bx] /* get pvObject */
  117. mov  dx, word ptr es:[bx+2] 
  118.         les  bx, word ptr es:[bx+4]  /* get apfnVtblObject */
  119.         mov  ss:[bp+6], ax             /* thisArg = pvObject, adjusted for the final jmp */
  120.         mov  ss:[bp+8], dx
  121. pop  bp
  122.         jmp dword ptr es:[bx+28]   /* 4 byte ptrs, so 7*4 */
  123. };
  124. }
  125. EXTERN_C void __declspec(naked) TearoffThunk8()
  126. {   __asm   {
  127. push bp
  128. mov  bp, sp
  129. les  bx, ss:[bp+6] /* this = thisArg */
  130.         test word ptr es:[bx+28], 0x0100 /* pvObject = (this->_dwMask & 1<<n) ? pvObject2 : pvObject1 */
  131. jz  Object1
  132. add  bx, 8                  /* increment to pvObject2 */
  133.     Object1:
  134. add  bx, 12                 /* offset pvObject1 */
  135.         mov  ax, word ptr es:[bx] /* get pvObject */
  136. mov  dx, word ptr es:[bx+2] 
  137.         les  bx, word ptr es:[bx+4]  /* get apfnVtblObject */
  138.         mov  ss:[bp+6], ax             /* thisArg = pvObject, adjusted for the final jmp */
  139.         mov  ss:[bp+8], dx
  140. pop  bp
  141.         jmp dword ptr es:[bx+32]   /* 4 byte ptrs, so 8*4 */
  142. };
  143. }
  144. EXTERN_C void __declspec(naked) TearoffThunk9()
  145. {   __asm   {
  146. push bp
  147. mov  bp, sp
  148. les  bx, ss:[bp+6] /* this = thisArg */
  149.         test word ptr es:[bx+28], 0x0200 /* pvObject = (this->_dwMask & 1<<n) ? pvObject2 : pvObject1 */
  150. jz  Object1
  151. add  bx, 8                  /* increment to pvObject2 */
  152.     Object1:
  153. add  bx, 12                 /* offset pvObject1 */
  154.         mov  ax, word ptr es:[bx] /* get pvObject */
  155. mov  dx, word ptr es:[bx+2] 
  156.         les  bx, word ptr es:[bx+4]  /* get apfnVtblObject */
  157.         mov  ss:[bp+6], ax             /* thisArg = pvObject, adjusted for the final jmp */
  158.         mov  ss:[bp+8], dx
  159. pop  bp
  160.         jmp dword ptr es:[bx+36]   /* 4 byte ptrs, so 9*4 */
  161. };
  162. }
  163. EXTERN_C void __declspec(naked) TearoffThunk10()
  164. {   __asm   {
  165. push bp
  166. mov  bp, sp
  167. les  bx, ss:[bp+6] /* this = thisArg */
  168.         test word ptr es:[bx+28], 0x0400 /* pvObject = (this->_dwMask & 1<<n) ? pvObject2 : pvObject1 */
  169. jz  Object1
  170. add  bx, 8                  /* increment to pvObject2 */
  171.     Object1:
  172. add  bx, 12                 /* offset pvObject1 */
  173.         mov  ax, word ptr es:[bx] /* get pvObject */
  174. mov  dx, word ptr es:[bx+2] 
  175.         les  bx, word ptr es:[bx+4]  /* get apfnVtblObject */
  176.         mov  ss:[bp+6], ax             /* thisArg = pvObject, adjusted for the final jmp */
  177.         mov  ss:[bp+8], dx
  178. pop  bp
  179.         jmp dword ptr es:[bx+40]   /* 4 byte ptrs, so 10*4 */
  180. };
  181. }
  182. EXTERN_C void __declspec(naked) TearoffThunk11()
  183. {   __asm   {
  184. push bp
  185. mov  bp, sp
  186. les  bx, ss:[bp+6] /* this = thisArg */
  187.         test word ptr es:[bx+28], 0x0800 /* pvObject = (this->_dwMask & 1<<n) ? pvObject2 : pvObject1 */
  188. jz  Object1
  189. add  bx, 8                  /* increment to pvObject2 */
  190.     Object1:
  191. add  bx, 12                 /* offset pvObject1 */
  192.         mov  ax, word ptr es:[bx] /* get pvObject */
  193. mov  dx, word ptr es:[bx+2] 
  194.         les  bx, word ptr es:[bx+4]  /* get apfnVtblObject */
  195.         mov  ss:[bp+6], ax             /* thisArg = pvObject, adjusted for the final jmp */
  196.         mov  ss:[bp+8], dx
  197. pop  bp
  198.         jmp dword ptr es:[bx+44]   /* 4 byte ptrs, so 11*4 */
  199. };
  200. }
  201. EXTERN_C void __declspec(naked) TearoffThunk12()
  202. {   __asm   {
  203. push bp
  204. mov  bp, sp
  205. les  bx, ss:[bp+6] /* this = thisArg */
  206.         test word ptr es:[bx+28], 0x1000 /* pvObject = (this->_dwMask & 1<<n) ? pvObject2 : pvObject1 */
  207. jz  Object1
  208. add  bx, 8                  /* increment to pvObject2 */
  209.     Object1:
  210. add  bx, 12                 /* offset pvObject1 */
  211.         mov  ax, word ptr es:[bx] /* get pvObject */
  212. mov  dx, word ptr es:[bx+2] 
  213.         les  bx, word ptr es:[bx+4]  /* get apfnVtblObject */
  214.         mov  ss:[bp+6], ax             /* thisArg = pvObject, adjusted for the final jmp */
  215.         mov  ss:[bp+8], dx
  216. pop  bp
  217.         jmp dword ptr es:[bx+48]   /* 4 byte ptrs, so 12*4 */
  218. };
  219. }
  220. EXTERN_C void __declspec(naked) TearoffThunk13()
  221. {   __asm   {
  222. push bp
  223. mov  bp, sp
  224. les  bx, ss:[bp+6] /* this = thisArg */
  225.         test word ptr es:[bx+28], 0x2000 /* pvObject = (this->_dwMask & 1<<n) ? pvObject2 : pvObject1 */
  226. jz  Object1
  227. add  bx, 8                  /* increment to pvObject2 */
  228.     Object1:
  229. add  bx, 12                 /* offset pvObject1 */
  230.         mov  ax, word ptr es:[bx] /* get pvObject */
  231. mov  dx, word ptr es:[bx+2] 
  232.         les  bx, word ptr es:[bx+4]  /* get apfnVtblObject */
  233.         mov  ss:[bp+6], ax             /* thisArg = pvObject, adjusted for the final jmp */
  234.         mov  ss:[bp+8], dx
  235. pop  bp
  236.         jmp dword ptr es:[bx+52]   /* 4 byte ptrs, so 13*4 */
  237. };
  238. }
  239. EXTERN_C void __declspec(naked) TearoffThunk14()
  240. {   __asm   {
  241. push bp
  242. mov  bp, sp
  243. les  bx, ss:[bp+6] /* this = thisArg */
  244.         test word ptr es:[bx+28], 0x4000 /* pvObject = (this->_dwMask & 1<<n) ? pvObject2 : pvObject1 */
  245. jz  Object1
  246. add  bx, 8                  /* increment to pvObject2 */
  247.     Object1:
  248. add  bx, 12                 /* offset pvObject1 */
  249.         mov  ax, word ptr es:[bx] /* get pvObject */
  250. mov  dx, word ptr es:[bx+2] 
  251.         les  bx, word ptr es:[bx+4]  /* get apfnVtblObject */
  252.         mov  ss:[bp+6], ax             /* thisArg = pvObject, adjusted for the final jmp */
  253.         mov  ss:[bp+8], dx
  254. pop  bp
  255.         jmp dword ptr es:[bx+56]   /* 4 byte ptrs, so 14*4 */
  256. };
  257. }
  258. EXTERN_C void __declspec(naked) TearoffThunk15()
  259. {   __asm   {
  260. push bp
  261. mov  bp, sp
  262. les  bx, ss:[bp+6] /* this = thisArg */
  263.         test word ptr es:[bx+28], 0x8000 /* pvObject = (this->_dwMask & 1<<n) ? pvObject2 : pvObject1 */
  264. jz  Object1
  265. add  bx, 8                  /* increment to pvObject2 */
  266.     Object1:
  267. add  bx, 12                 /* offset pvObject1 */
  268.         mov  ax, word ptr es:[bx] /* get pvObject */
  269. mov  dx, word ptr es:[bx+2] 
  270.         les  bx, word ptr es:[bx+4]  /* get apfnVtblObject */
  271.         mov  ss:[bp+6], ax             /* thisArg = pvObject, adjusted for the final jmp */
  272.         mov  ss:[bp+8], dx
  273. pop  bp
  274.         jmp dword ptr es:[bx+60]   /* 4 byte ptrs, so 15*4 */
  275. };
  276. }
  277. #if 0
  278. #define THUNK_IMPLEMENT_COMPARE(n)
  279. EXTERN_C void __declspec(naked) TearoffThunk##n()
  280. {   __asm   {
  281. push bp
  282. mov  bp, sp
  283. les  bx, ss:[bp+6] /* this = thisArg */
  284. mov  ax, 1
  285. shl  ax, n
  286. test word ptr [bx+28], ax /* pvObject = (this->_dwMask & 1<<n) ? pvObject2 : pvObject1 */
  287. jz  Object1
  288. add  bx, 8                  /* increment to pvObject2 */
  289.     Object1:
  290. add  bx, 12                 /* offset pvObject1 */
  291. mov  cx, word ptr es:[bx-2] /* get pvObject */
  292. mov  bx, word ptr es:[bx] 
  293. mov  [bp+4], cx             /* thisArg = pvObject */
  294. mov  [bp+6], bx
  295. mov  cx, word ptr es:[bx+2] /* get apfnVtblObject */
  296. mov  bx, word ptr es:[bx+4]
  297. pop  bp
  298. jmp  dword ptr es:[bx+(4*n)] /* pfn = apfnVtblObject[n] */
  299. };
  300. }
  301. #endif
  302. EXTERN_C void __declspec(naked) TearoffThunk22()
  303. {                                           
  304.     __asm push  bp 
  305.     __asm mov bp, sp 
  306.     __asm les   bx, ss:[bp+6]           /* this = thisArg */ 
  307.     __asm mov   ax, word ptr es:[bx+12] /* get pvObject */ 
  308.     __asm mov   dx, word ptr es:[bx+14] 
  309.     __asm les   bx, word ptr es:[bx+16] /* get apfnVtblObject */ 
  310. __asm mov cx, 22
  311. __asm shl cx, 2
  312. __asm add bx, cx
  313.     __asm mov   ss:[bp+6], ax              /* thisArg = pvObject, adjusted for the final jmp */ 
  314.     __asm mov   ss:[bp+8], dx 
  315.     __asm pop  bp 
  316.     
  317.     __asm jmp dword ptr es:[bx]
  318. }
  319. EXTERN_C void __declspec(naked) TearoffThunk29()
  320. {                                           
  321.     __asm push  bp 
  322.     __asm mov bp, sp 
  323.     __asm les   bx, ss:[bp+6]           /* this = thisArg */ 
  324.     __asm mov   ax, word ptr es:[bx+12] /* get pvObject */ 
  325.     __asm mov   dx, word ptr es:[bx+14] 
  326.     __asm les   bx, word ptr es:[bx+16] /* get apfnVtblObject */ 
  327. __asm mov cx, 29
  328. __asm shl cx, 2
  329. __asm add bx, cx
  330.     __asm mov   ss:[bp+6], ax              /* thisArg = pvObject, adjusted for the final jmp */ 
  331.     __asm mov   ss:[bp+8], dx 
  332.     __asm pop  bp 
  333.     
  334.     __asm jmp dword ptr es:[bx]
  335. }
  336. #define THUNK_IMPLEMENT_SIMPLE(n)
  337. EXTERN_C void __declspec(naked) TearoffThunk##n()
  338. {                                           
  339.     __asm push  bp 
  340.     __asm mov bp, sp 
  341.     __asm les   bx, ss:[bp+6]           /* this = thisArg */ 
  342.     __asm mov   ax, word ptr es:[bx+12] /* get pvObject */ 
  343.     __asm mov   dx, word ptr es:[bx+14] 
  344.     __asm les   bx, word ptr es:[bx+16] /* get apfnVtblObject */ 
  345. __asm mov cx, n
  346. __asm shl cx, 2
  347. __asm add bx, cx
  348.     __asm mov   ss:[bp+6], ax              /* thisArg = pvObject, adjusted for the final jmp */ 
  349.     __asm mov   ss:[bp+8], dx 
  350.     __asm pop  bp 
  351.     __asm jmp dword ptr es:[bx]
  352. }
  353. // Single step a few times for the function you are calling.
  354. //THUNK_ARRAY_3_TO_15(IMPLEMENT_COMPARE)
  355. //THUNK_ARRAY_16_AND_UP(IMPLEMENT_SIMPLE)
  356. THUNK_IMPLEMENT_SIMPLE(16)  THUNK_IMPLEMENT_SIMPLE(17)  THUNK_IMPLEMENT_SIMPLE(18)  THUNK_IMPLEMENT_SIMPLE(19)  THUNK_IMPLEMENT_SIMPLE(20)  THUNK_IMPLEMENT_SIMPLE(21)  
  357. /*THUNK_IMPLEMENT_SIMPLE(22)*/  THUNK_IMPLEMENT_SIMPLE(23)  THUNK_IMPLEMENT_SIMPLE(24)  
  358. THUNK_IMPLEMENT_SIMPLE(25)  THUNK_IMPLEMENT_SIMPLE(26)  THUNK_IMPLEMENT_SIMPLE(27)  THUNK_IMPLEMENT_SIMPLE(28)  /* THUNK_IMPLEMENT_SIMPLE(29) */  THUNK_IMPLEMENT_SIMPLE(30)  
  359. THUNK_IMPLEMENT_SIMPLE(31)  THUNK_IMPLEMENT_SIMPLE(32)  THUNK_IMPLEMENT_SIMPLE(33)  THUNK_IMPLEMENT_SIMPLE(34)  THUNK_IMPLEMENT_SIMPLE(35)  
  360. THUNK_IMPLEMENT_SIMPLE(36)  THUNK_IMPLEMENT_SIMPLE(37)  THUNK_IMPLEMENT_SIMPLE(38)  THUNK_IMPLEMENT_SIMPLE(39)  THUNK_IMPLEMENT_SIMPLE(40)  
  361. THUNK_IMPLEMENT_SIMPLE(41)  THUNK_IMPLEMENT_SIMPLE(42)  THUNK_IMPLEMENT_SIMPLE(43)  THUNK_IMPLEMENT_SIMPLE(44)  THUNK_IMPLEMENT_SIMPLE(45)  THUNK_IMPLEMENT_SIMPLE(46)  
  362. THUNK_IMPLEMENT_SIMPLE(47)  THUNK_IMPLEMENT_SIMPLE(48)  THUNK_IMPLEMENT_SIMPLE(49)  THUNK_IMPLEMENT_SIMPLE(50)  THUNK_IMPLEMENT_SIMPLE(51)  THUNK_IMPLEMENT_SIMPLE(52)  
  363. THUNK_IMPLEMENT_SIMPLE(53)  THUNK_IMPLEMENT_SIMPLE(54)  THUNK_IMPLEMENT_SIMPLE(55)  THUNK_IMPLEMENT_SIMPLE(56)  THUNK_IMPLEMENT_SIMPLE(57)  
  364. THUNK_IMPLEMENT_SIMPLE(58)  THUNK_IMPLEMENT_SIMPLE(59)  THUNK_IMPLEMENT_SIMPLE(60)  THUNK_IMPLEMENT_SIMPLE(61)  THUNK_IMPLEMENT_SIMPLE(62)  
  365. THUNK_IMPLEMENT_SIMPLE(63)  THUNK_IMPLEMENT_SIMPLE(64)  THUNK_IMPLEMENT_SIMPLE(65)  THUNK_IMPLEMENT_SIMPLE(66)  THUNK_IMPLEMENT_SIMPLE(67)  THUNK_IMPLEMENT_SIMPLE(68)  
  366. THUNK_IMPLEMENT_SIMPLE(69)  THUNK_IMPLEMENT_SIMPLE(70)  THUNK_IMPLEMENT_SIMPLE(71)  THUNK_IMPLEMENT_SIMPLE(72)  THUNK_IMPLEMENT_SIMPLE(73)  THUNK_IMPLEMENT_SIMPLE(74)  
  367. THUNK_IMPLEMENT_SIMPLE(75)  THUNK_IMPLEMENT_SIMPLE(76)  THUNK_IMPLEMENT_SIMPLE(77)  THUNK_IMPLEMENT_SIMPLE(78)  THUNK_IMPLEMENT_SIMPLE(79)  
  368. THUNK_IMPLEMENT_SIMPLE(80)  THUNK_IMPLEMENT_SIMPLE(81)  THUNK_IMPLEMENT_SIMPLE(82)  THUNK_IMPLEMENT_SIMPLE(83)  THUNK_IMPLEMENT_SIMPLE(84)  
  369. THUNK_IMPLEMENT_SIMPLE(85)  THUNK_IMPLEMENT_SIMPLE(86)  THUNK_IMPLEMENT_SIMPLE(87)  THUNK_IMPLEMENT_SIMPLE(88)  THUNK_IMPLEMENT_SIMPLE(89)  THUNK_IMPLEMENT_SIMPLE(90)  
  370. THUNK_IMPLEMENT_SIMPLE(91)  THUNK_IMPLEMENT_SIMPLE(92)  THUNK_IMPLEMENT_SIMPLE(93)  THUNK_IMPLEMENT_SIMPLE(94)  THUNK_IMPLEMENT_SIMPLE(95)  THUNK_IMPLEMENT_SIMPLE(96)  
  371. THUNK_IMPLEMENT_SIMPLE(97)  THUNK_IMPLEMENT_SIMPLE(98)  THUNK_IMPLEMENT_SIMPLE(99)  THUNK_IMPLEMENT_SIMPLE(100) THUNK_IMPLEMENT_SIMPLE(101) 
  372. THUNK_IMPLEMENT_SIMPLE(102) THUNK_IMPLEMENT_SIMPLE(103) THUNK_IMPLEMENT_SIMPLE(104) THUNK_IMPLEMENT_SIMPLE(105) THUNK_IMPLEMENT_SIMPLE(106) 
  373. THUNK_IMPLEMENT_SIMPLE(107) THUNK_IMPLEMENT_SIMPLE(108) THUNK_IMPLEMENT_SIMPLE(109) THUNK_IMPLEMENT_SIMPLE(110) THUNK_IMPLEMENT_SIMPLE(111) THUNK_IMPLEMENT_SIMPLE(112) 
  374. THUNK_IMPLEMENT_SIMPLE(113) THUNK_IMPLEMENT_SIMPLE(114) THUNK_IMPLEMENT_SIMPLE(115) THUNK_IMPLEMENT_SIMPLE(116) THUNK_IMPLEMENT_SIMPLE(117) THUNK_IMPLEMENT_SIMPLE(118) 
  375. THUNK_IMPLEMENT_SIMPLE(119) THUNK_IMPLEMENT_SIMPLE(120) THUNK_IMPLEMENT_SIMPLE(121) THUNK_IMPLEMENT_SIMPLE(122) THUNK_IMPLEMENT_SIMPLE(123) 
  376. THUNK_IMPLEMENT_SIMPLE(124) THUNK_IMPLEMENT_SIMPLE(125) THUNK_IMPLEMENT_SIMPLE(126) THUNK_IMPLEMENT_SIMPLE(127) THUNK_IMPLEMENT_SIMPLE(128) 
  377. THUNK_IMPLEMENT_SIMPLE(129) THUNK_IMPLEMENT_SIMPLE(130) THUNK_IMPLEMENT_SIMPLE(131) THUNK_IMPLEMENT_SIMPLE(132) THUNK_IMPLEMENT_SIMPLE(133) THUNK_IMPLEMENT_SIMPLE(134) 
  378. THUNK_IMPLEMENT_SIMPLE(135) THUNK_IMPLEMENT_SIMPLE(136) THUNK_IMPLEMENT_SIMPLE(137) THUNK_IMPLEMENT_SIMPLE(138) THUNK_IMPLEMENT_SIMPLE(139) THUNK_IMPLEMENT_SIMPLE(140) 
  379. THUNK_IMPLEMENT_SIMPLE(141) THUNK_IMPLEMENT_SIMPLE(142) THUNK_IMPLEMENT_SIMPLE(143) THUNK_IMPLEMENT_SIMPLE(144) THUNK_IMPLEMENT_SIMPLE(145) 
  380. THUNK_IMPLEMENT_SIMPLE(146) THUNK_IMPLEMENT_SIMPLE(147) THUNK_IMPLEMENT_SIMPLE(148) THUNK_IMPLEMENT_SIMPLE(149) THUNK_IMPLEMENT_SIMPLE(150) 
  381. THUNK_IMPLEMENT_SIMPLE(151) THUNK_IMPLEMENT_SIMPLE(152) THUNK_IMPLEMENT_SIMPLE(153) THUNK_IMPLEMENT_SIMPLE(154) THUNK_IMPLEMENT_SIMPLE(155) THUNK_IMPLEMENT_SIMPLE(156) 
  382. THUNK_IMPLEMENT_SIMPLE(157) THUNK_IMPLEMENT_SIMPLE(158) THUNK_IMPLEMENT_SIMPLE(159) THUNK_IMPLEMENT_SIMPLE(160) THUNK_IMPLEMENT_SIMPLE(161) THUNK_IMPLEMENT_SIMPLE(162) 
  383. THUNK_IMPLEMENT_SIMPLE(163) THUNK_IMPLEMENT_SIMPLE(164) THUNK_IMPLEMENT_SIMPLE(165) THUNK_IMPLEMENT_SIMPLE(166) THUNK_IMPLEMENT_SIMPLE(167) 
  384. THUNK_IMPLEMENT_SIMPLE(168) THUNK_IMPLEMENT_SIMPLE(169) THUNK_IMPLEMENT_SIMPLE(170) THUNK_IMPLEMENT_SIMPLE(171) THUNK_IMPLEMENT_SIMPLE(172) 
  385. THUNK_IMPLEMENT_SIMPLE(173) THUNK_IMPLEMENT_SIMPLE(174) THUNK_IMPLEMENT_SIMPLE(175) THUNK_IMPLEMENT_SIMPLE(176) THUNK_IMPLEMENT_SIMPLE(177) THUNK_IMPLEMENT_SIMPLE(178) 
  386. THUNK_IMPLEMENT_SIMPLE(179) THUNK_IMPLEMENT_SIMPLE(180) THUNK_IMPLEMENT_SIMPLE(181) THUNK_IMPLEMENT_SIMPLE(182) THUNK_IMPLEMENT_SIMPLE(183) THUNK_IMPLEMENT_SIMPLE(184) 
  387. THUNK_IMPLEMENT_SIMPLE(185) THUNK_IMPLEMENT_SIMPLE(186) THUNK_IMPLEMENT_SIMPLE(187) THUNK_IMPLEMENT_SIMPLE(188) THUNK_IMPLEMENT_SIMPLE(189) 
  388. THUNK_IMPLEMENT_SIMPLE(190) THUNK_IMPLEMENT_SIMPLE(191) THUNK_IMPLEMENT_SIMPLE(192) THUNK_IMPLEMENT_SIMPLE(193) THUNK_IMPLEMENT_SIMPLE(194) 
  389. THUNK_IMPLEMENT_SIMPLE(195) THUNK_IMPLEMENT_SIMPLE(196) THUNK_IMPLEMENT_SIMPLE(197) THUNK_IMPLEMENT_SIMPLE(198) THUNK_IMPLEMENT_SIMPLE(199)
  390. #endif  //WIN16