/programs/develop/open watcom/trunk/clib/crt/8087cw.c |
---|
0,0 → 1,45 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Default 80x87 control word. |
* |
****************************************************************************/ |
#include <float.h> |
/* This is the default value loaded into the 80x87 control word. |
If you want higher precision, then change PC_53 to PC_64. The |
reason we have the default set to PC_53 is generate reproducible |
floating-point results regardless of the level of optimization |
chosen for the compiler. |
This value is loaded when the 80x87 is initialized by the startup |
code, and also when _fpreset is called. |
*/ |
#pragma aux __8087cw "*"; |
/* 0x1000 | 0x0000 | 0x0200 | 0x007F */ |
unsigned short __8087cw = IC_AFFINE | RC_NEAR | PC_53 | 0x007F; |
/programs/develop/open watcom/trunk/clib/crt/87state.h |
---|
0,0 → 1,45 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: prototype for 8087 save/restore state functions and data |
* |
****************************************************************************/ |
#if defined(_M_IX86) |
typedef struct _87state { /* 80x87 save area */ |
#if defined( __386__ ) |
char data[108]; /* 32-bit save area size */ |
#else |
char data[94]; /* 16-bit save area size */ |
#endif |
} _87state; |
extern void (*__Save8087)(_87state *); |
extern void (*__Rest8087)(_87state *); |
#endif |
/programs/develop/open watcom/trunk/clib/crt/_8087386.asm |
---|
0,0 → 1,52 |
;***************************************************************************** |
;* |
;* Open Watcom Project |
;* |
;* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
;* |
;* ======================================================================== |
;* |
;* This file contains Original Code and/or Modifications of Original |
;* Code as defined in and that are subject to the Sybase Open Watcom |
;* Public License version 1.0 (the 'License'). You may not use this file |
;* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
;* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
;* provided with the Original Code and Modifications, and is also |
;* available at www.sybase.com/developer/opensource. |
;* |
;* The Original Code and all software distributed under the License are |
;* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
;* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
;* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
;* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
;* NON-INFRINGEMENT. Please see the License for the specific language |
;* governing rights and limitations under the License. |
;* |
;* ======================================================================== |
;* |
;* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE |
;* DESCRIBE IT HERE! |
;* |
;***************************************************************************** |
include mdef.inc |
modstart _8087 |
xref "C",__chk8087 |
datasegment |
public __8087 |
public __real87 |
extrn __no87 :word |
__8087 db 0 ; 0 => no 8087 and no EMU, otherwise 8087 or EMU present |
__real87 db 0 ; 0 => no real 8087 is used, otherwise real 8087 is used |
enddata |
include xinit.inc |
xinit __chk8087,INIT_PRIORITY_FPU + 3 |
endmod |
end |
/programs/develop/open watcom/trunk/clib/crt/_8087osi.c |
---|
0,0 → 1,35 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: 80x87 related globals for OSI. |
* |
****************************************************************************/ |
#include "variety.h" |
unsigned char _8087; |
unsigned char _real87; |
/programs/develop/open watcom/trunk/clib/crt/___argc.c |
---|
0,0 → 1,37 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Argument vector and count. |
* |
****************************************************************************/ |
#include "variety.h" |
#include "widechar.h" |
#include "initarg.h" |
_WCRTLINKD int __F_NAME(___Argc,___wArgc); /* argument count */ |
_WCRTLINKD CHAR_TYPE** __F_NAME(___Argv,___wArgv); /* argument vector */ |
/programs/develop/open watcom/trunk/clib/crt/_exit.c |
---|
0,0 → 1,41 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Implementation _Exit(). |
* |
****************************************************************************/ |
#include <stdlib.h> |
/* POSIX says _exit() and _Exit() "shall be functionally equivalent" */ |
_WCRTLINK void _Exit( int status ) |
/********************************/ |
{ |
_exit( status ); |
} |
/programs/develop/open watcom/trunk/clib/crt/abort.c |
---|
0,0 → 1,54 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Platform independent abort() implementation. |
* |
****************************************************************************/ |
#include "variety.h" |
#include <stdio.h> |
#include <stdlib.h> |
#include "rtdata.h" |
#include "exitwmsg.h" |
#include <signal.h> |
#include <unistd.h> |
void (*_RWD_abort)( void ) = __terminate; |
_WCRTLINK void abort( void ) |
{ |
if( _RWD_abort != __terminate ) { |
(*_RWD_abort)(); |
} |
__terminate(); /* 23-may-90 */ |
} |
void __terminate( void ) |
{ |
__fatal_runtime_error( "ABNORMAL TERMINATION\r\n", EXIT_FAILURE ); |
} |
/programs/develop/open watcom/trunk/clib/crt/argcv.c |
---|
0,0 → 1,49 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Argument vector definition and startup. |
* |
****************************************************************************/ |
#include "variety.h" |
#include "rtinit.h" |
#include "widechar.h" |
#include <stdlib.h> |
#include "initarg.h" |
int __F_NAME(_argc,_wargc); |
CHAR_TYPE** __F_NAME(_argv,_wargv); |
int __F_NAME(__argc,__wargc); |
CHAR_TYPE** __F_NAME(__argv,__wargv); |
#if defined(__386__) || defined(__AXP__) || defined(__PPC__) |
AXI( __F_NAME(__Init_Argv,__wInit_Argv), INIT_PRIORITY_RUNTIME ) |
AYI( __F_NAME(__Fini_Argv,__wFini_Argv), INIT_PRIORITY_LIBRARY ) |
#else |
AXI( __F_NAME(__Init_Argv,__wInit_Argv), 1 ) |
AYI( __F_NAME(__Fini_Argv,__wFini_Argv), 1 ) |
#endif |
/programs/develop/open watcom/trunk/clib/crt/binmode.c |
---|
0,0 → 1,43 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Special object file to force binary mode when linked in. |
* |
****************************************************************************/ |
#include "variety.h" |
#include <fcntl.h> |
#include <stdlib.h> |
#include "rtdata.h" |
#include "rtinit.h" |
static void do_it( void ) |
{ |
_RWD_fmode = O_BINARY; |
} |
AXI( do_it, INIT_PRIORITY_LIBRARY ) |
/programs/develop/open watcom/trunk/clib/crt/chk.asm |
---|
0,0 → 1,58 |
;***************************************************************************** |
;* |
;* Open Watcom Project |
;* |
;* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
;* |
;* ======================================================================== |
;* |
;* This file contains Original Code and/or Modifications of Original |
;* Code as defined in and that are subject to the Sybase Open Watcom |
;* Public License version 1.0 (the 'License'). You may not use this file |
;* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
;* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
;* provided with the Original Code and Modifications, and is also |
;* available at www.sybase.com/developer/opensource. |
;* |
;* The Original Code and all software distributed under the License are |
;* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
;* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
;* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
;* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
;* NON-INFRINGEMENT. Please see the License for the specific language |
;* governing rights and limitations under the License. |
;* |
;* ======================================================================== |
;* |
;* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE |
;* DESCRIBE IT HERE! |
;* |
;***************************************************************************** |
include mdef.inc |
include struct.inc |
xref __STK |
modstart chk |
xdefp __CHK |
xdefp __GRO |
defp __CHK |
xchg eax,4[esp] |
call __STK |
mov eax,4[esp] |
ret 4 |
endproc __CHK |
defp __GRO |
ret 4 |
endproc __GRO |
endmod |
end |
/programs/develop/open watcom/trunk/clib/crt/chk8087.c |
---|
0,0 → 1,344 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: __chk8087 and other FPU related functions. |
* |
****************************************************************************/ |
#include "variety.h" |
#include <stdlib.h> |
#include <float.h> |
#if defined( __OS2__ ) |
#endif |
#if defined( __WINDOWS__ ) |
#include <i86.h> |
#endif |
#include "rtdata.h" |
#include "exitwmsg.h" |
#include "87state.h" |
extern void __GrabFP87( void ); |
extern unsigned short __8087cw; |
#pragma aux __8087cw "*"; |
#if defined( __DOS_086__ ) |
extern unsigned char __dos87real; |
#pragma aux __dos87real "*"; |
extern unsigned short __dos87emucall; |
#pragma aux __dos87emucall "*"; |
#endif |
extern void __init_80x87( void ); |
#if defined( __DOS_086__ ) |
#pragma aux __init_80x87 "*" = \ |
".8087" \ |
"cmp __dos87real,0" \ |
"jz l1" \ |
"finit" \ |
"fldcw __8087cw" \ |
"l1: cmp __dos87emucall,0" \ |
"jz l2" \ |
"mov ax,1" \ |
"call __dos87emucall" \ |
"l2:" ; |
#else |
#pragma aux __init_80x87 "*" = \ |
".8087" \ |
"finit" \ |
"fldcw __8087cw" ; |
#endif |
/* 0 => no 8087; 2 => 8087,287; 3=>387 */ |
extern unsigned char _WCI86NEAR __x87id( void ); |
#pragma aux __x87id "*"; |
#if !defined( __UNIX__ ) && !defined( __OS2_386__ ) |
extern void __fsave( _87state * ); |
extern void __frstor( _87state * ); |
#if defined( __386__ ) |
#pragma aux __fsave = \ |
0x9b 0xdd 0x30 /* fsave [eax] ; save the 8087 state */ \ |
0x9b /* wait */ \ |
parm routine [eax]; |
#pragma aux __frstor = \ |
0xdd 0x20 /* frstor [eax] ; restore the 8087 */ \ |
0x9b /* wait ; wait */ \ |
parm routine [eax]; |
#else /* __286__ */ |
#if defined( __BIG_DATA__ ) |
#pragma aux __fsave = \ |
0x53 /* push bx */ \ |
0x1e /* push ds */ \ |
0x8e 0xda /* mov ds,dx */ \ |
0x8b 0xd8 /* mov bx,ax */ \ |
0x9b 0xdd 0x37 /* fsave [bx] */ \ |
0x90 0x9b /* fwait */ \ |
0x1f /* pop ds */ \ |
0x5b /* pop bx */ \ |
parm routine [dx ax]; |
#else |
#pragma aux __fsave = \ |
0x53 /* push bx */ \ |
0x8b 0xd8 /* mov bx,ax */ \ |
0x9b 0xdd 0x37 /* fsave [bx] */ \ |
0x90 0x9b /* fwait */ \ |
0x5b /* pop bx */ \ |
parm routine [ax]; |
#endif |
#if defined( __BIG_DATA__ ) |
#pragma aux __frstor = \ |
0x53 /* push bx */ \ |
0x1e /* push ds */ \ |
0x8e 0xda /* mov ds,dx */ \ |
0x8b 0xd8 /* mov bx,ax */ \ |
0x9b 0xdd 0x27 /* frstor [bx] */ \ |
0x90 0x9b /* fwait */ \ |
0x1f /* pop ds */ \ |
0x5b /* pop bx */ \ |
parm routine [dx ax]; |
#else |
#pragma aux __frstor = \ |
0x53 /* push bx */ \ |
0x8b 0xd8 /* mov bx,ax */ \ |
0x9b 0xdd 0x27 /* frstor [bx] */ \ |
0x90 0x9b /* fwait */ \ |
0x5b /* pop bx */ \ |
parm routine [ax]; |
#endif |
#endif |
static void __save_8087( _87state * __fs ) |
{ |
__fsave( __fs ); |
} |
static void __rest_8087( _87state * __fs ) |
{ |
__frstor( __fs ); |
} |
#endif /* !__UNIX__ && && !__OS2__ */ |
_WCRTLINK void _fpreset( void ) |
{ |
if( _RWD_8087 != 0 ) { |
__init_80x87(); |
} |
} |
void __init_8087( void ) |
{ |
#if !defined( __UNIX__ ) && !defined( __OS2_386__ ) |
if( _RWD_real87 != 0 ) |
{ /* if our emulator, don't worry */ |
_RWD_Save8087 = __save_8087; /* point to real save 8087 routine */ |
_RWD_Rest8087 = __rest_8087; /* point to real restore 8087 routine */ |
} |
#endif |
_fpreset(); |
} |
#if defined( __DOS__ ) || defined( __OS2_286__ ) |
void _WCI86FAR __default_sigfpe_handler( int fpe_sig ) |
{ |
__fatal_runtime_error( "Floating point exception\r\n", EXIT_FAILURE ); |
} |
#endif |
#if defined( __OS2__ ) |
void __chk8087( void ) |
/********************/ |
{ |
char devinfo; |
#if defined( __386__ ) |
DosDevConfig( &devinfo, DEVINFO_COPROCESSOR ); |
if( devinfo == 0 ) { |
_RWD_real87 = 0; |
} else { |
_RWD_real87 = __x87id(); |
} |
_RWD_8087 = _RWD_real87; |
#else |
if( _RWD_8087 == 0 ) { |
DosDevConfig( &devinfo, 3, 0 ); |
if( devinfo == 0 ) { |
_RWD_real87 = 0; |
} else { |
_RWD_real87 = __x87id(); |
} |
_RWD_8087 = _RWD_real87; |
} |
if( _RWD_real87 ) { |
__GrabFP87(); |
} |
if( _RWD_8087 ) { |
_RWD_FPE_handler = __default_sigfpe_handler; |
} |
#endif |
_fpreset(); |
} |
#elif defined( __QNX__ ) |
void __chk8087( void ) |
/********************/ |
{ |
extern char __87; |
extern char __r87; |
_RWD_real87 = __r87; |
_RWD_8087 = __87; |
_fpreset(); |
} |
#elif defined( __LINUX__ ) |
void __chk8087( void ) |
/********************/ |
{ |
// TODO: We really need to call Linux and determine if the machine |
// has a real FPU or not, so we can properly work with an FPU |
// emulator. |
_RWD_real87 = __x87id(); |
_RWD_8087 = _RWD_real87; |
_fpreset(); |
} |
#elif defined( __NETWARE__ ) |
extern short __87present( void ); |
#pragma aux __87present = \ |
"smsw ax ", \ |
"test ax, 4 ", \ |
"jne no_emu ", \ |
"xor ax, ax ", \ |
"no_emu: ", \ |
"mov ax, 1 " \ |
value [ ax ]; |
extern void __chk8087( void ) |
/*****************************/ |
{ |
if( _RWD_8087 == 0 ) { |
if( __87present() ) { |
_RWD_8087 = 3; /* 387 */ |
_RWD_real87 = 3; |
} |
__init_80x87(); |
} |
} |
#elif defined( __NT__ ) |
void __chk8087( void ) |
/********************/ |
{ |
_RWD_real87 = 3; //387+ ; //__x87id(); |
_RWD_8087 = _RWD_real87; |
__init_8087(); |
} |
#elif defined( __DOS__ ) |
void __chk8087( void ) |
/********************/ |
{ |
if( _RWD_8087 != 0 ) { /* if we already know we have an 80x87 */ |
#if !defined( __386__ ) |
if( __dos87real ) |
__GrabFP87(); |
#endif |
_RWD_FPE_handler = __default_sigfpe_handler; |
return; /* this prevents real87 from being set */ |
} /* when we have an emulator */ |
_RWD_real87 = __x87id(); /* if a coprocessor is present then we */ |
_RWD_8087 = _RWD_real87; /* initialize even when NO87 is defined */ |
#if !defined( __386__ ) |
__dos87real = _RWD_real87; |
#endif |
__init_8087(); /* this handles the fpi87 and NO87 case */ |
if( _RWD_no87 != 0 ) { /* if NO87 environment var is defined */ |
_RWD_8087 = 0; /* then we want to pretend that the */ |
_RWD_real87 = 0; /* coprocessor doesn't exist */ |
} |
if( _RWD_real87 ) { |
__GrabFP87(); |
} |
if( _RWD_8087 ) { |
_RWD_FPE_handler = __default_sigfpe_handler; |
} |
} |
#elif defined( __WINDOWS__ ) |
void __chk8087( void ) |
/********************/ |
{ |
if( _RWD_8087 != 0 ) /* if we already know we have an 80x87 */ |
return; /* this prevents real87 from being set */ |
/* when we have an emulator */ |
if( GetWinFlags() & WF_80x87 ) { /* if a coprocessor is present then we */ |
#if defined( __386__ ) |
extern void pascal _FloatingPoint( void ); |
_FloatingPoint(); |
#endif |
_RWD_real87 = __x87id(); /* initialize even when NO87 is defined */ |
_RWD_8087 = _RWD_real87; /* this handles the fpi87 and NO87 case */ |
__init_8087(); |
} else { |
#if defined( __386__ ) |
// check to see if emulator is loaded |
union REGS regs; |
regs.w.ax = 0xfa00; |
int86( 0x2f, ®s, ®s ); |
if( regs.w.ax == 0x0666 ) { /* check for emulator present */ |
_RWD_real87 = __x87id(); /* initialize even when NO87 is defined */ |
_RWD_8087 = _RWD_real87; /* this handles the fpi87 and NO87 case */ |
__init_8087(); |
} |
#endif |
} |
if( _RWD_no87 != 0 ) { /* if NO87 environment var is defined */ |
_RWD_8087 = 0; /* then we want to pretend that the */ |
_RWD_real87 = 0; /* coprocessor doesn't exist */ |
} |
} |
#endif |
/programs/develop/open watcom/trunk/clib/crt/cinit.c |
---|
0,0 → 1,65 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Common clib initialization code. |
* |
****************************************************************************/ |
#include "variety.h" |
#include <stdio.h> |
#include <stdlib.h> |
#include <io.h> |
#if defined(__DOS_386__) && !defined(__OSI__) |
#elif defined(__OS2__) |
#elif defined(__WINDOWS_386__) || defined(__NT__) |
#endif |
#if defined(__OS2__) |
#endif |
#if defined(__DOS_386__) && !defined(__OSI__) |
#endif |
void __CommonInit( void ) |
/**************************/ |
{ |
#if !defined(__NETWARE__) && !defined(__NT__) |
_amblksiz = 32 * 1024; /* set minimum memory block allocation */ |
#endif |
#if defined(__DOS_386__) && !defined(__OSI__) |
/* |
* If we are running under DOS/4G then we need to page lock interrupt |
* handlers (since we could be running under VMM). |
*/ |
if (!_IsPharLap() && (__DPMI_hosted() == 1)) |
{ |
DPMILockLinearRegion((long)&__GETDSStart_, |
((long)&__GETDSEnd_ - (long)&__GETDSStart_)); |
} |
#endif |
} |
/programs/develop/open watcom/trunk/clib/crt/commode.c |
---|
0,0 → 1,56 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: set commit mode initialization function |
* |
****************************************************************************/ |
#include "variety.h" |
#include "rtdata.h" |
#include "rtinit.h" |
#include "commode.h" |
/* |
* __set_commode function is actually a _WCRTLINK function. It's prototyped |
* incorrectly so that this module will work correctly with both dynamic |
* and static versions of the C library. |
* |
* The pragma is there so that this module will work with both stack and |
* register calling conventions, eliminating the need to have a separate |
* object file for each. |
* |
* Similarly, __set_commode is declared _WCI86FAR so that the same object |
* file will work in any 16-bit memory model. |
*/ |
static void do_it( void ) |
{ |
__set_commode(); |
} |
AXI( do_it, INIT_PRIORITY_LIBRARY ) |
/programs/develop/open watcom/trunk/clib/crt/commode.h |
---|
0,0 → 1,34 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: declaration for set commit mode function |
* |
****************************************************************************/ |
/* see note in commode.c */ |
_WCRTLINK extern void _WCI86FAR __set_commode( void ); |
#pragma aux __set_commode "*_"; |
/programs/develop/open watcom/trunk/clib/crt/crwd386.asm |
---|
0,0 → 1,179 |
;***************************************************************************** |
;* |
;* Open Watcom Project |
;* |
;* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
;* |
;* ======================================================================== |
;* |
;* This file contains Original Code and/or Modifications of Original |
;* Code as defined in and that are subject to the Sybase Open Watcom |
;* Public License version 1.0 (the 'License'). You may not use this file |
;* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
;* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
;* provided with the Original Code and Modifications, and is also |
;* available at www.sybase.com/developer/opensource. |
;* |
;* The Original Code and all software distributed under the License are |
;* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
;* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
;* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
;* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
;* NON-INFRINGEMENT. Please see the License for the specific language |
;* governing rights and limitations under the License. |
;* |
;* ======================================================================== |
;* |
;* Description: C runtime read/write data (386 version). |
;* |
;***************************************************************************** |
name crwdata |
.387 |
.386p |
assume nothing |
DGROUP group _DATA |
_TEXT segment byte public 'CODE' |
assume cs:_TEXT |
__null_FPE_rtn proc near |
ret |
__null_FPE_rtn endp |
_TEXT ends |
_DATA segment dword public 'DATA' |
assume DS:DGROUP |
ifndef __NETWARE__ |
_dynend dd 0 ; top of dynamic data area |
_curbrk dd 0 ; top of usable memory |
endif |
ifndef __QNX__ |
ifndef __LINUX__ |
ifndef _NETWARE_LIBC |
_LpCmdLine dd 0 ; pointer to raw command line |
_LpPgmName dd 0 ; pointer to program name (for argv[0]) |
endif |
ifdef __NT__ |
_LpDllName dd 0 ; pointer to dll name (for OS/2,WIN32) |
_LpwCmdLine dd 0 ; pointer to widechar raw command line |
_LpwPgmName dd 0 ; pointer to widechar program name (for argv[0]) |
_LpwDllName dd 0 ; pointer to widechar dll name (for OS/2,WIN32) |
endif |
ifdef __OS2__ |
_LpDllName dd 0 ; pointer to dll name (for OS/2,WIN32) |
_LpwCmdLine dd 0 ; pointer to widechar raw command line |
_LpwPgmName dd 0 ; pointer to widechar program name (for argv[0]) |
_LpwDllName dd 0 ; pointer to widechar dll name (for OS/2,WIN32) |
endif |
ifdef __DOS__ |
_psp dw 0,0 ; segment addr of program segment prefix |
__x386_stacklow label dword |
endif |
endif |
endif |
_STACKLOW dd 0 ; lowest address in stack |
_STACKTOP dd 0 ; highest address in stack |
__EFG_printf dd 0 |
__EFG_scanf dd 0 |
__ASTACKSIZ dd 0 ; alternate stack size |
__ASTACKPTR dd 0 ; alternate stack pointer |
ifndef __NETWARE__ |
_cbyte dd 0 ; used by getch, getche |
_cbyte2 dd 0 ; used by getch, getche |
_child dd 0 ; non-zero => a spawned process is running |
endif |
__no87 dw 0 ; non-zero => "NO87" environment var present |
ifndef __NETWARE__ |
ifdef __DOS__ |
_Extender db 0 ; see clib\h\extender.inc for values |
_ExtenderSubtype db 0 ; non-zero -> variant of extender |
__X32VM db 0 ; non-zero => X-32VM DOS Extender |
endif |
_Envptr dd 0 ; offset part of environment pointer |
_Envseg dw 0 ; segment containing environment strings |
ifndef __QNX__ |
ifndef __LINUX__ |
_osmajor db 0 ; major DOS version number |
_osminor db 0 ; minor DOS version number |
ifdef __NT__ |
_osbuild dw 0 ; operating system build number |
_osver dd 0 ; operating system build number |
_winmajor dd 0 ; operating system major version number |
_winminor dd 0 ; operating system minor version number |
_winver dd 0 ; operating system version number |
endif |
endif |
endif |
endif |
__FPE_handler dd __null_FPE_rtn ; FPE handler |
ifndef __QNX__ |
ifndef __LINUX__ |
ifndef __NETWARE__ |
public "C",_osmajor |
public "C",_osminor |
ifdef __NT__ |
public "C",_osbuild |
public "C",_osver |
public "C",_winmajor |
public "C",_winminor |
public "C",_winver |
public "C",__EFG_printf |
public "C",__EFG_scanf |
endif |
endif |
ifdef __DOS__ |
public "C",_psp |
public "C",_Extender |
public "C",_ExtenderSubtype |
public __X32VM |
public __x386_stacklow |
endif |
ifndef _NETWARE_LIBC |
public "C",_LpCmdLine |
public "C",_LpPgmName |
endif |
ifdef __NT__ |
public "C",_LpDllName |
public "C",_LpwCmdLine |
public "C",_LpwPgmName |
public "C",_LpwDllName |
public "C",_LpCmdLine |
public "C",_LpPgmName |
endif |
ifdef __OS2__ |
public "C",_LpDllName |
public "C",_LpwCmdLine |
public "C",_LpwPgmName |
public "C",_LpwDllName |
endif |
endif |
endif |
ifndef __NETWARE__ |
public "C",_dynend |
public "C",_curbrk |
endif |
public "C",_STACKLOW |
public "C",_STACKTOP |
public __ASTACKSIZ |
public __ASTACKPTR |
ifndef __NETWARE__ |
public "C",_cbyte |
public "C",_cbyte2 |
public "C",_child |
public "C",_Envptr |
public "C",_Envseg |
endif |
public __no87 |
public "C",__FPE_handler |
_DATA ends |
end |
/programs/develop/open watcom/trunk/clib/crt/cstrklbi.asm |
---|
0,0 → 1,70 |
name cstrklbri |
.386p |
assume nothing |
extrn __KolibriMain : near |
extrn ___begtext : near |
extrn __STACKTOP : near |
extrn __STACKLOW : near |
extrn __FiniRtns : near |
extrn _LpCmdLine : near |
extrn _LpPgmName : near |
_TEXT segment use32 dword public 'CODE' |
public _cstart_ |
public mainCRTStartup |
public __exit_ |
assume cs:_TEXT |
_cstart_ proc near |
mainCRTStartup: |
mov edx, 0x400 |
mov eax, 0xff |
out dx, al |
mov eax, esp |
sub eax, 8192 |
mov dword ptr [__STACKTOP],esp ; set stack top |
mov dword ptr [__STACKLOW],eax |
mov eax, dword ptr [ds:0x001c] |
mov ebx, dword ptr [ds:0x0020] |
mov dword ptr [_LpCmdLine], eax |
mov dword ptr [_LpPgmName], ebx |
jmp __KolibriMain |
dd ___begtext ; reference module with segment definitions |
; |
; copyright message |
; |
db "Open Watcom C/C++32 Run-Time system. " |
db "Portions Copyright (c) Sybase, Inc. 1988-2002." |
_cstart_ endp |
__exit_ proc near |
mov eax,00h ; run finalizers |
mov edx,0fh ; less than exit |
call __FiniRtns ; call finalizer routines |
mov eax, -1 |
int 0x40 |
ret |
__exit_ endp |
public _scalbn |
_scalbn proc |
fild dword ptr [esp+12] |
fld qword ptr [esp+4] |
fscale |
fstp st[1] |
ret |
_scalbn endp |
_TEXT ends |
end _cstart_ ;programm entry point |
/programs/develop/open watcom/trunk/clib/crt/cstrtwnt.asm |
---|
0,0 → 1,77 |
;***************************************************************************** |
;* |
;* Open Watcom Project |
;* |
;* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
;* |
;* ======================================================================== |
;* |
;* This file contains Original Code and/or Modifications of Original |
;* Code as defined in and that are subject to the Sybase Open Watcom |
;* Public License version 1.0 (the 'License'). You may not use this file |
;* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
;* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
;* provided with the Original Code and Modifications, and is also |
;* available at www.sybase.com/developer/opensource. |
;* |
;* The Original Code and all software distributed under the License are |
;* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
;* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
;* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
;* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
;* NON-INFRINGEMENT. Please see the License for the specific language |
;* governing rights and limitations under the License. |
;* |
;* ======================================================================== |
;* |
;* Description: C/C++ Windows NT 32-bit console startup code. |
;* |
;***************************************************************************** |
; This must be assembled using one of the following commands: |
; wasm cstrtwnt -bt=NT -ms -3r |
; wasm cstrtwnt -bt=NT -ms -3s |
; |
name cstrtwnt |
.386p |
assume nothing |
extrn __NTMain : near |
extrn ___begtext : near |
extrn __LpCmdLine : near |
extrn __LpPgmName : near |
extrn __STACKLOW : near |
extrn __STACKTOP : near |
_TEXT segment use32 word public 'CODE' |
public _cstart_ |
public mainCRTStartup |
assume cs:_TEXT |
_cstart_ proc near |
mainCRTStartup: |
mov dword ptr [__STACKTOP], esp |
lea eax, [esp-40000h] |
mov dword ptr[__STACKLOW], eax |
mov eax, dword ptr [ds:0x1c] |
mov dword ptr [__LpCmdLine], eax |
mov eax, dword ptr [ds:0x20] |
mov dword ptr [__LpPgmName], eax |
jmp __NTMain |
dd ___begtext ; reference module with segment definitions |
; |
; copyright message |
; |
db "Open Watcom C/C++32 Run-Time system. " |
db "Portions Copyright (c) Sybase, Inc. 1988-2002." |
_cstart_ endp |
_TEXT ends |
end _cstart_ |
/programs/develop/open watcom/trunk/clib/crt/cvtbuf.c |
---|
0,0 → 1,50 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: __CVTBuffer() implementation. |
* |
****************************************************************************/ |
#include "variety.h" |
#include "widechar.h" |
#include <stdlib.h> |
//#include "liballoc.h" |
#include "rtdata.h" |
#include "exitwmsg.h" |
#include "xfloat.h" |
#if defined(__SW_BM) |
#include "thread.h" |
#endif |
#if !defined(__SW_BM) |
static MAX_CHAR_TYPE cvt_buffer[ __FPCVT_BUFFERLEN + 1 ]; |
#endif |
_WCRTLINK CHAR_TYPE *__CVTBuffer( void ) |
{ |
return( (CHAR_TYPE *)_RWD_cvtbuf ); |
} |
/programs/develop/open watcom/trunk/clib/crt/errno.c |
---|
0,0 → 1,84 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: errno related functions. |
* |
****************************************************************************/ |
#include "variety.h" |
#include "rtdata.h" |
#if defined(__QNX__) |
#include <sys/magic.h> |
#include <errno.h> |
_WCRTLINK int *__get_errno_ptr( void ) |
{ |
#if defined(__386__) |
void *err_ptr; |
__getmagicvar( &err_ptr, _m_errno_ptr ); |
return( err_ptr ); |
#else |
return( (int *)&__MAGIC.Errno ); |
#endif |
} |
#elif defined(__LINUX__) |
#include "errorno.h" |
#if !defined( __SW_BM ) |
_WCRTLINKD int errno; |
#endif |
_WCRTLINK int *__get_errno_ptr( void ) |
{ |
return( &_RWD_errno ); |
} |
#else |
#include "errorno.h" |
#if !defined( __SW_BM ) |
_WCRTLINKD int errno; |
_WCRTLINKD int _doserrno; |
#endif |
_WCRTLINK int *__get_errno_ptr( void ) |
{ |
return( &_RWD_errno ); |
} |
_WCRTLINK int *__get_doserrno_ptr( void ) |
{ |
return( &_RWD_doserrno ); |
} |
#endif |
/programs/develop/open watcom/trunk/clib/crt/errnovar.c |
---|
0,0 → 1,39 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Module to initialize errno access. |
* |
****************************************************************************/ |
#include "variety.h" |
#include "rtinit.h" |
extern void __initerrno( void ); |
_WCRTLINKD unsigned errno; |
AXI( __initerrno, INIT_PRIORITY_LIBRARY ) |
/programs/develop/open watcom/trunk/clib/crt/errorno.h |
---|
0,0 → 1,60 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE |
* DESCRIBE IT HERE! |
* |
****************************************************************************/ |
#if defined(__OS2__) || defined(__NT__) |
#if defined(__SW_BM) |
#include "thread.h" |
#define _ERRNO (__THREADDATAPTR->__errnoP) |
#define _DOSERRNO (__THREADDATAPTR->__doserrnoP) |
#else |
#define _ERRNO errno |
#define _DOSERRNO _doserrno |
#endif |
#else |
// QNX errno is magically multithread aware |
// What does NETWARE do? |
#if !defined (_NETWARE_LIBC) |
#define _ERRNO errno |
#else |
extern int * ___errno(void); |
#define _ERRNO *___errno() /* get LibC errno */ |
#endif |
#ifndef __NETWARE__ |
#define _DOSERRNO _doserrno |
#endif |
#endif |
/programs/develop/open watcom/trunk/clib/crt/exit.c |
---|
0,0 → 1,84 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Implementation of exit() and associated functions. |
* |
****************************************************************************/ |
#include "variety.h" |
#include "rtdata.h" |
#include "exitwmsg.h" |
#include "initfini.h" |
#include "rtinit.h" |
#include <stdio.h> |
#include <stdlib.h> |
//#include "defwin.h" |
#include "widechar.h" |
#include "initarg.h" |
/* |
__int23_exit is used by OS/2 as a general termination routine which unhooks |
exception handlers. A better name for this variable is __sig_exit. |
__sig_exit should be the system dependent signal termination routine and |
should replace the calls to __int23_exit and __FPE_handler_exit. |
Each OS should define its own __sig_exit and do the appropriate thing (for |
example, DOS version would call __int23_exit and __FPE_handler_exit) |
*/ |
#if defined(__NT__) || defined(__WARP__) |
_WCRTLINK extern void (*__process_fini)( unsigned, unsigned ); |
#endif |
#if !defined(__UNIX__) && !defined(__WINDOWS_386__) |
static void _null_exit_rtn() {} |
void (*__FPE_handler_exit)() = _null_exit_rtn; |
#endif |
_WCRTLINK void exit( int status ) |
{ |
#if defined(__UNIX__) |
#elif defined(__WINDOWS_386__) |
#elif defined(__NT__) || defined(__WARP__) |
__FiniRtns( FINI_PRIORITY_EXIT, 255 ); |
#else |
__FiniRtns( FINI_PRIORITY_EXIT, 255 ); |
#endif |
_exit( status ); |
} |
#ifndef __NETWARE__ |
_WCRTLINK void _exit( int status ) |
{ |
__exit( status ); |
} |
#endif |
/programs/develop/open watcom/trunk/clib/crt/exitwmsg.h |
---|
0,0 → 1,85 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Fatal runtime error handlers. |
* |
****************************************************************************/ |
#ifndef _EXITWMSG_H_INCLUDED |
#define _EXITWMSG_H_INCLUDED |
#include "variety.h" |
#ifdef __cplusplus |
extern "C" { |
#endif |
#undef _EWM_PARM1 |
#undef _EWM_PARM2 |
#if defined(__386__) |
#define _EWM_PARM1 eax |
#define _EWM_PARM2 edx |
#elif defined(M_I86) |
#define _EWM_PARM1 ax dx |
#define _EWM_PARM2 bx |
#else |
#define _EWM_PARM1 |
#define _EWM_PARM2 |
#endif |
// C interface |
// - tracks normal calling convention |
// - this is the funtion that is called from ASM and from C, C++ |
// - note there is no #pragma aborts so that debugger can trace out |
_WCRTLINK extern void __exit_with_msg( char _WCI86FAR *, unsigned ); |
_WCRTLINK extern void __fatal_runtime_error( char _WCI86FAR *, unsigned ); |
// ASM interface |
// - always uses register calling convention |
// - this function is only called from the C implementation |
// of __exit_with_msg |
extern void __do_exit_with_msg( char _WCI86FAR *, unsigned ); |
#ifdef _M_IX86 |
#pragma aux __do_exit_with_msg "*__" \ |
parm caller [_EWM_PARM1] [_EWM_PARM2]; |
#endif |
#undef _EWM_PARM1 |
#undef _EWM_PARM2 |
_WCRTLINKD extern char volatile __WD_Present; |
// WVIDEO interface |
// this function should be called before __exit_with_msg() |
// to allow Watcom Debugger (nee WVIDEO) to trap runtime errors. |
// this really needs to be far!!! |
_WCRTLINK extern int __EnterWVIDEO( char _WCFAR *string ); |
#ifdef __cplusplus |
}; |
#endif |
#endif |
/programs/develop/open watcom/trunk/clib/crt/exitwmsg.inc |
---|
0,0 → 1,53 |
;***************************************************************************** |
;* |
;* Open Watcom Project |
;* |
;* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
;* |
;* ======================================================================== |
;* |
;* This file contains Original Code and/or Modifications of Original |
;* Code as defined in and that are subject to the Sybase Open Watcom |
;* Public License version 1.0 (the 'License'). You may not use this file |
;* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
;* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
;* provided with the Original Code and Modifications, and is also |
;* available at www.sybase.com/developer/opensource. |
;* |
;* The Original Code and all software distributed under the License are |
;* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
;* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
;* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
;* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
;* NON-INFRINGEMENT. Please see the License for the specific language |
;* governing rights and limitations under the License. |
;* |
;* ======================================================================== |
;* |
;* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE |
;* DESCRIBE IT HERE! |
;* |
;***************************************************************************** |
ifdef __WASM__ |
ifdef __386__ |
extrn "C",__fatal_runtime_error : near |
else |
ifdef __SMALL__ |
extrn "C",__fatal_runtime_error : near |
endif |
ifdef __COMPACT__ |
extrn "C",__fatal_runtime_error : near |
endif |
ifdef __MEDIUM__ |
extrn "C",__fatal_runtime_error : far |
endif |
ifdef __LARGE__ |
extrn "C",__fatal_runtime_error : far |
endif |
ifdef __HUGE__ |
extrn "C",__fatal_runtime_error : far |
endif |
endif |
endif |
/programs/develop/open watcom/trunk/clib/crt/farsupp.h |
---|
0,0 → 1,74 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Far pointer support typedefs. |
* |
****************************************************************************/ |
#ifndef _FARSUPP_H_INCLUDED |
#define _FARSUPP_H_INCLUDED |
#include "variety.h" |
#include "widechar.h" |
#ifdef __LONG_LONG_SUPPORT__ |
#include "clibi64.h" |
#endif |
/* Only support near/far pointers on 16-bit targets, extended DOS |
* and Win386. Ideally we might want to test for non-flat memory model. |
*/ |
#if defined( _M_I86 ) || defined( __DOS__ ) || defined( __WINDOWS__ ) |
#define __FAR_SUPPORT__ |
typedef CHAR_TYPE _WCFAR *FAR_STRING; |
typedef char _WCFAR *FAR_ASCII_STRING; |
typedef wchar_t _WCFAR *FAR_UNI_STRING; |
typedef int _WCFAR *FAR_INT; |
typedef signed char _WCFAR *FAR_CHAR; |
typedef short _WCFAR *FAR_SHORT; |
typedef long _WCFAR *FAR_LONG; |
typedef float _WCFAR *FAR_FLOAT; |
typedef double _WCFAR *FAR_DOUBLE; |
#ifdef __LONG_LONG_SUPPORT__ |
typedef UINT64_TYPE _WCFAR *FAR_INT64; |
#endif |
#else |
#undef __FAR_SUPPORT__ |
typedef CHAR_TYPE *FAR_STRING; |
typedef char *FAR_ASCII_STRING; |
typedef wchar_t *FAR_UNI_STRING; |
typedef int *FAR_INT; |
typedef signed char *FAR_CHAR; |
typedef short *FAR_SHORT; |
typedef long *FAR_LONG; |
typedef float *FAR_FLOAT; |
typedef double *FAR_DOUBLE; |
#ifdef __LONG_LONG_SUPPORT__ |
typedef UINT64_TYPE *FAR_INT64; |
#endif |
#endif |
#endif |
/programs/develop/open watcom/trunk/clib/crt/fltused.c |
---|
0,0 → 1,47 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Module to invoke floating-point support initialiation. |
* |
****************************************************************************/ |
#include "variety.h" |
#include "rtinit.h" |
#if defined(__AXP__) || defined(__386__) || defined(__PPC__) |
unsigned _fltused_ = 0; |
#else |
unsigned _fltused_ = 1; |
#endif |
#if defined(_M_IX86) |
#pragma aux _fltused_ "*"; |
#endif |
extern void __setEFGfmt( void ); |
AXI( __setEFGfmt, INIT_PRIORITY_LIBRARY ) |
/programs/develop/open watcom/trunk/clib/crt/fpexcept.c |
---|
0,0 → 1,52 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Floating-point exception handler wrapper. |
* |
****************************************************************************/ |
#include "variety.h" |
#include "rtdata.h" |
/* |
__FPE_exception is called from machine language with parm in EAX/AX |
(see "fstatus" module in CGSUPP) |
*/ |
#if defined(__386__) |
#define parmreg eax |
#else |
#define parmreg ax |
#endif |
void __FPE_exception( int fpe_type ); |
#pragma aux __FPE_exception "*_" parm caller [parmreg]; |
void __FPE_exception( int fpe_type ) |
{ |
_RWD_FPE_handler( fpe_type ); |
} |
/programs/develop/open watcom/trunk/clib/crt/ftos.h |
---|
0,0 → 1,45 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Prototypes for floating-point formatting routines. |
* |
****************************************************************************/ |
#ifndef _FTOS_H_INCLUDED |
#define _FTOS_H_INCLUDED |
#include "variety.h" |
#include "farsupp.h" |
_WCRTLINK extern FAR_STRING (*__EFG_printf)(); |
_WCRTLINK extern void (*__EFG_scanf)(); |
extern FAR_STRING _EFG_Format(); |
extern void __cnvs2d(); |
_WMRTLINK extern FAR_STRING (*__get_EFG_Format())(); |
_WMRTLINK extern void (*__get__cnvs2d())(); |
#endif |
/programs/develop/open watcom/trunk/clib/crt/initarg.h |
---|
0,0 → 1,58 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: prototypes for arguments processing variables |
* |
****************************************************************************/ |
#ifndef _INITARG_H_INCLUDED |
#define _INITARG_H_INCLUDED |
extern int __F_NAME(_argc,_wargc); /* argument count */ |
extern CHAR_TYPE **__F_NAME(_argv,_wargv); /* argument vector */ |
extern void __F_NAME(__Init_Argv,__wInit_Argv)( void ); |
extern void __F_NAME(__Fini_Argv,__wFini_Argv)( void ); |
_WCRTLINKD extern int __F_NAME(___Argc,___wArgc); /* argument count */ |
_WCRTLINKD extern CHAR_TYPE**__F_NAME(___Argv,___wArgv); /* argument vector */ |
_WCRTLINKD extern char *_LpCmdLine; /* pointer to command line */ |
_WCRTLINKD extern char *_LpPgmName; /* pointer to program name */ |
extern char *_LpDllName; /* pointer to dll name */ |
_WCRTLINKD extern wchar_t *_LpwCmdLine; /* pointer to wide command line */ |
_WCRTLINKD extern wchar_t *_LpwPgmName; /* pointer to wide program name */ |
extern wchar_t *_LpwDllName; /* pointer to wide dll name */ |
#if defined(__WINDOWS_386__) |
extern char __Is_DLL; |
#else |
extern int __Is_DLL; |
#endif |
#endif |
/programs/develop/open watcom/trunk/clib/crt/initargv.c |
---|
0,0 → 1,222 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Functions to set up argc and argv parameters of main(), etc. |
* |
****************************************************************************/ |
#define __NETWARE__ |
#ifdef __NETWARE__ |
void __Init_Argv( void ) { } |
void __Fini_Argv( void ) { } |
#else |
//#include "dll.h" // needs to be first |
#include "variety.h" |
#include "widechar.h" |
#include <stdio.h> |
#include <stdlib.h> |
#include <string.h> |
#include <io.h> |
//#include "liballoc.h" |
#include "initarg.h" |
extern int __historical_splitparms; |
extern void _Not_Enough_Memory( void ); /* 25-jul-89 */ |
static unsigned _SplitParms(int, CHAR_TYPE *, CHAR_TYPE **, CHAR_TYPE ** ); |
_WCRTLINKD static CHAR_TYPE *__F_NAME(__CmdLine,__wCmdLine); /* cmdline buffer */ |
_WCRTLINK void *__F_NAME( _getargv, _wgetargv )( |
int historical, CHAR_TYPE *exe, CHAR_TYPE *cmd, |
int *pargc, CHAR_TYPE ***pargv ); |
void __F_NAME(__Init_Argv,__wInit_Argv)( void ) |
{ |
__F_NAME( __CmdLine, __wCmdLine ) = __F_NAME( _getargv, _wgetargv )( |
__historical_splitparms, |
__F_NAME( _LpPgmName, _LpwPgmName ), __F_NAME( _LpCmdLine, _LpwCmdLine ), |
&__F_NAME( _argc, _wargc ), &__F_NAME( _argv, _wargv ) ); |
__F_NAME( __argc, __wargc ) = __F_NAME( _argc, _wargc ); |
__F_NAME( ___Argc, ___wArgc ) = __F_NAME( _argc, _wargc ); |
__F_NAME( __argv, __wargv ) = __F_NAME( _argv, _wargv ); |
__F_NAME( ___Argv, ___wArgv ) = __F_NAME( _argv, _wargv ); |
} |
_WCRTLINK void *__F_NAME( _getargv, _wgetargv )( |
int historical, CHAR_TYPE *exe, CHAR_TYPE *cmd, |
int *pargc, CHAR_TYPE ***pargv ) |
{ |
unsigned argc; /* argument count */ |
CHAR_TYPE **argv; /* Actual arguments */ |
CHAR_TYPE *endptr; /* ptr to end of command line */ |
unsigned len; /* length of command line */ |
CHAR_TYPE *cmdline; /* copy of command line */ |
unsigned size; /* amount to allocate */ |
unsigned argv_offset; /* offset of argv in storage */ |
argc = _SplitParms( historical, cmd, NULL, &endptr ) + 1; |
len = (unsigned) ( endptr - cmd ) + 1; |
argv_offset = __ALIGN_SIZE(len * sizeof(CHAR_TYPE)); |
size = argv_offset + (argc+1) * sizeof(CHAR_TYPE *); |
// round up size for alignment of argv pointer |
size = __ALIGN_SIZE( size ); |
#if defined(__REAL_MODE__) && defined(__BIG_DATA__) |
#if defined(__OS2_286__) |
if( _osmode == DOS_MODE ) { |
cmdline = lib_nmalloc( size ); |
if( (void _WCI86NEAR *) cmdline == NULL ) { |
cmdline = lib_malloc( size ); |
} |
} else { |
cmdline = lib_malloc( size ); |
} |
#else |
cmdline = lib_nmalloc( size ); |
if( (void _WCI86NEAR *) cmdline == NULL ) { |
cmdline = lib_malloc( size ); |
} |
#endif |
#else |
cmdline = lib_malloc( size ); |
#endif |
argv = NULL; |
argc = 0; |
if( cmdline ) { |
memcpy( cmdline, cmd, len * sizeof(CHAR_TYPE) ); |
argv = (void *) ( ( ( char*) cmdline ) + argv_offset ); |
argv[0] = exe; |
argc = _SplitParms( historical, cmdline, argv + 1, &endptr ) + 1; |
argv[argc] = NULL; |
} |
*pargc = argc; |
*pargv = argv; |
return( cmdline ); |
} |
static unsigned _SplitParms( int historical, CHAR_TYPE *p, CHAR_TYPE **argv, CHAR_TYPE **endptr ) |
{ |
register unsigned argc; |
register CHAR_TYPE *start; |
register CHAR_TYPE *new; |
enum QUOTE_STATE { |
QUOTE_NONE, /* no " active in current parm */ |
QUOTE_DELIMITER, /* " was first char and must be last */ |
QUOTE_STARTED /* " was seen, look for a match */ |
}; |
register enum QUOTE_STATE state; |
argc = 0; |
for(;;) { |
while( *p == ' ' || *p == '\t' ) { |
++p; /* skip over blanks or tabs */ |
} |
if( *p == '\0' ) break; |
/* we are at the start of a parm */ |
state = QUOTE_NONE; |
if( *p == '\"' ) { |
p++; |
state = QUOTE_DELIMITER; |
} |
new = start = p; |
for(;;) { |
if( *p == '\"' ) { |
if( !historical ) { |
p++; |
if( state == QUOTE_NONE ) { |
state = QUOTE_STARTED; |
} else { |
state = QUOTE_NONE; |
} |
continue; |
} else { |
if( state == QUOTE_DELIMITER ) { |
break; |
} |
} |
} |
if( *p == ' ' || *p == '\t' ) { |
if( state == QUOTE_NONE ) { |
break; |
} |
} |
if( *p == '\0' ) break; |
if( *p == '\\' ) { |
if( !historical ) { |
if( p[1] == '\"' ) { |
++p; |
if( p[-2] == '\\' ) { |
continue; |
} |
} |
} else { |
if( p[1] == '\"' || p[1] == '\\' && state == QUOTE_DELIMITER ) { |
++p; |
} |
} |
} |
if( argv ) { |
*(new++) = *p; |
} |
++p; |
} |
if( argv ) { |
argv[ argc ] = start; |
++argc; |
/* |
The *new = '\0' is req'd in case there was a \" to " |
translation. It must be after the *p check against |
'\0' because new and p could point to the same char |
in which case the scan would be terminated too soon. |
*/ |
if( *p == '\0' ) { |
*new = '\0'; |
break; |
} |
*new = '\0'; |
++p; |
} else { |
++argc; |
if( *p == '\0' ) { |
break; |
} |
++p; |
} |
} |
*endptr = p; |
return( argc ); |
} |
void __F_NAME(__Fini_Argv,__wFini_Argv)( void ) |
{ |
if( __F_NAME(__CmdLine,__wCmdLine) != NULL ) { |
lib_free( __F_NAME(__CmdLine,__wCmdLine) ); |
} |
} |
#endif |
/programs/develop/open watcom/trunk/clib/crt/initfini.h |
---|
0,0 → 1,86 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Init/Fini routines delcarations. |
* |
****************************************************************************/ |
#ifndef _INITFINI_H_INCLUDED |
#define _INITFINI_H_INCLUDED |
#include "variety.h" |
#include "rtinit.h" |
#if defined(__386__) |
#define __PARMREG1 eax |
#define __PARMREG2 edx |
#elif defined(M_I86) |
#define __PARMREG1 ax |
#define __PARMREG2 dx |
#else |
#define __PARMREG1 |
#define __PARMREG2 |
#endif |
extern void __InitRtns( unsigned ); |
// - takes priority limit parm in __PARMREG1 |
// code will run init routines whose |
// priority is <= __PARMREG1 (really [0-255]) |
// __PARMREG1==255 -> run all init routines |
// __PARMREG1==15 -> run init routines whose priority is <= 15 |
#if defined(_M_IX86) |
#pragma aux __InitRtns "*" parm [__PARMREG1] |
#if !defined(__386__) |
extern void _WCI86FAR __FInitRtns(unsigned); |
#pragma aux __FInitRtns "*" parm [__PARMREG1] |
#endif |
#endif |
extern void __FiniRtns(unsigned,unsigned); |
// - takes priority limit range in __PARMREG1, __PARMREG2 |
// code will run fini routines whose |
// priority is >= __PARMREG1 (really [0-255]) and |
// <= __PARMREG2 (really [0-255]) |
// __PARMREG1==0 ,__PARMREG2==255 -> run all fini routines |
// __PARMREG1==16,__PARMREG2==255 -> run fini routines in range 16...255 |
// __PARMREG1==16,__PARMREG2==40 -> run fini routines in range 16...40 |
#if defined(_M_IX86) |
#pragma aux __FiniRtns "*" parm [__PARMREG1] [__PARMREG2] |
#if !defined(__386__) |
extern void _WCI86FAR __FFiniRtns( unsigned, unsigned ); |
#pragma aux __FFiniRtns "*" parm [__PARMREG1] [__PARMREG2] |
#endif |
#endif |
#if defined(__OS2__) && defined(__386__) |
#define EXIT_PRIORITY_CLIB 0x00009F00 |
#endif |
#undef __PARMREG1 |
#undef __PARMREG2 |
#endif |
/programs/develop/open watcom/trunk/clib/crt/initrtns.c |
---|
0,0 → 1,293 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Initialization and termination of clib. |
* |
****************************************************************************/ |
#include "variety.h" |
#include "initfini.h" |
#include "rtinit.h" |
#define PNEAR ((__type_rtp)0) |
#define PFAR ((__type_rtp)1) |
#define PDONE ((__type_rtp)2) |
#if ( COMP_CFG_COFF == 1 ) || defined(__AXP__) || defined(__PPC__) || defined(__MIPS__) |
// following is an attempt to drop the need for an assembler |
// segment definitions file |
// unfortunately, the use of XIB,XIE,YIB,YIE doesn't get the |
// right sort of segments by default |
#pragma data_seg( ".rtl$xib", "DATA" ); |
YIXI( TS_SEG_XIB, _Start_XI, 0, 0 ) |
#pragma data_seg( ".rtl$xie", "DATA" ); |
YIXI( TS_SEG_XIE, _End_XI, 0, 0 ) |
#pragma data_seg( ".rtl$yib", "DATA" ); |
YIXI( TS_SEG_YIB, _Start_YI, 0, 0 ) |
#pragma data_seg( ".rtl$yie", "DATA" ); |
YIXI( TS_SEG_YIE, _End_YI, 0, 0 ) |
#pragma data_seg( ".data", "DATA" ); |
#elif defined(_M_IX86) |
extern struct rt_init _Start_XI; |
extern struct rt_init _End_XI; |
extern struct rt_init _Start_YI; |
extern struct rt_init _End_YI; |
#else |
#error unsupported platform |
#endif |
typedef void (*pfn)(void); |
typedef void (_WCI86FAR * _WCI86FAR fpfn)(void); |
typedef void (_WCI86NEAR * _WCI86NEAR npfn)(void); |
#if defined(__AXP__) || defined(__PPC__) || defined(__MIPS__) |
#define __GETDS() |
#define save_ds() |
#define restore_ds() |
#define save_es() |
#define restore_es() |
#define setup_es() |
#elif defined(__WINDOWS_386__) |
#define __GETDS() |
#define save_ds() |
#define restore_ds() |
#define save_es() |
#define restore_es() |
#define setup_es() |
#elif defined(__386__) |
#define __GETDS() |
#define save_ds() |
#define restore_ds() |
#if defined(__FLAT__) |
#define save_es() |
#define restore_es() |
#define setup_es() |
#else |
extern void save_es( void ); |
#pragma aux save_es = modify exact [es]; |
extern void restore_es( void ); |
#pragma aux restore_es = modify exact [es]; |
extern void setup_es( void ); |
#pragma aux setup_es = \ |
"push ds" \ |
"pop es" \ |
modify exact [es]; |
#endif |
#elif defined(M_I86) |
extern void save_dx( void ); |
#pragma aux save_dx = modify exact [dx]; |
extern void _WCI86NEAR __GETDS( void ); |
#pragma aux __GETDS "__GETDS"; |
extern void save_ds( void ); |
#pragma aux save_ds = "push ds" modify exact [sp]; |
extern void restore_ds( void ); |
#pragma aux restore_ds = "pop ds" modify exact [sp]; |
#define save_es() |
#define restore_es() |
#else |
#error unsupported platform |
#endif |
#if defined(M_I86) |
static void callit_near( npfn *f ) { |
// don't call a null pointer |
if( *f ) { |
save_dx(); |
save_ds(); |
// call function |
(void)(**f)(); |
restore_ds(); |
} |
} |
static void callit_far( fpfn _WCI86NEAR *f ) { |
// don't call a null pointer |
if( *f ) { |
save_ds(); |
// call function |
(void)(**f)(); |
restore_ds(); |
} |
} |
#else |
static void callit( pfn *f ) { |
// don't call a null pointer |
if( *f ) { |
// QNX needs es==ds |
setup_es(); |
// call function |
(void)(**f)(); |
} |
} |
#endif |
/* |
; - takes priority limit parm in eax, code will run init routines whose |
; priority is < eax (really al [0-255]) |
; eax==255 -> run all init routines |
; eax==15 -> run init routines whose priority is <= 15 |
; |
*/ |
void __InitRtns( unsigned limit ) { |
__type_rtp local_limit; |
struct rt_init _WCI86NEAR *pnext; |
save_ds(); |
save_es(); |
__GETDS(); |
local_limit = (__type_rtp)limit; |
for(;;) { |
{ |
__type_rtp working_limit; |
struct rt_init _WCI86NEAR *pcur; |
pcur = (struct rt_init _WCI86NEAR*)&_Start_XI; |
#if defined(COMP_CFG_COFF) |
pcur++; |
#endif |
pnext = (struct rt_init _WCI86NEAR*)&_End_XI; |
working_limit = local_limit; |
// walk list of routines |
while( pcur < (struct rt_init _WCI86NEAR*)&_End_XI ) |
{ |
// if this one hasn't been called |
if( pcur->rtn_type != PDONE ) { |
// if the priority is better than best so far |
if( pcur->priority <= working_limit ) |
{ |
// remember this one |
pnext = pcur; |
working_limit = pcur->priority; |
} |
} |
// advance to next entry |
pcur++; |
} |
// check to see if all done, if we didn't find any |
// candidates then we can return |
if( pnext == (struct rt_init _WCI86NEAR*)&_End_XI ) { |
break; |
} |
} |
#if defined(M_I86) |
if( pnext->rtn_type == PNEAR ) { |
callit_near( (npfn *)&pnext->rtn ); |
} else { |
callit_far( (fpfn _WCI86NEAR *)&pnext->rtn ); |
} |
#else |
callit( &pnext->rtn ); |
#endif |
// mark entry as invoked |
pnext->rtn_type = PDONE; |
} |
restore_es(); |
restore_ds(); |
} |
/* |
; - takes priority range parms in eax, edx, code will run fini routines whose |
; priority is >= eax (really al [0-255]) and <= edx (really dl [0-255]) |
; eax==0, edx=255 -> run all fini routines |
; eax==16, edx=255 -> run fini routines in range 16..255 |
; eax==16, edx=40 -> run fini routines in range 16..40 |
*/ |
#if defined(M_I86) |
void _WCI86FAR __FFiniRtns( unsigned min_limit, unsigned max_limit ) { |
__FiniRtns( min_limit, max_limit ); |
} |
#endif |
void __FiniRtns( unsigned min_limit, unsigned max_limit ) |
{ |
__type_rtp local_min_limit; |
__type_rtp local_max_limit; |
struct rt_init _WCI86NEAR *pnext; |
save_ds(); |
save_es(); |
__GETDS(); |
local_min_limit = (__type_rtp)min_limit; |
local_max_limit = (__type_rtp)max_limit; |
for(;;) { |
{ |
__type_rtp working_limit; |
struct rt_init _WCI86NEAR *pcur; |
pcur = (struct rt_init _WCI86NEAR*)&_Start_YI; |
#if defined(COMP_CFG_COFF) |
pcur++; |
#endif |
pnext = (struct rt_init _WCI86NEAR*)&_End_YI; |
working_limit = local_min_limit; |
// walk list of routines |
while( pcur < (struct rt_init _WCI86NEAR*)&_End_YI ) |
{ |
// if this one hasn't been called |
if( pcur->rtn_type != PDONE ) { |
// if the priority is better than best so far |
if( pcur->priority >= working_limit ) |
{ |
// remember this one |
pnext = pcur; |
working_limit = pcur->priority; |
} |
} |
// advance to next entry |
pcur++; |
} |
// check to see if all done, if we didn't find any |
// candidates then we can return |
if( pnext == (struct rt_init _WCI86NEAR*)&_End_YI ) { |
break; |
} |
} |
if( pnext->priority <= local_max_limit ) { |
#if defined(M_I86) |
if( pnext->rtn_type == PNEAR ) { |
callit_near( (npfn *)&pnext->rtn ); |
} else { |
callit_far( (fpfn _WCI86NEAR *)&pnext->rtn ); |
} |
#else |
callit( &pnext->rtn ); |
#endif |
} |
// mark entry as invoked even if we don't call it |
// if we didn't call it, it is because we don't want to |
// call finirtns with priority > max_limit, in that case |
// marking the function as called, won't hurt anything |
pnext->rtn_type = PDONE; |
} |
restore_es(); |
restore_ds(); |
} |
/programs/develop/open watcom/trunk/clib/crt/kmain.c |
---|
0,0 → 1,33 |
#include "variety.h" |
#include "initfini.h" |
_WCRTLINKD extern char *LpCmdLine; /* pointer to command line */ |
_WCRTLINKD extern char *LpPgmName; /* pointer to program name */ |
_WCRTLINKD int ___Argc; /* argument count */ |
_WCRTLINKD char * ___Argv[2]; /* argument vector */ |
_WCRTLINK void exit( int status ); |
_WCRTLINK extern void (*__process_fini)( unsigned, unsigned ); |
extern int main( int, char ** ); |
#pragma aux __KolibriMain "*"; |
void __KolibriMain(void ) |
/***************************************/ |
{ ___Argc = 2; |
___Argv[0] = LpPgmName; |
___Argv[1] = LpCmdLine; |
// __process_fini = &__FiniRtns; |
__InitRtns( 255 ); |
// __CommonInit(); |
exit( main( ___Argc, ___Argv ) ); |
} |
/programs/develop/open watcom/trunk/clib/crt/langenv.h |
---|
0,0 → 1,113 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Establish common stuff for a target environment for |
* language-related processors. |
* |
****************************************************************************/ |
#ifndef __LANGENV_H__ |
#define __LANGENV_H__ |
// This file uses __TGT_SYS to figure out the required target. |
// |
// langenvd.h contains the possible values. |
// |
// __TGT_SYS_X86 is the default |
// |
#include "langenvd.h" |
#ifndef __TGT_SYS |
#define __TGT_SYS __TGT_SYS_X86 |
#endif |
#if __TGT_SYS == __TGT_SYS_X86 |
#define TS_SEG_CODE "_TEXT" |
#define TS_SEG_CONST "CONST" |
#define TS_SEG_CONST2 "CONST2" |
#define TS_SEG_DATA "_DATA" |
#define TS_SEG_TIB "TIB" |
#define TS_SEG_TI "TI" |
#define TS_SEG_TIE "TIE" |
#define TS_SEG_XIB "XIB" |
#define TS_SEG_XI "XI" |
#define TS_SEG_XIE "XIE" |
#define TS_SEG_YIB "YIB" |
#define TS_SEG_YI "YI" |
#define TS_SEG_YIE "YIE" |
#define TS_SEG_YC "YC" |
#define TS_SEG_BSS "_BSS" |
#define TS_SEG_STACK "STACK" |
#define TS_SEG_DEPENDS "not used" |
#define TS_SEG_TLSB ".tls" |
#define TS_SEG_TLS ".tls$" |
#define TS_SEG_TLSE ".tls$ZZZ" |
#define TS_SEG_TLS_CLASS "TLS" |
#define TS_MAX_OBJNAME 256 |
#define TS_DATA_MANGLE "_*" |
#define TS_CODE_MANGLE "*_" |
#elif __TGT_SYS == __TGT_SYS_AXP_NT || __TGT_SYS == __TGT_SYS_PPC_NT || __TGT_SYS == __TGT_SYS_MIPS |
#define TS_SEG_CODE ".text" |
#define TS_SEG_CONST ".const" |
#define TS_SEG_CONST2 ".const2" |
#define TS_SEG_DATA ".data" |
#define TS_SEG_TIB ".rtl$tib" |
#define TS_SEG_TI ".rtl$tid" |
#define TS_SEG_TIE ".rtl$tie" |
#define TS_SEG_XIB ".rtl$xib" |
#define TS_SEG_XI ".rtl$xid" |
#define TS_SEG_XIE ".rtl$xie" |
#define TS_SEG_YIB ".rtl$yib" |
#define TS_SEG_YI ".rtl$yid" |
#define TS_SEG_YIE ".rtl$yie" |
#define TS_SEG_YC ".rtl$yc" |
#define TS_SEG_BSS ".bss" |
#define TS_SEG_STACK ".stack" |
#define TS_SEG_DEPENDS ".depend" |
#define TS_SEG_TLSB ".tls" |
#define TS_SEG_TLS ".tls$" |
#define TS_SEG_TLSE ".tls$ZZZ" |
#define TS_SEG_TLS_CLASS NULL |
#define TS_MAX_OBJNAME 1024 |
#define TS_DATA_MANGLE "*" |
#define TS_CODE_MANGLE "*" |
#else |
#error Invalid target system |
#endif |
#undef __TGT_SYS |
#endif |
/programs/develop/open watcom/trunk/clib/crt/langenv.inc |
---|
0,0 → 1,33 |
;***************************************************************************** |
;* |
;* Open Watcom Project |
;* |
;* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
;* |
;* ======================================================================== |
;* |
;* This file contains Original Code and/or Modifications of Original |
;* Code as defined in and that are subject to the Sybase Open Watcom |
;* Public License version 1.0 (the 'License'). You may not use this file |
;* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
;* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
;* provided with the Original Code and Modifications, and is also |
;* available at www.sybase.com/developer/opensource. |
;* |
;* The Original Code and all software distributed under the License are |
;* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
;* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
;* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
;* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
;* NON-INFRINGEMENT. Please see the License for the specific language |
;* governing rights and limitations under the License. |
;* |
;* ======================================================================== |
;* |
;* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE |
;* DESCRIBE IT HERE! |
;* |
;***************************************************************************** |
COMP_CFG_COFF equ 0 |
/programs/develop/open watcom/trunk/clib/crt/langenvd.h |
---|
0,0 → 1,40 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Define values for language targets. |
* |
****************************************************************************/ |
#ifndef __LANGENVD_H__ |
#define __LANGENVD_H__ |
#define __TGT_SYS_X86 0 // All x86 systems to date |
#define __TGT_SYS_AXP_NT 1 // Win32 on DEC Alpha AXP |
#define __TGT_SYS_PPC_NT 2 // Win32 on IBM/Motorola PowerPC |
#define __TGT_SYS_MIPS 3 // MIPS RISC Architecture |
#endif |
/programs/develop/open watcom/trunk/clib/crt/main2wnt.c |
---|
0,0 → 1,105 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Implementation of __NTMain(). |
* |
****************************************************************************/ |
#include "variety.h" |
#include "widechar.h" |
#include <stdio.h> |
#include <stdlib.h> |
#include <string.h> |
#include <malloc.h> |
#include <windows.h> |
//#include "ntex.h" |
//#include "sigtab.h" |
#include "initfini.h" |
#include "initarg.h" |
void _cdecl mf_init(); |
void _stdcall InitHeap(int heap_size); |
int __appcwdlen; |
char* __appcwd; |
_WCRTLINK void (*__process_fini)(unsigned,unsigned) = 0; |
extern void __CommonInit( void ); |
extern int wmain( int, wchar_t ** ); |
extern int main( int, char ** ); |
extern char *LpCmdLine; |
extern char *LpPgmName; |
void __F_NAME(__NTMain,__wNTMain)( void ) |
/***************************************/ |
{ |
InitHeap(32*1024*1024); |
//mf_init(); |
__process_fini = &__FiniRtns; |
__InitRtns( 255 ); |
__CommonInit(); |
__appcwdlen = strrchr(_LpPgmName, '/') - _LpPgmName + 1; |
__appcwdlen = __appcwdlen > 512 ? 512 : __appcwdlen; |
__appcwd= (char*)malloc(__appcwdlen); |
strncpy(__appcwd, _LpPgmName, __appcwdlen); |
__appcwd[__appcwdlen] = 0; |
___Argc = 2; |
___Argv[0] = _LpPgmName; |
___Argv[1] = _LpCmdLine; |
#ifdef __WIDECHAR__ |
exit( wmain( ___wArgc, ___wArgv ) ); |
#else |
exit( main( ___Argc, ___Argv ) ); |
#endif |
} |
#ifdef __WIDECHAR__ |
#if defined(_M_IX86) |
#pragma aux __wNTMain "*" |
#endif |
#else |
#if defined(_M_IX86) |
#pragma aux __NTMain "*" |
#endif |
#endif |
_WCRTLINK void __exit( unsigned ret_code ) |
{ |
__FiniRtns( 0, FINI_PRIORITY_EXIT-1 ); |
_asm |
{ |
mov eax, -1 |
int 0x40 |
} |
} |
/programs/develop/open watcom/trunk/clib/crt/mdef.inc |
---|
0,0 → 1,358 |
;***************************************************************************** |
;* |
;* Open Watcom Project |
;* |
;* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
;* |
;* ======================================================================== |
;* |
;* This file contains Original Code and/or Modifications of Original |
;* Code as defined in and that are subject to the Sybase Open Watcom |
;* Public License version 1.0 (the 'License'). You may not use this file |
;* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
;* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
;* provided with the Original Code and Modifications, and is also |
;* available at www.sybase.com/developer/opensource. |
;* |
;* The Original Code and all software distributed under the License are |
;* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
;* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
;* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
;* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
;* NON-INFRINGEMENT. Please see the License for the specific language |
;* governing rights and limitations under the License. |
;* |
;* ======================================================================== |
;* |
;* Description: Memory model setup for interfacing with C code. |
;* |
;***************************************************************************** |
_SMALL_CODE = 00h |
_BIG_CODE = 01h |
_SMALL_DATA = 00h |
_BIG_DATA = 02h |
_HUGE_DATA = 04h |
_LONG_INTS = 08h |
_USE_32_SEGS = 10h |
_386 = 10h ; from old clib |
_DS_PEGGED = 20h ; from old clib (used for Windows) |
_TINY = 40h ; from old clib (formerly 10h) |
_FLAT = ( _SMALL_CODE or _SMALL_DATA or _USE_32_SEGS ) |
_SMALL = ( _SMALL_CODE or _SMALL_DATA ) |
_COMPACT = ( _SMALL_CODE or _BIG_DATA ) |
_MEDIUM = ( _BIG_CODE or _SMALL_DATA ) |
_LARGE = ( _BIG_CODE or _BIG_DATA ) |
_HUGE = ( _BIG_CODE or _HUGE_DATA ) |
_EMULATION = 00h |
_8087 = 01h |
ifdef __WASM__ |
ifdef __FLAT__ |
_MODEL = _FLAT |
endif |
ifdef __SMALL__ |
_MODEL = _SMALL |
endif |
ifdef __COMPACT__ |
_MODEL = _COMPACT |
endif |
ifdef __MEDIUM__ |
_MODEL = _MEDIUM |
endif |
ifdef __LARGE__ |
_MODEL = _LARGE |
endif |
ifdef __HUGE__ |
_MODEL = _HUGE |
endif |
ifdef __386__ |
_MODEL = ( _MODEL or _USE_32_SEGS ) |
endif |
ifdef __WINDOWS__ |
if _MODEL and (_BIG_DATA or _HUGE_DATA) |
_MODEL = ( _MODEL or _DS_PEGGED ) |
endif |
endif |
ifdef __FPC__ |
_MATH = _EMULATION |
endif |
ifdef __FPI__ |
_MATH = _8087 |
endif |
ifdef __FPI87__ |
_MATH = _8087 |
endif |
else |
include .\model.inc ; defines _MODEL, _MATH symbols |
endif |
if _MODEL and _BIG_CODE |
modstart macro modname,alignment |
ifdef NDEBUG |
name modname |
endif |
ifb <alignment> |
_TEXT segment word public 'CODE' |
else |
_TEXT segment alignment public 'CODE' |
endif |
assume cs:_TEXT |
endm |
calli macro regname |
call dword ptr [regname] |
endm |
codeptr macro p1,p2 |
ifb <p2> |
extrn p1 : dword |
else |
extrn "&p1",p2 : dword |
endif |
endm |
docall macro dest |
call far ptr dest |
endm |
dojmp macro dest |
jmp far ptr dest |
endm |
defp macro dsym,exp |
dsym proc far exp |
endm |
defpe macro dsym |
ifdef _EXPORT |
dsym proc far export |
else |
dsym proc far |
endif |
endm |
defn macro dsym |
dsym proc near |
endm |
endproc macro dsym |
dsym endp |
endm |
epilog macro |
if _MODEL and _USE_32_SEGS |
pop EBP |
dec EBP |
mov ESP,EBP |
else |
pop BP |
dec BP |
endif |
endm |
prolog macro |
if _MODEL and _USE_32_SEGS |
inc EBP |
push EBP |
mov EBP,ESP |
else |
inc BP |
push BP |
mov BP,SP |
endif |
endm |
xdefp macro p1,p2 |
ifb <p2> |
public p1 |
else |
public "&p1",p2 |
endif |
endm |
xref macro p1,p2 |
ifb <p2> |
extrn `p1` : far |
else |
extrn "&p1",`p2` : far |
endif |
endm |
lcall macro dest |
push cs |
call near ptr dest |
endm |
else |
modstart macro modname,alignment |
ifdef NDEBUG |
name modname |
endif |
if _MODEL and _USE_32_SEGS |
_TEXT segment use32 alignment public 'CODE' |
else |
_TEXT segment alignment public 'CODE' |
endif |
assume cs:_TEXT |
endm |
calli macro regname |
call regname |
endm |
codeptr macro p1,p2 |
if _MODEL and _USE_32_SEGS |
ifb <p2> |
extrn p1 : dword |
else |
extrn "&p1",p2 : dword |
endif |
else |
ifb <p2> |
extrn p1 : word |
else |
extrn "&p1",p2 : word |
endif |
endif |
endm |
defn macro dsym |
dsym proc near |
endm |
defp macro dsym,exp |
dsym proc near exp |
endm |
defpe macro dsym |
ifdef _EXPORT |
dsym proc near export |
else |
dsym proc near |
endif |
endm |
docall macro dest |
call dest |
endm |
dojmp macro dest |
jmp dest |
endm |
endproc macro dsym |
dsym endp |
endm |
epilog macro |
if _MODEL and _USE_32_SEGS |
pop EBP |
else |
pop BP |
endif |
endm |
prolog macro |
if _MODEL and _USE_32_SEGS |
push EBP |
mov EBP,ESP |
else |
push BP |
mov BP,SP |
endif |
endm |
xdefp macro p1,p2 |
ifb <p2> |
public p1 |
else |
public "&p1",p2 |
endif |
endm |
xref macro p1,p2 |
ifb <p2> |
extrn `p1` : near |
else |
extrn "&p1",`p2` : near |
endif |
endm |
lcall macro dest |
call dest |
endm |
endif |
endmod macro |
_TEXT ends |
endm |
dataseg macro |
DGROUP group _DATA |
assume ds:DGROUP,ss:DGROUP |
if _MODEL and _USE_32_SEGS |
_DATA segment use32 dword public 'DATA' |
else |
_DATA segment word public 'DATA' |
endif |
endm |
datasegment macro |
dataseg ; should be phased out |
endm |
enddata macro |
_DATA ends |
endm |
bss_segment macro |
if _MODEL and _USE_32_SEGS |
_BSS segment use32 dword public 'BSS' |
else |
_BSS segment word public 'BSS' |
endif |
DGROUP group _BSS |
assume ds:DGROUP |
endm |
endbss macro |
_BSS ends |
endm |
alias_function macro alias, function |
ifb <function> |
xref "C",_&alias |
else |
xref "C",function |
endif |
.code |
public "C",`alias` |
ifdef _EXPORT |
`alias` proc export |
else |
`alias` proc |
endif |
ifb <function> |
jmp _&alias |
else |
jmp `function` |
endif |
`alias` endp |
endm |
xred macro p1,p2,p3 |
ifb <p3> |
extrn p1 : p2 |
else |
extrn "&p1",p2 : p3 |
endif |
endm |
/programs/develop/open watcom/trunk/clib/crt/rtdata.h |
---|
0,0 → 1,211 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Internal CLIB structures and variables. |
* |
****************************************************************************/ |
#ifndef _RTDATA_H_INCLUDED |
#define _RTDATA_H_INCLUDED |
#include "variety.h" |
#include <stdio.h> |
#include "errorno.h" |
/* DOS based platforms have stdaux/stdprn in addition to stdin/out/err */ |
#if defined(__DOS__) || defined(__WINDOWS__) || defined(__OSI__) |
#define NUM_STD_STREAMS 5 |
#else |
#define NUM_STD_STREAMS 3 |
#endif |
#if defined(__NT__) || defined(__OS2__) |
struct __pipe_info { |
int isPipe; /* non-zero if it's a pipe */ |
int pid; /* PID of spawned process */ |
}; |
#endif |
typedef struct __stream_link { |
struct __stream_link * next; |
struct __iobuf * stream; |
unsigned char * _base; /* location of buffer */ |
int _orientation; /* wide/byte/not oriented */ |
int _extflags; /* extended flags */ |
unsigned char _tmpfchar; /* tmpfile number */ |
unsigned char _filler[sizeof(int)-1];/* explicit padding */ |
#if defined(__NT__) || defined(__OS2__) |
struct __pipe_info pipeInfo; /* pipe-related fields */ |
#endif |
} __stream_link; |
typedef void _WCI86FAR FPEhandler( int ); |
#define _FP_BASE(__fp) ((__fp)->_link->_base) |
#ifndef __NETWARE__ |
#define _FP_ORIENTATION(__fp) ((__fp)->_link->_orientation) |
#define _FP_EXTFLAGS(__fp) ((__fp)->_link->_extflags) |
#endif |
#define _FP_TMPFCHAR(__fp) ((__fp)->_link->_tmpfchar) |
#ifndef __NETWARE__ |
#define _FP_PIPEDATA(__fp) ((__fp)->_link->pipeInfo) |
#endif |
extern __stream_link *__OpenStreams; |
extern __stream_link *__ClosedStreams; |
extern char * _WCNEAR __env_mask; /* ptr to char array of flags */ |
extern FPEhandler *__FPE_handler; |
extern void (*__FPE_handler_exit)( void ); |
#if !defined(__NETWARE__) |
extern int _cbyte; |
extern int _cbyte2; |
extern int _child; |
extern int __umaskval; |
extern unsigned _curbrk; |
extern int _commode; |
#endif |
#if !defined (_NETWARE_LIBC) |
extern unsigned _STACKTOP; |
#endif |
#if !defined(__QNX__) && !defined(__LINUX__) |
extern void (*__Save8087)();/* Ptr to FP state save rtn (spawn) */ |
extern void (*__Rest8087)();/* Ptr to FP state restore rtn (spawn) */ |
#endif |
extern unsigned short _8087cw; /* control word initializer */ |
extern unsigned char _no87; /* NO87 environment var defined */ |
extern unsigned char _8087; /* type of 8087/emulator present */ |
extern unsigned char _real87; /* 8087 coprocessor hardware present */ |
#if defined(_M_IX86) |
#pragma aux _8087cw "_*"; |
#pragma aux _no87 "_*"; |
#pragma aux _8087 "_*"; |
#pragma aux _real87 "_*"; |
#endif |
#if !defined(__SW_BM) |
extern unsigned _STACKLOW; |
#endif |
#define _RWD_ostream __OpenStreams |
#define _RWD_cstream __ClosedStreams |
#define _RWD_iob __iob |
#if !defined(__NETWARE__) |
#define _RWD_threadid _threadid |
#endif |
#define _RWD_environ environ |
#define _RWD_wenviron _wenviron |
#define _RWD_env_mask __env_mask |
#define _RWD_abort __abort |
#define _RWD_sigtab __SIGNALTABLE |
#define _RWD_FPE_handler_exit __FPE_handler_exit |
#define _RWD_FPE_handler __FPE_handler |
#define _RWD_fmode _fmode |
#if !defined(__NETWARE__) |
#define _RWD_umaskval __umaskval |
#define _RWD_cbyte _cbyte |
#define _RWD_cbyte2 _cbyte2 |
#define _RWD_child _child |
#define _RWD_amblksiz _amblksiz |
#define _RWD_curbrk _curbrk |
#define _RWD_dynend _dynend |
#define _RWD_psp _psp |
#endif |
#if !defined (_NETWARE_LIBC) |
#define _RWD_stacktop _STACKTOP |
#endif |
#if !defined(__QNX__) && !defined(__LINUX__) |
#define _RWD_Save8087 __Save8087 |
#define _RWD_Rest8087 __Rest8087 |
#endif |
#define _RWD_8087cw _8087cw |
#define _RWD_no87 _no87 |
#define _RWD_8087 _8087 |
#define _RWD_real87 _real87 |
#if !defined(__NETWARE__) |
#define _RWD_HShift _HShift |
#define _RWD_osmajor _osmajor |
#define _RWD_osminor _osminor |
#define _RWD_osmode _osmode |
#if defined(__NT__) |
#define _RWD_osbuild _osbuild |
#define _RWD_osver _osver |
#define _RWD_winmajor _winmajor |
#define _RWD_winminor _winminor |
#define _RWD_winver _winver |
#endif |
#define _RWD_doserrno _DOSERRNO |
#endif |
#define _RWD_tmpfnext __tmpfnext |
#if !defined(_RWD_errno) |
#define _RWD_errno _ERRNO |
#endif |
#define _RWD_nexttok _NEXTTOK |
#define _RWD_nextftok _NEXTFTOK |
#define _RWD_nextmbtok _NEXTMBTOK |
#define _RWD_nextmbftok _NEXTMBFTOK |
#define _RWD_nextwtok _NEXTWTOK |
#define _RWD_tzname tzname |
#define _RWD_timezone timezone |
#define _RWD_daylight daylight |
#define _RWD_dst_adjust __dst_adjust |
#define _RWD_start_dst __start_dst |
#define _RWD_end_dst __end_dst |
#define _RWD_asctime _RESULT |
#ifdef __SW_BM |
#define _RWD_cvtbuf __THREADDATAPTR->__cvt_buffer |
#else |
#define _RWD_cvtbuf cvt_buffer |
#endif |
#if defined(__NETWARE__) |
#define _RWD_ioexit __ioexit |
#define _RWD_tmpnambuf (__THREADDATAPTR->__tmpnambuf) |
#define _RWD_randnextinit (__THREADDATAPTR->__randnextinit) |
#else |
#define _RWD_tmpnambuf _tmpname |
#define _RWD_randnextinit THREAD_PTR.__randnextinit |
#endif |
#define _RWD_stacklow _STACKLOW |
#define _RWD_randnext _RANDNEXT |
#define _RWD_ThreadData _ThreadData |
#define _RWD_StaticInitSema _StaticInitSema |
#define _RWD_PureErrorFlag _PureErrorFlag |
#define _RWD_UndefVfunFlag _UndefVfunFlag |
#define _RWD_ModuleInit _ModuleInit |
/* |
For the sake of efficiency, tell the compiler |
that the __exit... routines never return. |
*/ |
_WCRTLINK extern void __exit( unsigned ); |
#if defined(_M_IX86) |
#pragma aux __exit aborts; |
#endif |
extern void (*__abort)( void ); // Defined in abort.c |
extern void __terminate( void ); // Defined in abort.c |
#endif // _RTDATA_H_INCLUDED |
/programs/develop/open watcom/trunk/clib/crt/rtinit.h |
---|
0,0 → 1,131 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Structures for run-time initialization/finalization. |
* |
****************************************************************************/ |
#ifndef __RTINIT_H__ |
#define __RTINIT_H__ |
#include "langenvd.h" |
#if defined( __PPC__ ) |
#define __TGT_SYS __TGT_SYS_AXP_PPC |
typedef unsigned __type_rtp; |
typedef unsigned __type_pad; |
typedef void( *__type_rtn ) ( void ); |
#elif defined( __AXP__ ) |
#define __TGT_SYS __TGT_SYS_AXP_NT |
typedef unsigned __type_rtp; |
typedef unsigned __type_pad; |
typedef void( *__type_rtn ) ( void ); |
#elif defined( __MIPS__ ) |
#define __TGT_SYS __TGT_SYS_MIPS |
typedef unsigned __type_rtp; |
typedef unsigned __type_pad; |
typedef void( *__type_rtn ) ( void ); |
#else |
#define __TGT_SYS __TGT_SYS_X86 |
typedef unsigned char __type_rtp; |
typedef unsigned short __type_pad; |
#if defined( __386__ ) |
typedef void __near( *__type_rtn ) ( void ); |
#else |
typedef void( *__type_rtn ) ( void ); |
#endif |
#endif |
#include "langenv.h" |
#if defined( __MEDIUM__ ) || defined( __LARGE__ ) || defined( __HUGE__ ) |
#define __LARGE_CODE__ |
#endif |
// initialization progresses from highest priority to lowest |
// finalization progresses from lowest to highest |
#pragma pack( 1 ) |
struct rt_init // structure placed in XI/YI segment |
{ |
__type_rtp rtn_type; // - near=0/far=1 routine indication |
// also used when walking table to flag |
// completed entries |
__type_rtp priority; // - priority (0-highest 255-lowest) |
__type_rtn rtn; // - routine |
#if !( defined( __LARGE_CODE__ ) || defined( __386__ ) ) || defined( COMP_CFG_COFF ) |
__type_pad padding; // - padding, when small code ptr |
// or when risc cpu |
#endif |
}; |
#pragma pack() |
#if defined( M_I86 ) |
#if defined( __LARGE_CODE__ ) /* segmented large code models */ |
#define YIXI( seg, label, routine, priority ) \ |
struct rt_init __based( __segname( seg ) ) label = \ |
{ 1, priority, routine }; |
#else /* other segmented models */ |
#define YIXI( seg, label, routine, priority ) \ |
struct rt_init __based( __segname( seg ) ) label = \ |
{ 0, priority, routine, 0 }; |
#endif |
#else /* non-segmented architectures */ |
#define YIXI( seg, label, routine, priority ) \ |
struct rt_init __based( __segname( seg ) ) label = \ |
{ 0, priority, routine }; |
#endif |
/* |
Use these when you want a global label for the XI/YI structure |
*/ |
#define XI( label, routine, priority ) YIXI( TS_SEG_XI, label, routine, priority ) |
#define YI( label, routine, priority ) YIXI( TS_SEG_YI, label, routine, priority ) |
/* |
Use these when you don't care about the label on the XI/YI structure |
*/ |
#define __ANON( x ) __anon ## x |
#define ANON( x ) __ANON( x ) |
#define AXI( routine, priority ) static XI( ANON( __LINE__ ), routine, priority ) |
#define AYI( routine, priority ) static YI( ANON( __LINE__ ), routine, priority ) |
enum { |
INIT_PRIORITY_THREAD = 1, // priority for thread data init |
INIT_PRIORITY_FPU = 2, // priority for FPU/EMU init |
INIT_PRIORITY_RUNTIME = 10, // priority for run/time initialization |
INIT_PRIORITY_IOSTREAM = 20, // priority for IOSTREAM |
INIT_PRIORITY_LIBRARY = 32, // default library-initialization priority |
INIT_PRIORITY_PROGRAM = 64, // default program-initialization priority |
FINI_PRIORITY_DTOR = 40, // priority for module DTOR |
DTOR_PRIORITY = 40, // priority for module DTOR |
FINI_PRIORITY_EXIT = 16 // when exit() is called, functions between |
// 255 and this are called, the rest of the |
// fini routines are called from __exit(). |
}; |
/* have to turn off, or we get unref'd warnings for AXI & AYI stuff */ |
#pragma off( unreferenced ) |
#endif |
/programs/develop/open watcom/trunk/clib/crt/save8087.c |
---|
0,0 → 1,40 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE |
* DESCRIBE IT HERE! |
* |
****************************************************************************/ |
#include "variety.h" |
#include "87state.h" |
#include "rtdata.h" |
static void _do_nothing( _87state *st ) {} |
void (*_RWD_Save8087)(_87state *) = _do_nothing; |
void (*_RWD_Rest8087)(_87state *) = _do_nothing; |
/programs/develop/open watcom/trunk/clib/crt/segdefns.asm |
---|
0,0 → 1,140 |
;***************************************************************************** |
;* |
;* Open Watcom Project |
;* |
;* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
;* |
;* ======================================================================== |
;* |
;* This file contains Original Code and/or Modifications of Original |
;* Code as defined in and that are subject to the Sybase Open Watcom |
;* Public License version 1.0 (the 'License'). You may not use this file |
;* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
;* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
;* provided with the Original Code and Modifications, and is also |
;* available at www.sybase.com/developer/opensource. |
;* |
;* The Original Code and all software distributed under the License are |
;* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
;* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
;* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
;* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
;* NON-INFRINGEMENT. Please see the License for the specific language |
;* governing rights and limitations under the License. |
;* |
;* ======================================================================== |
;* |
;* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE |
;* DESCRIBE IT HERE! |
;* |
;***************************************************************************** |
; |
; segment definitions for WATCOM C/C++32 |
; |
include langenv.inc |
name segdefns |
.386p |
assume nothing |
if COMP_CFG_COFF |
DGROUP group _NULL,_AFTERNULL,CONST,_DATA,DATA,_BSS,STACK |
else |
ifdef __LINUX__ |
DGROUP group _NULL,_AFTERNULL,CONST,_DATA,DATA,TIB,TI,TIE,XIB,XI,XIE,YIB,YI,YIE,_BSS |
else |
DGROUP group _NULL,_AFTERNULL,CONST,_DATA,DATA,_BSS,STACK,TIB,TI,TIE,XIB,XI,XIE,YIB,YI,YIE |
endif |
endif |
; this guarantees that no function pointer will equal NULL |
; (WLINK will keep segment 'BEGTEXT' in front) |
; This segment must be at least 4 bytes in size to avoid confusing the |
; signal function. |
BEGTEXT segment use32 word public 'CODE' |
assume cs:BEGTEXT |
forever label near |
int 3h |
jmp short forever |
; NOTE that __begtext needs to be at offset 3 |
; don't move it. i.e. don't change any code before here. |
___begtext label byte |
nop |
nop |
nop |
nop |
public ___begtext |
assume cs:nothing |
BEGTEXT ends |
assume ds:DGROUP |
_NULL segment para public 'BEGDATA' |
__nullarea label word |
db 01h,01h,01h,00h |
public __nullarea |
_NULL ends |
_AFTERNULL segment word public 'BEGDATA' |
_AFTERNULL ends |
CONST segment word public 'DATA' |
CONST ends |
if COMP_CFG_COFF eq 0 |
TIB segment byte public 'DATA' |
TIB ends |
TI segment byte public 'DATA' |
TI ends |
TIE segment byte public 'DATA' |
TIE ends |
XIB segment word public 'DATA' |
_Start_XI label byte |
public "C",_Start_XI |
XIB ends |
XI segment word public 'DATA' |
XI ends |
XIE segment word public 'DATA' |
_End_XI label byte |
public "C",_End_XI |
XIE ends |
YIB segment word public 'DATA' |
_Start_YI label byte |
public "C",_Start_YI |
YIB ends |
YI segment word public 'DATA' |
YI ends |
YIE segment word public 'DATA' |
_End_YI label byte |
public "C",_End_YI |
YIE ends |
endif |
_DATA segment word public 'DATA' |
_DATA ends |
DATA segment word public 'DATA' |
DATA ends |
_BSS segment word public 'BSS' |
_BSS ends |
ifndef __LINUX__ |
STACK_SIZE equ 4096h |
STACK segment para stack 'STACK' |
db (STACK_SIZE) dup(?) |
STACK ends |
endif |
_TEXT segment use32 word public 'CODE' |
_TEXT ends |
end |
/programs/develop/open watcom/trunk/clib/crt/setefg.c |
---|
0,0 → 1,48 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Routine to bring in real floating-point formatting code. |
* |
****************************************************************************/ |
#include "variety.h" |
#include <stdio.h> |
#include "ftos.h" |
#include "farsupp.h" |
/* This routine will be called by cstart if "_fltused" is referenced. */ |
void __setEFGfmt( void ) |
{ |
#ifdef __SW_BR |
__EFG_printf = __get_EFG_Format(); |
__EFG_scanf = __get__cnvs2d(); /* 27-mar-90 */ |
#else |
__EFG_printf = _EFG_Format; |
__EFG_scanf = __cnvs2d; /* 27-mar-90 */ |
#endif |
} |
/programs/develop/open watcom/trunk/clib/crt/stacklow.h |
---|
0,0 → 1,59 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE |
* DESCRIBE IT HERE! |
* |
****************************************************************************/ |
#ifndef _STACKLOW_H_INCLUDED |
#define _STACKLOW_H_INCLUDED |
#define __Align4K( x ) (((x)+0xfffL) & ~0xfffL ) |
#if defined(_M_IX86) |
extern unsigned _SP(); |
#if defined(__386__) |
#pragma aux _SP = "mov eax,esp" value [eax]; |
#else |
#pragma aux _SP = "mov ax,sp" value [ax]; |
#endif |
#endif |
#if defined(__NT__) |
void __init_stack_limits( unsigned *stacklow, unsigned *stacktop ); |
#endif |
#if defined(__SW_BM) |
#include "thread.h" |
#define _STACKLOW (__THREADDATAPTR->__stklowP) |
#else |
extern unsigned _STACKLOW; |
#endif |
#endif |
/programs/develop/open watcom/trunk/clib/crt/stackwnt.c |
---|
0,0 → 1,68 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Dummy stack check routines for non-x86 Win32 platforms. |
* |
****************************************************************************/ |
#include "variety.h" |
#include "rtdata.h" |
#include "stacklow.h" |
#include "exitwmsg.h" |
#if defined(__AXP__) || defined(__PPC__) |
void _init_stk( void ) |
{ |
} |
_WCRTLINK unsigned __CHK( unsigned i ) |
{ |
return( i ); |
} |
_WCRTLINK void __GRO( unsigned i ) |
{ |
i = i; |
} |
_WCRTLINK void __STKOVERFLOW( void ) |
{ |
__fatal_runtime_error( "stack overflow", -1 ); |
} |
#endif |
_WCRTLINK unsigned stackavail() |
{ |
#if defined(__AXP__) || defined(__PPC__) |
unsigned _SP; |
_SP = (unsigned)&_SP; |
return( _SP - _RWD_stacklow ); |
#else |
return( _SP() - _RWD_stacklow ); |
#endif |
} |
/programs/develop/open watcom/trunk/clib/crt/stkwnt.asm |
---|
0,0 → 1,120 |
;***************************************************************************** |
;* |
;* Open Watcom Project |
;* |
;* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
;* |
;* ======================================================================== |
;* |
;* This file contains Original Code and/or Modifications of Original |
;* Code as defined in and that are subject to the Sybase Open Watcom |
;* Public License version 1.0 (the 'License'). You may not use this file |
;* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
;* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
;* provided with the Original Code and Modifications, and is also |
;* available at www.sybase.com/developer/opensource. |
;* |
;* The Original Code and all software distributed under the License are |
;* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
;* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
;* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
;* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
;* NON-INFRINGEMENT. Please see the License for the specific language |
;* governing rights and limitations under the License. |
;* |
;* ======================================================================== |
;* |
;* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE |
;* DESCRIBE IT HERE! |
;* |
;***************************************************************************** |
include mdef.inc |
include struct.inc |
include xinit.inc |
include exitwmsg.inc |
modstart stk |
datasegment |
extrn "C",_STACKLOW : dword |
msg db "Stack Overflow!", 0dh, 0ah, 0 |
enddata |
xinit _init_stk,DEF_PRIORITY |
assume ds:DGROUP |
defp _init_stk |
ret ; return |
endproc _init_stk |
xdefp __CHK |
defpe __CHK ; new style stack check |
xchg eax,4[esp] ; get parm in eax |
call __STK ; call stack checker |
mov eax,4[esp] ; restore eax |
ret 4 |
endproc __CHK |
xdefp __STK |
defpe __STK |
push eax ; save parm for __GRO routine |
_guess ; guess: no overflow |
cmp eax,esp ; - quit if user asking for too much |
_quif ae ; - ... |
sub eax,esp ; - calculate new low point |
neg eax ; - calc what new SP would be |
cmp eax,_STACKLOW ; - quit if too much |
_quif be ; - ... |
call __GRO ; - return |
ret |
_endguess ; endguess |
__STKOVERFLOW: |
xdefp "C",__STKOVERFLOW |
pop eax ; pop the stack |
ifdef __STACK__ |
push 1 ; ... |
push offset msg ; print the error message |
else |
mov eax,offset msg ; print the error message |
mov edx,1 ; ... |
endif |
call __fatal_runtime_error ; ... |
endproc __STK |
xdefp __GRO |
defpe __GRO ; dummy function to resolve symbol |
push eax ; save regs |
push ebx ; ... |
mov eax,12[esp] ; get size to grow by |
mov ebx,-4 ; initialiaze index |
lup: ; do { |
mov [esp+ebx],ebx ; - touch that stack page |
sub ebx,1000H ; - decrement by 4k |
sub eax,1000H ; - decrement by 4k |
jg lup ; } while stack left to go |
pop ebx ; restore regs |
pop eax ; ... |
ret 4 ; return to caller |
endproc __GRO |
xdefp __alloca_probe |
; on entry eax is size of stack to grow |
; on exit esp has been advanced to new size |
defpe __alloca_probe ; ms compatible function |
push eax ; size parm to __GRO |
call __GRO |
push eax ; save size |
lea eax,8[esp] ; get esp value to adjust |
sub eax,[esp] ; carve off piece of stack |
xchg eax,esp ; set new esp |
mov eax,4[eax] ; snag return address |
jmp eax ; return to caller |
endproc __alloca_probe |
endmod |
end |
/programs/develop/open watcom/trunk/clib/crt/struct.inc |
---|
0,0 → 1,220 |
;***************************************************************************** |
;* |
;* Open Watcom Project |
;* |
;* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
;* |
;* ======================================================================== |
;* |
;* This file contains Original Code and/or Modifications of Original |
;* Code as defined in and that are subject to the Sybase Open Watcom |
;* Public License version 1.0 (the 'License'). You may not use this file |
;* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
;* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
;* provided with the Original Code and Modifications, and is also |
;* available at www.sybase.com/developer/opensource. |
;* |
;* The Original Code and all software distributed under the License are |
;* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
;* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
;* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
;* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
;* NON-INFRINGEMENT. Please see the License for the specific language |
;* governing rights and limitations under the License. |
;* |
;* ======================================================================== |
;* |
;* Description: Structured macros for MASM/WASM. |
;* |
;***************************************************************************** |
__label = 0 |
__depth = 0 |
__inner_loop = 0 |
_guess macro name |
__depth = __depth + 1 |
__label = __label + 1 |
_set __astk,%__depth,__label,<> |
__label = __label + 1 |
_set __estk,%__depth,__label,<> |
ifnb <name> |
name = __label |
endif |
endm |
_quif macro cc,name |
ifnb <name> |
_set __elbl,,name,<> |
_j cc,_l,%__elbl |
else |
_set __albl,,__astk,%__depth |
_j cc,_l,%__albl |
endif |
endm |
_quit macro name |
_quif ,name |
endm |
_admit macro |
_set __albl,,__astk,%__depth |
__label = __label + 1 |
_set __astk,%__depth,__label,<> |
_set __elbl,,__estk,%__depth |
_j ,_l,%__elbl |
_label _l,%__albl |
endm |
_endguess macro |
_set __albl,,__astk,%__depth |
_label _l,%__albl |
_set __elbl,,__estk,%__depth |
_label _l,%__elbl |
__depth = __depth - 1 |
endm |
_loop macro name |
_guess name |
_set __albl,,__astk,%__depth |
_label _m,%__albl |
_set __elbl,,__estk,%__depth |
_label _m,%__elbl |
_set __llbl,%__depth,%__inner_loop,<> |
_set __inner_loop,,%__depth,<> |
endm |
_loopif macro cc,name |
ifnb <name> |
_set __elbl,,name,<> |
_j cc,_m,%__elbl |
else |
_set __albl,,__astk,%__inner_loop |
_j cc,_m,%__albl |
endif |
endm |
_until macro cc |
_set __albl,,__astk,%__depth |
_jn cc,_m,%__albl |
_set __inner_loop,,__llbl,%__depth |
_endguess |
endm |
_endloop macro |
_set __albl,,__astk,%__depth |
_j ,_m,%__albl |
_set __inner_loop,,__llbl,%__depth |
_endguess |
endm |
_if macro cc |
_guess |
_set __albl,,__astk,%__depth |
_jn cc,_l,%__albl |
endm |
_else macro |
_admit |
endm |
_endif macro |
_endguess |
endm |
_set macro base1,ext1,base2,ext2 |
base1&ext1 = base2&ext2 |
endm |
_label macro base,ext |
base&ext: |
endm |
_j macro cc,base,ext |
j&cc base&ext |
endm |
_jn macro cc,base,ext |
jn&cc base&ext |
endm |
jnna macro label |
ja label |
endm |
jnnae macro label |
jae label |
endm |
jnnb macro label |
jb label |
endm |
jnnbe macro label |
jbe label |
endm |
jnnc macro label |
jc label |
endm |
jnne macro label |
je label |
endm |
jnng macro label |
jg label |
endm |
jnnge macro label |
jge label |
endm |
jnnl macro label |
jl label |
endm |
jnnle macro label |
jle label |
endm |
jnno macro label |
jo label |
endm |
jnnp macro label |
jp label |
endm |
jnns macro label |
js label |
endm |
jnnz macro label |
jz label |
endm |
jnpe macro label |
jpo label |
endm |
jnpo macro label |
jpe label |
endm |
j macro label |
jmp label |
endm |
jn macro label |
nop |
endm |
_shl macro reg,count |
add reg,reg |
endm |
_rcl macro reg,count |
adc reg,reg |
endm |
/programs/develop/open watcom/trunk/clib/crt/variety.h |
---|
0,0 → 1,293 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Configuration for clib builds. |
* |
****************************************************************************/ |
#ifndef _VARIETY_H_INCLUDED |
#define _VARIETY_H_INCLUDED |
// |
// Note: for the DLL versions of the runtime libraries, this file must be |
// included before any of the runtime header files. |
// |
#ifndef _COMDEF_H_INCLUDED |
#include <_comdef.h> |
#endif |
// specialized data reference macro |
#define _HUGEDATA _WCDATA |
// memory model macros |
#if defined(__SMALL__) |
#define __SMALL_DATA__ |
#define __SMALL_CODE__ |
#elif defined(__FLAT__) |
#define __SMALL_DATA__ |
#define __SMALL_CODE__ |
#elif defined(__MEDIUM__) |
#define __SMALL_DATA__ |
#define __BIG_CODE__ |
#elif defined(__COMPACT__) |
#define __BIG_DATA__ |
#define __SMALL_CODE__ |
#elif defined(__LARGE__) |
#define __BIG_DATA__ |
#define __BIG_CODE__ |
#elif defined(__HUGE__) |
#define __BIG_DATA__ |
#define __BIG_CODE__ |
#elif defined(__AXP__) || defined(__PPC__) || defined(__MIPS__) |
// these effectively use near data references |
#define __SMALL_DATA__ |
#define __SMALL_CODE__ |
#else |
#error unable to configure memory model |
#endif |
// operating system and processor macros |
#if defined(__GENERIC__) |
#if defined(__386__) |
#define __PROTECT_MODE__ |
#define __GENERIC_386__ |
#elif defined(M_I86) |
#define __REAL_MODE__ |
#define __GENERIC_086__ |
#else |
#error unrecognized processor for GENERIC |
#endif |
#elif defined(__OS2__) |
#if defined(M_I86) |
#define __REAL_MODE__ |
#define __OS2_286__ |
#elif defined(__386__) |
#define __PROTECT_MODE__ |
#define __OS2_386__ |
#define __WARP__ |
#elif defined(__PPC__) |
#define __PROTECT_MODE__ |
#define __OS2_PPC__ |
#define __WARP__ |
#else |
#error unrecognized processor for OS2 |
#endif |
#elif defined(__NT__) |
#if !defined(WIN32_LEAN_AND_MEAN) && !defined(WIN32_NICE_AND_FAT) |
#define WIN32_LEAN_AND_MEAN |
#endif |
#define __PROTECT_MODE__ |
#if defined(__386__) |
#define __NT_386__ |
#elif defined(__AXP__) |
#define __NT_AXP__ |
#elif defined(__PPC__) |
#define __NT_PPC__ |
#else |
#error unrecognized processor for NT |
#endif |
#elif defined(__WINDOWS__) || defined(__WINDOWS_386__) |
#define __PROTECT_MODE__ |
#if defined(__386__) |
#define __WINDOWS__ |
#elif defined(M_I86) |
#define __WINDOWS_286__ |
#else |
#error unrecognized processor for WINDOWS |
#endif |
#elif defined(__DOS__) |
#if defined(__386__) |
#define __PROTECT_MODE__ |
#define __DOS_386__ |
#elif defined(M_I86) |
#define __REAL_MODE__ |
#define __DOS_086__ |
#else |
#error unrecognized processor for DOS |
#endif |
#elif defined(__OSI__) |
#if defined(__386__) |
#define __PROTECT_MODE__ |
#define __OSI_386__ |
#else |
#error unrecognized processor for OSI |
#endif |
#elif defined(__QNX__) |
#define __PROTECT_MODE__ |
#define __UNIX__ |
#if defined(__386__) |
#define __QNX_386__ |
#elif defined(M_I86) |
#define __QNX_286__ |
#else |
#error unrecognized processor for QNX |
#endif |
#elif defined(__LINUX__) |
#define __PROTECT_MODE__ |
#define __UNIX__ |
#if defined(__386__) |
#define __LINUX_386__ |
#elif defined(__PPC__) |
#define __LINUX_PPC__ |
#elif defined(__MIPS__) |
#define __LINUX_MIPS__ |
#else |
#error unrecognized processor for Linux |
#endif |
#elif defined(__NETWARE__) |
#define __PROTECT_MODE__ |
#if defined(__386__) |
#define __NETWARE_386__ |
#else |
#error unrecognized processor for NETWARE |
#endif |
#else |
#error unable to configure operating system and processor |
#endif |
// handle building dll's with appropriate linkage |
#if !defined(__SW_BR) && (defined(__WARP__) || defined(__NT__)) |
#if defined(__MAKE_DLL_CLIB) |
#undef _WCRTLINK |
#undef _WCIRTLINK |
#undef _WCRTLINKD |
#undef _WMRTLINK |
#undef _WMIRTLINK |
#undef _WMRTLINKD |
#undef _WPRTLINK |
#undef _WPIRTLINK |
#undef _WPRTLINKD |
#if defined(__NT__) |
#define _WCRTLINK __declspec(dllexport) _WRTLCALL |
#define _WCIRTLINK __declspec(dllexport) _WRTLCALL |
#define _WCRTLINKD __declspec(dllexport) |
#define _WMRTLINK __declspec(dllimport) _WRTLCALL |
#define _WMIRTLINK __declspec(dllimport) _WRTLCALL |
#define _WMRTLINKD __declspec(dllimport) |
#define _WPRTLINK __declspec(dllimport) _WRTLCALL |
#define _WPIRTLINK __declspec(dllimport) _WRTLCALL |
#define _WPRTLINKD __declspec(dllimport) |
#elif defined(__WARP__) |
#define _WCRTLINK __declspec(dllexport) _WRTLCALL |
#define _WCIRTLINK __declspec(dllexport) _WRTLCALL |
#define _WCRTLINKD __declspec(dllexport) |
#define _WMRTLINK _WRTLCALL |
#define _WMIRTLINK _WRTLCALL |
#define _WMRTLINKD |
#define _WPRTLINK _WRTLCALL |
#define _WPIRTLINK _WRTLCALL |
#define _WPRTLINKD |
#endif |
#elif defined(__MAKE_DLL_MATHLIB) |
#define _RTDLL |
#undef _WCRTLINK |
#undef _WCIRTLINK |
#undef _WCRTLINKD |
#undef _WMRTLINK |
#undef _WMIRTLINK |
#undef _WMRTLINKD |
#undef _WPRTLINK |
#undef _WPIRTLINK |
#undef _WPRTLINKD |
#if defined(__NT__) |
#define _WCRTLINK __declspec(dllimport) _WRTLCALL |
#define _WCIRTLINK __declspec(dllimport) _WRTLCALL |
#define _WCRTLINKD __declspec(dllimport) |
#define _WMRTLINK __declspec(dllexport) _WRTLCALL |
#define _WMIRTLINK __declspec(dllexport) _WRTLCALL |
#define _WMRTLINKD __declspec(dllexport) |
#define _WPRTLINK __declspec(dllimport) _WRTLCALL |
#define _WPIRTLINK __declspec(dllimport) _WRTLCALL |
#define _WPRTLINKD __declspec(dllimport) |
#elif defined(__WARP__) |
#define _WCRTLINK _WRTLCALL |
#define _WCIRTLINK _WRTLCALL |
#define _WCRTLINKD |
#define _WMRTLINK __declspec(dllexport) _WRTLCALL |
#define _WMIRTLINK __declspec(dllexport) _WRTLCALL |
#define _WMRTLINKD __declspec(dllexport) |
#define _WPRTLINK _WRTLCALL |
#define _WPIRTLINK _WRTLCALL |
#define _WPRTLINKD |
#endif |
#elif defined(__MAKE_DLL_CPPLIB) |
#define _RTDLL |
#undef _WCRTLINK |
#undef _WCIRTLINK |
#undef _WCRTLINKD |
#undef _WMRTLINK |
#undef _WMIRTLINK |
#undef _WMRTLINKD |
#undef _WPRTLINK |
#undef _WPIRTLINK |
#undef _WPRTLINKD |
#if defined(__NT__) |
#define _WCRTLINK __declspec(dllimport) _WRTLCALL |
#define _WCIRTLINK __declspec(dllimport) _WRTLCALL |
#define _WCRTLINKD __declspec(dllimport) |
#define _WMRTLINK __declspec(dllimport) _WRTLCALL |
#define _WMIRTLINK __declspec(dllimport) _WRTLCALL |
#define _WMRTLINKD __declspec(dllimport) |
#define _WPRTLINK __declspec(dllexport) _WRTLCALL |
#define _WPIRTLINK __declspec(dllexport) _WRTLCALL |
#define _WPRTLINKD __declspec(dllexport) |
#elif defined(__WARP__) |
#define _WCRTLINK _WRTLCALL |
#define _WCIRTLINK _WRTLCALL |
#define _WCRTLINKD |
#define _WMRTLINK _WRTLCALL |
#define _WMIRTLINK _WRTLCALL |
#define _WMRTLINKD |
#define _WPRTLINK __declspec(dllexport) _WRTLCALL |
#define _WPIRTLINK __declspec(dllexport) _WRTLCALL |
#define _WPRTLINKD __declspec(dllexport) |
#endif |
#endif |
#endif |
#define __ptr_check( p, a ) |
#define __null_check( p, a ) |
#define __stream_check( s, a ) |
#define __ROUND_UP_SIZE( __x, __amt ) (((__x)+((__amt)-1))&(~((__amt)-1))) |
/// |
/// This doesn't work for far pointer's |
/// |
///#define __ROUND_UP_PTR( __x, __amt ) ((void *)__ROUND_UP_SIZE((unsigned)(__x),__amt)) |
#if defined(M_I86) |
#define __ALIGN_SIZE( __x ) __ROUND_UP_SIZE( __x, 2 ) |
// #define __ALIGN_PTR( __x ) __ROUND_UP_PTR( __x, 2 ) |
#elif defined(__386__) |
#define __ALIGN_SIZE( __x ) __ROUND_UP_SIZE( __x, 4 ) |
/// #define __ALIGN_PTR( __x ) __ROUND_UP_PTR( __x, 4 ) |
#else |
#define __ALIGN_SIZE( __x ) __ROUND_UP_SIZE( __x, 8 ) |
// #define __ALIGN_PTR( __x ) __ROUND_UP_PTR( __x, 8 ) |
#endif |
#endif |
/programs/develop/open watcom/trunk/clib/crt/widechar.h |
---|
0,0 → 1,74 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Macros for single source wide/narrow character code. |
* |
****************************************************************************/ |
#ifndef _WIDECHAR_H_INCLUDED |
#define _WIDECHAR_H_INCLUDED |
#include "variety.h" |
#include <stdlib.h> /* for wchar_t and _atouni */ |
/*** Define some handy macros ***/ |
#ifdef __WIDECHAR__ |
#define DIR_TYPE struct _wdirent |
#define CHAR_TYPE wchar_t |
#define UCHAR_TYPE wchar_t |
#define INTCHAR_TYPE wint_t |
#define INT_WC_TYPE wchar_t |
#define VOID_WC_TYPE wchar_t |
#define NULLCHAR 0 |
#define STRING(a) L##a |
#define _AToUni(p1,p2) _atouni(p1,p2) |
#define IS_ASCII(c) ( (c & 0xff00) == 0 ) |
#define TO_ASCII(c) ( c ) |
#define __F_NAME(n1,n2) n2 |
#define UNICODE |
#define _UNICODE |
#define __UNICODE__ |
#else |
#define DIR_TYPE struct dirent |
#define CHAR_TYPE char |
#define UCHAR_TYPE unsigned char |
#define INTCHAR_TYPE int |
#define INT_WC_TYPE int |
#define VOID_WC_TYPE void |
#define NULLCHAR '\0' |
#define STRING(a) a |
#define _AToUni(p1,p2) (p2) |
#define IS_ASCII(c) ( 1 ) |
#define TO_ASCII(c) ( (unsigned char)c ) |
#define __F_NAME(n1,n2) n1 |
#endif |
#define CHARSIZE (sizeof( CHAR_TYPE )) |
/* must be the larger of char and wchar_t */ |
#define MAX_CHAR_TYPE wchar_t |
#endif |
/programs/develop/open watcom/trunk/clib/crt/xfloat.h |
---|
0,0 → 1,479 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: C/C++ run-time library floating-point definitions. |
* |
****************************************************************************/ |
#ifndef _XFLOAT_H_INCLUDED |
#define _XFLOAT_H_INCLUDED |
#include <stddef.h> // for wchar_t |
#include <float.h> // for LDBL_DIG |
#ifdef __cplusplus |
extern "C" { |
#endif |
#if (defined(__386__) || defined(M_I86)) && defined(__WATCOMC__) |
#define _LONG_DOUBLE_ |
#endif |
typedef struct { // This layout matches Intel 8087 |
#ifdef _LONG_DOUBLE_ |
unsigned long low_word; // - low word of fraction |
unsigned long high_word; // - high word of fraction |
unsigned short exponent; // - exponent and sign |
#else // use this for all other 32-bit RISC |
union { |
double value; // - double value |
unsigned long word[2];// - so we can access bits |
}; |
#endif |
} long_double; |
typedef struct { // Layout of IEEE 754 double (FD) |
union { |
double value; // - double value |
unsigned long word[2];// - so we can access bits |
}; |
} float_double; |
typedef struct { // Layout of IEEE 754 single (FS) |
union { |
float value; // - double value |
unsigned long word; // - so we can access bits |
}; |
} float_single; |
/* NB: The following values *must* match FP_ macros in math.h! */ |
enum ld_classification { |
__ZERO = 0, |
__DENORMAL = 1, |
__NONZERO = 2, |
__NAN = 3, |
__INFINITY = 4 |
}; |
enum ldcvt_flags { |
E_FMT = 0x0001, // 'E' format |
F_FMT = 0x0002, // 'F' format |
G_FMT = 0x0004, // 'G' format |
F_CVT = 0x0008, // __cvt routine format rules |
F_DOT = 0x0010, // always put '.' in result |
LONG_DOUBLE = 0x0020, // number is true long double |
NO_TRUNC = 0x0040, // always provide ndigits in buffer |
IN_CAPS = 0x0080, // 'inf'/'nan' is uppercased |
}; |
typedef struct cvt_info { |
int ndigits; // INPUT: number of digits |
int scale; // INPUT: FORTRAN scale factor |
int flags; // INPUT: flags (see ldcvt_flags) |
int expchar; // INPUT: exponent character to use |
int expwidth; // INPUT/OUTPUT: number of exponent digits |
int sign; // OUTPUT: 0 => +ve; otherwise -ve |
int decimal_place; // OUTPUT: position of '.' |
int n1; // OUTPUT: number of leading characters |
int nz1; // OUTPUT: followed by this many '0's |
int n2; // OUTPUT: followed by these characters |
int nz2; // OUTPUT: followed by this many '0's |
} CVT_INFO; |
_WMRTLINK extern void __LDcvt( |
long_double *pld, // pointer to long_double |
CVT_INFO *cvt, // conversion info |
char *buf ); // buffer |
#if defined( __WATCOMC__ ) |
_WMRTLINK extern int __Strtold( |
const char *bufptr, |
long_double *pld, |
char **endptr ); |
#endif |
extern int __LDClass( long_double * ); |
extern void __ZBuf2LD(char _WCNEAR *, long_double _WCNEAR *); |
extern void _LDScale10x(long_double _WCNEAR *,int); |
_WMRTLINK extern void __cnvd2ld( double _WCNEAR *src, long_double _WCNEAR *dst ); |
_WMRTLINK extern void __cnvs2d( char *buf, double *value ); |
_WMRTLINK extern int __cnvd2f( double *src, float *tgt ); |
#ifdef _LONG_DOUBLE_ |
extern void __iLDFD(long_double _WCNEAR *, double _WCNEAR *); |
extern void __iLDFS(long_double _WCNEAR *, float _WCNEAR *); |
extern void __iFDLD(double _WCNEAR *,long_double _WCNEAR *); |
extern void __iFSLD(float _WCNEAR *,long_double _WCNEAR *); |
extern long __LDI4(long_double _WCNEAR *); |
extern void __I4LD(long,long_double _WCNEAR *); |
extern void __U4LD(unsigned long,long_double _WCNEAR *); |
extern void __FLDA(long_double _WCNEAR *,long_double _WCNEAR *,long_double _WCNEAR *); |
extern void __FLDS(long_double _WCNEAR *,long_double _WCNEAR *,long_double _WCNEAR *); |
extern void __FLDM(long_double _WCNEAR *,long_double _WCNEAR *,long_double _WCNEAR *); |
extern void __FLDD(long_double _WCNEAR *,long_double _WCNEAR *,long_double _WCNEAR *); |
extern int __FLDC(long_double _WCNEAR *,long_double _WCNEAR *); |
#endif |
#ifdef __WATCOMC__ |
#if defined(__386__) |
#pragma aux __ZBuf2LD "*" parm caller [eax] [edx]; |
#if defined(__FPI__) |
extern unsigned __Get87CW(void); |
extern void __Set87CW(unsigned short); |
#pragma aux __Get87CW = \ |
"push 0"\ |
float "fstcw [esp]"\ |
float "fwait"\ |
"pop eax"\ |
value [eax]; |
#pragma aux __Set87CW = \ |
"push eax"\ |
float "fldcw [esp]"\ |
"pop eax"\ |
parm caller [eax]; |
#pragma aux __FLDA = \ |
float "fld tbyte ptr [eax]"\ |
float "fld tbyte ptr [edx]"\ |
float "fadd"\ |
float "fstp tbyte ptr [ebx]"\ |
parm caller [eax] [edx] [ebx]; |
#pragma aux __FLDS = \ |
float "fld tbyte ptr [eax]"\ |
float "fld tbyte ptr [edx]"\ |
float "fsub"\ |
float "fstp tbyte ptr [ebx]"\ |
parm caller [eax] [edx] [ebx]; |
#pragma aux __FLDM = \ |
float "fld tbyte ptr [eax]"\ |
float "fld tbyte ptr [edx]"\ |
float "fmul"\ |
float "fstp tbyte ptr [ebx]"\ |
parm caller [eax] [edx] [ebx]; |
#pragma aux __FLDD = \ |
float "fld tbyte ptr [eax]"\ |
float "fld tbyte ptr [edx]"\ |
float "fdiv"\ |
float "fstp tbyte ptr [ebx]"\ |
parm caller [eax] [edx] [ebx]; |
#pragma aux __FLDC = \ |
/* ST(1) */\ |
float "fld tbyte ptr [edx]"\ |
/* ST(0) */\ |
float "fld tbyte ptr [eax]"\ |
/* compare ST(0) with ST(1) */\ |
float "fcompp"\ |
float "fstsw ax"\ |
"sahf"\ |
"sbb edx,edx"\ |
"shl edx,1"\ |
"shl ah,2"\ |
"cmc"\ |
"adc edx,0"\ |
/* edx will be -1,0,+1 if [eax] <, ==, > [edx] */\ |
parm caller [eax] [edx] value [edx]; |
#pragma aux __LDI4 = \ |
float "fld tbyte ptr [eax]"\ |
"push eax"\ |
"push eax"\ |
float "fstcw [esp]"\ |
float "fwait"\ |
"pop eax"\ |
"push eax"\ |
"or ah,0x0c"\ |
"push eax"\ |
float "fldcw [esp]"\ |
"pop eax"\ |
float "fistp dword ptr 4[esp]"\ |
float "fldcw [esp]"\ |
"pop eax"\ |
"pop eax"\ |
parm caller [eax] value [eax]; |
#pragma aux __I4LD = \ |
"push eax"\ |
float "fild dword ptr [esp]"\ |
"pop eax"\ |
float "fstp tbyte ptr [edx]"\ |
parm caller [eax] [edx]; |
#pragma aux __U4LD = \ |
"push 0"\ |
"push eax"\ |
float "fild qword ptr [esp]"\ |
"pop eax"\ |
"pop eax"\ |
float "fstp tbyte ptr [edx]"\ |
parm caller [eax] [edx]; |
#pragma aux __iFDLD = \ |
float "fld qword ptr [eax]"\ |
float "fstp tbyte ptr [edx]"\ |
parm caller [eax] [edx]; |
#pragma aux __iFSLD = \ |
float "fld dword ptr [eax]"\ |
float "fstp tbyte ptr [edx]"\ |
parm caller [eax] [edx]; |
#pragma aux __iLDFD = \ |
float "fld tbyte ptr [eax]"\ |
float "fstp qword ptr [edx]"\ |
parm caller [eax] [edx]; |
#pragma aux __iLDFS = \ |
float "fld tbyte ptr [eax]"\ |
float "fstp dword ptr [edx]"\ |
parm caller [eax] [edx]; |
#else // floating-point calls |
#pragma aux __FLDA "*" parm caller [eax] [edx] [ebx]; |
#pragma aux __FLDS "*" parm caller [eax] [edx] [ebx]; |
#pragma aux __FLDM "*" parm caller [eax] [edx] [ebx]; |
#pragma aux __FLDD "*" parm caller [eax] [edx] [ebx]; |
#pragma aux __LDI4 "*" parm caller [eax] value [eax]; |
#pragma aux __I4LD "*" parm caller [eax] [edx]; |
#pragma aux __U4LD "*" parm caller [eax] [edx]; |
#pragma aux __iFDLD "*" parm caller [eax] [edx]; |
#pragma aux __iFSLD "*" parm caller [eax] [edx]; |
#pragma aux __iLDFD "*" parm caller [eax] [edx]; |
#pragma aux __iLDFS "*" parm caller [eax] [edx]; |
#pragma aux __FLDC "*" parm caller [eax] [edx] value [eax]; |
#endif |
#elif defined(M_I86) // 16-bit pragmas |
#pragma aux __ZBuf2LD "*" parm caller [ax] [dx]; |
#if defined(__FPI__) |
extern unsigned __Get87CW(void); |
extern void __Set87CW(unsigned short); |
#pragma aux __Get87CW = \ |
"push ax"\ |
"push bp"\ |
"mov bp,sp"\ |
float "fstcw 2[bp]"\ |
float "fwait"\ |
"pop bp"\ |
"pop ax"\ |
value [ax]; |
#pragma aux __Set87CW = \ |
"push ax"\ |
"push bp"\ |
"mov bp,sp"\ |
float "fldcw 2[bp]"\ |
"pop bp"\ |
"pop ax"\ |
parm caller [ax]; |
#pragma aux __FLDA = \ |
"push bp"\ |
"mov bp,ax"\ |
float "fld tbyte ptr [bp]"\ |
"mov bp,dx"\ |
float "fld tbyte ptr [bp]"\ |
float "fadd"\ |
"mov bp,bx"\ |
float "fstp tbyte ptr [bp]"\ |
"pop bp"\ |
parm caller [ax] [dx] [bx]; |
#pragma aux __FLDS = \ |
"push bp"\ |
"mov bp,ax"\ |
float "fld tbyte ptr [bp]"\ |
"mov bp,dx"\ |
float "fld tbyte ptr [bp]"\ |
float "fsub"\ |
"mov bp,bx"\ |
float "fstp tbyte ptr [bp]"\ |
"pop bp"\ |
parm caller [ax] [dx] [bx]; |
#pragma aux __FLDM = \ |
"push bp"\ |
"mov bp,ax"\ |
float "fld tbyte ptr [bp]"\ |
"mov bp,dx"\ |
float "fld tbyte ptr [bp]"\ |
float "fmul"\ |
"mov bp,bx"\ |
float "fstp tbyte ptr [bp]"\ |
"pop bp"\ |
parm caller [ax] [dx] [bx]; |
#pragma aux __FLDD = \ |
"push bp"\ |
"mov bp,ax"\ |
float "fld tbyte ptr [bp]"\ |
"mov bp,dx"\ |
float "fld tbyte ptr [bp]"\ |
float "fdiv"\ |
"mov bp,bx"\ |
float "fstp tbyte ptr [bp]"\ |
"pop bp"\ |
parm caller [ax] [dx] [bx]; |
#pragma aux __FLDC = \ |
"push bp"\ |
"mov bp,dx"\ |
/* ST(1) */\ |
float "fld tbyte ptr [bp]"\ |
"mov bp,ax"\ |
/* ST(0) */\ |
float "fld tbyte ptr [bp]"\ |
/* compare ST(0) with ST(1) */\ |
float "fcompp"\ |
"push ax"\ |
"mov bp,sp"\ |
float "fstsw 0[bp]"\ |
float "fwait"\ |
"pop ax"\ |
"sahf"\ |
"sbb dx,dx"\ |
"shl dx,1"\ |
"shl ah,1"\ |
"shl ah,1"\ |
"cmc"\ |
"adc dx,0"\ |
"pop bp"\ |
parm caller [ax] [dx] value [dx]; |
#pragma aux __LDI4 = \ |
"push bp"\ |
"mov bp,ax"\ |
float "fld tbyte ptr [bp]"\ |
"push dx"\ |
"push ax"\ |
"push ax"\ |
"mov bp,sp"\ |
float "fstcw [bp]"\ |
float "fwait"\ |
"pop ax"\ |
"push ax"\ |
"or ah,0x0c"\ |
"mov 2[bp],ax"\ |
float "fldcw 2[bp]"\ |
float "fistp dword ptr 2[bp]"\ |
float "fldcw [bp]"\ |
"pop ax"\ |
"pop ax"\ |
"pop dx"\ |
"pop bp"\ |
parm caller [ax] value [dx ax]; |
#pragma aux __I4LD = \ |
"push bp"\ |
"push dx"\ |
"push ax"\ |
"mov bp,sp"\ |
float "fild dword ptr [bp]"\ |
"pop ax"\ |
"pop dx"\ |
"mov bp,bx"\ |
float "fstp tbyte ptr [bp]"\ |
"pop bp"\ |
parm caller [dx ax] [bx]; |
#pragma aux __U4LD = \ |
"push bp"\ |
"push ax"\ |
"push ax"\ |
"push dx"\ |
"push ax"\ |
"mov bp,sp"\ |
"sub ax,ax"\ |
"mov 4[bp],ax"\ |
"mov 6[bp],ax"\ |
float "fild qword ptr 2[bp]"\ |
"pop ax"\ |
"pop dx"\ |
"pop ax"\ |
"pop ax"\ |
"mov bp,bx"\ |
float "fstp tbyte ptr [bp]"\ |
"pop bp"\ |
parm caller [dx ax] [bx]; |
#pragma aux __iFDLD = \ |
"push bp"\ |
"mov bp,ax"\ |
float "fld qword ptr [bp]"\ |
"mov bp,dx"\ |
float "fstp tbyte ptr [bp]"\ |
"pop bp"\ |
parm caller [ax] [dx]; |
#pragma aux __iFSLD = \ |
"push bp"\ |
"mov bp,ax"\ |
float "fld dword ptr [bp]"\ |
"mov bp,dx"\ |
float "fstp tbyte ptr [bp]"\ |
"pop bp"\ |
parm caller [ax] [dx]; |
#pragma aux __iLDFD = \ |
"push bp"\ |
"mov bp,ax"\ |
float "fld tbyte ptr [bp]"\ |
"mov bp,dx"\ |
float "fstp qword ptr [bp]"\ |
"pop bp"\ |
parm caller [ax] [dx]; |
#pragma aux __iLDFS = \ |
"push bp"\ |
"mov bp,ax"\ |
float "fld tbyte ptr [bp]"\ |
"mov bp,dx"\ |
float "fstp dword ptr [bp]"\ |
"pop bp"\ |
parm caller [ax] [dx]; |
#else // floating-point calls |
#pragma aux __FLDA "*" parm caller [ax] [dx] [bx]; |
#pragma aux __FLDS "*" parm caller [ax] [dx] [bx]; |
#pragma aux __FLDM "*" parm caller [ax] [dx] [bx]; |
#pragma aux __FLDD "*" parm caller [ax] [dx] [bx]; |
#pragma aux __LDI4 "*" parm caller [ax] value [dx ax]; |
#pragma aux __I4LD "*" parm caller [dx ax] [bx]; |
#pragma aux __U4LD "*" parm caller [dx ax] [bx]; |
#pragma aux __iFDLD "*" parm caller [ax] [dx]; |
#pragma aux __iFSLD "*" parm caller [ax] [dx]; |
#pragma aux __iLDFD "*" parm caller [ax] [dx]; |
#pragma aux __iLDFS "*" parm caller [ax] [dx]; |
#pragma aux __FLDC "*" parm caller [ax] [dx] value [ax]; |
#endif |
#endif |
#endif |
#ifdef _LONG_DOUBLE_ |
// macros to allow old source code names to still work |
#define __FDLD __iFDLD |
#define __FSLD __iFSLD |
#define __LDFD __iLDFD |
#define __LDFS __iLDFS |
#endif |
// define number of significant digits for long double numbers (80-bit) |
// it will be defined in float.h as soon as OW support long double |
// used in mathlib/c/ldcvt.c |
#ifdef _LONG_DOUBLE_ |
#if LDBL_DIG == 15 |
#undef LDBL_DIG |
#define LDBL_DIG 19 |
#else |
#error LDBL_DIG has changed from 15 |
#endif |
#endif |
// floating point conversion buffer length definition |
// used by various floating point conversion routines |
// used in clib/startup/c/cvtbuf.c and lib_misc/h/thread.h |
// it must be equal maximum FP precision ( LDBL_DIG ) |
#define __FPCVT_BUFFERLEN 19 |
#ifdef __cplusplus |
}; |
#endif |
#endif |
/programs/develop/open watcom/trunk/clib/crt/xinit.inc |
---|
0,0 → 1,109 |
;***************************************************************************** |
;* |
;* Open Watcom Project |
;* |
;* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
;* |
;* ======================================================================== |
;* |
;* This file contains Original Code and/or Modifications of Original |
;* Code as defined in and that are subject to the Sybase Open Watcom |
;* Public License version 1.0 (the 'License'). You may not use this file |
;* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
;* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
;* provided with the Original Code and Modifications, and is also |
;* available at www.sybase.com/developer/opensource. |
;* |
;* The Original Code and all software distributed under the License are |
;* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
;* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
;* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
;* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
;* NON-INFRINGEMENT. Please see the License for the specific language |
;* governing rights and limitations under the License. |
;* |
;* ======================================================================== |
;* |
;* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE |
;* DESCRIBE IT HERE! |
;* |
;***************************************************************************** |
include langenv.inc |
PNEAR equ 0 |
PFAR equ 1 |
xinit macro rtn,priority |
XI segment word public 'DATA' |
if _MODEL and _BIG_CODE |
db PFAR |
db priority |
dd rtn |
else |
if _MODEL and _USE_32_SEGS |
db PNEAR |
db priority |
dd rtn |
if COMP_CFG_COFF EQ 1 |
dw 0 |
endif |
else |
db PNEAR |
db priority |
dw rtn |
dw 0 |
endif |
endif |
XI ends |
endm |
xfini macro rtn,priority |
YI segment word public 'DATA' |
if _MODEL and _BIG_CODE |
db PFAR |
db priority |
dd rtn |
else |
if _MODEL and _USE_32_SEGS |
db PNEAR |
db priority |
dd rtn |
if COMP_CFG_COFF EQ 1 |
dw 0 |
endif |
else |
db PNEAR |
db priority |
dw rtn |
dw 0 |
endif |
endif |
YI ends |
endm |
INIT_PRIORITY_THREAD equ 1 ; priority for thread data init |
INIT_PRIORITY_FPU equ 2 ; priority for FPU/EMU init |
INIT_PRIORITY_RUNTIME equ 10 ; priority for run-time initialization |
INIT_PRIORITY_IOSTREAM equ 20 ; priority for IOSTREAM |
INIT_PRIORITY_LIBRARY equ 32 ; default library-initialization priority |
DEF_PRIORITY equ 32 ; ... |
INIT_PRIORITY_PROGRAM equ 64 ; default program-initialization priority |
DTOR_PRIORITY equ 40 ; priority for module DTOR |
DGROUP group XIB,XI,XIE,YIB,YI,YIE |
XIB segment word public 'DATA' |
XIB ends |
XI segment word public 'DATA' |
XI ends |
XIE segment word public 'DATA' |
XIE ends |
YIB segment word public 'DATA' |
YIB ends |
YI segment word public 'DATA' |
YI ends |
YIE segment word public 'DATA' |
YIE ends |
/programs/develop/open watcom/trunk/clib/crt/xmsgwnt.c |
---|
0,0 → 1,56 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Fatal runtime error handler for Win32. |
* |
****************************************************************************/ |
#include "variety.h" |
#include "rtdata.h" |
#include "exitwmsg.h" |
void debug_out_str(const char* str); |
_WCRTLINK void __exit_with_msg( char *msg, unsigned retcode ) |
{ |
unsigned len; |
char *end; |
end = msg; |
for( len = 0; *end++ != '\0'; len++ ) |
; |
debug_out_str(msg); |
__exit( retcode ); |
} |
_WCRTLINK void __fatal_runtime_error( char *msg, unsigned retcode ) |
{ |
__exit_with_msg( msg, retcode ); |
} |
/programs/develop/open watcom/trunk/clib/crt/xstring.h |
---|
0,0 → 1,68 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Prototypes for direct 'calls' to inline functions. |
* |
****************************************************************************/ |
#ifndef _XSTRING_H_INCLUDED |
#include "variety.h" |
#include <string.h> |
#ifdef __cplusplus |
extern "C" { |
#endif |
#ifdef __INLINE_FUNCTIONS__ |
void *_inline_memchr( const void *__s, int __c, size_t __n ); |
int _inline_memcmp( const void *__s1, const void *__s2, size_t __n ); |
void *_inline_memcpy( void *__s1, const void *__s2, size_t __n ); |
void *_inline_memmove( void *__s1, const void *__s2, size_t __n ); |
void *_inline_memset( void *__s, int __c, size_t __n ); |
char *_inline_strcat( char *__s1, const char *__s2 ); |
char *_inline_strchr( const char *__s, int __c ); |
int _inline_strcmp( const char *__s1, const char *__s2 ); |
char *_inline_strcpy( char *__s1, const char *__s2 ); |
size_t _inline_strlen( const char *__s ); |
void _WCFAR *_inline__fmemchr( const void _WCFAR *__s, int __c, size_t __n ); |
void _WCFAR *_inline__fmemcpy( void _WCFAR *__s1, const void _WCFAR *__s2, size_t __n ); |
void _WCFAR *_inline__fmemset( void _WCFAR *__s, int __c, size_t __n ); |
int _inline__fmemcmp( const void _WCFAR *__s1, const void _WCFAR *__s2, size_t __n ); |
char _WCFAR *_inline__fstrcat( char _WCFAR *__s1, const char _WCFAR *__s2 ); |
char _WCFAR *_inline__fstrchr( const char _WCFAR *__s, int __c ); |
int _inline__fstrcmp( const char _WCFAR *__s1, const char _WCFAR *__s2 ); |
char _WCFAR *_inline__fstrcpy( char _WCFAR *__s1, const char _WCFAR *__s2 ); |
size_t _inline__fstrlen( const char _WCFAR *__s ); |
void _inline_movedata( unsigned __srcseg, unsigned __srcoff, |
unsigned __tgtseg, unsigned __tgtoff, unsigned __len ); |
#endif /* __INLINE_FUNCTIONS__ */ |
#define _XSTRING_H_INCLUDED |
#ifdef __cplusplus |
}; |
#endif |
#endif |
/programs/develop/open watcom/trunk/clib/src/allocfp.c |
---|
0,0 → 1,92 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Platform independent __allocfp() implementation. |
* |
****************************************************************************/ |
#include "variety.h" |
#include <stdio.h> |
#include <string.h> |
#include <errno.h> |
#include "liballoc.h" |
#include "fileacc.h" |
#include "rtdata.h" |
#include "seterrno.h" |
#include "streamio.h" |
#define KEEP_FLAGS (_READ | _WRITE | _DYNAMIC) |
FILE *__allocfp( int handle ) |
{ |
FILE *end; |
FILE *fp; |
__stream_link *link; |
unsigned flags; |
handle = handle; |
_AccessIOB(); |
/* Try and take one off the recently closed list */ |
link = _RWD_cstream; |
if( link != NULL ) { |
_RWD_cstream = link->next; |
fp = link->stream; |
flags = (fp->_flag & KEEP_FLAGS) | (_READ | _WRITE); |
goto got_one; |
} |
/* See if there is a static FILE structure available. */ |
end = &_RWD_iob[_NFILES]; |
for( fp = _RWD_iob; fp < end; ++fp ) { |
if( (fp->_flag & (_READ | _WRITE)) == 0 ) { |
link = lib_malloc( sizeof( __stream_link ) ); |
if( link == NULL ) |
goto no_mem; |
flags = _READ | _WRITE; |
goto got_one; |
} |
} |
/* Allocate a new dynamic structure */ |
flags = _DYNAMIC | _READ | _WRITE; |
link = lib_malloc( sizeof( __stream_link ) + sizeof( FILE ) ); |
if( link == NULL ) |
goto no_mem; |
fp = (FILE *)(link + 1); |
got_one: |
memset( fp, 0, sizeof( *fp ) ); |
fp->_flag = flags; |
link->stream = fp; |
link->stream->_link = link; /* point back to link structure */ |
link->next = _RWD_ostream; |
_RWD_ostream = link; |
_ReleaseIOB(); |
return( fp ); |
no_mem: |
__set_errno( ENOMEM ); |
_ReleaseIOB(); |
return( NULL ); /* no free slots */ |
} |
/programs/develop/open watcom/trunk/clib/src/clibi64.h |
---|
0,0 → 1,61 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Prototypes and pragmas for handling __int64 values. |
* |
****************************************************************************/ |
#ifndef _I64_H_INCLUDED |
#define _I64_H_INCLUDED |
#include "variety.h" |
#include "widechar.h" |
#include "watcom.h" |
#define INT64_TYPE __int64 |
#define UINT64_TYPE unsigned __int64 |
#define _clib_I64Negative( a ) (((__int64)a) < 0) |
#define _clib_I64Positive( a ) (((__int64)a) > 0) |
#define _clib_I32ToI64( a, b ) b = (__int64)a |
#define _clib_U32ToU64( a, b ) b = (unsigned __int64)(unsigned_32)a |
#define _clib_I64ToInt( a, b ) b = (signed)a |
#define _clib_U64ToUInt( a, b ) b = (unsigned)a |
#define _clib_I64ToLong( a, b ) b = (signed long)a |
#define _clib_U64ToULong( a, b ) b = (unsigned long)a |
#define _clib_I64Neg( a, b ) b = -a |
#define _clib_U64Neg( a, b ) _clib_I64Neg( a, b ) |
#define _clib_U64Zero( a ) (a == 0) |
#define _clib_U64Cmp( a, b ) (a > b ? +1 : a < b ? -1 : 0) |
#define _clib_U64Mul( a, b, c ) c = a * b |
#define _clib_U64Div( a, b, c, d ) (d = a % b, c = a / b) |
#define _clib_U64Add( a, b, c ) c = a + b |
// conversion functions - use standard ulltoa()/atoll() |
#endif |
/programs/develop/open watcom/trunk/clib/src/close.h |
---|
0,0 → 1,32 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: prototype for __close clib internal function |
* |
****************************************************************************/ |
extern int __close( int handle ); |
/programs/develop/open watcom/trunk/clib/src/commode.h |
---|
0,0 → 1,34 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: declaration for set commit mode function |
* |
****************************************************************************/ |
/* see note in commode.c */ |
_WCRTLINK extern void _WCI86FAR __set_commode( void ); |
#pragma aux __set_commode "*_"; |
/programs/develop/open watcom/trunk/clib/src/comtflag.c |
---|
0,0 → 1,47 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Commit mode state variable and accessor. |
* |
****************************************************************************/ |
#include "variety.h" |
#include <stdio.h> |
#include "commode.h" |
int _commode = 0; |
/* |
* Before changing any of this, check startup/c/commode.c! |
*/ |
_WCRTLINK void _WCI86FAR __set_commode( void ) |
{ |
_commode = _COMMIT; |
} |
/programs/develop/open watcom/trunk/clib/src/errorno.h |
---|
0,0 → 1,35 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE |
* DESCRIBE IT HERE! |
* |
****************************************************************************/ |
#define _ERRNO errno |
/programs/develop/open watcom/trunk/clib/src/exitwmsg.h |
---|
0,0 → 1,85 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Fatal runtime error handlers. |
* |
****************************************************************************/ |
#ifndef _EXITWMSG_H_INCLUDED |
#define _EXITWMSG_H_INCLUDED |
#include "variety.h" |
#ifdef __cplusplus |
extern "C" { |
#endif |
#undef _EWM_PARM1 |
#undef _EWM_PARM2 |
#if defined(__386__) |
#define _EWM_PARM1 eax |
#define _EWM_PARM2 edx |
#elif defined(M_I86) |
#define _EWM_PARM1 ax dx |
#define _EWM_PARM2 bx |
#else |
#define _EWM_PARM1 |
#define _EWM_PARM2 |
#endif |
// C interface |
// - tracks normal calling convention |
// - this is the funtion that is called from ASM and from C, C++ |
// - note there is no #pragma aborts so that debugger can trace out |
_WCRTLINK extern void __exit_with_msg( char _WCI86FAR *, unsigned ); |
_WCRTLINK extern void __fatal_runtime_error( char _WCI86FAR *, unsigned ); |
// ASM interface |
// - always uses register calling convention |
// - this function is only called from the C implementation |
// of __exit_with_msg |
extern void __do_exit_with_msg( char _WCI86FAR *, unsigned ); |
#ifdef _M_IX86 |
#pragma aux __do_exit_with_msg "*__" \ |
parm caller [_EWM_PARM1] [_EWM_PARM2]; |
#endif |
#undef _EWM_PARM1 |
#undef _EWM_PARM2 |
_WCRTLINKD extern char volatile __WD_Present; |
// WVIDEO interface |
// this function should be called before __exit_with_msg() |
// to allow Watcom Debugger (nee WVIDEO) to trap runtime errors. |
// this really needs to be far!!! |
_WCRTLINK extern int __EnterWVIDEO( char _WCFAR *string ); |
#ifdef __cplusplus |
}; |
#endif |
#endif |
/programs/develop/open watcom/trunk/clib/src/exitwmsg.inc |
---|
0,0 → 1,53 |
;***************************************************************************** |
;* |
;* Open Watcom Project |
;* |
;* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
;* |
;* ======================================================================== |
;* |
;* This file contains Original Code and/or Modifications of Original |
;* Code as defined in and that are subject to the Sybase Open Watcom |
;* Public License version 1.0 (the 'License'). You may not use this file |
;* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
;* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
;* provided with the Original Code and Modifications, and is also |
;* available at www.sybase.com/developer/opensource. |
;* |
;* The Original Code and all software distributed under the License are |
;* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
;* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
;* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
;* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
;* NON-INFRINGEMENT. Please see the License for the specific language |
;* governing rights and limitations under the License. |
;* |
;* ======================================================================== |
;* |
;* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE |
;* DESCRIBE IT HERE! |
;* |
;***************************************************************************** |
ifdef __WASM__ |
ifdef __386__ |
extrn "C",__fatal_runtime_error : near |
else |
ifdef __SMALL__ |
extrn "C",__fatal_runtime_error : near |
endif |
ifdef __COMPACT__ |
extrn "C",__fatal_runtime_error : near |
endif |
ifdef __MEDIUM__ |
extrn "C",__fatal_runtime_error : far |
endif |
ifdef __LARGE__ |
extrn "C",__fatal_runtime_error : far |
endif |
ifdef __HUGE__ |
extrn "C",__fatal_runtime_error : far |
endif |
endif |
endif |
/programs/develop/open watcom/trunk/clib/src/extfunc.h |
---|
0,0 → 1,106 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Special interface for calls to non-Watcom routines from |
* inside clib (x86 specific). |
* |
****************************************************************************/ |
#ifndef EXTFUNC_H_INCLUDED |
#define EXTFUNC_H_INCLUDED |
#include "variety.h" |
#if defined(_M_IX86) |
#if !defined(__WINDOWS__) |
#if defined(__BIG_DATA__) |
#define __DS ds |
#endif |
#endif |
#if !defined(__FLAT__) |
#define __ES es |
#endif |
#if defined(__386__) |
#if defined(__WINDOWS__) || !defined(__FLAT__) |
#define __FS fs |
#endif |
#define __GS gs |
#if defined(__SW_3S) |
#define __AX eax |
#define __BX ebx |
#define __CX ecx |
#define __DX edx |
#endif |
#endif |
#ifndef __AX |
#define __AX |
#endif |
#ifndef __BX |
#define __BX |
#endif |
#ifndef __CX |
#define __CX |
#endif |
#ifndef __DX |
#define __DX |
#endif |
#ifndef __DS |
#define __DS |
#endif |
#ifndef __ES |
#define __ES |
#endif |
#ifndef __FS |
#define __FS |
#endif |
#ifndef __GS |
#define __GS |
#endif |
#pragma aux __outside_CLIB modify [__AX __BX __CX __DX __DS __ES __FS __GS]; |
/* |
use as follows: |
typedef void vfv( void ); |
#pragma aux (__outside_CLIB) __vfv; |
*/ |
#undef __AX |
#undef __BX |
#undef __CX |
#undef __DX |
#undef __DS |
#undef __ES |
#undef __FS |
#undef __GS |
#endif |
#endif |
/programs/develop/open watcom/trunk/clib/src/farfunc.h |
---|
0,0 → 1,43 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Macros for switching between far and near function version |
* |
****************************************************************************/ |
#ifndef _FARFUNC_H_INCLUDED |
#define _FARFUNC_H_INCLUDED |
#ifdef __FARFUNC__ |
#define _FFAR _WCFAR |
#define _NEARFAR(n1,n2) n2 |
#else |
#define _FFAR |
#define _NEARFAR(n1,n2) n1 |
#endif |
#endif |
/programs/develop/open watcom/trunk/clib/src/farsupp.h |
---|
0,0 → 1,74 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Far pointer support typedefs. |
* |
****************************************************************************/ |
#ifndef _FARSUPP_H_INCLUDED |
#define _FARSUPP_H_INCLUDED |
#include "variety.h" |
#include "widechar.h" |
#ifdef __LONG_LONG_SUPPORT__ |
#include "clibi64.h" |
#endif |
/* Only support near/far pointers on 16-bit targets, extended DOS |
* and Win386. Ideally we might want to test for non-flat memory model. |
*/ |
#if defined( _M_I86 ) || defined( __DOS__ ) || defined( __WINDOWS__ ) |
#define __FAR_SUPPORT__ |
typedef CHAR_TYPE _WCFAR *FAR_STRING; |
typedef char _WCFAR *FAR_ASCII_STRING; |
typedef wchar_t _WCFAR *FAR_UNI_STRING; |
typedef int _WCFAR *FAR_INT; |
typedef signed char _WCFAR *FAR_CHAR; |
typedef short _WCFAR *FAR_SHORT; |
typedef long _WCFAR *FAR_LONG; |
typedef float _WCFAR *FAR_FLOAT; |
typedef double _WCFAR *FAR_DOUBLE; |
#ifdef __LONG_LONG_SUPPORT__ |
typedef UINT64_TYPE _WCFAR *FAR_INT64; |
#endif |
#else |
#undef __FAR_SUPPORT__ |
typedef CHAR_TYPE *FAR_STRING; |
typedef char *FAR_ASCII_STRING; |
typedef wchar_t *FAR_UNI_STRING; |
typedef int *FAR_INT; |
typedef signed char *FAR_CHAR; |
typedef short *FAR_SHORT; |
typedef long *FAR_LONG; |
typedef float *FAR_FLOAT; |
typedef double *FAR_DOUBLE; |
#ifdef __LONG_LONG_SUPPORT__ |
typedef UINT64_TYPE *FAR_INT64; |
#endif |
#endif |
#endif |
/programs/develop/open watcom/trunk/clib/src/fgetc.c |
---|
0,0 → 1,227 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Platform independent fgetc() implementation. |
* |
****************************************************************************/ |
#include "variety.h" |
#include "widechar.h" |
#include <stdio.h> |
#include <unistd.h> |
#ifndef __UNIX__ |
#include <conio.h> |
#endif |
#include "fileacc.h" |
#include <errno.h> |
#include "rtdata.h" |
#include "seterrno.h" |
#ifdef __WIDECHAR__ |
#include <mbstring.h> |
#include <wchar.h> |
#endif |
#include "qread.h" |
#include "orient.h" |
#include "flush.h" |
#include "streamio.h" |
#define DOS_EOF_CHAR 0x1a |
#ifdef __WIDECHAR__ |
#define CHARMASK 0xffff |
#else |
#define CHARMASK 0xff |
#endif |
int __F_NAME(__fill_buffer,__wfill_buffer)( FILE *fp ) |
{ |
if( _FP_BASE(fp) == NULL ) { |
__ioalloc( fp ); |
} |
if( fp->_flag & _ISTTY ) { /* 20-aug-90 */ |
if( fp->_flag & (_IONBF | _IOLBF) ) { |
__flushall( _ISTTY ); /* flush all TTY output */ |
} |
} |
fp->_flag &= ~_UNGET; /* 10-mar-90 */ |
fp->_ptr = _FP_BASE(fp); |
#ifdef __UNIX__ |
fp->_cnt = __qread( fileno( fp ), fp->_ptr, |
(fp->_flag & _IONBF) ? CHARSIZE : fp->_bufsize ); |
#else |
if(( fp->_flag & (_IONBF | _ISTTY)) == (_IONBF | _ISTTY) && |
( fileno( fp ) == STDIN_FILENO )) |
{ |
int c; /* JBS 31-may-91 */ |
fp->_cnt = 0; |
// c = getche(); |
if( c != EOF ) { |
*(CHAR_TYPE *)fp->_ptr = c; |
fp->_cnt = CHARSIZE; |
} |
} else { |
fp->_cnt = __qread( fileno( fp ), fp->_ptr, |
(fp->_flag & _IONBF) ? CHARSIZE : fp->_bufsize ); |
} |
#endif |
if( fp->_cnt <= 0 ) { |
if( fp->_cnt == 0 ) { |
fp->_flag |= _EOF; |
} else { |
fp->_flag |= _SFERR; |
fp->_cnt = 0; |
} |
} |
return( fp->_cnt ); |
} |
int __F_NAME(__filbuf,__wfilbuf)( FILE *fp ) |
{ |
if( __F_NAME(__fill_buffer,__wfill_buffer)( fp ) == 0 ) { |
return( EOF ); |
} |
else { |
fp->_cnt -= CHARSIZE; |
fp->_ptr += CHARSIZE; |
return( *(CHAR_TYPE *)(fp->_ptr - CHARSIZE) & CHARMASK ); |
} |
} |
#ifndef __WIDECHAR__ |
_WCRTLINK int fgetc( FILE *fp ) |
{ |
int c; |
_ValidFile( fp, EOF ); |
_AccessFile( fp ); |
/*** Deal with stream orientation ***/ |
ORIENT_STREAM(fp,EOF); |
if( (fp->_flag & _READ) == 0 ) { |
__set_errno( EBADF ); |
fp->_flag |= _SFERR; |
c = EOF; |
} else { |
fp->_cnt--; |
// it is important that this remain a relative comparison |
// to ensure that the getc() macro works properly |
if( fp->_cnt < 0 ) { |
c = __F_NAME(__filbuf,__wfilbuf)( fp ); |
} else { |
c = *(char *)fp->_ptr; |
fp->_ptr++; |
} |
} |
#ifndef __UNIX__ |
if( !(fp->_flag & _BINARY) ) { |
if( c == '\r' ) { |
fp->_cnt--; |
// it is important that this remain a relative comparison |
// to ensure that the getc() macro works properly |
if( fp->_cnt < 0 ) { |
c = __F_NAME(__filbuf,__wfilbuf)( fp ); |
} else { |
c = *(CHAR_TYPE*)fp->_ptr & CHARMASK; |
fp->_ptr += CHARSIZE; |
} |
} |
if( c == DOS_EOF_CHAR ) { |
fp->_flag |= _EOF; |
c = EOF; |
} |
} |
#endif |
_ReleaseFile( fp ); |
return( c ); |
} |
#else |
static int __read_wide_char( FILE *fp, wchar_t *wc ) |
/**************************************************/ |
{ |
if( fp->_flag & _BINARY ) { |
/*** Read a wide character ***/ |
return( fread( wc, sizeof( wchar_t ), 1, fp ) ); |
} else { |
char mbc[MB_CUR_MAX]; |
wchar_t wcTemp; |
int rc; |
/*** Read the multibyte character ***/ |
if( !fread( &mbc[0], 1, 1, fp ) ) |
return( 0 ); |
if( _ismbblead( mbc[0] ) ) { |
if( !fread( &mbc[1], 1, 1, fp ) ) |
return( 0 ); |
} |
/*** Convert it to wide form ***/ |
rc = mbtowc( &wcTemp, mbc, MB_CUR_MAX ); |
if( rc >= 0 ) { |
*wc = wcTemp; |
return( 1 ); |
} else { |
__set_errno( EILSEQ ); |
return( 0 ); |
} |
} |
} |
_WCRTLINK wint_t fgetwc( FILE *fp ) |
{ |
wchar_t c; |
_ValidFile( fp, WEOF ); |
_AccessFile( fp ); |
/*** Deal with stream orientation ***/ |
ORIENT_STREAM(fp,WEOF); |
/*** Read the character ***/ |
if( !__read_wide_char( fp, &c ) ) { |
_ReleaseFile( fp ); |
return( WEOF ); |
} |
if( !(fp->_flag & _BINARY) && (c == L'\r') ) { |
if( !__read_wide_char( fp, &c ) ) { |
_ReleaseFile( fp ); |
return( WEOF ); |
} |
} |
_ReleaseFile( fp ); |
return( (wint_t)c ); |
} |
#endif |
/programs/develop/open watcom/trunk/clib/src/fileacc.h |
---|
0,0 → 1,81 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE |
* DESCRIBE IT HERE! |
* |
****************************************************************************/ |
#define _ValidFile( fp, retval ) /* make sure fp is a valid pointer */ |
#define SetupTGCSandNCS( x ) /* initialization for Netware/386 */ |
#if defined(__SW_BM) |
#define _AccessFile( fp ) _AccessFileH( (fp)->_handle ) |
#define _ReleaseFile( fp ) _ReleaseFileH( (fp)->_handle ) |
#if defined(__386__) || defined(__AXP__) || defined(__PPC__) |
extern void (*_AccessFileH)( int ); |
extern void (*_ReleaseFileH)( int ); |
extern void (*_AccessIOB)( void ); |
extern void (*_ReleaseIOB)( void ); |
#else |
// 16bit OS/2 multi-thread is different |
extern void __AccessFileH( int ); |
extern void __ReleaseFileH( int ); |
extern void __AccessIOB( void ); |
extern void __ReleaseIOB( void ); |
// define macros to call the access routines directly for OS/2 1.x |
#define _AccessFileH( hdl ) __AccessFileH( hdl ) |
#define _ReleaseFileH( hdl ) __ReleaseFileH( hdl ) |
#define _AccessIOB() __AccessIOB() |
#define _ReleaseIOB() __ReleaseIOB() |
#endif |
#if defined(__NT__) |
extern void (*_AccessFList)( void ); |
extern void (*_ReleaseFList)( void ); |
#endif |
#else |
/* these are for multi thread support */ |
/* they are not required if not building multi-thread library */ |
/* note: 32 bit NETWARE, OS/2, NT, QNX libraries are always multi-thread */ |
#define _AccessFile( fp ) /* gain access to the FILE* pointer */ |
#define _ReleaseFile( fp ) /* release access */ |
#define _AccessFileH( hdl ) /* gain access to the file handle */ |
#define _ReleaseFileH( hdl ) /* release access */ |
#define _AccessIOB() /* gain access to array of __iob's */ |
#define _ReleaseIOB() /* release access */ |
#if defined(__NT__) |
#define _AccessFList() |
#define _ReleaseFList() |
#endif |
#endif |
/programs/develop/open watcom/trunk/clib/src/fixpoint.h |
---|
0,0 → 1,37 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Fixed-point data type. |
* |
****************************************************************************/ |
typedef union t32 { |
unsigned long uWhole; |
signed long sWhole; |
struct { unsigned short int lo, hi; } wd; |
struct { unsigned char b1, b2, b3, b4; } bite; |
} T32; |
/programs/develop/open watcom/trunk/clib/src/flush.h |
---|
0,0 → 1,34 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Prototype for __flush and __flushall internal routines. |
* |
****************************************************************************/ |
/* __flush is used by C++ run-time library */ |
_WCRTLINK extern int __flush( FILE * ); |
extern int __flushall( int ); |
/programs/develop/open watcom/trunk/clib/src/flushall.c |
---|
0,0 → 1,65 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Implementation of flushall() - flush all streams. |
* |
****************************************************************************/ |
#include "variety.h" |
#include <stdio.h> |
#include "rtdata.h" |
#include "fileacc.h" |
#include "flush.h" |
/* __fill_buffer calls this routine with _ISTTY mask */ |
int __flushall( int mask ) |
{ |
__stream_link *link; |
FILE *fp; |
int number_of_open_files; |
_AccessIOB(); |
number_of_open_files = 0; |
for( link = _RWD_ostream; link != NULL; link = link->next ) { |
fp = link->stream; |
if( fp->_flag & mask ) { /* if file is a candidate */ |
++number_of_open_files; |
if( fp->_flag & _DIRTY ) { |
__flush( fp ); |
} |
} |
} |
_ReleaseIOB(); |
return( number_of_open_files ); |
} |
_WCRTLINK int flushall( void ) |
{ |
return( __flushall( ~0 ) ); |
} |
/programs/develop/open watcom/trunk/clib/src/fmode.h |
---|
0,0 → 1,33 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE |
* DESCRIBE IT HERE! |
* |
****************************************************************************/ |
/* define _fmode to be _fmode */ |
/programs/develop/open watcom/trunk/clib/src/fopen.c |
---|
0,0 → 1,359 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Platform independent fopen() implementation. |
* |
****************************************************************************/ |
#include "variety.h" |
#include "widechar.h" |
#include <stdio.h> |
#include <ctype.h> |
#ifdef __WIDECHAR__ |
#include <wctype.h> |
#endif |
#include <errno.h> |
#include <fcntl.h> |
#include <sys/stat.h> |
#include "fileacc.h" |
#include "fmode.h" |
#include "openmode.h" |
#include "rtdata.h" |
#include "seterrno.h" |
//#include "defwin.h" |
#include "streamio.h" |
#ifdef __UNIX__ |
#define PMODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH) |
#else |
#define PMODE (S_IREAD | S_IWRITE) |
#endif |
int __F_NAME(__open_flags,__wopen_flags)( const CHAR_TYPE *modestr, int *extflags ) |
{ |
int flags; |
int alive = 1; |
int gotplus = 0; |
int gottextbin = 0; |
#ifndef __NETWARE__ |
int gotcommit = 0; |
#endif |
flags = 0; |
if( extflags != NULL ) { |
#ifdef __NETWARE__ |
*extflags = 0; |
#else |
if( _commode == _COMMIT ) { |
*extflags = _COMMIT; |
} else { |
*extflags = 0; |
} |
#endif |
} |
/* |
* The first character in modestr must be 'r', 'w', or 'a'. |
*/ |
switch( *modestr ) { |
case 'r': |
flags |= _READ; |
break; |
case 'w': |
flags |= _WRITE; |
break; |
case 'a': |
flags |= _WRITE | _APPEND; |
break; |
default: |
__set_errno( EINVAL ); |
return( 0 ); |
} |
modestr++; |
/* |
* Next we might have, in any order, some additional mode modifier |
* characters: |
* 1. A '+' character. |
* 2. Either a 't' or a 'b'. |
* 3. Either a 'c' or a 'n'. (Not available for Netware.) |
* For MS compatability, scanning stops when any of the three groups |
* is encountered twice; e.g., "wct+b$&!" is valid and will result in |
* a text, not binary, stream. Also for MS compatability, scanning |
* stops at any unrecognized character, without causing failure. |
*/ |
while( (*modestr != NULLCHAR) && alive ) { |
switch( *modestr ) { |
case '+': |
if( gotplus ) { |
alive = 0; |
} else { |
flags |= _READ | _WRITE; |
gotplus = 1; |
} |
break; |
case 't': |
if( gottextbin ) { |
alive = 0; |
} else { |
gottextbin = 1; |
} |
break; |
case 'b': |
if( gottextbin ) { |
alive = 0; |
} else { |
#ifndef __UNIX__ |
flags |= _BINARY; |
#endif |
gottextbin = 1; |
} |
break; |
#ifndef __NETWARE__ |
case 'c': |
if( gotcommit ) { |
alive = 0; |
} else { |
*extflags |= _COMMIT; |
gotcommit = 1; |
} |
break; |
case 'n': |
if( gotcommit ) { |
alive = 0; |
} else { |
*extflags &= ~_COMMIT; |
gotcommit = 1; |
} |
break; |
#endif |
default: |
break; |
} |
modestr++; |
} |
/* |
* Handle defaults for any unspecified options. |
*/ |
#ifndef __UNIX__ |
if( !gottextbin ) { |
if( _RWD_fmode == O_BINARY ) flags |= _BINARY; |
} |
#endif |
return( flags ); |
} |
static FILE *__F_NAME(__doopen,__wdoopen)( const CHAR_TYPE *name, |
CHAR_TYPE mode, |
int file_flags, |
int extflags, |
int shflag, /* sharing flag */ |
FILE * fp ) |
{ |
int open_mode; |
int p_mode; |
SetupTGCSandNCS( RETURN_ARG( FILE *, 0 ) ); /* for NW386 */ |
fp->_flag &= ~(_READ | _WRITE); |
fp->_flag |= file_flags; |
/* we need the mode character to indicate if the original */ |
/* intention is to open for read or for write */ |
mode = __F_NAME(tolower,towlower)( mode ); |
if( mode == 'r' ) { |
open_mode = O_RDONLY; |
if( file_flags & _WRITE ) { /* if "r+" mode */ |
open_mode = O_RDWR; |
} |
#if defined( __NETWARE__ ) |
open_mode |= O_BINARY; |
#elif defined( __UNIX__ ) |
#else |
if( file_flags & _BINARY ) { |
open_mode |= O_BINARY; |
} else { |
open_mode |= O_TEXT; |
} |
#endif |
p_mode = 0; |
} else { /* mode == 'w' || mode == 'a' */ |
if( file_flags & _READ ) { /* if "a+" or "w+" mode */ |
open_mode = O_RDWR | O_CREAT; |
} else { |
open_mode = O_WRONLY | O_CREAT; |
} |
if( file_flags & _APPEND ) { |
open_mode |= O_APPEND; |
} else { /* mode == 'w' */ |
open_mode |= O_TRUNC; |
} |
#if defined( __NETWARE__ ) |
open_mode |= O_BINARY; |
#elif defined( __UNIX__ ) |
#else |
if( file_flags & _BINARY ) { |
open_mode |= O_BINARY; |
} else { |
open_mode |= O_TEXT; |
} |
#endif |
p_mode = PMODE; |
} |
fp->_handle = __F_NAME(sopen,_wsopen)( name, open_mode, shflag, p_mode ); |
if( fp->_handle == -1 ) { |
// since we couldn't open the file, release the FILE struct |
__freefp( fp ); |
return( NULL ); |
} |
fp->_cnt = 0; |
fp->_bufsize = 0; /* was BUFSIZ JBS 31-may-91 */ |
#ifndef __NETWARE__ |
_FP_ORIENTATION(fp) = _NOT_ORIENTED; /* initial orientation */ |
_FP_EXTFLAGS(fp) = extflags; |
#endif |
#if defined( __NT__ ) || defined( __OS2__ ) |
_FP_PIPEDATA(fp).isPipe = 0; /* not a pipe */ |
#endif |
_FP_BASE(fp) = NULL; |
if( file_flags & _APPEND ) { |
fseek( fp, 0L, SEEK_END ); |
} |
__chktty( fp ); /* JBS 28-aug-90 */ |
return( fp ); |
} |
_WCRTLINK FILE *__F_NAME(_fsopen,_wfsopen)( const CHAR_TYPE *name, |
const CHAR_TYPE *access_mode, int shflag ) |
{ |
FILE * fp; |
int file_flags; |
int extflags; |
/* validate access_mode */ |
file_flags = __F_NAME(__open_flags,__wopen_flags)( access_mode, &extflags ); |
if( file_flags == 0 ) { |
return( NULL ); |
} |
/* specify dummy handle 0 */ |
fp = __allocfp( 0 ); /* JBS 30-aug-91 */ |
if( fp != NULL ) { |
fp = __F_NAME(__doopen,__wdoopen)( name, *access_mode, |
file_flags, extflags, |
shflag, fp ); |
} |
return( fp ); |
} |
_WCRTLINK FILE *__F_NAME(fopen,_wfopen)( const CHAR_TYPE *name, const CHAR_TYPE *access_mode ) |
{ |
return( __F_NAME(_fsopen,_wfsopen)( name, access_mode, OPENMODE_DENY_COMPAT ) ); |
} |
static FILE *close_file( FILE *fp ) |
{ |
__stream_link * link; |
__stream_link **owner; |
_AccessIOB(); |
/* See if the file pointer is a currently open file. */ |
link = _RWD_ostream; |
for( ;; ) { |
if( link == NULL ) break; |
if( link->stream == fp ) { |
if( fp->_flag & (_READ|_WRITE) ) { |
__doclose( fp, 1 ); |
} |
_ReleaseIOB(); |
return( fp ); |
} |
link = link->next; |
} |
/* |
It's not on the list of open files, so check the list of |
recently closed ones. |
*/ |
owner = &_RWD_cstream; |
for( ;; ) { |
link = *owner; |
if( link == NULL ) break; |
if( link->stream == fp ) { |
/* remove from closed list and put on open */ |
*owner = link->next; |
link->next = _RWD_ostream; |
_RWD_ostream = link; |
_ReleaseIOB(); |
return( fp ); |
} |
owner = &link->next; |
} |
/* We ain't seen that file pointer ever. Leave things be. */ |
__set_errno( EBADF ); |
_ReleaseIOB(); |
return( NULL ); |
} |
_WCRTLINK FILE *__F_NAME(freopen,_wfreopen)( const CHAR_TYPE *name, |
const CHAR_TYPE *access_mode, FILE *fp ) |
{ |
int hdl; |
int file_flags; |
int extflags; |
_ValidFile( fp, 0 ); |
/* validate access_mode */ |
file_flags = __F_NAME(__open_flags,__wopen_flags)( access_mode, &extflags ); |
if( file_flags == 0 ) { |
return( NULL ); |
} |
hdl = fileno( fp ); |
_AccessFileH( hdl ); |
#ifdef DEFAULT_WINDOWING |
if( _WindowsRemoveWindowedHandle != 0 ) { |
_WindowsRemoveWindowedHandle( hdl ); |
} |
#endif |
fp = close_file( fp ); |
if( fp != NULL ) { |
fp->_flag &= _DYNAMIC; /* 24-jul-92 */ |
fp = __F_NAME(__doopen,__wdoopen)( name, *access_mode, |
file_flags, extflags, |
0, fp ); |
} |
_ReleaseFileH( hdl ); |
return( fp ); |
} |
/programs/develop/open watcom/trunk/clib/src/fprtf.h |
---|
0,0 → 1,32 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Prototype for __fprtf() internal routine. |
* |
****************************************************************************/ |
extern int __F_NAME(__fprtf,__fwprtf)( FILE *fp, const CHAR_TYPE *format, va_list arg ); |
/programs/develop/open watcom/trunk/clib/src/fread.c |
---|
0,0 → 1,165 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Implementation of fread() - read data from stream. |
* |
****************************************************************************/ |
#include "variety.h" |
#include <stdio.h> |
#include <unistd.h> |
#include "fileacc.h" |
#include <string.h> |
#include <errno.h> |
#include "rtdata.h" |
#include "seterrno.h" |
#include "qread.h" |
#include "streamio.h" |
#define DOS_EOF_CHAR 0x1a |
extern int __fill_buffer( FILE * ); /* located in fgetc */ |
_WCRTLINK size_t fread( void *_buf, size_t size, size_t n, FILE *fp ) |
{ |
char *buf = _buf; |
size_t len_read; |
_ValidFile( fp, 0 ); |
_AccessFile( fp ); |
if( (fp->_flag & _READ) == 0 ) { |
__set_errno( EBADF ); |
fp->_flag |= _SFERR; |
_ReleaseFile( fp ); |
return( 0 ); |
} |
#if 0 |
/*** If the buffer is _DIRTY, resync it before reading ***/ |
if( fp->_flag & (_WRITE | _UNGET) ) { |
if( fp->_flag & _DIRTY ) { |
fseek( fp, 0, SEEK_CUR ); |
} |
} |
#endif |
n *= size; |
if( n == 0 ) { |
_ReleaseFile( fp ); |
return( n ); |
} |
if( _FP_BASE(fp) == NULL ) { |
__ioalloc( fp ); /* allocate buffer */ |
} |
len_read = 0; |
#if !defined( __UNIX__ ) |
if( fp->_flag & _BINARY ) |
#endif |
{ |
size_t bytes_left = n, bytes; |
for( ;; ) { |
if( fp->_cnt != 0 ) { |
bytes = fp->_cnt; |
if( bytes > bytes_left ) { |
bytes = bytes_left; |
} |
memcpy( buf, fp->_ptr, bytes ); |
fp->_ptr += bytes; |
buf += bytes; |
fp->_cnt -= bytes; |
bytes_left -= bytes; |
len_read += bytes; |
} |
if( bytes_left == 0 ) break; |
/* if user's buffer is larger than our buffer, OR |
_IONBF is set, then read directly into user's buffer. */ |
if( (bytes_left >= fp->_bufsize) || (fp->_flag & _IONBF) ) { |
bytes = bytes_left; |
fp->_ptr = _FP_BASE(fp); |
fp->_cnt = 0; |
if( !(fp->_flag & _IONBF) ) { |
/* if more than a sector, set to multiple of sector size*/ |
if( bytes > 512 ) { |
bytes &= -512; |
} |
} |
n = __qread( fileno(fp), buf, bytes ); |
if( n == -1 ) { |
fp->_flag |= _SFERR; |
break; |
} else if( n == 0 ) { |
fp->_flag |= _EOF; |
break; |
} |
buf += n; |
bytes_left -= n; |
len_read += n; |
} else { |
if( __fill_buffer( fp ) == 0 ) break; |
} |
} /* end for */ |
#if !defined(__UNIX__) |
} else { |
for( ;; ) { |
int c; |
// ensure non-empty buffer |
if( fp->_cnt == 0 ) { |
if( __fill_buffer( fp ) == 0 ) break; |
} |
// get character |
--fp->_cnt; |
c = *fp->_ptr++ & 0xff; |
// perform new-line translation |
if( c == '\r' ) { |
// ensure non-empty buffer |
if( fp->_cnt == 0 ) { |
if( __fill_buffer( fp ) == 0 ) break; |
} |
// get character |
--fp->_cnt; |
c = *fp->_ptr++ & 0xff; |
} |
// check for DOS end of file marker |
if( c == DOS_EOF_CHAR ) { |
fp->_flag |= _EOF; |
break; |
} |
// store chracter |
buf[len_read] = (char)c; |
++len_read; |
if( len_read == n ) break; |
} |
#endif |
} |
_ReleaseFile( fp ); |
return( len_read / size ); |
} |
/programs/develop/open watcom/trunk/clib/src/fseek.c |
---|
0,0 → 1,157 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Implementation of fseek - set stream position. |
* |
****************************************************************************/ |
#include "variety.h" |
#include <stdio.h> |
#include <errno.h> |
#include <unistd.h> |
#include "fileacc.h" |
#include "rtdata.h" |
#include "seterrno.h" |
#include "flush.h" |
static int __update_buffer( long diff, FILE *fp ) |
{ |
/* |
diff is relative to fp->_ptr |
if diff is within the buffer update the pointers and return 0 |
otherwise update the pointers and return 1 |
*/ |
if( diff <= fp->_cnt && diff >= (_FP_BASE(fp) - fp->_ptr) ) { |
fp->_flag &= ~(_EOF); |
fp->_ptr += diff; |
fp->_cnt -= diff; |
return( 0 ); |
} |
return( 1 ); |
} |
/* |
* This used to be in __update_buffer(), but we don't want to do this until |
* AFTER we've made certain that lseek() will be a successful one. |
*/ |
static void __reset_buffer( FILE *fp ) |
{ |
fp->_flag &= ~(_EOF); |
fp->_ptr = _FP_BASE(fp); |
fp->_cnt = 0; |
} |
_WCRTLINK int fseek( FILE *fp, long offset, int origin ) |
{ |
_ValidFile( fp, -1 ); |
_AccessFile( fp ); |
/* |
if the file is open for any sort of writing we must ensure that |
the buffer is flushed when dirty so that the integrity of the |
data is preserved. |
if there is an ungotten character in the buffer then the data must |
be discarded to ensure the integrity of the data |
*/ |
if( fp->_flag & (_WRITE | _UNGET) ) { |
if( fp->_flag & _DIRTY ) { |
/* |
the __flush routine aligns the DOS file pointer with the |
start of the resulting cleared buffer, as such, the SEEK_CUR |
code used for the non-_DIRTY buffer case is not required |
*/ |
if( __flush( fp ) ) { |
// assume __flush set the errno value |
// if erroneous input, override errno value |
if( origin == SEEK_SET && offset < 0 ) { |
__set_errno( EINVAL ); |
} |
_ReleaseFile( fp ); |
return( -1 ); |
} |
} else { |
if( origin == SEEK_CUR ) { |
offset -= fp->_cnt; |
} |
fp->_ptr = _FP_BASE(fp); |
fp->_cnt = 0; |
} |
fp->_flag &= ~(_EOF|_UNGET); |
if( lseek( fileno( fp ), offset, origin ) == -1 ) { |
_ReleaseFile( fp ); |
return( -1 ); |
} |
} else { |
// file is open for read only, |
// no characters have been ungotten |
// the OS file pointer is at fp->_ptr + fp->_cnt relative to the |
// FILE* buffer |
switch( origin ) { |
case SEEK_CUR: |
{ long ptr_delta = fp->_cnt; |
if( __update_buffer( offset, fp ) ) { |
offset -= ptr_delta; |
if( lseek( fileno( fp ), offset, origin ) == -1 ) { |
_ReleaseFile( fp ); |
return( -1 ); |
} |
__reset_buffer(fp); |
} |
} break; |
case SEEK_SET: |
{ long file_ptr = tell( fileno( fp ) ); |
file_ptr -= fp->_cnt; |
if( __update_buffer( offset - file_ptr, fp ) ) { |
if( lseek( fileno( fp ), offset, origin ) == -1 ) { |
_ReleaseFile( fp ); |
return( -1 ); |
} |
__reset_buffer(fp); |
} |
} break; |
case SEEK_END: |
fp->_flag &= ~(_EOF); |
fp->_ptr = _FP_BASE(fp); |
fp->_cnt = 0; |
if( lseek( fileno( fp ), offset, origin ) == -1 ) { |
_ReleaseFile( fp ); |
return( -1 ); |
} |
break; |
default: |
__set_errno( EINVAL ); |
_ReleaseFile( fp ); |
return( -1 ); |
} |
} |
_ReleaseFile( fp ); |
return( 0 ); /* indicate success */ |
} |
/programs/develop/open watcom/trunk/clib/src/ftell.c |
---|
0,0 → 1,61 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Platform independent ftell() implementaiton. |
* |
****************************************************************************/ |
#include "variety.h" |
#include <stdio.h> |
#include <string.h> |
#include <unistd.h> |
#include "fileacc.h" |
_WCRTLINK long ftell( FILE *fp ) |
{ |
long pos; |
_ValidFile( fp, -1 ); |
if( fp->_flag & _APPEND && fp->_flag & _DIRTY ) { |
fflush( fp ); /* if data written in append mode, OS must know */ |
} |
pos = tell( fileno( fp ) ); |
if( pos == -1 ) { |
return( -1L ); |
} |
_AccessFile( fp ); |
if( fp->_cnt != 0 ) { /* if something in buffer */ |
if( fp->_flag & _DIRTY ) { /* last operation was a put */ |
pos += fp->_cnt; |
} else { /* last operation was a get */ |
pos -= fp->_cnt; |
} |
} |
_ReleaseFile( fp ); |
return( pos ); |
} |
/programs/develop/open watcom/trunk/clib/src/ftos.h |
---|
0,0 → 1,45 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Prototypes for floating-point formatting routines. |
* |
****************************************************************************/ |
#ifndef _FTOS_H_INCLUDED |
#define _FTOS_H_INCLUDED |
#include "variety.h" |
#include "farsupp.h" |
_WCRTLINK extern FAR_STRING (*__EFG_printf)(); |
_WCRTLINK extern void (*__EFG_scanf)(); |
extern FAR_STRING _EFG_Format(); |
extern void __cnvs2d(); |
_WMRTLINK extern FAR_STRING (*__get_EFG_Format())(); |
_WMRTLINK extern void (*__get__cnvs2d())(); |
#endif |
/programs/develop/open watcom/trunk/clib/src/gtchewnt.c |
---|
0,0 → 1,50 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE |
* DESCRIBE IT HERE! |
* |
****************************************************************************/ |
#include "variety.h" |
#include <conio.h> |
#include <stdio.h> |
#include "rtdata.h" |
_WCRTLINK int getche() |
{ |
unsigned c; |
unsigned stashed; |
stashed = _RWD_cbyte; |
c = getch(); |
if( c != EOF && stashed == 0 ) { |
putch( c ); |
} |
return( c ); |
} |
/programs/develop/open watcom/trunk/clib/src/handleio.h |
---|
0,0 → 1,41 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: prototypes for handleio internal functions |
* |
****************************************************************************/ |
/* __plusplus_fstat and __plusplus_open are used by C++ run-time library */ |
_WCRTLINK extern int __plusplus_fstat( int handle, int *pios_mode ); |
_WCRTLINK extern int __plusplus_open( const char *name, int *pios_mode, int prot ); |
extern unsigned __IOMode( int handle ); |
extern void __set_handles( int num ); |
extern void __grow_iomode( int num ); |
extern void __shrink_iomode( void ); |
extern unsigned *__io_mode; |
/programs/develop/open watcom/trunk/clib/src/hdlman.c |
---|
48,23 → 48,6 |
#include "seterrno.h" |
#include "handleio.h" |
#ifdef DLHEAP |
void* _cdecl dlmalloc(size_t); |
void _cdecl dlfree(void*); |
void _cdecl mf_init(); |
#define malloc dlmalloc |
#define free dlfree |
#define realloc dlrealloc |
#define lib_malloc dlmalloc |
#define lib_free dlfree |
#define lib_realloc dlrealloc |
#endif |
#undef __getOSHandle |
extern unsigned __NFiles; // the size of the iomode array |
153,6 → 136,7 |
return( __OSHandles[ hid ] ); |
} |
int __setOSHandle( unsigned hid, HANDLE hdl ) |
{ |
// call the Win32 API for a standard file handle |
184,24 → 168,11 |
HANDLE __NTGetFakeHandle( void ) |
{ |
HANDLE os_handle; |
static DWORD fakeHandle = 0x80000000L; |
_AccessFList(); |
// os_handle = CreateEvent( 0, 0, 0, 0 ); |
os_handle = 0; |
if( os_handle == NULL ) |
{ |
// win32s does not support event handles |
static DWORD fakeHandle = 0x80000000L; |
fakeHandle++; |
os_handle = (HANDLE)fakeHandle; |
} |
else |
{ |
__FakeHandles = lib_realloc( __FakeHandles, (__topFakeHandle+1) * sizeof( HANDLE ) ); |
__FakeHandles[ __topFakeHandle ] = os_handle; |
__topFakeHandle++; |
} |
_ReleaseFList(); |
return( os_handle ); |
} |
/programs/develop/open watcom/trunk/clib/src/heap.h |
---|
0,0 → 1,207 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Heap library configuration for various platforms. |
* |
****************************************************************************/ |
#include "variety.h" |
#if defined(_M_IX86) |
#include <i86.h> |
#endif |
#if !defined(__DOS_EXT__) |
#if defined(__386__) && \ |
!defined(__WINDOWS_386__) && \ |
!defined(__WINDOWS__) && \ |
!defined(__OS2__) && \ |
!defined(__NT__) && \ |
!defined(__OSI__) && \ |
!defined(__UNIX__) |
#define __DOS_EXT__ |
#endif |
#endif |
typedef unsigned int tag; |
typedef struct freelistp frl; |
typedef struct freelistp _WCNEAR *frlptr; |
typedef struct freelist _WCFAR *farfrlptr; |
typedef unsigned char _WCNEAR *PTR; |
typedef unsigned char _WCFAR *FARPTR; |
typedef struct miniheapblkp _WCNEAR *mheapptr; |
/* |
** NOTE: the size of these data structures is critical to the alignemnt |
** of the pointers returned by malloc(). |
*/ |
struct freelist { |
tag len; /* length of block in free list */ |
unsigned int prev; /* offset of previous block in free list */ |
unsigned int next; /* offset of next block in free list */ |
}; |
struct heapblk { |
tag heaplen; /* size of heap (0 = 64K) */ |
unsigned int prevseg; /* segment selector for previous heap */ |
unsigned int nextseg; /* segment selector for next heap */ |
unsigned int rover; /* roving pointer into free list */ |
unsigned int b4rover; /* largest block before rover */ |
unsigned int largest_blk; /* largest block in the heap */ |
unsigned int numalloc; /* number of allocated blocks in heap */ |
unsigned int numfree; /* number of free blocks in the heap */ |
struct freelist freehead; /* listhead of free blocks in heap */ |
}; |
struct freelistp { |
tag len; |
frlptr prev; |
frlptr next; |
}; |
struct heapblkp { |
tag heaplen; |
unsigned int prevseg; |
unsigned int nextseg; |
frlptr rover; |
unsigned int b4rover; |
unsigned int largest_blk; |
unsigned int numalloc; |
unsigned int numfree; |
frl freehead; |
}; |
struct miniheapblkp { |
tag len; |
mheapptr prev; |
mheapptr next; |
frlptr rover; |
unsigned int b4rover; |
unsigned int largest_blk; |
unsigned int numalloc; |
unsigned int numfree; |
frl freehead; |
}; |
struct heapstart { |
struct heapblk h; |
struct freelist first; |
}; |
struct heapend { |
tag last_tag; |
struct freelist last; |
}; |
#ifdef __DOS_EXT__ |
struct dpmi_hdr { |
unsigned long dpmi_handle; |
tag dos_seg_value; // 0 => DPMI block, else DOS segment |
}; |
#endif |
extern unsigned _curbrk; |
extern mheapptr _WCNEAR __nheapbeg; |
#if defined(_M_IX86) |
extern __segment __fheap; |
extern __segment __bheap; |
extern __segment __fheapRover; |
#endif |
extern int __heap_enabled; |
extern unsigned int __LargestSizeB4Rover; |
extern struct miniheapblkp _WCNEAR *__MiniHeapRover; |
extern unsigned int __LargestSizeB4MiniHeapRover; |
extern struct miniheapblkp _WCNEAR *__MiniHeapFreeRover; |
extern size_t __LastFree( void ); |
extern int __NHeapWalk( struct _heapinfo *entry, mheapptr heapbeg ); |
extern int __ExpandDGROUP( unsigned int __amt ); |
#if defined(_M_IX86) |
extern unsigned __AllocSeg( unsigned int __amt ); |
extern unsigned __GrowSeg( __segment __seg, unsigned int __amt ); |
extern int __FreeSeg( __segment seg ); |
extern int __HeapWalk( struct _heapinfo *entry, __segment seg, unsigned all ); |
extern int __HeapMin( __segment seg, unsigned one_seg ); |
extern int __HeapSet( __segment seg, unsigned fill ); |
#endif |
#if defined(__DOS_EXT__) |
extern void __FreeDPMIBlocks( void ); |
extern void *__ReAllocDPMIBlock( frlptr p1, unsigned req_size ); |
extern void *__ExpandDPMIBlock( frlptr, unsigned ); |
#endif |
extern int __HeapManager_expand( __segment seg, unsigned offset, |
size_t req_size, size_t *growth_size ); |
extern void _WCFAR __HeapInit( void _WCNEAR *start, unsigned int amount ); |
_WCRTLINK extern void _WCNEAR *__brk( unsigned ); |
#if defined(_M_IX86) |
#define _DGroup() FP_SEG((&__nheapbeg)) |
#else |
#define _DGroup() 0 |
#endif |
// __IsCtsNHeap() is used to determine whether the operating system provides |
// a continuous near heap block. __ExpandDGroup should slice for more near |
// heap under those operating systems with __IsCtsNHeap() == 1. |
#if defined(__WARP__) || \ |
defined(__NT__) || \ |
defined(__WINDOWS_386__) || \ |
defined(__WINDOWS_286__) |
#define __IsCtsNHeap() 0 |
#elif defined(__DOS_EXT__) |
#define __IsCtsNHeap() ((_IsRationalZeroBase() || _IsCodeBuilder()) ? 0 : 1) |
#else |
#define __IsCtsNHeap() 1 |
#endif |
extern unsigned __MemAllocator( unsigned __sz, unsigned __seg, unsigned __off ); |
extern void __MemFree( unsigned __ptr, unsigned __seg, unsigned __off ); |
#if defined(_M_IX86) |
#if defined(__386__) |
#pragma aux __MemAllocator "*" parm [eax] [edx] [ebx]; |
#pragma aux __MemFree "*" parm [eax] [edx] [ebx]; |
#else |
#pragma aux __MemAllocator "*" parm [ax] [dx] [bx]; |
#pragma aux __MemFree "*" parm [ax] [dx] [bx]; |
#endif |
#endif |
#define PARAS_IN_64K (0x1000) |
#define END_TAG (~0) |
#define TAG_SIZE (sizeof(tag)) |
#if defined(M_I86) |
#define ROUND_SIZE (TAG_SIZE-1) |
#else |
#define ROUND_SIZE (TAG_SIZE+TAG_SIZE-1) |
#endif |
#define FRL_SIZE ((sizeof(frl)+ROUND_SIZE)&~ROUND_SIZE) |
#define __HM_SUCCESS 0 |
#define __HM_FAIL 1 |
#define __HM_TRYGROW 2 |
/programs/develop/open watcom/trunk/clib/src/heapacc.h |
---|
0,0 → 1,59 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE |
* DESCRIBE IT HERE! |
* |
****************************************************************************/ |
#ifndef _HEAPACC_H_INCLUDED |
#define _HEAPACC_H_INCLUDED |
/* macros for serialization of accesses to the heap */ |
#if defined(__SW_BM) |
#if defined(__386__) || defined(__AXP__) || defined(__PPC__) |
extern void (*_AccessFHeap)(); |
extern void (*_ReleaseFHeap)(); |
extern void (*_AccessNHeap)(); |
extern void (*_ReleaseNHeap)(); |
#else |
extern void __AccessFHeap(); |
extern void __ReleaseFHeap(); |
extern void __AccessNHeap(); |
extern void __ReleaseNHeap(); |
#define _AccessFHeap() __AccessFHeap() |
#define _ReleaseFHeap() __ReleaseFHeap() |
#define _AccessNHeap() __AccessNHeap() |
#define _ReleaseNHeap() __ReleaseNHeap() |
#endif |
#else |
#define _AccessFHeap() |
#define _ReleaseFHeap() |
#define _AccessNHeap() |
#define _ReleaseNHeap() |
#endif |
#endif |
/programs/develop/open watcom/trunk/clib/src/iomode.h |
---|
0,0 → 1,70 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: prototypes and definitions for iomode array manipulation |
* |
****************************************************************************/ |
#ifndef _IOMODE_H_INCLUDED |
#define _IOMODE_H_INCLUDED |
#if defined(__NT__) |
#include <windows.h> |
#define NULL_HANDLE (HANDLE)-1 |
#define DUMMY_HANDLE (HANDLE)-2 |
extern unsigned __NHandles; |
extern void __initPOSIXHandles( void ); |
extern unsigned __growPOSIXHandles( unsigned num ); |
extern int __allocPOSIXHandle( HANDLE hdl ); |
extern void __freePOSIXHandle( int hid ); |
extern HANDLE __getOSHandle( int hid ); |
extern int __setOSHandle( unsigned hid, HANDLE hdl ); |
extern HANDLE __NTGetFakeHandle( void ); |
extern HANDLE *__OSHandles; |
#define __getOSHandle( hid ) __OSHandles[ hid ] |
#define NT_STDIN_FILENO (__getOSHandle( STDIN_FILENO )) |
#define NT_STDOUT_FILENO (__getOSHandle( STDOUT_FILENO )) |
#define NT_STDERR_FILENO (__getOSHandle( STDERR_FILENO )) |
#endif |
#if !defined(__NETWARE__) |
extern unsigned __GetIOMode( int __handle ); |
extern int __SetIOMode( int __handle, unsigned __value ); |
extern void __SetIOMode_nogrow( int __handle, unsigned __value ); |
extern void __ChkTTYIOMode( int __handle ); |
#endif |
#endif |
/programs/develop/open watcom/trunk/clib/src/kolibri.h |
---|
0,0 → 1,105 |
#ifdef __cplusplus |
extern "C" |
{ |
#endif |
#define FONT0 0x00000000 |
#define FONT1 0x10000000 |
#define BT_NORMAL 0x00000000 |
#define BT_NOFRAME 0x20000000 |
#define BT_HIDE 0x40000000 |
#define BT_DEL 0x80000000 |
#define EV_REDRAW 1 |
#define EV_KEY 2 |
#define EV_BUTTON 3 |
#define REL_SCREEN 0 |
#define REL_WINDOW 1 |
#define FILE_NOT_FOUND 5 |
#define FILE_EOF 6 |
typedef unsigned int DWORD; |
typedef unsigned short int WORD; |
typedef struct |
{ DWORD pci_cmd; |
DWORD irq; |
DWORD glob_cntrl; |
DWORD glob_sta; |
DWORD codec_io_base; |
DWORD ctrl_io_base; |
DWORD codec_mem_base; |
DWORD ctrl_mem_base; |
DWORD codec_id; |
} CTRL_INFO; |
typedef struct |
{ DWORD cmd; |
DWORD offset; |
DWORD r1; |
DWORD count; |
DWORD buff; |
char r2; |
char *name; |
} FILEIO; |
typedef struct |
{ DWORD attr; |
DWORD flags; |
DWORD cr_time; |
DWORD cr_date; |
DWORD acc_time; |
DWORD acc_date; |
DWORD mod_time; |
DWORD mod_date; |
DWORD size; |
DWORD size_high; |
} FILEINFO; |
void _stdcall InitHeap(int heap_size); |
void* _stdcall UserAlloc(int size); |
int _stdcall UserFree(void* p); |
void _stdcall GetNotify(void *event); |
void _stdcall CreateThread(void *fn, char *p_stack); |
DWORD _stdcall GetMousePos(DWORD rel_type); |
void _stdcall debug_out_hex(DWORD val); |
void debug_out_str(char* str); |
int _stdcall get_fileinfo(const char *name,FILEINFO* pinfo); |
int _stdcall read_file (const char *name,char*buff,DWORD offset, DWORD count,DWORD *reads); |
int _stdcall write_file(const char *name,char*buff,int offset,int count,int *writes); |
//void exit(); |
int _stdcall get_key(int *key); |
int _stdcall remap_key(int key); |
int _cdecl get_button_id(); |
void delay(int val); |
int wait_for_event(int time); |
int wait_for_event_infinite(); |
void BeginDraw(void); |
void EndDraw(void); |
void _stdcall GetScreenSize(int *x, int*y); |
void _stdcall DrawWindow(int x,int y, int sx, int sy,int workcolor,int style, |
int captioncolor,int windowtype,int bordercolor); |
void _stdcall debug_out(int ch); |
void _stdcall make_button(int x, int y, int xsize, int ysize, int id, int color); |
void _stdcall draw_bar(int x, int y, int xsize, int ysize, int color); |
void _stdcall write_text(int x,int y,int color,char* text,int len); |
#ifdef __cplusplus |
extern "C" |
} |
#endif |
/programs/develop/open watcom/trunk/clib/src/langenv.h |
---|
0,0 → 1,113 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Establish common stuff for a target environment for |
* language-related processors. |
* |
****************************************************************************/ |
#ifndef __LANGENV_H__ |
#define __LANGENV_H__ |
// This file uses __TGT_SYS to figure out the required target. |
// |
// langenvd.h contains the possible values. |
// |
// __TGT_SYS_X86 is the default |
// |
#include "langenvd.h" |
#ifndef __TGT_SYS |
#define __TGT_SYS __TGT_SYS_X86 |
#endif |
#if __TGT_SYS == __TGT_SYS_X86 |
#define TS_SEG_CODE "_TEXT" |
#define TS_SEG_CONST "CONST" |
#define TS_SEG_CONST2 "CONST2" |
#define TS_SEG_DATA "_DATA" |
#define TS_SEG_TIB "TIB" |
#define TS_SEG_TI "TI" |
#define TS_SEG_TIE "TIE" |
#define TS_SEG_XIB "XIB" |
#define TS_SEG_XI "XI" |
#define TS_SEG_XIE "XIE" |
#define TS_SEG_YIB "YIB" |
#define TS_SEG_YI "YI" |
#define TS_SEG_YIE "YIE" |
#define TS_SEG_YC "YC" |
#define TS_SEG_BSS "_BSS" |
#define TS_SEG_STACK "STACK" |
#define TS_SEG_DEPENDS "not used" |
#define TS_SEG_TLSB ".tls" |
#define TS_SEG_TLS ".tls$" |
#define TS_SEG_TLSE ".tls$ZZZ" |
#define TS_SEG_TLS_CLASS "TLS" |
#define TS_MAX_OBJNAME 256 |
#define TS_DATA_MANGLE "_*" |
#define TS_CODE_MANGLE "*_" |
#elif __TGT_SYS == __TGT_SYS_AXP_NT || __TGT_SYS == __TGT_SYS_PPC_NT || __TGT_SYS == __TGT_SYS_MIPS |
#define TS_SEG_CODE ".text" |
#define TS_SEG_CONST ".const" |
#define TS_SEG_CONST2 ".const2" |
#define TS_SEG_DATA ".data" |
#define TS_SEG_TIB ".rtl$tib" |
#define TS_SEG_TI ".rtl$tid" |
#define TS_SEG_TIE ".rtl$tie" |
#define TS_SEG_XIB ".rtl$xib" |
#define TS_SEG_XI ".rtl$xid" |
#define TS_SEG_XIE ".rtl$xie" |
#define TS_SEG_YIB ".rtl$yib" |
#define TS_SEG_YI ".rtl$yid" |
#define TS_SEG_YIE ".rtl$yie" |
#define TS_SEG_YC ".rtl$yc" |
#define TS_SEG_BSS ".bss" |
#define TS_SEG_STACK ".stack" |
#define TS_SEG_DEPENDS ".depend" |
#define TS_SEG_TLSB ".tls" |
#define TS_SEG_TLS ".tls$" |
#define TS_SEG_TLSE ".tls$ZZZ" |
#define TS_SEG_TLS_CLASS NULL |
#define TS_MAX_OBJNAME 1024 |
#define TS_DATA_MANGLE "*" |
#define TS_CODE_MANGLE "*" |
#else |
#error Invalid target system |
#endif |
#undef __TGT_SYS |
#endif |
/programs/develop/open watcom/trunk/clib/src/langenvd.h |
---|
0,0 → 1,40 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Define values for language targets. |
* |
****************************************************************************/ |
#ifndef __LANGENVD_H__ |
#define __LANGENVD_H__ |
#define __TGT_SYS_X86 0 // All x86 systems to date |
#define __TGT_SYS_AXP_NT 1 // Win32 on DEC Alpha AXP |
#define __TGT_SYS_PPC_NT 2 // Win32 on IBM/Motorola PowerPC |
#define __TGT_SYS_MIPS 3 // MIPS RISC Architecture |
#endif |
/programs/develop/open watcom/trunk/clib/src/liballoc.h |
---|
0,0 → 1,90 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: These are macros that define the 'real' functions that |
* the library memory allocators use. |
* |
****************************************************************************/ |
#ifndef _LIBALLOC_H_INCLUDED |
#define _LIBALLOC_H_INCLUDED |
#include "variety.h" |
#include <malloc.h> |
#ifdef __NETWARE__ |
/* |
// NetWare uses Alloc and Free because the heap will not have |
// been initialised at _Prelude time... |
*/ |
#define lib_malloc( x ) _NW_malloc( x ) |
#define lib_free( x ) _NW_free( x ) |
#if defined (_NETWARE_CLIB) |
#define lib_realloc( x, y, z) _NW_realloc( x, y, z ) |
#else |
#define lib_realloc( x, y) _NW_realloc( x, y) |
#endif |
#define lib_calloc( x, y ) _NW_calloc( x, y ) |
extern void *_NW_calloc( size_t __n,size_t __size ); |
extern void *_NW_malloc( size_t ); |
#if defined (_NETWARE_CLIB) |
extern void *_NW_realloc( void *ptr,size_t size,size_t old); |
#else |
extern void *_NW_realloc( void *ptr,size_t size); |
#endif |
extern void _NW_free( void *ptr ); |
#else |
#define lib_malloc( x ) malloc( x ) |
#define lib_free( x ) free( x ) |
#define lib_realloc( x, y ) realloc( x, y ) |
#define lib_nmalloc( x ) _nmalloc( x ) |
#define lib_nfree( x ) _nfree( x ) |
#define lib_nrealloc( x, y ) _nrealloc( x, y ) |
#define lib_fmalloc( x ) _fmalloc( x ) |
#define lib_ffree( x ) _ffree( x ) |
#define lib_frealloc( x, y ) _frealloc( x, y ) |
#define lib_calloc( x, y ) calloc( x, y ) |
#endif |
// these are used by the C++ library |
// they are real routines so that the C++ library |
// remains platform independent. |
#ifdef __cplusplus |
extern "C" { |
#endif |
_WCRTLINK extern void _plib_free( void *ptr ); |
_WCRTLINK extern void *_plib_malloc( size_t size ); |
#ifdef __cplusplus |
} |
#endif |
#endif |
/programs/develop/open watcom/trunk/clib/src/lseek.c |
---|
0,0 → 1,55 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: lseek wrapper with positive -> extend file check |
* |
****************************************************************************/ |
#include "variety.h" |
#include <stdio.h> |
#include <unistd.h> |
#ifdef __NT__ |
#include <windows.h> |
#endif |
#include "iomode.h" |
#include "rtcheck.h" |
#include "seterrno.h" |
#include "lseek.h" |
_WCRTLINK long lseek( int handle, long offset, int origin ) |
{ |
unsigned iomode_flags; |
__handle_check( handle, -1 ); |
/*** Set the _FILEEXT iomode_flags bit if positive offset ***/ |
iomode_flags = __GetIOMode( handle ); |
if( offset > 0 && !(iomode_flags & _APPEND) ) |
__SetIOMode( handle, iomode_flags | _FILEEXT ); |
return( __lseek( handle, offset, origin ) ); |
} |
/programs/develop/open watcom/trunk/clib/src/lseek.h |
---|
0,0 → 1,41 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: basic __lseek (without file extend) definition/prototype |
* |
****************************************************************************/ |
#ifndef _LSEEK_H_INCLUDED |
#define _LSEEK_H_INCLUDED |
#if defined(__DOS__) || defined(__OS2__) || defined(__NT__) || defined(__WINDOWS__) |
_WCRTLINK extern long __lseek( int handle, long offset, int origin ); |
#else |
#define __lseek lseek |
#endif |
#endif |
/programs/develop/open watcom/trunk/clib/src/lseekwnt.c |
---|
50,17 → 50,56 |
#define INVALID_SET_FILE_POINTER 0xFFFFFFFF |
#endif |
typedef struct |
{ |
char *name; |
unsigned int offset; |
}__file_handle; |
typedef struct |
{ DWORD attr; |
DWORD flags; |
DWORD cr_time; |
DWORD cr_date; |
DWORD acc_time; |
DWORD acc_date; |
DWORD mod_time; |
DWORD mod_date; |
DWORD size; |
DWORD size_high; |
} FILEINFO; |
int _stdcall get_fileinfo(const char *name,FILEINFO* pinfo); |
_WCRTLINK long __lseek( int hid, long offset, int origin ) |
{ |
DWORD rc; |
__file_handle *fh; |
long rc; |
__handle_check( hid, -1 ); |
fh = (__file_handle*) __getOSHandle( hid ); |
switch(origin) |
{ |
case SEEK_SET: |
rc = offset; |
break; |
case SEEK_CUR: |
rc = fh->offset + offset; |
break; |
case SEEK_END: |
{ |
FILEINFO info; |
get_fileinfo(fh->name,&info); |
rc = offset + info.size; |
break; |
} |
default: |
return -1; |
}; |
// rc = SetFilePointer( __getOSHandle( hid ), offset, 0, origin ); |
// if( rc == INVALID_SET_FILE_POINTER ) { |
// return( __set_errno_nt() ); |
// } |
fh->offset = rc; |
return( rc ); |
} |
/programs/develop/open watcom/trunk/clib/src/mbchar.h |
---|
0,0 → 1,57 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE |
* DESCRIBE IT HERE! |
* |
****************************************************************************/ |
#if !defined(MBCHARdotH) |
#define MBCHARdotH |
/* Prototype for initialization function */ |
extern int __mbinit( int codepage ); |
#define _MBINIT_CP_ANSI (-1) |
#define _MBINIT_CP_OEM (-2) |
#define _MBINIT_CP_SBCS (-3) |
#define _MBINIT_CP_932 (-4) |
/* Current code page */ |
#if !defined(__UNIX__) |
extern unsigned int __MBCodePage; |
#define _MB_CODE_PAGE_DEFINED |
#endif |
/* See if a packed DBCS char has no lead byte, i.e. is a skinny char */ |
#define SINGLE_BYTE_CHAR(__c) ( !( (__c)&0xFF00 ) ) |
#endif |
/programs/develop/open watcom/trunk/clib/src/mdef.inc |
---|
0,0 → 1,358 |
;***************************************************************************** |
;* |
;* Open Watcom Project |
;* |
;* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
;* |
;* ======================================================================== |
;* |
;* This file contains Original Code and/or Modifications of Original |
;* Code as defined in and that are subject to the Sybase Open Watcom |
;* Public License version 1.0 (the 'License'). You may not use this file |
;* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
;* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
;* provided with the Original Code and Modifications, and is also |
;* available at www.sybase.com/developer/opensource. |
;* |
;* The Original Code and all software distributed under the License are |
;* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
;* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
;* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
;* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
;* NON-INFRINGEMENT. Please see the License for the specific language |
;* governing rights and limitations under the License. |
;* |
;* ======================================================================== |
;* |
;* Description: Memory model setup for interfacing with C code. |
;* |
;***************************************************************************** |
_SMALL_CODE = 00h |
_BIG_CODE = 01h |
_SMALL_DATA = 00h |
_BIG_DATA = 02h |
_HUGE_DATA = 04h |
_LONG_INTS = 08h |
_USE_32_SEGS = 10h |
_386 = 10h ; from old clib |
_DS_PEGGED = 20h ; from old clib (used for Windows) |
_TINY = 40h ; from old clib (formerly 10h) |
_FLAT = ( _SMALL_CODE or _SMALL_DATA or _USE_32_SEGS ) |
_SMALL = ( _SMALL_CODE or _SMALL_DATA ) |
_COMPACT = ( _SMALL_CODE or _BIG_DATA ) |
_MEDIUM = ( _BIG_CODE or _SMALL_DATA ) |
_LARGE = ( _BIG_CODE or _BIG_DATA ) |
_HUGE = ( _BIG_CODE or _HUGE_DATA ) |
_EMULATION = 00h |
_8087 = 01h |
ifdef __WASM__ |
ifdef __FLAT__ |
_MODEL = _FLAT |
endif |
ifdef __SMALL__ |
_MODEL = _SMALL |
endif |
ifdef __COMPACT__ |
_MODEL = _COMPACT |
endif |
ifdef __MEDIUM__ |
_MODEL = _MEDIUM |
endif |
ifdef __LARGE__ |
_MODEL = _LARGE |
endif |
ifdef __HUGE__ |
_MODEL = _HUGE |
endif |
ifdef __386__ |
_MODEL = ( _MODEL or _USE_32_SEGS ) |
endif |
ifdef __WINDOWS__ |
if _MODEL and (_BIG_DATA or _HUGE_DATA) |
_MODEL = ( _MODEL or _DS_PEGGED ) |
endif |
endif |
ifdef __FPC__ |
_MATH = _EMULATION |
endif |
ifdef __FPI__ |
_MATH = _8087 |
endif |
ifdef __FPI87__ |
_MATH = _8087 |
endif |
else |
include .\model.inc ; defines _MODEL, _MATH symbols |
endif |
if _MODEL and _BIG_CODE |
modstart macro modname,alignment |
ifdef NDEBUG |
name modname |
endif |
ifb <alignment> |
_TEXT segment word public 'CODE' |
else |
_TEXT segment alignment public 'CODE' |
endif |
assume cs:_TEXT |
endm |
calli macro regname |
call dword ptr [regname] |
endm |
codeptr macro p1,p2 |
ifb <p2> |
extrn p1 : dword |
else |
extrn "&p1",p2 : dword |
endif |
endm |
docall macro dest |
call far ptr dest |
endm |
dojmp macro dest |
jmp far ptr dest |
endm |
defp macro dsym,exp |
dsym proc far exp |
endm |
defpe macro dsym |
ifdef _EXPORT |
dsym proc far export |
else |
dsym proc far |
endif |
endm |
defn macro dsym |
dsym proc near |
endm |
endproc macro dsym |
dsym endp |
endm |
epilog macro |
if _MODEL and _USE_32_SEGS |
pop EBP |
dec EBP |
mov ESP,EBP |
else |
pop BP |
dec BP |
endif |
endm |
prolog macro |
if _MODEL and _USE_32_SEGS |
inc EBP |
push EBP |
mov EBP,ESP |
else |
inc BP |
push BP |
mov BP,SP |
endif |
endm |
xdefp macro p1,p2 |
ifb <p2> |
public p1 |
else |
public "&p1",p2 |
endif |
endm |
xref macro p1,p2 |
ifb <p2> |
extrn `p1` : far |
else |
extrn "&p1",`p2` : far |
endif |
endm |
lcall macro dest |
push cs |
call near ptr dest |
endm |
else |
modstart macro modname,alignment |
ifdef NDEBUG |
name modname |
endif |
if _MODEL and _USE_32_SEGS |
_TEXT segment use32 alignment public 'CODE' |
else |
_TEXT segment alignment public 'CODE' |
endif |
assume cs:_TEXT |
endm |
calli macro regname |
call regname |
endm |
codeptr macro p1,p2 |
if _MODEL and _USE_32_SEGS |
ifb <p2> |
extrn p1 : dword |
else |
extrn "&p1",p2 : dword |
endif |
else |
ifb <p2> |
extrn p1 : word |
else |
extrn "&p1",p2 : word |
endif |
endif |
endm |
defn macro dsym |
dsym proc near |
endm |
defp macro dsym,exp |
dsym proc near exp |
endm |
defpe macro dsym |
ifdef _EXPORT |
dsym proc near export |
else |
dsym proc near |
endif |
endm |
docall macro dest |
call dest |
endm |
dojmp macro dest |
jmp dest |
endm |
endproc macro dsym |
dsym endp |
endm |
epilog macro |
if _MODEL and _USE_32_SEGS |
pop EBP |
else |
pop BP |
endif |
endm |
prolog macro |
if _MODEL and _USE_32_SEGS |
push EBP |
mov EBP,ESP |
else |
push BP |
mov BP,SP |
endif |
endm |
xdefp macro p1,p2 |
ifb <p2> |
public p1 |
else |
public "&p1",p2 |
endif |
endm |
xref macro p1,p2 |
ifb <p2> |
extrn `p1` : near |
else |
extrn "&p1",`p2` : near |
endif |
endm |
lcall macro dest |
call dest |
endm |
endif |
endmod macro |
_TEXT ends |
endm |
dataseg macro |
DGROUP group _DATA |
assume ds:DGROUP,ss:DGROUP |
if _MODEL and _USE_32_SEGS |
_DATA segment use32 dword public 'DATA' |
else |
_DATA segment word public 'DATA' |
endif |
endm |
datasegment macro |
dataseg ; should be phased out |
endm |
enddata macro |
_DATA ends |
endm |
bss_segment macro |
if _MODEL and _USE_32_SEGS |
_BSS segment use32 dword public 'BSS' |
else |
_BSS segment word public 'BSS' |
endif |
DGROUP group _BSS |
assume ds:DGROUP |
endm |
endbss macro |
_BSS ends |
endm |
alias_function macro alias, function |
ifb <function> |
xref "C",_&alias |
else |
xref "C",function |
endif |
.code |
public "C",`alias` |
ifdef _EXPORT |
`alias` proc export |
else |
`alias` proc |
endif |
ifb <function> |
jmp _&alias |
else |
jmp `function` |
endif |
`alias` endp |
endm |
xred macro p1,p2,p3 |
ifb <p3> |
extrn p1 : p2 |
else |
extrn "&p1",p2 : p3 |
endif |
endm |
/programs/develop/open watcom/trunk/clib/src/mf.h |
---|
0,0 → 1,100 |
//#include "kolibc.h" |
#ifdef __cplusplus |
extern "C" { |
#endif /* __cplusplus */ |
typedef unsigned int dword; |
typedef unsigned int size_t; |
#define PINUSE_BIT 1 |
#define CINUSE_BIT 2 |
#define INUSE_BITS 3 |
struct m_seg |
{ |
char* base; /* base address */ |
dword size; /* allocated size */ |
struct m_seg* next; /* ptr to next segment */ |
dword flags; /* mmap and extern flag */ |
}; |
struct m_chunk |
{ |
dword prev_foot; /* Size of previous chunk (if free). */ |
dword head; /* Size and inuse bits. */ |
struct m_chunk* fd; /* double links -- used only if free. */ |
struct m_chunk* bk; |
}; |
typedef struct m_chunk* mchunkptr; |
struct t_chunk |
{ |
/* The first four fields must be compatible with malloc_chunk */ |
dword prev_foot; |
dword head; |
struct t_chunk* fd; |
struct t_chunk* bk; |
struct t_chunk* child[2]; |
struct t_chunk* parent; |
dword index; |
}; |
typedef struct t_chunk* tchunkptr; |
typedef struct t_chunk* tbinptr; |
typedef struct m_state |
{ |
dword smallmap; |
dword treemap; |
// DWORD dvsize; |
dword topsize; |
char* least_addr; |
// mchunkptr dv; |
mchunkptr top; |
dword magic; |
struct m_chunk smallbins[32]; |
tbinptr treebins[32]; |
}; |
void _cdecl init_malloc(void* p); |
void* _cdecl dlmalloc(size_t); |
void _cdecl dlfree(void*); |
void* _cdecl dlrealloc(void *,size_t); |
dword compute_tree_index(size_t s); |
static void insert_chunk(mchunkptr P, size_t S); |
static void insert_large_chunk(tchunkptr X, size_t S); |
static void unlink_large_chunk(tchunkptr X); |
//void replace_dv(mchunkptr P, size_t S); |
static void* malloc_small(size_t nb); |
static void* malloc_large(size_t nb); |
#define leftshift_for_tree_index(i) \ |
((i == 31)? 0 : (31 - (i >> 1) + 8 - 2)) |
#define leftmost_child(t) ((t)->child[0] != 0? (t)->child[0] : (t)->child[1]) |
#define chunk2mem(p) (void*)((char*)p + 8) |
#define mem2chunk(mem) (mchunkptr)((char*)mem - 8) |
#define chunk_plus_offset(p, s) ((mchunkptr)(((char*)(p)) + (s))) |
#ifdef __cplusplus |
} |
#endif /* __cplusplus */ |
/programs/develop/open watcom/trunk/clib/src/myvalist.h |
---|
0,0 → 1,49 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Mask differences between platforms where va_list is an |
* array and platforms where it's not. |
* |
****************************************************************************/ |
#ifndef _MYVALIST_H_INCLUDED |
#include "variety.h" |
#include <stdarg.h> |
typedef struct my_va_list { |
va_list v; |
} my_va_list; |
#if defined(__AXP__) || defined(__PPC__) || defined(__MIPS__) |
#define MY_VA_LIST( a ) (*(my_va_list *)&(a)) |
#else |
#define MY_VA_LIST( a ) (*(my_va_list *)(a)) |
#endif |
#define _MYVALIST_H_INCLUDED |
#endif |
/programs/develop/open watcom/trunk/clib/src/openklbr.c |
---|
0,0 → 1,404 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Win32 implementation of open() and sopen(). |
* |
****************************************************************************/ |
#include "variety.h" |
#include "widechar.h" |
#include <stdio.h> |
#include <stdlib.h> |
#include <stdarg.h> |
#include <string.h> |
#include <errno.h> |
#include <io.h> |
#include <fcntl.h> |
#include <sys/stat.h> |
#include <share.h> |
#include "liballoc.h" |
#include "iomode.h" |
#include "fileacc.h" |
#include "openmode.h" |
#include "rtdata.h" |
#include "seterrno.h" |
extern unsigned __NFiles; |
extern char *__appcwd; |
extern int __appcwdlen; |
#if (defined(__WINDOWS__) || defined(__NT__)) |
typedef struct |
{ DWORD attr; |
DWORD flags; |
DWORD cr_time; |
DWORD cr_date; |
DWORD acc_time; |
DWORD acc_date; |
DWORD mod_time; |
DWORD mod_date; |
DWORD size; |
DWORD size_high; |
} FILEINFO; |
int _stdcall get_fileinfo(const char *name,FILEINFO* pinfo); |
typedef struct |
{ |
char *name; |
unsigned int offset; |
}__file_handle; |
static char* getfullpath(const char* path) |
{ |
int prev_is_slash=0; |
int len=0, depth=0, i; |
char* buff; |
char c; |
if(*path == '/') |
{ |
buff = (char*)lib_malloc(strlen(path)+1); |
buff[0] = '\0'; |
len=0; |
} |
else |
{ |
len= __appcwdlen; |
buff = (char*)lib_malloc(len+strlen(path)+1); |
strncpy(buff, __appcwd, __appcwdlen); |
prev_is_slash = 1; |
buff[len] = 0; |
for(i=0; buff[i]; i++) |
if(buff[i] == '/' && i < len-1) depth++; |
} |
while(c=*path++) |
{ |
switch (c) |
{ |
case '.': |
if((*path == '.')&& |
(*path+1)== '/') |
{ if(!depth) |
{ free(buff); |
return 0; |
}; |
buff[len-1] = 0; |
len = strrchr(buff, '/') + 1 - buff; |
buff[len] = 0; |
depth--; |
path +=2; |
prev_is_slash = 1; |
continue; |
} |
if(*path == '/') |
{ |
path++; |
prev_is_slash = 1; |
continue; |
} |
buff[len++] = c; |
continue; |
case '/': |
prev_is_slash = 1; |
buff[len++] = c; |
continue; |
default: |
prev_is_slash = 0; |
buff[len++] = c; |
continue; |
}; |
}; |
buff[len]= '\0'; |
return buff; |
}; |
size_t FileSize(FILE *fp) |
{ |
int hdl; |
__file_handle *fh; |
FILEINFO info; |
hdl = fileno( fp ); |
// __handle_check( hdl, -1 ); |
fh = (__file_handle*) __getOSHandle(hdl); |
get_fileinfo(fh->name,&info); |
return info.size; |
} |
int access(const char *path, int mode) |
{ size_t retval; |
FILEINFO info; |
char *p; |
p = getfullpath(path); |
retval=get_fileinfo(p,&info); |
free(p); |
return retval; |
} |
static HANDLE __createFileHandle(const CHAR_TYPE *name) |
{ |
FILEINFO info; |
__file_handle *handle; |
char *path; |
path = getfullpath(name); |
if(get_fileinfo(path,&info)) |
{ |
// printf("failed getfileinfo %s\n\r", path); |
lib_free(path); |
return (HANDLE)-1; |
}; |
if ( !(handle=(__file_handle*)lib_malloc(sizeof( __file_handle) ))) |
{ lib_free(path); |
return (HANDLE)-1; |
}; |
handle->name = path; |
handle->offset = 0; |
return (HANDLE)handle; |
}; |
static int __F_NAME(_sopen,__wsopen)( const CHAR_TYPE *name, int mode, int share, va_list args ) |
{ |
HANDLE handle; |
int hid, rwmode; |
unsigned iomode_flags; |
// First try to get the required slot. |
// No point in creating a file only to not use it. JBS 99/10/26 |
hid = __allocPOSIXHandle( DUMMY_HANDLE ); |
if( hid == -1 ) |
{ |
return( -1 ); |
} |
rwmode = mode; |
/*** Open the file ***/ |
handle = __createFileHandle( name); |
if( handle==(HANDLE)-1 ) |
{ |
printf("handle = -1 \n\r"); |
if( mode&O_CREAT ) |
{ |
// handle = CreateFileA( name, desired_access, |
// share_mode, NULL, create_disp, |
// fileattr, NULL ); |
} |
if( handle == (HANDLE)-1 ) |
{ |
__freePOSIXHandle( hid ); |
return( -1 ); //error |
} |
} |
// Now use the slot we got. |
__setOSHandle( hid, handle ); // JBS 99/11/01 |
iomode_flags = 0; |
if( rwmode == O_RDWR ) iomode_flags |= _READ | _WRITE; |
else if( rwmode == O_RDONLY) iomode_flags |= _READ; |
else if( rwmode == O_WRONLY) iomode_flags |= _WRITE; |
if( mode & O_APPEND ) iomode_flags |= _APPEND; |
if( mode & (O_BINARY|O_TEXT) ) { |
if( mode & O_BINARY ) iomode_flags |= _BINARY; |
} else { |
if( _RWD_fmode == O_BINARY ) iomode_flags |= _BINARY; |
} |
__SetIOMode( hid, iomode_flags ); |
return( hid ); |
} |
#elif |
static int __F_NAME(_sopen,__wsopen)( const CHAR_TYPE *name, int mode, int share, va_list args ) |
{ |
DWORD create_disp, exists_disp; |
DWORD perm, fileattr; |
DWORD desired_access, share_mode; |
SECURITY_ATTRIBUTES security; |
HANDLE handle; |
int hid, rwmode; |
unsigned iomode_flags; |
// First try to get the required slot. |
// No point in creating a file only to not use it. JBS 99/10/26 |
hid = __allocPOSIXHandle( DUMMY_HANDLE ); |
if( hid == -1 ) { |
return( -1 ); |
} |
rwmode = mode & OPENMODE_ACCESS_MASK; |
__GetNTAccessAttr( rwmode, &desired_access, &perm ); |
__GetNTShareAttr( share|rwmode, &share_mode ); |
fileattr = FILE_ATTRIBUTE_NORMAL; |
security.nLength = sizeof( SECURITY_ATTRIBUTES ); |
security.lpSecurityDescriptor = NULL; |
security.bInheritHandle = mode&O_NOINHERIT ? FALSE : TRUE; |
#ifdef DEFAULT_WINDOWING |
#ifdef __WIDECHAR__ |
if( _WindowsNewWindow != 0 && !_wcsicmp( name, L"con" ) ) |
#else |
if( _WindowsNewWindow != 0 && !stricmp( name, "con" ) ) |
#endif |
{ |
handle = (HANDLE) __NTGetFakeHandle(); |
// Now use the slot we got. |
__setOSHandle( hid, handle ); // JBS 99/11/01 |
_WindowsNewWindow( NULL, hid, -1 ); |
iomode_flags = _ISTTY; |
} else { |
#endif |
if( mode & O_CREAT ) { |
perm = va_arg( args, int ); |
va_end( args ); |
perm &= ~_RWD_umaskval; /* 05-jan-95 */ |
if( ( perm & S_IREAD ) && !( perm & S_IWRITE ) ) { |
fileattr = FILE_ATTRIBUTE_READONLY; |
} |
if( mode & O_EXCL ) { |
create_disp = CREATE_NEW; |
exists_disp = CREATE_NEW; |
} else if( mode & O_TRUNC ) { |
create_disp = CREATE_ALWAYS; |
exists_disp = CREATE_NEW; |
} else { |
create_disp = OPEN_ALWAYS; |
exists_disp = OPEN_EXISTING; |
} |
} else if( mode & O_TRUNC ) { |
exists_disp = TRUNCATE_EXISTING; |
} else { |
exists_disp = OPEN_EXISTING; |
} |
/*** Open the file ***/ |
#ifdef __WIDECHAR__ |
handle = __lib_CreateFileW( name, desired_access, share_mode, |
&security, exists_disp, fileattr, |
NULL ); |
#else |
handle = CreateFileA( name, desired_access, share_mode, |
&security, exists_disp, fileattr, NULL ); |
#endif |
if( handle==(HANDLE)-1 ) { |
if( mode&O_CREAT ) { |
#ifdef __WIDECHAR__ |
handle = __lib_CreateFileW( name, desired_access, |
share_mode, NULL, create_disp, |
fileattr, NULL ); |
#else |
handle = CreateFileA( name, desired_access, |
share_mode, NULL, create_disp, |
fileattr, NULL ); |
#endif |
} |
if( handle == (HANDLE)-1 ) { |
__freePOSIXHandle( hid ); |
return( __set_errno_nt() ); |
} |
} |
// Now use the slot we got. |
__setOSHandle( hid, handle ); // JBS 99/11/01 |
iomode_flags = 0; |
if( isatty(hid) ) { |
iomode_flags = _ISTTY; |
} |
#ifdef DEFAULT_WINDOWING |
} |
#endif |
if( rwmode == O_RDWR ) iomode_flags |= _READ | _WRITE; |
else if( rwmode == O_RDONLY) iomode_flags |= _READ; |
else if( rwmode == O_WRONLY) iomode_flags |= _WRITE; |
if( mode & O_APPEND ) iomode_flags |= _APPEND; |
if( mode & (O_BINARY|O_TEXT) ) { |
if( mode & O_BINARY ) iomode_flags |= _BINARY; |
} else { |
if( _RWD_fmode == O_BINARY ) iomode_flags |= _BINARY; |
} |
__SetIOMode( hid, iomode_flags ); |
return( hid ); |
} |
#endif |
_WCRTLINK int __F_NAME(open,_wopen)( const CHAR_TYPE *name, int mode, ... ) |
{ |
int permission; |
va_list args; |
va_start( args, mode ); |
permission = va_arg( args, int ); |
va_end( args ); |
return( __F_NAME(sopen,_wsopen)( name, mode, SH_COMPAT, permission ) ); |
} |
_WCRTLINK int __F_NAME(sopen,_wsopen)( const CHAR_TYPE *name, int mode, int shflag, ... ) |
{ |
va_list args; |
va_start( args, shflag ); |
return( __F_NAME(_sopen,__wsopen)( name, mode, shflag, args ) ); |
} |
/programs/develop/open watcom/trunk/clib/src/openmode.h |
---|
0,0 → 1,75 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE |
* DESCRIBE IT HERE! |
* |
****************************************************************************/ |
#ifndef _OPENMODE_H_INCLUDED |
#define _OPENMODE_H_INCLUDED |
enum { |
FILEATTR_MASK = 0x003f, |
FILEATTR_NORMAL = 0x0000, |
FILEATTR_READONLY = 0x0001, |
FILEATTR_HIDDEN = 0x0002, |
FILEATTR_SYSTEM = 0x0004, |
FILEATTR_DIRECTORY = 0x0010, |
FILEATTR_ARCHIVED = 0x0020 |
}; |
enum { |
OPENFLAG_FAIL_IF_EXISTS = 0x0000, |
OPENFLAG_OPEN_IF_EXISTS = 0x0001, |
OPENFLAG_REPLACE_IF_EXISTS = 0x0002, |
OPENFLAG_FAIL_IF_NOT_EXISTS = 0x0000, |
OPENFLAG_CREATE_IF_NOT_EXISTS = 0x0010 |
}; |
enum { |
OPENMODE_DASD = 0x8000, |
OPENMODE_WRITE_THROUGH = 0x4000, |
OPENMODE_FAIL_ERRORS = 0x2000, |
OPENMODE_NO_CACHE = 0x1000, |
OPENMODE_LOCALITY_MASK = 0x0700, |
OPENMODE_LOCALITY_RANDSEQ = 0x0300, |
OPENMODE_LOCALITY_RANDOM = 0x0200, |
OPENMODE_LOCALITY_SEQUENTIAL = 0x0100, |
OPENMODE_LOCALITY_NONE = 0x0000, |
OPENMODE_INHERITANCE = 0x0080, |
OPENMODE_SHARE_MASK = 0x0070, |
OPENMODE_DENY_COMPAT = 0x0000, |
OPENMODE_DENY_ALL = 0x0010, |
OPENMODE_DENY_WRITE = 0x0020, |
OPENMODE_DENY_READ = 0x0030, |
OPENMODE_DENY_NONE = 0x0040, |
OPENMODE_ACCESS_MASK = 0x0007, |
OPENMODE_ACCESS_RDONLY = 0x0000, |
OPENMODE_ACCESS_WRONLY = 0x0001, |
OPENMODE_ACCESS_RDWR = 0x0002 |
}; |
#endif |
/programs/develop/open watcom/trunk/clib/src/orient.h |
---|
0,0 → 1,57 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Macro to deal with stream orientation. |
* |
****************************************************************************/ |
#ifdef __NETWARE__ |
/* One less thing to worry about */ |
#define ORIENT_STREAM(stream,error_return) |
#else |
#ifdef __WIDECHAR__ |
#define ORIENT_STREAM(stream,error_return) \ |
if( _FP_ORIENTATION(stream) != _WIDE_ORIENTED ) { \ |
if( _FP_ORIENTATION(stream) == _NOT_ORIENTED ) { \ |
_FP_ORIENTATION(stream) = _WIDE_ORIENTED; \ |
} else { \ |
_ReleaseFile( stream ); \ |
return( error_return ); \ |
} \ |
} |
#else |
#define ORIENT_STREAM(stream,error_return) \ |
if( _FP_ORIENTATION(stream) != _BYTE_ORIENTED ) { \ |
if( _FP_ORIENTATION(stream) == _NOT_ORIENTED ) { \ |
_FP_ORIENTATION(stream) = _BYTE_ORIENTED; \ |
} else { \ |
_ReleaseFile( stream ); \ |
return( error_return ); \ |
} \ |
} |
#endif |
#endif |
/programs/develop/open watcom/trunk/clib/src/printf.h |
---|
0,0 → 1,183 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Definitions needed by callers to internal string formatter |
* __prtf() for printf() style handling. |
* |
****************************************************************************/ |
#ifndef _PRINTF_H_INCLUDED |
#define _PRINTF_H_INCLUDED |
#include "variety.h" |
#include "widechar.h" |
#if defined(__QNX__) |
#if defined(__386__) |
#define __SLIB_CALLBACK _WCFAR |
#define __SLIB |
#pragma aux slib_callback_t __far parm [eax] [edx] modify [eax edx]; |
#elif defined( __SMALL_DATA__ ) |
#define __SLIB_CALLBACK _WCFAR __loadds |
#define __SLIB _WCFAR |
#else |
#define __SLIB_CALLBACK _WCFAR |
#define __SLIB _WCFAR |
#endif |
#else |
#if defined( __HUGE__ ) |
#define __SLIB _WCFAR |
#define __SLIB_CALLBACK |
#else |
#define __SLIB |
#define __SLIB_CALLBACK |
#endif |
#endif |
#define SPECS_VERSION 200 |
/* |
* This is the __prtf specs structure. NB - should be naturally aligned. |
* |
* There are both wide and MBCS versions explicitly because part of __wprtf |
* needs to access both kinds of structure. |
*/ |
typedef struct |
{ |
char __SLIB *_dest; |
short _flags; // flags (see below) |
short _version; // structure version # (2.0 --> 200) |
int _fld_width; // field width |
int _prec; // precision |
int _output_count; // # of characters outputted for %n |
int _n0; // number of chars to deliver first |
int _nz0; // number of zeros to deliver next |
int _n1; // number of chars to deliver next |
int _nz1; // number of zeros to deliver next |
int _n2; // number of chars to deliver next |
int _nz2; // number of zeros to deliver next |
char _character; // format character |
char _pad_char; |
char _padding[2]; // to keep struct aligned |
} _mbcs_SPECS; |
typedef struct |
{ |
wchar_t __SLIB *_dest; |
short _flags; // flags (see below) |
short _version; // structure version # (2.0 --> 200) |
int _fld_width; // field width |
int _prec; // precision |
int _output_count; // # of characters outputted for %n |
int _n0; // number of chars to deliver first |
int _nz0; // number of zeros to deliver next |
int _n1; // number of chars to deliver next |
int _nz1; // number of zeros to deliver next |
int _n2; // number of chars to deliver next |
int _nz2; // number of zeros to deliver next |
wchar_t _character; // format character |
wchar_t _pad_char; |
} _wide_SPECS; |
#ifdef __WIDECHAR__ |
#define SPECS _wide_SPECS |
#else |
#define SPECS _mbcs_SPECS |
#endif |
typedef void (__SLIB_CALLBACK slib_callback_t)( SPECS __SLIB *, int ); |
/* specification flags... (values for _flags field above) */ |
#define SPF_ALT 0x0001 |
#define SPF_BLANK 0x0002 |
#define SPF_FORCE_SIGN 0x0004 |
#define SPF_LEFT_ADJUST 0x0008 |
#define SPF_CHAR 0x0010 |
#define SPF_SHORT 0x0020 |
#define SPF_LONG 0x0040 |
#define SPF_LONG_LONG 0x0080 |
#define SPF_LONG_DOUBLE 0x0100 // may be also used for __int64 |
#define SPF_NEAR 0x0200 |
#define SPF_FAR 0x0400 |
#define SPF_CVT 0x0800 // __cvt function |
#ifdef __QNX__ |
#define SPF_ZERO_PAD 0x8000 |
#endif // __QNX__ |
#if defined( __STDC_WANT_LIB_EXT1__ ) && __STDC_WANT_LIB_EXT1__ == 1 |
#if !defined( __WIDECHAR__ ) |
int __prtf_s( void __SLIB *dest, /* parm for use by out_putc */ |
const char * __restrict format, /* pointer to format string */ |
va_list args, /* pointer to pointer to args*/ |
const char **errmsg, /* constraint violation msg */ |
slib_callback_t *out_putc ); /* character output routine */ |
#else |
int __wprtf_s( void __SLIB *dest, /* parm for use by out_putc */ |
const CHAR_TYPE * __restrict format,/* pointer to format string */ |
va_list args, /* pointer to pointer to args*/ |
const char **errmsg, /* constraint violation msg */ |
slib_callback_t *out_putc ); /* character output routine */ |
#endif |
#else |
#if !defined(__WIDECHAR__) |
int __prtf( void __SLIB *dest, /* parm for use by out_putc */ |
const char *format, /* pointer to format string */ |
va_list args, /* pointer to pointer to args*/ |
slib_callback_t *out_putc ); /* character output routine */ |
#else |
int __wprtf( void __SLIB *dest, /* parm for use by out_putc */ |
const CHAR_TYPE *format, /* pointer to format string */ |
va_list args, /* pointer to pointer to args*/ |
slib_callback_t *out_putc ); /* character output routine */ |
#endif |
#ifdef __QNX__ |
int __prtf_slib( void __SLIB *dest, /* parm for use by out_putc */ |
const char * format, /* pointer to format string */ |
char **args, /* pointer to pointer to args*/ |
slib_callback_t *out_putc, /* character output routine */ |
int ptr_size ); |
#if !defined(IN_SLIB) && !defined(__386__) |
extern int ( _WCFAR * ( _WCFAR *__f)) (); |
#define __prtf(a,b,c,d) __prtf_slib(a,b,c,d,sizeof(void *)) |
#define __prtf_slib(a,b,c,d,e) ((int(_WCFAR *) (void _WCFAR *,const char _WCFAR *,char * _WCFAR *args,void (_WCFAR *__out)(SPECS _WCFAR *,int),int)) __f[24])(a,b,c,d,e) |
#endif |
#endif |
#endif /* Safer C */ |
#endif |
/programs/develop/open watcom/trunk/clib/src/prtscncf.h |
---|
0,0 → 1,91 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Configure 'j', 'z', and 't' modifiers for __scnf and __prtf. |
* |
****************************************************************************/ |
#ifndef PTRSCNF_H_INCLUDED |
#define PTRSCNF_H_INCLUDED |
#include <limits.h> |
#include <stdint.h> |
/* Currently size_t is always 'unsigned int', but won't be on LP64 systems */ |
#if SIZE_MAX == UINT_MAX |
#define ZSPEC_IS_INT |
#elif SIZE_MAX == ULONG_MAX |
#define ZSPEC_IS_LONG |
#else |
#error Could not configure zspec |
#endif |
/* Currently intmax_t is always 'long long int' but might be something |
* else, in theory at least |
*/ |
#if INTMAX_MAX == LLONG_MAX |
#define JSPEC_IS_LLONG |
#define JSPEC_CASE_LLONG case 'j': |
#else |
#error Could not configure jspec |
#endif |
/* Currently ptrdiff_t can be either 'long int' or 'int' */ |
#if PTRDIFF_MAX == INT_MAX |
#define TSPEC_IS_INT |
#elif PTRDIFF_MAX == LONG_MAX |
#define TSPEC_IS_LONG |
#else |
#error Could not configure tspec |
#endif |
#ifdef ZSPEC_IS_INT |
#define ZSPEC_CASE_INT case 'z': |
#else |
#define ZSPEC_CASE_INT |
#endif |
#ifdef ZSPEC_IS_LONG |
#define ZSPEC_CASE_LONG case 'z': |
#else |
#define ZSPEC_CASE_LONG |
#endif |
#ifdef TSPEC_IS_INT |
#define TSPEC_CASE_INT case 't': |
#else |
#define TSPEC_CASE_INT |
#endif |
#ifdef TSPEC_IS_LONG |
#define TSPEC_CASE_LONG case 't': |
#else |
#define TSPEC_CASE_LONG |
#endif |
#endif |
/programs/develop/open watcom/trunk/clib/src/qread.c |
---|
0,0 → 1,68 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE |
* DESCRIBE IT HERE! |
* |
****************************************************************************/ |
#include "variety.h" |
#include "iomode.h" |
#include "rtcheck.h" |
#include "seterrno.h" |
#include "qread.h" |
#include <stdio.h> |
typedef struct |
{ |
char *name; |
unsigned int offset; |
}__file_handle; |
int _stdcall read_file (const char *name,char *buff,unsigned offset, unsigned count,unsigned *reads); |
int __qread( int handle, void *buffer, unsigned len ) |
{ |
__file_handle *fh; |
unsigned amount_read=0; |
__handle_check( handle, -1 ); |
fh = (__file_handle*) __getOSHandle( handle ); |
if(read_file(fh->name,buffer,fh->offset,len,&amount_read)) |
{ |
if ( amount_read == 0) |
return (-1); |
} |
fh->offset+=amount_read; |
return( amount_read ); |
}; |
/programs/develop/open watcom/trunk/clib/src/qread.h |
---|
0,0 → 1,36 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Prototype for __qread() internal helper. |
* |
****************************************************************************/ |
#ifdef __NETWARE__ |
#define __qread( h, b, l ) read( h, b, l ) |
#else |
extern int __qread( int handle, void *buffer, unsigned len ); |
#endif |
/programs/develop/open watcom/trunk/clib/src/qwrite.h |
---|
0,0 → 1,36 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Prototype for __qwrite() internal helper. |
* |
****************************************************************************/ |
#ifdef __NETWARE__ |
#define __qwrite( h, b, l ) write( h, (void *)b, l ) |
#else |
extern int __qwrite( int, const void *, unsigned ); |
#endif |
/programs/develop/open watcom/trunk/clib/src/rewind.c |
---|
0,0 → 1,41 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Platform independent implementation of rewind(). |
* |
****************************************************************************/ |
#include "variety.h" |
#include <stdio.h> |
_WCRTLINK void rewind( FILE *fp ) |
{ |
__stream_check( fp, 0 ); |
clearerr( fp ); |
fseek( fp, 0, SEEK_SET ); |
} |
/programs/develop/open watcom/trunk/clib/src/riscstr.h |
---|
0,0 → 1,359 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: RISC oriented string functions designed to access memory |
* as aligned 32- or 64-bit words whenever possible. |
* |
****************************************************************************/ |
#ifndef _RISCSTR_H_INCLUDED |
#define _RISCSTR_H_INCLUDED |
/* |
* Determine if we're building RISC versions of string/memory routines. |
*/ |
#if defined(__AXP__) || defined(__PPC__) |
#define __RISCSTR__ |
#endif |
#ifdef __RISCSTR__ /* do nothing if not RISC target */ |
#include "variety.h" |
#include "widechar.h" |
#include <string.h> |
#include <wchar.h> |
#include "watcom.h" |
/* |
* Choose between 32- and 64-bit words. |
*/ |
#define USE_INT64 0 /* no 64-bit stuff for now */ |
#ifndef USE_INT64 |
#ifdef __AXP__ |
#define USE_INT64 1 |
#else |
#define USE_INT64 0 |
#endif |
#endif |
#if USE_INT64 |
#define INT __int64 |
#define UINT unsigned __int64 |
#else |
#define INT int |
#define UINT uint_32 |
#endif |
#define BYTES_PER_WORD ( sizeof( UINT ) ) |
#define INT_SIZE ( BYTES_PER_WORD * 8 ) |
#define CHARS_PER_WORD ( BYTES_PER_WORD / CHARSIZE ) |
#define MOD_BYTES_PER_WORD(__n) ( (__n) & (BYTES_PER_WORD-1) ) |
/* |
* Macros to mask off a single character. |
*/ |
#if USE_INT64 |
#define BYTE1 ( _riscdata->byteMasks[0].val ) |
#define BYTE2 ( _riscdata->byteMasks[1].val ) |
#define BYTE3 ( _riscdata->byteMasks[2].val ) |
#define BYTE4 ( _riscdata->byteMasks[3].val ) |
#define BYTE5 ( _riscdata->byteMasks[4].val ) |
#define BYTE6 ( _riscdata->byteMasks[5].val ) |
#define BYTE7 ( _riscdata->byteMasks[6].val ) |
#define BYTE8 ( _riscdata->byteMasks[7].val ) |
#else |
#define BYTE1 ( 0x000000FF ) |
#define BYTE2 ( 0x0000FF00 ) |
#define BYTE3 ( 0x00FF0000 ) |
#define BYTE4 ( 0xFF000000 ) |
#endif |
#ifdef __WIDECHAR__ |
#define CHR1MASK ( BYTE1 | BYTE2 ) |
#define CHR2MASK ( BYTE3 | BYTE4 ) |
#else |
#define CHR1MASK ( BYTE1 ) |
#define CHR2MASK ( BYTE2 ) |
#define CHR3MASK ( BYTE3 ) |
#define CHR4MASK ( BYTE4 ) |
#endif |
#ifdef __WIDECHAR__ |
#define CHR1(__w) ( (__w) & CHR1MASK ) |
#define CHR2(__w) ( (__w) & CHR2MASK ) |
#else |
#define CHR1(__w) ( (__w) & BYTE1 ) |
#define CHR2(__w) ( (__w) & BYTE2 ) |
#define CHR3(__w) ( (__w) & BYTE3 ) |
#define CHR4(__w) ( (__w) & BYTE4 ) |
#if USE_INT64 |
#define CHR5(__w) ( (__w) & BYTE5 ) |
#define CHR6(__w) ( (__w) & BYTE6 ) |
#define CHR7(__w) ( (__w) & BYTE7 ) |
#define CHR8(__w) ( (__w) & BYTE8 ) |
#endif |
#endif |
/* |
* Macros for extracting the first characters in a word. |
*/ |
#if USE_INT64 |
#define FRONT_BYTES(__n) ( _riscdata->frontCharsMasks[(__n)].val ) |
#define FRONT_CHRS(__w,__o) ( (__w) & FRONT_BYTES_riscdata[(__o)].val ) |
#else |
// extern UINT __FRONT_BYTES[]; |
// #define FRONT_BYTES __FRONT_BYTES |
#define FRONT_BYTES ( _riscdata->frontCharsMasks ) |
#define FRONT_CHRS(__w,__o) ( (__w) & FRONT_BYTES[(__o)] ) |
#endif |
/* |
* Macros for ignoring the first characters in a word. |
*/ |
#if USE_INT64 |
#define SKIP_CHRS_MASKS(__n) ( _riscdata->skipCharsMasks[(__n)].val ) |
#define SKIP_CHRS(__w,__o) ( (__w) & SKIP_CHRS_MASKS(__o) ) |
#else |
// extern UINT __SKIP_CHRS_MASKS[]; |
// #define SKIP_CHRS_MASKS __SKIP_CHRS_MASKS |
#define SKIP_CHRS_MASKS(__n) ( _riscdata->skipCharsMasks[(__n)] ) |
#define SKIP_CHRS(__w,__o) ( (__w) & SKIP_CHRS_MASKS(__o) ) |
#endif |
/* |
* Macros for checking if a word contains a null byte. |
*/ |
#if USE_INT64 |
#define SUB_M ( _riscdata->_01Mask.val ) |
#define NIL_M ( _riscdata->_80Mask.val ) |
#define SUB_MASK(__n) ( _riscdata->subMasks[(__n)].val ) |
#else |
#ifdef __WIDECHAR__ |
#define SUB_M ( 0x00010001 ) |
#define NIL_M ( 0x80008000 ) |
#else |
#define SUB_M ( 0x01010101 ) |
#define NIL_M ( 0x80808080 ) |
#endif |
// extern UINT __SubMask[]; |
// #define SUB_MASK __SubMask |
#define SUB_MASK(__n) ( _riscdata->subMasks[(__n)] ) |
#endif |
#define GOT_NIL(__w) ( ( (~(__w)) & ((__w) - SUB_M) ) & NIL_M ) |
#ifdef __WIDECHAR__ |
#define OFFSET_GOT_NIL(__w,__o) ( ( (~(__w)) & ((__w) - SUB_MASK((__o)/CHARSIZE)) ) & NIL_M ) |
#else |
#define OFFSET_GOT_NIL(__w,__o) ( ( (~(__w)) & ((__w) - SUB_MASK(__o)) ) & NIL_M ) |
#endif |
/* |
* Some handy pointer manipulation macros. |
*/ |
#define ROUND(__p) ( (UINT*) ( (UINT)(__p) & (-sizeof(UINT)) ) ) |
#define OFFSET(__p) ( ((unsigned int)(__p)) & (sizeof(UINT)-1) ) |
/* |
* Macros for uppercase and lowercase stuff. |
*/ |
#ifdef __WIDECHAR__ |
#define CHR1_A ( 0x00000041 ) |
#define CHR2_A ( 0x00410000 ) |
#define CHR1_Z ( 0x0000005A ) |
#define CHR2_Z ( 0x005A0000 ) |
#define CHR1_A2a(s) ( s | 0x00000020 ) |
#define CHR2_A2a(s) ( s | 0x00200000 ) |
#else |
#define CHR1_A ( 0x00000041 ) |
#define CHR2_A ( 0x00004100 ) |
#define CHR3_A ( 0x00410000 ) |
#define CHR4_A ( 0x41000000 ) |
#define CHR1_Z ( 0x0000005A ) |
#define CHR2_Z ( 0x00005A00 ) |
#define CHR3_Z ( 0x005A0000 ) |
#define CHR4_Z ( 0x5A000000 ) |
#define CHR1_A2a(s) ( s | 0x00000020 ) |
#define CHR2_A2a(s) ( s | 0x00002000 ) |
#define CHR3_A2a(s) ( s | 0x00200000 ) |
#define CHR4_A2a(s) ( s | 0x20000000 ) |
#endif |
#ifdef __WIDECHAR__ |
#define TO_LOW_CHR1(s) ( ( (s>=CHR1_A) && (s<=CHR1_Z) ) ? CHR1_A2a(s) : s ) |
#define TO_LOW_CHR2(s) ( ( (s>=CHR2_A) && (s<=CHR2_Z) ) ? CHR2_A2a(s) : s ) |
#else |
#define TO_LOW_CHR1(s) ( ( (s>=CHR1_A) && (s<=CHR1_Z) ) ? CHR1_A2a(s) : s ) |
#define TO_LOW_CHR2(s) ( ( (s>=CHR2_A) && (s<=CHR2_Z) ) ? CHR2_A2a(s) : s ) |
#define TO_LOW_CHR3(s) ( ( (s>=CHR3_A) && (s<=CHR3_Z) ) ? CHR3_A2a(s) : s ) |
#define TO_LOW_CHR4(s) ( ( (s>=CHR4_A) && (s<=CHR4_Z) ) ? CHR4_A2a(s) : s ) |
#endif |
#ifdef __WIDECHAR__ |
#define CHR1_a ( 0x00000061 ) |
#define CHR2_a ( 0x00610000 ) |
#define CHR1_z ( 0x0000007A ) |
#define CHR2_z ( 0x007A0000 ) |
#define CHR1_a2A(s) ( s & 0x000000DF ) |
#define CHR2_a2A(s) ( s & 0x00DF0000 ) |
#else |
#define CHR1_a ( 0x00000061 ) |
#define CHR2_a ( 0x00006100 ) |
#define CHR3_a ( 0x00610000 ) |
#define CHR4_a ( 0x61000000 ) |
#define CHR1_z ( 0x0000007A ) |
#define CHR2_z ( 0x00007A00 ) |
#define CHR3_z ( 0x007A0000 ) |
#define CHR4_z ( 0x7A000000 ) |
#define CHR1_a2A(s) ( s & 0x000000DF ) |
#define CHR2_a2A(s) ( s & 0x0000DF00 ) |
#define CHR3_a2A(s) ( s & 0x00DF0000 ) |
#define CHR4_a2A(s) ( s & 0xDF000000 ) |
#endif |
#ifdef __WIDECHAR__ |
#define TO_UPR_CHR1(s) ( ( (s>=CHR1_a) && (s<=CHR1_z) ) ? CHR1_a2A(s) : s ) |
#define TO_UPR_CHR2(s) ( ( (s>=CHR2_a) && (s<=CHR2_z) ) ? CHR2_a2A(s) : s ) |
#else |
#define TO_UPR_CHR1(s) ( ( (s>=CHR1_a) && (s<=CHR1_z) ) ? CHR1_a2A(s) : s ) |
#define TO_UPR_CHR2(s) ( ( (s>=CHR2_a) && (s<=CHR2_z) ) ? CHR2_a2A(s) : s ) |
#define TO_UPR_CHR3(s) ( ( (s>=CHR3_a) && (s<=CHR3_z) ) ? CHR3_a2A(s) : s ) |
#define TO_UPR_CHR4(s) ( ( (s>=CHR4_a) && (s<=CHR4_z) ) ? CHR4_a2A(s) : s ) |
#endif |
/* |
* Tweak characters within a word. |
*/ |
#ifdef __WIDECHAR__ |
#define REVERSE_CHARS(__w) ( (CHR1(__w)<<16) | (CHR2(__w)>>16) ) |
#else |
#define REVERSE_CHARS(__w) ( (CHR1(__w)<<24) | (CHR2(__w)<<8) | \ |
(CHR3(__w)>>8) | (CHR4(__w)>>24) ) |
#endif |
#define SWAP_BYTES(__w) ( (((__w)&BYTE1)<<8) | (((__w)&BYTE2)>>8) | \ |
(((__w)&BYTE3)<<8) | (((__w)&BYTE4)>>8) ) |
/* |
* Data used by the RISC string functions. |
*/ |
struct __F_NAME(__RISC_StrData,__wRISC_StrData) { |
#if USE_INT64 |
unsigned_64 byteMasks[8]; |
unsigned_64 frontCharsMasks[8]; |
unsigned_64 skipCharsMasks[8]; |
unsigned_64 _01Mask; |
unsigned_64 _80Mask; |
unsigned_64 subMasks[8]; |
#else |
#ifdef __WIDECHAR__ |
uint_32 frontCharsMasks[2]; |
uint_32 skipCharsMasks[2]; |
uint_32 subMasks[2]; |
#else |
uint_32 frontCharsMasks[4]; |
uint_32 skipCharsMasks[4]; |
uint_32 subMasks[4]; |
#endif |
#endif |
}; |
#ifdef __WIDECHAR__ |
extern struct __wRISC_StrData __wRISC_StringData; |
#define RISC_DATA_LOCALREF struct __wRISC_StrData *_riscdata = &__wRISC_StringData |
#else |
extern struct __RISC_StrData __RISC_StringData; |
#define RISC_DATA_LOCALREF struct __RISC_StrData *_riscdata = &__RISC_StringData |
#endif |
/* |
* Prototype functions called by the RISC-oriented string functions. |
*/ |
_WCRTLINK extern wchar_t * __simple_wcschr( const wchar_t *str, wint_t ch ); |
_WCRTLINK extern int __simple_wcscmp( const wchar_t *s1, const wchar_t *s2 ); |
_WCRTLINK extern wchar_t * __simple_wcscpy( wchar_t *dest, const wchar_t *src ); |
_WCRTLINK extern int __simple__wcsicmp( const wchar_t *s1, const wchar_t *s2 ); |
_WCRTLINK extern size_t __simple_wcslen( const wchar_t *str ); |
_WCRTLINK extern wchar_t * __simple__wcslwr( wchar_t *str ); |
_WCRTLINK extern int __simple_wcsncmp( const wchar_t *s1, const wchar_t *s2, size_t n ); |
_WCRTLINK extern wchar_t * __simple_wcsncpy( wchar_t *dest, const wchar_t *src, size_t n ); |
_WCRTLINK extern int __simple__wcsnicmp( const wchar_t *s1, const wchar_t *s2, size_t n ); |
_WCRTLINK extern wchar_t * __simple__wcsnset( wchar_t *str, int ch, size_t n ); |
_WCRTLINK extern wchar_t * __simple_wcsrchr( const wchar_t *str, wint_t ch ); |
_WCRTLINK extern wchar_t * __simple__wcsset( wchar_t *str, wchar_t ch ); |
_WCRTLINK extern wchar_t * __simple__wcsupr( wchar_t *str ); |
#endif /* #ifdef __RISCSTR__ */ |
#endif |
/programs/develop/open watcom/trunk/clib/src/rtcheck.h |
---|
0,0 → 1,63 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Perform runtime file handle checks. |
* |
****************************************************************************/ |
#ifndef _RTCHECK_H_INCLUDED |
#define _RTCHECK_H_INCLUDED |
#include "variety.h" |
#include <errno.h> |
#include "seterrno.h" |
/*********** |
#if ( defined(__NT__) || defined(__RUNTIME_HANDLE_CHECKS__) ) \ |
&& ( !defined(__NETWARE__) && !defined(__UNIX__) \ |
&& !defined(__OSI__) ) |
extern unsigned __NFiles; |
#define __handle_check( __h, __r ) \ |
if( (__h) < 0 || (__h) > __NFiles ) { \ |
__set_errno( EBADF ); \ |
return( __r ); \ |
} |
#else |
#define __handle_check( __h, __r ) |
#endif |
**************/ |
#define __handle_check( __h, __r ) |
#endif |
/programs/develop/open watcom/trunk/clib/src/rtdata.h |
---|
0,0 → 1,211 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Internal CLIB structures and variables. |
* |
****************************************************************************/ |
#ifndef _RTDATA_H_INCLUDED |
#define _RTDATA_H_INCLUDED |
#include "variety.h" |
#include <stdio.h> |
#include "errorno.h" |
/* DOS based platforms have stdaux/stdprn in addition to stdin/out/err */ |
#if defined(__DOS__) || defined(__WINDOWS__) || defined(__OSI__) |
#define NUM_STD_STREAMS 5 |
#else |
#define NUM_STD_STREAMS 3 |
#endif |
#if defined(__NT__) || defined(__OS2__) |
struct __pipe_info { |
int isPipe; /* non-zero if it's a pipe */ |
int pid; /* PID of spawned process */ |
}; |
#endif |
typedef struct __stream_link { |
struct __stream_link * next; |
struct __iobuf * stream; |
unsigned char * _base; /* location of buffer */ |
int _orientation; /* wide/byte/not oriented */ |
int _extflags; /* extended flags */ |
unsigned char _tmpfchar; /* tmpfile number */ |
unsigned char _filler[sizeof(int)-1];/* explicit padding */ |
#if defined(__NT__) || defined(__OS2__) |
struct __pipe_info pipeInfo; /* pipe-related fields */ |
#endif |
} __stream_link; |
typedef void _WCI86FAR FPEhandler( int ); |
#define _FP_BASE(__fp) ((__fp)->_link->_base) |
#ifndef __NETWARE__ |
#define _FP_ORIENTATION(__fp) ((__fp)->_link->_orientation) |
#define _FP_EXTFLAGS(__fp) ((__fp)->_link->_extflags) |
#endif |
#define _FP_TMPFCHAR(__fp) ((__fp)->_link->_tmpfchar) |
#ifndef __NETWARE__ |
#define _FP_PIPEDATA(__fp) ((__fp)->_link->pipeInfo) |
#endif |
extern __stream_link *__OpenStreams; |
extern __stream_link *__ClosedStreams; |
extern char * _WCNEAR __env_mask; /* ptr to char array of flags */ |
extern FPEhandler *__FPE_handler; |
extern void (*__FPE_handler_exit)( void ); |
#if !defined(__NETWARE__) |
extern int _cbyte; |
extern int _cbyte2; |
extern int _child; |
extern int __umaskval; |
extern unsigned _curbrk; |
extern int _commode; |
#endif |
#if !defined (_NETWARE_LIBC) |
extern unsigned _STACKTOP; |
#endif |
#if !defined(__QNX__) && !defined(__LINUX__) |
extern void (*__Save8087)();/* Ptr to FP state save rtn (spawn) */ |
extern void (*__Rest8087)();/* Ptr to FP state restore rtn (spawn) */ |
#endif |
extern unsigned short _8087cw; /* control word initializer */ |
extern unsigned char _no87; /* NO87 environment var defined */ |
extern unsigned char _8087; /* type of 8087/emulator present */ |
extern unsigned char _real87; /* 8087 coprocessor hardware present */ |
#if defined(_M_IX86) |
#pragma aux _8087cw "_*"; |
#pragma aux _no87 "_*"; |
#pragma aux _8087 "_*"; |
#pragma aux _real87 "_*"; |
#endif |
#if !defined(__SW_BM) |
extern unsigned _STACKLOW; |
#endif |
#define _RWD_ostream __OpenStreams |
#define _RWD_cstream __ClosedStreams |
#define _RWD_iob __iob |
#if !defined(__NETWARE__) |
#define _RWD_threadid _threadid |
#endif |
#define _RWD_environ environ |
#define _RWD_wenviron _wenviron |
#define _RWD_env_mask __env_mask |
#define _RWD_abort __abort |
#define _RWD_sigtab __SIGNALTABLE |
#define _RWD_FPE_handler_exit __FPE_handler_exit |
#define _RWD_FPE_handler __FPE_handler |
#define _RWD_fmode _fmode |
#if !defined(__NETWARE__) |
#define _RWD_umaskval __umaskval |
#define _RWD_cbyte _cbyte |
#define _RWD_cbyte2 _cbyte2 |
#define _RWD_child _child |
#define _RWD_amblksiz _amblksiz |
#define _RWD_curbrk _curbrk |
#define _RWD_dynend _dynend |
#define _RWD_psp _psp |
#endif |
#if !defined (_NETWARE_LIBC) |
#define _RWD_stacktop _STACKTOP |
#endif |
#if !defined(__QNX__) && !defined(__LINUX__) |
#define _RWD_Save8087 __Save8087 |
#define _RWD_Rest8087 __Rest8087 |
#endif |
#define _RWD_8087cw _8087cw |
#define _RWD_no87 _no87 |
#define _RWD_8087 _8087 |
#define _RWD_real87 _real87 |
#if !defined(__NETWARE__) |
#define _RWD_HShift _HShift |
#define _RWD_osmajor _osmajor |
#define _RWD_osminor _osminor |
#define _RWD_osmode _osmode |
#if defined(__NT__) |
#define _RWD_osbuild _osbuild |
#define _RWD_osver _osver |
#define _RWD_winmajor _winmajor |
#define _RWD_winminor _winminor |
#define _RWD_winver _winver |
#endif |
#define _RWD_doserrno _DOSERRNO |
#endif |
#define _RWD_tmpfnext __tmpfnext |
#if !defined(_RWD_errno) |
#define _RWD_errno _ERRNO |
#endif |
#define _RWD_nexttok _NEXTTOK |
#define _RWD_nextftok _NEXTFTOK |
#define _RWD_nextmbtok _NEXTMBTOK |
#define _RWD_nextmbftok _NEXTMBFTOK |
#define _RWD_nextwtok _NEXTWTOK |
#define _RWD_tzname tzname |
#define _RWD_timezone timezone |
#define _RWD_daylight daylight |
#define _RWD_dst_adjust __dst_adjust |
#define _RWD_start_dst __start_dst |
#define _RWD_end_dst __end_dst |
#define _RWD_asctime _RESULT |
#ifdef __SW_BM |
#define _RWD_cvtbuf __THREADDATAPTR->__cvt_buffer |
#else |
#define _RWD_cvtbuf cvt_buffer |
#endif |
#if defined(__NETWARE__) |
#define _RWD_ioexit __ioexit |
#define _RWD_tmpnambuf (__THREADDATAPTR->__tmpnambuf) |
#define _RWD_randnextinit (__THREADDATAPTR->__randnextinit) |
#else |
#define _RWD_tmpnambuf _tmpname |
#define _RWD_randnextinit THREAD_PTR.__randnextinit |
#endif |
#define _RWD_stacklow _STACKLOW |
#define _RWD_randnext _RANDNEXT |
#define _RWD_ThreadData _ThreadData |
#define _RWD_StaticInitSema _StaticInitSema |
#define _RWD_PureErrorFlag _PureErrorFlag |
#define _RWD_UndefVfunFlag _UndefVfunFlag |
#define _RWD_ModuleInit _ModuleInit |
/* |
For the sake of efficiency, tell the compiler |
that the __exit... routines never return. |
*/ |
_WCRTLINK extern void __exit( unsigned ); |
#if defined(_M_IX86) |
#pragma aux __exit aborts; |
#endif |
extern void (*__abort)( void ); // Defined in abort.c |
extern void __terminate( void ); // Defined in abort.c |
#endif // _RTDATA_H_INCLUDED |
/programs/develop/open watcom/trunk/clib/src/rtinit.h |
---|
0,0 → 1,131 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Structures for run-time initialization/finalization. |
* |
****************************************************************************/ |
#ifndef __RTINIT_H__ |
#define __RTINIT_H__ |
#include "langenvd.h" |
#if defined( __PPC__ ) |
#define __TGT_SYS __TGT_SYS_AXP_PPC |
typedef unsigned __type_rtp; |
typedef unsigned __type_pad; |
typedef void( *__type_rtn ) ( void ); |
#elif defined( __AXP__ ) |
#define __TGT_SYS __TGT_SYS_AXP_NT |
typedef unsigned __type_rtp; |
typedef unsigned __type_pad; |
typedef void( *__type_rtn ) ( void ); |
#elif defined( __MIPS__ ) |
#define __TGT_SYS __TGT_SYS_MIPS |
typedef unsigned __type_rtp; |
typedef unsigned __type_pad; |
typedef void( *__type_rtn ) ( void ); |
#else |
#define __TGT_SYS __TGT_SYS_X86 |
typedef unsigned char __type_rtp; |
typedef unsigned short __type_pad; |
#if defined( __386__ ) |
typedef void __near( *__type_rtn ) ( void ); |
#else |
typedef void( *__type_rtn ) ( void ); |
#endif |
#endif |
#include "langenv.h" |
#if defined( __MEDIUM__ ) || defined( __LARGE__ ) || defined( __HUGE__ ) |
#define __LARGE_CODE__ |
#endif |
// initialization progresses from highest priority to lowest |
// finalization progresses from lowest to highest |
#pragma pack( 1 ) |
struct rt_init // structure placed in XI/YI segment |
{ |
__type_rtp rtn_type; // - near=0/far=1 routine indication |
// also used when walking table to flag |
// completed entries |
__type_rtp priority; // - priority (0-highest 255-lowest) |
__type_rtn rtn; // - routine |
#if !( defined( __LARGE_CODE__ ) || defined( __386__ ) ) || defined( COMP_CFG_COFF ) |
__type_pad padding; // - padding, when small code ptr |
// or when risc cpu |
#endif |
}; |
#pragma pack() |
#if defined( M_I86 ) |
#if defined( __LARGE_CODE__ ) /* segmented large code models */ |
#define YIXI( seg, label, routine, priority ) \ |
struct rt_init __based( __segname( seg ) ) label = \ |
{ 1, priority, routine }; |
#else /* other segmented models */ |
#define YIXI( seg, label, routine, priority ) \ |
struct rt_init __based( __segname( seg ) ) label = \ |
{ 0, priority, routine, 0 }; |
#endif |
#else /* non-segmented architectures */ |
#define YIXI( seg, label, routine, priority ) \ |
struct rt_init __based( __segname( seg ) ) label = \ |
{ 0, priority, routine }; |
#endif |
/* |
Use these when you want a global label for the XI/YI structure |
*/ |
#define XI( label, routine, priority ) YIXI( TS_SEG_XI, label, routine, priority ) |
#define YI( label, routine, priority ) YIXI( TS_SEG_YI, label, routine, priority ) |
/* |
Use these when you don't care about the label on the XI/YI structure |
*/ |
#define __ANON( x ) __anon ## x |
#define ANON( x ) __ANON( x ) |
#define AXI( routine, priority ) static XI( ANON( __LINE__ ), routine, priority ) |
#define AYI( routine, priority ) static YI( ANON( __LINE__ ), routine, priority ) |
enum { |
INIT_PRIORITY_THREAD = 1, // priority for thread data init |
INIT_PRIORITY_FPU = 2, // priority for FPU/EMU init |
INIT_PRIORITY_RUNTIME = 10, // priority for run/time initialization |
INIT_PRIORITY_IOSTREAM = 20, // priority for IOSTREAM |
INIT_PRIORITY_LIBRARY = 32, // default library-initialization priority |
INIT_PRIORITY_PROGRAM = 64, // default program-initialization priority |
FINI_PRIORITY_DTOR = 40, // priority for module DTOR |
DTOR_PRIORITY = 40, // priority for module DTOR |
FINI_PRIORITY_EXIT = 16 // when exit() is called, functions between |
// 255 and this are called, the rest of the |
// fini routines are called from __exit(). |
}; |
/* have to turn off, or we get unref'd warnings for AXI & AYI stuff */ |
#pragma off( unreferenced ) |
#endif |
/programs/develop/open watcom/trunk/clib/src/scanf.h |
---|
0,0 → 1,77 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Format specification descriptor for scanf family. |
* |
****************************************************************************/ |
#ifndef _SCANF_H_INCLUDED |
#define _SCANF_H_INCLUDED |
#include "variety.h" |
#include "widechar.h" |
#include <stdarg.h> |
typedef struct { |
int (*cget_rtn)(); /* character get rtn */ |
void (*uncget_rtn)(); /* unget a character rtn */ |
CHAR_TYPE *ptr; /* file or string pointer */ |
int width; /* conversion field width */ |
unsigned assign : 1; /* assignment flag for current argument */ |
unsigned eoinp : 1; /* end of input reached */ |
unsigned far_ptr : 1; /* F - far pointer */ |
unsigned near_ptr : 1; /* N - near pointer */ |
unsigned char_var : 1; /* hh - char variable */ |
unsigned short_var : 1; /* h - short variable */ |
unsigned long_var : 1; /* l - long variable */ |
unsigned long_long_var : 1; /* ll - long long variable */ |
unsigned long_double_var: 1; /* L - long double variable */ |
unsigned p_format : 1; /* %p (pointer conversion) */ |
} SCNF_SPECS; |
#if defined(__HUGE__) |
#define PTR_SCNF_SPECS SCNF_SPECS _WCFAR * |
#else |
#define PTR_SCNF_SPECS SCNF_SPECS * |
#endif |
#if defined( __STDC_WANT_LIB_EXT1__ ) && __STDC_WANT_LIB_EXT1__ == 1 |
#if defined(__WIDECHAR__) |
extern int __wscnf_s( PTR_SCNF_SPECS, const CHAR_TYPE *, const char **msg, va_list ); |
#else |
extern int __scnf_s( PTR_SCNF_SPECS, const CHAR_TYPE *, const char **msg, va_list ); |
#endif |
#else |
#if defined(__WIDECHAR__) |
extern int __wscnf( PTR_SCNF_SPECS, const CHAR_TYPE *, va_list ); |
#else |
extern int __scnf( PTR_SCNF_SPECS, const CHAR_TYPE *, va_list ); |
#endif |
#endif |
//#pragma off(unreferenced); |
#endif |
/programs/develop/open watcom/trunk/clib/src/seterrno.h |
---|
0,0 → 1,52 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: errno related CLIB internal declarations. |
* |
****************************************************************************/ |
#ifndef _SETERNO_H_INCLUDED |
#define _SETERNO_H_INCLUDED |
#include "variety.h" |
// defined in _dos\c\dosret.c |
_WCRTLINK extern int __set_errno_dos( unsigned int ); |
#if defined(__NT__) |
_WCRTLINK extern int __set_errno_nt( void ); |
#endif |
// defined in startup\c\seterrno.c |
_WCRTLINK extern void __set_errno( unsigned int ); |
_WCRTLINK extern int __set_EINVAL( void ); |
_WCRTLINK extern void __set_EDOM( void ); |
_WCRTLINK extern void __set_ERANGE( void ); |
#if !defined(__UNIX__) |
_WCRTLINK extern void __set_doserrno( unsigned int ); |
#endif |
#endif |
/programs/develop/open watcom/trunk/clib/src/streamio.h |
---|
0,0 → 1,37 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Prototypes for various streamio internal routines. |
* |
****************************************************************************/ |
extern FILE *__allocfp( int handle ); |
extern void __freefp( FILE * ); |
extern void __chktty( FILE *fp ); |
extern void __ioalloc( FILE * ); |
extern int __doclose( FILE *fp, int close_handle ); |
extern int __shutdown_stream( FILE *fp, int close_handle ); |
/programs/develop/open watcom/trunk/clib/src/struct.inc |
---|
0,0 → 1,220 |
;***************************************************************************** |
;* |
;* Open Watcom Project |
;* |
;* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
;* |
;* ======================================================================== |
;* |
;* This file contains Original Code and/or Modifications of Original |
;* Code as defined in and that are subject to the Sybase Open Watcom |
;* Public License version 1.0 (the 'License'). You may not use this file |
;* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
;* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
;* provided with the Original Code and Modifications, and is also |
;* available at www.sybase.com/developer/opensource. |
;* |
;* The Original Code and all software distributed under the License are |
;* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
;* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
;* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
;* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
;* NON-INFRINGEMENT. Please see the License for the specific language |
;* governing rights and limitations under the License. |
;* |
;* ======================================================================== |
;* |
;* Description: Structured macros for MASM/WASM. |
;* |
;***************************************************************************** |
__label = 0 |
__depth = 0 |
__inner_loop = 0 |
_guess macro name |
__depth = __depth + 1 |
__label = __label + 1 |
_set __astk,%__depth,__label,<> |
__label = __label + 1 |
_set __estk,%__depth,__label,<> |
ifnb <name> |
name = __label |
endif |
endm |
_quif macro cc,name |
ifnb <name> |
_set __elbl,,name,<> |
_j cc,_l,%__elbl |
else |
_set __albl,,__astk,%__depth |
_j cc,_l,%__albl |
endif |
endm |
_quit macro name |
_quif ,name |
endm |
_admit macro |
_set __albl,,__astk,%__depth |
__label = __label + 1 |
_set __astk,%__depth,__label,<> |
_set __elbl,,__estk,%__depth |
_j ,_l,%__elbl |
_label _l,%__albl |
endm |
_endguess macro |
_set __albl,,__astk,%__depth |
_label _l,%__albl |
_set __elbl,,__estk,%__depth |
_label _l,%__elbl |
__depth = __depth - 1 |
endm |
_loop macro name |
_guess name |
_set __albl,,__astk,%__depth |
_label _m,%__albl |
_set __elbl,,__estk,%__depth |
_label _m,%__elbl |
_set __llbl,%__depth,%__inner_loop,<> |
_set __inner_loop,,%__depth,<> |
endm |
_loopif macro cc,name |
ifnb <name> |
_set __elbl,,name,<> |
_j cc,_m,%__elbl |
else |
_set __albl,,__astk,%__inner_loop |
_j cc,_m,%__albl |
endif |
endm |
_until macro cc |
_set __albl,,__astk,%__depth |
_jn cc,_m,%__albl |
_set __inner_loop,,__llbl,%__depth |
_endguess |
endm |
_endloop macro |
_set __albl,,__astk,%__depth |
_j ,_m,%__albl |
_set __inner_loop,,__llbl,%__depth |
_endguess |
endm |
_if macro cc |
_guess |
_set __albl,,__astk,%__depth |
_jn cc,_l,%__albl |
endm |
_else macro |
_admit |
endm |
_endif macro |
_endguess |
endm |
_set macro base1,ext1,base2,ext2 |
base1&ext1 = base2&ext2 |
endm |
_label macro base,ext |
base&ext: |
endm |
_j macro cc,base,ext |
j&cc base&ext |
endm |
_jn macro cc,base,ext |
jn&cc base&ext |
endm |
jnna macro label |
ja label |
endm |
jnnae macro label |
jae label |
endm |
jnnb macro label |
jb label |
endm |
jnnbe macro label |
jbe label |
endm |
jnnc macro label |
jc label |
endm |
jnne macro label |
je label |
endm |
jnng macro label |
jg label |
endm |
jnnge macro label |
jge label |
endm |
jnnl macro label |
jl label |
endm |
jnnle macro label |
jle label |
endm |
jnno macro label |
jo label |
endm |
jnnp macro label |
jp label |
endm |
jnns macro label |
js label |
endm |
jnnz macro label |
jz label |
endm |
jnpe macro label |
jpo label |
endm |
jnpo macro label |
jpe label |
endm |
j macro label |
jmp label |
endm |
jn macro label |
nop |
endm |
_shl macro reg,count |
add reg,reg |
endm |
_rcl macro reg,count |
adc reg,reg |
endm |
/programs/develop/open watcom/trunk/clib/src/tell.c |
---|
0,0 → 1,41 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE |
* DESCRIBE IT HERE! |
* |
****************************************************************************/ |
#include "variety.h" |
#include <sys/types.h> |
#include <unistd.h> |
#include "lseek.h" |
_WCRTLINK long int tell( int handle ) |
{ |
return( __lseek( handle, 0L, SEEK_CUR ) ); |
} |
/programs/develop/open watcom/trunk/clib/src/tmpfname.h |
---|
0,0 → 1,33 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Temporary file filename related definitions. |
* |
****************************************************************************/ |
#define _TMPFNAME_LENGTH 13 |
#define _TMP_INIT_CHAR 32 |
/programs/develop/open watcom/trunk/clib/src/variety.h |
---|
0,0 → 1,293 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Configuration for clib builds. |
* |
****************************************************************************/ |
#ifndef _VARIETY_H_INCLUDED |
#define _VARIETY_H_INCLUDED |
// |
// Note: for the DLL versions of the runtime libraries, this file must be |
// included before any of the runtime header files. |
// |
#ifndef _COMDEF_H_INCLUDED |
#include <_comdef.h> |
#endif |
// specialized data reference macro |
#define _HUGEDATA _WCDATA |
// memory model macros |
#if defined(__SMALL__) |
#define __SMALL_DATA__ |
#define __SMALL_CODE__ |
#elif defined(__FLAT__) |
#define __SMALL_DATA__ |
#define __SMALL_CODE__ |
#elif defined(__MEDIUM__) |
#define __SMALL_DATA__ |
#define __BIG_CODE__ |
#elif defined(__COMPACT__) |
#define __BIG_DATA__ |
#define __SMALL_CODE__ |
#elif defined(__LARGE__) |
#define __BIG_DATA__ |
#define __BIG_CODE__ |
#elif defined(__HUGE__) |
#define __BIG_DATA__ |
#define __BIG_CODE__ |
#elif defined(__AXP__) || defined(__PPC__) || defined(__MIPS__) |
// these effectively use near data references |
#define __SMALL_DATA__ |
#define __SMALL_CODE__ |
#else |
#error unable to configure memory model |
#endif |
// operating system and processor macros |
#if defined(__GENERIC__) |
#if defined(__386__) |
#define __PROTECT_MODE__ |
#define __GENERIC_386__ |
#elif defined(M_I86) |
#define __REAL_MODE__ |
#define __GENERIC_086__ |
#else |
#error unrecognized processor for GENERIC |
#endif |
#elif defined(__OS2__) |
#if defined(M_I86) |
#define __REAL_MODE__ |
#define __OS2_286__ |
#elif defined(__386__) |
#define __PROTECT_MODE__ |
#define __OS2_386__ |
#define __WARP__ |
#elif defined(__PPC__) |
#define __PROTECT_MODE__ |
#define __OS2_PPC__ |
#define __WARP__ |
#else |
#error unrecognized processor for OS2 |
#endif |
#elif defined(__NT__) |
#if !defined(WIN32_LEAN_AND_MEAN) && !defined(WIN32_NICE_AND_FAT) |
#define WIN32_LEAN_AND_MEAN |
#endif |
#define __PROTECT_MODE__ |
#if defined(__386__) |
#define __NT_386__ |
#elif defined(__AXP__) |
#define __NT_AXP__ |
#elif defined(__PPC__) |
#define __NT_PPC__ |
#else |
#error unrecognized processor for NT |
#endif |
#elif defined(__WINDOWS__) || defined(__WINDOWS_386__) |
#define __PROTECT_MODE__ |
#if defined(__386__) |
#define __WINDOWS__ |
#elif defined(M_I86) |
#define __WINDOWS_286__ |
#else |
#error unrecognized processor for WINDOWS |
#endif |
#elif defined(__DOS__) |
#if defined(__386__) |
#define __PROTECT_MODE__ |
#define __DOS_386__ |
#elif defined(M_I86) |
#define __REAL_MODE__ |
#define __DOS_086__ |
#else |
#error unrecognized processor for DOS |
#endif |
#elif defined(__OSI__) |
#if defined(__386__) |
#define __PROTECT_MODE__ |
#define __OSI_386__ |
#else |
#error unrecognized processor for OSI |
#endif |
#elif defined(__QNX__) |
#define __PROTECT_MODE__ |
#define __UNIX__ |
#if defined(__386__) |
#define __QNX_386__ |
#elif defined(M_I86) |
#define __QNX_286__ |
#else |
#error unrecognized processor for QNX |
#endif |
#elif defined(__LINUX__) |
#define __PROTECT_MODE__ |
#define __UNIX__ |
#if defined(__386__) |
#define __LINUX_386__ |
#elif defined(__PPC__) |
#define __LINUX_PPC__ |
#elif defined(__MIPS__) |
#define __LINUX_MIPS__ |
#else |
#error unrecognized processor for Linux |
#endif |
#elif defined(__NETWARE__) |
#define __PROTECT_MODE__ |
#if defined(__386__) |
#define __NETWARE_386__ |
#else |
#error unrecognized processor for NETWARE |
#endif |
#else |
#error unable to configure operating system and processor |
#endif |
// handle building dll's with appropriate linkage |
#if !defined(__SW_BR) && (defined(__WARP__) || defined(__NT__)) |
#if defined(__MAKE_DLL_CLIB) |
#undef _WCRTLINK |
#undef _WCIRTLINK |
#undef _WCRTLINKD |
#undef _WMRTLINK |
#undef _WMIRTLINK |
#undef _WMRTLINKD |
#undef _WPRTLINK |
#undef _WPIRTLINK |
#undef _WPRTLINKD |
#if defined(__NT__) |
#define _WCRTLINK __declspec(dllexport) _WRTLCALL |
#define _WCIRTLINK __declspec(dllexport) _WRTLCALL |
#define _WCRTLINKD __declspec(dllexport) |
#define _WMRTLINK __declspec(dllimport) _WRTLCALL |
#define _WMIRTLINK __declspec(dllimport) _WRTLCALL |
#define _WMRTLINKD __declspec(dllimport) |
#define _WPRTLINK __declspec(dllimport) _WRTLCALL |
#define _WPIRTLINK __declspec(dllimport) _WRTLCALL |
#define _WPRTLINKD __declspec(dllimport) |
#elif defined(__WARP__) |
#define _WCRTLINK __declspec(dllexport) _WRTLCALL |
#define _WCIRTLINK __declspec(dllexport) _WRTLCALL |
#define _WCRTLINKD __declspec(dllexport) |
#define _WMRTLINK _WRTLCALL |
#define _WMIRTLINK _WRTLCALL |
#define _WMRTLINKD |
#define _WPRTLINK _WRTLCALL |
#define _WPIRTLINK _WRTLCALL |
#define _WPRTLINKD |
#endif |
#elif defined(__MAKE_DLL_MATHLIB) |
#define _RTDLL |
#undef _WCRTLINK |
#undef _WCIRTLINK |
#undef _WCRTLINKD |
#undef _WMRTLINK |
#undef _WMIRTLINK |
#undef _WMRTLINKD |
#undef _WPRTLINK |
#undef _WPIRTLINK |
#undef _WPRTLINKD |
#if defined(__NT__) |
#define _WCRTLINK __declspec(dllimport) _WRTLCALL |
#define _WCIRTLINK __declspec(dllimport) _WRTLCALL |
#define _WCRTLINKD __declspec(dllimport) |
#define _WMRTLINK __declspec(dllexport) _WRTLCALL |
#define _WMIRTLINK __declspec(dllexport) _WRTLCALL |
#define _WMRTLINKD __declspec(dllexport) |
#define _WPRTLINK __declspec(dllimport) _WRTLCALL |
#define _WPIRTLINK __declspec(dllimport) _WRTLCALL |
#define _WPRTLINKD __declspec(dllimport) |
#elif defined(__WARP__) |
#define _WCRTLINK _WRTLCALL |
#define _WCIRTLINK _WRTLCALL |
#define _WCRTLINKD |
#define _WMRTLINK __declspec(dllexport) _WRTLCALL |
#define _WMIRTLINK __declspec(dllexport) _WRTLCALL |
#define _WMRTLINKD __declspec(dllexport) |
#define _WPRTLINK _WRTLCALL |
#define _WPIRTLINK _WRTLCALL |
#define _WPRTLINKD |
#endif |
#elif defined(__MAKE_DLL_CPPLIB) |
#define _RTDLL |
#undef _WCRTLINK |
#undef _WCIRTLINK |
#undef _WCRTLINKD |
#undef _WMRTLINK |
#undef _WMIRTLINK |
#undef _WMRTLINKD |
#undef _WPRTLINK |
#undef _WPIRTLINK |
#undef _WPRTLINKD |
#if defined(__NT__) |
#define _WCRTLINK __declspec(dllimport) _WRTLCALL |
#define _WCIRTLINK __declspec(dllimport) _WRTLCALL |
#define _WCRTLINKD __declspec(dllimport) |
#define _WMRTLINK __declspec(dllimport) _WRTLCALL |
#define _WMIRTLINK __declspec(dllimport) _WRTLCALL |
#define _WMRTLINKD __declspec(dllimport) |
#define _WPRTLINK __declspec(dllexport) _WRTLCALL |
#define _WPIRTLINK __declspec(dllexport) _WRTLCALL |
#define _WPRTLINKD __declspec(dllexport) |
#elif defined(__WARP__) |
#define _WCRTLINK _WRTLCALL |
#define _WCIRTLINK _WRTLCALL |
#define _WCRTLINKD |
#define _WMRTLINK _WRTLCALL |
#define _WMIRTLINK _WRTLCALL |
#define _WMRTLINKD |
#define _WPRTLINK __declspec(dllexport) _WRTLCALL |
#define _WPIRTLINK __declspec(dllexport) _WRTLCALL |
#define _WPRTLINKD __declspec(dllexport) |
#endif |
#endif |
#endif |
#define __ptr_check( p, a ) |
#define __null_check( p, a ) |
#define __stream_check( s, a ) |
#define __ROUND_UP_SIZE( __x, __amt ) (((__x)+((__amt)-1))&(~((__amt)-1))) |
/// |
/// This doesn't work for far pointer's |
/// |
///#define __ROUND_UP_PTR( __x, __amt ) ((void *)__ROUND_UP_SIZE((unsigned)(__x),__amt)) |
#if defined(M_I86) |
#define __ALIGN_SIZE( __x ) __ROUND_UP_SIZE( __x, 2 ) |
// #define __ALIGN_PTR( __x ) __ROUND_UP_PTR( __x, 2 ) |
#elif defined(__386__) |
#define __ALIGN_SIZE( __x ) __ROUND_UP_SIZE( __x, 4 ) |
/// #define __ALIGN_PTR( __x ) __ROUND_UP_PTR( __x, 4 ) |
#else |
#define __ALIGN_SIZE( __x ) __ROUND_UP_SIZE( __x, 8 ) |
// #define __ALIGN_PTR( __x ) __ROUND_UP_PTR( __x, 8 ) |
#endif |
#endif |
/programs/develop/open watcom/trunk/clib/src/watcom.h |
---|
0,0 → 1,206 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Common type definitions and macros widely used by Open |
* Watcom tools. |
* |
****************************************************************************/ |
#ifndef _WATCOM_H_INCLUDED_ |
#define _WATCOM_H_INCLUDED_ |
#include <errno.h> |
#ifndef __WATCOMC__ |
#include "clibext.h" |
#endif |
#if !defined(__sun__) && !defined(sun) && !defined(__sgi) && !defined(__hppa) && !defined(_AIX) && !defined(__alpha) && !defined(_TYPES_H_) && !defined(_SYS_TYPES_H) |
typedef unsigned uint; |
#endif |
typedef unsigned char uint_8; |
typedef unsigned short uint_16; |
#if defined (LONG_IS_64BITS) |
typedef unsigned int uint_32; |
#else |
typedef unsigned long uint_32; |
#endif |
typedef unsigned char unsigned_8; |
typedef unsigned short unsigned_16; |
#if defined (LONG_IS_64BITS) |
typedef unsigned int unsigned_32; |
#else |
typedef unsigned long unsigned_32; |
#endif |
typedef signed char int_8; |
typedef signed short int_16; |
#if defined (LONG_IS_64BITS) |
typedef signed int int_32; |
#else |
typedef signed long int_32; |
#endif |
typedef signed char signed_8; |
typedef signed short signed_16; |
#if defined (LONG_IS_64BITS) |
typedef signed int signed_32; |
#else |
typedef signed long signed_32; |
#endif |
typedef struct { |
union { |
unsigned_32 _32[2]; |
unsigned_16 _16[4]; |
unsigned_8 _8[8]; |
struct { |
#if defined( __BIG_ENDIAN__ ) |
unsigned v : 1; |
unsigned : 15; |
unsigned : 16; |
unsigned : 16; |
unsigned : 16; |
#else |
unsigned : 16; |
unsigned : 16; |
unsigned : 16; |
unsigned : 15; |
unsigned v : 1; |
#endif |
} sign; |
#if defined(__WATCOM_INT64__) || defined(__GNUC__) |
unsigned long long _64[1]; |
#endif |
} u; |
} unsigned_64; |
typedef unsigned_64 signed_64; |
/* Macros for low/high end access on little and big endian machines */ |
#if defined( __BIG_ENDIAN__ ) |
#define I64LO32 1 |
#define I64HI32 0 |
#define I64LO16 3 |
#define I64HI16 0 |
#define I64LO8 7 |
#define I64HI8 0 |
#else |
#define I64LO32 0 |
#define I64HI32 1 |
#define I64LO16 0 |
#define I64HI16 3 |
#define I64LO8 0 |
#define I64HI8 7 |
#endif |
/* Define _crtn for prototypes for external C routines called from C++. |
* Eg. extern _crtn void Foo(); |
*/ |
#if !defined( _crtn ) |
#if defined( __cplusplus ) |
#define _crtn "C" |
#else |
#define _crtn |
#endif |
#endif |
/* Macros for little/big endian conversion; These exist to simplify writing |
* code that handles both little and big endian data on either little or big |
* endian host platforms. Some of these macros could be implemented as inline |
* assembler where instructions to byte swap data in registers or read/write |
* memory access with byte swapping is available. |
* |
* NOTE: The SWAP_XX macros will swap data in place. If you only want to take a |
* a copy of the data and leave the original intact, then use the SWAPNC_XX |
* macros. |
*/ |
#define SWAPNC_16(w) (\ |
(((w) & 0x000000FFUL) << 8) |\ |
(((w) & 0x0000FF00UL) >> 8)\ |
) |
#define SWAPNC_32(w) (\ |
(((w) & 0x000000FFUL) << 24) |\ |
(((w) & 0x0000FF00UL) << 8) |\ |
(((w) & 0x00FF0000UL) >> 8) |\ |
(((w) & 0xFF000000UL) >> 24)\ |
) |
#define SWAPNC_64(w) (\ |
(((w) & 0x00000000000000FFULL) << 56) |\ |
(((w) & 0x000000000000FF00ULL) << 40) |\ |
(((w) & 0x0000000000FF0000ULL) << 24) |\ |
(((w) & 0x00000000FF000000ULL) << 8) |\ |
(((w) & 0x000000FF00000000ULL) >> 8) |\ |
(((w) & 0x0000FF0000000000ULL) >> 24) |\ |
(((w) & 0x00FF000000000000ULL) >> 40) |\ |
(((w) & 0xFF00000000000000ULL) >> 56)\ |
) |
#if defined( __BIG_ENDIAN__ ) |
/* Macros to get little endian data */ |
#define GET_LE_16(w) SWAPNC_16(w) |
#define GET_LE_32(w) SWAPNC_32(w) |
#define GET_LE_64(w) SWAPNC_64(w) |
/* Macros to get big endian data */ |
#define GET_BE_16(w) (w) |
#define GET_BE_32(w) (w) |
#define GET_BE_64(w) (w) |
/* Macros to convert little endian data in place */ |
#define CONV_LE_16(w) (w) = SWAPNC_16(w) |
#define CONV_LE_32(w) (w) = SWAPNC_32(w) |
#define CONV_LE_64(w) (w) = SWAPNC_64(w) |
/* Macros to convert big endian data in place */ |
#define CONV_BE_16(w) |
#define CONV_BE_32(w) |
#define CONV_BE_64(w) |
/* Macros to swap byte order */ |
#define SWAP_16 CONV_LE_16 |
#define SWAP_32 CONV_LE_32 |
#define SWAP_64 CONV_LE_64 |
#else |
/* Macros to get little endian data */ |
#define GET_LE_16(w) (w) |
#define GET_LE_32(w) (w) |
#define GET_LE_64(w) (w) |
/* Macros to get big endian data */ |
#define GET_BE_16(w) SWAPNC_16(w) |
#define GET_BE_32(w) SWAPNC_32(w) |
#define GET_BE_64(w) SWAPNC_64(w) |
/* Macros to convert little endian data in place */ |
#define CONV_LE_16(w) |
#define CONV_LE_32(w) |
#define CONV_LE_64(w) |
/* Macros to convert big endian data in place */ |
#define CONV_BE_16(w) (w) = SWAPNC_16(w) |
#define CONV_BE_32(w) (w) = SWAPNC_32(w) |
#define CONV_BE_64(w) (w) = SWAPNC_64(w) |
/* Macros to swap byte order */ |
#define SWAP_16 CONV_BE_16 |
#define SWAP_32 CONV_BE_32 |
#define SWAP_64 CONV_BE_64 |
#endif |
#endif |
/programs/develop/open watcom/trunk/clib/src/widechar.h |
---|
0,0 → 1,74 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Macros for single source wide/narrow character code. |
* |
****************************************************************************/ |
#ifndef _WIDECHAR_H_INCLUDED |
#define _WIDECHAR_H_INCLUDED |
#include "variety.h" |
#include <stdlib.h> /* for wchar_t and _atouni */ |
/*** Define some handy macros ***/ |
#ifdef __WIDECHAR__ |
#define DIR_TYPE struct _wdirent |
#define CHAR_TYPE wchar_t |
#define UCHAR_TYPE wchar_t |
#define INTCHAR_TYPE wint_t |
#define INT_WC_TYPE wchar_t |
#define VOID_WC_TYPE wchar_t |
#define NULLCHAR 0 |
#define STRING(a) L##a |
#define _AToUni(p1,p2) _atouni(p1,p2) |
#define IS_ASCII(c) ( (c & 0xff00) == 0 ) |
#define TO_ASCII(c) ( c ) |
#define __F_NAME(n1,n2) n2 |
#define UNICODE |
#define _UNICODE |
#define __UNICODE__ |
#else |
#define DIR_TYPE struct dirent |
#define CHAR_TYPE char |
#define UCHAR_TYPE unsigned char |
#define INTCHAR_TYPE int |
#define INT_WC_TYPE int |
#define VOID_WC_TYPE void |
#define NULLCHAR '\0' |
#define STRING(a) a |
#define _AToUni(p1,p2) (p2) |
#define IS_ASCII(c) ( 1 ) |
#define TO_ASCII(c) ( (unsigned char)c ) |
#define __F_NAME(n1,n2) n1 |
#endif |
#define CHARSIZE (sizeof( CHAR_TYPE )) |
/* must be the larger of char and wchar_t */ |
#define MAX_CHAR_TYPE wchar_t |
#endif |
/programs/develop/open watcom/trunk/clib/src/xstring.h |
---|
0,0 → 1,68 |
/**************************************************************************** |
* |
* Open Watcom Project |
* |
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved. |
* |
* ======================================================================== |
* |
* This file contains Original Code and/or Modifications of Original |
* Code as defined in and that are subject to the Sybase Open Watcom |
* Public License version 1.0 (the 'License'). You may not use this file |
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO |
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is |
* provided with the Original Code and Modifications, and is also |
* available at www.sybase.com/developer/opensource. |
* |
* The Original Code and all software distributed under the License are |
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER |
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM |
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR |
* NON-INFRINGEMENT. Please see the License for the specific language |
* governing rights and limitations under the License. |
* |
* ======================================================================== |
* |
* Description: Prototypes for direct 'calls' to inline functions. |
* |
****************************************************************************/ |
#ifndef _XSTRING_H_INCLUDED |
#include "variety.h" |
#include <string.h> |
#ifdef __cplusplus |
extern "C" { |
#endif |
#ifdef __INLINE_FUNCTIONS__ |
void *_inline_memchr( const void *__s, int __c, size_t __n ); |
int _inline_memcmp( const void *__s1, const void *__s2, size_t __n ); |
void *_inline_memcpy( void *__s1, const void *__s2, size_t __n ); |
void *_inline_memmove( void *__s1, const void *__s2, size_t __n ); |
void *_inline_memset( void *__s, int __c, size_t __n ); |
char *_inline_strcat( char *__s1, const char *__s2 ); |
char *_inline_strchr( const char *__s, int __c ); |
int _inline_strcmp( const char *__s1, const char *__s2 ); |
char *_inline_strcpy( char *__s1, const char *__s2 ); |
size_t _inline_strlen( const char *__s ); |
void _WCFAR *_inline__fmemchr( const void _WCFAR *__s, int __c, size_t __n ); |
void _WCFAR *_inline__fmemcpy( void _WCFAR *__s1, const void _WCFAR *__s2, size_t __n ); |
void _WCFAR *_inline__fmemset( void _WCFAR *__s, int __c, size_t __n ); |
int _inline__fmemcmp( const void _WCFAR *__s1, const void _WCFAR *__s2, size_t __n ); |
char _WCFAR *_inline__fstrcat( char _WCFAR *__s1, const char _WCFAR *__s2 ); |
char _WCFAR *_inline__fstrchr( const char _WCFAR *__s, int __c ); |
int _inline__fstrcmp( const char _WCFAR *__s1, const char _WCFAR *__s2 ); |
char _WCFAR *_inline__fstrcpy( char _WCFAR *__s1, const char _WCFAR *__s2 ); |
size_t _inline__fstrlen( const char _WCFAR *__s ); |
void _inline_movedata( unsigned __srcseg, unsigned __srcoff, |
unsigned __tgtseg, unsigned __tgtoff, unsigned __len ); |
#endif /* __INLINE_FUNCTIONS__ */ |
#define _XSTRING_H_INCLUDED |
#ifdef __cplusplus |
}; |
#endif |
#endif |
/programs/develop/sdk/trunk/uart/uart.inc |
---|
0,0 → 1,271 |
SRV_GETVERSION equ 0 |
PORT_OPEN equ 1 |
PORT_CLOSE equ 2 |
PORT_RESET equ 3 |
PORT_SETMODE equ 4 |
PORT_GETMODE equ 5 |
PORT_SETMCR equ 6 |
PORT_GETMCR equ 7 |
PORT_READ equ 8 |
PORT_WRITE equ 9 |
RATE_19200 equ 15 |
LCR_8BIT equ 0x03 |
MCR_OUT_2 equ 0x08 |
io.handle equ esp |
io.code equ esp+4 |
io.input equ esp+8 |
io.inp_size equ esp+12 |
io.output equ esp+16 |
io.out_size equ esp+20 |
; retval |
; ebx= service version |
; eax= error code |
; 0= no error |
; -1= common error |
align 4 |
init_uart: |
mov eax, 68 |
mov ebx, 16 |
mov ecx, szUart |
int 0x40 |
mov [Uart], eax |
test eax, eax |
jz .fail |
push 0 ;storage for version |
mov eax, esp |
xor ebx, ebx |
push 4 ;.out_size |
push eax ;.output |
push ebx ;.inp_size |
push ebx ;.input |
push SRV_GETVERSION ;.code |
push [Uart] ;.handle |
mov eax, 68 |
mov ebx, 17 |
mov ecx, esp |
int 0x40 |
add esp, 24 |
pop ebx ;version |
ret |
.fail: |
or eax, -1 |
ret |
; param |
; eax= port |
; |
; retval |
; ebx= connection |
; eax= error code |
align 4 |
uart_open: |
push 0 ;connection |
mov ebx, esp |
push eax ;port |
mov eax, esp |
push 4 ;.out_size |
push ebx ;.output |
push 4 ;.inp_size |
push eax ;.input |
push PORT_OPEN ;.code |
push [Uart] ;.handle |
mov eax, 68 |
mov ebx, 17 |
mov ecx, esp |
int 0x40 |
add esp, 28 ;io_control+port |
pop ebx ;connection |
ret |
; param |
; eax= connection |
; |
; retval |
; eax= error code |
align 4 |
uart_close: |
push eax ;connection |
mov eax, esp |
xor ebx, ebx |
push ebx ;.out_size |
push ebx ;.output |
push 4 ;.inp_size |
push eax ;.input |
push PORT_CLOSE ;.code |
push [Uart] ;.handle |
mov eax, 68 |
mov ebx, 17 |
mov ecx, esp ;io_contol |
int 0x40 |
add esp, 24+4 ;io_control |
ret |
; param |
; eax= connection |
; |
; retval |
; eax= error code |
align 4 |
uart_reset: |
push eax ;connection |
mov eax, esp |
xor ebx, ebx |
push ebx ;.out_size |
push ebx ;.output |
push 4 ;.inp_size |
push eax ;.input |
push PORT_RESET ;.code |
push [Uart] ;.handle |
mov eax, 68 |
mov ebx, 17 |
mov ecx, esp ;io_contol |
int 0x40 |
add esp, 24+4 ;io_control |
ret |
; param |
; eax= connection |
; ebx= rate |
; ecx= mode |
; |
; retval |
; eax= error code |
align 4 |
uart_setmode: |
push ecx ;mode |
push ebx ;rate |
push eax ;connection |
mov eax, esp |
xor ecx, ecx |
push ecx ;.out_size |
push ecx ;.output |
push 12 ;.inp_size |
push eax ;.input |
push PORT_SETMODE ;.code |
push [Uart] ;.handle |
mov eax, 68 |
mov ebx, 17 |
mov ecx, esp ;io_contol |
int 0x40 |
add esp, 24+12 ;io_control |
ret |
; param |
; eax= connection |
; ebx= modem control value |
; |
; retval |
; eax= error code |
align 4 |
uart_set_mcr: |
push ebx ;mcr |
push eax ;connection |
mov eax, esp |
xor ecx, ecx |
push ecx ;.out_size |
push ecx ;.output |
push 8 ;.inp_size |
push eax ;.input |
push PORT_SETMCR ;.code |
push [Uart] ;.handle |
mov eax, 68 |
mov ebx, 17 |
mov ecx, esp ;io_contol |
int 0x40 |
add esp, 24+8 ;io_control |
ret |
; param |
; eax= connection |
; ebx= buffer |
; ecx= size |
; |
; retval |
; ebx= bytes read |
; eax= error code |
align 4 |
uart_read: |
push 0 ;bytes read |
push ecx ;size |
push ebx ;buffer |
push eax ;connection |
mov eax, esp |
lea ebx, [esp+12] |
push 4 ;.out_size |
push ebx ;.output |
push 12 ;.inp_size |
push eax ;.input |
push PORT_READ ;.code |
push [Uart] ;.handle |
mov eax, 68 |
mov ebx, 17 |
mov ecx, esp ;io_contol |
int 0x40 |
add esp, 24+12 ;io_control |
pop ebx |
ret |
; param |
; eax= connection |
; ebx= buffer |
; ecx= size |
; |
; retval |
; eax= error code |
align 4 |
uart_write: |
push ecx ;size |
push ebx ;buffer |
push eax ;connection |
mov eax, esp |
xor ecx, ecx |
push ecx ;.out_size |
push ecx ;.output |
push 12 ;.inp_size |
push eax ;.input |
push PORT_WRITE ;.code |
push [Uart] ;.handle |
mov eax, 68 |
mov ebx, 17 |
mov ecx, esp ;io_contol |
int 0x40 |
add esp, 24+12 ;io_control |
ret |
align 4 |
Uart rd 1 |
szUart db 'UART',0 |
/programs/games/doom/trunk/kolibc/src/string/doscan.c |
---|
File deleted |
/programs/games/doom/trunk/kolibc/src/string/strlen.c |
---|
File deleted |
/programs/games/doom/trunk/kolibc/src/string/strrchr.c |
---|
File deleted |
/programs/games/doom/trunk/kolibc/src/string/is.c |
---|
File deleted |
/programs/games/doom/trunk/kolibc/src/string/memchr.c |
---|
File deleted |
\ No newline at end of file |
/programs/games/doom/trunk/kolibc/src/string/atoi.c |
---|
File deleted |
/programs/games/doom/trunk/kolibc/src/string/toupper.c |
---|
File deleted |
/programs/games/doom/trunk/kolibc/src/string/strupr.c |
---|
File deleted |
/programs/games/doom/trunk/kolibc/src/string/strncpy.c |
---|
File deleted |
\ No newline at end of file |
/programs/games/doom/trunk/kolibc/src/string/istable.c |
---|
File deleted |
/programs/games/doom/trunk/kolibc/src/string/strcpy.c |
---|
File deleted |
\ No newline at end of file |
/programs/games/doom/trunk/kolibc/src/string/sprintf.c |
---|
File deleted |
/programs/games/doom/trunk/kolibc/src/string/doprnt.c |
---|
File deleted |
/programs/games/doom/trunk/kolibc/src/string/strncmp.c |
---|
File deleted |
\ No newline at end of file |
/programs/games/doom/trunk/kolibc/src/mem/malloc.c |
---|
File deleted |
/programs/games/doom/trunk/kolibc/src/file/fputc.c |
---|
File deleted |
/programs/games/doom/trunk/kolibc/src/file/fread.c |
---|
File deleted |
/programs/games/doom/trunk/kolibc/src/file/fsetpos.c |
---|
File deleted |
/programs/games/doom/trunk/kolibc/src/file/ftell.c |
---|
File deleted |
/programs/games/doom/trunk/kolibc/src/file/fopen.c |
---|
File deleted |
/programs/games/doom/trunk/kolibc/src/file/rewind.c |
---|
File deleted |
/programs/games/doom/trunk/kolibc/src/file/fprintf.c |
---|
File deleted |
/programs/games/doom/trunk/kolibc/src/file/fgetc.c |
---|
File deleted |
\ No newline at end of file |
/programs/games/doom/trunk/kolibc/src/file/fclose.c |
---|
File deleted |
/programs/games/doom/trunk/kolibc/src/file/fseek.c |
---|
File deleted |
/programs/games/doom/trunk/kolibc/src/file/feof.c |
---|
File deleted |
\ No newline at end of file |
/programs/games/doom/trunk/kolibc/src/file/fwrite.c |
---|
File deleted |
/programs/games/doom/trunk/kolibc/src/file/fscanf.c |
---|
File deleted |