blob: e5bfbcb3c3d082e0da98edf91a186b425886e943 [file] [log] [blame]
Alexandre Julliarde2abbb11995-03-19 17:39:39 +00001/*
2 * Selector definitions
3 *
4 * Copyright 1995 Alexandre Julliard
Alexandre Julliard0799c1a2002-03-09 23:29:33 +00005 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Alexandre Julliarde2abbb11995-03-19 17:39:39 +000019 */
20
Alexandre Julliard234bc241994-12-10 13:02:28 +000021#ifndef __WINE_SELECTORS_H
22#define __WINE_SELECTORS_H
23
Jim Aston2e1cafa1999-03-14 16:35:05 +000024#include "windef.h"
Alexandre Julliarddb0747d2000-12-13 20:23:41 +000025#include "wine/library.h"
Alexandre Julliard234bc241994-12-10 13:02:28 +000026
Alexandre Julliard914406f2000-11-14 01:54:49 +000027extern WORD SELECTOR_AllocBlock( const void *base, DWORD size, unsigned char flags );
Alexandre Julliard284c9b91999-04-11 15:07:13 +000028extern WORD SELECTOR_ReallocBlock( WORD sel, const void *base, DWORD size );
Alexandre Julliard914406f2000-11-14 01:54:49 +000029extern void SELECTOR_FreeBlock( WORD sel );
Alexandre Julliard234bc241994-12-10 13:02:28 +000030
Alexandre Julliarddb0747d2000-12-13 20:23:41 +000031extern UINT W32S_offset;
Alexandre Julliarda0b2b1d1997-11-16 17:38:29 +000032
Alexandre Julliarddb0747d2000-12-13 20:23:41 +000033#define W32S_APP2WINE(addr) ((addr)? (DWORD)(addr) + W32S_offset : 0)
34#define W32S_WINE2APP(addr) ((addr)? (DWORD)(addr) - W32S_offset : 0)
35
36#define FIRST_LDT_ENTRY_TO_ALLOC 17
37
38#define IS_SELECTOR_FREE(sel) (!(wine_ldt_copy.flags[LOWORD(sel) >> 3] & WINE_LDT_FLAGS_ALLOCATED))
39
40/* Determine if sel is a system selector (i.e. not managed by Wine) */
41#define IS_SELECTOR_SYSTEM(sel) \
42 (!((sel) & 4) || ((LOWORD(sel) >> 3) < FIRST_LDT_ENTRY_TO_ALLOC))
43#define IS_SELECTOR_32BIT(sel) \
44 (IS_SELECTOR_SYSTEM(sel) || (wine_ldt_copy.flags[LOWORD(sel) >> 3] & WINE_LDT_FLAGS_32BIT))
Alexandre Julliard9ea19e51997-01-01 17:29:55 +000045
Alexandre Julliard234bc241994-12-10 13:02:28 +000046#endif /* __WINE_SELECTORS_H */