Files
2ine-tms34010/native/os2types.h
T
Ryan C. Gordon 6821de5ed7 Automate handling of support code for OS/2 binaries.
Now a perl script parses our headers and generates glue code, export tables,
etc. This automates all the macro nonsense and bridge code, and separates
out all the stuff you need for binary compat with OS/2, so you can remove it
all from the build if you want to just build native libraries that supply
the OS/2 API to native apps (like Winelib vs Wine).

This makes upkeep details less nasty, and easier to build native binaries
when implementing and improving APIs, so you can debug directly without
a lot of drama.
2018-02-27 03:25:21 -05:00

107 lines
2.8 KiB
C

/**
* 2ine; an OS/2 emulator for Linux.
*
* Please see the file LICENSE.txt in the source's root directory.
*
* This file written by Ryan C. Gordon.
*/
#ifndef _INCL_OS2TYPES_H_
#define _INCL_OS2TYPES_H_
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
// this doesn't do anything when compiling, but a script parses these in
// the headers to generate some code.
#define OS2APIINFO(retfcount)
#ifndef APIENTRY
#define APIENTRY
#endif
#ifndef OS2EXPORT
#define OS2EXPORT __attribute__((visibility("default")))
#endif
#ifndef OS2API
#define OS2API APIENTRY
#endif
// Note that we never export actual 16-bit APIs from these headers, even if
// we have them marked as OS2API16. This is just for documentation's sake at
// the moment. If you compile against these headers and link against an
// OS2API16 function, they will be exist and operate in a linear address
// space. If you call them from an LX executable, though, the system assumes
// you're calling in from 16-bit code and exports something that cleans up
// the details behind the scenes.
// For developing against this API directly on Linux, you should assume this
// works like OS/2's PowerPC port, and the same 16-bit APIs you used on x86
// were made 32-bit clean by default for the new platform.
#ifndef OS2API16
#define OS2API16 OS2API
#endif
typedef uint32_t APIRET;
typedef uint16_t APIRET16;
typedef uint32_t APIRET32;
typedef uint32_t BOOL;
typedef void VOID;
typedef VOID *PVOID;
typedef PVOID *PPVOID;
typedef char CHAR, *PCHAR;
typedef uint8_t UCHAR, *PUCHAR;
typedef int16_t SHORT, *PSHORT;
typedef uint16_t USHORT, *PUSHORT;
typedef int32_t LONG, *PLONG;
typedef uint32_t ULONG, *PULONG;
typedef uint32_t BOOL32, *PBOOL32;
typedef int64_t LONGLONG, *PLONGLONG;
typedef uint64_t ULONGLONG, *PULONGLONG;
typedef uint8_t BYTE, *PBYTE;
// !!! FIXME: HANDLE should either be 64-bits on x86_64, or we need to
// !!! FIXME: refactor and mutex a bunch of stuff...if it has to be a 32-bit
// !!! FIXME: int, it needs to be an index into a resizable array, but at the
// !!! FIXME: native word size, these handles can just be pointers cast to ints.
// !!! FIXME: alternately: guarantee all handles are in the bottom 4 gigabytes?
typedef uint16_t SHANDLE, *PSHANDLE;
typedef uint32_t LHANDLE, *PLHANDLE;
typedef LHANDLE HANDLE, *PHANDLE;
typedef HANDLE HMODULE, *PHMODULE;
typedef HANDLE HFILE, *PHFILE;
typedef HANDLE HDIR, *PHDIR;
typedef HANDLE HEV, *PHEV;
typedef HANDLE HMTX, *PHMTX;
typedef HANDLE HQUEUE, *PHQUEUE;
typedef HANDLE HPS, *PHPS;
typedef HANDLE PID, *PPID;
typedef HANDLE TID, *PTID;
typedef SHANDLE HVIO, *PHVIO;
typedef SHANDLE HKBD, *PHKBD;
typedef PCHAR PSZ;
typedef PCHAR PCH;
typedef int (APIENTRY *PFN)(void);
typedef ULONG ERRORID;
#define NULLHANDLE 0
#define TRUE 1
#define FALSE 0
#ifdef __cplusplus
}
#endif
#endif
// end of os2types.h ...