/*
 * 16-bit mode stack frame layout
 *
 * Copyright 1995 Alexandre Julliard
 */

#ifndef WINE_STACKFRAME_H
#define WINE_STACKFRAME_H

#include <windows.h>
#include "ldt.h"

#ifndef WINELIB
#pragma pack(1)
#endif

  /* 16-bit stack layout after CallTo32() */
typedef struct
{
    WORD    saved_ss;                /* saved previous 16-bit stack */
    WORD    saved_sp;
    WORD    ds;                      /* 16-bit ds */
    DWORD   entry_point WINE_PACKED; /* entry point to call */
    WORD    ordinal_number;          /* ordinal number of entry point */
    WORD    dll_id;                  /* DLL id of entry point */
    WORD    bp;                      /* 16-bit bp */
    WORD    ip;                      /* return address */
    WORD    cs;
    WORD    args[1];                 /* arguments to API function */
} STACK16FRAME;

  /* 32-bit stack layout after CallTo16() */
typedef struct
{
    DWORD   saved_esp;      /* saved previous 32-bit stack */
    DWORD   edi;            /* saved registers */
    DWORD   esi;
    DWORD   edx;
    DWORD   ecx;
    DWORD   ebx;
    DWORD   ebp;            /* saved 32-bit frame pointer */
    DWORD   retaddr;        /* return address */
    DWORD   codeselector;   /* code selector for return address */
    DWORD   args[1];        /* arguments to 16-bit function */
} STACK32FRAME;

#ifndef WINELIB
#pragma pack(4)
#endif

  /* Saved 16-bit stack */
extern WORD IF1632_Saved16_ss;
extern WORD IF1632_Saved16_sp;

  /* Saved 32-bit stack */
extern DWORD IF1632_Saved32_esp;
extern SEGPTR IF1632_Stack32_base;
extern DWORD IF1632_Original32_esp;

#define CURRENT_STACK16 \
    ((STACK16FRAME *)PTR_SEG_OFF_TO_LIN(IF1632_Saved16_ss,IF1632_Saved16_sp))

#define CURRENT_DS   (CURRENT_STACK16->ds)

  /* Make a segmented pointer from a pointer to a variable located */
  /* on the 32-bit stack for the current task. */
#define MAKE_SEGPTR(ptr) \
     ((SEGPTR)IF1632_Stack32_base + \
      ((DWORD)(ptr) - (DWORD)PTR_SEG_TO_LIN(IF1632_Stack32_base)))

#endif /* WINE_STACKFRAME_H */
