| Some notes concerning accelerators. |
| There are _three_ differently sized accelerator structures exposed to the |
| user. The general layout is: |
| We now have three different appearances: |
| - Accelerators in NE resources. These have a size of 5 byte and do not have |
| any padding. This is also the internal layout of the global handle HACCEL |
| (16 and 32) in Windows 95 and WINE. Exposed to the user as Win16 global |
| handles HACCEL16 and HACCEL32 by the Win16/Win32 API. |
| - Accelerators in PE resources. These have a size of 8 byte. Layout is: |
| They are exposed to the user only by direct accessing PE resources. |
| - Accelerators in the Win32 API. These have a size of 6 byte. Layout is: |
| These are exposed to the user by the CopyAcceleratorTable and |
| CreateAcceleratorTable in the Win32 API. |
| Why two types of accelerators in the Win32 API? We can only guess, but |
| my best bet is that the Win32 resource compiler can/does not handle struct |
| packing. Win32 ACCEL is defined using #pragma(2) for the compiler but without |
| any packing for RC, so it will assume #pragma(4). |
| Findings researched by Uwe Bonnes, Ulrich Weigand and Marcus Meissner. |