From a614dd717420b3713f629f8eabe5607c550dedcd Mon Sep 17 00:00:00 2001 From: rubidium Date: Wed, 26 Nov 2008 13:12:45 +0000 Subject: [PATCH] (svn r14636) -Add: DOS port of OpenTTD, without network support though. --- Makefile.bundle.in | 6 + Makefile.in | 1 + Makefile.src.in | 4 + config.lib | 40 +- configure | 2 +- os/dos/copying | 339 +++++++++++++++++ os/dos/copying.dj | 48 +++ os/dos/copying.lib | 481 ++++++++++++++++++++++++ os/dos/cwsdpmi.exe | Bin 0 -> 20125 bytes os/dos/cwsdpmi.txt | 173 +++++++++ os/dos/cwsdstub.exe | Bin 0 -> 21504 bytes os/dos/exe2coff.c | 94 +++++ os/dos/make_dos_binary_selfcontained.sh | 9 + readme.txt | 17 +- source.list | 5 +- src/fileio.cpp | 8 +- src/intro_gui.cpp | 2 + src/lang/english.txt | 1 + src/os_timer.cpp | 2 +- src/stdafx.h | 4 +- src/video/allegro_v.cpp | 18 +- 21 files changed, 1225 insertions(+), 29 deletions(-) create mode 100644 os/dos/copying create mode 100644 os/dos/copying.dj create mode 100644 os/dos/copying.lib create mode 100644 os/dos/cwsdpmi.exe create mode 100644 os/dos/cwsdpmi.txt create mode 100644 os/dos/cwsdstub.exe create mode 100644 os/dos/exe2coff.c create mode 100755 os/dos/make_dos_binary_selfcontained.sh diff --git a/Makefile.bundle.in b/Makefile.bundle.in index 998ffac895..f9625f80c0 100644 --- a/Makefile.bundle.in +++ b/Makefile.bundle.in @@ -83,6 +83,12 @@ ifeq ($(shell if test -n "`ls -l \"$(BIN_DIR)/scenario/heightmaps/\"* 2>/dev/nul endif ifeq ($(TTD), openttd.exe) $(Q)unix2dos "$(BUNDLE_DIR)/docs/"* "$(BUNDLE_DIR)/readme.txt" "$(BUNDLE_DIR)/COPYING" "$(BUNDLE_DIR)/changelog.txt" "$(BUNDLE_DIR)/known-bugs.txt" +ifeq ($(OS), DOS) + $(Q)cp "$(ROOT_DIR)/os/dos/cwsdpmi.txt" "$(BUNDLE_DIR)/docs/" +ifndef STRIP + $(Q)cp "$(ROOT_DIR)/os/dos/cwsdpmi.exe" "$(TTD_DIR)/" +endif +endif endif ### Packing the current bundle into several compressed file formats ### diff --git a/Makefile.in b/Makefile.in index 9d004997ac..ed9532b48d 100644 --- a/Makefile.in +++ b/Makefile.in @@ -29,6 +29,7 @@ INSTALL_ICON_THEME_DIR = "$(INSTALL_DIR)/$(ICON_THEME_DIR)" INSTALL_DATA_DIR = "$(INSTALL_DIR)/"!!DATA_DIR!! INSTALL_DOC_DIR = "$(INSTALL_DIR)/"!!DOC_DIR!! BINARY_NAME = !!BINARY_NAME!! +STRIP = !!STRIP!! TTD = !!TTD!! TTDS = $(SRC_DIRS:%=%/$(TTD)) OS = !!OS!! diff --git a/Makefile.src.in b/Makefile.src.in index 7a1bb73844..d6d268d9af 100644 --- a/Makefile.src.in +++ b/Makefile.src.in @@ -259,6 +259,10 @@ else endif ifdef STRIP $(Q)$(STRIP) $@ +ifeq ($(OS), DOS) + $(E) '$(STAGE) Adding CWSDPMI stub to $@' + $(Q)$(ROOT_DIR)/os/dos/make_dos_binary_selfcontained.sh $(SRC_OBJS_DIR)/$@ +endif endif # The targets to compile the endian-code diff --git a/config.lib b/config.lib index a2352b2268..01b41b484e 100644 --- a/config.lib +++ b/config.lib @@ -446,10 +446,10 @@ check_params() { echo " PREPROCESSOR is only available for OSX" exit 1 fi - # OS only allows DETECT, UNIX, OSX, FREEBSD, OPENBSD, MORPHOS, BEOS, SUNOS, CYGWIN, MINGW, OS2, WINCE, and PSP - if [ -z "`echo $os | egrep '^(DETECT|UNIX|OSX|FREEBSD|OPENBSD|NETBSD|HPUX|MORPHOS|BEOS|SUNOS|CYGWIN|MINGW|OS2|WINCE|PSP)$'`" ]; then + # OS only allows DETECT, UNIX, OSX, FREEBSD, OPENBSD, MORPHOS, BEOS, SUNOS, CYGWIN, MINGW, OS2, DOS, WINCE, and PSP + if [ -z "`echo $os | egrep '^(DETECT|UNIX|OSX|FREEBSD|OPENBSD|NETBSD|HPUX|MORPHOS|BEOS|SUNOS|CYGWIN|MINGW|OS2|DOS|WINCE|PSP)$'`" ]; then echo "configure: error: invalid option --os=$os" - echo " Available options are: --os=[DETECT|UNIX|OSX|FREEBSD|OPENBSD|NETBSD|HPUX|MORPHOS|BEOS|SUNOS|CYGWIN|MINGW|OS2|WINCE|PSP]" + echo " Available options are: --os=[DETECT|UNIX|OSX|FREEBSD|OPENBSD|NETBSD|HPUX|MORPHOS|BEOS|SUNOS|CYGWIN|MINGW|OS2|DOS|WINCE|PSP]" exit 1 fi # cpu_type can be either 32 or 64 @@ -511,7 +511,7 @@ check_params() { detect_cputype if [ "$enable_static" = "1" ]; then - if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "MORPHOS" ]; then + if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "MORPHOS" ] || [ "$os" = "DOS" ]; then enable_static="2" else enable_static="0" @@ -521,8 +521,8 @@ check_params() { if [ "$enable_static" != "0" ]; then log 1 "checking static... yes" - if [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ] && [ "$os" != "OSX" ] && [ "$os" != "MORPHOS" ]; then - log 1 "WARNING: static is only known to work on Windows, MacOSX and MorphOS" + if [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ] && [ "$os" != "OSX" ] && [ "$os" != "MORPHOS" ] && [ "$os" != "DOS" ]; then + log 1 "WARNING: static is only known to work on Windows, DOS, MacOSX and MorphOS" log 1 "WARNING: use static at your own risk on this platform" sleep 5 @@ -532,7 +532,7 @@ check_params() { fi if [ "$enable_unicode" = "1" ]; then - if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ]; then + if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "DOS" ]; then enable_unicode="2" else enable_unicode="0" @@ -595,7 +595,10 @@ check_params() { fi fi - if [ "$enable_network" != "0" ]; then + if [ "$enable_network" = "1" ] && [ "$os" = "DOS" ]; then + log 1 "checking network... DOS, skipping" + enable_network=0 + elif [ "$enable_network" != "0" ]; then log 1 "checking network... found" else log 1 "checking network... disabled" @@ -747,6 +750,10 @@ check_params() { log 1 "checking ccache... $ccache" fi + if [ "$os" = "DOS" ]; then + with_threads="0" + fi + if [ "$os" != "OSX" ] && [ "$with_osx_sysroot" != "0" ]; then if [ "$with_osx_sysroot" = "1" ]; then with_osx_sysroot="0" @@ -897,7 +904,7 @@ check_params() { fi if [ "$personal_dir" = "1" ]; then - if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "WINCE" ]; then + if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "WINCE" ] || [ "$os" = "DOS" ]; then personal_dir="OpenTTD" elif [ "$os" = "OSX" ]; then personal_dir="Documents/OpenTTD" @@ -1120,11 +1127,11 @@ make_cflags_and_ldflags() { fi fi - if [ "$os" != "CYGWIN" ] && [ "$os" != "FREEBSD" ] && [ "$os" != "OPENBSD" ] && [ "$os" != "MINGW" ] && [ "$os" != "MORPHOS" ] && [ "$os" != "OSX" ] && [ "$os" != "WINCE" ] && [ "$os" != "PSP" ] && [ "$os" != "OS2" ]; then + if [ "$os" != "CYGWIN" ] && [ "$os" != "FREEBSD" ] && [ "$os" != "OPENBSD" ] && [ "$os" != "MINGW" ] && [ "$os" != "MORPHOS" ] && [ "$os" != "OSX" ] && [ "$os" != "DOS" ] && [ "$os" != "WINCE" ] && [ "$os" != "PSP" ] && [ "$os" != "OS2" ]; then LIBS="$LIBS -lpthread" fi - if [ "$os" != "CYGWIN" ] && [ "$os" != "MINGW" ] && [ "$os" != "WINCE" ]; then + if [ "$os" != "CYGWIN" ] && [ "$os" != "MINGW" ] && [ "$os" != "DOS" ] && [ "$os" != "WINCE" ]; then LIBS="$LIBS -lc" fi if [ "$os" = "WINCE" ]; then @@ -1708,7 +1715,7 @@ detect_awk() { detect_os() { if [ "$os" = "DETECT" ]; then - # Detect UNIX, OSX, FREEBSD, OPENBSD, NETBSD, HPUX, MORPHOS, BEOS, SUNOS, CYGWIN, MINGW, OS2, WINCE, and PSP + # Detect UNIX, OSX, FREEBSD, OPENBSD, NETBSD, HPUX, MORPHOS, BEOS, SUNOS, CYGWIN, MINGW, OS2, DOS, WINCE, and PSP # Try first via dumpmachine, then via uname os=`echo "$host" | tr '[A-Z]' '[a-z]' | $awk ' @@ -1725,6 +1732,7 @@ detect_os() { /cygwin/ { print "CYGWIN"; exit} /mingw/ { print "MINGW"; exit} /os2/ { print "OS2"; exit} + /dos/ { print "DOS"; exit} /wince/ { print "WINCE"; exit} /psp/ { print "PSP"; exit} '` @@ -1749,7 +1757,7 @@ detect_os() { if [ -z "$os" ]; then log 1 "detecting OS... none detected" log 1 "I couldn't detect your OS. Please use --os=OS to force one" - log 1 "Allowed values are: UNIX, OSX, FREEBSD, OPENBSD, NETBSD, MORPHOS, HPUX, BEOS, SUNOS, CYGWIN, MINGW, OS2, WINCE, and PSP" + log 1 "Allowed values are: UNIX, OSX, FREEBSD, OPENBSD, NETBSD, MORPHOS, HPUX, BEOS, SUNOS, CYGWIN, MINGW, OS2, DOS, WINCE, and PSP" exit 1 fi @@ -1789,7 +1797,7 @@ detect_allegro() { # By default on OSX we don't use SDL. The rest is auto-detect if [ "$with_allegro" = "1" ] && [ "$os" = "OSX" ] && [ "$with_cocoa" != "0" ]; then - log 1 "checking SDL... OSX, skipping" + log 1 "checking Allegro... OSX, skipping" allegro_config="" return 0 @@ -2021,6 +2029,8 @@ detect_library() { exit 1 fi + eval "with_$2=0" + return 0 fi @@ -2721,7 +2731,7 @@ showhelp() { echo " --os=OS the OS we are compiling for [DETECT]" echo " DETECT/UNIX/OSX/FREEBSD/OPENBSD/NETBSD/" echo " MORPHOS/HPUX/BEOS/SUNOS/CYGWIN/MINGW/OS2/" - echo " WINCE/PSP" + echo " DOS/WINCE/PSP" echo " --endian=ENDIAN set the endian of the HOST (AUTO/LE/BE)" echo " --revision=rXXXX overwrite the revision detection." echo " Use with care!" diff --git a/configure b/configure index 6e8ff6cd76..60b67373c6 100755 --- a/configure +++ b/configure @@ -50,7 +50,7 @@ save_params make_cflags_and_ldflags EXE="" -if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "OS2" ] || [ "$os" = "WINCE" ]; then +if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ] || [ "$os" = "OS2" ] || [ "$os" = "DOS" ] || [ "$os" = "WINCE" ]; then EXE=".exe" fi diff --git a/os/dos/copying b/os/dos/copying new file mode 100644 index 0000000000..a43ea2126f --- /dev/null +++ b/os/dos/copying @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 675 Mass Ave, Cambridge, MA 02139, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19yy name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/os/dos/copying.dj b/os/dos/copying.dj new file mode 100644 index 0000000000..8a55047845 --- /dev/null +++ b/os/dos/copying.dj @@ -0,0 +1,48 @@ +This is the file "copying.dj". It does NOT apply to any sources or +binaries copyrighted by UCB Berkeley, the Free Software Foundation, or +any other agency besides DJ Delorie and others who have agreed to +allow their sources to be distributed under these terms. + + Copyright Information for sources and executables that are marked + Copyright (C) DJ Delorie + 7 Kim Lane + Rochester NH 03867-2954 + +This document is Copyright (C) DJ Delorie and may be distributed +verbatim, but changing it is not allowed. + +Source code copyright DJ Delorie is distributed under the terms of the +GNU General Public Licence, with the following exceptions: + +* Sources used to build crt0.o, gcrt0.o, libc.a, libdbg.a, and + libemu.a are distributed under the terms of the GNU Library General + Public License, rather than the GNU GPL. + +* Any existing copyright or authorship information in any given source + file must remain intact. If you modify a source file, a notice to that + effect must be added to the authorship information in the source file. + +* Runtime binaries, as provided by DJ in DJGPP, may be distributed + without sources ONLY if the recipient is given sufficient information + to obtain a copy of djgpp themselves. This primarily applies to + go32-v2.exe, emu387.dxe, and stubedit.exe. + +* Runtime objects and libraries, as provided by DJ in DJGPP, when + linked into an application, may be distributed without sources ONLY + if the recipient is given sufficient information to obtain a copy of + djgpp themselves. This primarily applies to crt0.o and libc.a. + +----- + +Changes to source code copyright BSD, FSF, or others, by DJ Delorie +fall under the terms of the original copyright. Such files usually +have multiple copyright notices in them. + +A copy of the files "COPYING" and "COPYING.LIB" are included with this +document. If you did not receive a copy of these files, you may +obtain one from whence this document was obtained, or by writing: + + Free Software Foundation + 59 Temple Place - Suite 330 + Boston, MA 02111-1307 + USA diff --git a/os/dos/copying.lib b/os/dos/copying.lib new file mode 100644 index 0000000000..bbe3fe1987 --- /dev/null +++ b/os/dos/copying.lib @@ -0,0 +1,481 @@ + GNU LIBRARY GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1991 Free Software Foundation, Inc. + 675 Mass Ave, Cambridge, MA 02139, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the library GPL. It is + numbered 2 because it goes with version 2 of the ordinary GPL.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Library General Public License, applies to some +specially designated Free Software Foundation software, and to any +other libraries whose authors decide to use it. You can use it for +your libraries, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if +you distribute copies of the library, or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link a program with the library, you must provide +complete object files to the recipients so that they can relink them +with the library, after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + Our method of protecting your rights has two steps: (1) copyright +the library, and (2) offer you this license which gives you legal +permission to copy, distribute and/or modify the library. + + Also, for each distributor's protection, we want to make certain +that everyone understands that there is no warranty for this free +library. If the library is modified by someone else and passed on, we +want its recipients to know that what they have is not the original +version, so that any problems introduced by others will not reflect on +the original authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that companies distributing free +software will individually obtain patent licenses, thus in effect +transforming the program into proprietary software. To prevent this, +we have made it clear that any patent must be licensed for everyone's +free use or not licensed at all. + + Most GNU software, including some libraries, is covered by the ordinary +GNU General Public License, which was designed for utility programs. This +license, the GNU Library General Public License, applies to certain +designated libraries. This license is quite different from the ordinary +one; be sure to read it in full, and don't assume that anything in it is +the same as in the ordinary license. + + The reason we have a separate public license for some libraries is that +they blur the distinction we usually make between modifying or adding to a +program and simply using it. Linking a program with a library, without +changing the library, is in some sense simply using the library, and is +analogous to running a utility program or application program. However, in +a textual and legal sense, the linked executable is a combined work, a +derivative of the original library, and the ordinary General Public License +treats it as such. + + Because of this blurred distinction, using the ordinary General +Public License for libraries did not effectively promote software +sharing, because most developers did not use the libraries. We +concluded that weaker conditions might promote sharing better. + + However, unrestricted linking of non-free programs would deprive the +users of those programs of all benefit from the free status of the +libraries themselves. This Library General Public License is intended to +permit developers of non-free programs to use free libraries, while +preserving your freedom as a user of such programs to change the free +libraries that are incorporated in them. (We have not seen how to achieve +this as regards changes in header files, but we have achieved it as regards +changes in the actual functions of the Library.) The hope is that this +will lead to faster development of free libraries. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, while the latter only +works together with the library. + + Note that it is possible for a library to be covered by the ordinary +General Public License rather than by this special one. + + GNU LIBRARY GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library which +contains a notice placed by the copyright holder or other authorized +party saying it may be distributed under the terms of this Library +General Public License (also called "this License"). Each licensee is +addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also compile or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + c) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + d) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the source code distributed need not include anything that is normally +distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Library General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/os/dos/cwsdpmi.exe b/os/dos/cwsdpmi.exe new file mode 100644 index 0000000000000000000000000000000000000000..17e3220023ca085fadf981932c9347247a9ac794 GIT binary patch literal 20125 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 GApiiQ=Z@U~ literal 0 HcmV?d00001 diff --git a/os/dos/exe2coff.c b/os/dos/exe2coff.c new file mode 100644 index 0000000000..aa072e8e41 --- /dev/null +++ b/os/dos/exe2coff.c @@ -0,0 +1,94 @@ +/* Copyright (C) 1998 DJ Delorie, see COPYING.DJ for details */ +/* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */ +/* Updated 2008 to use fread/fopen and friends instead of read/open so it compiles with GCC on Unix (Rubidium) */ +#include +#include +#include +#include +#include +#include +#include + + +static void +exe2aout(char *fname) +{ + unsigned short header[3]; + FILE *ifile; + FILE *ofile; + char buf[4096]; + int rbytes; + char *dot = strrchr(fname, '.'); + if (!dot || strlen(dot) != 4 + || tolower(dot[1]) != 'e' + || tolower(dot[2]) != 'x' + || tolower(dot[3]) != 'e') + { + fprintf(stderr, "%s: Arguments MUST end with a .exe extension\n", fname); + return; + } + + ifile = fopen(fname, "rb"); + if (!ifile) + { + perror(fname); + return; + } + fread(header, sizeof(header), 1, ifile); + if (header[0] == 0x5a4d) + { + long header_offset = (long)header[2]*512L; + if (header[1]) + header_offset += (long)header[1] - 512L; + fseek(ifile, header_offset, SEEK_SET); + header[0] = 0; + fread(header, sizeof(header), 1, ifile); + if ((header[0] != 0x010b) && (header[0] != 0x014c)) + { + fprintf(stderr, "`%s' does not have a COFF/AOUT program appended to it\n", fname); + return; + } + fseek(ifile, header_offset, SEEK_SET); + } + else + { + fprintf(stderr, "`%s' is not an .EXE file\n", fname); + return; + } + + *dot = 0; + ofile = fopen(fname, "w+b"); + if (!ofile) + { + perror(fname); + return; + } + + while ((rbytes=fread(buf, 1, 4096, ifile)) > 0) + { + int wb = fwrite(buf, 1, rbytes, ofile); + if (wb < 0) + { + perror(fname); + break; + } + if (wb < rbytes) + { + fprintf(stderr, "`%s': disk full\n", fname); + exit(1); + } + } + fclose(ifile); + fclose(ofile); +} + +int +main(int argc, char **argv) +{ + int i; + if (argc == 1) printf("Usage: %s ", argv[0]); + for (i=1; i binary.exe || exit +mv binary.exe $1 +rm binary exe2coff diff --git a/readme.txt b/readme.txt index bdc6d3d901..31f4fd20b5 100644 --- a/readme.txt +++ b/readme.txt @@ -73,14 +73,15 @@ OpenTTD has been ported to several platforms and operating systems. It shouldn't be very difficult to port it to a new platform. The currently working platforms are: - BeOS - SDL + BeOS - SDL or Allegro + DOS - Allegro FreeBSD - SDL - Linux - SDL + Linux - SDL or Allegro MacOS X (universal) - Cocoa video and sound drivers (SDL works too, but not 100% and not as a universal binary) MorphOS - SDL OpenBSD - SDL OS/2 - SDL - Windows - Win32 GDI (faster) or SDL + Windows - Win32 GDI (faster) or SDL or Allegro 4.0) Installing and running OpenTTD: @@ -298,6 +299,16 @@ OS/2: A comprehensive GNU build environment is required to build the OS/2 version. See the docs/Readme_OS2.txt file for more information. +DOS: + A build environment with DJGPP is needed as well as libraries such as + Allegro, zlib and libpng, which all can be downloaded from the DJGPP + website. Compilation is straight forward: use make, but do a "./configure" + before the first build. The build binary will need cwsdpmi.exe to be in + the same directory as the openttd executable. cwsdpmi.exe can be found in + the os/dos subdirectory. If you compile with stripping turned on a binary + will be generated that does not need cwsdpmi.exe by adding the cswdstub.exe + to the created OpenTTD binary. + 8.0) Translating: ---- ------------------- diff --git a/source.list b/source.list index d91f500fa8..fa0ba0c56a 100644 --- a/source.list +++ b/source.list @@ -639,7 +639,10 @@ music/null_m.cpp #else #if PSP #else - music/extmidi.cpp + #if DOS + #else + music/extmidi.cpp + #end #end #end #end diff --git a/src/fileio.cpp b/src/fileio.cpp index f7b4a5af2d..0e2d4d8951 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -773,6 +773,10 @@ void ChangeWorkingDirectory(const char *exe) char *s = strrchr(exe, PATHSEPCHAR); if (s != NULL) { *s = '\0'; +#if defined(__DJGPP__) + /* If we want to go to the root, we can't use cd C:, but we must use '/' */ + if (s[-1] == ':') chdir("/"); +#endif if (chdir(exe) != 0) DEBUG(misc, 0, "Directory with the binary does not exist?"); *s = PATHSEPCHAR; } @@ -788,7 +792,7 @@ void ChangeWorkingDirectory(const char *exe) void DetermineBasePaths(const char *exe) { char tmp[MAX_PATH]; -#if defined(__MORPHOS__) || defined(__AMIGA__) || !defined(WITH_PERSONAL_DIR) +#if defined(__MORPHOS__) || defined(__AMIGA__) || defined(DOS) || !defined(WITH_PERSONAL_DIR) _searchpaths[SP_PERSONAL_DIR] = NULL; #else const char *homedir = getenv("HOME"); @@ -826,7 +830,7 @@ void DetermineBasePaths(const char *exe) AppendPathSeparator(tmp, MAX_PATH); _searchpaths[SP_BINARY_DIR] = strdup(tmp); -#if defined(__MORPHOS__) || defined(__AMIGA__) +#if defined(__MORPHOS__) || defined(__AMIGA__) || defined(DOS) _searchpaths[SP_INSTALLATION_DIR] = NULL; #else snprintf(tmp, MAX_PATH, "%s", GLOBAL_DATA_DIR); diff --git a/src/intro_gui.cpp b/src/intro_gui.cpp index 0cd4f95983..6cd94aa006 100644 --- a/src/intro_gui.cpp +++ b/src/intro_gui.cpp @@ -161,6 +161,8 @@ void AskExitGame() SetDParam(0, STR_OSNAME_OS2); #elif defined(SUNOS) SetDParam(0, STR_OSNAME_SUNOS); +#elif defined(DOS) + SetDParam(0, STR_OSNAME_DOS); #else SetDParam(0, STR_OSNAME_UNIX); #endif diff --git a/src/lang/english.txt b/src/lang/english.txt index d77741b029..370e94b310 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -277,6 +277,7 @@ STR_0131_TOO_MANY_NAMES_DEFINED :{WHITE}Too many STR_0132_CHOSEN_NAME_IN_USE_ALREADY :{WHITE}Chosen name already in use STR_OSNAME_WINDOWS :Windows +STR_OSNAME_DOS :DOS STR_OSNAME_UNIX :Unix STR_OSNAME_OSX :OS X STR_OSNAME_BEOS :BeOS diff --git a/src/os_timer.cpp b/src/os_timer.cpp index 0166a445cf..bf0a171de3 100644 --- a/src/os_timer.cpp +++ b/src/os_timer.cpp @@ -35,7 +35,7 @@ unsigned __int64 ottd_rdtsc(); #endif /* rdtsc for all other *nix-en (hopefully). Use GCC syntax */ -#if defined(__i386__) || defined(__x86_64__) && !defined(RDTSC_AVAILABLE) +#if (defined(__i386__) || defined(__x86_64__)) && !defined(__DJGPP__) && !defined(RDTSC_AVAILABLE) uint64 ottd_rdtsc() { uint32 high, low; diff --git a/src/stdafx.h b/src/stdafx.h index a0d715ed3d..6fdc4fd373 100644 --- a/src/stdafx.h +++ b/src/stdafx.h @@ -353,7 +353,7 @@ void NORETURN CDECL usererror(const char *str, ...); void NORETURN CDECL error(const char *str, ...); #define NOT_REACHED() error("NOT_REACHED triggered at line %i of %s", __LINE__, __FILE__) -#if defined(MORPHOS) || defined(__NDS__) +#if defined(MORPHOS) || defined(__NDS__) || defined(__DJGPP__) /* MorphOS and NDS don't have C++ conformant _stricmp... */ #define _stricmp stricmp #elif defined(OPENBSD) @@ -361,7 +361,7 @@ void NORETURN CDECL error(const char *str, ...); #define _stricmp strcasecmp #endif -#if !defined(MORPHOS) && !defined(OPENBSD) && !defined(__NDS__) +#if !defined(MORPHOS) && !defined(OPENBSD) && !defined(__NDS__) && !defined(__DJGPP__) /* NDS, MorphOS & OpenBSD don't know wchars, the rest does :( */ #define HAS_WCHAR #endif /* !defined(MORPHOS) && !defined(OPENBSD) && !defined(__NDS__) */ diff --git a/src/video/allegro_v.cpp b/src/video/allegro_v.cpp index 913411e6e3..36581bcaa7 100644 --- a/src/video/allegro_v.cpp +++ b/src/video/allegro_v.cpp @@ -179,13 +179,19 @@ static bool CreateMainSurface(int w, int h) if (bpp == 0) usererror("Can't use a blitter that blits 0 bpp for normal visuals"); set_color_depth(bpp); +#if defined(DOS) + /* Force DOS builds to ALWAYS use full screen as + * it can't do windowed. */ + _fullscreen = true; +#endif + GetVideoModes(); GetAvailableVideoMode(&w, &h); if (set_gfx_mode(_fullscreen ? GFX_AUTODETECT_FULLSCREEN : GFX_AUTODETECT_WINDOWED, w, h, 0, 0) != 0) return false; - _allegro_screen = create_bitmap(screen->w, screen->h); - _screen.width = screen->w; - _screen.height = screen->h; + _allegro_screen = create_bitmap(w, h); + _screen.width = w; + _screen.height = h; _screen.pitch = ((byte*)screen->line[1] - (byte*)screen->line[0]) / (bitmap_color_depth(screen) / 8); poll_mouse(); @@ -399,7 +405,7 @@ void VideoDriver_Allegro::Stop() if (--_allegro_instance_count == 0) allegro_exit(); } -#if defined(UNIX) || defined(__OS2__) || defined(PSP) +#if defined(UNIX) || defined(__OS2__) || defined(PSP) || defined(DOS) # include /* gettimeofday */ static uint32 GetTime() @@ -490,6 +496,9 @@ bool VideoDriver_Allegro::ChangeResolution(int w, int h) bool VideoDriver_Allegro::ToggleFullscreen(bool fullscreen) { +#ifdef DOS + return false; +#else _fullscreen = fullscreen; GetVideoModes(); // get the list of available video modes if (_num_resolutions == 0 || !this->ChangeResolution(_cur_resolution.width, _cur_resolution.height)) { @@ -498,6 +507,7 @@ bool VideoDriver_Allegro::ToggleFullscreen(bool fullscreen) return false; } return true; +#endif } #endif /* WITH_ALLEGRO */