Attaching critical personal accounts to these free Sweden Virtual phone numbers is not recommended, as these accounts can be recovered by other users via SMS afterwards. https://tempsmss.com/country/sweden-phone-number/ https://tempsmss.com/blog/
Go to file
Alexandre Julliard 36ca1368c9 Release 940602
Sat May 28 12:03:23 1994  Bob Amstadt  (bob@pooh)

	* miscemu/int21.c (OpenExistingFile): 
	OpenExistingFile needed to return handle in AX register instead
	of the BX register.

	* miscemu/int21.c (ioctlGetDeviceInfo): 
	Added a little code to give a fake result for normal files.

Wed May 25 21:55:38 1994  Bob Amstadt  (bob@pooh)

	* [memory/global.c]
	return value from GlobalSize was completely wrong.

	* [miscemu/int21.h]
	fixed bug in FindFirst.  Directory pointer (dp) was not placed in
	dta correctly.

	* [tools/build.c]
	fixed creation of pop.h to guarantee that flags are restored correctly.

	* [misc/comm.c]
	changed all occurance of strncmp() to strncasecmp().
	BuildCommDCB() should not require that OpenComm() be called first.

	* [loader/selector.c]
	Heap initialized to size of full segment less stack size and 
	automatic data size.

Sat May 28 09:14:33 1994  Rick Sladkey  (jrs@world.std.com)

	* [controls/listbox.c]
	Correct typos in ListBoxResetContent where lpls variable is
	used where lsls2 variable is meant.  Don't call USER_HEAP_FREE
	twice on the same handle if hData and hMem are the same.

	* [debugger/opcodes/i386-dis.c]
	Add new name array names_rmw for table driven decoding of the
	16-bit mod/rm field.  Omit large case statement in OP_E and
	replace with array reference to match existing coding style.
	Add new static variable machine with value 286 or 386 to
	correctly decode mod/rm field in either 16 or 32 bit modes.
	Set it in print_insn_i{2,3}86.  In OP_E use it to decide how
	to decode mod/rm.  While the code was correct for 16 bit code,
	it was improperly decoding mod/rm fields on word prefixed
	32 bit instructions.

	* [debugger/debug.l]
	Recognize new token ABORT.   Recognize single letters 'p'
	and 'q' as tokens.

	* [debugger/dbg.y]
	Add new token ABORT.  Allow print command to be invoked by
	'p' and quit command by 'q', ala GDB.  Change lots of '};'
	to just '}'.  Add static dummy_regs to wine_debug so that
	wine_debug(0, NULL) doesn't core dump with qmagic.

	* [debugger/info.c]
	Correct syntax of break command in helptext and omit former
	comment about probable bugginess of the disassembly since it
	is now correct.  Change fprintf of first backtrace stack
	frame to match that of the second and subsequent frames.

	* [loader/selector.c]
	Change construction of command line in CreatePSP from creating
	a string that looks like "arg1 arg2 \r" to "arg1 arg2".  A DOS
	PSP command line looks like " arg1 arg2\r" with the length not
	including the trailing "\r" but that is not how Windows does it.

	* [loader/library.c]
	Change uses of %s to print strings in GetModuleHandle to %x so
	that string IDs don't cause a core dump with qmagic.  Handle
	converting a string id to a literal module handle.  For
	example, GetModuleHandle((LPSTR) 0x57) now returns 0x57 if
	it is a real module handle.

	* [misc/message.c]
	In MessageBox, translate a NULL title argument to the string "Error".

	* [misc/profile.c]
	In GetSetProfile translate a NULL Default argument to "".  Any
	caller whose Default argument is NULL is buggy, but CHARMAP does it
	anyway.

	* [objects/font.c]
	Add NULL pointer checks in EnumFontFamilies to prevent core dumps.

Sat May 28 20:01:51 1994 Jon Tombs (jon@gtex02.us.es) 

	* New options/resourses nosaveunders and nobackingstore.  By 
	default backingstore and saveunders are now enabled, these use 
	more memory but avoids those slow (sometimes multiple) redraws 
	caused be exposure events.

