1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565
|
----------------------------------------------------------------
HOW TO BUILD HERCULES FOR WINDOWS WITH MICROSOFT VISUAL C
----------------------------------------------------------------
This file gives some hints on how you can build Hercules for
the Microsoft Windows environment using the Visual C/C++
compiler, without the need for Cygwin or Mingw.
SETTING UP THE ENVIRONMENT VARIABLES
Run this .cmd file to set the PATH, INCLUDE, and LIB variables:
@echo off
path=%MSSdk%\bin\Win64;%PATH%
Call "%VCToolkitInstallDir%vcvars32.bat"
Call "%MSSdk%\setenv" /XP32 /RETAIL
Additional Note regarding environment variables: if you are using the
makefile.bat && makefile-dllmod.msvc to build Herc (see further below)
you may also wish to define the ZLIB_DIR and BZIP2_DIR variables in
order for Herc to support ZLIB && BZIP2 disk/tape compression. See also
the "Note Regarding ZLIB_DIR" and "Obtaining ZLIB" sections further
below (as well as the ones for BZIP2) for further information regarding
building Herc with compression support.
THE BUILD COMMAND
Before you can build Hercules, you must install the Visual C++ compiler
and the Windows SDK, as well as the msvcrt.lib file as explained below.
As an alternative, you may install Visual Studio (version 7 or above)
To build the MSVC version of Hercules:
nmake /f makefile-dllmod.msvc
The executable modules are placed in the msvc.dllmod.bin subdirectory.
DOWNLOAD THE MICROSOFT VISUAL C++ COMPILER AND SDK
http://msdn.microsoft.com/visualc/vctoolkit2003/
The Microsoft Visual C++ Toolkit 2003 includes the command line
versions of the Visual C/C++ compiler and linker, as well as the
standard C/C++ Library.
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
The Windows Server 2003 Core SDK contains the include files and
libraries needed to create applications for Win95/98/ME/NT/2000/XP.
Notes:
1. You may need to add "download.microsoft.com" to the Internet
Explorer trusted zone before you can install the SDK
2. You also need to download "Build Environment Intel 64 bit" to
obtain the nmake utility in mssdk/bin/win64
HOW TO OBTAIN THE MSVCRT.LIB FILE
If you want to build the DLL version of Hercules then you will
also need the Microsoft file msvcrt.lib which is not included in
the free Visual C++ Toolkit 2003. You can however obtain this
file by downloading and installing the
".NET Framework Version 1.1 Software Development Kit (SDK)"
which is available as a free download from:
http://msdn.microsoft.com/netframework/downloads/updates/default.aspx
Be aware, however, that this is a 108MB download, of which the only
directory you need is
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\lib
After installation, copy msvcrt.lib from this directory to
c:\Program Files\Microsoft Visual C++ Toolkit 2003\lib
You may also want to copy nmake.exe and msvcr71.dll from
C:\Program Files\Microsoft.NET\v1.1\Bin
after which you can delete the .NET Framework SDK.
GCC EXTENSIONS TO BE AVOIDED
1. Variadic macro definitions, eg #define logmsg(format,parms...)
2. __attribute__((unused)) should be replaced by UNREFERENCED macro
3. void* pointer arithmetic, eg (void*)p + 1
4. __attribute__((packed))
C99 EXTENSIONS TO BE AVOIDED
1. Field names in structure initialisers.
--rbowler
==============================================================================
How to build Hercules using Visual Studio IDE:
A default makefile Visual Studio .dsw workspace file and .dsp project file
are included as part of the Hercules distribution now. Open the workspace
in Developer Studio and simply click build or buildall. It's that simple.
The default makefile project simply invokes makefile.bat which in turn just
invokes nmake for makefile.msvc (after calling a few key bat files to setup
the build environment).
Note that we're presuming here that you've already installed the Visual C++
Toolkit 2003. If you haven't, then none of this will work right; you'll get
a bunch of build errors. You need their latest compiler as Roger explained
furher above at the beginning of this document.
==============================================================================
C/C++ COMPILER OPTIONS
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.10.3077 for 80x86
Copyright (C) Microsoft Corporation 1984-2002. All rights reserved.
-OPTIMIZATION-
/O1 minimize space /Op[-] improve floating-pt consistency
/O2 maximize speed /Os favor code space
/Oa assume no aliasing /Ot favor code speed
/Ob<n> inline expansion (default n=0) /Ow assume cross-function aliasing
/Od disable optimizations (default) /Ox maximum opts. (/Ogityb2 /Gs)
/Og enable global optimization /Oy[-] enable frame pointer omission
/Oi enable intrinsic functions
-CODE GENERATION-
/G3 optimize for 80386 /Gh enable _penter function call
/G4 optimize for 80486 /GH enable _pexit function call
/G5 optimize for Pentium /GR[-] enable C++ RTTI
/G6 optimize for PPro, P-II, P-III /GX[-] enable C++ EH (same as /EHsc)
/G7 optimize for Pentium 4 or Athlon /EHs enable C++ EH (no SEH exceptions)
/GB optimize for blended model (default) /EHa enable C++ EH (w/ SEH exceptions)
/Gd __cdecl calling convention /EHc extern "C" defaults to nothrow
/Gr __fastcall calling convention /GT generate fiber-safe TLS accesses
/Gz __stdcall calling convention /Gm[-] enable minimal rebuild
/GA optimize for Windows Application /GL[-] enable link-time code generation
/Gf enable string pooling /QIfdiv[-] enable Pentium FDIV fix
/GF enable read-only string pooling /QI0f[-] enable Pentium 0x0f fix
/Gy separate functions for linker /QIfist[-] use FIST instead of ftol()
/GZ Enable stack checks (/RTCs) /RTC1 Enable fast checks (/RTCsu)
/Ge force stack checking for all funcs /RTCc Convert to smaller type checks
/Gs[num] control stack checking calls /RTCs Stack Frame runtime checking
/GS enable security checks /RTCu Uninitialized local usage checks
/clr[:noAssembly] compile for the common language runtime
noAssembly - do not produce an assembly
/arch:<SSE|SSE2> minimum CPU architecture requirements, one of:
SSE - enable use of instructions available with SSE enabled CPUs
SSE2 - enable use of instructions available with SSE2 enabled CPUs
-OUTPUT FILES-
/Fa[file] name assembly listing file /Fo<file> name object file
/FA[sc] configure assembly listing /Fp<file> name precompiled header file
/Fd[file] name .PDB file /Fr[file] name source browser file
/Fe<file> name executable file /FR[file] name extended .SBR file
/Fm[file] name map file
-PREPROCESSOR-
/AI<dir> add to assembly search path /Fx merge injected code to file
/FU<file> forced using assembly/module /FI<file> name forced include file
/C don't strip comments /U<name> remove predefined macro
/D<name>{=|#}<text> define macro /u remove all predefined macros
/E preprocess to stdout /I<dir> add to include search path
/EP preprocess to stdout, no #line /X ignore "standard places"
/P preprocess to file
-LANGUAGE-
/Zi enable debugging information /Ze enable extensions (default)
/ZI enable Edit and Continue debug info /Zl omit default library name in .OBJ
/Z7 enable old-style debug info /Zg generate function prototypes
/Zd line number debugging info only /Zs syntax check only
/Zp[n] pack structs on n-byte boundary /vd{0|1} disable/enable vtordisp
/Za disable extensions (implies /Op) /vm<x> type of pointers to members
/Zc:arg1[,arg2] C++ language conformance, where arguments can be:
forScope - enforce Standard C++ for scoping rules
wchar_t - wchar_t is the native type, not a typedef
-MISCELLANEOUS-
@<file> options response file /wo<n> issue warning n once
/?, /help print this help message /w<l><n> set warning level 1-4 for n
/c compile only, no link /W<n> set warning level (default n=1)
/H<num> max external name length /Wall enable all warnings
/J default char type is unsigned /Wp64 enable 64 bit porting warnings
/nologo suppress copyright message /WX treat warnings as errors
/showIncludes show include file names /WL enable one line diagnostics
/Tc<source file> compile file as .c /Yc[file] create .PCH file
/Tp<source file> compile file as .cpp /Yd put debug info in every .OBJ
/TC compile all files as .c /Yl[sym] inject .PCH ref for debug lib
/TP compile all files as .cpp /Yu[file] use .PCH file
/V<string> set version string /YX[file] automatic .PCH
/w disable all warnings /Y- disable all PCH options
/wd<n> disable warning n /Zm<n> max memory alloc (% of default)
/we<n> treat warning n as an error
-LINKING-
/MD link with MSVCRT.LIB /MDd link with MSVCRTD.LIB debug lib
/ML link with LIBC.LIB /MLd link with LIBCD.LIB debug lib
/MT link with LIBCMT.LIB /MTd link with LIBCMTD.LIB debug lib
/LD Create .DLL /F<num> set stack size
/LDd Create .DLL debug library /link [linker options and libraries]
==============================================================================
C/C++ COMPILER OPTIONS
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.42 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
-OPTIMIZATION-
/O1 minimize space /O2 maximize speed
/Ob<n> inline expansion (default n=0) /Od disable optimizations (default)
/Og enable global optimization /Oi[-] enable intrinsic functions
/Os favor code space /Ot favor code speed
/Ox maximum optimizations /Oy[-] enable frame pointer omission
-CODE GENERATION-
/GF enable read-only string pooling /Gm[-] enable minimal rebuild
/Gy[-] separate functions for linker /GS[-] enable security checks
/GR[-] enable C++ RTTI /GX[-] enable C++ EH (same as /EHsc)
/EHs enable C++ EH (no SEH exceptions) /EHa enable C++ EH (w/ SEH exceptions)
/EHc extern "C" defaults to nothrow
/fp:<except[-]|fast|precise|strict> choose floating-point model:
except[-] - consider floating-point exceptions when generating code
fast - "fast" floating-point model; results are less predictable
precise - "precise" floating-point model; results are predictable
strict - "strict" floating-point model (implies /fp:except)
/GL[-] enable link-time code generation /GA optimize for Windows Application
/Ge force stack checking for all funcs /Gs[num] control stack checking calls
/Gh enable _penter function call /GH enable _pexit function call
/GT generate fiber-safe TLS accesses /RTC1 Enable fast checks (/RTCsu)
/RTCc Convert to smaller type checks /RTCs Stack Frame runtime checking
/RTCu Uninitialized local usage checks
/clr[:option] compile for common language runtime, where option is:
pure - produce IL-only output file (no native executable code)
safe - produce IL-only verifiable output file
oldSyntax - accept the Managed Extensions syntax from Visual C++ 2002/2003
initialAppDomain - enable initial AppDomain behavior of Visual C++ 2002
noAssembly - do not produce an assembly
/Gd __cdecl calling convention /Gr __fastcall calling convention
/Gz __stdcall calling convention /GZ Enable stack checks (/RTCs)
/QIfist[-] use FIST instead of ftol()
/hotpatch ensure function padding for hotpatchable images
/arch:<SSE|SSE2> minimum CPU architecture requirements, one of:
SSE - enable use of instructions available with SSE enabled CPUs
SSE2 - enable use of instructions available with SSE2 enabled CPUs
-OUTPUT FILES-
/Fa[file] name assembly listing file /FA[scu] configure assembly listing
/Fd[file] name .PDB file /Fe<file> name executable file
/Fm[file] name map file /Fo<file> name object file
/Fp<file> name precompiled header file /Fr[file] name source browser file
/FR[file] name extended .SBR file
/doc[file] process XML documentation comments and optionally name the .xdc file
-PREPROCESSOR-
/AI<dir> add to assembly search path /FU<file> forced using assembly/module
/C don't strip comments /D<name>{=|#}<text> define macro
/E preprocess to stdout /EP preprocess to stdout, no #line
/P preprocess to file /Fx merge injected code to file
/FI<file> name forced include file /U<name> remove predefined macro
/u remove all predefined macros /I<dir> add to include search path
/X ignore "standard places"
-LANGUAGE-
/Zi enable debugging information /Z7 enable old-style debug info
/Zp[n] pack structs on n-byte boundary /Za disable extensions
/Ze enable extensions (default) /Zl omit default library name in .OBJ
/Zg generate function prototypes /Zs syntax check only
/vd{0|1|2} disable/enable vtordisp /vm<x> type of pointers to members
/Zc:arg1[,arg2] C++ language conformance, where arguments can be:
forScope[-] - enforce Standard C++ for scoping rules
wchar_t[-] - wchar_t is the native type, not a typedef
/ZI enable Edit and Continue debug info
/openmp enable OpenMP 2.0 language extensions
-MISCELLANEOUS-
@<file> options response file /?, /help print this help message
/bigobj generate extended object format /c compile only, no link
/errorReport:option Report internal compiler errors to Microsoft
none - do not send report
prompt - prompt to immediately send report
queue - at next admin logon, prompt to send report (default)
send - send report automatically
/FC use full pathnames in diagnostics /H<num> max external name length
/J default char type is unsigned /nologo suppress copyright message
/showIncludes show include file names /Tc<source file> compile file as .c
/Tp<source file> compile file as .cpp /TC compile all files as .c
/TP compile all files as .cpp /V<string> set version string
/w disable all warnings /wd<n> disable warning n
/we<n> treat warning n as an error /wo<n> issue warning n once
/w<l><n> set warning level 1-4 for n /W<n> set warning level (default n=1)
/Wall enable all warnings /WL enable one line diagnostics
/WX treat warnings as errors /Yc[file] create .PCH file
/Yd put debug info in every .OBJ /Yl[sym] inject .PCH ref for debug lib
/Yu[file] use .PCH file /Y- disable all PCH options
/Zm<n> max memory alloc (% of default) /Wp64 enable 64 bit porting warnings
-LINKING-
/LD Create .DLL /LDd Create .DLL debug library
/LN Create a .netmodule /F<num> set stack size
/link [linker options and libraries] /MD link with MSVCRT.LIB
/MT link with LIBCMT.LIB /MDd link with MSVCRTD.LIB debug lib
/MTd link with LIBCMTD.LIB debug lib
==============================================================================
*** NOTE REGARDING PRECOMPILED HEADERS ***
EACH AND EVERY source file must start with :
#include "hstdinc.h"
These contain the system headers (those enclosed in <>) and that are not
dependent on the guest architecture.
This file, along with build_pch.c allows building a precompiled header file
that significantly speeds up the MSVC Windows build.
I REPEAT !!
EACH AND EVERY SOURCE FILE MUST START WITH THIS FILE !!
No macros (#define).. No nothing.
--Ivan
*** NOTE REGARDING ZLIB_DIR ***
ZLIB_DIR defines the location of the ZLIB libraries
If ZLIB_DIR is undefined, then an attempt is made to locate the ZLIB
library in winbuild\zlib\win32_32
If ZLIB_DIR contains a bad path, nmake exits with an error EXCEPT if
ZLIB_DIR is set to the special keyword "NONE".
ZLIB_DIR should contain the *BASE* path for ZLIB. That means that
the following files are expected :
- $(ZLIB_DIR)\zlib1.dll
- $(ZLIB_DIR)\lib\zdll.lib
- $(ZLIB_DIR)\include\zlib.h
- $(ZLIB_DIR)\include\zconf.h
REMEMBER TO "nmake clean" if the build type is changed, the ZLIB location
modified, etc..
NOTE : The zlib1.dll Dynamic Link Library will be copied to the appropriate
build target directory as part of the build process in order to ensure that
the DLL is obtainable by the platform PE(*) loader at run time.
--Ivan
(*) PE stands for Program Executable and designates WIndows .EXE & .DLL
executable file formats.
*** Obtaining ZLIB ***
Building from the distributed hercules source tree does not by default
incorporate ZLIB as a compression mechanism, since
1) ZLIB is an external project, completelly separate from the hercules
project itself.
2) MS Windows (tm) does not provide any well known location (if at all) for
the ZLIB library runtime and/or header files.
.. Therefore ..
In order for HERCULES to be built with ZLIB support (DASD, TAPE), go
to http://www.zlib.net - and locate the download for the 'zlib compiled DLL'.
NOTE : This is a 75KB download.
Extract that ZIP file to the winbuild\zlib\win32_32 directory, relative to
the source directory.
You may extract the file to an alternate location, and then set the ZLIB_DIR
environment variable accordingly (as explained above).
The hercules project is currently known to succesfully build with
version 1.2.2 (current at the time of writing) of the ZLIB compression library.
ZLIB is a compression algorithm written by Jean Loup Gailly and Mark Adler.
ZLIB is used in the hercules project pursuant to the ZLIB License
(http://www.zlib.net/zlib_license.html).
In source form, the hercules project DOES NOT contain ZLIB.
In Binary form, the hercules project MAY contain an UNMODIFIED version of
the ZLIB runtime.
--Ivan
*** NOTE REGARDING BZIP2_DIR ***
BZIP2_DIR defines the location of the BZIP2 libraries. If BZIP2_DIR is undefined,
If BZIP2_DIR contains a bad path, nmake exits with an error EXCEPT if BZIP2_DIR
is set to the special keyword "NONE". BZIP2_DIR should contain the *BASE* path for
BZIP2. That means that the following files are expected:
- $(BZIP2_DIR)\bzlib.h
- $(BZIP2_DIR)\libbz2.lib
- $(BZIP2_DIR)\libbz2.dll
REMEMBER TO "nmake clean" if the build type is changed, the BZIP2_DIR location
modified, etc..
NOTE : The libbz2.dll Dynamic Link Library will be copied to the appropriate
build target directory as part of the build process in order to ensure that
the DLL is obtainable by the platform PE(*) loader at run time.
-- Fish (copied blatantly from Ivan's ZLIB documentation further above)
(*) PE stands for Program Executable and designates WIndows .EXE & .DLL
executable file formats.
*** Obtaining BZIP2 ***
Building from the distributed Hercules source tree does not by default
incorporate BZIP2 as a compression mechanism, since
1) BZIP2 is an external project, completelly separate from the Hercules
project itself.
2) MS Windows (tm) does not provide any well known location (if at all) for
the BZIP2 library runtime and/or header files.
.. Therefore ..
In order for HERCULES to be built with BZIP2 support (DASD, TAPE), go to
"http://www.bzip.org/downloads.html" and locate the hyperlink entitled:
"Here is the 1.0.3 source tarball , which includes full documentation.
md5: 8a716bebecb6e647d2e8a29ea5d8447f"
(Yep, that's right! You're going to have to build the BZIP2 dll for yourself
from source!) (either that or obtain a pre-built copy of it (and associated
header/lib files) from someone else you trust). NOTE: This is a 650KB download,
and the file is in tar.gz format, so you'll need WinZip or other utility to
unzip it.
Extract the files to a directory of your choosing and build the DLL using
the supplied makefile.msc. Once it's built, then copy the resulting DLL, lib,
and bzip2.h header file to your defined BZIP2_DIR location and rebuild Herc.
BZIP2 is a freely available (open-source (BSD-style) license), patent free
(as far as the author knows), high-quality data compressor
written by Julian R Seward. It typically compresses files to within 10% to
15% of the best available techniques (the PPM family of statistical compressors),
whilst being around twice as fast at compression and six times faster at decompression.
In source form, the Hercules project does not contain any BZIP2 source code at all.
In binary form however, the Hercules project may include an unmodified version
of the BZIP2 runtime DLL in addition to its own distribution binaries.
-- Fish (updated 2005-12-02)
***********************************************************************
(( U N R E S O L V E D I S S U E S ))
((( ** TO DO ** )))
(in no particular order)
We still have some shutdown synchronization issues. I'll try to
eventually design something to try and address it, but for now it'll
have to wait until later.
HercGUI/Hercules: CPU utilization too high. All indications are that
this is simply due to the inefficient design of dyngui.c <--> HercGUI
communication (it's the constant device status updates that's causing
it). dyngui.c was reworked to be slightly more efficient wrt reporting
device status back to the GUI, but only works with a version of the
GUI that knows how to request dyngui to use the newer device status
reporting technique. (Note: I've already made the necessary changes to
the existing GUI and will release it at the same time as the new Herc.)
Add **>> ALL NEW SOURCE FILES <<** to makefile.am
(Ivan? Did you do this already??)
We should review the "makefile.w32" and "makefile.generic"
files to make sure they're still current (or possibly delete
the "makefile.w32" file altogether now that we have an MSVC
port).
MUST CONTINUE TO BUILD CORRECTLY FOR/ON NON-WIN32 PLATFORMS!
Each change to the build environment (and to Herc too!) should involve
a test build of all the other supported platforms (linux, apple, etc)
to make sure they continue to build properly too.
nls (National Language Support): Windows supports it and I know how to
do it, but I just haven't sat down and figured out what needs to be done
to get us there, that's all. <shrug>
Maybe move hscutl2 into w32util and get rid of of hscutl2?? (it's just
a thought and purely optional; just thought I'd mention it)
--------------------------------------------------------------
TESTING TESTING TESTING TESTING TESTING TESTING TESTING TESTING
- get Wayne (aka "somitcw") to test more than 16 connected TN3270 sessions...
- all utilities: (I suspect they'll all work just fine, but I'm
listing them here individually for thoroughness)
- cckdcdsk
- cckdcomp
- cckddiag
- cckdfix
- cckdswap
- dasdcat
- dasdconv
- dasdcopy
- dasdinit works fine
- dasdisup
- dasdload
- dasdls
- dasdpdsu
- dasdseq
- dmap2hrc
- hercifc
- herclin
- hetget
- hetinit
- hetmap
- hetupd
- tapecopy
- tapemap
- tapesplt
***********************************************************************
MSVC AND CRYPTO
Bernard Van Der Helm's crypto modules (Message Security Assist 1 & 2 Feature)
is now built automatically as part of the MSVC build.
Should it be necessary to build a version *WITHOUT* the crypto DLL, it is
possible to instruct the makefile-dllmod.msvc file to bypass building that
particular code by defining the environment variable NOCRYPTO.
Nov 22nd 2005
--Ivan Warren
***********************************************************************
|