| /*************************************************************************** |
| * 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 */ |