forked from KolibriOS/kolibrios
update clib
git-svn-id: svn://kolibrios.org@701 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
7941c117bc
commit
275695e8c3
@ -4,8 +4,8 @@ projectIdent
|
|||||||
VpeMain
|
VpeMain
|
||||||
1
|
1
|
||||||
WRect
|
WRect
|
||||||
-32
|
32
|
||||||
330
|
460
|
||||||
10304
|
10304
|
||||||
9950
|
9950
|
||||||
2
|
2
|
||||||
@ -16,28 +16,48 @@ MCommand
|
|||||||
4
|
4
|
||||||
MCommand
|
MCommand
|
||||||
0
|
0
|
||||||
1
|
2
|
||||||
5
|
5
|
||||||
WFileName
|
WFileName
|
||||||
10
|
10
|
||||||
clib_r.tgt
|
clib_r.tgt
|
||||||
6
|
6
|
||||||
WVList
|
WFileName
|
||||||
1
|
|
||||||
7
|
7
|
||||||
VComponent
|
crt.tgt
|
||||||
|
7
|
||||||
|
WVList
|
||||||
|
2
|
||||||
8
|
8
|
||||||
|
VComponent
|
||||||
|
9
|
||||||
WRect
|
WRect
|
||||||
2760
|
2496
|
||||||
200
|
30
|
||||||
5712
|
5712
|
||||||
7390
|
7390
|
||||||
0
|
0
|
||||||
0
|
0
|
||||||
9
|
10
|
||||||
WFileName
|
WFileName
|
||||||
10
|
10
|
||||||
clib_r.tgt
|
clib_r.tgt
|
||||||
|
24
|
||||||
|
52
|
||||||
|
11
|
||||||
|
VComponent
|
||||||
|
12
|
||||||
|
WRect
|
||||||
0
|
0
|
||||||
0
|
0
|
||||||
|
5712
|
||||||
|
7300
|
||||||
|
0
|
||||||
|
0
|
||||||
|
13
|
||||||
|
WFileName
|
||||||
7
|
7
|
||||||
|
crt.tgt
|
||||||
|
0
|
||||||
|
29
|
||||||
|
11
|
||||||
|
@ -1,70 +0,0 @@
|
|||||||
|
|
||||||
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
|
|
@ -1,85 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
*
|
|
||||||
* 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
|
|
@ -1,53 +0,0 @@
|
|||||||
;*****************************************************************************
|
|
||||||
;*
|
|
||||||
;* 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
|
|
@ -1,106 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
*
|
|
||||||
* 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
|
|
@ -1,74 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
*
|
|
||||||
* 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
|
|
@ -24,22 +24,61 @@
|
|||||||
*
|
*
|
||||||
* ========================================================================
|
* ========================================================================
|
||||||
*
|
*
|
||||||
* Description: Prototypes for floating-point formatting routines.
|
* Description: I/O streams shutdown.
|
||||||
*
|
*
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
#ifndef _FTOS_H_INCLUDED
|
|
||||||
#define _FTOS_H_INCLUDED
|
|
||||||
|
|
||||||
#include "variety.h"
|
#include "variety.h"
|
||||||
#include "farsupp.h"
|
#include <stdio.h>
|
||||||
|
#include "rtdata.h"
|
||||||
|
|
||||||
_WCRTLINK extern FAR_STRING (*__EFG_printf)();
|
extern void __purgefp(void);
|
||||||
_WCRTLINK extern void (*__EFG_scanf)();
|
extern int __shutdown_stream( FILE *fp, int );
|
||||||
extern FAR_STRING _EFG_Format();
|
|
||||||
extern void __cnvs2d();
|
|
||||||
_WMRTLINK extern FAR_STRING (*__get_EFG_Format())();
|
|
||||||
_WMRTLINK extern void (*__get__cnvs2d())();
|
|
||||||
|
|
||||||
|
static int docloseall( unsigned dont_close )
|
||||||
|
{
|
||||||
|
FILE *fp;
|
||||||
|
int number_of_files_closed;
|
||||||
|
__stream_link *link;
|
||||||
|
__stream_link *next;
|
||||||
|
FILE *bottom;
|
||||||
|
FILE *standards;
|
||||||
|
int close_handle;
|
||||||
|
|
||||||
|
bottom = &_RWD_iob[dont_close];
|
||||||
|
standards = &_RWD_iob[NUM_STD_STREAMS];
|
||||||
|
number_of_files_closed = 0;
|
||||||
|
for( link = _RWD_ostream; link != NULL; link = next ) {
|
||||||
|
next = link->next;
|
||||||
|
fp = link->stream;
|
||||||
|
close_handle = 1;
|
||||||
|
if ((fp->_flag & _DYNAMIC) || (fp->_flag & _TMPFIL))
|
||||||
|
{
|
||||||
|
__shutdown_stream( fp, close_handle );
|
||||||
|
++number_of_files_closed;
|
||||||
|
}
|
||||||
|
else if( fp >= bottom ) {
|
||||||
|
#ifndef __NETWARE__
|
||||||
|
/* close the file, but leave the handle open */
|
||||||
|
if( fp < standards ) {
|
||||||
|
close_handle = 0;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
__shutdown_stream( fp, close_handle );
|
||||||
|
++number_of_files_closed;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return( number_of_files_closed );
|
||||||
|
}
|
||||||
|
|
||||||
|
_WCRTLINK int fcloseall( void )
|
||||||
|
{
|
||||||
|
return( docloseall( NUM_STD_STREAMS ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
void __full_io_exit( void )
|
||||||
|
{
|
||||||
|
docloseall( 0 );
|
||||||
|
__purgefp();
|
||||||
|
}
|
@ -1,33 +0,0 @@
|
|||||||
|
|
||||||
#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 ) );
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,113 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
*
|
|
||||||
* 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
|
|
@ -1,358 +0,0 @@
|
|||||||
;*****************************************************************************
|
|
||||||
;*
|
|
||||||
;* 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
|
|
||||||
|
|
@ -1,211 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
*
|
|
||||||
* 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
|
|
@ -1,131 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
*
|
|
||||||
* 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
|
|
@ -1,220 +0,0 @@
|
|||||||
;*****************************************************************************
|
|
||||||
;*
|
|
||||||
;* 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
|
|
@ -1,293 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
*
|
|
||||||
* 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
|
|
@ -1,74 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
*
|
|
||||||
* 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
|
|
@ -1,68 +0,0 @@
|
|||||||
/****************************************************************************
|
|
||||||
*
|
|
||||||
* 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
|
|
@ -24,25 +24,31 @@
|
|||||||
*
|
*
|
||||||
* ========================================================================
|
* ========================================================================
|
||||||
*
|
*
|
||||||
* Description: Routine to bring in real floating-point formatting code.
|
* Description: Implementation of isatty() for Win32.
|
||||||
*
|
*
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
#include "variety.h"
|
#include "variety.h"
|
||||||
#include <stdio.h>
|
#include <unistd.h>
|
||||||
#include "ftos.h"
|
//#include <windows.h>
|
||||||
#include "farsupp.h"
|
//#include "defwin.h"
|
||||||
|
#include "iomode.h"
|
||||||
|
#include "fileacc.h"
|
||||||
|
|
||||||
/* This routine will be called by cstart if "_fltused" is referenced. */
|
/*
|
||||||
|
DWORD GetFileType(
|
||||||
|
HANDLE hFile // handle to file
|
||||||
|
);
|
||||||
|
Return value can be:
|
||||||
|
FILE_TYPE_CHAR The specified file is a character file,
|
||||||
|
typically an LPT device or a console
|
||||||
|
*/
|
||||||
|
|
||||||
void __setEFGfmt( void )
|
_WCRTLINK int isatty( int hid )
|
||||||
{
|
{
|
||||||
#ifdef __SW_BR
|
// if( GetFileType( __getOSHandle( hid ) ) == FILE_TYPE_CHAR ) {
|
||||||
__EFG_printf = __get_EFG_Format();
|
// return( 1 );
|
||||||
__EFG_scanf = __get__cnvs2d(); /* 27-mar-90 */
|
// }
|
||||||
#else
|
return( 0 );
|
||||||
__EFG_printf = _EFG_Format;
|
|
||||||
__EFG_scanf = __cnvs2d; /* 27-mar-90 */
|
|
||||||
#endif
|
|
||||||
}
|
}
|
@ -30,6 +30,31 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
#define _ERRNO errno
|
#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
|
||||||
|
103
programs/develop/open watcom/trunk/clib/h/saferlib.h
Normal file
103
programs/develop/open watcom/trunk/clib/h/saferlib.h
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
*
|
||||||
|
* 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 data and routines for "Safer C", or bounds-checking
|
||||||
|
* library extension.
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef _SAFERLIB_H_INCLUDED
|
||||||
|
#define _SAFERLIB_H_INCLUDED
|
||||||
|
|
||||||
|
#define __STDC_WANT_LIB_EXT1__ 1
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
// Maximum length of runtime-constraint error message
|
||||||
|
#define RTCT_MSG_MAX 128
|
||||||
|
|
||||||
|
#define _RWD_rtcthandler __runtime_constraint_handler
|
||||||
|
|
||||||
|
extern constraint_handler_t __runtime_constraint_handler;
|
||||||
|
|
||||||
|
extern void __rtct_fail( const char *fn, const char *reason, void *reserved );
|
||||||
|
|
||||||
|
// Runtime-constraint validation macros. Call the handler and return zero if check
|
||||||
|
// failed, return non-zero value if check succeeded.
|
||||||
|
|
||||||
|
#define __check_constraint_nullptr( arg ) \
|
||||||
|
((arg == NULL) ? __rtct_fail( __func__, #arg " == NULL", NULL ), 0 : 1)
|
||||||
|
|
||||||
|
#define __check_constraint_maxsize( arg ) \
|
||||||
|
((arg > RSIZE_MAX) ? __rtct_fail( __func__, #arg " > RSIZE_MAX", NULL ), 0 : 1)
|
||||||
|
|
||||||
|
#define __check_constraint_zero( arg ) \
|
||||||
|
((arg == 0) ? __rtct_fail( __func__, #arg " == 0", NULL ), 0 : 1)
|
||||||
|
|
||||||
|
#define __check_constraint_toosmall( name, left ) \
|
||||||
|
((left == 0) ? __rtct_fail( __func__, #name " is too small to hold data", NULL ), 0 : 1)
|
||||||
|
|
||||||
|
|
||||||
|
// Runtime-constraint validation macros. Construct the message and return
|
||||||
|
// zero if check failed, return non-zero value if check succeeded.
|
||||||
|
// __rtct_fail has to be explicitly called later.
|
||||||
|
|
||||||
|
#define __check_constraint_nullptr_msg( msg, arg ) \
|
||||||
|
((arg == NULL) ? ( msg = #arg " == NULL" ), 0 : 1)
|
||||||
|
|
||||||
|
#define __check_constraint_maxsize_msg( msg, arg ) \
|
||||||
|
((arg > RSIZE_MAX) ? ( msg = #arg " > RSIZE_MAX" ), 0 : 1)
|
||||||
|
|
||||||
|
#define __check_constraint_zero_msg( msg, arg ) \
|
||||||
|
((arg == 0) ? ( msg = #arg " == 0" ), 0 : 1)
|
||||||
|
|
||||||
|
#define __check_constraint_toosmall_msg( msg, name, left ) \
|
||||||
|
((left == 0) ? ( msg = #name " is too small to hold data" ), 0 : 1)
|
||||||
|
|
||||||
|
#define __check_constraint_a_gt_b_msg( msg, a, b ) \
|
||||||
|
((a > b) ? ( msg = #a " > " #b ), 0 : 1)
|
||||||
|
|
||||||
|
#define __check_constraint_overlap_msg( msg, p1, len1, p2, len2 ) \
|
||||||
|
(((p1 == p2) || ( (p1 > p2) && ( p1 < (CHAR_TYPE *)p2 + len2 * sizeof( CHAR_TYPE ))) \
|
||||||
|
|| ( (p2 > p1) && ( p2 < (CHAR_TYPE *)p1 + len1 * sizeof( CHAR_TYPE )))) \
|
||||||
|
? ( msg = #p1 " overlap " #p2 ), 0 : 1)
|
||||||
|
|
||||||
|
|
||||||
|
// For 16-bit targets, the RSIZE_MAX check is effectively no-op. Object sizes
|
||||||
|
// up to SIZE_MAX are legal and not uncommon.
|
||||||
|
#if RSIZE_MAX == SIZE_MAX
|
||||||
|
#undef __check_constraint_maxsize
|
||||||
|
#define __check_constraint_maxsize( arg ) 1
|
||||||
|
#undef __check_constraint_maxsize_msg
|
||||||
|
#define __check_constraint_maxsize_msg( msg, arg ) 1
|
||||||
|
|
||||||
|
#define __lte_rsizmax( arg ) 1
|
||||||
|
#else
|
||||||
|
#define __lte_rsizmax( arg ) (arg <= RSIZE_MAX)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif // _SAFERLIB_H_INCLUDED
|
@ -24,17 +24,18 @@
|
|||||||
*
|
*
|
||||||
* ========================================================================
|
* ========================================================================
|
||||||
*
|
*
|
||||||
* Description: Define values for language targets.
|
* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE
|
||||||
|
* DESCRIBE IT HERE!
|
||||||
*
|
*
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
#ifndef __LANGENVD_H__
|
#ifndef __STRDUP_H_INCLUDED
|
||||||
#define __LANGENVD_H__
|
#define __STRDUP_H_INCLUDED
|
||||||
|
|
||||||
#define __TGT_SYS_X86 0 // All x86 systems to date
|
#include "variety.h"
|
||||||
#define __TGT_SYS_AXP_NT 1 // Win32 on DEC Alpha AXP
|
#include "widechar.h"
|
||||||
#define __TGT_SYS_PPC_NT 2 // Win32 on IBM/Motorola PowerPC
|
|
||||||
#define __TGT_SYS_MIPS 3 // MIPS RISC Architecture
|
|
||||||
|
|
||||||
|
_WCRTLINK extern char *__clib_strdup( const char *str );
|
||||||
|
_WCRTLINK extern wchar_t *__clib_wcsdup( const wchar_t *str );
|
||||||
#endif
|
#endif
|
399
programs/develop/open watcom/trunk/clib/handleio/openklbr.c
Normal file
399
programs/develop/open watcom/trunk/clib/handleio/openklbr.c
Normal file
@ -0,0 +1,399 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
*
|
||||||
|
* 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);
|
||||||
|
int _stdcall create_file(const char *name);
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
char *name;
|
||||||
|
unsigned int offset;
|
||||||
|
}__file_handle;
|
||||||
|
|
||||||
|
|
||||||
|
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 __openFileHandle(const CHAR_TYPE *name, int mode)
|
||||||
|
{
|
||||||
|
FILEINFO info;
|
||||||
|
__file_handle *handle;
|
||||||
|
char *path;
|
||||||
|
int err;
|
||||||
|
|
||||||
|
path = getfullpath(name);
|
||||||
|
|
||||||
|
if(err=get_fileinfo(path,&info))
|
||||||
|
{
|
||||||
|
// printf("failed getfileinfo %s\n\r", path);
|
||||||
|
|
||||||
|
if(mode & O_CREAT)
|
||||||
|
err=create_file(path);
|
||||||
|
|
||||||
|
if(err)
|
||||||
|
{
|
||||||
|
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 = __openFileHandle( name, mode);
|
||||||
|
|
||||||
|
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 ) );
|
||||||
|
}
|
@ -31,10 +31,11 @@
|
|||||||
|
|
||||||
|
|
||||||
#include "variety.h"
|
#include "variety.h"
|
||||||
#include "87state.h"
|
#include <sys/types.h>
|
||||||
#include "rtdata.h"
|
#include <unistd.h>
|
||||||
|
#include "lseek.h"
|
||||||
|
|
||||||
static void _do_nothing( _87state *st ) {}
|
_WCRTLINK long int tell( int handle )
|
||||||
|
{
|
||||||
void (*_RWD_Save8087)(_87state *) = _do_nothing;
|
return( __lseek( handle, 0L, SEEK_CUR ) );
|
||||||
void (*_RWD_Rest8087)(_87state *) = _do_nothing;
|
}
|
306
programs/develop/open watcom/trunk/clib/mbyte/mbinit.c
Normal file
306
programs/develop/open watcom/trunk/clib/mbyte/mbinit.c
Normal file
@ -0,0 +1,306 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
*
|
||||||
|
* 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 <string.h>
|
||||||
|
#include <mbstring.h>
|
||||||
|
#include "mbchar.h"
|
||||||
|
|
||||||
|
|
||||||
|
unsigned int __MBCodePage = 0; /* default code page */
|
||||||
|
|
||||||
|
static void set_dbcs_table( int low, int high )
|
||||||
|
{
|
||||||
|
memset( __MBCSIsTable + low + 1, _MB_LEAD, high - low + 1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
static void clear_dbcs_table( void )
|
||||||
|
{
|
||||||
|
__IsDBCS = 0; /* SBCS for now */
|
||||||
|
__MBCodePage = 0;
|
||||||
|
memset( __MBCSIsTable, 0, 257 );
|
||||||
|
}
|
||||||
|
|
||||||
|
/****
|
||||||
|
***** Initialize a multi-byte character set. Returns 0 on success.
|
||||||
|
****/
|
||||||
|
|
||||||
|
int __mbinit( int codepage )
|
||||||
|
{
|
||||||
|
|
||||||
|
/*** Handle values from _setmbcp ***/
|
||||||
|
if( codepage == _MBINIT_CP_ANSI )
|
||||||
|
{
|
||||||
|
codepage = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if( codepage == _MBINIT_CP_OEM )
|
||||||
|
{
|
||||||
|
codepage = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if( codepage == _MBINIT_CP_SBCS )
|
||||||
|
{
|
||||||
|
clear_dbcs_table();
|
||||||
|
return( 0 );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if( codepage == _MBINIT_CP_932 )
|
||||||
|
{
|
||||||
|
clear_dbcs_table();
|
||||||
|
set_dbcs_table( 0x81, 0x9F );
|
||||||
|
set_dbcs_table( 0xE0, 0xFC );
|
||||||
|
__IsDBCS = 1;
|
||||||
|
__MBCodePage = 932;
|
||||||
|
return( 0 );
|
||||||
|
}
|
||||||
|
return( 0 ); /* return success code */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/****
|
||||||
|
***** Query DOS to find the valid lead byte ranges.
|
||||||
|
****/
|
||||||
|
|
||||||
|
#if defined(__DOS__) && !defined(__OSI__)
|
||||||
|
#ifndef __386__
|
||||||
|
|
||||||
|
// for some unknown reason NT DPMI returns for DOS service 6300h
|
||||||
|
// Carry=0, odd SI value and DS stay unchanged
|
||||||
|
// this case is also tested as wrong int 21h result
|
||||||
|
#if 1
|
||||||
|
#pragma aux dos_get_dbcs_lead_table = \
|
||||||
|
"push ds" \
|
||||||
|
"xor ax,ax" \
|
||||||
|
"mov ds,ax" \
|
||||||
|
"mov ah,63h" /* get DBCS vector table */ \
|
||||||
|
"int 21h" \
|
||||||
|
"mov di,ds" \
|
||||||
|
"jnc label1" \
|
||||||
|
"xor di,di" \
|
||||||
|
"label1:" \
|
||||||
|
"test di,di" \
|
||||||
|
"jnz exit1" \
|
||||||
|
"mov si,di" \
|
||||||
|
"exit1:" \
|
||||||
|
"pop ds" \
|
||||||
|
value [di si] \
|
||||||
|
modify [ax bx cx dx si di es];
|
||||||
|
#else
|
||||||
|
unsigned short _WCFAR *dos_get_dbcs_lead_table( void )
|
||||||
|
/****************************************************/
|
||||||
|
{
|
||||||
|
union REGS regs;
|
||||||
|
struct SREGS sregs;
|
||||||
|
|
||||||
|
regs.w.ax = 0x6300; /* get lead byte table code */
|
||||||
|
sregs.ds = 0;
|
||||||
|
sregs.es = 0;
|
||||||
|
intdosx( ®s, ®s, &sregs ); /* call DOS */
|
||||||
|
if( regs.w.cflag || ( sregs.ds == 0 )) /* ensure function succeeded */
|
||||||
|
return( NULL );
|
||||||
|
return( MK_FP( sregs.ds, regs.w.si ) ); /* return pointer to table */
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
unsigned short dos_get_code_page( void )
|
||||||
|
/**************************************/
|
||||||
|
{
|
||||||
|
union REGS regs;
|
||||||
|
struct SREGS sregs;
|
||||||
|
unsigned char buf[7];
|
||||||
|
|
||||||
|
regs.w.ax = 0x6501; /* get international info */
|
||||||
|
regs.w.bx = 0xFFFF; /* global code page */
|
||||||
|
regs.w.cx = 7; /* buffer size */
|
||||||
|
regs.w.dx = 0xFFFF; /* current country */
|
||||||
|
regs.w.di = FP_OFF( (void __far*)buf ); /* buffer offset */
|
||||||
|
sregs.es = FP_SEG( (void __far*)buf ); /* buffer segment */
|
||||||
|
sregs.ds = 0; /* in protected mode (dos16m) DS must be initialized */
|
||||||
|
intdosx( ®s, ®s, &sregs ); /* call DOS */
|
||||||
|
if( regs.w.cflag ) return( 0 ); /* ensure function succeeded */
|
||||||
|
return( * (unsigned short*)(buf+5) ); /* return code page */
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#pragma aux dos_get_code_page = \
|
||||||
|
"push ds" \
|
||||||
|
"push bp" \
|
||||||
|
"mov bp,sp" \
|
||||||
|
"sub sp,8" \
|
||||||
|
"xor ax,ax" \
|
||||||
|
"mov ds,ax" \
|
||||||
|
"mov ax,6501h" /* get international info */ \
|
||||||
|
"mov bx,0ffffh" /* global code page */ \
|
||||||
|
"mov cx,0007h" /* buffer size */ \
|
||||||
|
"mov dx,0ffffh" /* current country */ \
|
||||||
|
"lea di,[bp-8]" /* buffer offset */ \
|
||||||
|
"push ss" \
|
||||||
|
"pop es" /* buffer segment */ \
|
||||||
|
"int 21h" /* call DOS */ \
|
||||||
|
"mov ax,[bp-8+5]" /* code page */ \
|
||||||
|
"jnc NoError" \
|
||||||
|
"xor ax,ax" \
|
||||||
|
"NoError:" \
|
||||||
|
"mov sp,bp" \
|
||||||
|
"pop bp" \
|
||||||
|
"pop ds" \
|
||||||
|
value [ax] \
|
||||||
|
modify [ax bx cx dx di es];
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
|
||||||
|
#pragma pack(__push,1);
|
||||||
|
typedef struct {
|
||||||
|
unsigned short int_num;
|
||||||
|
unsigned short real_ds;
|
||||||
|
unsigned short real_es;
|
||||||
|
unsigned short real_fs;
|
||||||
|
unsigned short real_gs;
|
||||||
|
unsigned long real_eax;
|
||||||
|
unsigned long real_edx;
|
||||||
|
} PHARLAP_block;
|
||||||
|
#pragma pack(__pop);
|
||||||
|
|
||||||
|
unsigned short _WCFAR *dos_get_dbcs_lead_table( void )
|
||||||
|
/****************************************************/
|
||||||
|
{
|
||||||
|
union REGPACK regs;
|
||||||
|
|
||||||
|
if( _IsPharLap() ) {
|
||||||
|
PHARLAP_block pblock;
|
||||||
|
|
||||||
|
memset( &pblock, 0, sizeof( pblock ) );
|
||||||
|
memset( ®s, 0, sizeof( regs ) );
|
||||||
|
pblock.real_eax = 0x6300; /* get DBCS vector table */
|
||||||
|
pblock.int_num = 0x21; /* DOS call */
|
||||||
|
regs.x.eax = 0x2511; /* issue real-mode interrupt */
|
||||||
|
regs.x.edx = FP_OFF( &pblock ); /* DS:EDX -> parameter block */
|
||||||
|
regs.w.ds = FP_SEG( &pblock );
|
||||||
|
intr( 0x21, ®s );
|
||||||
|
if( pblock.real_ds != 0xFFFF ) { /* weird OS/2 value */
|
||||||
|
return( MK_FP( _ExtenderRealModeSelector,
|
||||||
|
(((unsigned)pblock.real_ds)<<4) + regs.w.si ) );
|
||||||
|
}
|
||||||
|
} else if( _IsRational() ) {
|
||||||
|
rm_call_struct dblock;
|
||||||
|
|
||||||
|
memset( &dblock, 0, sizeof( dblock ) );
|
||||||
|
dblock.eax = 0x6300; /* get DBCS vector table */
|
||||||
|
DPMISimulateRealModeInterrupt( 0x21, 0, 0, &dblock );
|
||||||
|
if( (dblock.flags & 1) == 0 ) {
|
||||||
|
return( MK_FP( _ExtenderRealModeSelector,
|
||||||
|
(((unsigned)dblock.ds)<<4) + dblock.esi ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return( NULL );
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned short dos_get_code_page( void )
|
||||||
|
/**************************************/
|
||||||
|
{
|
||||||
|
union REGPACK regs;
|
||||||
|
unsigned short __far * temp;
|
||||||
|
unsigned short real_seg;
|
||||||
|
unsigned short codepage = 0;
|
||||||
|
|
||||||
|
|
||||||
|
/*** Get the code page ***/
|
||||||
|
if( _IsPharLap() ) {
|
||||||
|
union REGS r;
|
||||||
|
PHARLAP_block pblock;
|
||||||
|
|
||||||
|
/*** Alloc DOS Memory under Phar Lap ***/
|
||||||
|
memset( &r, 0, sizeof( r ) );
|
||||||
|
r.x.ebx = 1;
|
||||||
|
r.x.eax = 0x25c0;
|
||||||
|
intdos( &r, &r );
|
||||||
|
real_seg = r.w.ax;
|
||||||
|
|
||||||
|
memset( &pblock, 0, sizeof( pblock ) );
|
||||||
|
memset( ®s, 0, sizeof( regs ) );
|
||||||
|
pblock.real_eax = 0x6501; /* get international info */
|
||||||
|
pblock.real_edx = 0xFFFF; /* current country */
|
||||||
|
pblock.real_es = real_seg; /* buffer segment */
|
||||||
|
regs.x.ebx = 0xFFFF; /* global code page */
|
||||||
|
regs.x.ecx = 7; /* buffer size */
|
||||||
|
regs.x.edi = 0; /* buffer offset */
|
||||||
|
pblock.int_num = 0x21; /* DOS call */
|
||||||
|
regs.x.eax = 0x2511; /* issue real-mode interrupt */
|
||||||
|
regs.x.edx = FP_OFF( &pblock ); /* DS:EDX -> parameter block */
|
||||||
|
regs.w.ds = FP_SEG( &pblock );
|
||||||
|
intr( 0x21, ®s );
|
||||||
|
if( pblock.real_ds != 0xFFFF ) { /* weird OS/2 value */
|
||||||
|
temp = MK_FP( _ExtenderRealModeSelector, (real_seg<<4) + 5 );
|
||||||
|
codepage = *temp;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*** Free DOS Memory under Phar Lap ***/
|
||||||
|
r.x.ecx = real_seg;
|
||||||
|
r.x.eax = 0x25c1;
|
||||||
|
intdos( &r, &r );
|
||||||
|
} else if( _IsRational() ) {
|
||||||
|
unsigned long dpmi_rc;
|
||||||
|
unsigned short selector;
|
||||||
|
rm_call_struct dblock;
|
||||||
|
|
||||||
|
/*** Allocate some DOS memory with DPMI ***/
|
||||||
|
dpmi_rc = DPMIAllocateDOSMemoryBlock( 1 ); /* one paragraph is enough */
|
||||||
|
real_seg = (unsigned short) dpmi_rc;
|
||||||
|
selector = (unsigned short) (dpmi_rc>>16);
|
||||||
|
|
||||||
|
memset( &dblock, 0, sizeof( dblock ) );
|
||||||
|
dblock.eax = 0x6501; /* get international info */
|
||||||
|
dblock.ebx = 0xFFFF; /* global code page */
|
||||||
|
dblock.ecx = 7; /* buffer size */
|
||||||
|
dblock.edx = 0xFFFF; /* current country */
|
||||||
|
dblock.edi = 0; /* buffer offset */
|
||||||
|
dblock.es = real_seg; /* buffer segment */
|
||||||
|
DPMISimulateRealModeInterrupt( 0x21, 0, 0, &dblock );
|
||||||
|
if( (dblock.flags & 1) == 0 ) {
|
||||||
|
temp = MK_FP( _ExtenderRealModeSelector, (real_seg<<4) + 5 );
|
||||||
|
codepage = *temp;
|
||||||
|
}
|
||||||
|
/*** Free DOS memory with DPMI ***/
|
||||||
|
DPMIFreeDOSMemoryBlock( selector );
|
||||||
|
}
|
||||||
|
|
||||||
|
return( codepage );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
#endif
|
@ -24,11 +24,14 @@
|
|||||||
*
|
*
|
||||||
* ========================================================================
|
* ========================================================================
|
||||||
*
|
*
|
||||||
* Description: declaration for set commit mode function
|
* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE
|
||||||
|
* DESCRIBE IT HERE!
|
||||||
*
|
*
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
/* see note in commode.c */
|
#include "variety.h"
|
||||||
_WCRTLINK extern void _WCI86FAR __set_commode( void );
|
#include <mbstring.h>
|
||||||
#pragma aux __set_commode "*_";
|
#include "rtinit.h"
|
||||||
|
|
||||||
|
_WCRTLINKD int __IsDBCS;
|
@ -30,31 +30,30 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
#if defined(__OS2__) || defined(__NT__)
|
#include "variety.h"
|
||||||
#if defined(__SW_BM)
|
#include <mbstring.h>
|
||||||
|
#include "mbchar.h"
|
||||||
|
#include "rtinit.h"
|
||||||
|
|
||||||
#include "thread.h"
|
_WCRTLINKD unsigned char __MBCSIsTable[257];
|
||||||
|
|
||||||
#define _ERRNO (__THREADDATAPTR->__errnoP)
|
/**
|
||||||
#define _DOSERRNO (__THREADDATAPTR->__doserrnoP)
|
* Determine whether or not the specified byte is a lead byte.
|
||||||
|
*/
|
||||||
|
|
||||||
#else
|
_WCRTLINK int (_ismbblead)( const unsigned int ch )
|
||||||
|
{
|
||||||
|
return( __MBCSIsTable[ch+1] & _MB_LEAD );
|
||||||
|
}
|
||||||
|
|
||||||
#define _ERRNO errno
|
/**
|
||||||
#define _DOSERRNO _doserrno
|
* If this module is linked in, the startup code will call this function,
|
||||||
|
* which will initialize the default multibyte code page.
|
||||||
|
*/
|
||||||
|
|
||||||
#endif
|
static void __mbInitOnStartup( void )
|
||||||
#else
|
{
|
||||||
// QNX errno is magically multithread aware
|
__mbinit( 0 );
|
||||||
// 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__
|
AXI( __mbInitOnStartup, INIT_PRIORITY_LIBRARY )
|
||||||
#define _DOSERRNO _doserrno
|
|
||||||
#endif
|
|
||||||
#endif
|
|
70
programs/develop/open watcom/trunk/clib/mbyte/mbtowc.c
Normal file
70
programs/develop/open watcom/trunk/clib/mbyte/mbtowc.c
Normal file
@ -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: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE
|
||||||
|
* DESCRIBE IT HERE!
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
#include "variety.h"
|
||||||
|
#include <mbstring.h>
|
||||||
|
#include "farfunc.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/****
|
||||||
|
***** Convert a multibyte character to a wide character.
|
||||||
|
****/
|
||||||
|
|
||||||
|
_WCRTLINK int _NEARFAR(mbtowc,_fmbtowc)( wchar_t _FFAR *pwc, const char _FFAR *ch, size_t n )
|
||||||
|
{
|
||||||
|
|
||||||
|
/*** Catch special cases ***/
|
||||||
|
if( ch == NULL ) return( 0 );
|
||||||
|
if( n == 0 ) return( -1 );
|
||||||
|
if( *ch == '\0' ) {
|
||||||
|
if( pwc != NULL ) *pwc = L'\0';
|
||||||
|
return( 0 );
|
||||||
|
}
|
||||||
|
if( _ismbblead( ch[0] ) && ch[1] == '\0' ) return( -1 ); /* invalid */
|
||||||
|
|
||||||
|
/*** Convert the character ***/
|
||||||
|
if( _ismbblead(*ch) && n>=2 ) { /* lead byte present? */
|
||||||
|
if( pwc != NULL ) {
|
||||||
|
*pwc = (((wchar_t)ch[0])<<8) | /* convert to lead:trail */
|
||||||
|
(wchar_t)ch[1];
|
||||||
|
}
|
||||||
|
return( 2 ); /* return char size */
|
||||||
|
} else if( !_ismbblead(*ch) ) {
|
||||||
|
if( pwc != NULL ) {
|
||||||
|
*pwc = (wchar_t)ch[0]; /* convert to 00:byte */
|
||||||
|
}
|
||||||
|
return( 1 ); /* return char size */
|
||||||
|
} else {
|
||||||
|
return( -1 ); /* n==1, but char 2 bytes */
|
||||||
|
}
|
||||||
|
}
|
@ -24,29 +24,38 @@
|
|||||||
*
|
*
|
||||||
* ========================================================================
|
* ========================================================================
|
||||||
*
|
*
|
||||||
* Description: errno related CLIB internal declarations.
|
* Description: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE
|
||||||
|
* DESCRIBE IT HERE!
|
||||||
*
|
*
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#ifndef _SETERNO_H_INCLUDED
|
|
||||||
#define _SETERNO_H_INCLUDED
|
|
||||||
|
|
||||||
#include "variety.h"
|
#include "variety.h"
|
||||||
|
#include <mbstring.h>
|
||||||
|
#include "farfunc.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
|
/****
|
||||||
|
***** Convert a wide character to a multibyte character.
|
||||||
|
****/
|
||||||
|
|
||||||
|
_WCRTLINK int _NEARFAR(wctomb,_fwctomb)( char _FFAR *ch, wchar_t wchar )
|
||||||
|
{
|
||||||
|
|
||||||
|
/*** Catch special cases ***/
|
||||||
|
if( ch == 0 ) return( 0 );
|
||||||
|
|
||||||
|
/*** Convert the character ***/
|
||||||
|
if( wchar & 0xFF00 )
|
||||||
|
{
|
||||||
|
ch[0] = (wchar&0xFF00) >> 8; /* store lead byte */
|
||||||
|
ch[1] = wchar & 0x00FF; /* store trail byte */
|
||||||
|
return( 2 ); /* return size in bytes */
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ch[0] = wchar & 0x00FF; /* store char byte */
|
||||||
|
return( 1 ); /* return size in bytes */
|
||||||
|
}
|
||||||
|
}
|
127
programs/develop/open watcom/trunk/clib/string/vsprintf.c
Normal file
127
programs/develop/open watcom/trunk/clib/string/vsprintf.c
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
/****************************************************************************
|
||||||
|
*
|
||||||
|
* 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 "widechar.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <limits.h>
|
||||||
|
#include "printf.h"
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* mem_putc -- append a character to a string in memory
|
||||||
|
*/
|
||||||
|
#ifdef __WIDECHAR__
|
||||||
|
|
||||||
|
struct vswprtf_buf {
|
||||||
|
CHAR_TYPE *bufptr;
|
||||||
|
int chars_output;
|
||||||
|
int max_chars;
|
||||||
|
};
|
||||||
|
|
||||||
|
static slib_callback_t mem_putc; // setup calling convention
|
||||||
|
static void __SLIB_CALLBACK mem_putc( SPECS __SLIB *specs, int op_char )
|
||||||
|
{
|
||||||
|
struct vswprtf_buf *info;
|
||||||
|
|
||||||
|
info = (struct vswprtf_buf*) specs->_dest;
|
||||||
|
if( info->chars_output + 1 <= info->max_chars ) {
|
||||||
|
*( info->bufptr++ ) = op_char;
|
||||||
|
specs->_output_count++;
|
||||||
|
info->chars_output++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
static slib_callback_t mem_putc; // setup calling convention
|
||||||
|
static void __SLIB_CALLBACK mem_putc( SPECS __SLIB *specs, int op_char )
|
||||||
|
{
|
||||||
|
*( specs->_dest++ ) = op_char;
|
||||||
|
specs->_output_count++;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __WIDECHAR__
|
||||||
|
_WCRTLINK int vswprintf( CHAR_TYPE *dest, size_t n, const CHAR_TYPE *format, va_list arg )
|
||||||
|
{
|
||||||
|
slib_callback_t *tmp;
|
||||||
|
auto struct vswprtf_buf info;
|
||||||
|
|
||||||
|
#if defined( __386__ ) && defined( __QNX__ )
|
||||||
|
/* avoid some segment relocations for 32-bit QNX */
|
||||||
|
tmp = (void (*)())mem_putc;
|
||||||
|
#else
|
||||||
|
tmp = mem_putc;
|
||||||
|
#endif
|
||||||
|
if( n != 0 ) {
|
||||||
|
info.bufptr = dest;
|
||||||
|
info.chars_output = 0;
|
||||||
|
info.max_chars = n - 1;
|
||||||
|
__wprtf( &info, format, arg, tmp );
|
||||||
|
dest[info.chars_output] = NULLCHAR;
|
||||||
|
}
|
||||||
|
return( info.chars_output );
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
_WCRTLINK int __F_NAME(vsprintf,_vswprintf) ( CHAR_TYPE *dest, const CHAR_TYPE *format, va_list arg )
|
||||||
|
{
|
||||||
|
slib_callback_t *tmp;
|
||||||
|
#ifndef __WIDECHAR__
|
||||||
|
register int len;
|
||||||
|
#else
|
||||||
|
auto struct vswprtf_buf info;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined( __386__ ) && defined( __QNX__ )
|
||||||
|
/* avoid some segment relocations for 32-bit QNX */
|
||||||
|
tmp = (void (*)())mem_putc;
|
||||||
|
#else
|
||||||
|
tmp = mem_putc;
|
||||||
|
#endif
|
||||||
|
#ifdef __WIDECHAR__
|
||||||
|
info.bufptr = dest;
|
||||||
|
info.chars_output = 0;
|
||||||
|
info.max_chars = INT_MAX;
|
||||||
|
__wprtf( &info, format, arg, tmp );
|
||||||
|
dest[info.chars_output] = NULLCHAR;
|
||||||
|
return( info.chars_output );
|
||||||
|
#else
|
||||||
|
len = __prtf( dest, format, arg, tmp );
|
||||||
|
dest[len] = NULLCHAR;
|
||||||
|
return( len );
|
||||||
|
#endif
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
860
programs/develop/open watcom/trunk/crt.tgt
Normal file
860
programs/develop/open watcom/trunk/crt.tgt
Normal file
@ -0,0 +1,860 @@
|
|||||||
|
40
|
||||||
|
targetIdent
|
||||||
|
0
|
||||||
|
MProject
|
||||||
|
1
|
||||||
|
MComponent
|
||||||
|
0
|
||||||
|
2
|
||||||
|
WString
|
||||||
|
3
|
||||||
|
LIB
|
||||||
|
3
|
||||||
|
WString
|
||||||
|
5
|
||||||
|
n_2sn
|
||||||
|
1
|
||||||
|
0
|
||||||
|
1
|
||||||
|
4
|
||||||
|
MCommand
|
||||||
|
0
|
||||||
|
5
|
||||||
|
MCommand
|
||||||
|
0
|
||||||
|
6
|
||||||
|
MItem
|
||||||
|
7
|
||||||
|
crt.lib
|
||||||
|
7
|
||||||
|
WString
|
||||||
|
3
|
||||||
|
LIB
|
||||||
|
8
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
9
|
||||||
|
WVList
|
||||||
|
1
|
||||||
|
10
|
||||||
|
ActionStates
|
||||||
|
11
|
||||||
|
WString
|
||||||
|
5
|
||||||
|
&Make
|
||||||
|
12
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
-1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
0
|
||||||
|
13
|
||||||
|
WPickList
|
||||||
|
35
|
||||||
|
14
|
||||||
|
MItem
|
||||||
|
5
|
||||||
|
*.asm
|
||||||
|
15
|
||||||
|
WString
|
||||||
|
6
|
||||||
|
ASMOBJ
|
||||||
|
16
|
||||||
|
WVList
|
||||||
|
5
|
||||||
|
17
|
||||||
|
MVState
|
||||||
|
18
|
||||||
|
WString
|
||||||
|
4
|
||||||
|
WASM
|
||||||
|
19
|
||||||
|
WString
|
||||||
|
25
|
||||||
|
n????Include directories:
|
||||||
|
1
|
||||||
|
20
|
||||||
|
WString
|
||||||
|
80
|
||||||
|
$(%watcom)\h;$(%watcom)\h\nt; "E:\Kos\programs\develop\open watcom\trunk\clib\h"
|
||||||
|
0
|
||||||
|
21
|
||||||
|
MRState
|
||||||
|
22
|
||||||
|
WString
|
||||||
|
4
|
||||||
|
WASM
|
||||||
|
23
|
||||||
|
WString
|
||||||
|
21
|
||||||
|
?????Compiler default
|
||||||
|
1
|
||||||
|
0
|
||||||
|
24
|
||||||
|
MRState
|
||||||
|
25
|
||||||
|
WString
|
||||||
|
4
|
||||||
|
WASM
|
||||||
|
26
|
||||||
|
WString
|
||||||
|
37
|
||||||
|
?????In-line Pentium Pro instructions
|
||||||
|
1
|
||||||
|
1
|
||||||
|
27
|
||||||
|
MRState
|
||||||
|
28
|
||||||
|
WString
|
||||||
|
4
|
||||||
|
WASM
|
||||||
|
29
|
||||||
|
WString
|
||||||
|
21
|
||||||
|
?????Compiler default
|
||||||
|
1
|
||||||
|
0
|
||||||
|
30
|
||||||
|
MRState
|
||||||
|
31
|
||||||
|
WString
|
||||||
|
4
|
||||||
|
WASM
|
||||||
|
32
|
||||||
|
WString
|
||||||
|
29
|
||||||
|
?????In-line with coprocessor
|
||||||
|
1
|
||||||
|
1
|
||||||
|
33
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
-1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
0
|
||||||
|
34
|
||||||
|
MItem
|
||||||
|
21
|
||||||
|
CLIB\CRT\_8087386.asm
|
||||||
|
35
|
||||||
|
WString
|
||||||
|
6
|
||||||
|
ASMOBJ
|
||||||
|
36
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
37
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
14
|
||||||
|
1
|
||||||
|
1
|
||||||
|
0
|
||||||
|
38
|
||||||
|
MItem
|
||||||
|
16
|
||||||
|
CLIB\CRT\chk.asm
|
||||||
|
39
|
||||||
|
WString
|
||||||
|
6
|
||||||
|
ASMOBJ
|
||||||
|
40
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
41
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
14
|
||||||
|
1
|
||||||
|
1
|
||||||
|
0
|
||||||
|
42
|
||||||
|
MItem
|
||||||
|
20
|
||||||
|
CLIB\CRT\crwd386.asm
|
||||||
|
43
|
||||||
|
WString
|
||||||
|
6
|
||||||
|
ASMOBJ
|
||||||
|
44
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
45
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
14
|
||||||
|
1
|
||||||
|
1
|
||||||
|
0
|
||||||
|
46
|
||||||
|
MItem
|
||||||
|
21
|
||||||
|
CLIB\CRT\cstrtwnt.asm
|
||||||
|
47
|
||||||
|
WString
|
||||||
|
6
|
||||||
|
ASMOBJ
|
||||||
|
48
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
49
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
14
|
||||||
|
1
|
||||||
|
1
|
||||||
|
0
|
||||||
|
50
|
||||||
|
MItem
|
||||||
|
21
|
||||||
|
CLIB\CRT\segdefns.asm
|
||||||
|
51
|
||||||
|
WString
|
||||||
|
6
|
||||||
|
ASMOBJ
|
||||||
|
52
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
53
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
14
|
||||||
|
1
|
||||||
|
1
|
||||||
|
0
|
||||||
|
54
|
||||||
|
MItem
|
||||||
|
21
|
||||||
|
CLIB\CRT\stjmp386.asm
|
||||||
|
55
|
||||||
|
WString
|
||||||
|
6
|
||||||
|
ASMOBJ
|
||||||
|
56
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
57
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
14
|
||||||
|
1
|
||||||
|
1
|
||||||
|
0
|
||||||
|
58
|
||||||
|
MItem
|
||||||
|
19
|
||||||
|
CLIB\CRT\stkwnt.asm
|
||||||
|
59
|
||||||
|
WString
|
||||||
|
6
|
||||||
|
ASMOBJ
|
||||||
|
60
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
61
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
14
|
||||||
|
1
|
||||||
|
1
|
||||||
|
0
|
||||||
|
62
|
||||||
|
MItem
|
||||||
|
3
|
||||||
|
*.c
|
||||||
|
63
|
||||||
|
WString
|
||||||
|
4
|
||||||
|
COBJ
|
||||||
|
64
|
||||||
|
WVList
|
||||||
|
9
|
||||||
|
65
|
||||||
|
MVState
|
||||||
|
66
|
||||||
|
WString
|
||||||
|
3
|
||||||
|
WCC
|
||||||
|
67
|
||||||
|
WString
|
||||||
|
25
|
||||||
|
n????Include directories:
|
||||||
|
1
|
||||||
|
68
|
||||||
|
WString
|
||||||
|
80
|
||||||
|
$(%watcom)\h;$(%watcom)\h\nt; "E:\Kos\programs\develop\open watcom\trunk\clib\h"
|
||||||
|
0
|
||||||
|
69
|
||||||
|
MRState
|
||||||
|
70
|
||||||
|
WString
|
||||||
|
3
|
||||||
|
WCC
|
||||||
|
71
|
||||||
|
WString
|
||||||
|
27
|
||||||
|
?????Default byte alignment
|
||||||
|
1
|
||||||
|
0
|
||||||
|
72
|
||||||
|
MRState
|
||||||
|
73
|
||||||
|
WString
|
||||||
|
3
|
||||||
|
WCC
|
||||||
|
74
|
||||||
|
WString
|
||||||
|
21
|
||||||
|
?????1 byte alignment
|
||||||
|
1
|
||||||
|
1
|
||||||
|
75
|
||||||
|
MRState
|
||||||
|
76
|
||||||
|
WString
|
||||||
|
3
|
||||||
|
WCC
|
||||||
|
77
|
||||||
|
WString
|
||||||
|
21
|
||||||
|
?????No optimizations
|
||||||
|
1
|
||||||
|
0
|
||||||
|
78
|
||||||
|
MRState
|
||||||
|
79
|
||||||
|
WString
|
||||||
|
3
|
||||||
|
WCC
|
||||||
|
80
|
||||||
|
WString
|
||||||
|
26
|
||||||
|
?????Fastest possible code
|
||||||
|
1
|
||||||
|
1
|
||||||
|
81
|
||||||
|
MCState
|
||||||
|
82
|
||||||
|
WString
|
||||||
|
3
|
||||||
|
WCC
|
||||||
|
83
|
||||||
|
WString
|
||||||
|
30
|
||||||
|
?????Call/return optimizations
|
||||||
|
1
|
||||||
|
1
|
||||||
|
84
|
||||||
|
MRState
|
||||||
|
85
|
||||||
|
WString
|
||||||
|
3
|
||||||
|
WCC
|
||||||
|
86
|
||||||
|
WString
|
||||||
|
21
|
||||||
|
?????Compiler default
|
||||||
|
1
|
||||||
|
0
|
||||||
|
87
|
||||||
|
MRState
|
||||||
|
88
|
||||||
|
WString
|
||||||
|
3
|
||||||
|
WCC
|
||||||
|
89
|
||||||
|
WString
|
||||||
|
21
|
||||||
|
?????Compiler default
|
||||||
|
1
|
||||||
|
0
|
||||||
|
90
|
||||||
|
MRState
|
||||||
|
91
|
||||||
|
WString
|
||||||
|
3
|
||||||
|
WCC
|
||||||
|
92
|
||||||
|
WString
|
||||||
|
37
|
||||||
|
?????In-line Pentium Pro instructions
|
||||||
|
1
|
||||||
|
1
|
||||||
|
93
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
-1
|
||||||
|
1
|
||||||
|
1
|
||||||
|
0
|
||||||
|
94
|
||||||
|
MItem
|
||||||
|
17
|
||||||
|
CLIB\CRT\8087cw.c
|
||||||
|
95
|
||||||
|
WString
|
||||||
|
4
|
||||||
|
COBJ
|
||||||
|
96
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
97
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
62
|
||||||
|
1
|
||||||
|
1
|
||||||
|
0
|
||||||
|
98
|
||||||
|
MItem
|
||||||
|
19
|
||||||
|
CLIB\CRT\_8087osi.c
|
||||||
|
99
|
||||||
|
WString
|
||||||
|
4
|
||||||
|
COBJ
|
||||||
|
100
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
101
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
62
|
||||||
|
1
|
||||||
|
1
|
||||||
|
0
|
||||||
|
102
|
||||||
|
MItem
|
||||||
|
18
|
||||||
|
CLIB\CRT\___argc.c
|
||||||
|
103
|
||||||
|
WString
|
||||||
|
4
|
||||||
|
COBJ
|
||||||
|
104
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
105
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
62
|
||||||
|
1
|
||||||
|
1
|
||||||
|
0
|
||||||
|
106
|
||||||
|
MItem
|
||||||
|
16
|
||||||
|
CLIB\CRT\_exit.c
|
||||||
|
107
|
||||||
|
WString
|
||||||
|
4
|
||||||
|
COBJ
|
||||||
|
108
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
109
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
62
|
||||||
|
1
|
||||||
|
1
|
||||||
|
0
|
||||||
|
110
|
||||||
|
MItem
|
||||||
|
16
|
||||||
|
CLIB\CRT\abort.c
|
||||||
|
111
|
||||||
|
WString
|
||||||
|
4
|
||||||
|
COBJ
|
||||||
|
112
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
113
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
62
|
||||||
|
1
|
||||||
|
1
|
||||||
|
0
|
||||||
|
114
|
||||||
|
MItem
|
||||||
|
16
|
||||||
|
CLIB\CRT\argcv.c
|
||||||
|
115
|
||||||
|
WString
|
||||||
|
4
|
||||||
|
COBJ
|
||||||
|
116
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
117
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
62
|
||||||
|
1
|
||||||
|
1
|
||||||
|
0
|
||||||
|
118
|
||||||
|
MItem
|
||||||
|
17
|
||||||
|
CLIB\CRT\atexit.c
|
||||||
|
119
|
||||||
|
WString
|
||||||
|
4
|
||||||
|
COBJ
|
||||||
|
120
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
121
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
62
|
||||||
|
1
|
||||||
|
1
|
||||||
|
0
|
||||||
|
122
|
||||||
|
MItem
|
||||||
|
18
|
||||||
|
CLIB\CRT\binmode.c
|
||||||
|
123
|
||||||
|
WString
|
||||||
|
4
|
||||||
|
COBJ
|
||||||
|
124
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
125
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
62
|
||||||
|
1
|
||||||
|
1
|
||||||
|
0
|
||||||
|
126
|
||||||
|
MItem
|
||||||
|
18
|
||||||
|
CLIB\CRT\chk8087.c
|
||||||
|
127
|
||||||
|
WString
|
||||||
|
4
|
||||||
|
COBJ
|
||||||
|
128
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
129
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
62
|
||||||
|
1
|
||||||
|
1
|
||||||
|
0
|
||||||
|
130
|
||||||
|
MItem
|
||||||
|
16
|
||||||
|
CLIB\CRT\cinit.c
|
||||||
|
131
|
||||||
|
WString
|
||||||
|
4
|
||||||
|
COBJ
|
||||||
|
132
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
133
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
62
|
||||||
|
1
|
||||||
|
1
|
||||||
|
0
|
||||||
|
134
|
||||||
|
MItem
|
||||||
|
18
|
||||||
|
CLIB\CRT\cmdname.c
|
||||||
|
135
|
||||||
|
WString
|
||||||
|
4
|
||||||
|
COBJ
|
||||||
|
136
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
137
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
62
|
||||||
|
1
|
||||||
|
1
|
||||||
|
0
|
||||||
|
138
|
||||||
|
MItem
|
||||||
|
18
|
||||||
|
CLIB\CRT\commode.c
|
||||||
|
139
|
||||||
|
WString
|
||||||
|
4
|
||||||
|
COBJ
|
||||||
|
140
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
141
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
62
|
||||||
|
1
|
||||||
|
1
|
||||||
|
0
|
||||||
|
142
|
||||||
|
MItem
|
||||||
|
17
|
||||||
|
CLIB\CRT\cvtbuf.c
|
||||||
|
143
|
||||||
|
WString
|
||||||
|
4
|
||||||
|
COBJ
|
||||||
|
144
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
145
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
62
|
||||||
|
1
|
||||||
|
1
|
||||||
|
0
|
||||||
|
146
|
||||||
|
MItem
|
||||||
|
16
|
||||||
|
CLIB\CRT\errno.c
|
||||||
|
147
|
||||||
|
WString
|
||||||
|
4
|
||||||
|
COBJ
|
||||||
|
148
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
149
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
62
|
||||||
|
1
|
||||||
|
1
|
||||||
|
0
|
||||||
|
150
|
||||||
|
MItem
|
||||||
|
19
|
||||||
|
CLIB\CRT\errnovar.c
|
||||||
|
151
|
||||||
|
WString
|
||||||
|
4
|
||||||
|
COBJ
|
||||||
|
152
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
153
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
62
|
||||||
|
1
|
||||||
|
1
|
||||||
|
0
|
||||||
|
154
|
||||||
|
MItem
|
||||||
|
15
|
||||||
|
CLIB\CRT\exit.c
|
||||||
|
155
|
||||||
|
WString
|
||||||
|
4
|
||||||
|
COBJ
|
||||||
|
156
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
157
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
62
|
||||||
|
1
|
||||||
|
1
|
||||||
|
0
|
||||||
|
158
|
||||||
|
MItem
|
||||||
|
18
|
||||||
|
CLIB\CRT\fltused.c
|
||||||
|
159
|
||||||
|
WString
|
||||||
|
4
|
||||||
|
COBJ
|
||||||
|
160
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
161
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
62
|
||||||
|
1
|
||||||
|
1
|
||||||
|
0
|
||||||
|
162
|
||||||
|
MItem
|
||||||
|
19
|
||||||
|
CLIB\CRT\fpexcept.c
|
||||||
|
163
|
||||||
|
WString
|
||||||
|
4
|
||||||
|
COBJ
|
||||||
|
164
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
165
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
62
|
||||||
|
1
|
||||||
|
1
|
||||||
|
0
|
||||||
|
166
|
||||||
|
MItem
|
||||||
|
19
|
||||||
|
CLIB\CRT\initargv.c
|
||||||
|
167
|
||||||
|
WString
|
||||||
|
4
|
||||||
|
COBJ
|
||||||
|
168
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
169
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
62
|
||||||
|
1
|
||||||
|
1
|
||||||
|
0
|
||||||
|
170
|
||||||
|
MItem
|
||||||
|
19
|
||||||
|
CLIB\CRT\initrtns.c
|
||||||
|
171
|
||||||
|
WString
|
||||||
|
4
|
||||||
|
COBJ
|
||||||
|
172
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
173
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
62
|
||||||
|
1
|
||||||
|
1
|
||||||
|
0
|
||||||
|
174
|
||||||
|
MItem
|
||||||
|
17
|
||||||
|
CLIB\CRT\ioexit.c
|
||||||
|
175
|
||||||
|
WString
|
||||||
|
4
|
||||||
|
COBJ
|
||||||
|
176
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
177
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
62
|
||||||
|
1
|
||||||
|
1
|
||||||
|
0
|
||||||
|
178
|
||||||
|
MItem
|
||||||
|
18
|
||||||
|
CLIB\CRT\ljmphdl.c
|
||||||
|
179
|
||||||
|
WString
|
||||||
|
4
|
||||||
|
COBJ
|
||||||
|
180
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
181
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
62
|
||||||
|
1
|
||||||
|
1
|
||||||
|
0
|
||||||
|
182
|
||||||
|
MItem
|
||||||
|
19
|
||||||
|
CLIB\CRT\main2wnt.c
|
||||||
|
183
|
||||||
|
WString
|
||||||
|
4
|
||||||
|
COBJ
|
||||||
|
184
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
185
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
62
|
||||||
|
1
|
||||||
|
1
|
||||||
|
0
|
||||||
|
186
|
||||||
|
MItem
|
||||||
|
19
|
||||||
|
CLIB\CRT\seterrno.c
|
||||||
|
187
|
||||||
|
WString
|
||||||
|
4
|
||||||
|
COBJ
|
||||||
|
188
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
189
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
62
|
||||||
|
1
|
||||||
|
1
|
||||||
|
0
|
||||||
|
190
|
||||||
|
MItem
|
||||||
|
19
|
||||||
|
CLIB\CRT\stackwnt.c
|
||||||
|
191
|
||||||
|
WString
|
||||||
|
4
|
||||||
|
COBJ
|
||||||
|
192
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
193
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
62
|
||||||
|
1
|
||||||
|
1
|
||||||
|
0
|
||||||
|
194
|
||||||
|
MItem
|
||||||
|
18
|
||||||
|
CLIB\CRT\xmsgwnt.c
|
||||||
|
195
|
||||||
|
WString
|
||||||
|
4
|
||||||
|
COBJ
|
||||||
|
196
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
197
|
||||||
|
WVList
|
||||||
|
0
|
||||||
|
62
|
||||||
|
1
|
||||||
|
1
|
||||||
|
0
|
@ -14,7 +14,7 @@
|
|||||||
</Platforms>
|
</Platforms>
|
||||||
<ToolFiles>
|
<ToolFiles>
|
||||||
<ToolFile
|
<ToolFile
|
||||||
RelativePath="..\..\..\VStudio 8\Common7\IDE\fasm.rules"
|
RelativePath="..\fasm.rules"
|
||||||
/>
|
/>
|
||||||
</ToolFiles>
|
</ToolFiles>
|
||||||
<Configurations>
|
<Configurations>
|
||||||
|
@ -2,25 +2,38 @@ format MS COFF
|
|||||||
|
|
||||||
include "proc32.inc"
|
include "proc32.inc"
|
||||||
|
|
||||||
section '.text' code readable executable
|
section '.text' align 16 code readable executable
|
||||||
|
|
||||||
public _InitHeap@4
|
public _InitHeap@4
|
||||||
public _UserAlloc@4
|
public _UserAlloc@4
|
||||||
|
public _UserFree@4
|
||||||
|
|
||||||
|
public _GetNotify@4
|
||||||
public _CreateThread@8
|
public _CreateThread@8
|
||||||
public _GetMousePos@4
|
public _GetMousePos@4
|
||||||
|
|
||||||
public _get_fileinfo@8
|
public _get_fileinfo@8
|
||||||
|
public _create_file@4
|
||||||
public _read_file@20
|
public _read_file@20
|
||||||
|
public _write_file@20
|
||||||
|
|
||||||
public _get_key@4
|
public _get_key@4
|
||||||
|
public _remap_key@4
|
||||||
public _get_button_id
|
public _get_button_id
|
||||||
|
|
||||||
|
public _GetScreenSize@8
|
||||||
|
|
||||||
public _DrawWindow@36
|
public _DrawWindow@36
|
||||||
public _make_button@24
|
public _make_button@24
|
||||||
public _draw_bar@20
|
public _draw_bar@20
|
||||||
|
|
||||||
public _write_text@20
|
public _write_text@20
|
||||||
public _debug_out@4
|
public _debug_out@4
|
||||||
public _debug_out_hex@4
|
public _debug_out_hex@4
|
||||||
public _create_thread@12
|
public _create_thread@12
|
||||||
|
|
||||||
public _memset
|
|
||||||
|
;public _memset
|
||||||
|
|
||||||
struc FILEIO
|
struc FILEIO
|
||||||
{ .cmd dd ?
|
{ .cmd dd ?
|
||||||
@ -32,6 +45,40 @@ struc FILEIO
|
|||||||
.name dd ?
|
.name dd ?
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struc CTRL_INFO
|
||||||
|
{ .pci_cmd dd ?
|
||||||
|
.irq dd ?
|
||||||
|
.glob_cntrl dd ?
|
||||||
|
.glob_sta dd ?
|
||||||
|
.codec_io_base dd ?
|
||||||
|
.ctrl_io_base dd ?
|
||||||
|
.codec_mem_base dd ?
|
||||||
|
.ctrl_mem_base dd ?
|
||||||
|
.codec_id dd ?
|
||||||
|
}
|
||||||
|
CTRL_INFO_SIZE equ 9*4
|
||||||
|
|
||||||
|
align 4
|
||||||
|
_GetScreenSize@8:
|
||||||
|
.x equ esp+12
|
||||||
|
.y equ esp+16
|
||||||
|
|
||||||
|
push ebx
|
||||||
|
push ecx
|
||||||
|
mov eax, 14
|
||||||
|
int 0x40
|
||||||
|
mov ebx, [.y]
|
||||||
|
movzx ecx, ax
|
||||||
|
inc ecx
|
||||||
|
mov [ebx], ecx
|
||||||
|
mov ebx, [.x]
|
||||||
|
shr eax, 16
|
||||||
|
inc eax
|
||||||
|
mov [ebx], eax
|
||||||
|
pop ecx
|
||||||
|
pop ebx
|
||||||
|
ret 8
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
_create_thread@12:
|
_create_thread@12:
|
||||||
.thr_proc equ esp+4
|
.thr_proc equ esp+4
|
||||||
@ -74,7 +121,6 @@ restore .thr_proc
|
|||||||
restore .param
|
restore .param
|
||||||
restore .stack_size
|
restore .stack_size
|
||||||
|
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
proc _get_button_id
|
proc _get_button_id
|
||||||
mov eax,17
|
mov eax,17
|
||||||
@ -92,6 +138,7 @@ endp
|
|||||||
align 4
|
align 4
|
||||||
proc _get_fileinfo@8 stdcall, name:dword, info:dword
|
proc _get_fileinfo@8 stdcall, name:dword, info:dword
|
||||||
push ebx
|
push ebx
|
||||||
|
push ecx
|
||||||
push esi
|
push esi
|
||||||
push edi
|
push edi
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
@ -111,6 +158,28 @@ proc _get_fileinfo@8 stdcall, name:dword, info:dword
|
|||||||
int 0x40
|
int 0x40
|
||||||
pop edi
|
pop edi
|
||||||
pop esi
|
pop esi
|
||||||
|
pop ecx
|
||||||
|
pop ebx
|
||||||
|
ret
|
||||||
|
endp
|
||||||
|
|
||||||
|
align 4
|
||||||
|
proc _create_file@4 stdcall, name:dword
|
||||||
|
push ebx
|
||||||
|
xor eax, eax
|
||||||
|
mov ebx, [name]
|
||||||
|
|
||||||
|
mov [fileio.cmd], 2
|
||||||
|
mov [fileio.offset], eax
|
||||||
|
mov [fileio.offset+4], eax
|
||||||
|
mov [fileio.count], eax
|
||||||
|
mov [fileio.buff], eax
|
||||||
|
mov byte [fileio.buff+4], al
|
||||||
|
mov [fileio.name], ebx
|
||||||
|
|
||||||
|
mov eax, 70
|
||||||
|
lea ebx, [fileio]
|
||||||
|
int 0x40
|
||||||
pop ebx
|
pop ebx
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
@ -121,6 +190,7 @@ proc _read_file@20 stdcall,name:dword, buff:dword, offset:dword,\
|
|||||||
push ebx
|
push ebx
|
||||||
push esi
|
push esi
|
||||||
push edi
|
push edi
|
||||||
|
push edx
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
mov ebx, [name]
|
mov ebx, [name]
|
||||||
mov edx, [offset]
|
mov edx, [offset]
|
||||||
@ -143,6 +213,44 @@ proc _read_file@20 stdcall,name:dword, buff:dword, offset:dword,\
|
|||||||
jz @f
|
jz @f
|
||||||
mov [esi], ebx
|
mov [esi], ebx
|
||||||
@@:
|
@@:
|
||||||
|
pop edx
|
||||||
|
pop edi
|
||||||
|
pop esi
|
||||||
|
pop ebx
|
||||||
|
ret
|
||||||
|
endp
|
||||||
|
|
||||||
|
|
||||||
|
align 4
|
||||||
|
proc _write_file@20 stdcall,name:dword, buff:dword, offset:dword,\
|
||||||
|
count:dword,writes:dword
|
||||||
|
push ebx
|
||||||
|
push esi
|
||||||
|
push edi
|
||||||
|
push edx
|
||||||
|
xor eax, eax
|
||||||
|
mov ebx, [name]
|
||||||
|
mov edx, [offset]
|
||||||
|
mov esi, [buff]
|
||||||
|
mov edi, [count]
|
||||||
|
|
||||||
|
mov [fileio.cmd], 3
|
||||||
|
mov [fileio.offset], edx
|
||||||
|
mov [fileio.offset+4], eax
|
||||||
|
mov [fileio.count], edi
|
||||||
|
mov [fileio.buff], esi
|
||||||
|
mov byte [fileio.buff+4], al
|
||||||
|
mov [fileio.name], ebx
|
||||||
|
|
||||||
|
mov eax, 70
|
||||||
|
lea ebx, [fileio]
|
||||||
|
int 0x40
|
||||||
|
mov esi, [writes]
|
||||||
|
test esi, esi
|
||||||
|
jz @f
|
||||||
|
mov [esi], ebx
|
||||||
|
@@:
|
||||||
|
pop edx
|
||||||
pop edi
|
pop edi
|
||||||
pop esi
|
pop esi
|
||||||
pop ebx
|
pop ebx
|
||||||
@ -165,39 +273,72 @@ proc _get_key@4 stdcall, key:dword
|
|||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
proc _InitHeap@4 stdcall, heap_size:dword
|
proc _InitHeap@4 stdcall, heap_size:dword
|
||||||
push ebx
|
push ebx
|
||||||
mov eax, 68
|
push ecx
|
||||||
mov ebx, 11
|
mov eax, 68
|
||||||
mov ecx, [heap_size]
|
mov ebx, 11
|
||||||
int 0x40
|
mov ecx, [heap_size]
|
||||||
pop ebx
|
int 0x40
|
||||||
ret
|
pop ecx
|
||||||
|
pop ebx
|
||||||
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
proc _UserAlloc@4 stdcall, alloc_size:dword
|
proc _UserAlloc@4 stdcall, alloc_size:dword
|
||||||
push ebx
|
push ebx
|
||||||
mov eax, 68
|
push ecx
|
||||||
mov ebx, 12
|
mov eax, 68
|
||||||
mov ecx, [alloc_size]
|
mov ebx, 12
|
||||||
int 0x40
|
mov ecx, [alloc_size]
|
||||||
pop ebx
|
int 0x40
|
||||||
ret
|
pop ecx
|
||||||
|
pop ebx
|
||||||
|
ret
|
||||||
|
endp
|
||||||
|
|
||||||
|
align 4
|
||||||
|
proc _UserFree@4 stdcall, pmem:dword
|
||||||
|
push ebx
|
||||||
|
push ecx
|
||||||
|
mov eax, 68
|
||||||
|
mov ebx, 13
|
||||||
|
mov ecx, [pmem]
|
||||||
|
int 0x40
|
||||||
|
pop ecx
|
||||||
|
pop ebx
|
||||||
|
ret
|
||||||
|
endp
|
||||||
|
|
||||||
|
align 4
|
||||||
|
proc _GetNotify@4 stdcall, p_ev:dword
|
||||||
|
push ebx
|
||||||
|
push ecx
|
||||||
|
mov eax, 68
|
||||||
|
mov ebx, 14
|
||||||
|
mov ecx, [p_ev]
|
||||||
|
int 0x40
|
||||||
|
pop ecx
|
||||||
|
pop ebx
|
||||||
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
proc _CreateThread@8 stdcall, fn:dword, p_stack:dword
|
proc _CreateThread@8 stdcall, fn:dword, p_stack:dword
|
||||||
push ebx
|
push ebx
|
||||||
|
push ecx
|
||||||
|
push edx
|
||||||
mov eax, 51
|
mov eax, 51
|
||||||
mov ebx, 1
|
mov ebx, 1
|
||||||
mov ecx, [fn]
|
mov ecx, [fn]
|
||||||
mov edx,[p_stack]
|
mov edx,[p_stack]
|
||||||
int 0x40
|
int 0x40
|
||||||
pop ebx
|
pop edx
|
||||||
ret
|
pop ecx
|
||||||
|
pop ebx
|
||||||
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
@ -210,12 +351,16 @@ proc _GetMousePos@4 stdcall,rel_type:dword
|
|||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
proc _DrawWindow@36 stdcall, x:dword, y:dword, sx:dword, sy:dword,\
|
proc _DrawWindow@36 stdcall, x:dword, y:dword, sx:dword, sy:dword,\
|
||||||
workcolor:dword, style:dword, captioncolor:dword,\
|
workcolor:dword, style:dword, captioncolor:dword,\
|
||||||
windowtype:dword, bordercolor:dword
|
windowtype:dword, bordercolor:dword
|
||||||
push ebx edi esi
|
push ebx
|
||||||
|
push ecx
|
||||||
|
push edx
|
||||||
|
push edi
|
||||||
|
push esi
|
||||||
|
|
||||||
mov ebx, [x]
|
mov ebx, [x]
|
||||||
mov ecx, [y]
|
mov ecx, [y]
|
||||||
shl ebx, 16
|
shl ebx, 16
|
||||||
@ -231,7 +376,11 @@ proc _DrawWindow@36 stdcall, x:dword, y:dword, sx:dword, sy:dword,\
|
|||||||
mov edi,[bordercolor]
|
mov edi,[bordercolor]
|
||||||
xor eax,eax
|
xor eax,eax
|
||||||
int 0x40
|
int 0x40
|
||||||
pop esi edi ebx
|
pop esi
|
||||||
|
pop edi
|
||||||
|
pop edx
|
||||||
|
pop ecx
|
||||||
|
pop ebx
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
@ -244,7 +393,9 @@ _make_button@24:
|
|||||||
;arg5 - id
|
;arg5 - id
|
||||||
;arg6 - color
|
;arg6 - color
|
||||||
|
|
||||||
push ebx esi
|
push ebx
|
||||||
|
push ecx
|
||||||
|
push esi
|
||||||
mov ebx,[esp+12]
|
mov ebx,[esp+12]
|
||||||
shl ebx,16
|
shl ebx,16
|
||||||
mov bx,[esp+20]
|
mov bx,[esp+20]
|
||||||
@ -255,7 +406,7 @@ _make_button@24:
|
|||||||
mov esi,[esp+32]
|
mov esi,[esp+32]
|
||||||
mov eax,8
|
mov eax,8
|
||||||
int 0x40
|
int 0x40
|
||||||
pop esi ebx
|
pop esi ecx ebx
|
||||||
ret 24
|
ret 24
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
@ -265,7 +416,7 @@ _draw_bar@20:
|
|||||||
;arg3 - xsize
|
;arg3 - xsize
|
||||||
;arg4 - ysize
|
;arg4 - ysize
|
||||||
;arg5 - color
|
;arg5 - color
|
||||||
push ebx
|
push ebx ecx
|
||||||
mov eax,13
|
mov eax,13
|
||||||
mov ebx,[esp+8]
|
mov ebx,[esp+8]
|
||||||
shl ebx,16
|
shl ebx,16
|
||||||
@ -275,7 +426,7 @@ _draw_bar@20:
|
|||||||
mov cx,[esp+20]
|
mov cx,[esp+20]
|
||||||
mov edx,[esp+24]
|
mov edx,[esp+24]
|
||||||
int 0x40
|
int 0x40
|
||||||
pop ebx
|
pop ecx ebx
|
||||||
ret 20
|
ret 20
|
||||||
|
|
||||||
_write_text@20:
|
_write_text@20:
|
||||||
@ -284,7 +435,7 @@ _write_text@20:
|
|||||||
;arg3 - color
|
;arg3 - color
|
||||||
;arg4 - text
|
;arg4 - text
|
||||||
;arg5 - len
|
;arg5 - len
|
||||||
push ebx esi
|
push ebx ecx esi
|
||||||
mov eax,4
|
mov eax,4
|
||||||
mov ebx,[esp+12]
|
mov ebx,[esp+12]
|
||||||
shl ebx,16
|
shl ebx,16
|
||||||
@ -293,16 +444,18 @@ _write_text@20:
|
|||||||
mov edx,[esp+24]
|
mov edx,[esp+24]
|
||||||
mov esi,[esp+28]
|
mov esi,[esp+28]
|
||||||
int 0x40
|
int 0x40
|
||||||
pop esi ebx
|
pop esi ecx ebx
|
||||||
ret 20
|
ret 20
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
proc _debug_out@4 stdcall, val:dword
|
proc _debug_out@4 stdcall, val:dword
|
||||||
push ebx
|
push ebx
|
||||||
|
push ecx
|
||||||
mov ecx,[val]
|
mov ecx,[val]
|
||||||
mov ebx,1
|
mov ebx,1
|
||||||
mov eax,63
|
mov eax,63
|
||||||
int 0x40
|
int 0x40
|
||||||
|
pop ecx
|
||||||
pop ebx
|
pop ebx
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
@ -327,6 +480,15 @@ proc _debug_out_hex@4 stdcall val:dword
|
|||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
|
align 4
|
||||||
|
proc _remap_key@4 stdcall, key:dword
|
||||||
|
|
||||||
|
mov eax, [key]
|
||||||
|
and eax, 0x7F
|
||||||
|
movzx eax, byte [keymap+eax]
|
||||||
|
ret
|
||||||
|
endp
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
_memset:
|
_memset:
|
||||||
mov edx,[esp + 0ch]
|
mov edx,[esp + 0ch]
|
||||||
@ -393,16 +555,206 @@ toend:
|
|||||||
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
;public __allmul
|
||||||
|
|
||||||
|
__allmul:
|
||||||
|
mov eax, [esp+8]
|
||||||
|
mov ecx, [esp+16]
|
||||||
|
or ecx,eax
|
||||||
|
mov ecx, [esp+12]
|
||||||
|
jnz .hard
|
||||||
|
mov eax, [esp+4]
|
||||||
|
mul ecx
|
||||||
|
ret 16
|
||||||
|
.hard:
|
||||||
|
push ebx
|
||||||
|
mul ecx
|
||||||
|
mov ebx,eax
|
||||||
|
mov eax, [esp+8]
|
||||||
|
mul dword [esp+20]
|
||||||
|
add ebx,eax
|
||||||
|
mov eax,[esp+8]
|
||||||
|
mul ecx
|
||||||
|
add edx,ebx
|
||||||
|
pop ebx
|
||||||
|
ret 16
|
||||||
|
|
||||||
|
;public __allshr
|
||||||
|
|
||||||
|
align 4
|
||||||
|
__allshr:
|
||||||
|
cmp cl,64
|
||||||
|
jae .sign
|
||||||
|
|
||||||
|
cmp cl, 32
|
||||||
|
jae .MORE32
|
||||||
|
shrd eax,edx,cl
|
||||||
|
sar edx,cl
|
||||||
|
ret
|
||||||
|
.MORE32:
|
||||||
|
mov eax,edx
|
||||||
|
sar edx,31
|
||||||
|
and cl,31
|
||||||
|
sar eax,cl
|
||||||
|
ret
|
||||||
|
.sign:
|
||||||
|
sar edx,31
|
||||||
|
mov eax,edx
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
;public _scalbn
|
||||||
|
|
||||||
|
align 4
|
||||||
|
proc _scalbn
|
||||||
|
fild dword [esp+12]
|
||||||
|
fld qword [esp+4]
|
||||||
|
fscale
|
||||||
|
fstp st1
|
||||||
|
ret
|
||||||
|
endp
|
||||||
|
|
||||||
|
|
||||||
|
;public __alloca_probe_8
|
||||||
|
;public __alloca_probe_16
|
||||||
|
|
||||||
|
__alloca_probe_16: ; 16 byte aligned alloca
|
||||||
|
|
||||||
|
push ecx
|
||||||
|
lea ecx, [esp + 8] ; TOS before entering this function
|
||||||
|
sub ecx, eax ; New TOS
|
||||||
|
and ecx, (16 - 1) ; Distance from 16 bit align (align down)
|
||||||
|
add eax, ecx ; Increase allocation size
|
||||||
|
sbb ecx, ecx ; ecx = 0xFFFFFFFF if size wrapped around
|
||||||
|
or eax, ecx ; cap allocation size on wraparound
|
||||||
|
pop ecx ; Restore ecx
|
||||||
|
jmp __chkstk
|
||||||
|
|
||||||
|
alloca_8: ; 8 byte aligned alloca
|
||||||
|
__alloca_probe_8:
|
||||||
|
|
||||||
|
push ecx
|
||||||
|
lea ecx, [esp+8] ; TOS before entering this function
|
||||||
|
sub ecx, eax ; New TOS
|
||||||
|
and ecx, (8 - 1) ; Distance from 8 bit align (align down)
|
||||||
|
add eax, ecx ; Increase allocation Size
|
||||||
|
sbb ecx, ecx ; ecx = 0xFFFFFFFF if size wrapped around
|
||||||
|
or eax, ecx ; cap allocation size on wraparound
|
||||||
|
pop ecx ; Restore ecx
|
||||||
|
jmp __chkstk
|
||||||
|
|
||||||
|
;public __chkstk
|
||||||
|
;public _alloca_probe
|
||||||
|
|
||||||
|
align 4
|
||||||
|
;_alloca_probe:
|
||||||
|
__chkstk:
|
||||||
|
push ecx
|
||||||
|
lea ecx, [esp+8-4] ; TOS before entering function + size for ret value
|
||||||
|
sub ecx, eax ; new TOS
|
||||||
|
|
||||||
|
; Handle allocation size that results in wraparound.
|
||||||
|
; Wraparound will result in StackOverflow exception.
|
||||||
|
|
||||||
|
sbb eax, eax ; 0 if CF==0, ~0 if CF==1
|
||||||
|
not eax ; ~0 if TOS did not wrapped around, 0 otherwise
|
||||||
|
and ecx, eax ; set to 0 if wraparound
|
||||||
|
|
||||||
|
mov eax, esp ; current TOS
|
||||||
|
and eax, -4096 ; Round down to current page boundary
|
||||||
|
|
||||||
|
cs10:
|
||||||
|
cmp ecx, eax ; Is new TOS
|
||||||
|
jb short cs20 ; in probed page?
|
||||||
|
mov eax, ecx ; yes.
|
||||||
|
pop ecx
|
||||||
|
xchg esp, eax ; update esp
|
||||||
|
mov eax, [eax] ; get return address
|
||||||
|
mov [esp], eax ; and put it at new TOS
|
||||||
|
ret
|
||||||
|
|
||||||
|
; Find next lower page and probe
|
||||||
|
cs20:
|
||||||
|
sub eax, 4096 ; decrease by PAGESIZE
|
||||||
|
test [eax],eax ; probe page.
|
||||||
|
jmp short cs10
|
||||||
|
|
||||||
|
public __ftol2_sse
|
||||||
|
|
||||||
|
align 4
|
||||||
|
__ftol2_sse:
|
||||||
|
push ebp
|
||||||
|
mov ebp, esp
|
||||||
|
sub esp, 20
|
||||||
|
and esp, 0xFFFFFFF0
|
||||||
|
fld st0
|
||||||
|
fst dword [esp+18]
|
||||||
|
fistp qword [esp+10]
|
||||||
|
fild qword [esp+10]
|
||||||
|
mov edx, [esp+18]
|
||||||
|
mov eax, [esp+10]
|
||||||
|
test eax, eax
|
||||||
|
jz .QnaNZ
|
||||||
|
|
||||||
|
.not_QnaNZ:
|
||||||
|
fsubp st1, st0
|
||||||
|
test edx, edx
|
||||||
|
jns .pos
|
||||||
|
fstp dword [esp]
|
||||||
|
mov ecx, [esp]
|
||||||
|
xor ecx, 0x80000000
|
||||||
|
add ecx, 0x7FFFFFFF
|
||||||
|
adc eax, 0
|
||||||
|
mov edx, [esp+14]
|
||||||
|
adc edx, 0
|
||||||
|
jmp .exit
|
||||||
|
.pos:
|
||||||
|
fstp dword [esp]
|
||||||
|
mov ecx, [esp]
|
||||||
|
add ecx, 0x7FFFFFFF
|
||||||
|
sbb eax, 0
|
||||||
|
jmp .exit
|
||||||
|
.QnaNZ:
|
||||||
|
mov edx, [esp+14]
|
||||||
|
test edx, 0x7FFFFFFF
|
||||||
|
jne .not_QnaNZ
|
||||||
|
fstp dword [esp+18]
|
||||||
|
fstp dword [esp+18]
|
||||||
|
.exit:
|
||||||
|
leave
|
||||||
|
ret
|
||||||
|
|
||||||
|
section '.data' align 16 data readable writable
|
||||||
|
|
||||||
|
align 16
|
||||||
|
__hexdigits db '0123456789ABCDEF'
|
||||||
|
|
||||||
|
; 0 1 2 3 4 5 6 7
|
||||||
|
; 8 9 a b c d e f
|
||||||
|
|
||||||
|
keymap:
|
||||||
|
db 0, 27, '1', '2', '3', '4', '5', '6' ;00
|
||||||
|
db '7', '8', '9', '0', '-', '=',0x7F, 0x9 ;08
|
||||||
|
db 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i' ;10
|
||||||
|
db 'o', 'p', '[', ']', 13,0x9D, 'a', 's' ;18
|
||||||
|
db 'd', 'f', 'g', 'h', 'j', 'k', 'l', ';' ;20
|
||||||
|
db 0, '~',0xB6, '|',0x7A,0x87, 'c', 'v' ;28
|
||||||
|
db 'b', 'n', 'm', ',', '.', '/',0xB6, '*' ;30
|
||||||
|
db 0xB8, ' ', 0,0xBB,0xBC,0xBD,0xBE,0xBF ;38
|
||||||
|
db 0xC0,0xC1,0xC2,0xC3,0xC4, 0, 0, 0 ;40
|
||||||
|
db 0xAD, 0, 0,0xAC, 0,0xAE, 0, 0 ;48
|
||||||
|
db 0xAF, 0, 0, 0, 0, 0, 0, 0 ;50
|
||||||
|
db 0, 0, 0, 0, 0, 0, 0, 0 ;58
|
||||||
|
db 0, 0, 0, 0, 0, 0, 0, 0 ;60
|
||||||
|
db 0, 0, 0, 0, 0, 0, 0, 0 ;68
|
||||||
|
db 0, 0, 0, 0, 0, 0, 0, 0 ;70
|
||||||
|
db 0, 0, 0, 0, 0, 0, 0, 0 ;78
|
||||||
|
|
||||||
|
public ___sse2_available
|
||||||
|
___sse2_available dd 0
|
||||||
|
|
||||||
public __fltused
|
public __fltused
|
||||||
__fltused dd 0
|
__fltused dd 0
|
||||||
|
|
||||||
align 4
|
|
||||||
__hexdigits db '0123456789ABCDEF'
|
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
fileio FILEIO
|
fileio FILEIO
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
</Platforms>
|
</Platforms>
|
||||||
<ToolFiles>
|
<ToolFiles>
|
||||||
<ToolFile
|
<ToolFile
|
||||||
RelativePath="..\..\..\VStudio 8\Common7\IDE\fasm.rules"
|
RelativePath="..\fasm.rules"
|
||||||
/>
|
/>
|
||||||
</ToolFiles>
|
</ToolFiles>
|
||||||
<Configurations>
|
<Configurations>
|
||||||
|
Loading…
Reference in New Issue
Block a user