This is the source code for MysterX.  Compilation requires
Visual Studio .NET.

You can build the standard MysterX from the command line or from
within the Visual Studio .NET IDE.  If you wish to use the MysterX
.NET extensions, you must build MysterX from the IDE.

--------
To build MysterX from the command line, cd to the plt\src\mysterx\
directory and run these commands:

        nmake clean

gets rid of existing binaries, while

        nmake

compiles all the binaries.

In the Makefile, there are several variables to set:

  o MZC - path to the mzc compiler
  o HTMLHELP - directory for MS Help Workshop
  o SHELL32 - directory containing LIB/SHELL32.LIB
     and related header files
  o REGSVR32 - path to the REGSVR32 utility

You may need to change these according to your local
installation before compiling.  The REGSVR32 utility
is ordinarily located in the Windows\SYSTEM directory
under Windows 95/98, and in the WINNT\System32 directory
under Windows NT/2000/XP.

If you get errors about a missing file atlbase.h,
check the value of the environment variable INCLUDE.
The subdirectory `atlmfc' (VS.NET) beneath
the Visual C++ directory needs to be in the list of INCLUDE
directories.  For example, if Visual Studio .NET is installed
at the root of the C: drive, that directory would be

  C:\Microsoft Visual Studio .NET\Vc7\atlmfc

The Microsoft HTML Help Workshop must be installed to
build mxmain.dll.  The files are on the Visual Studio
CD in the directory HTMLHELP in the file HTMLHELP.EXE.  Run
that program to install the files.  Alternatively, Help
Workshop may be downloaded from the Web, at

 http://msdn.microsoft.com/library/default.asp?
   url=/library/en-us/htmlhelp/html/vsconHH1Start.asp

[The above URL is broken over two lines for readability.]
Windows 2000 comes with HTML Help installed (probably
Windows XP Professional does as well.)

--------
To build MysterX from the Visual Studio .NET IDE, launch Visual Studio
and load the `solution' file located at
`plt\src\worksp\libmysterx\libmysterx.sln'

The MysterX solution has three configurations.  The Release and Debug
configurations are the standard Visual Studio configurations.  The Jrm
configuration is a special Debug configuration that contains support
for running the Microsoft CLR (.NET runtime) embedded within MzScheme.

Building MysterX from the IDE is slightly different from building
MysterX from the command line.  The command line directs the compiler
to place the intermediate files directly in the plt\src\mysterx
directory while the IDE places them in the src\worksp\libmysterx\Debug
or src\worksp\libmysterx\Release directories.  The IDE attempts to
ensure the correct files are then copied over to the plt\src\mysterx
directory, but if there are problems, you should look around *both*
directories for clues.

--------
MysterX now has a new primitive:


%%initialize-dotnet-runtime                    (primitive procedure)

This function is available and exported in all versions of MysterX.
In the standard MysterX build it simply signals an error indicating
that support for .NET is not available.

In the MysterX build with .NET extensions, this function loads the CLR
into MzScheme, creates a default AppDomain, and returns that AppDomain
as a MysterX (COM) object.  It also changes the behavior of MysterX in
two fundamental ways:  COM BSTR objects (strings) will be interpreted
as Scheme symbols rather than Scheme strings, and any Scheme object
that cannot be converted to an equivalent COM object will be passed
using the MzScheme internal representation (a pointer to a
Scheme_Object).  The latter behavior will have no effect on working
code, but the former change will most likely break working code that
expects strings for return values.  Thus it is unlikely you will be
able to use an older MysterX application simultaneously with the .NET
extensions.