May 30, 94 martin2@trgcorp.solucorp.qc.ca (Martin Ayotte)

	* [misc/driver.c] New file
	Skeleton for 'Installable Wine Drivers' functions. :-)
	* [misc/audio.c] New file
	Skeleton for basic 'Audio Driver' functions.
	* [misc/network.c] New file
	Stubs for few networking functions.

	* [misc/mmsystem.c]
	More coding ... a dust in a galaxy ...
	* [misc/shell.c]
	Some coding for 'RegXXX' functions ... a dust in the wind ...

	* [misc/profile.c]
	Bug fix in GetSetProfile(), bad enumeration if KeyName == NULL.

	* [objects/gdi.c]
	New function CreateDiscardableBitmap(), it just calling 
	CreateCompatibleBitmap() for now. It's get 'clock.exe' running ! :-)

	* [controls/listbox.c]
	* [controls/combo.c]
	New font member assigned to SYSTEM_FONT as default.
	Added processing for WM_SETFONT message;


Tue May 31 20:34:25 EDT 1994  John Richardson <jrichard@cs.uml.edu>

        * [windows/event.c]
        Added AsyncMouseButtonsStates array for GetAsyncKeyState.

        * [windows/keyboard.c]
        Implemented beginning of GetAsyncKeyState.

Wed May 25 23:35:03 1994  David Metcalfe <david@prism.demon.co.uk>

        * [objects/metafile.c] [include/metafile.h]
          [windows/mapping.c] [objects/clipping.c] [objects/bitblt.c]
          [windows/dc.c]
        Further metafile support.
1994-06-02 22:38:20 +00:00
controls Release 940602 1994-06-02 22:38:20 +00:00
debugger Release 940602 1994-06-02 22:38:20 +00:00
etc Release 940420 1994-04-21 01:20:00 +00:00
if1632 Release 940602 1994-06-02 22:38:20 +00:00
include Release 940602 1994-06-02 22:38:20 +00:00
loader Release 940602 1994-06-02 22:38:20 +00:00
memory Release 940602 1994-06-02 22:38:20 +00:00
misc Release 940602 1994-06-02 22:38:20 +00:00
miscemu Release 940602 1994-06-02 22:38:20 +00:00
objects Release 940602 1994-06-02 22:38:20 +00:00
test Release 940420 1994-04-21 01:20:00 +00:00
toolkit Release 940602 1994-06-02 22:38:20 +00:00
tools Release 940602 1994-06-02 22:38:20 +00:00
windows Release 940602 1994-06-02 22:38:20 +00:00
BUGS Release 940420 1994-04-21 01:20:00 +00:00
COPYRIGHT Release 0.0.2 1993-06-29 16:33:12 +00:00
ChangeLog Release 940602 1994-06-02 22:38:20 +00:00
Configure Release 940420 1994-04-21 01:20:00 +00:00
DEVELOPERS-HINTS Release 940405 1994-04-05 21:42:43 +00:00
Imakefile Release 940518 1994-05-18 18:29:32 +00:00
LICENSE Release 940524 1994-05-25 16:25:21 +00:00
README Release 940602 1994-06-02 22:38:20 +00:00
README.OEMANSI Release 0.4.3 1993-09-29 12:21:49 +00:00
WARRANTY Release 0.5 1994-01-04 20:14:34 +00:00
Wine.tmpl Release 940405 1994-04-05 21:42:43 +00:00
autoconf.h Release 940505 1994-05-04 19:15:00 +00:00
wine.ini Release 940505 1994-05-04 19:15:00 +00:00

README

0. LICENSE

You may without charge, royalty or other payment, copy and
distribute copies of this work and derivative works of this work
in source or binary form provided that: (1) 
you appropriately publish on each copy an appropriate copyright
notice; (2) faithfully reproduce all prior copyright notices
included in the original work (you may also add your own
copyright notice); and (3) agree to indemnify and hold all prior
authors, copyright holders and licensors of the work harmless
from and against all damages arising from use of the work.

