I'm not convinced that the first attempt to resend this patch made it to the list - please ignore the first resend if it does as it still has a couple of missing tabs. so - attached is a hopefully working patch for the architecture changes needed to WINE to allow valgrind to check it. this time with all the tabs in the right places ;-) sorry for the multiple (large) patches - hopefully they are worth it!
Index: Makefile.in =================================================================== RCS file: /home/wine/wine/Makefile.in,v retrieving revision 1.143 diff -u -r1.143 Makefile.in --- Makefile.in 23 Mar 2003 20:00:04 -0000 1.143 +++ Makefile.in 28 Mar 2003 21:41:49 -0000 @@ -57,7 +57,7 @@ dlls \ programs -all: Make.rules wine +all: Make.rules wine wine.vg @echo "Wine build complete." WINAPI_CHECK_EXTRA_FLAGS = --global @@ -69,6 +69,9 @@ @exit 1 wine: $(WINEWRAPPER) + $(RM) $@ && $(LN_S) $(WINEWRAPPER) $@ + +wine.vg: $(WINEWRAPPER) $(RM) $@ && $(LN_S) $(WINEWRAPPER) $@ # Installation rules Index: configure =================================================================== RCS file: /home/wine/wine/configure,v retrieving revision 1.410 diff -u -r1.410 configure --- configure 28 Mar 2003 00:36:13 -0000 1.410 +++ configure 28 Mar 2003 21:42:23 -0000 @@ -13457,6 +13457,8 @@ + + for ac_header in \ arpa/inet.h \ arpa/nameser.h \ @@ -13528,6 +13530,7 @@ termios.h \ unistd.h \ utime.h \ + valgrind/memcheck.h \ do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` Index: configure.ac =================================================================== RCS file: /home/wine/wine/configure.ac,v retrieving revision 1.139 diff -u -r1.139 configure.ac --- configure.ac 28 Mar 2003 00:36:13 -0000 1.139 +++ configure.ac 28 Mar 2003 21:42:26 -0000 @@ -1070,6 +1070,7 @@ termios.h \ unistd.h \ utime.h \ + valgrind/memcheck.h ) AC_HEADER_STAT() Index: dlls/Makefile.in =================================================================== RCS file: /home/wine/wine/dlls/Makefile.in,v retrieving revision 1.170 diff -u -r1.170 Makefile.in --- dlls/Makefile.in 21 Mar 2003 00:42:39 -0000 1.170 +++ dlls/Makefile.in 28 Mar 2003 22:14:11 -0000 @@ -130,6 +130,18 @@ @MAKE_RULES@ +msvcrtd/__install__: dummy + cd msvcrt && $(MAKE) install MODULE=msvcrtd.dll + +msvcrtd: dummy + @cd msvcrt && $(MAKE) MODULE=msvcrtd.dll + +msvcrtd/__install__: dummy + cd msvcrt && $(MAKE) install MODULE=msvcrtd.dll + +msvcrtd: dummy + @cd msvcrt && $(MAKE) MODULE=msvcrtd.dll + WIN16_FILES = \ avifile.dll$(DLLEXT) \ comm.dll$(DLLEXT) \ @@ -228,6 +240,7 @@ msnet32.dll$(DLLEXT) \ msrle32.dll$(DLLEXT) \ msvcrt.dll$(DLLEXT) \ + msvcrtd.dll$(DLLEXT) \ msvcrt20.dll$(DLLEXT) \ msvfw32.dll$(DLLEXT) \ netapi32.dll$(DLLEXT) \ @@ -433,6 +446,9 @@ msvcrt.dll$(DLLEXT): msvcrt/msvcrt.dll$(DLLEXT) $(RM) $@ && $(LN_S) msvcrt/msvcrt.dll$(DLLEXT) $@ +msvcrtd.dll$(DLLEXT): msvcrt/msvcrtd.dll$(DLLEXT) + $(RM) $@ && $(LN_S) msvcrt/msvcrtd.dll$(DLLEXT) $@ + msvcrt20.dll$(DLLEXT): msvcrt20/msvcrt20.dll$(DLLEXT) $(RM) $@ && $(LN_S) msvcrt20/msvcrt20.dll$(DLLEXT) $@ @@ -872,6 +888,11 @@ libmsvcrt.a: msvcrt/msvcrt.spec.def $(DLLTOOL) -k -l $@ -d msvcrt/msvcrt.spec.def +libmsvcrtd.def: msvcrt/msvcrtd.spec.def + $(RM) $@ && $(LN_S) msvcrt/msvcrtd.spec.def $@ +libmsvcrtd.a: msvcrt/msvcrtd.spec.def + $(DLLTOOL) -k -l $@ -d msvcrt/msvcrtd.spec.def + libmsvcrt20.def: msvcrt20/msvcrt20.spec.def $(RM) $@ && $(LN_S) msvcrt20/msvcrt20.spec.def $@ libmsvcrt20.a: msvcrt20/msvcrt20.spec.def @@ -1144,6 +1165,7 @@ msnet32/msnet32.spec.def: $(WINEBUILD) msvideo/msrle32/msrle32.spec.def: $(WINEBUILD) msvcrt/msvcrt.spec.def: $(WINEBUILD) +msvcrt/msvcrtd.spec.def: $(WINEBUILD) msvcrt20/msvcrt20.spec.def: $(WINEBUILD) msvideo/msvfw32.spec.def: $(WINEBUILD) netapi32/netapi32.spec.def: $(WINEBUILD) @@ -1246,6 +1268,7 @@ msnet32/msnet32.dll$(DLLEXT): msnet32 msvideo/msrle32/msrle32.dll$(DLLEXT): msvideo/msrle32 msvcrt/msvcrt.dll$(DLLEXT): msvcrt +msvcrt/msvcrtd.dll$(DLLEXT): msvcrtd msvcrt20/msvcrt20.dll$(DLLEXT): msvcrt20 msvideo/msvfw32.dll$(DLLEXT): msvideo netapi32/netapi32.dll$(DLLEXT): netapi32 @@ -1352,6 +1375,7 @@ msnet32/__install__: msnet32.dll$(DLLEXT) msvideo/msrle32/__install__: msrle32.dll$(DLLEXT) msvcrt/__install__: msvcrt.dll$(DLLEXT) +msvcrtd/__install__: msvcrtd.dll$(DLLEXT) msvcrt20/__install__: msvcrt20.dll$(DLLEXT) msvideo/__install__: msvfw32.dll$(DLLEXT) netapi32/__install__: netapi32.dll$(DLLEXT) @@ -1419,7 +1443,7 @@ uninstall:: $(RM) $(LINKABLE_DLLS:%=$(libdir)/lib%.$(LIBEXT)) -install install-lib:: $(INSTALLSUBDIRS:%=%/__install__) +install install-lib:: $(INSTALLSUBDIRS:%=%/__install__) msvcrtd/__install__ $(RM) $(LINKABLE_DLLS:%=$(libdir)/lib%.$(LIBEXT)) cd $(libdir) && if [ "$(dlldir)" = "$(libdir)/wine" ]; \ then \ Index: dlls/msvcrt/Makefile.in =================================================================== RCS file: /home/wine/wine/dlls/msvcrt/Makefile.in,v retrieving revision 1.13 diff -u -r1.13 Makefile.in --- dlls/msvcrt/Makefile.in 15 Mar 2003 22:25:01 -0000 1.13 +++ dlls/msvcrt/Makefile.in 28 Mar 2003 21:42:32 -0000 @@ -17,6 +17,7 @@ cppexcept.c \ ctype.c \ data.c \ + debug.c \ dir.c \ environ.c \ errno.c \ Index: dlls/ntdll/heap.c =================================================================== RCS file: /home/wine/wine/dlls/ntdll/heap.c,v retrieving revision 1.16 diff -u -r1.16 heap.c --- dlls/ntdll/heap.c 18 Mar 2003 18:35:49 -0000 1.16 +++ dlls/ntdll/heap.c 28 Mar 2003 21:42:36 -0000 @@ -36,6 +36,22 @@ #include "thread.h" #include "wine/debug.h" +#ifdef HAVE_VALGRIND_MEMCHECK_H + +#include <valgrind/memcheck.h> + +#define MARK_INACCESSIBLE(p,l) VALGRIND_DISCARD( VALGRIND_MAKE_NOACCESS( (p), (l) ) ) +#define MARK_UNINITIALIZED(p,l) VALGRIND_DISCARD( VALGRIND_MAKE_WRITABLE( (p), (l) ) ) +#define MARKING_HEAP 1 + +#else /* VALGRIND */ + +#define MARK_INACCESSIBLE(p,l) +#define MARK_UNINITIALIZED(p,l) +#define MARKING_HEAP 0 + +#endif /* VALGRIND */ + WINE_DEFAULT_DEBUG_CHANNEL(heap); /* Note: the heap data structures are based on what Pietrek describes in his @@ -347,19 +363,28 @@ ARENA_FREE *pFree; /* Create a free arena */ - + MARK_UNINITIALIZED( ptr, sizeof( ARENA_FREE ) ); pFree = (ARENA_FREE *)ptr; pFree->magic = ARENA_FREE_MAGIC; /* If debugging, erase the freed block content */ - if (TRACE_ON(heap)) + if (MARKING_HEAP || TRACE_ON(heap)) { char *pEnd = (char *)ptr + size; if (pEnd > (char *)subheap + subheap->commitSize) pEnd = (char *)subheap + subheap->commitSize; if (pEnd > (char *)(pFree + 1)) - memset( pFree + 1, ARENA_FREE_FILLER, pEnd - (char *)(pFree + 1) ); + { + if ( MARKING_HEAP ) + { + MARK_INACCESSIBLE( pFree + 1, pEnd - (char *)(pFree + 1) ); + } + else + { + memset( pFree + 1, ARENA_FREE_FILLER, pEnd - (char *)(pFree + 1) ); + } + } } /* Check if next block is free also */ @@ -372,8 +397,14 @@ pNext->next->prev = pNext->prev; pNext->prev->next = pNext->next; size += (pNext->size & ARENA_SIZE_MASK) + sizeof(*pNext); - if (TRACE_ON(heap)) + if ( MARKING_HEAP ) + { + MARK_INACCESSIBLE( pNext, sizeof(ARENA_FREE) ); + } + else if (TRACE_ON(heap)) + { memset( pNext, ARENA_FREE_FILLER, sizeof(ARENA_FREE) ); + } } /* Set the next block PREV_FREE flag and pointer */ @@ -382,6 +413,7 @@ { DWORD *pNext = (DWORD *)((char *)ptr + size); *pNext |= ARENA_FLAG_PREV_FREE; + MARK_UNINITIALIZED( pNext - 1, sizeof( ARENA_FREE * ) ); *(ARENA_FREE **)(pNext - 1) = pFree; } @@ -1088,10 +1120,13 @@ HEAP_ShrinkBlock( subheap, pInUse, size ); + MARK_UNINITIALIZED( pInUse + 1, pInUse->size & ARENA_SIZE_MASK ); if (flags & HEAP_ZERO_MEMORY) memset( pInUse + 1, 0, pInUse->size & ARENA_SIZE_MASK ); else if (TRACE_ON(heap)) + { memset( pInUse + 1, ARENA_INUSE_FILLER, pInUse->size & ARENA_SIZE_MASK ); + } if (!(flags & HEAP_NO_SERIALIZE)) RtlLeaveCriticalSection( &heapPtr->critSection ); @@ -1254,6 +1289,7 @@ + sizeof(ARENA_FREE) - sizeof(ARENA_INUSE); pInUse->magic = ARENA_INUSE_MAGIC; HEAP_ShrinkBlock( newsubheap, pInUse, size ); + MARK_UNINITIALIZED( pInUse + 1, oldSize ); memcpy( pInUse + 1, pArena + 1, oldSize ); /* Free the previous block */ @@ -1269,12 +1305,15 @@ if (size > oldSize) { + MARK_UNINITIALIZED( (char *)(pArena + 1) + oldSize, (pArena->size & ARENA_SIZE_MASK) - oldSize ); if (flags & HEAP_ZERO_MEMORY) memset( (char *)(pArena + 1) + oldSize, 0, (pArena->size & ARENA_SIZE_MASK) - oldSize ); else if (TRACE_ON(heap)) + { memset( (char *)(pArena + 1) + oldSize, ARENA_INUSE_FILLER, (pArena->size & ARENA_SIZE_MASK) - oldSize ); + } } /* Return the new arena */ Index: include/config.h.in =================================================================== RCS file: /home/wine/wine/include/config.h.in,v retrieving revision 1.146 diff -u -r1.146 config.h.in --- include/config.h.in 28 Mar 2003 00:36:13 -0000 1.146 +++ include/config.h.in 28 Mar 2003 21:42:40 -0000 @@ -626,6 +626,9 @@ /* Define to 1 if you have the <utime.h> header file. */ #undef HAVE_UTIME_H +/* Define to 1 if you have the <valgrind/memcheck.h> header file. */ +#undef HAVE_VALGRIND_MEMCHECK_H + /* Define if we have va_copy */ #undef HAVE_VA_COPY Index: include/wine/server_protocol.h =================================================================== RCS file: /home/wine/wine/include/wine/server_protocol.h,v retrieving revision 1.63 diff -u -r1.63 server_protocol.h --- include/wine/server_protocol.h 26 Mar 2003 23:41:43 -0000 1.63 +++ include/wine/server_protocol.h 28 Mar 2003 21:42:46 -0000 @@ -12,6 +12,8 @@ #include <time.h> #include "winbase.h" +#include "pshpack1.h" + struct request_header { int req; @@ -314,6 +316,7 @@ thread_id_t tid; int boot; int version; + int suspend; }; @@ -443,6 +446,7 @@ { struct reply_header __header; int count; + int local_pid; }; @@ -3030,6 +3034,8 @@ /* VARARG(module,unicode_str); */ }; +#include "poppack.h" + enum request { @@ -3572,6 +3578,6 @@ struct get_next_hook_reply get_next_hook_reply; }; -#define SERVER_PROTOCOL_VERSION 103 +#define SERVER_PROTOCOL_VERSION 104 #endif /* __WINE_WINE_SERVER_PROTOCOL_H */ Index: scheduler/client.c =================================================================== RCS file: /home/wine/wine/scheduler/client.c,v retrieving revision 1.95 diff -u -r1.95 client.c --- scheduler/client.c 28 Mar 2003 00:36:12 -0000 1.95 +++ scheduler/client.c 28 Mar 2003 21:42:50 -0000 @@ -673,6 +673,7 @@ TEB *teb = NtCurrentTeb(); int version, ret; int reply_pipe[2]; + int stop_myself = 0; /* ignore SIGPIPE so that we get a EPIPE error instead */ signal( SIGPIPE, SIG_IGN ); @@ -701,9 +702,10 @@ req->reply_fd = reply_pipe[1]; req->wait_fd = teb->wait_fd[1]; ret = wine_server_call( req ); - teb->pid = reply->pid; - teb->tid = reply->tid; - version = reply->version; + teb->pid = reply->pid; + teb->tid = reply->tid; + version = reply->version; + stop_myself = reply->suspend; if (reply->boot) boot_thread_id = teb->tid; else if (boot_thread_id == teb->tid) boot_thread_id = 0; } @@ -717,6 +719,12 @@ "Or maybe the wrong wineserver is still running?\n", version, SERVER_PROTOCOL_VERSION, (version > SERVER_PROTOCOL_VERSION) ? "wine" : "wineserver" ); + + if (stop_myself) + { + /* this thread was created 'suspended' */ + kill( getpid(), SIGUSR1 ); + } } Index: scheduler/thread.c =================================================================== RCS file: /home/wine/wine/scheduler/thread.c,v retrieving revision 1.133 diff -u -r1.133 thread.c --- scheduler/thread.c 26 Mar 2003 01:33:48 -0000 1.133 +++ scheduler/thread.c 28 Mar 2003 21:42:51 -0000 @@ -33,6 +33,7 @@ #ifdef HAVE_UNISTD_H # include <unistd.h> #endif +#include <signal.h> #include "wine/winbase16.h" #include "thread.h" #include "task.h" @@ -447,6 +448,7 @@ req->handle = hthread; req->priority = priority; req->mask = SET_THREAD_INFO_PRIORITY; + req->affinity = 0; ret = !wine_server_call_err( req ); } SERVER_END_REQ; @@ -501,6 +503,7 @@ req->handle = hThread; req->affinity = dwThreadAffinityMask; req->mask = SET_THREAD_INFO_AFFINITY; + req->priority = 0; ret = !wine_server_call_err( req ); /* FIXME: should return previous value */ } @@ -602,12 +605,25 @@ HANDLE hthread) /* [in] Handle to the thread */ { DWORD ret = 0xffffffff; + int suspend_pid = 0; + SERVER_START_REQ( suspend_thread ) { req->handle = hthread; - if (!wine_server_call_err( req )) ret = reply->count; + if (!wine_server_call_err( req )) + { + ret = reply->count; + suspend_pid = reply->local_pid; + } } SERVER_END_REQ; + + if ( suspend_pid ) + { + /* we need to suspend the thread locally */ + kill( suspend_pid, SIGUSR1 ); + } + return ret; } Index: server/protocol.def =================================================================== RCS file: /home/wine/wine/server/protocol.def,v retrieving revision 1.63 diff -u -r1.63 protocol.def --- server/protocol.def 26 Mar 2003 23:41:43 -0000 1.63 +++ server/protocol.def 28 Mar 2003 21:42:56 -0000 @@ -28,6 +28,8 @@ #include <time.h> #include "winbase.h" +#include "pshpack1.h" + struct request_header { int req; /* request code */ @@ -289,6 +291,7 @@ thread_id_t tid; /* thread id of the new thread */ int boot; /* is this the boot thread? */ int version; /* protocol version */ + int suspend; /* suspend this new thread */ @END @@ -376,6 +379,7 @@ obj_handle_t handle; /* thread handle */ @REPLY int count; /* new suspend count */ + int local_pid; /* if greater than 0, then locally suspend this PID */ @END @@ -2110,3 +2114,5 @@ int next_unicode; /* is the next a unicode hook? */ VARARG(module,unicode_str); /* module name */ @END + +#include "poppack.h" Index: server/thread.c =================================================================== RCS file: /home/wine/wine/server/thread.c,v retrieving revision 1.95 diff -u -r1.95 thread.c --- server/thread.c 22 Mar 2003 21:00:09 -0000 1.95 +++ server/thread.c 28 Mar 2003 21:42:58 -0000 @@ -312,12 +312,21 @@ } /* suspend a thread */ -static int suspend_thread( struct thread *thread ) +static int suspend_thread( struct thread *thread, int *clientsuspend ) { int old_count = thread->suspend; if (thread->suspend < MAXIMUM_SUSPEND_COUNT) { - if (!(thread->process->suspend + thread->suspend++)) stop_thread( thread ); + if (*clientsuspend && (thread->process == current->process)) + { + /* thread from the same process, get the client itself to do the suspend */ + *clientsuspend = !(thread->process->suspend + thread->suspend++); + } + else + { + if (!(thread->process->suspend + thread->suspend++)) stop_thread( thread ); + *clientsuspend = 0; + } } else set_error( STATUS_SUSPEND_COUNT_EXCEEDED ); return old_count; @@ -851,7 +860,7 @@ current->unix_tid = req->unix_tid; current->teb = req->teb; - if (current->suspend + current->process->suspend > 0) stop_thread( current ); + reply->suspend = (current->suspend + current->process->suspend > 0); if (current->process->running_threads > 1) generate_debug_event( current, CREATE_THREAD_DEBUG_EVENT, req->entry ); @@ -940,8 +949,11 @@ if ((thread = get_thread_from_handle( req->handle, THREAD_SUSPEND_RESUME ))) { + int client_suspend = 1; + if (thread->state == TERMINATED) set_error( STATUS_ACCESS_DENIED ); - else reply->count = suspend_thread( thread ); + else reply->count = suspend_thread( thread, &client_suspend ); + reply->local_pid = ( client_suspend ) ? thread->unix_pid : 0; release_object( thread ); } } Index: server/trace.c =================================================================== RCS file: /home/wine/wine/server/trace.c,v retrieving revision 1.160 diff -u -r1.160 trace.c --- server/trace.c 26 Mar 2003 23:41:43 -0000 1.160 +++ server/trace.c 28 Mar 2003 21:43:05 -0000 @@ -471,7 +471,8 @@ fprintf( stderr, " pid=%04x,", req->pid ); fprintf( stderr, " tid=%04x,", req->tid ); fprintf( stderr, " boot=%d,", req->boot ); - fprintf( stderr, " version=%d", req->version ); + fprintf( stderr, " version=%d,", req->version ); + fprintf( stderr, " suspend=%d", req->suspend ); } static void dump_terminate_process_request( const struct terminate_process_request *req ) @@ -565,7 +566,8 @@ static void dump_suspend_thread_reply( const struct suspend_thread_reply *req ) { - fprintf( stderr, " count=%d", req->count ); + fprintf( stderr, " count=%d,", req->count ); + fprintf( stderr, " local_pid=%d", req->local_pid ); } static void dump_resume_thread_request( const struct resume_thread_request *req ) Index: tools/winewrapper =================================================================== RCS file: /home/wine/wine/tools/winewrapper,v retrieving revision 1.5 diff -u -r1.5 winewrapper --- tools/winewrapper 22 Mar 2003 20:40:48 -0000 1.5 +++ tools/winewrapper 28 Mar 2003 21:43:05 -0000 @@ -85,6 +85,9 @@ wine|*/wine) exec "$WINELOADER" "$@" ;; + wine.vg|*/wine.vg) + exec "valgrind" "--num-callers=30" "--gdb-attach=yes" "--workaround-gcc296-bugs=yes" "$WINELOADER" "$@" + ;; */*) [ -f "$0.exe.so" ] && exec "$WINELOADER" "$0.exe.so" "$@" echo "$0: cannot find corresponding application" diff -u debug.c debug.c --- dlls/msvcrt/debug.c 2003-03-24 15:56:22.000000000 +0000 +++ dlls/msvcrt/debug.c 2003-03-20 14:27:00.000000000 +0000 @@ -0,0 +1,77 @@ +/* + * msvcrt.dll debugging code + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "msvcrt.h" +#include "msvcrt/eh.h" +#include "msvcrt/stdlib.h" + +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(msvcrt); + +/********************************************************************* + * _CrtSetDumpClient (MSVCRTD.@) + */ +void *MSVCRT__CrtSetDumpClient() +{ + return NULL; +} + + +/********************************************************************* + * _CrtSetReportHook (MSVCRTD.@) + */ +void *MSVCRT__CrtSetReportHook() +{ + return NULL; +} + + +/********************************************************************* + * _CrtSetReportMode (MSVCRTD.@) + */ +int MSVCRT__CrtSetReportMode() +{ + return 0; +} + + +/********************************************************************* + * _CrtSetDbgFlag (MSVCRTD.@) + */ +int MSVCRT__CrtSetDbgFlag() +{ + return 0; +} + + +/********************************************************************* + * _CrtDbgReport (MSVCRTD.@) + */ +int MSVCRT__CrtDbgReport() +{ + return 0; +} + +/********************************************************************* + * _CrtDumpMemoryLeaks (MSVCRTD.@) + */ +int MSVCRT__CrtDumpMemoryLeaks() +{ + return 0; +} diff -u msvcrtd.spec msvcrtd.spec --- dlls/msvcrt/msvcrtd.spec 2003-03-24 15:56:22.000000000 +0000 +++ dlls/msvcrt/msvcrtd.spec 2003-03-20 14:43:10.000000000 +0000 @@ -0,0 +1,795 @@ +# msvcrtd.dll - MS VC++ Run Time Library + +@ cdecl $I10_OUTPUT() MSVCRT_I10_OUTPUT +@ cdecl ??0__non_rtti_object@@QAE@ABV0@@Z(ptr ptr) MSVCRT___non_rtti_object_copy_ctor +@ cdecl ??0__non_rtti_object@@QAE@PBD@Z(ptr ptr) MSVCRT___non_rtti_object_ctor +@ cdecl ??0bad_cast@@QAE@ABQBD@Z(ptr ptr) MSVCRT_bad_cast_ctor +@ cdecl ??0bad_cast@@QAE@ABV0@@Z(ptr ptr) MSVCRT_bad_cast_copy_ctor +@ cdecl ??0bad_typeid@@QAE@ABV0@@Z(ptr ptr) MSVCRT_bad_typeid_copy_ctor +@ cdecl ??0bad_typeid@@QAE@PBD@Z(ptr ptr) MSVCRT_bad_typeid_ctor +@ cdecl ??0exception@@QAE@ABQBD@Z(ptr ptr) MSVCRT_exception_ctor +@ cdecl ??0exception@@QAE@ABV0@@Z(ptr ptr) MSVCRT_exception_copy_ctor +@ cdecl ??0exception@@QAE@XZ(ptr) MSVCRT_exception_default_ctor +@ cdecl ??1__non_rtti_object@@UAE@XZ(ptr) MSVCRT___non_rtti_object_dtor +@ cdecl ??1bad_cast@@UAE@XZ(ptr) MSVCRT_bad_cast_dtor +@ cdecl ??1bad_typeid@@UAE@XZ(ptr) MSVCRT_bad_typeid_dtor +@ cdecl ??1exception@@UAE@XZ(ptr) MSVCRT_exception_dtor +@ cdecl ??1type_info@@UAE@XZ(ptr) MSVCRT_type_info_dtor +@ cdecl ??2@YAPAXI@Z(long) MSVCRT_operator_new +@ cdecl ??2@YAPAXIHPBDH@Z(long) MSVCRT_operator_new +@ cdecl ??3@YAXPAX@Z(ptr) MSVCRT_operator_delete +@ cdecl ??4__non_rtti_object@@QAEAAV0@ABV0@@Z(ptr ptr) MSVCRT___non_rtti_object_opequals +@ cdecl ??4bad_cast@@QAEAAV0@ABV0@@Z(ptr ptr) MSVCRT_bad_cast_opequals +@ cdecl ??4bad_typeid@@QAEAAV0@ABV0@@Z(ptr ptr)MSVCRT_bad_typeid_opequals +@ cdecl ??4exception@@QAEAAV0@ABV0@@Z(ptr ptr) MSVCRT_exception_opequals +@ stdcall ??8type_info@@QBEHABV0@@Z(ptr ptr) MSVCRT_type_info_opequals_equals +@ stdcall ??9type_info@@QBEHABV0@@Z(ptr ptr) MSVCRT_type_info_opnot_equals +@ stub ??_7__non_rtti_object@@6B@ +@ stub ??_7bad_cast@@6B@ +@ stub ??_7bad_typeid@@6B@ +@ stub ??_7exception@@6B@ +@ cdecl ??_E__non_rtti_object@@UAEPAXI@Z(ptr long) MSVCRT___non_rtti_object__unknown_E +@ stub ??_Ebad_cast@@UAEPAXI@Z #(ptr long) +@ stub ??_Ebad_typeid@@UAEPAXI@Z #(ptr long) +@ cdecl ??_Eexception@@UAEPAXI@Z(ptr long) MSVCRT_exception__unknown_E +@ cdecl ??_G__non_rtti_object@@UAEPAXI@Z(ptr long) MSVCRT___non_rtti_object__unknown_G +@ stub ??_Gbad_cast@@UAEPAXI@Z #(ptr long) +@ stub ??_Gbad_typeid@@UAEPAXI@Z #(ptr long) +@ cdecl ??_Gexception@@UAEPAXI@Z(ptr long) MSVCRT_exception__unknown_G +@ cdecl ?_query_new_handler@@YAP6AHI@ZXZ() MSVCRT__query_new_handler +@ cdecl ?_query_new_mode@@YAHXZ() MSVCRT__query_new_mode +@ cdecl ?_set_new_handler@@YAP6AHI@ZP6AHI@Z@Z(ptr) MSVCRT__set_new_handler +@ cdecl ?_set_new_mode@@YAHH@Z(long) MSVCRT__set_new_mode +@ cdecl ?_set_se_translator@@YAP6AXIPAU_EXCEPTION_POINTERS@@@ZP6AXI0@Z@Z(ptr) MSVCRT__set_se_translator +@ stub ?before@type_info@@QBEHABV1@@Z #(ptr ptr) stdcall +@ stdcall ?name@type_info@@QBEPBDXZ(ptr) MSVCRT_type_info_name +@ stdcall ?raw_name@type_info@@QBEPBDXZ(ptr) MSVCRT_type_info_raw_name +@ cdecl ?set_new_handler@@YAP6AXXZP6AXXZ@Z(ptr) MSVCRT__set_new_handler +@ cdecl ?set_terminate@@YAP6AXXZP6AXXZ@Z(ptr) MSVCRT_set_terminate +@ cdecl ?set_unexpected@@YAP6AXXZP6AXXZ@Z(ptr) MSVCRT_set_unexpected +@ cdecl ?terminate@@YAXXZ() MSVCRT_terminate +@ cdecl ?unexpected@@YAXXZ() MSVCRT_unexpected +@ cdecl ?what@exception@@UBEPBDXZ(ptr) MSVCRT_what_exception +@ cdecl _CIacos() +@ cdecl _CIasin() +@ cdecl _CIatan() +@ cdecl _CIatan2() +@ cdecl _CIcos() +@ cdecl _CIcosh() +@ cdecl _CIexp() +@ cdecl _CIfmod() +@ cdecl _CIlog() +@ cdecl _CIlog10() +@ cdecl _CIpow() +@ cdecl _CIsin() +@ cdecl _CIsinh() +@ cdecl _CIsqrt() +@ cdecl _CItan() +@ cdecl _CItanh() +@ stub _CrtCheckMemory +@ stub _CrtDbgBreak +@ cdecl _CrtDbgReport(long ptr long ptr ptr) MSVCRT__CrtDbgReport +@ stub _CrtDoForAllClientObjects +@ cdecl _CrtDumpMemoryLeaks() MSVCRT__CrtDumpMemoryLeaks +@ stub _CrtIsMemoryBlock +@ stub _CrtIsValidHeapPointer +@ stub _CrtIsValidPointer +@ stub _CrtMemCheckpoint +@ stub _CrtMemDifference +@ stub _CrtMemDumpAllObjectsSince +@ stub _CrtMemDumpStatistics +@ stub _CrtSetAllocHook +@ stub _CrtSetBreakAlloc +@ stub _CrtSetDbgBlockType +@ cdecl _CrtSetDbgFlag(long) MSVCRT__CrtSetDbgFlag +@ cdecl _CrtSetDumpClient(ptr) MSVCRT__CrtSetDumpClient +@ stub _CrtSetReportFile +@ cdecl _CrtSetReportHook(ptr) MSVCRT__CrtSetReportHook +@ cdecl _CrtSetReportMode(long) MSVCRT__CrtSetReportMode +@ cdecl _CxxThrowException(long long) +@ cdecl -i386 -norelay _EH_prolog() +@ cdecl _Getdays() +@ cdecl _Getmonths() +@ cdecl _Getnames() +@ extern _HUGE MSVCRT__HUGE +@ cdecl _Strftime(str long str ptr ptr) +@ cdecl _XcptFilter(long ptr) +@ cdecl -register -i386 __CxxFrameHandler(ptr ptr ptr ptr) +@ stub __CxxLongjmpUnwind #(ptr) stdcall +@ cdecl __RTCastToVoid(ptr) MSVCRT___RTCastToVoid +@ cdecl __RTDynamicCast(ptr long ptr ptr long) MSVCRT___RTDynamicCast +@ cdecl __RTtypeid(ptr) MSVCRT___RTtypeid +@ stub __STRINGTOLD #(ptr ptr str long) +@ extern __argc MSVCRT___argc +@ extern __argv MSVCRT___argv +@ stub __badioinfo +@ stub __crtCompareStringA +@ stub __crtGetLocaleInfoW +@ cdecl __crtLCMapStringA(long long str long ptr long long long) +@ cdecl __dllonexit(ptr ptr ptr) +@ cdecl __doserrno() +@ stub __fpecode #() +@ cdecl __getmainargs(ptr ptr ptr long ptr) +@ extern __initenv MSVCRT___initenv +@ cdecl __isascii(long) MSVCRT___isascii +@ cdecl __iscsym(long) MSVCRT___iscsym +@ cdecl __iscsymf(long) MSVCRT___iscsymf +@ stub __lc_codepage +@ stub __lc_collate_cp +@ stub __lc_handle +@ cdecl __lconv_init() +@ extern __mb_cur_max MSVCRT___mb_cur_max +@ cdecl __p___argc() +@ cdecl __p___argv() +@ cdecl __p___initenv() +@ cdecl __p___mb_cur_max() +@ cdecl __p___wargv() +@ cdecl __p___winitenv() +@ cdecl __p__acmdln() +@ stub __p__amblksiz #() +@ cdecl __p__commode() +@ stub __p__crtAssertBusy #() +@ stub __p__crtBreakAlloc #() +@ stub __p__crtDbgFlag #() +@ cdecl __p__daylight() MSVCRT___p__daylight +@ stub __p__dstbias #() +@ cdecl __p__environ() +@ stub __p__fileinfo #() +@ cdecl __p__fmode() +@ cdecl __p__iob() +@ stub __p__mbcasemap #() +@ cdecl __p__mbctype() +@ cdecl __p__osver() +@ cdecl __p__pctype() +@ cdecl __p__pgmptr() +@ stub __p__pwctype #() +@ cdecl __p__timezone() +@ stub __p__tzname #() +@ cdecl __p__wcmdln() +@ cdecl __p__wenviron() +@ cdecl __p__winmajor() +@ cdecl __p__winminor() +@ cdecl __p__winver() +@ stub __p__wpgmptr #() +@ stub __pioinfo #() +@ stub __pxcptinfoptrs #() +@ cdecl __set_app_type(long) MSVCRT___set_app_type +@ extern __setlc_active MSVCRT___setlc_active +@ cdecl __setusermatherr(ptr) MSVCRT___setusermatherr +@ cdecl __threadhandle() kernel32.GetCurrentThread +@ cdecl __threadid() kernel32.GetCurrentThreadId +@ cdecl __toascii(long) MSVCRT___toascii +@ cdecl __unDName(long str ptr ptr long) MSVCRT___unDName +@ cdecl __unDNameEx() MSVCRT___unDNameEx #FIXME +@ extern __unguarded_readlc_active MSVCRT___unguarded_readlc_active +@ extern __wargv MSVCRT___wargv +@ cdecl __wgetmainargs(ptr ptr ptr long ptr) +@ extern __winitenv MSVCRT___winitenv +@ cdecl _abnormal_termination() +@ cdecl _access(str long) +@ extern _acmdln MSVCRT__acmdln +@ cdecl _adj_fdiv_m16i() +@ cdecl _adj_fdiv_m32() +@ cdecl _adj_fdiv_m32i() +@ cdecl _adj_fdiv_m64() +@ cdecl _adj_fdiv_r() +@ cdecl _adj_fdivr_m16i() +@ cdecl _adj_fdivr_m32() +@ cdecl _adj_fdivr_m32i() +@ cdecl _adj_fdivr_m64() +@ cdecl _adj_fpatan() +@ cdecl _adj_fprem() +@ cdecl _adj_fprem1() +@ cdecl _adj_fptan() +@ cdecl _adjust_fdiv() +@ stub _aexit_rtn +@ cdecl _amsg_exit(long) MSVCRT__amsg_exit +@ cdecl _assert(str str long) MSVCRT__assert +@ stub _atodbl #(ptr str) +@ cdecl -ret64 _atoi64(str) ntdll._atoi64 +@ stub _atoldbl #(ptr str) +@ cdecl _beep(long long) +@ cdecl _beginthread (ptr long ptr) +@ cdecl _beginthreadex (ptr long ptr ptr long ptr) +@ cdecl _c_exit() MSVCRT__c_exit +@ cdecl _cabs(long) +@ cdecl _callnewh(long) +@ cdecl _calloc_dbg(long long) MSVCRT_calloc +@ cdecl _cexit() MSVCRT__cexit +@ cdecl _cgets(str) +@ cdecl _chdir(str) +@ cdecl _chdrive(long) +@ cdecl _chgsign( double ) +@ cdecl -i386 _chkesp() +@ cdecl _chmod(str long) +@ cdecl _chsize (long long) +@ cdecl _clearfp() +@ cdecl _close(long) +@ cdecl _commit(long) +@ extern _commode MSVCRT__commode +@ cdecl _control87(long long) +@ cdecl _controlfp(long long) +@ cdecl _copysign( double double ) +@ varargs _cprintf(str) +@ cdecl _cputs(str) +@ cdecl _creat(str long) +@ stub _crtAssertBusy #() +@ stub _crtBreakAlloc #() +@ stub _crtDbgFlag #() +@ varargs _cscanf(str) +@ extern _ctype MSVCRT__ctype +@ cdecl _cwait(ptr long long) +@ extern _daylight MSVCRT___daylight +@ stub _dstbias +@ cdecl _dup (long) +@ cdecl _dup2 (long long) +@ cdecl _ecvt( double long ptr ptr) ecvt +@ cdecl _endthread () +@ cdecl _endthreadex(long) +@ extern _environ MSVCRT__environ +@ cdecl _eof(long) +@ cdecl _errno() MSVCRT__errno +@ cdecl _except_handler2(ptr ptr ptr ptr) +@ cdecl _except_handler3(ptr ptr ptr ptr) +@ varargs _execl(str str) +@ stub _execle #(str str) varargs +@ varargs _execlp(str str) +@ stub _execlpe #(str str) varargs +@ cdecl _execv(str str) +@ cdecl _execve(str str str) +@ cdecl _execvp(str str) +@ cdecl _execvpe(str str str) +@ cdecl _exit(long) MSVCRT__exit +@ cdecl _expand(ptr long) +@ cdecl _expand_dbg(ptr long) _expand +@ cdecl _fcloseall() +@ cdecl _fcvt( double long ptr ptr) fcvt +@ cdecl _fdopen(long str) +@ cdecl _fgetchar() +@ cdecl _fgetwchar() +@ cdecl _filbuf(ptr) +@ stub _fileinfo +@ cdecl _filelength(long) +@ stub _filelengthi64 #(long) +@ cdecl _fileno(ptr) +@ cdecl _findclose(long) +@ cdecl _findfirst(str ptr) +@ stub _findfirsti64 #(str ptr) +@ cdecl _findnext(long ptr) +@ stub _findnexti64 #(long ptr) +@ cdecl _finite( double ) +@ cdecl _flsbuf(long ptr) +@ cdecl _flushall() +@ extern _fmode MSVCRT__fmode +@ cdecl _fpclass(double) +@ stub _fpieee_flt #(long ptr ptr) +@ cdecl _fpreset() +@ cdecl _fputchar(long) +@ cdecl _free_dbg(ptr) MSVCRT_free +@ cdecl _fputwchar(long) +@ cdecl _fsopen(str str long) +@ cdecl _fstat(long ptr) MSVCRT__fstat +@ cdecl _fstati64(long ptr) +@ cdecl _ftime(ptr) +@ cdecl _ftol() ntdll._ftol +@ cdecl _fullpath(ptr str long) +@ cdecl _futime(long ptr) +@ cdecl _gcvt( double long str) gcvt +@ cdecl _get_osfhandle(long) +@ stub _get_sbh_threshold #() +@ cdecl _getch() +@ cdecl _getche() +@ cdecl _getcwd(str long) +@ cdecl _getdcwd(long str long) +@ cdecl _getdiskfree(long ptr) +@ cdecl _getdllprocaddr(long str long) +@ cdecl _getdrive() +@ cdecl _getdrives() kernel32.GetLogicalDrives +@ stub _getmaxstdio #() +@ cdecl _getmbcp() +@ cdecl _getpid() kernel32.GetCurrentProcessId +@ stub _getsystime #(ptr) +@ cdecl _getw(ptr) +@ cdecl _getws(ptr) MSVCRT__getws +@ cdecl _global_unwind2(ptr) +@ cdecl _heapadd (ptr long) +@ cdecl _heapchk() +@ cdecl _heapmin() +@ cdecl _heapset(long) +@ stub _heapused #(ptr ptr) +@ cdecl _heapwalk(ptr) +@ cdecl _hypot(double double) hypot +@ cdecl _i64toa(long long ptr long) ntdll._i64toa +@ cdecl _i64tow(long long ptr long) ntdll._i64tow +@ cdecl _initterm(ptr ptr) +@ stub _inp #(long) -i386 +@ stub _inpd #(long) -i386 +@ stub _inpw #(long) -i386 +@ extern _iob MSVCRT__iob +@ cdecl _isatty(long) +@ cdecl _isctype(long long) +@ stub _ismbbalnum #(long) +@ stub _ismbbalpha #(long) +@ stub _ismbbgraph #(long) +@ stub _ismbbkalnum #(long) +@ cdecl _ismbbkana(long) +@ stub _ismbbkprint #(long) +@ stub _ismbbkpunct #(long) +@ cdecl _ismbblead(long) +@ stub _ismbbprint #(long) +@ stub _ismbbpunct #(long) +@ cdecl _ismbbtrail(long) +@ cdecl _ismbcalnum(long) +@ cdecl _ismbcalpha(long) +@ cdecl _ismbcdigit(long) +@ cdecl _ismbcgraph(long) +@ cdecl _ismbchira(long) +@ cdecl _ismbckata(long) +@ stub _ismbcl0 #(long) +@ stub _ismbcl1 #(long) +@ stub _ismbcl2 #(long) +@ stub _ismbclegal #(long) +@ cdecl _ismbclower(long) +@ cdecl _ismbcprint(long) +@ cdecl _ismbcpunct(long) +@ cdecl _ismbcspace(long) +@ cdecl _ismbcsymbol(long) +@ cdecl _ismbcupper(long) +@ cdecl _ismbslead(ptr ptr) +@ cdecl _ismbstrail(ptr ptr) +@ cdecl _isnan( double ) +@ cdecl _itoa(long ptr long) ntdll._itoa +@ cdecl _itow(long ptr long) ntdll._itow +@ cdecl _j0(double) j0 +@ cdecl _j1(double) j1 +@ cdecl _jn(long double) jn +@ cdecl _kbhit() +@ cdecl _lfind(ptr ptr ptr long ptr) +@ cdecl _loaddll(str) +@ cdecl _local_unwind2(ptr long) +@ cdecl _lock(long) +@ cdecl _locking(long long long) +@ cdecl _logb( double ) +@ stub _longjmpex +@ cdecl _lrotl(long long) +@ cdecl _lrotr(long long) +@ cdecl _lsearch(ptr ptr long long ptr) +@ cdecl _lseek(long long long) +@ cdecl -ret64 _lseeki64(long long long long) +@ cdecl _ltoa(long ptr long) ntdll._ltoa +@ cdecl _ltow(long ptr long) ntdll._ltow +@ cdecl _makepath(str str str str str) +@ cdecl _malloc_dbg(long) MSVCRT_malloc +@ cdecl _mbbtombc(long) +@ stub _mbbtype #(long long) +@ stub _mbcasemap +@ cdecl _mbccpy (str str) strcpy +@ stub _mbcjistojms #(long) +@ stub _mbcjmstojis #(long) +@ cdecl _mbclen(ptr) +@ stub _mbctohira #(long) +@ stub _mbctokata #(long) +@ cdecl _mbctolower(long) +@ stub _mbctombb #(long) +@ cdecl _mbctoupper(long) +@ stub _mbctype +@ stub _mbsbtype #(str long) +@ cdecl _mbscat(str str) strcat +@ cdecl _mbschr(str long) +@ cdecl _mbscmp(str str) +@ stub _mbscoll #(str str) +@ cdecl _mbscpy(ptr str) strcpy +@ cdecl _mbscspn (str str) +@ cdecl _mbsdec(ptr ptr) +@ cdecl _mbsdup(str) _strdup +@ cdecl _mbsicmp(str str) +@ cdecl _mbsicoll(str str) +@ cdecl _mbsinc(str) +@ cdecl _mbslen(str) +@ cdecl _mbslwr(str) +@ cdecl _mbsnbcat (str str long) +@ cdecl _mbsnbcmp(str str long) +@ cdecl _mbsnbcnt(ptr long) +@ stub _mbsnbcoll #(str str long) +@ cdecl _mbsnbcpy(ptr str long) +@ cdecl _mbsnbicmp(str str long) +@ stub _mbsnbicoll #(str str long) +@ cdecl _mbsnbset(str long long) +@ cdecl _mbsncat(str str long) +@ cdecl _mbsnccnt(str long) +@ cdecl _mbsncmp(str str long) +@ stub _mbsncoll #(str str long) +@ cdecl _mbsncpy(str str long) +@ cdecl _mbsnextc(str) +@ cdecl _mbsnicmp(str str long) +@ stub _mbsnicoll #(str str long) +@ cdecl _mbsninc(str long) +@ cdecl _mbsnset(str long long) +@ cdecl _mbspbrk(str str) +@ cdecl _mbsrchr(str long) +@ cdecl _mbsrev(str) +@ cdecl _mbsset(str long) +@ cdecl _mbsspn(str str) +@ stub _mbsspnp #(str str) +@ cdecl _mbsstr(str str) strstr +@ cdecl _mbstok(str str) +@ cdecl _mbstrlen(str) +@ cdecl _mbsupr(str) +@ cdecl _memccpy(ptr ptr long long) memccpy +@ cdecl _memicmp(str str long) ntdll._memicmp +@ cdecl _mkdir(str) +@ cdecl _mktemp(str) +@ cdecl _msize(ptr) +@ cdecl _msize_dbg(ptr) _msize +@ cdecl _nextafter(double double) +@ cdecl _onexit(ptr) +@ varargs _open(str long) +@ cdecl _open_osfhandle(long long) +@ stub _osver +@ stub _outp #(long long) +@ stub _outpd #(long long) +@ stub _outpw #(long long) +@ stub _pclose #(ptr) +@ extern _pctype MSVCRT__pctype +@ extern _pgmptr MSVCRT__pgmptr +@ stub _pipe #(ptr long long) +@ stub _popen #(str str) +@ cdecl _purecall() +@ cdecl _putch(long) +@ cdecl _putenv(str) +@ cdecl _putw(long ptr) +@ cdecl _putws(wstr) +@ stub _pwctype +@ cdecl _read(long ptr long) +@ cdecl _realloc_dbg(ptr long) MSVCRT_realloc +@ cdecl _rmdir(str) +@ cdecl _rmtmp() +@ cdecl _rotl(long long) +@ cdecl _rotr(long long) +@ cdecl _safe_fdiv() +@ cdecl _safe_fdivr() +@ cdecl _safe_fprem() +@ cdecl _safe_fprem1() +@ cdecl _scalb( double long) +@ cdecl _searchenv(str str ptr) +@ stdcall -i386 _seh_longjmp_unwind(ptr) +@ stub _set_error_mode #(long) +@ stub _set_sbh_threshold #(long) +@ stub _seterrormode #(long) +@ cdecl -register -i386 _setjmp(ptr) _MSVCRT__setjmp +@ cdecl -register -i386 _setjmp3(ptr long) _MSVCRT__setjmp3 +@ stub _setmaxstdio #(long) +@ cdecl _setmbcp(long) +@ cdecl _setmode(long long) +@ stub _setsystime #(ptr long) +@ cdecl _sleep(long) +@ varargs _snprintf(str long str) snprintf +@ varargs _snwprintf(wstr long wstr) ntdll._snwprintf +@ varargs _sopen(str long long) MSVCRT__sopen +@ varargs _spawnl(long str str) +@ stub _spawnle #(long str str) varargs +@ varargs _spawnlp(long str str) +@ stub _spawnlpe #(long str str) varargs +@ cdecl _spawnv(long str ptr) +@ cdecl _spawnve(long str ptr ptr) +@ cdecl _spawnvp(long str ptr) +@ cdecl _spawnvpe(long str ptr ptr) +@ cdecl _splitpath(str ptr ptr ptr ptr) ntdll._splitpath +@ cdecl _stat(str ptr) MSVCRT__stat +@ cdecl _stati64(str ptr) +@ cdecl _statusfp() +@ cdecl _strcmpi(str str) strcasecmp +@ cdecl _strdate(ptr) +@ cdecl _strdup(str) +@ cdecl _strerror(long) +@ cdecl _stricmp(str str) strcasecmp +@ stub _stricoll #(str str) +@ cdecl _strlwr(str) ntdll._strlwr +@ stub _strncoll #(str str long) +@ cdecl _strnicmp(str str long) strncasecmp +@ stub _strnicoll #(str str long) +@ cdecl _strnset(str long long) +@ cdecl _strrev(str) +@ cdecl _strset(str long) +@ cdecl _strtime(ptr) +@ cdecl _strupr(str) ntdll._strupr +@ cdecl _swab(str str long) +@ extern _sys_errlist MSVCRT__sys_errlist +@ extern _sys_nerr MSVCRT__sys_nerr +@ cdecl _tell(long) +@ stub _telli64 #(long) +@ cdecl _tempnam(str str) +@ stub _timezone # extern +@ cdecl _tolower(long) MSVCRT__tolower +@ cdecl _toupper(long) MSVCRT__toupper +@ stub _tzname # extern +@ cdecl _tzset() tzset +@ cdecl _ui64toa(long long ptr long) ntdll._ui64toa +@ cdecl _ui64tow(long long ptr long) ntdll._ui64tow +@ cdecl _ultoa(long ptr long) ntdll._ultoa +@ cdecl _ultow(long ptr long) ntdll._ultow +@ cdecl _umask(long) +@ cdecl _ungetch(long) +@ cdecl _unlink(str) +@ cdecl _unloaddll(long) +@ cdecl _unlock(long) +@ cdecl _utime(str ptr) +@ cdecl _vsnprintf(ptr long ptr ptr) vsnprintf +@ cdecl _vsnwprintf(ptr long wstr long) +@ cdecl _waccess(wstr long) +@ stub _wasctime #(ptr) +@ cdecl _wchdir(wstr) +@ cdecl _wchmod(wstr long) +@ extern _wcmdln MSVCRT__wcmdln +@ cdecl _wcreat(wstr long) +@ cdecl _wcsdup(wstr) +@ cdecl _wcsicmp(wstr wstr) ntdll._wcsicmp +@ cdecl _wcsicoll(wstr wstr) +@ cdecl _wcslwr(wstr) ntdll._wcslwr +@ stub _wcsncoll #(wstr wstr long) +@ cdecl _wcsnicmp(wstr wstr long) ntdll._wcsnicmp +@ stub _wcsnicoll #(wstr wstr long) +@ cdecl _wcsnset(wstr long long) +@ cdecl _wcsrev(wstr) +@ cdecl _wcsset(wstr long) +@ cdecl _wcsupr(wstr) ntdll._wcsupr +@ stub _wctime #(ptr) +@ extern _wenviron MSVCRT__wenviron +@ stub _wexecl #(wstr wstr) varargs +@ stub _wexecle #(wstr wstr) varargs +@ stub _wexeclp #(wstr wstr) varargs +@ stub _wexeclpe #(wstr wstr) varargs +@ stub _wexecv #(wstr ptr) +@ stub _wexecve #(wstr ptr ptr) +@ stub _wexecvp #(wstr ptr) +@ stub _wexecvpe #(wstr ptr ptr) +@ cdecl _wfdopen(long wstr) +@ cdecl _wfindfirst(wstr ptr) +@ stub _wfindfirsti64 #(wstr ptr) +@ cdecl _wfindnext(long ptr) +@ stub _wfindnexti64 #(long ptr) +@ cdecl _wfopen(wstr wstr) +@ stub _wfreopen #(wstr wstr ptr) +@ cdecl _wfsopen(wstr wstr long) +@ stub _wfullpath #(ptr wstr long) +@ cdecl _wgetcwd(wstr long) +@ cdecl _wgetdcwd(long wstr long) +@ cdecl _wgetenv(wstr) +@ extern _winmajor MSVCRT__winmajor +@ extern _winminor MSVCRT__winminor +@ extern _winver MSVCRT__winver +@ cdecl _wmakepath(wstr wstr wstr wstr wstr) +@ cdecl _wmkdir(wstr) +@ cdecl _wmktemp(wstr) +@ varargs _wopen(wstr long) +@ stub _wperror #(wstr) +@ stub _wpgmptr # extern +@ stub _wpopen #(wstr wstr) +@ cdecl _wputenv(wstr) +@ cdecl _wremove(wstr) +@ cdecl _wrename(wstr wstr) +@ cdecl _write(long ptr long) +@ cdecl _wrmdir(wstr) +@ stub _wsearchenv #(wstr wstr ptr) +@ stub _wsetlocale #(long wstr) +@ varargs _wsopen (wstr long long) MSVCRT__wsopen +@ stub _wspawnl #(long wstr wstr) varargs +@ stub _wspawnle #(long wstr wstr) varargs +@ stub _wspawnlp #(long wstr wstr) varargs +@ stub _wspawnlpe #(long wstr wstr) varargs +@ stub _wspawnv #(long wstr ptr) +@ stub _wspawnve #(long wstr ptr ptr) +@ stub _wspawnvp #(long wstr ptr) +@ stub _wspawnvpe #(long wstr ptr ptr) +@ cdecl _wsplitpath(wstr wstr wstr wstr wstr) +@ cdecl _wstat(wstr ptr) +@ stub _wstati64 #(wstr ptr) +@ stub _wstrdate #(ptr) +@ stub _wstrtime #(ptr) +@ stub _wsystem #(wstr) +@ cdecl _wtempnam(wstr wstr) +@ stub _wtmpnam #(ptr) +@ cdecl _wtoi(wstr) ntdll._wtoi +@ cdecl _wtoi64(wstr) ntdll._wtoi64 +@ cdecl _wtol(wstr) ntdll._wtol +@ cdecl _wunlink(wstr) +@ cdecl _wutime(wstr ptr) +@ cdecl _y0(double) +@ cdecl _y1(double) +@ cdecl _yn(long double ) +@ cdecl abort() MSVCRT_abort +@ cdecl abs(long) +@ cdecl acos(double) +@ cdecl asctime(ptr) +@ cdecl asin(double) +@ cdecl atan(double) +@ cdecl atan2(double double) +@ cdecl atexit(ptr) MSVCRT_atexit +@ cdecl atof(str) +@ cdecl atoi(str) +@ cdecl atol(str) +@ cdecl bsearch(ptr ptr long long ptr) +@ cdecl calloc(long long) MSVCRT_calloc +@ cdecl ceil(double) +@ cdecl clearerr(ptr) MSVCRT_clearerr +@ cdecl clock() MSVCRT_clock +@ cdecl cos(double) +@ cdecl cosh(double) +@ cdecl ctime(ptr) +@ cdecl difftime(long long) MSVCRT_difftime +@ cdecl div(long long) MSVCRT_div +@ cdecl exit(long) MSVCRT_exit +@ cdecl exp(double) +@ cdecl fabs(double) +@ cdecl fclose(ptr) MSVCRT_fclose +@ cdecl feof(ptr) MSVCRT_feof +@ cdecl ferror(ptr) MSVCRT_ferror +@ cdecl fflush(ptr) MSVCRT_fflush +@ cdecl fgetc(ptr) MSVCRT_fgetc +@ cdecl fgetpos(ptr ptr) MSVCRT_fgetpos +@ cdecl fgets(ptr long ptr) MSVCRT_fgets +@ cdecl fgetwc(ptr) MSVCRT_fgetwc +@ cdecl fgetws(ptr long ptr) MSVCRT_fgetws +@ cdecl floor(double) +@ cdecl fmod(double double) +@ cdecl fopen(str str) MSVCRT_fopen +@ varargs fprintf(ptr str) MSVCRT_fprintf +@ cdecl fputc(long ptr) MSVCRT_fputc +@ cdecl fputs(str ptr) MSVCRT_fputs +@ cdecl fputwc(long ptr) MSVCRT_fputwc +@ cdecl fputws(wstr ptr) MSVCRT_fputws +@ cdecl fread(ptr long long ptr) MSVCRT_fread +@ cdecl free(ptr) MSVCRT_free +@ cdecl freopen(str str ptr) MSVCRT_freopen +@ cdecl frexp(double ptr) +@ varargs fscanf(ptr str) MSVCRT_fscanf +@ cdecl fseek(ptr long long) MSVCRT_fseek +@ cdecl fsetpos(ptr ptr) MSVCRT_fsetpos +@ cdecl ftell(ptr) MSVCRT_ftell +@ varargs fwprintf(ptr wstr) MSVCRT_fwprintf +@ cdecl fwrite(ptr long long ptr) MSVCRT_fwrite +@ varargs fwscanf(ptr wstr) MSVCRT_fwscanf +@ cdecl getc(ptr) MSVCRT_getc +@ cdecl getchar() MSVCRT_getchar +@ cdecl getenv(str) MSVCRT_getenv +@ cdecl gets(str) MSVCRT_gets +@ cdecl getwc(ptr) MSVCRT_getwc +@ cdecl getwchar() MSVCRT_getwchar +@ cdecl gmtime(ptr) +@ cdecl is_wctype(long long) ntdll.iswctype +@ cdecl isalnum(long) MSVCRT_isalnum +@ cdecl isalpha(long) MSVCRT_isalpha +@ cdecl iscntrl(long) MSVCRT_iscntrl +@ cdecl isdigit(long) MSVCRT_isdigit +@ cdecl isgraph(long) MSVCRT_isgraph +@ cdecl isleadbyte(long) MSVCRT_isleadbyte +@ cdecl islower(long) MSVCRT_islower +@ cdecl isprint(long) MSVCRT_isprint +@ cdecl ispunct(long) MSVCRT_ispunct +@ cdecl isspace(long) MSVCRT_isspace +@ cdecl isupper(long) MSVCRT_isupper +@ cdecl iswalnum(long) MSVCRT_iswalnum +@ cdecl iswalpha(long) ntdll.iswalpha +@ cdecl iswascii(long) MSVCRT_iswascii +@ cdecl iswcntrl(long) MSVCRT_iswcntrl +@ cdecl iswctype(long long) ntdll.iswctype +@ cdecl iswdigit(long) MSVCRT_iswdigit +@ cdecl iswgraph(long) MSVCRT_iswgraph +@ cdecl iswlower(long) MSVCRT_iswlower +@ cdecl iswprint(long) MSVCRT_iswprint +@ cdecl iswpunct(long) MSVCRT_iswpunct +@ cdecl iswspace(long) MSVCRT_iswspace +@ cdecl iswupper(long) MSVCRT_iswupper +@ cdecl iswxdigit(long) MSVCRT_iswxdigit +@ cdecl isxdigit(long) MSVCRT_isxdigit +@ cdecl labs(long) +@ cdecl ldexp( double long) MSVCRT_ldexp +@ cdecl ldiv(long long) MSVCRT_ldiv +@ stub localeconv #() +@ cdecl localtime(ptr) +@ cdecl log(double) +@ cdecl log10(double) +@ cdecl -register -i386 longjmp(ptr long) _MSVCRT_longjmp +@ cdecl malloc(long) MSVCRT_malloc +@ cdecl mblen(ptr long) MSVCRT_mblen +@ cdecl mbstowcs(ptr str long) ntdll.mbstowcs +@ cdecl mbtowc(wstr str long) MSVCRT_mbtowc +@ cdecl memchr(ptr long long) +@ cdecl memcmp(ptr ptr long) +@ cdecl memcpy(ptr ptr long) +@ cdecl memmove(ptr ptr long) +@ cdecl memset(ptr long long) +@ cdecl mktime(ptr) MSVCRT_mktime +@ cdecl modf(double ptr) +@ cdecl perror(str) MSVCRT_perror +@ cdecl pow(double double) +@ varargs printf(str) MSVCRT_printf +@ cdecl putc(long ptr) MSVCRT_putc +@ cdecl putchar(long) MSVCRT_putchar +@ cdecl puts(str) MSVCRT_puts +@ cdecl putwc(long ptr) MSVCRT_fputwc +@ cdecl putwchar(long) _fputwchar +@ cdecl qsort(ptr long long ptr) +@ stub raise #(long) +@ cdecl rand() MSVCRT_rand +@ cdecl realloc(ptr long) MSVCRT_realloc +@ cdecl remove(str) MSVCRT_remove +@ cdecl rename(str str) MSVCRT_rename +@ cdecl rewind(ptr) MSVCRT_rewind +@ varargs scanf(str) MSVCRT_scanf +@ cdecl setbuf(ptr ptr) MSVCRT_setbuf +@ cdecl setlocale(long str) MSVCRT_setlocale +@ cdecl setvbuf(ptr str long long) MSVCRT_setvbuf +@ cdecl signal(long long) MSVCRT_signal +@ cdecl sin(double) +@ cdecl sinh(double) +@ varargs sprintf(ptr str) +@ cdecl sqrt(double) +@ cdecl srand(long) +@ varargs sscanf(str str) MSVCRT_sscanf +@ cdecl strcat(str str) +@ cdecl strchr(str long) +@ cdecl strcmp(str str) +@ cdecl strcoll(str str) +@ cdecl strcpy(ptr str) +@ cdecl strcspn(str str) +@ cdecl strerror(long) MSVCRT_strerror +@ cdecl strftime(str long str ptr) +@ cdecl strlen(str) +@ cdecl strncat(str str long) +@ cdecl strncmp(str str long) +@ cdecl strncpy(ptr str long) +@ cdecl strpbrk(str str) +@ cdecl strrchr(str long) +@ cdecl strspn(str str) +@ cdecl strstr(str str) +@ cdecl strtod(str ptr) +@ cdecl strtok(str str) +@ cdecl strtol(str ptr long) +@ cdecl strtoul(str ptr long) +@ cdecl strxfrm(ptr str long) +@ varargs swprintf(wstr wstr) ntdll.swprintf +@ varargs swscanf(wstr wstr) MSVCRT_swscanf +@ cdecl system(str) MSVCRT_system +@ cdecl tan(double) +@ cdecl tanh(double) +@ cdecl time(ptr) MSVCRT_time +@ cdecl tmpfile() MSVCRT_tmpfile +@ cdecl tmpnam(ptr) MSVCRT_tmpnam +@ cdecl tolower(long) +@ cdecl toupper(long) +@ cdecl towlower(long) ntdll.towlower +@ cdecl towupper(long) ntdll.towupper +@ cdecl ungetc(long ptr) MSVCRT_ungetc +@ cdecl ungetwc(long ptr) MSVCRT_ungetwc +@ cdecl vfprintf(ptr str long) MSVCRT_vfprintf +@ cdecl vfwprintf(ptr wstr long) MSVCRT_vfwprintf +@ cdecl vprintf(str long) MSVCRT_vprintf +@ cdecl vsprintf(ptr str ptr) +@ cdecl vswprintf(ptr wstr long) MSVCRT_vswprintf +@ cdecl vwprintf(wstr long) MSVCRT_vwprintf +@ cdecl wcscat(wstr wstr) ntdll.wcscat +@ cdecl wcschr(wstr long) ntdll.wcschr +@ cdecl wcscmp(wstr wstr) ntdll.wcscmp +@ cdecl wcscoll(wstr wstr) MSVCRT_wcscoll +@ cdecl wcscpy(ptr wstr) ntdll.wcscpy +@ cdecl wcscspn(wstr wstr) ntdll.wcscspn +@ stub wcsftime #(ptr long wstr ptr) +@ cdecl wcslen(wstr) ntdll.wcslen +@ cdecl wcsncat(wstr wstr long) ntdll.wcsncat +@ cdecl wcsncmp(wstr wstr long) ntdll.wcsncmp +@ cdecl wcsncpy(ptr wstr long) ntdll.wcsncpy +@ cdecl wcspbrk(wstr wstr) MSVCRT_wcspbrk +@ cdecl wcsrchr(wstr long) ntdll.wcsrchr +@ cdecl wcsspn(wstr wstr) ntdll.wcsspn +@ cdecl wcsstr(wstr wstr) ntdll.wcsstr +@ stub wcstod #(wstr ptr) +@ cdecl wcstok(wstr wstr) ntdll.wcstok +@ cdecl wcstol(wstr ptr long) ntdll.wcstol +@ cdecl wcstombs(ptr ptr long) ntdll.wcstombs +@ cdecl wcstoul(wstr ptr long) ntdll.wcstoul +@ stub wcsxfrm #(ptr wstr long) +@ cdecl wctomb(ptr long) MSVCRT_wctomb +@ varargs wprintf(wstr) MSVCRT_wprintf +@ varargs wscanf(wstr) MSVCRT_wscanf +@ stub _Gettnames