source: trunk/src/crtdll/crtinc.h@ 1569

Last change on this file since 1569 was 1220, checked in by sandervl, 26 years ago

More updates

File size: 13.9 KB
Line 
1/* $Id: crtinc.h,v 1.7 1999-10-09 13:32:26 sandervl Exp $ */
2
3/* Definitions for the CRTDLL library (CRTDLL.DLL)
4 *
5 * Copyright 1999 Jens Wiessner
6 */
7
8#define MB_LEN_MAX 2
9#ifndef MAX_PATHNAME_LEN
10#define MAX_PATHNAME_LEN 260
11#endif
12
13// Errno Defs
14#define EPERM 1 /* Operation not permitted */
15#define ENOFILE 2 /* No such file or directory */
16#define ENOENT 2
17#define ESRCH 3 /* No such process */
18#define EINTR 4 /* Interrupted function call */
19#define EIO 5 /* Input/output error */
20#define ENXIO 6 /* No such device or address */
21#define E2BIG 7 /* Arg list too long */
22#define ENOEXEC 8 /* Exec format error */
23#define EBADF 9 /* Bad file descriptor */
24#define ECHILD 10 /* No child processes */
25#define EAGAIN 11 /* Resource temporarily unavailable */
26#define ENOMEM 12 /* Not enough space */
27#define EACCES 13 /* Permission denied */
28#define EFAULT 14 /* Bad address */
29/* 15 - Unknown Error */
30#define EBUSY 16 /* strerror reports "Resource device" */
31#define EEXIST 17 /* File exists */
32#define EXDEV 18 /* Improper link (cross-device link?) */
33#define ENODEV 19 /* No such device */
34#define ENOTDIR 20 /* Not a directory */
35#define EISDIR 21 /* Is a directory */
36#define EINVAL 22 /* Invalid argument */
37#define ENFILE 23 /* Too many open files in system */
38#define EMFILE 24 /* Too many open files */
39#define ENOTTY 25 /* Inappropriate I/O control operation */
40/* 26 - Unknown Error */
41#define EFBIG 27 /* File too large */
42#define ENOSPC 28 /* No space left on device */
43#define ESPIPE 29 /* Invalid seek (seek on a pipe?) */
44#define EROFS 30 /* Read-only file system */
45#define EMLINK 31 /* Too many links */
46#define EPIPE 32 /* Broken pipe */
47#define EDOM 33 /* Domain error (math functions) */
48#define ERANGE 34 /* Result too large (possibly too small) */
49/* 35 - Unknown Error */
50#define EDEADLOCK 36 /* Resource deadlock avoided (non-Cyg) */
51#define EDEADLK 36
52/* 37 - Unknown Error */
53#define ENAMETOOLONG 38 /* Filename too long (91 in Cyg?) */
54#define ENOLCK 39 /* No locks available (46 in Cyg?) */
55#define ENOSYS 40 /* Function not implemented (88 in Cyg?) */
56#define ENOTEMPTY 41 /* Directory not empty (90 in Cyg?) */
57#define EILSEQ 42 /* Illegal byte sequence */
58
59
60// MBC Defs
61#define _MBC_SINGLE 0
62#define _MBC_LEAD 1
63#define _MBC_TRAIL 2
64#define _MBC_ILLEGAL -1
65
66#define _MB_CP_SBCS 0
67#define _MB_CP_OEM -2
68#define _MB_CP_ANSI -3
69#define _MB_CP_LOCALE -4
70
71#define _KNJ_M ((char)0x01) /* Non-punctuation of Kana-set */
72#define _KNJ_P ((char)0x02) /* Punctuation of Kana-set */
73#define _KNJ_1 ((char)0x04) /* Legal 1st byte of double byte stream */
74#define _KNJ_2 ((char)0x08) /* Legal 2nd btye of double byte stream */
75
76#define ___ 0
77#define _1_ _KNJ_1 /* Legal 1st byte of double byte code */
78#define __2 _KNJ_2 /* Legal 2nd byte of double byte code */
79#define _M_ _KNJ_M /* Non-puntuation in Kana-set */
80#define _P_ _KNJ_P /* Punctuation of Kana-set */
81#define _12 (_1_|__2)
82#define _M2 (_M_|__2)
83#define _P2 (_P_|__2)
84
85#define CASE_DIFF (0x8281 - 0x8260)
86
87
88// fpclass Defs
89#define FP_SNAN 0x0001 // signaling NaN
90#define FP_QNAN 0x0002 // quiet NaN
91#define FP_NINF 0x0004 // negative infinity
92#define FP_PINF 0x0200 // positive infinity
93#define FP_NDENORM 0x0008 // negative denormalized non-zero
94#define FP_PDENORM 0x0010 // positive denormalized non-zero
95#define FP_NZERO 0x0020 // negative zero
96#define FP_PZERO 0x0040 // positive zero
97#define FP_NNORM 0x0080 // negative normalized non-zero
98#define FP_PNORM 0x0100 // positive normalized non-zero
99
100
101// Defs
102#define DOSFS_GetFullName(a,b,c) strcpy(c,a)
103
104#if defined(__GNUC__) && defined(__i386__)
105#define USING_REAL_FPU
106#define DO_FPU(x,y) __asm__ __volatile__( x " %0;fwait" : "=m" (y) : )
107#define POP_FPU(x) DO_FPU("fstpl",x)
108#endif
109
110typedef struct
111{
112 HANDLE handle;
113 int pad[7];
114} CRTDLL_FILE, *PCRTDLL_FILE;
115
116
117/* Definition of a full DOS file name */
118typedef struct
119{
120 char long_name[MAX_PATHNAME_LEN]; /* Long pathname in Unix format */
121 char short_name[MAX_PATHNAME_LEN]; /* Short pathname in DOS 8.3 format */
122 int drive;
123} DOS_FULL_NAME;
124
125
126#ifndef _DISKFREE_T_DEFINED
127#define _DISKFREE_T_DEFINED
128#define _DISKFREE_T_DEFINED_
129struct _diskfree_t {
130 unsigned total_clusters;
131 unsigned avail_clusters;
132 unsigned sectors_per_cluster;
133 unsigned bytes_per_sector;
134};
135#define diskfree_t _diskfree_t
136#endif
137
138
139typedef VOID (*new_handler_type)(VOID);
140typedef void (*_INITTERMFUN)();
141
142
143CRTDLL_FILE CRTDLL_iob[3];
144
145static CRTDLL_FILE * const CRTDLL_stdin = &CRTDLL_iob[0];
146static CRTDLL_FILE * const CRTDLL_stdout = &CRTDLL_iob[1];
147static CRTDLL_FILE * const CRTDLL_stderr = &CRTDLL_iob[2];
148static new_handler_type new_handler;
149
150// CRTDLL Exports
151double *CRTDLL_HUGE_dll; /* CRTDLL.20 */
152UINT CRTDLL_argc_dll; /* CRTDLL.23 */
153LPSTR *CRTDLL_argv_dll; /* CRTDLL.24 */
154int CRTDLL_mb_cur_max_dll; /* CRTDLL.31 */
155LPSTR CRTDLL_acmdln_dll; /* CRTDLL.38 */
156UINT CRTDLL_basemajor_dll; /* CRTDLL.42 */
157UINT CRTDLL_baseminor_dll; /* CRTDLL.43 */
158UINT CRTDLL_baseversion_dll; /* CRTDLL.44 */
159UINT CRTDLL_commode_dll; /* CRTDLL.59 */
160UCHAR *CRTDLL_cpumode_dll; /* CRTDLL.64 */
161USHORT *CRTDLL_ctype; /* CRTDLL.68 */
162UINT CRTDLL_daylight_dll; /* CRTDLL.70 */
163LPSTR CRTDLL_environ_dll; /* CRTDLL.75 */
164LPSTR CRTDLL_fileinfo_dll; /* CRTDLL.95 */
165UINT CRTDLL_fmode_dll; /* CRTDLL.104 */
166LPSTR CRTDLL_mbctype; /* CRTDLL.193 */
167UINT CRTDLL_osmajor_dll; /* CRTDLL.239 */
168UINT CRTDLL_osminor_dll; /* CRTDLL.240 */
169UINT CRTDLL_osmode_dll; /* CRTDLL.241 */
170UINT CRTDLL_osver_dll; /* CRTDLL.242 */
171UINT CRTDLL_osversion_dll; /* CRTDLL.243 */
172USHORT CRTDLL_pctype_dll[] = {0,0}; /* CRTDLL.245 */
173LPSTR CRTDLL_pgmptr_dll; /* CRTDLL.246 */
174USHORT *CRTDLL_pwctype_dll; /* CRTDLL.253 */
175// UINT CRTDLL_sys_errlist; /* CRTDLL.300 */
176// UINT CRTDLL_sys_nerr_dll; /* CRTDLL.301 */
177UINT CRTDLL_timezone_dll; /* CRTDLL.304 */
178LPSTR CRTDLL_tzname; /* CRTDLL.307 */
179UINT CRTDLL_winmajor_dll; /* CRTDLL.326 */
180UINT CRTDLL_winminor_dll; /* CRTDLL.327 */
181UINT CRTDLL_winver_dll; /* CRTDLL.328 */
182
183
184// CRTDLL Functions
185CRTDLL_FILE * CDECL CRTDLL__fdopen(INT handle, LPCSTR mode);
186INT CDECL NTDLL__wcsicmp( LPCWSTR str1, LPCWSTR str2 );
187INT CDECL CRTDLL_vfprintf( CRTDLL_FILE *file, LPSTR format, va_list args );
188VOID * CDECL CRTDLL_malloc(DWORD size);
189long CDECL CRTDLL__lseek(int handle,long offset,int origin);
190long CDECL CRTDLL__filelength( int i );
191VOID CDECL CRTDLL__exit(DWORD ret);
192INT CDECL CRTDLL_isalnum(int i);
193int CDECL CRTDLL_isgraph(int i);
194int CDECL CRTDLL__access(const char *path,int mode);
195int CDECL CRTDLL__getch(void);
196size_t CDECL CRTDLL_fread( void *ptr, size_t size, size_t n, FILE *fp );
197int CDECL CRTDLL__mbbtype( unsigned char c, int type );
198unsigned char * CDECL CRTDLL__mbscpy( unsigned char *s1, const unsigned char *s2 );
199LPSTR CDECL CRTDLL__mbsinc( LPCSTR str );
200INT CDECL CRTDLL__mbslen( LPCSTR str );
201int CDECL CRTDLL__ismbbkalnum( unsigned int c );
202int CDECL CRTDLL__ismbbkana( unsigned int c );
203int CDECL CRTDLL__ismbbalpha( unsigned int c );
204int CDECL CRTDLL__ismbbtrail( unsigned int c );
205int CDECL CRTDLL__ismbblead( unsigned int c );
206char * CDECL CRTDLL_getenv( const char *name );
207
208
209//
210// Definitions for internal functions
211//
212int __set_errno (int error);
213unsigned int _mbbtoupper(unsigned int c);
214unsigned int _mbbtolower(unsigned int c);
215size_t _mbclen2(const unsigned int s);
216int _isinf(double __x);
217
218
219//
220// MBC Includes
221//
222static unsigned short han_to_zen_ascii_table[0x5f] = {
223 0x8140, 0x8149, 0x8168, 0x8194, 0x8190, 0x8193, 0x8195, 0x8166,
224 0x8169, 0x816a, 0x8196, 0x817b, 0x8143, 0x817c, 0x8144, 0x815e,
225 0x824f, 0x8250, 0x8251, 0x8252, 0x8253, 0x8254, 0x8255, 0x8256,
226 0x8257, 0x8258, 0x8146, 0x8147, 0x8183, 0x8181, 0x8184, 0x8148,
227 0x8197, 0x8260, 0x8261, 0x8262, 0x8263, 0x8264, 0x8265, 0x8266,
228 0x8267, 0x8268, 0x8269, 0x826a, 0x826b, 0x826c, 0x826d, 0x826e,
229 0x826f, 0x8270, 0x8271, 0x8272, 0x8273, 0x8274, 0x8275, 0x8276,
230 0x8277, 0x8278, 0x8279, 0x816d, 0x818f, 0x816e, 0x814f, 0x8151,
231 0x8165, 0x8281, 0x8282, 0x8283, 0x8284, 0x8285, 0x8286, 0x8287,
232 0x8288, 0x8289, 0x828a, 0x828b, 0x828c, 0x828d, 0x828e, 0x828f,
233 0x8290, 0x8291, 0x8292, 0x8293, 0x8294, 0x8295, 0x8296, 0x8297,
234 0x8298, 0x8299, 0x829a, 0x816f, 0x8162, 0x8170, 0x8150
235};
236static unsigned short han_to_zen_kana_table[0x40] = {
237 0x8140, 0x8142, 0x8175, 0x8176, 0x8141, 0x8145, 0x8392, 0x8340,
238 0x8342, 0x8344, 0x8346, 0x8348, 0x8383, 0x8385, 0x8387, 0x8362,
239 0x815b, 0x8341, 0x8343, 0x8345, 0x8347, 0x8349, 0x834a, 0x834c,
240 0x834e, 0x8350, 0x8352, 0x8354, 0x8356, 0x8358, 0x835a, 0x835c,
241 0x835e, 0x8360, 0x8363, 0x8365, 0x8367, 0x8369, 0x836a, 0x836b,
242 0x836c, 0x836d, 0x836e, 0x8371, 0x8374, 0x8377, 0x837a, 0x837d,
243 0x837e, 0x8380, 0x8381, 0x8382, 0x8384, 0x8386, 0x8388, 0x8389,
244 0x838a, 0x838b, 0x838c, 0x838d, 0x838f, 0x8393, 0x814a, 0x814b
245};
246static unsigned char zen_to_han_kana_table[0x8396-0x8340+1] = {
247 0xa7, 0xb1, 0xa8, 0xb2, 0xa9, 0xb3, 0xaa, 0xb4,
248 0xab, 0xb5, 0xb6, 0xb6, 0xb7, 0xb7, 0xb8, 0xb8,
249 0xb9, 0xb9, 0xba, 0xba, 0xbb, 0xbb, 0xbc, 0xbc,
250 0xbd, 0xbd, 0xbe, 0xbe, 0xbf, 0xbf, 0xc0, 0xc0,
251 0xc1, 0xc1, 0xaf, 0xc2, 0xc2, 0xc3, 0xc3, 0xc4,
252 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xca,
253 0xca, 0xcb, 0xcb, 0xcb, 0xcc, 0xcc, 0xcc, 0xcd,
254 0xcd, 0xcd, 0xce, 0xce, 0xce, 0xcf, 0xd0, 0,
255 0xd1, 0xd2, 0xd3, 0xac, 0xd4, 0xad, 0xd5, 0xae,
256 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdc,
257 0xb2, 0xb4, 0xa6, 0xdd, 0xb3, 0xb6, 0xb9
258};
259#define ZTOH_SYMBOLS 9
260static unsigned short zen_to_han_symbol_table_1[ZTOH_SYMBOLS] = {
261 0x8142, 0x8175, 0x8176, 0x8141, 0x8145, 0x815b, 0x814a, 0x814b
262};
263static unsigned char zen_to_han_symbol_table_2[ZTOH_SYMBOLS] = {
264 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xb0, 0xde, 0xdf
265};
266#define ISKANA(c) ((c) >= 0xa1 && (c) <= 0xdf)
267#define JISHIRA(c) ((c) >= 0x829f && (c) <= 0x82f1)
268#define JISKANA(c) ((c) >= 0x8340 && (c) <= 0x8396 && (c) != 0x837f)
269#define JTOKANA(c) ((c) <= 0x82dd ? (c) + 0xa1 : (c) + 0xa2)
270
271char _jctype[257] = {
272/*-1*/ ___,
273/*0x*/ ___,___,___,___,___,___,___,___,___,___,___,___,___,___,___,___,
274/*1x*/ ___,___,___,___,___,___,___,___,___,___,___,___,___,___,___,___,
275/*2x*/ ___,___,___,___,___,___,___,___,___,___,___,___,___,___,___,___,
276/*3x*/ ___,___,___,___,___,___,___,___,___,___,___,___,___,___,___,___,
277/*4x*/ __2,__2,__2,__2,__2,__2,__2,__2,__2,__2,__2,__2,__2,__2,__2,__2,
278/*5x*/ __2,__2,__2,__2,__2,__2,__2,__2,__2,__2,__2,__2,__2,__2,__2,__2,
279/*6x*/ __2,__2,__2,__2,__2,__2,__2,__2,__2,__2,__2,__2,__2,__2,__2,__2,
280/*7x*/ __2,__2,__2,__2,__2,__2,__2,__2,__2,__2,__2,__2,__2,__2,__2,___,
281/*8x*/ __2,_12,_12,_12,_12,_12,_12,_12,_12,_12,_12,_12,_12,_12,_12,_12,
282/*9x*/ _12,_12,_12,_12,_12,_12,_12,_12,_12,_12,_12,_12,_12,_12,_12,_12,
283/*Ax*/ __2,_P2,_P2,_P2,_P2,_P2,_M2,_M2,_M2,_M2,_M2,_M2,_M2,_M2,_M2,_M2,
284/*Bx*/ _M2,_M2,_M2,_M2,_M2,_M2,_M2,_M2,_M2,_M2,_M2,_M2,_M2,_M2,_M2,_M2,
285/*Cx*/ _M2,_M2,_M2,_M2,_M2,_M2,_M2,_M2,_M2,_M2,_M2,_M2,_M2,_M2,_M2,_M2,
286/*Dx*/ _M2,_M2,_M2,_M2,_M2,_M2,_M2,_M2,_M2,_M2,_M2,_M2,_M2,_M2,_M2,_M2,
287/*Ex*/ _12,_12,_12,_12,_12,_12,_12,_12,_12,_12,_12,_12,_12,_12,_12,_12,
288/*Fx*/ _12,_12,_12,_12,_12,_12,_12,_12,_12,_12,_12,_12,_12,___,___,___
289};
290
291
292// syserr / sysnerr Defs
293char __syserr00[] = "No Error";
294char __syserr01[] = "Input to function out of range (EDOM)";
295char __syserr02[] = "Output of function out of range (ERANGE)";
296char __syserr03[] = "Argument list too long (E2BIG)";
297char __syserr04[] = "Permission denied (EACCES)";
298char __syserr05[] = "Resource temporarily unavailable (EAGAIN)";
299char __syserr06[] = "Bad file descriptor (EBADF)";
300char __syserr07[] = "Resource busy (EBUSY)";
301char __syserr08[] = "No child processes (ECHILD)";
302char __syserr09[] = "Resource deadlock avoided (EDEADLK)";
303char __syserr10[] = "File exists (EEXIST)";
304char __syserr11[] = "Bad address (EFAULT)";
305char __syserr12[] = "File too large (EFBIG)";
306char __syserr13[] = "Interrupted system call (EINTR)";
307char __syserr14[] = "Invalid argument (EINVAL)";
308char __syserr15[] = "Input or output error (EIO)";
309char __syserr16[] = "Is a directory (EISDIR)";
310char __syserr17[] = "Too many open files (EMFILE)";
311char __syserr18[] = "Too many links (EMLINK)";
312char __syserr19[] = "File name too long (ENAMETOOLONG)";
313char __syserr20[] = "Too many open files in system (ENFILE)";
314char __syserr21[] = "No such device (ENODEV)";
315char __syserr22[] = "No such file or directory (ENOENT)";
316char __syserr23[] = "Unable to execute file (ENOEXEC)";
317char __syserr24[] = "No locks available (ENOLCK)";
318char __syserr25[] = "Not enough memory (ENOMEM)";
319char __syserr26[] = "No space left on drive (ENOSPC)";
320char __syserr27[] = "Function not implemented (ENOSYS)";
321char __syserr28[] = "Not a directory (ENOTDIR)";
322char __syserr29[] = "Directory not empty (ENOTEMPTY)";
323char __syserr30[] = "Inappropriate I/O control operation (ENOTTY)";
324char __syserr31[] = "No such device or address (ENXIO)";
325char __syserr32[] = "Operation not permitted (EPERM)";
326char __syserr33[] = "Broken pipe (EPIPE)";
327char __syserr34[] = "Read-only file system (EROFS)";
328char __syserr35[] = "Invalid seek (ESPIPE)";
329char __syserr36[] = "No such process (ESRCH)";
330char __syserr37[] = "Improper link (EXDEV)";
331char __syserr38[] = "No more files (ENMFILE)";
332
333const char *CRTDLL_sys_errlist[] = {
334__syserr00, __syserr01, __syserr02, __syserr03, __syserr04,
335__syserr05, __syserr06, __syserr07, __syserr08, __syserr09,
336__syserr10, __syserr11, __syserr12, __syserr13, __syserr14,
337__syserr15, __syserr16, __syserr17, __syserr18, __syserr19,
338__syserr20, __syserr21, __syserr22, __syserr23, __syserr24,
339__syserr25, __syserr26, __syserr27, __syserr28, __syserr29,
340__syserr30, __syserr31, __syserr32, __syserr33, __syserr34,
341__syserr35, __syserr36, __syserr37, __syserr38
342};
343
344int __sys_nerr = sizeof(CRTDLL_sys_errlist) / sizeof(CRTDLL_sys_errlist[0]);
345
346int* CRTDLL_sys_nerr_dll = &__sys_nerr;
Note: See TracBrowser for help on using the repository browser.