You may distribute sources of derivative works of the work
provided that (1) (a) all source files of the original work that
have been modified, (b) all source files of the derivative work
that contain any party of the original work, and (c) all source
files of the derivative work that are necessary to compile, link
and run the derivative work without unresolved external calls and
with the same functionality of the original work ("Necessary
Sources") carry a prominent notice explaining the nature and date
of the modification and/or creation.  You are encouraged to make
the Necessary Sources available under this license in order to
further the development and acceptance of the work.

EXCEPT AS OTHERWISE RESTRICTED BY LAW, THIS WORK IS PROVIDED
WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES OF ANY KIND, INCLUDING
BUT NOT LIMITED TO, ANY IMPLIED WARRANTIES OF FITNESS FOR A
PARTICULAR PURPOSE, MERCHANTABILITY OR TITLE.  EXCEPT AS
OTHERWISE PROVIDED BY LAW, NO AUTHOR, COPYRIGHT HOLDER OR
LICENSOR SHALL BE LIABLE TO YOU FOR DAMAGES OF ANY KIND, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

1. COMPILATION:

You must have one of:

	Linux version 0.99.13 or above
	NetBSD-current
	FreeBSD-current or FreeBSD 1.1

To build Wine, first do a "./Configure" and then a "make".  The
executable "wine" will be built.  "wine" will load and run 16-bit
Windows' executables. 



2. SETUP:

Wine requires you to have a file /usr/local/etc/wine.conf (you can
supply a different name when configuring wine) or a file called .winerc
in your homedirectory.

The formatstyle of this config file is just like a windows .ini file.

Here's an explanation of each section:

* [drives]

format: <driveletter> = <rootdirectory>
default: none

This section is used to specify the root directory of each `dos'drive 
as windows' applications require a dos/mswindows based diskdrive & 
directory scheme. 

If you mounted you dos-partition as /dos and installed microsoft windows 
in c:\windows than you should specify c=/dos in the drives section.

* [wine]

format: windows = <directory>
default: c:\windows

Used to specify an different windows directory.

format: system = <directory>
default: c:\windows\system

Used to specify an different system directory.

format: temp = <directory>
default: c:\temp

Used to specify a directory where windows applications can store temporary
files.

format: path = <directories separated by semi-colons>
default: c:\windows;c:\windows\system

Used to specify the path which will be used to find executables and DLL's.

format: systemresources = <filename>
default: c:\temp

Used to specify the name of sysres.dll, a dll which is used by wine itself.

* [serialports]

format: com[12345678] = <devicename>
default: none

Used to specify the devices which are used as com1 - com8.

* [parallelports]

format: lpt[12345678] = <devicename>
default: none

Used to specify the devices which are used as lpt1 - lpt8.

* [spy]

format: file = <filename or CON when logging to stdout>
default: none

used to specify the file which will be used as logfile.

format: exclude = <message names separated by semicolons>
default: none

Used to specify which messages will be excluded from the logfile.

format: include = <message names separated by semicolons>
default: none

Used to specify which messages will be included in the logfile.



3. RUNNING PROGRAMS

When invoking wine, you must specify the entire path to the executable,
or a filename only.

For example: to run Windows' solitaire:

	wine sol		   (using the searchpath to locate the file)
	wine sol.exe

	wine c:\\windows\\sol.exe  (using a dosfilename)

	wine /usr/windows/sol.exe  (using a unixfilename)

note: the path of the file will also be added to the path when
      a full name is supplied on the commandline.

Have a nice game of solitaire, but be careful.  Emulation isn't perfect.
So, occassionally it will crash.



4. EXAMPLE CONFIGFILE

----------------------------------------------------------------------------
[drives]
a=/mnt/fd0
c=/dos
d=~/Wine

[wine]
windows=c:\windows
system=c:\windows\system
temp=c:\temp
path=c:\windows;c:\windows\system;c:\winapps\word\;c:\winapps\pctools
systemresources=./sysres.dll

[serialports]
com1=/dev/cua1
com2=/dev/cua1

[parallelports]
lpt1=/dev/lp0

[spy]
;File=CON
;File=spy.log
Exclude=WM_TIMER;WM_SETCURSOR;WM_MOUSEMOVE;WM_NCHITTEST;WM_NCACTIVATE;WM_GETDLGCODE;
Include=WM_COMMAND;

----------------------------------------------------------------------------


5. BUILD:

    The documentation for the build program is in the file build-spec.txt


6. FINALE:

Good luck,

	If you successfully add anything, please send me a copy.

Bob Amstadt
bob@amscons.com


7. WHAT'S NEW

WHAT'S NEW with Wine-940602: (see ChangeLog for details)
	- CLOCK.EXE runs.
	- ABORT command added to debugger.
	- Windows environment is now imported from the UNIX environment.
	- Use of save unders and backing store are now the default.  Resource
	  and command line options have been added to disable these things.
	- Assorted new driver functions
	- GetAsyncKeyState()
	- More metafile support
	- and many many bug fixes!

WHAT'S NEW with Wine-940524: (see ChangeLog for details)
	- New menu functions
	- EnumObjects()
	- and many many bug fixes!

WHAT'S NEW with Wine-940518: (see ChangeLog for details)
	- debugger improvements
	- bug fixes to get some dialog boxes working.
	- skeleton for passing MCI functions.
	- beginnings of metafile support.
	- and many many bug fixes!

WHAT'S NEW with Wine-940510: (see ChangeLog for details)
	- debugger improvements
	- mmsystem
	- ShellAbout() and AboutDlgProc()
	- and many many bug fixes!

WHAT'S NEW with Wine-940505: (see ChangeLog for details)
	- faster color_stretch()
	- SetSysMenu(), GetCursor(), GetDesktopWindow()
	- WSAGetXbyY() now non-blocking	
	- and many many bug fixes!

WHAT'S NEW with Wine-940420: (see ChangeLog for details)
	- new property functions
	- new listbox and combo box functions
	- GrayString() and CallGrayStringProc()
	- and many many bug fixes!

WHAT'S NEW with Wine-940412: (see ChangeLog for details)
	- menuing improvements
	- drawing performance improvements
	- beginnings of hooks
	- MDI maximizing and tiling
	- improvements in winsock implementation
	- and many many bug fixes!

WHAT'S NEW with Wine-940405: (see ChangeLog for details)
	- Mouse activation of menus working again
	- GetprocAddress()
	- SetDIBitsToDevice()
	- FindWindow()
	- int 10hm 25h and 26h
	- in, inb, out, outb emulation
	- and many many bug fixes!

WHAT'S NEW with Wine-940329: (see ChangeLog for details)
	- MDI: child windows can be created, activated and cascaded.
	- -depth option
	- support for dithered brushes
	- GetNearestColor(), RealizeDefaultPalette(), 
	  GetSystemPaletteEntries(), and SelectPalette()
	- System colors read from WIN.INI
	- Keyboard menu manipulation (mouse is temporarily broken)
	- GetFreeSystemResources()
	- and many many bug fixes!

WHAT'S NEW with Wine-940322: (see ChangeLog for details)
	- Speed improvements in bitmaps and mouse messages
	- More MDI support.  More to come next week...
	- and many many bug fixes!

WHAT'S NEW with Wine-940315: (see ChangeLog for details)
	- Beginnings of MDI support.  More to come next week...
	- Stress DLL
	- and many many bug fixes!

WHAT'S NEW with Wine-940309: (see ChangeLog for details)
	- New "exclude" and "include" filters for spy feature.  See sample
	  wine.ini for details.
	- -desktop and -name options (see ChangeLog)
	- GetFreeSpace() and CreateIcon()
	- and many many bug fixes!

WHAT'S NEW with Wine-940301: (see ChangeLog for details)
	- NEW Configure script to set compile time options!
	- Support for filesystems with short (less than 14 chars) filenames.
	- Clipboard functions!
	- and more...

WHAT'S NEW with Wine-940223: (see ChangeLog for details)
	- FreeBSD support
	- FloodFill()
	- Desktop window support
	- Menu fixes
	- and more...

WHAT'S NEW with Wine-940216: (see ChangeLog for details)
	- Many many bug fixes
	- Switched to using Imakefile's instead of Makefile's.
	- Lot's of changes for libwine.a

WHAT'S NEW with Wine-940209: (see ChangeLog for details)
	- Many many bug fixes
	- Minor directory structure reorganization
	- New GetModule*() functions.
	- WINSOCK DLL
	- First stab at Wine as a library

WHAT'S NEW with Wine-940201: (see ChangeLog for details)
	- Support for huge data structures.
	- FreeBSD support.
	- Many many bug fixes

WHAT'S NEW with version 0.8: (see ChangeLog for details)
	- Eliminated Xt-dependent code.  Thanks to Alexandre and Martin.
	- EnumWindows() and EnumChildWindows()
	- Activating and deactivating of windows.
	- More work on system menus.

WHAT'S NEW with version 0.7: (see ChangeLog for details)
	- Eliminated Xt-dependent code.  Thanks to Alexandre and Martin.
	- Other bug fixes.
	- IsWIndowEnabled() and EnableWindow() now implemented.
	- New command line options.

WHAT'S NEW with version 0.6: (see ChangeLog for details)
	- Working towards elimination of Xt-dependent code.  Thanks to
	  Alexandre and Martin.
	- Other bug fixes.
	- I added a rudimentary spy facility which can be turned
 	  on from the wine.ini file.  See the sample wine.ini
	  for details

WHAT'S NEW with version 0.5: (see ChangeLog for details)
	- Working towards elimination of Xt-dependent code.
	- StretchBlt()
	- GetClassName() & GetClassInfo()
	- Implemented loader relocation types 5 and 6.

WHAT'S NEW with version 0.4.14: (see ChangeLog for details)
	- Bug fixes and enhancements
	- Comm functions
	- Text caret functions

WHAT'S NEW with version 0.4.13: (see ChangeLog for details)
	- Bug fixes
	- GetCapture()
	- More keyboard handling
	- Polyline() and Polygon()

WHAT'S NEW with version 0.4.12: (see ChangeLog for details)
	- Bug fixes
	- New DOS file functions
	- Experimental Imakefiles

WHAT'S NEW with version 0.4.11: (see ChangeLog for details)
	- Bug fixes
	- New cursor functions
	- New file system handling
	- Atoms

WHAT'S NEW with version 0.4.10: (see ChangeLog for details)
	- Bug fixes
	- More scroll bar functions
	- More icon and cursor handling

WHAT'S NEW with version 0.4.9: (see ChangeLog for details)
	- Bug fixes
	- real MessageBox()
	- New resource functions
	- Icon functions
	- Selector manipulation functions
	- Catch()/Throw()

WHAT'S NEW with version 0.4.7: (see ChangeLog for details)
	- More dialog box functions
	- More DOS interrupts
	- NetBSD compatibility patches

WHAT'S NEW with version 0.4.5: (see ChangeLog for details)
	- Bug fixes
	- focus routines
	- dialog box functions
	- improvements to control windows

WHAT'S NEW with version 0.4.4: (see ChangeLog for details)
	- Bug fixes
	- New static control class
	- Preliminary listbox, combobox and scrollbar controls
	- System initialization file is now called "wine.ini", and
	  may be located in the user's current directory, the
	  user's home directory or any directory specified by
	  the WINEPATH environment variable.
	- The loader now searches the directories specified by the
	  WINEPATH environment variable for programs and DLLs.
	- Internal debugger now works on 386BSD.

WHAT'S NEW with version 0.4.3: (see ChangeLog for details)
	- Bug fixes
	- Resource loading now able to load DLL resources
	- Button control now based on GDI calls
	- Preliminary system color support
	- Miscellaneous window functions
	- Limited debugging facility (sometimes hangs)

WHAT'S NEW with version 0.4.2: (see ChangeLog for details)
	- Bug fixes
	- 32-bit callback functions allowed
	- .INI file handling
	- lstr* functions and ANSI<->OEM conversion functions.

WHAT'S NEW with version 0.4.1: (see ChangeLog for details)
	- Bug fixes
	- Memory usage changes.

WHAT'S NEW with version 0.4.0: (see ChangeLog for details)
	- Wine now compiles and runs under NetBSD.  Patches are
	  required for NetBSD.
	- Wine stat patches included.  Add "-DWINESTAT" to the definition
	  of COPTS in the main Makefile to activate.
	- Preliminary keyboard handling.
	- Button control window implemented.
	- many other new functions added.

WHAT'S NEW with version 0.3.1: (see ChangeLog for details)
	- LineDDA() completed
	- numerous bug fixes
	- INT 1Ah implemented
	- SOUND DLL implemented
	- More of WIN87EM DLL implemented
	- OpenFile() and friends implemented

WHAT'S NEW with version 0.3.0: (see ChangeLog for details)
	- Mouse capture
	- Text justification and underlining
	- Clipping
	- LoadBitmap() completed
	- Code generated by the Borland compiler should now work

WHAT'S NEW with version 0.2.8: (see ChangeLog for details)
	- Text functions from Alexandre
	- INT 21h from Eric
	- Menu improvements from David
	- Bug fixes and GetProcAddress() stub from me

WHAT'S NEW with version 0.2.7: (see ChangeLog for details)
    - sol.exe gets further.  I did some debugging and now solitaire
      stops when it tries to call GetTextExtent().  Any volunteers?
    - Many DC updates from Alexandre.
    - Menu updates to support underlining characters from David Metcalfe.

WHAT'S NEW with version 0.2.6: (see ChangeLog for details)
    - More region updates from Alexandre

WHAT'S NEW with version 0.2.5: (see ChangeLog for details)
    - Regions implemented by Alexandre
    - More menuing code from me

WHAT'S NEW with version 0.2.4: (see ChangeLog for details)
    - Many improvements to GDI from Alexandre
    - Many improvements to menu handling by me.

WHAT'S NEW with version 0.2.3: (see ChangeLog for details)
    - Bug fixes with SendMessage() and PostMessage()
    - Preliminary menu support

WHAT'S NEW with version 0.2.2: (see ChangeLog for details)
    - Misc bug fixes
    - More bitmap code
    - Timers
    - Memory DC's

WHAT'S NEW with version 0.2.1:
    - I have placed things into sub-directories.  The organization is
      not finalized.  I imagine that the directory structure will
      change as is necessary.  Files in the ./misc directory need
      to be split apart and placed in apropriate directories.
    - Tons of code from Alexandre.  He has constructed the framework
      for handling GDI objects.  He has also provided code for DCEs.
    - Local heap functions have been completed.
    - Bug fixes in global.c and win.c
    - New function GlobalQuickAlloc() combines GlobalAlloc() and
      GlobalLock() into a single function call.
    - New patch kit for Linux 0.99 pl11 kernel.  Thanks to Linus
      who has graciously included our patches into the ALPHA patch
      release cycle.

WHAT'S NEW with version 0.2.0:
    - Alexandre Julliard has provided a replacement for the Tcl code.
      The new code uses Xlib and Xt directly with no intervening
      interpretted language.  This should reduce the learning
      curve for casual hackers.
    - I changed all GLOBAL_ names to Global.

WHAT'S NEW with version 0.1.1:
    - I have completed global memory allocation, but I don't like it.
      It is not 100% compatible with Windows.  I need some more kernel
      modifications for 100% compatibility.
    - Alexandre Julliard has provided written better emulation for
      the Windows message queue.

WHAT'S NEW with version 0.1.0:
    - Latest patches from Alexandre Julliard.
    - minor bug fix in if1632.S

WHAT'S NEW with version 0.0.5:
    - Patches from Alexandre Julliard.  Some integration with Tcl.
    - Generic interface for callback procedures.  This will allow
      callbacks into DLLs.
    - MakeProcInstance() has been implemented but untested.

WHAT'S NEW with version 0.0.4:
    - Eric Youngdale modified wine.c and selector.c to allow loading
      of Windows DLLs.
    - Added global memory allocation routines (GlobalAlloc, GlobalFree,
      and GlobalLock)
    - Bitmap resource loading into global memory.

WHAT'S NEW with version 0.0.3:
    - Fixed bug with sector sizes.
    - Registers at program startup are now set correctly.
    - Segment fixups for relocatable-segment internal entry points.
    - Fixed bug in DOS PSP structure.
    - Some resource loading is done.
    - Added "return" ordinal type to build program.
    - Added comment capability to build program.

WHAT'S NEW with version 0.0.2:

    - Again thanks to Eric Youngdale for some very useful comments.
    - The Windows startup code created by Micrsoft C 7.0 now runs 
      to completion.
    - Added a new patch to the kernel to increase the usable size of
      the ldt to the full 32 entries currently allowed.
    - Imported name relocations are now supported.
    - Source code for my infamous test program is now included.
    - A handful of basic Windows functions are now emulated.  See
      "kernel.spec" for examples of how to use the build program.

WHAT'S NEW with version 0.0.1:

    - Eric Youngdale contributed countless improvements in memory
      efficiency, bug fixes, and relocation.
    - The build program has been completed.  It now lets you specify
      how the main DLL entry point should interface to your emulation
      library routines.  A brief description of how to build these
      specifications is included in the file "build-spec.txt".
    - The code to dispatch builtin DLL calls is complete, but untested.