This is the README file for DJ's GCC port to DOS ("djgpp") Contents: * Overview * What's available * How to install * Deviations and Caveats * Copyright information Disclaimer: This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. DJ Delorie USmail: 24 Kirsten Ave, Rochester, NH 03867-2954, USA email: dj@ctron.com mailing list: djgpp@sun.soe.clarkson.edu (listserv@sun.soe.clarkson.edu) djgpp-announce@sun.soe.clarkson.edu (listserv@sun.soe.clarkson.edu) Overview: This package contains a 32-bit 80386 DOS extender with symbolic debugger, a C/C++ compiler with utilities, development libraries, and source code. It generates full 32-bit programs and supports full virtual memory with paging to disk. Requirements: A 80386-based IBM compatible PC or PS/2, approximately 4-5Mb of hard drive space, and 512K RAM. Available extended (or expanded under VCPI) memory is strongly recommended. Supported Wares: * Up to 128M of extended memory (expanded under VCPI) * Up to 128M of disk space used for swapping * SuperVGA 256-color mode up to 1024x768 * 80387 * XMS & VDISK memory allocation strategies * VCPI programs, such as QEMM, DESQview, and 386MAX * DPMI programs, such as Windows 3.x, OS/2, and QDPMI Unsupported: * Multiprocessing (fork()) File location: host: omnigate.clarkson.edu login: ftp password: send your e-mail address directory: ~ftp/pub/msdos/djgpp Many thanks to the sysops at Clarkson for providing a home to djgpp! As a convenience to non-FTP users, djgpp is also stored on Clarkson's archive server. To access the archive server, do this: % mail archive-server@omnigate.clarkson.edu Subject: help index msdos/djgpp ^D NOTE: In accordance with FSF CopyLeft, you are not allowed to upload this program to a distribution site unless you upload the source modules with any binary module you upload. Please read the file COPYING for more details. NOTE: If your application links in object modules that were written by FSF, your application counts as a "derived work" and must obey the provisions of the FSF Copyrights. See the file COPYING for details. All FSF source-based libraries are in the file libgpl.a. The mere act of compiling does not affect the copyright status of your program. INSTALLING: To install, you must do the following: * Create a "temp" directory, like c:\tmp. * Create a directory to install in, like c:\djgpp. * Un-zip the appropriate zipfiles in the install directory. C:\DJGPP> pkunzip -d -o djdev110.zip C:\DJGPP> pkunzip -d -o gas211bn.zip C:\DJGPP> pkunzip -d -o gcc241bn.zip C:\DJGPP> pkunzip -d -o bnu22bn.zip * Add the following lines to C:\CONFIG.SYS file (or edit existing files= and shell= lines as appropriate). The files= line prevents "too many open files" errors when compiling, and the shell= line prevents "Out of environment space" errors when setting lots of environment variables. files=15 shell=c:\command.com c:\ /e:600 /p The values 15 and 600 are close to minimal. You may want to increase them to provide a little more margin. * Add the following lines to C:\AUTOEXEC.BAT: set COMPILER_PATH=c:/djgpp/bin set C_INCLUDE_PATH=c:/djgpp/include set CPLUS_INCLUDE_PATH=c:/djgpp/cplusinc;c:/djgpp/include ^^^ only needed if you are compiling c++ programs set OBJC_INCLUDE_PATH=c:/djgpp/include ^^^ only needed if you are compiling objective-C programs set OBJCPLUS_INCLUDE_PATH=c:/djgpp/include ^^^ only needed if you are compiling objective-C++ programs set LIBRARY_PATH=c:/djgpp/lib set TMPDIR=c:/tmp ^^^ this is where gcc's temp files go set GO32TMP=c:/tmp ^^^ this is where your paging file goes - if not set, the variables TMP and TEMP are checked in that order set GO32=ansi driver c:/djgpp/drivers/SOMETHING.grd gw 1024 gh 768 ^^^ whatever driver works with your VGA (optional) set BISON_SIMPLE=c:/djgpp/lib/bison.simple ^^^ only needed if you use bison set BISON_HAIRY=c:/djgpp/lib/bison.hairy ^^^ only needed if you use bison set FLEX_SKELETON=c:/djgpp/lib/flex.skeleton ^^^ only needed if you use flex Remember that unless you manually type these at the command line, they won't take effect until you reboot. Don't include the "ansi" keyword in the "go32" variable if you don't have an ANSI.SYS driver or equivalent. * Add your binaries directory to your PATH in C:\AUTOEXEC.BAT SET PATH= . . . ;C:\DJGPP\BIN That's it! djgpp is now installed on your system. The GO32 environment variable: This variable controls the options available in go32 or debug32. The syntax of this variable is: SET GO32=[parm [value]] [parm [value]] . . . Parameters: ansi Use ANSI commands to control the color in debug32 mono Use the Monochrome monitor for debugging - useful when debugging graphics applications 1rm Redirect stdout (file #1) to the monochrome monitor 2rm Redirect stderr (file #2) to the monochrome monitor 1r2 Redirect stdout (file #1) to stderr (file #2) 2r1 Redirect stderr (file #2) to stdout (file #1) glob enable globbing (default) noglob disable globbing emu [path] Use the specified file as the 80387 emulator driver [path] Use the specified file as the graphics driver gw [width] Default graphics width gh [height] Default graphics height tw [width] Default text width th [height] Default text height nc [colors] Number of colors (for new-style drivers only - see cbgrx*.zip) These parameters may occur in any order. Note that "1rm" and "2rm" are done before "1r2" and "2r1", so "1rm 2r1" sends stdout to the mono monitor and stderr to any redirection used. Examples: C:\> set GO32=mono driver c:\djgpp\drivers\tseng4k.grd gw 1024 gh 768 tw 132 th 43 nc 256 C:\> set GO32=ansi C:\> set GO32=driver c:\djgpp\drivers\tseng4k.grd ansi C:\> set GO32=mono 1rm 2rm Deviations and Caveats: GCC/G++ deviates from the U**x version in a number of ways, mostly to accomodate deficiencies in the MS-DOS environment, and my own laziness. * An 80387 is required to do floating point. An emulator is provided. cc1 and cc1plus shouldn't use the 387 unless compiling floating point code. The environment variable "387" can override the auto-detection routine: SET 387=YES to force 387 handlers to be enabled SET 387=NO to force 387 accesses to fault SET 387=QUERY to get a message showing the results of the auto-detection If no 80387 is present and the program attempts to use it, a message indicating where the instruction is will be displayed. To use the 387 emulator, add "emu c:\djgpp\emu387\emu387" to the GO32 environment variable. Specifying use of the emulator overrides the "387" environment variable and autodetection code. * The VDISK method of allocating extended memory is supported. The INT 15h method is also. When the extender runs out of conventional and extended memory, it uses a paging file named $(GO32TMP)/pgXXXXXX.386, where XXXX is an unspecified hex value. This file is normally removed on exit. * Up to 128 MB of physical memory and 128 MB of disk swap space are allowed. A 512K machine is sufficient, but very slow due to paging. * The utilies support the MS-DOS standard response file method for giving more than 128 bytes of command line. Example: "gcc -o foo @foo.lnk" where foo.lnk contains a list of .o files. Wildcard expansion (globbing) is performed on the parameters, unless they are surrounded by single quotes. Double quotes can be used to prevent spaces from separating arguments. Also supported is the GNUish-DOS method of passing arguments in environment variables. * Since MS-DOS does not distinguish case in file names, some .h files used for C++ have had underscores prepended to them to avoid conflict (ie: String.h conflicts with string.h, so it became _String.h). * The extender can be added to any gcc-compiled program by copying go32.exe to be .exe, where is the 32-bit program. For example, if "hello" is a gcc-compiled a.out file, and "hello.exe" is a copy of go32.exe, then when "hello.exe" runs, it loads the file called "hello" in the same directory, and executes it if present. Otherwise, the first parameter is the executable (ie: go32 cc1plus foo.cc). * The extender can be merged to create one .exe file that is the extender and the executable in one file, by using the stub.exe program: copy /b stub.exe+myprog myprog.exe -or- aout2exe myprog This will only work if go32.exe is in your search path, because stub.exe runs it. Alternatively, you can prepend go32.exe itself to an a.out file to get a single executable (stub.exe is much smaller). Note that if you re-compile go32 or stub, you must strip off the symbol table first. Also note that aout2exe is designed to align the executable image for better performance, so aout2exe'd programs will run faster than those built with copy /b. * The extender runs programs at logical address 0. A copy of the first 1 MB of physical memory (including the AT channel) is mapped to 0xE0000000 in the program's address space. The stack grows down from 0x7FFFFFFC in the program's address space. Data usually starts at 0x00400000. These numbers may be different under DPMI. * The paging mechanism understands how SuperVGA's map their memory onto the AT bus and automatically swaps pages as the program tries to access them. The program sees a linear range from 0xD0000000 to 0xD0100000 that corresponds to each pixel in the 256-color modes of SuperVGAs. To use this feature, you'll have to set the GO32 environment variable like this: C>set go32=driver c:\djgpp\drivers\tseng4k.grd gw 640 gh 480 tw 132 th 43 These parameter pairs can be omitted or rearranged as needed. They are the "driver" name, default graphics width and height, and default text width and height. Libgr.a doesn't have to be recompiled, nor do graphics programs, when a different graphics mode is selected (the extender handles it). It is strongly recommended that the program use the GR_default_graphics and GR_default_text modes to switch to graphics or text. These modes use the parameters specified by the GO32 environment variable, allowing the user to select a favorite graphics and text mode. * Symbols are stored in virtual memory, so you won't run out of symbol space until both extended memory and the disk are all used up. For large programs, you might notice a slight delay while it looks up symbols. Programs with a lot of lines in a given module may run out of memory as the line number table is built in real memory and transferred to virtual memory. * Signals are not reported to the program. However, interrupts do continue to get serviced while in protected mode (ie: keypress, timer, etc). CTRL-C will get you back to the debugger in debug32, and you can continue from where you stopped. All signals (ie: exceptions) cause debugging traps in debug32, or general faults in go32. Copyright Information: * Source code for the GNU utilities is copyright (c) Free Software Foundation. For more information on the FSF copyright, see their source code or write Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. A copy of their file "COPYING" is included in the docs directory. Some of the FSF source code has been modified to operate properly in the MS-DOS environment. * Source code for most of libc.a are copyright (c) Regents of the University of California. These files include copyright information in them. The utilities are compiled against these libraries, and thus contain software developed by the University of California, Berkeley, and its contributors. Some of the BSD source code has been modified to operate properly in the MS-DOS environment. * Any sources not falling under the copyrights of FSF or UCB (as above) are Copyright (c) 1991 DJ Delorie, 24 Kirsten Ave, Rochester NH 03867-2954. To contact me via E-Mail, sent to "dj@ctron.com". Cabletron Systems Inc is in no way involved with this project; I just happen to work for them during the day. Terms and Conditions: * Source code copyright FSF is distributed under the terms of the GNU Public General License. See the file "COPYING" in doc.arc for more information. If your program links in object modules (in libc.a) that are compiled from GNU sources, then your entire program must be distributed under the terms of the GNU GPL as a "derived work". These modules are the C++ class library (including the streams classes) and obstacks, and are restricted to the libgpl.a lbrary. The sources in libsrc have the copyright notices in them for the various modules. * Source code copyright UCB is distributed under the terms listed in the UCB source code itself. * Source code copyright DJ Delorie is distributed under the terms of the file "copying.dj". * Changes to source code copyright BSD or FSF are copyright DJ Delorie, but fall under the terms of the original copyright. Donations may be made to any of the following: DJ Delorie 24 Kirsten Ave Rochester, NH 03867-2954 USA Free Software Foundation 675 Mass Ave Cambridge, MA 02139 USA Computer Systems Research Group Computer Science Division, EECS University of California Berkeley, California 94720 USA