| /*************************************************************************** | |
| * Copyright 1995, Technion, Israel Institute of Technology | |
| * Electrical Eng, Software Lab. | |
| * Author: Michael Veksler. | |
| *************************************************************************** | |
| * File: shm_main_blk.h | |
| * Purpose: Main Wine's shared memory block | |
| *************************************************************************** | |
| */ | |
| #ifndef __WINE_SHM_MAIN_BLK_H | |
| #define __WINE_SHM_MAIN_BLK_H | |
| #ifdef CONFIG_IPC | |
| #include <sys/shm.h> | |
| #include "shm_block.h" | |
| #include "shm_semaph.h" | |
| #include "dde_proc.h" | |
| #include "dde_atom.h" | |
| #include "dde_mem.h" | |
| /***************************************************************************** | |
| * | |
| * main block object | |
| * | |
| ***************************************************************************** | |
| */ | |
| #define DDE_HANDLES_BIT_ARRAY_SIZE (DDE_HANDLES/sizeof(int)/8) | |
| #define SHM_MAXID SHMSEG /* maximum shm blocks (Wine's limit) */ | |
| struct shm_main_block { | |
| /* NOTE: "block" declaration must be the first */ | |
| struct shm_block block; | |
| char magic[64]; /* magic string to identify the block */ | |
| int build_lock; /* =1 when data structure not stable yet */ | |
| shm_sem sem; /* semaphores for main_block integrity */ | |
| struct _dde_proc proc[DDE_PROCS]; /* information about processes */ | |
| REL_PTR atoms[DDE_ATOMS]; /* relative reference to global atoms */ | |
| /* Translation from global window handles to local handles */ | |
| WND_DATA windows[DDE_WINDOWS]; | |
| DDE_HWND handles[DDE_HANDLES]; | |
| /* bit array stating if a handle is free (bit=0), LSB in */ | |
| /* free_handles[0] refers handle 0x8000, the MSB refers 0x801F */ | |
| unsigned free_handles[DDE_HANDLES_BIT_ARRAY_SIZE]; | |
| }; | |
| extern struct shm_main_block *main_block; | |
| int shm_init(void); | |
| void shm_delete_all(int shm_id); | |
| void DDE_mem_init(); | |
| int DDE_no_of_attached(); | |
| #define DDE_IPC_init() ( (main_block==NULL) ? (DDE_mem_init()) : 0 ) | |
| #endif /* CONFIG_IPC */ | |
| #endif /* __WINE_SHM_MAIN_BLK_H */ |