         ______   ___    ___
        /\  _  \ /\_ \  /\_ \
        \ \ \L\ \\//\ \ \//\ \      __     __   _ __   ___
         \ \  __ \ \ \ \  \ \ \   /'__`\ /'_ `\/\`'__\/ __`\
          \ \ \/\ \ \_\ \_ \_\ \_/\  __//\ \L\ \ \ \//\ \L\ \
           \ \_\ \_\/\____\/\____\ \____\ \____ \ \_\\ \____/
            \/_/\/_/\/____/\/____/\/____/\/___L\ \/_/ \/___/
                                           /\____/
                                           \_/__/

                     MSVC-specific information.

             See readme.txt for a more general overview.

# MSVC notes

Status: complete.

The screensaver example is built, but you must copy `scrsave.scr` to your `windows/system` directory (or `winnt/system32` directory under Windows NT/2k/XP) if you want to test it.

You may also want to refer to one of the following, as they may include more up to date information:

- http://wiki.allegro.cc/Build/MSVC_6
- http://wiki.allegro.cc/Build/MSVC_7
- http://wiki.allegro.cc/Build/MSVC_8

# Project Files

Project files for MSVC 6, 7, and 8 are included in the /build/msvc directory. If you choose to use them, you can ignore the other sections of this document. (The "Using Allegro" section would still apply.)

You do need to make sure you have recent versions of the DirectX and Windows Platform headers, as described in the "Required software section."

Before you can use the project files, you must first double-click on the /build/msvc/pre-build-msvc.bat file. Then open the Allegro project file and select Build / Batch Build from the menu. Select the versions you want to build and then press the Build button.

(Note that under MSVC 6 you may need to repeat the build process several times due to compiler bugs.)

If everything builds successfully, you'll need to copy some files to finish the installation:

- Copy the contents of C:\allegro\include to "Visual Studio\VC\include"
- Copy the .lib files from C:\allegro\lib\msvc to "Visual Studio\VC\lib"
- Copy the .dll files from C:\allegro\lib\msvc to C:\Windows\System32

The most common location of Visual Studio is "C:\Program Files\Microsoft Visual Studio."

Then you can build the rest of the examples, demos, tests, and tools by opening up their respective project files and selectiong Batch Build from the menu.

# Required software

- Microsoft Visual C++.
- Recent set of DirectX and other Windows SDK headers.
- A GNU environment to run GNU tools with, such as DJGPP, MinGW or Cygwin. Depending on which one you choose, you will need the following packages:
  - DJGPP: compiler (`djdev*.zip`, `gcc*b.zip`, `bnu*b.zip`).
    GNU make (`mak*b.zip`).
    Optional: GNU sed (`sed*b.zip`). Used by "`make depend`" and "`fixdll.bat`".
    Optional: GNU sort (`txt*b.zip`). Used by "`fixdll.bat`".
  - MinGW: compiler (mingw-runtime, gcc, binutils).
    GNU make.
    Optional: GNU sed. Used by "`make depend`" and "`fixdll.bat`".
    Optional: GNU sort (textutils). Used by "`fixdll.bat`".
    Optional: w32api. See next section about details.
  - Cygwin: compiler (cygwin, gcc, binutils).
    GNU make.
    Optional: GNU sed. Used by "`make depend`" and "`fixdll.sh`"
    Optional: GNU sort (textutils). Used by "`fixdll.sh`".

Allegro should work ok with MSVC versions 4, 5, 6, 7.0 (.NET), 7.1 (.NET 2003) and 8.0 (.NET 2005). However note that the lowest tested version is 6.

The DirectX SDK can be obtained directly from Microsoft. An old version of the headers is included with MSVC 6, but Allegro requires more recent files. You should either copy the current headers into your MSVC include and lib directories, or alter your `INCLUDE` and `LIB` environment variables to put the DirectX SDK files in front of the standard MSVC locations.

If you choose to use DJGPP as your GNU environment, the DJGPP compiler and associated tools can be downloaded from your nearest SimTel mirror site, in the `/pub/simtelnet/gnu/djgpp/` directory, or you can use the zip picker on http://www.delorie.com/djgpp/. See the djgpp `readme.1st` file for informations about how to install DJGPP.

If you choose MinGW, download the MinGW compiler and associated tools from 'http://www.mingw.org' or 'http://sourceforge.net/projects/mingw/'. You can download the complete distribution instead of the individual packages if you don't want to install each package manually.

If you choose Cygwin, get `setup.exe` from 'http://sources.redhat.com/cygwin/'. Start the Cygwin setup program and download the required packages. Then install the packages (run `setup.exe` once more). When setup asks you which line endings you want, select unix-style instead of DOS.

Remember that the chosen set of tools have to be on your PATH during the building of Allegro.

# Installing Allegro

This is a source-only distribution, so you will have to compile Allegro before you can use it. To do this you should:

## Setting up the environment

Set up your environment so that MSVC can be used from the commandline. You probably have a `vcvars32.bat` file that will do this for you (the exact location of this file depends on your MSVC version and folder where you have MSVC installed, e.g. for MSVC 6 it is usually `C:\Program Files\Microsoft Visual Studio\VC98\Bin`, for MSVC 8 `C:\Program Files\Microsoft Visual Studio 8\VC\Bin` etc.). You will have to run this file every time you open a DOS box or configure the environment variables in Control Panel/System/Environment (autoexec.bat for Win 9x/ME).

## Configuring Allegro

To configure Allegro for your compiler please run in the command prompt:

