//+---------------------------------------------------------------------------
//
//  Microsoft Windows
//  Copyright (C) Microsoft Corporation, 1992 - 1994.
//
//  File:       tc1632.cxx
//
//  Notes:      This file is automatically generated
//      Do not modify by hand
//
//  History:    Fri May 27 10:39:02 1994        Generated
//
//----------------------------------------------------------------------------

#include <headers.cxx>
#pragma hdrstop

#if DBG == 1
extern "C" ULONG ThunkCall1632_count = 0;
extern "C" ULONG ThunkCall1632_break = 0;
#endif

DWORD ThunkCall1632(THUNKINFO *pti)
{
    DWORD dwReturn;

#if DBG == 1
    ULONG ulThunkCall1632_count = ++ThunkCall1632_count;
    thkAssert( (ThunkCall1632_count != ThunkCall1632_break) &&
               "Break Count Hit");
#endif

    thkAssert(pti->pvfn != NULL);
    thkAssert(*pti->pThop == THOP_END);
    pti->pThop++;
    thkAssert(*pti->pThop == THOP_ROUTINEINDEX);
    pti->pThop++;
    
    thkDebugOut((DEB_ITRACE, "%sIn ThunkCall1632 #(%x) %p, index %d\n",
                 NestingLevelString(), ulThunkCall1632_count, 
                 pti->pvfn, *pti->pThop));
    DebugIncrementNestingLevel();

    if (FAILED(pti->scResult))
    {
        DebugDecrementNestingLevel();
        thkDebugOut((DEB_ITRACE, "%sOut ThunkCall1632 #(%x) returns 0x%08lX\n",
                     NestingLevelString(), ulThunkCall1632_count, pti->scResult));
        return (DWORD)pti->scResult;
    }
    pti->pThkMgr->SetThkState(THKSTATE_NOCALL);
    switch(*pti->pThop)
    {
    case 0:
        dwReturn = (*(DWORD (__stdcall *)(
                DWORD,
                DWORD,
                DWORD))pti->pvfn)(
            *(DWORD *)(pti->s32.pbStart+0),
            *(DWORD *)(pti->s32.pbStart+4),
            *(DWORD *)(pti->s32.pbStart+8)
            );
        break;
    case 1:
        dwReturn = (*(DWORD (__stdcall *)(
                DWORD))pti->pvfn)(
            *(DWORD *)(pti->s32.pbStart+0)
            );
        break;
    case 2:
        dwReturn = (*(DWORD (__stdcall *)(
                DWORD,
                DWORD,
                DWORD,
                DWORD))pti->pvfn)(
            *(DWORD *)(pti->s32.pbStart+0),
            *(DWORD *)(pti->s32.pbStart+4),
            *(DWORD *)(pti->s32.pbStart+8),
            *(DWORD *)(pti->s32.pbStart+12)
            );
        break;
    case 3:
        dwReturn = (*(DWORD (__stdcall *)(
                DWORD,
                DWORD))pti->pvfn)(
            *(DWORD *)(pti->s32.pbStart+0),
            *(DWORD *)(pti->s32.pbStart+4)
            );
        break;
    case 4:
        dwReturn = (*(DWORD (__stdcall *)(
                DWORD,
                DWORD,
                DWORD,
                DWORD,
                DWORD,
                DWORD,
                DWORD))pti->pvfn)(
            *(DWORD *)(pti->s32.pbStart+0),
            *(DWORD *)(pti->s32.pbStart+4),
            *(DWORD *)(pti->s32.pbStart+8),
            *(DWORD *)(pti->s32.pbStart+12),
            *(DWORD *)(pti->s32.pbStart+16),
            *(DWORD *)(pti->s32.pbStart+20),
            *(DWORD *)(pti->s32.pbStart+24)
            );
        break;
    case 5:
        dwReturn = (*(DWORD (__stdcall *)(
                DWORD,
                DWORD,
                DWORD,
                DWORD,
                DWORD))pti->pvfn)(
            *(DWORD *)(pti->s32.pbStart+0),
            *(DWORD *)(pti->s32.pbStart+4),
            *(DWORD *)(pti->s32.pbStart+8),
            *(DWORD *)(pti->s32.pbStart+12),
            *(DWORD *)(pti->s32.pbStart+16)
            );
        break;
    case 6:
        dwReturn = (*(DWORD (__stdcall *)())pti->pvfn)(
            );
        break;
    case 7:
        dwReturn = (*(DWORD (__stdcall *)(
                DWORD,
                DWORD,
                DWORD,
                DWORD,
                DWORD,
                DWORD))pti->pvfn)(
            *(DWORD *)(pti->s32.pbStart+0),
            *(DWORD *)(pti->s32.pbStart+4),
            *(DWORD *)(pti->s32.pbStart+8),
            *(DWORD *)(pti->s32.pbStart+12),
            *(DWORD *)(pti->s32.pbStart+16),
            *(DWORD *)(pti->s32.pbStart+20)
            );
        break;
    case 8:
        dwReturn = (*(DWORD (__stdcall *)(
                WORD,
                WORD,
                DWORD))pti->pvfn)(
            *(WORD *)(pti->s32.pbStart+0),
            *(WORD *)(pti->s32.pbStart+4),
            *(DWORD *)(pti->s32.pbStart+8)
            );
        break;
    case 9:
        dwReturn = (*(DWORD (__stdcall *)(
                DWORD,
                ULARGE_INTEGER,
                DWORD,
                DWORD,
                DWORD))pti->pvfn)(
            *(DWORD *)(pti->s32.pbStart+0),
            *(ULARGE_INTEGER UNALIGNED *)(pti->s32.pbStart+4),
            *(DWORD *)(pti->s32.pbStart+12),
            *(DWORD *)(pti->s32.pbStart+16),
            *(DWORD *)(pti->s32.pbStart+20)
            );
        break;
    case 10:
        dwReturn = (*(DWORD (__stdcall *)(
                DWORD,
                ULARGE_INTEGER))pti->pvfn)(
            *(DWORD *)(pti->s32.pbStart+0),
            *(ULARGE_INTEGER UNALIGNED *)(pti->s32.pbStart+4)
            );
        break;
    case 11:
        dwReturn = (*(DWORD (__stdcall *)(
                DWORD,
                ULARGE_INTEGER,
                ULARGE_INTEGER,
                DWORD))pti->pvfn)(
            *(DWORD *)(pti->s32.pbStart+0),
            *(ULARGE_INTEGER UNALIGNED *)(pti->s32.pbStart+4),
            *(ULARGE_INTEGER UNALIGNED *)(pti->s32.pbStart+12),
            *(DWORD *)(pti->s32.pbStart+20)
            );
        break;
    case 12:
        dwReturn = (*(DWORD (__stdcall *)(
                DWORD,
                ULARGE_INTEGER,
                DWORD,
                DWORD))pti->pvfn)(
            *(DWORD *)(pti->s32.pbStart+0),
            *(ULARGE_INTEGER UNALIGNED *)(pti->s32.pbStart+4),
            *(DWORD *)(pti->s32.pbStart+12),
            *(DWORD *)(pti->s32.pbStart+16)
            );
        break;
    case 13:
        dwReturn = (*(DWORD (__stdcall *)(
                DWORD,
                DWORD,
                ULARGE_INTEGER,
                DWORD,
                DWORD))pti->pvfn)(
            *(DWORD *)(pti->s32.pbStart+0),
            *(DWORD *)(pti->s32.pbStart+4),
            *(ULARGE_INTEGER UNALIGNED *)(pti->s32.pbStart+8),
            *(DWORD *)(pti->s32.pbStart+16),
            *(DWORD *)(pti->s32.pbStart+20)
            );
        break;
    case 14:
        dwReturn = (*(DWORD (__stdcall *)(
                DWORD,
                DWORD,
                DWORD,
                DWORD,
                DWORD,
                DWORD,
                DWORD,
                DWORD,
                DWORD,
                DWORD,
                DWORD))pti->pvfn)(
            *(DWORD *)(pti->s32.pbStart+0),
            *(DWORD *)(pti->s32.pbStart+4),
            *(DWORD *)(pti->s32.pbStart+8),
            *(DWORD *)(pti->s32.pbStart+12),
            *(DWORD *)(pti->s32.pbStart+16),
            *(DWORD *)(pti->s32.pbStart+20),
            *(DWORD *)(pti->s32.pbStart+24),
            *(DWORD *)(pti->s32.pbStart+28),
            *(DWORD *)(pti->s32.pbStart+32),
            *(DWORD *)(pti->s32.pbStart+36),
            *(DWORD *)(pti->s32.pbStart+40)
            );
        break;
    case 15:
        dwReturn = (*(DWORD (__stdcall *)(
                DWORD,
                DWORD,
                DWORD,
                SIZEL,
                DWORD))pti->pvfn)(
            *(DWORD *)(pti->s32.pbStart+0),
            *(DWORD *)(pti->s32.pbStart+4),
            *(DWORD *)(pti->s32.pbStart+8),
            *(SIZEL *)(pti->s32.pbStart+12),
            *(DWORD *)(pti->s32.pbStart+20)
            );
        break;
    case 16:
        dwReturn = (*(DWORD (__stdcall *)(
                DWORD,
                DWORD,
                SIZEL,
                DWORD))pti->pvfn)(
            *(DWORD *)(pti->s32.pbStart+0),
            *(DWORD *)(pti->s32.pbStart+4),
            *(SIZEL *)(pti->s32.pbStart+8),
            *(DWORD *)(pti->s32.pbStart+16)
            );
        break;
    case 17:
        dwReturn = (*(DWORD (__stdcall *)(
                DWORD,
                DWORD,
                WORD))pti->pvfn)(
            *(DWORD *)(pti->s32.pbStart+0),
            *(DWORD *)(pti->s32.pbStart+4),
            *(WORD *)(pti->s32.pbStart+8)
            );
        break;
    case 18:
        dwReturn = (*(DWORD (__stdcall *)(
                DWORD,
                SIZEL))pti->pvfn)(
            *(DWORD *)(pti->s32.pbStart+0),
            *(SIZEL *)(pti->s32.pbStart+4)
            );
        break;
    case 19:
        dwReturn = (*(DWORD (__stdcall *)(
                DWORD,
                WORD,
                DWORD))pti->pvfn)(
            *(DWORD *)(pti->s32.pbStart+0),
            *(WORD *)(pti->s32.pbStart+4),
            *(DWORD *)(pti->s32.pbStart+8)
            );
        break;
    case 20:
        dwReturn = (*(DWORD (__stdcall *)(
                DWORD,
                DWORD,
                DWORD,
                DWORD,
                DWORD,
                DWORD,
                DWORD,
                DWORD))pti->pvfn)(
            *(DWORD *)(pti->s32.pbStart+0),
            *(DWORD *)(pti->s32.pbStart+4),
            *(DWORD *)(pti->s32.pbStart+8),
            *(DWORD *)(pti->s32.pbStart+12),
            *(DWORD *)(pti->s32.pbStart+16),
            *(DWORD *)(pti->s32.pbStart+20),
            *(DWORD *)(pti->s32.pbStart+24),
            *(DWORD *)(pti->s32.pbStart+28)
            );
        break;
    case 21:
        dwReturn = (*(DWORD (__stdcall *)(
                DWORD,
                WORD,
                DWORD,
                DWORD,
                DWORD,
                DWORD,
                DWORD))pti->pvfn)(
            *(DWORD *)(pti->s32.pbStart+0),
            *(WORD *)(pti->s32.pbStart+4),
            *(DWORD *)(pti->s32.pbStart+8),
            *(DWORD *)(pti->s32.pbStart+12),
            *(DWORD *)(pti->s32.pbStart+16),
            *(DWORD *)(pti->s32.pbStart+20),
            *(DWORD *)(pti->s32.pbStart+24)
            );
        break;
    }

#if DBG == 1
    if ( !pti->fResultThunked && FAILED(dwReturn) )
    {
        thkDebugOut((DEB_FAILURES,
                     "ThunkCall1632 pvfn = %08lX Probably failed hr = %08lX\n",
                     pti->pvfn, dwReturn));
        if(thkInfoLevel & DEB_DBGFAIL)
            thkAssert(!"Wish to Debug");
    }
#endif

    pti->pThkMgr->SetThkState(THKSTATE_INVOKETHKOUT32);
    
    DebugDecrementNestingLevel();
    thkDebugOut((DEB_ITRACE, "%sOut ThunkCall1632 #(%x) returns 0x%08lX\n",
                 NestingLevelString(), ulThunkCall1632_count, dwReturn));
    return dwReturn;
}