/***************************************************************************
 * Copyright 1995, Technion, Israel Institute of Technology
 * Electrical Eng, Software Lab.
 * Author:    Michael Veksler.
 ***************************************************************************
 * File:      dde_proc.h
 * Purpose :  DDE signals and processes functionality for DDE
 ***************************************************************************
 */
#ifndef __WINE_DDE_PROC_H
#define __WINE_DDE_PROC_H
#include <setjmp.h>
#include "wintypes.h"
#include "windows.h"
#define DDE_PROCS 64
#define DDE_WINDOWS 64
struct _dde_proc {
    int msg;			/* message queue for this process */
    int shmid;			/* first shared memory block id. */
    int sem;			/* semaphore for fragment allocation */
    int pid;
} ;
typedef struct _dde_proc *dde_proc;

extern sigjmp_buf env_wait_x;
enum stop_wait_op {		/* The action to be taken upon SIGUSR2 */
    CONT,			/* Don't do anything */
    STOP_WAIT_ACK,		/* Use siglongjmp to stop wait_ack() */
    STOP_WAIT_X			/* siglongjmp to stop MSG_WaitXEvent() */
};

typedef struct {
    WORD  proc_idx;		/* index into wine's process table  */
    HWND  wnd;			/* Window on the local proccess */
} WND_DATA;
extern enum stop_wait_op stop_wait_op;
extern int had_SIGUSR2;

extern int curr_proc_idx;
void stop_wait(int a);		   /* signal handler for SIGUSR2
				      (interrupts "select" system call) */
void dde_proc_init(dde_proc proc); /* init proc array */
void dde_proc_done(dde_proc proc); /* delete a proc entry */
void dde_proc_refresh(dde_proc proc); /* delete entry, if old junk */
void dde_proc_add(dde_proc proc);  /* Add current proc to proc array */
void dde_msg_setup(int *msg_ptr);
int  dde_reschedule();
void dde_wnd_setup();		   /* setup Data structure of DDE windows */

/* Send ack. to hnd indicating that posted/sent msg. got to destination*/
void dde_proc_send_ack(HWND wnd, BOOL val);
BOOL DDE_PostMessage( MSG *msg);
BOOL DDE_SendMessage( MSG *msg);
int DDE_GetRemoteMessage();
void DDE_DestroyWindow(HWND hwnd); /* delete DDE info regarding hwnd */
void DDE_TestDDE(HWND hwnd);	   /* do we have dde handling in the window ?*/
#endif /* __WINE_DDE_PROC_H */