>            fix.bat msvc6  - for MSVC 6 and older
>            fix.bat msvc7  - for MSVC 7 (.NET) and 7.1 (.NET 2003)
>            fix.bat msvc8  - for MSVC 8 (.NET 2005)
>            fix.bat icl    - for Intel compiler

## Long paths handling

Normally you can skip this section, unless you have some problem with building Allegro.

The make process needs all the path variables to be in DOS 8.3 format, and since MSVC is usually installed in something like "`C:\Program Files\Microsoft\Microsoft Visual Studio .NET 2003`", this may cause a problem. This should normally be handled by `fix.bat`, so you probably don't need to worry about this. However you can run "`echo %MSVCDir%`" (`%VCINSTALLDIR%` under MSVC 8) from the command line to see if it contain spaces. If you are using MSVC 6 or lower the output should already be in DOS 8.3 format so you should not have any troubles. With higher versions of MSVC it will probably show the long path with spaces. Normally, `fix.bat` will try to convert it to DOS 8.3 format automatically. You can disable this conversion by passing the `--nomsvcpaths` parameter to `fix.bat` (note that this conversion is automatically disabled when using "`msvc6`").

If you want to handle this yourself manually, you will have to edit `vcvars32.bat` so that it sets the 8.3 paths, not the long versions. To get 8.3 path names, you can use the command prompt (`cmd.exe`). Type in "`dir /x`" to get a listing of the 8.3 file and directory names alongside of their full names. You can also use the DOS prompt (`command.exe`) and "`dir`", but this will only show you the 8.3 names.

## Building from SVN

If you are compiling from SVN, you need to run "`make depend`" and "`misc/fixdll.sh`" before continuing as explained below, or the library will fail to build because of missing `.inc` files.

## Building Allegro

If you are using Cygwin as the GNU environment, start the Cygwin bash shell from the command prompt (if you used the command prompt to run `vcvars32.bat` then you must start Cygwin in the same command-prompt window you used to run `vcvars32.bat` unless you configured the environment variables in Control Panel/System/Environment). This is usually done via "`C:\cygwin\cygwin.bat`".

Go to the directory where you have installed Allegro by using '`cd`'.

Type "`make`". Then go do something interesting while everything compiles. When it finishes compiling, type "`make install`" to set the library up ready for use.

If you are using MSVC 8 and want to embed manifest files to executables (by default manifests are just embedded in the DLL), run "`misc\embedman.bat all`" from the command prompt (Cygwin users run "`misc/embedman.bat all`").

If you also want to install a debugging version of the library (highly recommended), now type "`make install DEBUGMODE=1`". Case is important, so it must be `DEBUGMODE`, not `debugmode`!

If you also want to install a profiling version of the library, now type "`make install PROFILEMODE=1`".

If you want statically linked libraries as well as the default DLLs, pass additionally "`STATICLINK=1`" to the make commands above.

If your copy of Allegro doesn't include the `makefile.dep` dependency files (unlikely, unless you have run "`make veryclean`" at some point or are building the SVN version), you can regenerate them by running "`make depend`".

If your copy of Allegro doesn't include the linker .def file (unlikely, unless you have run "`make veryclean`" at some point or are building the SVN version), you can regenerate it by running "`misc\fixdll.bat`". Cygwin users can run "`misc/fixdll.sh`" instead.

Once the build is finished you can recover some disk space by running "`make compress`", which uses the UPX program to compress the executable files and the optimized dll. Before running "`make compress`", you must set the environment variable UPX_BIN to point to `upx.exe`. You will have to do run "`make compress`" before "`make install`" if you want the compressed dll to be copied to the windows directory. To recover even more disk space, you can run "`make clean`" to get rid of all the temporary files and HTML format documentation.

# Using Allegro

All the Allegro functions, variables, and data structures are defined in `allegro.h`. You should include this in your programs, and link with one of the libraries:

>           alleg.lib       - optimised DLL import library
>           alld.lib        - debugging DLL import library
>           allp.lib        - profiling DLL import library
>           alleg_s.lib     - statically linked optimised library
>           alld_s.lib      - statically linked debugging library
>           allp_s.lib      - statically linked profiling library
>           alleg_s_crt.lib - statically linked optimised library
>                                with the static C runtime

All above library configurations could be built with `ALLEGRO_USE_C` option which would add a "_c" suffix to them. When linking your program to such a library, you must define the preprocessor symbol `ALLEGRO_NO_ASM` before including any of the Allegro headers.

When using a statically linked library, you must define the preprocessor symbol `ALLEGRO_STATICLINK` before including any of the Allegro headers and link your program against Allegro and the main Win32/DirectX libraries in that order (see the variable `LIBRARIES` in `makefile.vc`). You have also to make sure that your program is linked against the right C run-time library, ie. the multi-threaded DLL version of MSVCRT (or the debug version if you are using the debug library). You can change this option at Project - Settings - C/C++ - Category: Code Generation - Use run-time library.

Don't forget that you need to use the `END_OF_MAIN()` macro right after your `main()` function!

If you use one of the DLL versions, you will obviously need to distribute the appropriate DLL along with your program: these can be found in the `allegro/lib/msvc/` directory.

The alleg_s_crt.lib is most useful with Visual C++ 8.0. The new C runtime that it uses can be difficult to distribute. By using alleg_s_crt.lib along with the multi-threaded runtime (/MT) you can avoid the problem. For more information on deploying with VC++ 8.0, see http://wiki.allegro.cc/VisualCExpress2005#Deployment.