summaryrefslogtreecommitdiffstats
path: root/private/crt32/h/os2dll.h
diff options
context:
space:
mode:
Diffstat (limited to 'private/crt32/h/os2dll.h')
-rw-r--r--private/crt32/h/os2dll.h260
1 files changed, 260 insertions, 0 deletions
diff --git a/private/crt32/h/os2dll.h b/private/crt32/h/os2dll.h
new file mode 100644
index 000000000..f18229052
--- /dev/null
+++ b/private/crt32/h/os2dll.h
@@ -0,0 +1,260 @@
+/***
+*os2dll.h - DLL/Multi-thread include
+*
+* Copyright (c) 1987-1993, Microsoft Corporation. All rights reserved.
+*
+*Purpose:
+*
+*Revision History:
+* 10-27-87 JCR Module created.
+* 11-13-87 SKS Added _HEAP_LOCK
+* 12-15-87 JCR Added _EXIT_LOCK
+* 01-07-88 BCM Added _SIGNAL_LOCK; upped MAXTHREADID from 16 to 32
+* 02-01-88 JCR Added _dll_mlock/_dll_munlock macros
+* 05-02-88 JCR Added _BHEAP_LOCK
+* 06-17-88 JCR Corrected prototypes for special mthread debug routines
+* 08-15-88 JCR _check_lock now returns int, not void
+* 08-22-88 GJF Modified to also work for the 386 (small model only)
+* 06-05-89 JCR 386 mthread support
+* 06-09-89 JCR 386: Added values to _tiddata struc (for _beginthread)
+* 07-13-89 JCR 386: Added _LOCKTAB_LOCK
+* 08-17-89 GJF Cleanup, now specific to OS/2 2.0 (i.e., 386 flat model)
+* 10-30-89 GJF Fixed copyright
+* 01-02-90 JCR Moved a bunch of definitions from os2dll.inc
+* 04-06-90 GJF Added _INC_OS2DLL stuff and #include <cruntime.h>. Made
+* all function _CALLTYPE2 (for now).
+* 04-10-90 GJF Added prototypes for _[un]lockexit().
+* 08-16-90 SBM Made _terrno and _tdoserrno int, not unsigned
+* 09-14-90 GJF Added _pxcptacttab, _pxcptinfoptr and _fpecode fields
+* to _tiddata struct.
+* 10-09-90 GJF Thread ids are of type unsigned long.
+* 12-06-90 SRW Added _OSFHND_LOCK
+* 06-04-91 GJF Win32 version of multi-thread types and prototypes.
+* 08-15-91 GJF Made _tdoserrno an unsigned long for Win32.
+* 08-20-91 JCR C++ and ANSI naming
+* 09-29-91 GJF Conditionally added prototypes for _getptd_lk
+* and _getptd1_lk for Win32 under DEBUG.
+* 10-03-91 JCR Added _cvtbuf to _tiddata structure
+* 02-17-92 GJF For Win32, replaced _NFILE_ with _NHANDLE_ and
+* _NSTREAM_.
+* 03-06-92 GJF For Win32, made _[un]mlock_[fh|stream]() macros
+* directly call _[un]lock().
+* 03-17-92 GJF Dropped _namebuf field from _tiddata structure for
+* Win32.
+* 08-05-92 GJF Function calling type and variable type macros.
+* 12-03-91 ETC Added _wtoken to _tiddata, added intl LOCK's;
+* added definition of wchar_t (needed for _wtoken).
+* 08-14-92 KRS Port ETC's _wtoken change from other tree.
+* 08-21-92 GJF Merged 08-05-92 and 08-14-92 versions.
+* 12-03-92 KRS Added _mtoken field for MTHREAD _mbstok().
+* 01-21-93 GJF Removed support for C6-386's _cdecl.
+* 02-25-93 GJF Purged Cruiser support and many outdated definitions
+* and declarations.
+* 12-14-93 SKS Add _freeptd(), which frees per-thread CRT data
+*
+****/
+
+#ifndef _INC_OS2DLL
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <cruntime.h>
+
+/*
+ * Conditional macro definition for function calling type and variable type
+ * qualifiers.
+ */
+#if ( (_MSC_VER >= 800) && (_M_IX86 >= 300) )
+
+/*
+ * Definitions for MS C8-32 (386/486) compiler
+ */
+#define _CRTAPI1 __cdecl
+#define _CRTAPI2 __cdecl
+
+#else
+
+/*
+ * Other compilers (e.g., MIPS)
+ */
+#define _CRTAPI1
+#define _CRTAPI2
+
+#endif
+
+
+/*
+ * Define the number of supported handles and streams. The definitions
+ * here must exactly match those in internal.h (for _NHANDLE_) and stdio.h
+ * (for _NSTREAM_).
+ */
+#ifdef MTHREAD
+#define _NHANDLE_ 256
+#define _NSTREAM_ 40
+#else
+#define _NHANDLE_ 64
+#define _NSTREAM_ 20
+#endif
+
+
+/* Lock symbols */
+
+/* ---- do not change lock #1 without changing emulator ---- */
+#define _SIGNAL_LOCK 1 /* lock for signal() & emulator SignalAddress */
+ /* emulator uses \math\include\os2dll.inc */
+
+#define _IOB_SCAN_LOCK 2 /* _iob[] table lock */
+#define _TMPNAM_LOCK 3 /* lock global tempnam variables */
+#define _INPUT_LOCK 4 /* lock for _input() routine */
+#define _OUTPUT_LOCK 5 /* lock for _output() routine */
+#define _CSCANF_LOCK 6 /* lock for _cscanf() routine */
+#define _CPRINTF_LOCK 7 /* lock for _cprintf() routine */
+#define _CONIO_LOCK 8 /* lock for conio routines */
+#define _HEAP_LOCK 9 /* lock for heap allocator routines */
+#define _BHEAP_LOCK 10 /* lock for based heap routines */
+#define _TIME_LOCK 11 /* lock for time functions */
+#define _ENV_LOCK 12 /* lock for environment variables */
+#define _EXIT_LOCK1 13 /* lock #1 for exit code */
+#define _EXIT_LOCK2 14 /* lock #2 for exit code */
+#define _THREADDATA_LOCK 15 /* lock for thread data table */
+#define _POPEN_LOCK 16 /* lock for _popen/_pclose database */
+#define _LOCKTAB_LOCK 17 /* lock to protect semaphore lock table */
+#define _OSFHND_LOCK 18 /* lock to protect _osfhnd array */
+#define _SETLOCALE_LOCK 19 /* lock for locale handles, etc. */
+#define _LC_COLLATE_LOCK 20 /* lock for LC_COLLATE locale */
+#define _LC_CTYPE_LOCK 21 /* lock for LC_CTYPE locale */
+#define _LC_MONETARY_LOCK 22 /* lock for LC_MONETARY locale */
+#define _LC_NUMERIC_LOCK 23 /* lock for LC_NUMERIC locale */
+#define _LC_TIME_LOCK 24 /* lock for LC_TIME locale */
+
+#define _STREAM_LOCKS 25 /* Table of stream locks */
+
+#ifdef _WIN32_
+#define _LAST_STREAM_LOCK (_STREAM_LOCKS+_NSTREAM_-1) /* Last stream lock */
+#else
+#define _LAST_STREAM_LOCK (_STREAM_LOCKS+_NFILE_-1) /* Last stream lock */
+#endif
+
+#define _FH_LOCKS (_LAST_STREAM_LOCK+1) /* Table of fh locks */
+
+#ifdef _WIN32_
+#define _LAST_FH_LOCK (_FH_LOCKS+_NHANDLE_-1) /* Last fh lock */
+#else
+#define _LAST_FH_LOCK (_FH_LOCKS+_NFILE_-1) /* Last fh lock */
+#endif
+
+#define _TOTAL_LOCKS (_LAST_FH_LOCK+1) /* Total number of locks */
+
+#define _LOCK_BIT_INTS (_TOTAL_LOCKS/(sizeof(unsigned)*8))+1 /* # of ints to hold lock bits */
+
+
+/* Multi-thread macros and prototypes */
+
+#ifdef MTHREAD
+
+
+/* need wchar_t for _wtoken field in _tiddata */
+#ifndef _WCHAR_T_DEFINED
+typedef unsigned short wchar_t;
+#define _WCHAR_T_DEFINED
+#endif
+
+
+extern unsigned long _CRTAPI1 __threadid(void);
+#define _threadid (__threadid())
+extern unsigned long _CRTAPI1 __threadhandle(void);
+#define _threadhandle (__threadhandle())
+
+
+/* Structure for each thread's data */
+
+struct _tiddata {
+ unsigned long _tid; /* thread ID */
+ unsigned long _thandle; /* thread handle */
+
+ int _terrno; /* errno value */
+ unsigned long _tdoserrno; /* _doserrno value */
+ unsigned int _fpds; /* Floating Point data segment */
+ unsigned long _holdrand; /* rand() seed value */
+ char * _token; /* ptr to strtok() token */
+ wchar_t * _wtoken; /* ptr to wcstok() token */
+#ifdef _MBCS
+ unsigned char * _mtoken; /* ptr to _mbstok() token */
+#endif
+
+ /* following pointers get malloc'd at runtime */
+ char * _errmsg; /* ptr to strerror()/_strerror() buff */
+ char * _namebuf0; /* ptr to tmpnam() buffer */
+ char * _namebuf1; /* ptr to tmpfile() buffer */
+ char * _asctimebuf; /* ptr to asctime() buffer */
+ void * _gmtimebuf; /* ptr to gmtime() structure */
+ char * _cvtbuf; /* ptr to ecvt()/fcvt buffer */
+
+ /* following fields are needed by _beginthread code */
+ void * _initaddr; /* initial user thread address */
+ void * _initarg; /* initial user thread argument */
+
+ /* following three fields are needed to support signal handling and
+ * runtime errors */
+ void * _pxcptacttab; /* ptr to exception-action table */
+ void * _tpxcptinfoptrs; /* ptr to exception info pointers */
+ int _tfpecode; /* float point exception code */
+ };
+
+typedef struct _tiddata * _ptiddata;
+
+/*
+ * Declaration of TLS index used in storing pointers to per-thread data
+ * structures.
+ */
+extern unsigned long __tlsindex;
+
+
+/* macros */
+
+#define _lock_fh(fh) _lock(fh+_FH_LOCKS)
+#define _lock_str(s) _lock(s+_STREAM_LOCKS)
+#define _lock_fh_check(fh,flag) if (flag) _lock_fh(fh)
+#define _mlock(l) _lock(l)
+#define _munlock(l) _unlock(l)
+#define _unlock_fh(fh) _unlock(fh+_FH_LOCKS)
+#define _unlock_str(s) _unlock(s+_STREAM_LOCKS)
+#define _unlock_fh_check(fh,flag) if (flag) _unlock_fh(fh)
+
+
+/* multi-thread routines */
+
+void _CRTAPI1 _lock(int);
+void _CRTAPI1 _lockexit(void);
+void _CRTAPI1 _unlock(int);
+void _CRTAPI1 _unlockexit(void);
+
+_ptiddata _CRTAPI1 _getptd(void); /* return address of per-thread CRT data */
+void _CRTAPI1 _freeptd(_ptiddata); /* free up the per-thread CRT data blocks */
+
+
+#else /* not MTHREAD */
+
+
+/* macros */
+#define _lock_fh(fh)
+#define _lock_str(s)
+#define _lock_fh_check(fh,flag)
+#define _mlock(l)
+#define _munlock(l)
+#define _unlock_fh(fh)
+#define _unlock_str(s)
+#define _unlock_fh_check(fh,flag)
+
+
+#endif /* MTHREAD */
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#define _INC_OS2DLL
+#endif /* _INC_OS2DLL */