From: Stas Sergeev Date: Wed, 13 Sep 2006 17:20:32 +0000 (+0000) Subject: merge the autotools branch X-Git-Tag: 2.0~287 X-Git-Url: https://jxself.org/git/?a=commitdiff_plain;h=e535e2ef833a03ec84d0f002d684c07ddde893f1;p=super-star-trek.git merge the autotools branch --- diff --git a/ABOUT-NLS b/ABOUT-NLS new file mode 100644 index 0000000..e32d52d --- /dev/null +++ b/ABOUT-NLS @@ -0,0 +1,996 @@ +1 Notes on the Free Translation Project +*************************************** + +Free software is going international! The Free Translation Project is +a way to get maintainers of free software, translators, and users all +together, so that free software will gradually become able to speak many +languages. A few packages already provide translations for their +messages. + + If you found this `ABOUT-NLS' file inside a distribution, you may +assume that the distributed package does use GNU `gettext' internally, +itself available at your nearest GNU archive site. But you do _not_ +need to install GNU `gettext' prior to configuring, installing or using +this package with messages translated. + + Installers will find here some useful hints. These notes also +explain how users should proceed for getting the programs to use the +available translations. They tell how people wanting to contribute and +work on translations can contact the appropriate team. + + When reporting bugs in the `intl/' directory or bugs which may be +related to internationalization, you should tell about the version of +`gettext' which is used. The information can be found in the +`intl/VERSION' file, in internationalized packages. + +1.1 Quick configuration advice +============================== + +If you want to exploit the full power of internationalization, you +should configure it using + + ./configure --with-included-gettext + +to force usage of internationalizing routines provided within this +package, despite the existence of internationalizing capabilities in the +operating system where this package is being installed. So far, only +the `gettext' implementation in the GNU C library version 2 provides as +many features (such as locale alias, message inheritance, automatic +charset conversion or plural form handling) as the implementation here. +It is also not possible to offer this additional functionality on top +of a `catgets' implementation. Future versions of GNU `gettext' will +very likely convey even more functionality. So it might be a good idea +to change to GNU `gettext' as soon as possible. + + So you need _not_ provide this option if you are using GNU libc 2 or +you have installed a recent copy of the GNU gettext package with the +included `libintl'. + +1.2 INSTALL Matters +=================== + +Some packages are "localizable" when properly installed; the programs +they contain can be made to speak your own native language. Most such +packages use GNU `gettext'. Other packages have their own ways to +internationalization, predating GNU `gettext'. + + By default, this package will be installed to allow translation of +messages. It will automatically detect whether the system already +provides the GNU `gettext' functions. If not, the included GNU +`gettext' library will be used. This library is wholly contained +within this package, usually in the `intl/' subdirectory, so prior +installation of the GNU `gettext' package is _not_ required. +Installers may use special options at configuration time for changing +the default behaviour. The commands: + + ./configure --with-included-gettext + ./configure --disable-nls + +will, respectively, bypass any pre-existing `gettext' to use the +internationalizing routines provided within this package, or else, +_totally_ disable translation of messages. + + When you already have GNU `gettext' installed on your system and run +configure without an option for your new package, `configure' will +probably detect the previously built and installed `libintl.a' file and +will decide to use this. This might not be desirable. You should use +the more recent version of the GNU `gettext' library. I.e. if the file +`intl/VERSION' shows that the library which comes with this package is +more recent, you should use + + ./configure --with-included-gettext + +to prevent auto-detection. + + The configuration process will not test for the `catgets' function +and therefore it will not be used. The reason is that even an +emulation of `gettext' on top of `catgets' could not provide all the +extensions of the GNU `gettext' library. + + Internationalized packages usually have many `po/LL.po' files, where +LL gives an ISO 639 two-letter code identifying the language. Unless +translations have been forbidden at `configure' time by using the +`--disable-nls' switch, all available translations are installed +together with the package. However, the environment variable `LINGUAS' +may be set, prior to configuration, to limit the installed set. +`LINGUAS' should then contain a space separated list of two-letter +codes, stating which languages are allowed. + +1.3 Using This Package +====================== + +As a user, if your language has been installed for this package, you +only have to set the `LANG' environment variable to the appropriate +`LL_CC' combination. Here `LL' is an ISO 639 two-letter language code, +and `CC' is an ISO 3166 two-letter country code. For example, let's +suppose that you speak German and live in Germany. At the shell +prompt, merely execute `setenv LANG de_DE' (in `csh'), +`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash'). +This can be done from your `.login' or `.profile' file, once and for +all. + + You might think that the country code specification is redundant. +But in fact, some languages have dialects in different countries. For +example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The +country code serves to distinguish the dialects. + + The locale naming convention of `LL_CC', with `LL' denoting the +language and `CC' denoting the country, is the one use on systems based +on GNU libc. On other systems, some variations of this scheme are +used, such as `LL' or `LL_CC.ENCODING'. You can get the list of +locales supported by your system for your country by running the command +`locale -a | grep '^LL''. + + Not all programs have translations for all languages. By default, an +English message is shown in place of a nonexistent translation. If you +understand other languages, you can set up a priority list of languages. +This is done through a different environment variable, called +`LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG' +for the purpose of message handling, but you still need to have `LANG' +set to the primary language; this is required by other parts of the +system libraries. For example, some Swedish users who would rather +read translations in German than English for when Swedish is not +available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'. + + Special advice for Norwegian users: The language code for Norwegian +bokma*l changed from `no' to `nb' recently (in 2003). During the +transition period, while some message catalogs for this language are +installed under `nb' and some older ones under `no', it's recommended +for Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and +older translations are used. + + In the `LANGUAGE' environment variable, but not in the `LANG' +environment variable, `LL_CC' combinations can be abbreviated as `LL' +to denote the language's main dialect. For example, `de' is equivalent +to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT' +(Portuguese as spoken in Portugal) in this context. + +1.4 Translating Teams +===================== + +For the Free Translation Project to be a success, we need interested +people who like their own language and write it well, and who are also +able to synergize with other translators speaking the same language. +Each translation team has its own mailing list. The up-to-date list of +teams can be found at the Free Translation Project's homepage, +`http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams" +area. + + If you'd like to volunteer to _work_ at translating messages, you +should become a member of the translating team for your own language. +The subscribing address is _not_ the same as the list itself, it has +`-request' appended. For example, speakers of Swedish can send a +message to `sv-request@li.org', having this message body: + + subscribe + + Keep in mind that team members are expected to participate +_actively_ in translations, or at solving translational difficulties, +rather than merely lurking around. If your team does not exist yet and +you want to start one, or if you are unsure about what to do or how to +get started, please write to `translation@iro.umontreal.ca' to reach the +coordinator for all translator teams. + + The English team is special. It works at improving and uniformizing +the terminology in use. Proven linguistic skill are praised more than +programming skill, here. + +1.5 Available Packages +====================== + +Languages are not equally supported in all packages. The following +matrix shows the current state of internationalization, as of May 2005. +The matrix shows, in regard of each package, for which languages PO +files have been submitted to translation coordination, with a +translation percentage of at least 50%. + + Ready PO files af am ar az be bg bs ca cs cy da de el en en_GB + +-------------------------------------------------+ + GNUnet | | + a2ps | [] [] [] [] [] | + aegis | () | + ant-phone | () | + anubis | [] | + ap-utils | | + aspell | [] [] [] [] | + bash | [] [] | + batchelor | [] | + bfd | | + bibshelf | [] | + binutils | [] | + bison | [] [] | + bluez-pin | [] [] [] [] | + clisp | [] [] | + console-tools | [] [] | + coreutils | [] [] [] [] | + cpio | | + cpplib | [] [] [] | + darkstat | [] () [] | + dialog | [] [] [] [] [] [] | + diffutils | [] [] [] [] [] | + doodle | [] | + e2fsprogs | [] [] | + enscript | [] [] [] [] | + error | [] [] [] [] | + fetchmail | [] [] () [] | + fileutils | [] [] | + findutils | [] [] [] | + flex | [] [] [] | + fslint | [] | + gas | | + gawk | [] [] [] | + gbiff | [] | + gcal | [] | + gcc | [] | + gettext-examples | [] [] [] [] | + gettext-runtime | [] [] [] [] | + gettext-tools | [] [] | + gimp-print | [] [] [] [] | + gip | | + gliv | [] | + glunarclock | | + gmult | [] [] | + gnubiff | () | + gnucash | [] () () [] | + gnucash-glossary | [] () | + gpe-aerial | [] [] | + gpe-beam | [] [] | + gpe-calendar | [] [] | + gpe-clock | [] [] | + gpe-conf | [] [] | + gpe-contacts | | + gpe-edit | [] | + gpe-go | [] | + gpe-login | [] [] | + gpe-ownerinfo | [] [] | + gpe-sketchbook | [] [] | + gpe-su | [] [] | + gpe-taskmanager | [] [] | + gpe-timesheet | [] | + gpe-today | [] [] | + gpe-todo | [] [] | + gphoto2 | [] [] [] [] | + gprof | [] [] | + gpsdrive | () () | + gramadoir | [] [] | + grep | [] [] [] [] [] [] | + gretl | | + gsasl | [] | + gss | | + gst-plugins | [] [] [] [] [] [] | + gstreamer | [] [] [] [] [] | + gtick | [] () | + gtkspell | [] [] [] | + hello | [] [] [] [] | + id-utils | [] [] | + impost | | + indent | [] [] | + iso_3166 | | + iso_3166_1 | [] [] [] [] [] | + iso_3166_2 | | + iso_3166_3 | [] | + iso_4217 | | + iso_639 | | + jpilot | [] | + jtag | | + jwhois | | + kbd | [] [] [] [] | + latrine | () | + ld | [] | + libc | [] [] [] [] [] | + libextractor | | + libgpewidget | [] [] [] | + libgphoto2 | [] | + libgphoto2_port | [] | + libgsasl | | + libiconv | [] [] [] [] [] | + libidn | | + lifelines | [] () | + lilypond | [] | + lingoteach | | + lynx | [] [] [] [] | + m4 | [] [] [] [] | + mailutils | [] | + make | [] [] | + man-db | [] () [] [] | + minicom | [] [] | + mysecretdiary | [] [] | + nano | [] () [] | + nano_1_0 | [] () [] [] | + opcodes | [] | + parted | [] [] [] [] | + psmisc | | + ptx | [] [] [] | + pwdutils | | + python | | + radius | [] | + recode | [] [] [] [] [] | + rpm | [] [] | + screem | | + scrollkeeper | [] [] [] [] [] [] [] [] | + sed | [] [] | + sh-utils | [] [] | + shared-mime-info | [] [] | + sharutils | [] [] [] [] [] | + silky | | + skencil | [] () | + sketch | [] () | + solfege | [] | + soundtracker | [] [] | + sp | [] | + stardict | [] | + tar | | + texinfo | [] [] | + textutils | [] [] [] | + tin | () () | + tp-robot | [] | + tuxpaint | [] [] [] [] [] [] [] | + unicode-han-tra... | | + unicode-transla... | | + util-linux | [] [] [] [] | + vorbis-tools | [] [] [] [] | + wastesedge | () | + wdiff | [] [] [] [] | + wget | | + xchat | [] [] [] [] [] | + xkeyboard-config | | + xpad | | + +-------------------------------------------------+ + af am ar az be bg bs ca cs cy da de el en en_GB + 10 0 0 2 7 5 0 40 43 2 51 91 19 1 14 + + eo es et eu fa fi fr ga gl he hi hr hu id is + +-----------------------------------------------+ + GNUnet | | + a2ps | [] [] [] | + aegis | | + ant-phone | [] | + anubis | [] | + ap-utils | [] | + aspell | [] [] | + bash | [] [] [] [] | + batchelor | [] [] | + bfd | [] | + bibshelf | [] [] | + binutils | [] [] | + bison | [] [] [] [] [] | + bluez-pin | [] [] [] [] [] [] | + clisp | [] [] | + console-tools | | + coreutils | [] [] [] [] [] | + cpio | [] [] | + cpplib | [] [] | + darkstat | [] () [] [] [] | + dialog | [] [] [] [] [] [] [] | + diffutils | [] [] [] [] [] [] [] [] [] | + doodle | [] | + e2fsprogs | [] [] | + enscript | [] [] | + error | [] [] [] [] [] | + fetchmail | [] | + fileutils | [] [] [] [] [] | + findutils | [] [] [] [] | + flex | [] [] [] | + fslint | [] | + gas | [] [] | + gawk | [] [] [] [] | + gbiff | [] | + gcal | [] [] | + gcc | [] | + gettext-examples | [] [] [] | + gettext-runtime | [] [] [] [] [] | + gettext-tools | [] [] | + gimp-print | [] [] | + gip | [] [] [] | + gliv | () | + glunarclock | [] [] [] | + gmult | [] [] | + gnubiff | () | + gnucash | [] () | + gnucash-glossary | [] | + gpe-aerial | [] [] | + gpe-beam | [] [] | + gpe-calendar | [] [] [] [] | + gpe-clock | [] [] [] | + gpe-conf | [] | + gpe-contacts | [] | + gpe-edit | [] [] | + gpe-go | [] [] | + gpe-login | [] [] [] | + gpe-ownerinfo | [] [] [] [] [] | + gpe-sketchbook | [] [] | + gpe-su | [] [] [] | + gpe-taskmanager | [] [] [] | + gpe-timesheet | [] [] [] [] | + gpe-today | [] [] [] [] | + gpe-todo | [] [] [] | + gphoto2 | [] [] [] [] | + gprof | [] [] [] | + gpsdrive | () () [] | + gramadoir | [] [] | + grep | [] [] [] [] [] [] [] [] [] [] [] | + gretl | [] [] | + gsasl | [] [] [] | + gss | [] | + gst-plugins | [] [] | + gstreamer | | + gtick | [] [] [] [] | + gtkspell | [] [] [] [] [] | + hello | [] [] [] [] [] [] [] [] [] [] [] [] [] | + id-utils | [] [] [] | + impost | [] [] | + indent | [] [] [] [] [] [] [] [] [] [] | + iso_3166 | [] [] [] | + iso_3166_1 | [] [] [] [] [] [] [] | + iso_3166_2 | [] | + iso_3166_3 | [] | + iso_4217 | [] [] [] | + iso_639 | [] [] [] [] | + jpilot | [] [] | + jtag | [] | + jwhois | [] [] [] [] | + kbd | [] [] | + latrine | [] [] | + ld | [] [] | + libc | [] [] [] [] [] | + libextractor | | + libgpewidget | [] [] [] [] [] | + libgphoto2 | [] [] [] | + libgphoto2_port | [] | + libgsasl | [] [] | + libiconv | [] [] [] [] [] [] [] [] [] [] | + libidn | [] [] | + lifelines | () | + lilypond | | + lingoteach | [] [] | + lynx | [] [] | + m4 | [] [] [] [] | + mailutils | [] [] | + make | [] [] [] [] [] [] [] | + man-db | () | + minicom | [] [] [] [] | + mysecretdiary | [] [] [] | + nano | [] [] () [] | + nano_1_0 | [] [] [] [] | + opcodes | [] [] [] | + parted | [] [] [] | + psmisc | [] | + ptx | [] [] [] [] [] [] [] [] [] | + pwdutils | | + python | | + radius | [] [] | + recode | [] [] [] [] [] [] [] | + rpm | [] | + screem | | + scrollkeeper | [] [] [] | + sed | [] [] [] [] [] [] | + sh-utils | [] [] [] [] [] [] | + shared-mime-info | [] [] [] [] [] [] | + sharutils | [] [] [] [] [] [] | + silky | [] | + skencil | [] [] | + sketch | [] [] | + solfege | | + soundtracker | [] [] | + sp | [] | + stardict | [] | + tar | [] [] [] [] | + texinfo | [] [] [] | + textutils | [] [] [] [] [] | + tin | [] () | + tp-robot | [] [] | + tuxpaint | [] [] [] [] [] [] [] [] | + unicode-han-tra... | | + unicode-transla... | [] [] | + util-linux | [] [] [] [] [] | + vorbis-tools | [] [] | + wastesedge | () | + wdiff | [] [] [] [] [] [] [] | + wget | [] [] [] [] | + xchat | [] [] [] [] [] | + xkeyboard-config | | + xpad | [] [] [] | + +-----------------------------------------------+ + eo es et eu fa fi fr ga gl he hi hr hu id is + 15 85 21 15 2 35 115 45 16 8 1 6 40 27 1 + + it ja ko ku lg lt lv mk mn ms mt nb nl nn no nso + +--------------------------------------------------+ + GNUnet | | + a2ps | () () [] [] () | + aegis | () | + ant-phone | [] | + anubis | [] [] [] | + ap-utils | | + aspell | [] [] | + bash | [] | + batchelor | [] | + bfd | | + bibshelf | [] | + binutils | | + bison | [] [] [] [] | + bluez-pin | [] [] | + clisp | [] | + console-tools | | + coreutils | [] [] | + cpio | | + cpplib | [] | + darkstat | [] [] | + dialog | [] [] | + diffutils | [] [] [] [] | + doodle | [] | + e2fsprogs | [] | + enscript | [] | + error | [] | + fetchmail | [] [] | + fileutils | [] [] [] | + findutils | [] [] | + flex | [] [] | + fslint | [] | + gas | | + gawk | [] [] | + gbiff | [] | + gcal | | + gcc | | + gettext-examples | [] [] [] | + gettext-runtime | [] [] [] [] | + gettext-tools | [] [] [] | + gimp-print | [] [] | + gip | [] | + gliv | [] | + glunarclock | [] [] | + gmult | [] [] | + gnubiff | () | + gnucash | [] () () [] | + gnucash-glossary | [] [] | + gpe-aerial | [] | + gpe-beam | [] | + gpe-calendar | [] | + gpe-clock | [] | + gpe-conf | [] | + gpe-contacts | | + gpe-edit | [] | + gpe-go | [] | + gpe-login | [] | + gpe-ownerinfo | [] | + gpe-sketchbook | [] | + gpe-su | [] | + gpe-taskmanager | [] [] | + gpe-timesheet | [] | + gpe-today | [] | + gpe-todo | [] | + gphoto2 | [] [] [] | + gprof | | + gpsdrive | () () () () | + gramadoir | () | + grep | [] [] [] [] | + gretl | [] | + gsasl | [] | + gss | | + gst-plugins | [] [] | + gstreamer | [] [] | + gtick | [] [] | + gtkspell | [] [] [] | + hello | [] [] [] [] [] [] [] [] [] | + id-utils | [] [] | + impost | | + indent | [] [] [] | + iso_3166 | [] | + iso_3166_1 | [] [] | + iso_3166_2 | [] | + iso_3166_3 | [] | + iso_4217 | [] [] [] | + iso_639 | [] [] [] | + jpilot | () () () | + jtag | | + jwhois | [] [] | + kbd | [] | + latrine | [] [] | + ld | | + libc | [] [] [] [] [] | + libextractor | | + libgpewidget | [] | + libgphoto2 | [] [] | + libgphoto2_port | [] [] | + libgsasl | [] | + libiconv | [] [] | + libidn | [] | + lifelines | [] | + lilypond | | + lingoteach | [] [] | + lynx | [] [] [] | + m4 | [] [] | + mailutils | | + make | [] [] [] | + man-db | () | + minicom | [] | + mysecretdiary | [] | + nano | [] [] [] | + nano_1_0 | [] [] [] [] | + opcodes | [] | + parted | [] [] [] [] | + psmisc | [] [] [] | + ptx | [] [] [] | + pwdutils | | + python | | + radius | | + recode | [] [] | + rpm | [] [] | + screem | [] | + scrollkeeper | [] [] [] | + sed | [] [] | + sh-utils | [] [] [] | + shared-mime-info | [] [] [] [] | + sharutils | [] [] [] | + silky | [] | + skencil | | + sketch | | + solfege | [] [] [] | + soundtracker | [] | + sp | () | + stardict | [] [] | + tar | [] [] [] | + texinfo | [] [] [] | + textutils | [] [] [] | + tin | | + tp-robot | [] | + tuxpaint | [] [] [] [] [] [] [] | + unicode-han-tra... | | + unicode-transla... | | + util-linux | [] [] [] | + vorbis-tools | [] | + wastesedge | [] | + wdiff | [] [] [] | + wget | [] | + xchat | [] [] [] [] [] | + xkeyboard-config | [] | + xpad | [] | + +--------------------------------------------------+ + it ja ko ku lg lt lv mk mn ms mt nb nl nn no nso + 46 35 11 2 1 1 2 2 3 11 0 15 96 7 5 0 + + or pa pl pt pt_BR rm ro ru rw sk sl sq sr sv + +----------------------------------------------+ + GNUnet | | + a2ps | () [] [] [] [] [] [] | + aegis | () () | + ant-phone | [] | + anubis | [] [] [] | + ap-utils | () | + aspell | [] [] | + bash | [] [] [] | + batchelor | [] | + bfd | | + bibshelf | | + binutils | [] [] | + bison | [] [] [] [] [] | + bluez-pin | [] [] [] [] [] [] [] [] | + clisp | [] | + console-tools | [] | + coreutils | [] [] [] [] | + cpio | [] [] | + cpplib | | + darkstat | [] [] [] [] [] [] | + dialog | [] [] [] [] [] [] [] | + diffutils | [] [] [] [] [] [] | + doodle | [] | + e2fsprogs | [] [] | + enscript | [] [] [] [] | + error | [] [] [] | + fetchmail | [] [] [] [] | + fileutils | [] [] [] [] [] | + findutils | [] [] [] [] [] [] | + flex | [] [] [] [] [] | + fslint | [] [] [] | + gas | | + gawk | [] [] [] [] | + gbiff | [] | + gcal | [] | + gcc | | + gettext-examples | [] [] [] [] [] [] | + gettext-runtime | [] [] [] [] [] [] [] | + gettext-tools | [] [] [] [] [] [] [] | + gimp-print | [] [] | + gip | [] [] [] | + gliv | [] [] [] | + glunarclock | [] [] [] [] [] [] | + gmult | [] [] [] [] | + gnubiff | () [] | + gnucash | () [] [] [] [] | + gnucash-glossary | [] [] [] | + gpe-aerial | [] [] [] [] [] [] | + gpe-beam | [] [] [] [] [] [] | + gpe-calendar | [] [] [] [] [] [] [] | + gpe-clock | [] [] [] [] [] [] [] | + gpe-conf | [] [] [] [] [] [] | + gpe-contacts | [] [] [] [] | + gpe-edit | [] [] [] [] [] [] [] | + gpe-go | [] [] [] [] [] | + gpe-login | [] [] [] [] [] [] [] | + gpe-ownerinfo | [] [] [] [] [] [] [] | + gpe-sketchbook | [] [] [] [] [] [] [] | + gpe-su | [] [] [] [] [] [] [] | + gpe-taskmanager | [] [] [] [] [] [] [] | + gpe-timesheet | [] [] [] [] [] [] [] | + gpe-today | [] [] [] [] [] [] [] | + gpe-todo | [] [] [] [] [] [] [] [] | + gphoto2 | [] [] [] [] | + gprof | [] [] [] | + gpsdrive | [] [] | + gramadoir | [] | + grep | [] [] [] [] [] [] [] | + gretl | [] | + gsasl | [] [] [] [] [] | + gss | [] [] [] | + gst-plugins | [] [] [] [] | + gstreamer | [] [] [] [] | + gtick | [] [] [] | + gtkspell | [] [] [] [] [] [] | + hello | [] [] [] [] [] [] [] | + id-utils | [] [] [] [] | + impost | | + indent | [] [] [] [] [] [] | + iso_3166 | [] [] [] [] [] | + iso_3166_1 | [] [] [] [] | + iso_3166_2 | | + iso_3166_3 | [] [] [] | + iso_4217 | [] [] | + iso_639 | [] [] [] | + jpilot | | + jtag | [] | + jwhois | [] [] [] () () | + kbd | [] [] [] | + latrine | [] [] | + ld | [] | + libc | [] [] [] [] [] | + libextractor | [] | + libgpewidget | [] [] [] [] [] [] | + libgphoto2 | [] [] | + libgphoto2_port | [] | + libgsasl | [] [] [] | + libiconv | [] [] [] [] [] [] [] [] [] [] | + libidn | [] () | + lifelines | [] [] | + lilypond | | + lingoteach | [] | + lynx | [] [] [] | + m4 | [] [] [] [] [] | + mailutils | [] [] [] | + make | [] [] [] [] | + man-db | [] [] | + minicom | [] [] [] [] | + mysecretdiary | [] [] [] [] | + nano | [] [] [] | + nano_1_0 | [] [] [] [] | + opcodes | [] [] | + parted | [] [] [] [] | + psmisc | [] [] | + ptx | [] [] [] [] [] [] | + pwdutils | [] | + python | | + radius | [] [] | + recode | [] [] [] [] [] [] | + rpm | [] [] [] [] | + screem | | + scrollkeeper | [] [] [] [] [] [] [] | + sed | [] [] [] [] [] [] [] [] | + sh-utils | [] [] [] | + shared-mime-info | [] [] [] [] [] [] | + sharutils | [] [] [] | + silky | [] | + skencil | [] [] [] | + sketch | [] [] [] | + solfege | | + soundtracker | [] [] | + sp | | + stardict | [] [] | + tar | [] [] [] [] | + texinfo | [] [] [] [] | + textutils | [] [] [] | + tin | | + tp-robot | [] | + tuxpaint | [] [] [] [] [] [] [] [] | + unicode-han-tra... | | + unicode-transla... | | + util-linux | [] [] [] | + vorbis-tools | [] [] | + wastesedge | | + wdiff | [] [] [] [] [] [] | + wget | | + xchat | [] [] [] [] [] [] [] | + xkeyboard-config | | + xpad | | + +----------------------------------------------+ + or pa pl pt pt_BR rm ro ru rw sk sl sq sr sv + 1 3 47 29 57 6 78 73 5 44 12 12 50 85 + + ta tg th tk tr uk ven vi wa xh zh_CN zh_TW zu + +-----------------------------------------------+ + GNUnet | | 0 + a2ps | [] [] [] | 19 + aegis | | 0 + ant-phone | [] [] | 5 + anubis | [] [] [] | 11 + ap-utils | () [] | 2 + aspell | [] [] [] | 13 + bash | [] | 11 + batchelor | [] [] | 7 + bfd | | 1 + bibshelf | [] | 5 + binutils | [] | 6 + bison | [] [] | 18 + bluez-pin | [] [] [] [] [] | 25 + clisp | | 7 + console-tools | [] [] | 5 + coreutils | [] [] | 17 + cpio | [] [] [] | 7 + cpplib | [] [] | 8 + darkstat | [] () () | 15 + dialog | [] [] [] | 25 + diffutils | [] [] [] [] | 28 + doodle | [] | 5 + e2fsprogs | [] | 8 + enscript | [] | 12 + error | [] [] [] | 16 + fetchmail | [] | 12 + fileutils | [] [] [] | 18 + findutils | [] [] | 17 + flex | [] [] | 15 + fslint | [] | 7 + gas | [] | 3 + gawk | [] | 14 + gbiff | [] | 5 + gcal | [] | 5 + gcc | [] [] | 4 + gettext-examples | [] [] [] [] [] | 21 + gettext-runtime | [] [] [] [] [] | 25 + gettext-tools | [] [] [] [] [] | 19 + gimp-print | [] | 11 + gip | [] | 8 + gliv | [] [] | 7 + glunarclock | [] [] | 13 + gmult | [] [] [] | 13 + gnubiff | [] | 3 + gnucash | () [] | 10 + gnucash-glossary | [] [] | 9 + gpe-aerial | [] [] | 13 + gpe-beam | [] [] | 13 + gpe-calendar | [] [] [] [] | 18 + gpe-clock | [] [] [] [] | 17 + gpe-conf | [] [] | 12 + gpe-contacts | [] [] | 7 + gpe-edit | [] [] [] [] | 15 + gpe-go | [] [] | 11 + gpe-login | [] [] [] [] [] | 18 + gpe-ownerinfo | [] [] [] [] | 19 + gpe-sketchbook | [] [] | 14 + gpe-su | [] [] [] | 16 + gpe-taskmanager | [] [] [] | 17 + gpe-timesheet | [] [] [] [] | 17 + gpe-today | [] [] [] [] [] | 19 + gpe-todo | [] [] [] | 17 + gphoto2 | [] [] [] | 18 + gprof | [] [] | 10 + gpsdrive | | 3 + gramadoir | [] | 6 + grep | [] [] [] [] | 32 + gretl | | 4 + gsasl | [] [] | 12 + gss | [] | 5 + gst-plugins | [] [] [] | 17 + gstreamer | [] [] [] [] | 15 + gtick | [] | 11 + gtkspell | [] [] [] [] | 21 + hello | [] [] [] [] | 37 + id-utils | [] [] | 13 + impost | [] | 3 + indent | [] [] [] [] | 25 + iso_3166 | [] [] [] | 12 + iso_3166_1 | [] [] | 20 + iso_3166_2 | | 2 + iso_3166_3 | [] [] | 8 + iso_4217 | [] [] | 10 + iso_639 | [] [] | 12 + jpilot | [] [] [] | 6 + jtag | | 2 + jwhois | [] [] [] | 12 + kbd | [] [] | 12 + latrine | [] [] | 8 + ld | [] | 5 + libc | [] [] | 22 + libextractor | | 1 + libgpewidget | [] [] | 17 + libgphoto2 | [] | 9 + libgphoto2_port | | 5 + libgsasl | [] | 7 + libiconv | [] [] [] [] [] | 32 + libidn | [] [] | 6 + lifelines | | 4 + lilypond | | 1 + lingoteach | [] | 6 + lynx | [] [] [] | 15 + m4 | [] [] | 17 + mailutils | [] | 7 + make | [] [] | 18 + man-db | | 5 + minicom | | 11 + mysecretdiary | [] [] | 12 + nano | [] [] | 13 + nano_1_0 | [] [] [] | 18 + opcodes | [] [] | 9 + parted | [] [] [] | 18 + psmisc | [] | 7 + ptx | [] [] | 23 + pwdutils | | 1 + python | | 0 + radius | [] | 6 + recode | [] [] | 22 + rpm | [] [] | 11 + screem | | 1 + scrollkeeper | [] [] [] | 24 + sed | [] [] [] | 21 + sh-utils | [] | 15 + shared-mime-info | [] [] [] | 21 + sharutils | [] [] [] | 20 + silky | | 3 + skencil | | 6 + sketch | | 6 + solfege | | 4 + soundtracker | [] | 8 + sp | [] | 3 + stardict | [] [] [] [] | 10 + tar | [] [] [] [] | 15 + texinfo | [] [] | 14 + textutils | [] [] [] | 17 + tin | | 1 + tp-robot | [] [] [] | 8 + tuxpaint | [] [] [] [] | 34 + unicode-han-tra... | | 0 + unicode-transla... | | 2 + util-linux | [] [] [] | 18 + vorbis-tools | [] | 10 + wastesedge | | 1 + wdiff | [] [] | 22 + wget | [] [] | 7 + xchat | [] [] [] [] | 26 + xkeyboard-config | [] | 2 + xpad | [] | 5 + +-----------------------------------------------+ + 73 teams ta tg th tk tr uk ven vi wa xh zh_CN zh_TW zu + 149 domains 0 0 0 1 77 30 0 92 16 0 42 32 0 1746 + + Some counters in the preceding matrix are higher than the number of +visible blocks let us expect. This is because a few extra PO files are +used for implementing regional variants of languages, or language +dialects. + + For a PO file in the matrix above to be effective, the package to +which it applies should also have been internationalized and +distributed as such by its maintainer. There might be an observable +lag between the mere existence a PO file and its wide availability in a +distribution. + + If May 2005 seems to be old, you may fetch a more recent copy of +this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date +matrix with full percentage details can be found at +`http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'. + +1.6 Using `gettext' in new packages +=================================== + +If you are writing a freely available program and want to +internationalize it you are welcome to use GNU `gettext' in your +package. Of course you have to respect the GNU Library General Public +License which covers the use of the GNU `gettext' library. This means +in particular that even non-free programs can use `libintl' as a shared +library, whereas only free software can use `libintl' as a static +library or use modified versions of `libintl'. + + Once the sources are changed appropriately and the setup can handle +the use of `gettext' the only thing missing are the translations. The +Free Translation Project is also available for packages which are not +developed inside the GNU project. Therefore the information given above +applies also for every other Free Software Project. Contact +`translation@iro.umontreal.ca' to make the `.pot' files available to +the translation teams. + diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..b795e58 --- /dev/null +++ b/AUTHORS @@ -0,0 +1,19 @@ + Produced For Your Enjoyment + + By + + David Matuszek + and + Paul Reynolds + + With Modifications By + Don Smith + + Resurrected By + Tom Almy + + Curses Interface By + Stas Sergeev + + SST 2K polishing by + Eric S. Raymond diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..00acf97 --- /dev/null +++ b/COPYING @@ -0,0 +1 @@ +BSD license \ No newline at end of file diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..1f4ebf0 --- /dev/null +++ b/ChangeLog @@ -0,0 +1,7 @@ +2006-09-12 gettextize + + * Makefile.am (SUBDIRS): Add po. + (ACLOCAL_AMFLAGS): New variable. + (EXTRA_DIST): Add config.rpath, m4/ChangeLog. + * configure.ac (AC_CONFIG_FILES): Add po/Makefile.in. + diff --git a/ChangeLog.old b/ChangeLog.old new file mode 100644 index 0000000..9c7ac09 --- /dev/null +++ b/ChangeLog.old @@ -0,0 +1,106 @@ +Tom Almy story: + +Back in (about) 1977 I got a copy of this Super Star Trek game for +the CDC 6600 mainframe computer. Someone had converted it to PDP-11 +Fortran but couldn't get it to run because of its size. I modified +the program to use overlays and managed to shoehorn it in on the 56k +byte machine. + +I liked the game so much I put some time into fixing bugs, mainly +what could be called continuity errors and loopholes in the game's +logic. We even played a couple tournaments. + +In 1979, I lost access to that PDP-11. I did save the source code +listing. In 1995, missing that old friend, I started converting the +program into portable ANSI C. It's been slow, tedious work that took +over a year to accomplish. + +In early 1997, I got the bright idea to look for references to "Super +Star Trek" on the World Wide Web. There weren't many hits, but there +was one that came up with 1979 Fortran sources! This version had a +few additional features that mine didn't have, however mine had some +feature it didn't have. So I merged its features that I liked. I also +took a peek at the DECUS version (a port, less sources, to the +PDP-10), and some other variations. + +Modifications I made: + + Compared to original version, I've changed the "help" command to + "call" and the "terminate" command to "quit" to better match user + expectations. The DECUS version apparently made those changes as well + as changing "freeze" to "save". However I like "freeze". + + I added EMEXIT from the 1979 version. + + That later version also mentions srscan and lrscan working when + docked (using the starbase's scanners), so I made some changes here + to do this (and indicating that fact to the player), and then + realized the base would have a subspace radio as well -- doing a + Chart when docked updates the star chart, and all radio reports will + be heard. The Dock command will also give a report if a base is under + attack. + + It also had some added logic to spread the initial positioning of + bases. That made sense to add because most people abort games with + bad base placement. + + The experimental deathray originally had only a 5% chance of success, + but could be used repeatedly. I guess after a couple years of use, it + was less "experimental" because the 1979 version had a 70% success + rate. However it was prone to breaking after use. I upgraded the + deathray, but kept the original set of failure modes (great humor!). + + I put in the Tholian Web code from the 1979 version. + + I added code so that Romulans and regular Klingons could move in + advanced games. I re-enabled the code which allows enemy ships to + ram the Enterprise; it had never worked right. The 1979 version + seems to have it all fixed up, but I'm still not overly happy with + the algorithm. + + The DECUS version had a Deep Space Probe. Looked like a good idea + so I implimented it based on its description. + + +Stas Sergeev story: + +Found Tom Almy's C sources - yeah! Hmm, not too playable - I've got +used to that nice text-based GUI I've seen on an IBM S/370 port, and the +command-line control gets me quite annoyed. But that's a good starting +point for some improvements - the sources are finally here! I was about +to start writing an S/370 emulator to get it a go, and now here are +the sources - what a great finding. + +[a bit later] + +Added a text-based interface which makes the game much more playable. +Initially I made it for DOS using conio.h. Later I decided to make a +linux port, and I ported it using a linux-conio package. I had to patch +linux-conio a lot, so you have to use my version. The colors are still +wrong though. +I also fixed an uncountable amount of bugs and added some features, I +can't remember now which ones. + +[3 years later] + +I dusted off the game and finally got around to move it to autoconf. +For building with Borland C under DOS, use the build_bc.bat file. + +It turned out Tom Almy also did a linux port and made some bug-fixing +work, although to the much smaller extent than I did. I contacted him +and notified about my port, but he expressed no interest. :( + +[a year later] + +I've found out that Eric S Raymond (ESR) took over the development +of the Tom Almy's sources. He could use mine instead as they are +much more advanced, but oh well... Now I have to find out the way +to incorporate my mods into his version and hope that he can do +the better work on that game than I could (which is most likely +the case). +..... +OK, the changes were incorporated, however Eric removed the conio +port and therefore the game can no longer be compiled with bcc/DOS. +The DJGPP port might still be possible in the future. + + -- Stas Sergeev diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..a4b3414 --- /dev/null +++ b/INSTALL @@ -0,0 +1,229 @@ +Copyright 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software +Foundation, Inc. + + This file is free documentation; the Free Software Foundation gives +unlimited permission to copy, distribute and modify it. + +Basic Installation +================== + + These are generic installation instructions. + + The `configure' shell script attempts to guess correct values for +various system-dependent variables used during compilation. It uses +those values to create a `Makefile' in each directory of the package. +It may also create one or more `.h' files containing system-dependent +definitions. Finally, it creates a shell script `config.status' that +you can run in the future to recreate the current configuration, and a +file `config.log' containing compiler output (useful mainly for +debugging `configure'). + + It can also use an optional file (typically called `config.cache' +and enabled with `--cache-file=config.cache' or simply `-C') that saves +the results of its tests to speed up reconfiguring. (Caching is +disabled by default to prevent problems with accidental use of stale +cache files.) + + If you need to do unusual things to compile the package, please try +to figure out how `configure' could check whether to do them, and mail +diffs or instructions to the address given in the `README' so they can +be considered for the next release. If you are using the cache, and at +some point `config.cache' contains results you don't want to keep, you +may remove or edit it. + + The file `configure.ac' (or `configure.in') is used to create +`configure' by a program called `autoconf'. You only need +`configure.ac' if you want to change it or regenerate `configure' using +a newer version of `autoconf'. + +The simplest way to compile this package is: + + 1. `cd' to the directory containing the package's source code and type + `./configure' to configure the package for your system. If you're + using `csh' on an old version of System V, you might need to type + `sh ./configure' instead to prevent `csh' from trying to execute + `configure' itself. + + Running `configure' takes awhile. While running, it prints some + messages telling which features it is checking for. + + 2. Type `make' to compile the package. + + 3. Optionally, type `make check' to run any self-tests that come with + the package. + + 4. Type `make install' to install the programs and any data files and + documentation. + + 5. You can remove the program binaries and object files from the + source code directory by typing `make clean'. To also remove the + files that `configure' created (so you can compile the package for + a different kind of computer), type `make distclean'. There is + also a `make maintainer-clean' target, but that is intended mainly + for the package's developers. If you use it, you may have to get + all sorts of other programs in order to regenerate files that came + with the distribution. + +Compilers and Options +===================== + + Some systems require unusual options for compilation or linking that +the `configure' script does not know about. Run `./configure --help' +for details on some of the pertinent environment variables. + + You can give `configure' initial values for configuration parameters +by setting variables in the command line or in the environment. Here +is an example: + + ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix + + *Note Defining Variables::, for more details. + +Compiling For Multiple Architectures +==================================== + + You can compile the package for more than one kind of computer at the +same time, by placing the object files for each architecture in their +own directory. To do this, you must use a version of `make' that +supports the `VPATH' variable, such as GNU `make'. `cd' to the +directory where you want the object files and executables to go and run +the `configure' script. `configure' automatically checks for the +source code in the directory that `configure' is in and in `..'. + + If you have to use a `make' that does not support the `VPATH' +variable, you have to compile the package for one architecture at a +time in the source code directory. After you have installed the +package for one architecture, use `make distclean' before reconfiguring +for another architecture. + +Installation Names +================== + + By default, `make install' will install the package's files in +`/usr/local/bin', `/usr/local/man', etc. You can specify an +installation prefix other than `/usr/local' by giving `configure' the +option `--prefix=PATH'. + + You can specify separate installation prefixes for +architecture-specific files and architecture-independent files. If you +give `configure' the option `--exec-prefix=PATH', the package will use +PATH as the prefix for installing programs and libraries. +Documentation and other data files will still use the regular prefix. + + In addition, if you use an unusual directory layout you can give +options like `--bindir=PATH' to specify different values for particular +kinds of files. Run `configure --help' for a list of the directories +you can set and what kinds of files go in them. + + If the package supports it, you can cause programs to be installed +with an extra prefix or suffix on their names by giving `configure' the +option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. + +Optional Features +================= + + Some packages pay attention to `--enable-FEATURE' options to +`configure', where FEATURE indicates an optional part of the package. +They may also pay attention to `--with-PACKAGE' options, where PACKAGE +is something like `gnu-as' or `x' (for the X Window System). The +`README' should mention any `--enable-' and `--with-' options that the +package recognizes. + + For packages that use the X Window System, `configure' can usually +find the X include and library files automatically, but if it doesn't, +you can use the `configure' options `--x-includes=DIR' and +`--x-libraries=DIR' to specify their locations. + +Specifying the System Type +========================== + + There may be some features `configure' cannot figure out +automatically, but needs to determine by the type of machine the package +will run on. Usually, assuming the package is built to be run on the +_same_ architectures, `configure' can figure that out, but if it prints +a message saying it cannot guess the machine type, give it the +`--build=TYPE' option. TYPE can either be a short name for the system +type, such as `sun4', or a canonical name which has the form: + + CPU-COMPANY-SYSTEM + +where SYSTEM can have one of these forms: + + OS KERNEL-OS + + See the file `config.sub' for the possible values of each field. If +`config.sub' isn't included in this package, then this package doesn't +need to know the machine type. + + If you are _building_ compiler tools for cross-compiling, you should +use the `--target=TYPE' option to select the type of system they will +produce code for. + + If you want to _use_ a cross compiler, that generates code for a +platform different from the build platform, you should specify the +"host" platform (i.e., that on which the generated programs will +eventually be run) with `--host=TYPE'. + +Sharing Defaults +================ + + If you want to set default values for `configure' scripts to share, +you can create a site shell script called `config.site' that gives +default values for variables like `CC', `cache_file', and `prefix'. +`configure' looks for `PREFIX/share/config.site' if it exists, then +`PREFIX/etc/config.site' if it exists. Or, you can set the +`CONFIG_SITE' environment variable to the location of the site script. +A warning: not all `configure' scripts look for a site script. + +Defining Variables +================== + + Variables not defined in a site shell script can be set in the +environment passed to `configure'. However, some packages may run +configure again during the build, and the customized values of these +variables may be lost. In order to avoid this problem, you should set +them in the `configure' command line, using `VAR=value'. For example: + + ./configure CC=/usr/local2/bin/gcc + +will cause the specified gcc to be used as the C compiler (unless it is +overridden in the site shell script). + +`configure' Invocation +====================== + + `configure' recognizes the following options to control how it +operates. + +`--help' +`-h' + Print a summary of the options to `configure', and exit. + +`--version' +`-V' + Print the version of Autoconf used to generate the `configure' + script, and exit. + +`--cache-file=FILE' + Enable the cache: use and save the results of the tests in FILE, + traditionally `config.cache'. FILE defaults to `/dev/null' to + disable caching. + +`--config-cache' +`-C' + Alias for `--cache-file=config.cache'. + +`--quiet' +`--silent' +`-q' + Do not print messages saying which checks are being made. To + suppress all normal output, redirect it to `/dev/null' (any error + messages will still be shown). + +`--srcdir=DIR' + Look for the package's source code in directory DIR. Usually + `configure' can determine that directory automatically. + +`configure' also accepts some other, not widely useful, options. Run +`configure --help' for more details. + diff --git a/Makefile b/Makefile deleted file mode 100644 index f8acefc..0000000 --- a/Makefile +++ /dev/null @@ -1,81 +0,0 @@ -# Makefile for the Super Star Trek game - -VERSION=$(shell sed sst.doc - -sst-doc.html: sst-doc.xml - xmlto xhtml-nochunks sst-doc.xml - -install: uninstall sst.6 sst.doc sst-doc.html - install -m 755 -o 0 -g 0 -d $(ROOT)/usr/bin/ - install -m 755 -o 0 -g 0 sst $(ROOT)/usr/bin/sst - install -m 755 -o 0 -g 0 -d $(ROOT)/usr/share/man/man6/ - install -m 755 -o 0 -g 0 sst.6 $(ROOT)/usr/share/man/man6/sst.6 - mkdir -p /usr/share/doc/sst/ - install -m 644 -o 0 -g 0 sst.doc $(ROOT)/usr/share/doc/sst/ - install -m 644 -o 0 -g 0 sst-doc.html $(ROOT)/usr/share/doc/sst/index.html - -uninstall: - rm -f ${ROOT}/usr/bin/sst ${ROOT}/usr/share/man/man6/sst.6 - rm -fr ${ROOT}/usr/share/doc/sst/ - -clean: - rm -f *.o sst sst-doc.html sst-doc.txt sst.doc - -# The "trunk" below assumes this is a Subversion working copy -sst-$(VERSION).tar.gz: $(SOURCES) sst.6 - ls $(SOURCES) sst.6 | sed s:^:sst-$(VERSION)/: >MANIFEST - (cd ..; ln -s trunk sst-$(VERSION)) - (cd ..; tar -czvf trunk/sst-$(VERSION).tar.gz `cat trunk/MANIFEST`) - (cd ..; rm sst-$(VERSION)) - -dist: sst-$(VERSION).tar.gz - -release: sst-$(VERSION).tar.gz sst.html - shipper; rm -f CHANGES ANNOUNCE* *.6 *.html *.rpm *.lsm MANIFEST - -version: - @echo $(VERSION) - -# Experimental XaW code, not yet integrated with the game -xio: xio.c - cc xio.c -lXaw3d -o xio diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..9b972df --- /dev/null +++ b/Makefile.am @@ -0,0 +1,18 @@ +## Process this file with automake to produce Makefile.in + +SUBDIRS = po src doc + +EXTRA_DIST = config.rpath po m4 \ + autogen.sh sst.spec ChangeLog.old + +maintainer-clean-local: + rm -f configure + rm -f aclocal.m4 + rm -f `find . -name Makefile.in` + rm -f `find . -name *~` + rm -f src/include/config.h.in + +clean-local: + rm -rf autom4te*.cache + +ACLOCAL_AMFLAGS = -I m4 diff --git a/Makefile.in b/Makefile.in new file mode 100644 index 0000000..4650df6 --- /dev/null +++ b/Makefile.in @@ -0,0 +1,600 @@ +# Makefile.in generated by automake 1.9.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = . +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in $(top_srcdir)/configure ABOUT-NLS \ + AUTHORS COPYING ChangeLog INSTALL NEWS TODO compile \ + config.guess config.rpath config.sub depcomp install-sh \ + missing mkinstalldirs +subdir = . +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno configure.status.lineno +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/src/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-exec-recursive install-info-recursive \ + install-recursive installcheck-recursive installdirs-recursive \ + pdf-recursive ps-recursive uninstall-info-recursive \ + uninstall-recursive +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + { test ! -d $(distdir) \ + || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -fr $(distdir); }; } +DIST_ARCHIVES = $(distdir).tar.gz +GZIP_ENV = --best +distuninstallcheck_listfiles = find . -type f -print +distcleancheck_listfiles = find . -type f -print +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GMSGFMT = @GMSGFMT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LDFLAGS = @LDFLAGS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_STRIP = @ac_ct_STRIP@ +ac_ct_have_python = @ac_ct_have_python@ +ac_ct_have_xmlto = @ac_ct_have_xmlto@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +have_python = @have_python@ +have_xmlto = @have_xmlto@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +SUBDIRS = po src doc +EXTRA_DIST = config.rpath po m4 \ + autogen.sh sst.spec ChangeLog.old + +ACLOCAL_AMFLAGS = -I m4 +all: all-recursive + +.SUFFIXES: +am--refresh: + @: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \ + cd $(srcdir) && $(AUTOMAKE) --gnu \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +uninstall-info-am: + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +mostlyclean-recursive clean-recursive distclean-recursive \ +maintainer-clean-recursive: + @failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + $(am__remove_distdir) + mkdir $(distdir) + $(mkdir_p) $(distdir)/m4 $(distdir)/po + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done + list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(mkdir_p) "$(distdir)/$$subdir" \ + || exit 1; \ + distdir=`$(am__cd) $(distdir) && pwd`; \ + top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ + (cd $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$top_distdir" \ + distdir="$$distdir/$$subdir" \ + distdir) \ + || exit 1; \ + fi; \ + done + -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r $(distdir) +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 + $(am__remove_distdir) + +dist-tarZ: distdir + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__remove_distdir) + +dist-shar: distdir + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__remove_distdir) + +dist dist-all: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir); chmod a+w $(distdir) + mkdir $(distdir)/_build + mkdir $(distdir)/_inst + chmod a-w $(distdir) + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && cd $(distdir)/_build \ + && ../configure --srcdir=.. --prefix="$$dc_install_base" \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck + $(am__remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}' +distuninstallcheck: + @cd $(distuninstallcheck_dir) \ + && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-recursive + +clean-am: clean-generic clean-local mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +info: info-recursive + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-recursive + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic \ + maintainer-clean-local + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-info-am + +uninstall-info: uninstall-info-recursive + +.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \ + check-am clean clean-generic clean-local clean-recursive ctags \ + ctags-recursive dist dist-all dist-bzip2 dist-gzip dist-shar \ + dist-tarZ dist-zip distcheck distclean distclean-generic \ + distclean-recursive distclean-tags distcleancheck distdir \ + distuninstallcheck dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + maintainer-clean-local maintainer-clean-recursive mostlyclean \ + mostlyclean-generic mostlyclean-recursive pdf pdf-am ps ps-am \ + tags tags-recursive uninstall uninstall-am uninstall-info-am + + +maintainer-clean-local: + rm -f configure + rm -f aclocal.m4 + rm -f `find . -name Makefile.in` + rm -f `find . -name *~` + rm -f src/include/config.h.in + +clean-local: + rm -rf autom4te*.cache +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/NEWS b/NEWS new file mode 100644 index 0000000..e69de29 diff --git a/README b/README index 97ab9f5..2063e42 100644 --- a/README +++ b/README @@ -5,9 +5,6 @@ strip-mine them for dilithium! Encounter mysterious space thingies! This is the classic Super Star Trek game from the days of slow teletypes, reloaded. -There is one binary, sst. -On-line documentation goes to /usr/share/doc/sst.doc. - If you enjoy this, check out other ancient games in the Retrocomputing Museum at . diff --git a/TODO b/TODO index 0c10488..dae737b 100644 --- a/TODO +++ b/TODO @@ -1,4 +1,21 @@ Super Star Trek TO-DO list -* Wrap a GUI around it. +Short-term items: + +* Bring the online help in sync with our commands changes + +* Find out why the online help contains the escape sequences like ~@~T (Eric?) + +* Adjust the sst.spec wrt the build system changes + +* Maybe make a release + + +Long-term items: + +* gettextize + +* Russian translation + +* Wrap a GUI around it. diff --git a/aclocal.m4 b/aclocal.m4 new file mode 100644 index 0000000..6c88f2b --- /dev/null +++ b/aclocal.m4 @@ -0,0 +1,870 @@ +# generated automatically by aclocal 1.9.6 -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005 Free Software Foundation, Inc. +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +# Copyright (C) 2002, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"]) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION so it can be traced. +# This function is AC_REQUIREd by AC_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], + [AM_AUTOMAKE_VERSION([1.9.6])]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to +# `$srcdir', `$srcdir/..', or `$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is `.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[dnl Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50])dnl +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 7 + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ(2.52)dnl + ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE]) +AC_SUBST([$1_FALSE]) +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 8 + +# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "GCJ", or "OBJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], + [$1], CXX, [depcc="$CXX" am_compiler_list=], + [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + case $depmode in + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + none) break ;; + esac + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. + if depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE(dependency-tracking, +[ --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH]) +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +#serial 3 + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[for mf in $CONFIG_FILES; do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # So let's grep whole file. + if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done +done +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each `.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 8 + +# AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. +AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 12 + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.58])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +# test to see if srcdir already configured +if test "`cd $srcdir && pwd`" != "`pwd`" && + test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) +AM_MISSING_PROG(AUTOCONF, autoconf) +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) +AM_MISSING_PROG(AUTOHEADER, autoheader) +AM_MISSING_PROG(MAKEINFO, makeinfo) +AM_PROG_INSTALL_SH +AM_PROG_INSTALL_STRIP +AC_REQUIRE([AM_PROG_MKDIR_P])dnl +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +]) +]) + + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $1 | $1:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +install_sh=${install_sh-"$am_aux_dir/install-sh"} +AC_SUBST(install_sh)]) + +# Copyright (C) 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 3 + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo done +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# We grep out `Entering directory' and `Leaving directory' +# messages which can occur if `w' ends up in MAKEFLAGS. +# In particular we don't look at `^make:' because GNU make might +# be invoked under some other name (usually "gmake"), in which +# case it prints its new name instead of `make'. +if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then + am__include=include + am__quote= + _am_result=GNU +fi +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then + am__include=.include + am__quote="\"" + _am_result=BSD + fi +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it supports --run. +# If it does, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + AC_MSG_WARN([`missing' script is too old or missing]) +fi +]) + +# Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_MKDIR_P +# --------------- +# Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise. +# +# Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories +# created by `make install' are always world readable, even if the +# installer happens to have an overly restrictive umask (e.g. 077). +# This was a mistake. There are at least two reasons why we must not +# use `-m 0755': +# - it causes special bits like SGID to be ignored, +# - it may be too restrictive (some setups expect 775 directories). +# +# Do not use -m 0755 and let people choose whatever they expect by +# setting umask. +# +# We cannot accept any implementation of `mkdir' that recognizes `-p'. +# Some implementations (such as Solaris 8's) are not thread-safe: if a +# parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c' +# concurrently, both version can detect that a/ is missing, but only +# one can create it and the other will error out. Consequently we +# restrict ourselves to GNU make (using the --version option ensures +# this.) +AC_DEFUN([AM_PROG_MKDIR_P], +[if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then + # We used to keeping the `.' as first argument, in order to + # allow $(mkdir_p) to be used without argument. As in + # $(mkdir_p) $(somedir) + # where $(somedir) is conditionally defined. However this is wrong + # for two reasons: + # 1. if the package is installed by a user who cannot write `.' + # make install will fail, + # 2. the above comment should most certainly read + # $(mkdir_p) $(DESTDIR)$(somedir) + # so it does not work when $(somedir) is undefined and + # $(DESTDIR) is not. + # To support the latter case, we have to write + # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), + # so the `.' trick is pointless. + mkdir_p='mkdir -p --' +else + # On NextStep and OpenStep, the `mkdir' command does not + # recognize any option. It will interpret all options as + # directories to create, and then abort because `.' already + # exists. + for d in ./-p ./--version; + do + test -d $d && rmdir $d + done + # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. + if test -f "$ac_aux_dir/mkinstalldirs"; then + mkdir_p='$(mkinstalldirs)' + else + mkdir_p='$(install_sh) -d' + fi +fi +AC_SUBST([mkdir_p])]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 3 + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# ------------------------------ +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) + +# _AM_SET_OPTIONS(OPTIONS) +# ---------------------------------- +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 +# Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 4 + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftest.file +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftest.file` + fi + rm -f conftest.file + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT(yes)]) + +# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor `install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in `make install-strip', and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be `maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004, 2005 Free Software Foundation, Inc. +# +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# serial 2 + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of `v7', `ustar', or `pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. +AM_MISSING_PROG([AMTAR], [tar]) +m4_if([$1], [v7], + [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], + [m4_case([$1], [ustar],, [pax],, + [m4_fatal([Unknown tar format])]) +AC_MSG_CHECKING([how to create a $1 tar archive]) +# Loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' +_am_tools=${am_cv_prog_tar_$1-$_am_tools} +# Do not fold the above two line into one, because Tru64 sh and +# Solaris sh will not grok spaces in the rhs of `-'. +for _am_tool in $_am_tools +do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; + do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi +done +rm -rf conftest.dir + +AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) +AC_MSG_RESULT([$am_cv_prog_tar_$1])]) +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + +m4_include([m4/gettext.m4]) +m4_include([m4/iconv.m4]) +m4_include([m4/lib-ld.m4]) +m4_include([m4/lib-link.m4]) +m4_include([m4/lib-prefix.m4]) +m4_include([m4/nls.m4]) +m4_include([m4/po.m4]) +m4_include([m4/progtest.m4]) diff --git a/ai.c b/ai.c deleted file mode 100644 index a1b4bbf..0000000 --- a/ai.c +++ /dev/null @@ -1,615 +0,0 @@ -#include "sst.h" - -static int tryexit(int lookx, int looky, int ienm, int loccom, int irun) -{ - int iqx, iqy, l; - - iqx = quadx+(lookx+(QUADSIZE-1))/QUADSIZE - 1; - iqy = quady+(looky+(QUADSIZE-1))/QUADSIZE - 1; - if (!VALID_QUADRANT(iqx,iqy) || - game.state.galaxy[iqx][iqy].supernova || - game.state.galaxy[iqx][iqy].klingons > 8) - return 0; /* no can do -- neg energy, supernovae, or >8 Klingons */ - if (ienm == IHR) return 0; /* Romulans cannot escape! */ - if (irun == 0) { - /* avoid intruding on another commander's territory */ - if (ienm == IHC) { - for_commanders(l) - if (game.state.cx[l]==iqx && game.state.cy[l]==iqy) return 0; - /* refuse to leave if currently attacking starbase */ - if (batx==quadx && baty==quady) return 0; - } - /* don't leave if over 1000 units of energy */ - if (game.kpower[loccom] > 1000.) return 0; - } - /* print escape message and move out of quadrant. - We know this if either short or long range sensors are working */ - if (game.damage[DSRSENS] == 0.0 || game.damage[DLRSENS] == 0.0 || - condit == IHDOCKED) { - crmena(1, ienm, 2, game.kx[loccom], game.ky[loccom]); - prout(" escapes to %s (and regains strength).", - cramlc(quadrant, iqx, iqy)); - } - /* handle local matters related to escape */ - game.quad[game.kx[loccom]][game.ky[loccom]] = IHDOT; - game.kx[loccom] = game.kx[nenhere]; - game.ky[loccom] = game.ky[nenhere]; - game.kavgd[loccom] = game.kavgd[nenhere]; - game.kpower[loccom] = game.kpower[nenhere]; - game.kdist[loccom] = game.kdist[nenhere]; - klhere--; - nenhere--; - if (condit != IHDOCKED) newcnd(); - /* Handle global matters related to escape */ - game.state.galaxy[quadx][quady].klingons--; - game.state.galaxy[iqx][iqy].klingons++; - if (ienm==IHS) { - ishere=0; - iscate=0; - ientesc=0; - isatb=0; - game.future[FSCMOVE]=0.2777+game.state.date; - game.future[FSCDBAS]=FOREVER; - game.state.isx=iqx; - game.state.isy=iqy; - } - else { - for_commanders(l) { - if (game.state.cx[l]==quadx && game.state.cy[l]==quady) { - game.state.cx[l]=iqx; - game.state.cy[l]=iqy; - break; - } - } - comhere = 0; - } - return 1; /* success */ -} - - -static void movebaddy(int comx, int comy, int loccom, int ienm) -{ - int motion, mdist, nsteps, mx, my, nextx, nexty, lookx, looky, ll; - int irun = 0; - int krawlx, krawly; - int success; - int attempts; - /* This should probably be just comhere + ishere */ - int nbaddys = skill >= SKILL_EXPERT ? - (int)((comhere*2 + ishere*2+klhere*1.23+irhere*1.5)/2.0): - (comhere + ishere); - double dist1, forces; - - dist1 = game.kdist[loccom]; - mdist = dist1 + 0.5; /* Nearest integer distance */ - - /* If SC, check with spy to see if should hi-tail it */ - if (ienm==IHS && - (game.kpower[loccom] <= 500.0 || (condit==IHDOCKED && game.damage[DPHOTON]==0))) { - irun = 1; - motion = -QUADSIZE; - } - else { - /* decide whether to advance, retreat, or hold position */ -/* Algorithm: - * Enterprise has "force" based on condition of phaser and photon torpedoes. - If both are operating full strength, force is 1000. If both are damaged, - force is -1000. Having shields down subtracts an additional 1000. - - * Enemy has forces equal to the energy of the attacker plus - 100*(K+R) + 500*(C+S) - 400 for novice through good levels OR - 346*K + 400*R + 500*(C+S) - 400 for expert and emeritus. - - Attacker Initial energy levels (nominal): - Klingon Romulan Commander Super-Commander - Novice 400 700 1200 - Fair 425 750 1250 - Good 450 800 1300 1750 - Expert 475 850 1350 1875 - Emeritus 500 900 1400 2000 - VARIANCE 75 200 200 200 - - Enemy vessels only move prior to their attack. In Novice - Good games - only commanders move. In Expert games, all enemy vessels move if there - is a commander present. In Emeritus games all enemy vessels move. - - * If Enterprise is not docked, an agressive action is taken if enemy - forces are 1000 greater than Enterprise. - - Agressive action on average cuts the distance between the ship and - the enemy to 1/4 the original. - - * At lower energy advantage, movement units are proportional to the - advantage with a 650 advantage being to hold ground, 800 to move forward - 1, 950 for two, 150 for back 4, etc. Variance of 100. - - If docked, is reduced by roughly 1.75*skill, generally forcing a - retreat, especially at high skill levels. - - * Motion is limited to skill level, except for SC hi-tailing it out. - */ - - forces = game.kpower[loccom]+100.0*nenhere+400*(nbaddys-1); - if (shldup==0) forces += 1000; /* Good for enemy if shield is down! */ - if (game.damage[DPHASER] == 0.0 || game.damage[DPHOTON] == 0.0) { - if (game.damage[DPHASER] != 0) /* phasers damaged */ - forces += 300.0; - else - forces -= 0.2*(energy - 2500.0); - if (game.damage[DPHOTON] != 0) /* photon torpedoes damaged */ - forces += 300.0; - else - forces -= 50.0*torps; - } - else { - /* phasers and photon tubes both out! */ - forces += 1000.0; - } - motion = 0; - if (forces <= 1000.0 && condit != IHDOCKED) /* Typical situation */ - motion = ((forces+200.0*Rand())/150.0) - 5.0; - else { - if (forces > 1000.0) /* Very strong -- move in for kill */ - motion = (1.0-square(Rand()))*dist1 + 1.0; - if (condit==IHDOCKED && (game.options & OPTION_BASE)) /* protected by base -- back off ! */ - motion -= skill*(2.0-square(Rand())); - } -#ifdef DEBUG - if (idebug) { - proutn("MOTION = %1.2f", motion); - proutn(" FORCES = %1,2f", forces); - } -#endif - /* don't move if no motion */ - if (motion==0) return; - /* Limit motion according to skill */ - if (abs(motion) > skill) motion = (motion < 0) ? -skill : skill; - } - /* calculate preferred number of steps */ - nsteps = motion < 0 ? -motion : motion; - if (motion > 0 && nsteps > mdist) nsteps = mdist; /* don't overshoot */ - if (nsteps > QUADSIZE) nsteps = QUADSIZE; /* This shouldn't be necessary */ - if (nsteps < 1) nsteps = 1; /* This shouldn't be necessary */ -#ifdef DEBUG - if (idebug) { - prout("NSTEPS = %d", nsteps); - } -#endif - /* Compute preferred values of delta X and Y */ - mx = sectx - comx; - my = secty - comy; - if (2.0 * abs(mx) < abs(my)) mx = 0; - if (2.0 * abs(my) < abs(sectx-comx)) my = 0; - if (mx != 0) mx = mx*motion < 0 ? -1 : 1; - if (my != 0) my = my*motion < 0 ? -1 : 1; - nextx = comx; - nexty = comy; - /* main move loop */ - for (ll = 0; ll < nsteps; ll++) { -#ifdef DEBUG - if (idebug) { - prout("%d", ll+1); - } -#endif - /* Check if preferred position available */ - lookx = nextx + mx; - looky = nexty + my; - krawlx = mx < 0 ? 1 : -1; - krawly = my < 0 ? 1 : -1; - success = 0; - attempts = 0; /* Settle mysterious hang problem */ - while (attempts++ < 20 && !success) { - if (lookx < 1 || lookx > QUADSIZE) { - if (motion < 0 && tryexit(lookx, looky, ienm, loccom, irun)) - return; - if (krawlx == mx || my == 0) break; - lookx = nextx + krawlx; - krawlx = -krawlx; - } - else if (looky < 1 || looky > QUADSIZE) { - if (motion < 0 && tryexit(lookx, looky, ienm, loccom, irun)) - return; - if (krawly == my || mx == 0) break; - looky = nexty + krawly; - krawly = -krawly; - } - else if ((game.options & OPTION_RAMMING) && game.quad[lookx][looky] != IHDOT) { - /* See if we should ram ship */ - if (game.quad[lookx][looky] == ship && - (ienm == IHC || ienm == IHS)) { - ram(1, ienm, comx, comy); - return; - } - if (krawlx != mx && my != 0) { - lookx = nextx + krawlx; - krawlx = -krawlx; - } - else if (krawly != my && mx != 0) { - looky = nexty + krawly; - krawly = -krawly; - } - else break; /* we have failed */ - } - else success = 1; - } - if (success) { - nextx = lookx; - nexty = looky; -#ifdef DEBUG - if (idebug) { - prout(cramlc(neither, nextx, nexty)); - } -#endif - } - else break; /* done early */ - } - /* Put commander in place within same quadrant */ - game.quad[comx][comy] = IHDOT; - game.quad[nextx][nexty] = ienm; - if (nextx != comx || nexty != comy) { - /* it moved */ - game.kx[loccom] = nextx; - game.ky[loccom] = nexty; - game.kdist[loccom] = game.kavgd[loccom] = - sqrt(square(sectx-nextx)+square(secty-nexty)); - if (game.damage[DSRSENS] == 0 || condit == IHDOCKED) { - proutn("***"); - cramen(ienm); - proutn(" from %s", cramlc(2, comx, comy)); - if (game.kdist[loccom] < dist1) proutn(" advances to "); - else proutn(" retreats to "); - prout(cramlc(sector, nextx, nexty)); - } - } -} - -void movcom(void) -{ - int ix, iy, i; - -#ifdef DEBUG - if (idebug) prout("MOVCOM"); -#endif - - /* Figure out which Klingon is the commander (or Supercommander) - and do move */ - if (comhere) - for_local_enemies(i) { - ix = game.kx[i]; - iy = game.ky[i]; - if (game.quad[ix][iy] == IHC) { - movebaddy(ix, iy, i, IHC); - break; - } - } - if (ishere) - for_local_enemies(i) { - ix = game.kx[i]; - iy = game.ky[i]; - if (game.quad[ix][iy] == IHS) { - movebaddy(ix, iy, i, IHS); - break; - } - } - /* if skill level is high, move other Klingons and Romulans too! - Move these last so they can base their actions on what the - commander(s) do. */ - if (skill >= SKILL_EXPERT && (game.options & OPTION_MVBADDY)) - for_local_enemies(i) { - ix = game.kx[i]; - iy = game.ky[i]; - if (game.quad[ix][iy] == IHK || game.quad[ix][iy] == IHR) - movebaddy(ix, iy, i, game.quad[ix][iy]); - } - - sortkl(); -} - -static int movescom(int iqx, int iqy, int flag, int *ipage) -{ - int i; - - if ((iqx==quadx && iqy==quady) || - !VALID_QUADRANT(iqx, iqy) || - game.state.galaxy[iqx][iqy].supernova || - game.state.galaxy[iqx][iqy].klingons > 8) - return 1; - if (flag) { - /* Avoid quadrants with bases if we want to avoid Enterprise */ - for_starbases(i) - if (game.state.baseqx[i]==iqx && game.state.baseqy[i]==iqy) return 1; - } - if (justin && !iscate) return 1; - /* do the move */ - game.state.galaxy[game.state.isx][game.state.isy].klingons--; - game.state.isx = iqx; - game.state.isy = iqy; - game.state.galaxy[game.state.isx][game.state.isy].klingons++; - if (ishere) { - /* SC has scooted, Remove him from current quadrant */ - iscate=0; - isatb=0; - ishere=0; - ientesc=0; - game.future[FSCDBAS]=FOREVER; - for_local_enemies(i) - if (game.quad[game.kx[i]][game.ky[i]] == IHS) break; - game.quad[game.kx[i]][game.ky[i]] = IHDOT; - game.kx[i] = game.kx[nenhere]; - game.ky[i] = game.ky[nenhere]; - game.kdist[i] = game.kdist[nenhere]; - game.kavgd[i] = game.kavgd[nenhere]; - game.kpower[i] = game.kpower[nenhere]; - klhere--; - nenhere--; - if (condit!=IHDOCKED) newcnd(); - sortkl(); - } - /* check for a helpful planet */ - for (i = 0; i < inplan; i++) { - if (game.state.plnets[i].x==game.state.isx && game.state.plnets[i].y==game.state.isy && - game.state.plnets[i].crystals == 1) { - /* destroy the planet */ - DESTROY(&game.state.plnets[i]); - game.state.galaxy[game.state.isx][game.state.isy].planets -= 1; - if (game.damage[DRADIO] == 0.0 || condit == IHDOCKED) { - if (*ipage==0) pause_game(1); - *ipage = 1; - prout("Lt. Uhura- \"Captain, Starfleet Intelligence reports"); - proutn(" a planet in "); - proutn(cramlc(quadrant, game.state.isx, game.state.isy)); - prout(" has been destroyed"); - prout(" by the Super-commander.\""); - } - break; - } - } - return 0; /* looks good! */ -} - -void scom(int *ipage) -{ - int i, i2, j, ideltax, ideltay, ibqx, ibqy, sx, sy, ifindit, iwhichb; - int iqx, iqy; - int basetbl[BASEMAX+1]; - double bdist[BASEMAX+1]; - int flag; -#ifdef DEBUG - if (idebug) prout("SCOM"); -#endif - - /* Decide on being active or passive */ - flag = ((NKILLC+NKILLK)/(game.state.date+0.01-indate) < 0.1*skill*(skill+1.0) || - (game.state.date-indate) < 3.0); - if (iscate==0 && flag) { - /* compute move away from Enterprise */ - ideltax = game.state.isx-quadx; - ideltay = game.state.isy-quady; - if (sqrt(ideltax*(double)ideltax+ideltay*(double)ideltay) > 2.0) { - /* circulate in space */ - ideltax = game.state.isy-quady; - ideltay = quadx-game.state.isx; - } - } - else { - /* compute distances to starbases */ - if (game.state.rembase <= 0) { - /* nothing left to do */ - game.future[FSCMOVE] = FOREVER; - return; - } - sx = game.state.isx; - sy = game.state.isy; - for_starbases(i) { - basetbl[i] = i; - ibqx = game.state.baseqx[i]; - ibqy = game.state.baseqy[i]; - bdist[i] = sqrt(square(ibqx-sx) + square(ibqy-sy)); - } - if (game.state.rembase > 1) { - /* sort into nearest first order */ - int iswitch; - do { - iswitch = 0; - for (i=1; i < game.state.rembase-1; i++) { - if (bdist[i] > bdist[i+1]) { - int ti = basetbl[i]; - double t = bdist[i]; - bdist[i] = bdist[i+1]; - bdist[i+1] = t; - basetbl[i] = basetbl[i+1]; - basetbl[i+1] =ti; - iswitch = 1; - } - } - } while (iswitch); - } - /* look for nearest base without a commander, no Enterprise, and - without too many Klingons, and not already under attack. */ - ifindit = iwhichb = 0; - - for_starbases(i2) { - i = basetbl[i2]; /* bug in original had it not finding nearest*/ - ibqx = game.state.baseqx[i]; - ibqy = game.state.baseqy[i]; - if ((ibqx == quadx && ibqy == quady) || - (ibqx == batx && ibqy == baty) || - game.state.galaxy[ibqx][ibqy].supernova || - game.state.galaxy[ibqx][ibqy].klingons > 8) - continue; - /* if there is a commander, an no other base is appropriate, - we will take the one with the commander */ - for_commanders (j) { - if (ibqx==game.state.cx[j] && ibqy==game.state.cy[j] && ifindit!= 2) { - ifindit = 2; - iwhichb = i; - break; - } - } - if (j > game.state.remcom) { /* no commander -- use this one */ - ifindit = 1; - iwhichb = i; - break; - } - } - if (ifindit==0) return; /* Nothing suitable -- wait until next time*/ - ibqx = game.state.baseqx[iwhichb]; - ibqy = game.state.baseqy[iwhichb]; - /* decide how to move toward base */ - ideltax = ibqx - game.state.isx; - ideltay = ibqy - game.state.isy; - } - /* Maximum movement is 1 quadrant in either or both axis */ - if (ideltax > 1) ideltax = 1; - if (ideltax < -1) ideltax = -1; - if (ideltay > 1) ideltay = 1; - if (ideltay < -1) ideltay = -1; - - /* try moving in both x and y directions */ - iqx = game.state.isx + ideltax; - iqy = game.state.isy + ideltax; - if (movescom(iqx, iqy, flag, ipage)) { - /* failed -- try some other maneuvers */ - if (ideltax==0 || ideltay==0) { - /* attempt angle move */ - if (ideltax != 0) { - iqy = game.state.isy + 1; - if (movescom(iqx, iqy, flag, ipage)) { - iqy = game.state.isy - 1; - movescom(iqx, iqy, flag, ipage); - } - } - else { - iqx = game.state.isx + 1; - if (movescom(iqx, iqy, flag, ipage)) { - iqx = game.state.isx - 1; - movescom(iqx, iqy, flag, ipage); - } - } - } - else { - /* try moving just in x or y */ - iqy = game.state.isy; - if (movescom(iqx, iqy, flag, ipage)) { - iqy = game.state.isy + ideltay; - iqx = game.state.isx; - movescom(iqx, iqy, flag, ipage); - } - } - } - /* check for a base */ - if (game.state.rembase == 0) { - game.future[FSCMOVE] = FOREVER; - } - else for_starbases(i) { - ibqx = game.state.baseqx[i]; - ibqy = game.state.baseqy[i]; - if (ibqx==game.state.isx && ibqy == game.state.isy && game.state.isx != batx && game.state.isy != baty) { - /* attack the base */ - if (flag) return; /* no, don't attack base! */ - iseenit = 0; - isatb=1; - game.future[FSCDBAS] = game.state.date + 1.0 +2.0*Rand(); - if (game.future[FCDBAS] < FOREVER) game.future[FSCDBAS] += - game.future[FCDBAS]-game.state.date; - if (game.damage[DRADIO] > 0 && condit != IHDOCKED) - return; /* no warning */ - iseenit = 1; - if (*ipage == 0) pause_game(1); - *ipage=1; - proutn("Lt. Uhura- \"Captain, the starbase in "); - proutn(cramlc(quadrant, game.state.isx, game.state.isy)); - skip(1); - prout(" reports that it is under attack from the Klingon Super-commander."); - proutn(" It can survive until stardate %d.\"", - (int)game.future[FSCDBAS]); - if (resting==0) return; - prout("Mr. Spock- \"Captain, shall we cancel the rest period?\""); - if (ja()==0) return; - resting = 0; - Time = 0.0; /* actually finished */ - return; - } - } - /* Check for intelligence report */ - if ( -#ifdef DEBUG - idebug==0 && -#endif - (Rand() > 0.2 || - (game.damage[DRADIO] > 0.0 && condit != IHDOCKED) || - !game.state.galaxy[game.state.isx][game.state.isy].charted)) - return; - if (*ipage==0) pause_game(1); - *ipage = 1; - prout("Lt. Uhura- \"Captain, Starfleet Intelligence reports"); - proutn(" the Super-commander is in "); - proutn(cramlc(quadrant, game.state.isx, game.state. isy)); - prout(".\""); - return; -} - -void movetho(void) -{ - int idx, idy, im, i, dum, my; - /* Move the Tholian */ - if (ithere==0 || justin == 1) return; - - if (ithx == 1 && ithy == 1) { - idx = 1; idy = QUADSIZE; - } - else if (ithx == 1 && ithy == QUADSIZE) { - idx = QUADSIZE; idy = QUADSIZE; - } - else if (ithx == QUADSIZE && ithy == QUADSIZE) { - idx = QUADSIZE; idy = 1; - } - else if (ithx == QUADSIZE && ithy == 1) { - idx = 1; idy = 1; - } - else { - /* something is wrong! */ - ithere = 0; - return; - } - - /* Do nothing if we are blocked */ - if (game.quad[idx][idy]!= IHDOT && game.quad[idx][idy]!= IHWEB) return; - game.quad[ithx][ithy] = IHWEB; - - if (ithx != idx) { - /* move in x axis */ - im = fabs((double)idx - ithx)/((double)idx - ithx); - while (ithx != idx) { - ithx += im; - if (game.quad[ithx][ithy]==IHDOT) game.quad[ithx][ithy] = IHWEB; - } - } - else if (ithy != idy) { - /* move in y axis */ - im = fabs((double)idy - ithy)/((double)idy - ithy); - while (ithy != idy) { - ithy += im; - if (game.quad[ithx][ithy]==IHDOT) game.quad[ithx][ithy] = IHWEB; - } - } - game.quad[ithx][ithy] = IHT; - game.kx[nenhere]=ithx; - game.ky[nenhere]=ithy; - - /* check to see if all holes plugged */ - for_sectors(i) { - if (game.quad[1][i]!=IHWEB && game.quad[1][i]!=IHT) return; - if (game.quad[QUADSIZE][i]!=IHWEB && game.quad[QUADSIZE][i]!=IHT) return; - if (game.quad[i][1]!=IHWEB && game.quad[i][1]!=IHT) return; - if (game.quad[i][QUADSIZE]!=IHWEB && game.quad[i][QUADSIZE]!=IHT) return; - } - /* All plugged up -- Tholian splits */ - game.quad[ithx][ithy]=IHWEB; - dropin(IHBLANK, &dum, &my); - crmena(1,IHT, 2, ithx, ithy); - prout(" completes web."); - ithere = ithx = ithy = 0; - nenhere--; - return; -} diff --git a/autogen.sh b/autogen.sh new file mode 100755 index 0000000..1c69a72 --- /dev/null +++ b/autogen.sh @@ -0,0 +1,4 @@ +#!/bin/sh +# Run this to generate all the initial makefiles, etc. + +autoreconf -v diff --git a/battle.c b/battle.c deleted file mode 100644 index 56a981f..0000000 --- a/battle.c +++ /dev/null @@ -1,1226 +0,0 @@ -#include -#include "sst.h" - -void doshield(int i) -{ - int key; - enum {NONE, SHUP, SHDN, NRG} action = NONE; - - ididit = 0; - - if (i == 2) action = SHUP; - else { - key = scan(); - if (key == IHALPHA) { - if (isit("transfer")) - action = NRG; - else { - chew(); - if (game.damage[DSHIELD]) { - prout("Shields damaged and down."); - return; - } - if (isit("up")) - action = SHUP; - else if (isit("down")) - action = SHDN; - } - } - if (action==NONE) { - proutn("Do you wish to change shield energy? "); - if (ja()) { - proutn("Energy to transfer to shields- "); - action = NRG; - } - else if (game.damage[DSHIELD]) { - prout("Shields damaged and down."); - return; - } - else if (shldup) { - proutn("Shields are up. Do you want them down? "); - if (ja()) action = SHDN; - else { - chew(); - return; - } - } - else { - proutn("Shields are down. Do you want them up? "); - if (ja()) action = SHUP; - else { - chew(); - return; - } - } - } - } - switch (action) { - case SHUP: /* raise shields */ - if (shldup) { - prout("Shields already up."); - return; - } - shldup = 1; - shldchg = 1; - if (condit != IHDOCKED) energy -= 50.0; - prout("Shields raised."); - if (energy <= 0) { - skip(1); - prout("Shields raising uses up last of energy."); - finish(FNRG); - return; - } - ididit=1; - return; - case SHDN: - if (shldup==0) { - prout("Shields already down."); - return; - } - shldup=0; - shldchg=1; - prout("Shields lowered."); - ididit=1; - return; - case NRG: - while (scan() != IHREAL) { - chew(); - proutn("Energy to transfer to shields- "); - } - chew(); - if (aaitem==0) return; - if (aaitem > energy) { - prout("Insufficient ship energy."); - return; - } - ididit = 1; - if (shield+aaitem >= inshld) { - prout("Shield energy maximized."); - if (shield+aaitem > inshld) { - prout("Excess energy requested returned to ship energy"); - } - energy -= inshld-shield; - shield = inshld; - return; - } - if (aaitem < 0.0 && energy-aaitem > inenrg) { - /* Prevent shield drain loophole */ - skip(1); - prout("Engineering to bridge--"); - prout(" Scott here. Power circuit problem, Captain."); - prout(" I can't drain the shields."); - ididit = 0; - return; - } - if (shield+aaitem < 0) { - prout("All shield energy transferred to ship."); - energy += shield; - shield = 0.0; - return; - } - proutn("Scotty- \""); - if (aaitem > 0) - prout("Transferring energy to shields.\""); - else - prout("Draining energy from shields.\""); - shield += aaitem; - energy -= aaitem; - return; - case NONE:; /* avoid gcc warning */ - } -} - -void ram(int ibumpd, int ienm, int ix, int iy) -{ - double type = 1.0, extradm; - int icas, l; - - prouts("***RED ALERT! RED ALERT!"); - skip(1); - prout("***COLLISION IMMINENT."); - skip(2); - proutn("***"); - crmshp(); - switch (ienm) { - case IHR: type = 1.5; break; - case IHC: type = 2.0; break; - case IHS: type = 2.5; break; - case IHT: type = 0.5; break; - case IHQUEST: type = 4.0; break; - } - proutn(ibumpd ? " rammed by " : " rams "); - crmena(0, ienm, 2, ix, iy); - if (ibumpd) proutn(" (original position)"); - skip(1); - deadkl(ix, iy, ienm, sectx, secty); - proutn("***"); - crmshp(); - prout(" heavily damaged."); - icas = 10.0+20.0*Rand(); - prout("***Sickbay reports %d casualties", icas); - casual += icas; - for (l=0; l < NDEVICES; l++) { - if (l == DDRAY) - continue; // Don't damage deathray - if (game.damage[l] < 0) - continue; - extradm = (10.0*type*Rand()+1.0)*damfac; - game.damage[l] += Time + extradm; /* Damage for at least time of travel! */ - } - shldup = 0; - if (KLINGREM) { - pause_game(2); - dreprt(); - } - else finish(FWON); - return; -} - -void torpedo(double course, double r, int inx, int iny, double *hit, int i, int n) -{ - int l, iquad=0, ix=0, iy=0, jx=0, jy=0, shoved=0, ll; - - double ac=course + 0.25*r; - double angle = (15.0-ac)*0.5235988; - double bullseye = (15.0 - course)*0.5235988; - double deltax=-sin(angle), deltay=cos(angle), x=inx, y=iny, bigger; - double ang, temp, xx, yy, kp, h1; - - bigger = fabs(deltax); - if (fabs(deltay) > bigger) bigger = fabs(deltay); - deltax /= bigger; - deltay /= bigger; - if (game.damage[DSRSENS]==0 || condit==IHDOCKED) - setwnd(srscan_window); - else - setwnd(message_window); - /* Loop to move a single torpedo */ - for (l=1; l <= 15; l++) { - x += deltax; - ix = x + 0.5; - y += deltay; - iy = y + 0.5; - if (!VALID_SECTOR(ix, iy)) break; - iquad=game.quad[ix][iy]; - tracktorpedo(ix, iy, l, i, n, iquad); - if (iquad==IHDOT) continue; - /* hit something */ - setwnd(message_window); - skip(1); /* start new line after text track */ - switch(iquad) { - case IHE: /* Hit our ship */ - case IHF: - skip(1); - proutn("Torpedo hits "); - crmshp(); - prout("."); - *hit = 700.0 + 100.0*Rand() - - 1000.0*sqrt(square(ix-inx)+square(iy-iny))* - fabs(sin(bullseye-angle)); - *hit = fabs(*hit); - newcnd(); /* we're blown out of dock */ - /* We may be displaced. */ - if (landed==1 || condit==IHDOCKED) return; /* Cheat if on a planet */ - ang = angle + 2.5*(Rand()-0.5); - temp = fabs(sin(ang)); - if (fabs(cos(ang)) > temp) temp = fabs(cos(ang)); - xx = -sin(ang)/temp; - yy = cos(ang)/temp; - jx=ix+xx+0.5; - jy=iy+yy+0.5; - if (!VALID_SECTOR(jx, jy)) return; - if (game.quad[jx][jy]==IHBLANK) { - finish(FHOLE); - return; - } - if (game.quad[jx][jy]!=IHDOT) { - /* can't move into object */ - return; - } - sectx = jx; - secty = jy; - crmshp(); - shoved = 1; - break; - - case IHC: /* Hit a commander */ - case IHS: - if (Rand() <= 0.05) { - crmena(1, iquad, 2, ix, iy); - prout(" uses anti-photon device;"); - prout(" torpedo neutralized."); - return; - } - case IHR: /* Hit a regular enemy */ - case IHK: - /* find the enemy */ - for_local_enemies(ll) - if (ix==game.kx[ll] && iy==game.ky[ll]) break; - kp = fabs(game.kpower[ll]); - h1 = 700.0 + 100.0*Rand() - - 1000.0*sqrt(square(ix-inx)+square(iy-iny))* - fabs(sin(bullseye-angle)); - h1 = fabs(h1); - if (kp < h1) h1 = kp; - game.kpower[ll] -= (game.kpower[ll]<0 ? -h1 : h1); - if (game.kpower[ll] == 0) { - deadkl(ix, iy, iquad, ix, iy); - return; - } - crmena(1, iquad, 2, ix, iy); - /* If enemy damaged but not destroyed, try to displace */ - ang = angle + 2.5*(Rand()-0.5); - temp = fabs(sin(ang)); - if (fabs(cos(ang)) > temp) temp = fabs(cos(ang)); - xx = -sin(ang)/temp; - yy = cos(ang)/temp; - jx=ix+xx+0.5; - jy=iy+yy+0.5; - if (!VALID_SECTOR(jx, jy)) { - prout(" damaged but not destroyed."); - return; - } - if (game.quad[jx][jy]==IHBLANK) { - prout(" buffeted into black hole."); - deadkl(ix, iy, iquad, jx, jy); - return; - } - if (game.quad[jx][jy]!=IHDOT) { - /* can't move into object */ - prout(" damaged but not destroyed."); - return; - } - proutn(" damaged--"); - game.kx[ll] = jx; - game.ky[ll] = jy; - shoved = 1; - break; - case IHB: /* Hit a base */ - skip(1); - prout("***STARBASE DESTROYED.."); - for_starbases(ll) { - if (game.state.baseqx[ll]==quadx && game.state.baseqy[ll]==quady) { - game.state.baseqx[ll]=game.state.baseqx[game.state.rembase]; - game.state.baseqy[ll]=game.state.baseqy[game.state.rembase]; - break; - } - } - game.quad[ix][iy]=IHDOT; - game.state.rembase--; - basex=basey=0; - game.state.galaxy[quadx][quady].starbase--; - game.state.chart[quadx][quady].starbase--; - game.state.basekl++; - newcnd(); - return; - case IHP: /* Hit a planet */ - crmena(1, iquad, 2, ix, iy); - prout(" destroyed."); - game.state.nplankl++; - game.state.galaxy[quadx][quady].planets--; - DESTROY(&game.state.plnets[iplnet]); - iplnet = 0; - plnetx = plnety = 0; - game.quad[ix][iy] = IHDOT; - if (landed==1) { - /* captain perishes on planet */ - finish(FDPLANET); - } - return; - case IHSTAR: /* Hit a star */ - if (Rand() > 0.10) { - nova(ix, iy); - return; - } - crmena(1, IHSTAR, 2, ix, iy); - prout(" unaffected by photon blast."); - return; - case IHQUEST: /* Hit a thingy */ - if (!(game.options & OPTION_THINGY) || Rand()>0.7) { - skip(1); - prouts("AAAAIIIIEEEEEEEEAAAAAAAAUUUUUGGGGGHHHHHHHHHHHH!!!"); - skip(1); - prouts(" HACK! HACK! HACK! *CHOKE!* "); - skip(1); - proutn("Mr. Spock-"); - prouts(" \"Fascinating!\""); - skip(1); - deadkl(ix, iy, iquad, ix, iy); - } else { - /* - * Stas Sergeev added the possibility that - * you can shove the Thingy and piss it off. - * It then becomes an enemy and may fire at you. - */ - iqengry=1; - shoved=1; - } - return; - case IHBLANK: /* Black hole */ - skip(1); - crmena(1, IHBLANK, 2, ix, iy); - prout(" swallows torpedo."); - return; - case IHWEB: /* hit the web */ - skip(1); - prout("***Torpedo absorbed by Tholian web."); - return; - case IHT: /* Hit a Tholian */ - h1 = 700.0 + 100.0*Rand() - - 1000.0*sqrt(square(ix-inx)+square(iy-iny))* - fabs(sin(bullseye-angle)); - h1 = fabs(h1); - if (h1 >= 600) { - game.quad[ix][iy] = IHDOT; - ithere = 0; - ithx = ithy = 0; - deadkl(ix, iy, iquad, ix, iy); - return; - } - skip(1); - crmena(1, IHT, 2, ix, iy); - if (Rand() > 0.05) { - prout(" survives photon blast."); - return; - } - prout(" disappears."); - game.quad[ix][iy] = IHWEB; - ithere = ithx = ithy = 0; - nenhere--; - { - int dum, my; - dropin(IHBLANK, &dum, &my); - } - return; - - default: /* Problem! */ - skip(1); - proutn("Don't know how to handle collision with "); - crmena(1, iquad, 2, ix, iy); - skip(1); - return; - } - break; - } - if(curwnd!=message_window) { - setwnd(message_window); - } - if (shoved) { - game.quad[jx][jy]=iquad; - game.quad[ix][iy]=IHDOT; - prout(" displaced by blast to %s ", cramlc(sector, jx, jy)); - for_local_enemies(ll) - game.kdist[ll] = game.kavgd[ll] = sqrt(square(sectx-game.kx[ll])+square(secty-game.ky[ll])); - sortkl(); - return; - } - skip(1); - prout("Torpedo missed."); - return; -} - -static void fry(double hit) -{ - double ncrit, extradm; - int ktr=1, l, ll, j, cdam[NDEVICES]; - - /* a critical hit occured */ - if (hit < (275.0-25.0*skill)*(1.0+0.5*Rand())) return; - - ncrit = 1.0 + hit/(500.0+100.0*Rand()); - proutn("***CRITICAL HIT--"); - /* Select devices and cause damage */ - for (l = 0; l < ncrit && 0 < NDEVICES; l++) { - do { - j = NDEVICES*Rand(); - /* Cheat to prevent shuttle damage unless on ship */ - } while - (game.damage[j]<0.0 || (j==DSHUTTL && iscraft!=1) || j==DDRAY); - cdam[l] = j; - extradm = (hit*damfac)/(ncrit*(75.0+25.0*Rand())); - game.damage[j] += extradm; - if (l > 0) { - for (ll=2; ll<=l && j != cdam[ll-1]; ll++) ; - if (ll<=l) continue; - ktr += 1; - if (ktr==3) skip(1); - proutn(" and "); - } - proutn(device[j]); - } - prout(" damaged."); - if (game.damage[DSHIELD] && shldup) { - prout("***Shields knocked down."); - shldup=0; - } -} - -void attack(int torps_ok) -{ - /* torps_ok == 0 forces use of phasers in an attack */ - int percent, ihurt=0, l, i=0, jx, jy, iquad, itflag; - int atackd = 0, attempt = 0; - double hit; - double pfac, dustfac, hitmax=0.0, hittot=0.0, chgfac=1.0, r; - - iattak = 1; - if (alldone) return; -#ifdef DEBUG - if (idebug) prout("ATTACK!"); -#endif - - if (ithere) movetho(); - - if (neutz) { /* The one chance not to be attacked */ - neutz = 0; - return; - } - if ((((comhere || ishere) && (justin == 0)) || skill == SKILL_EMERITUS)&&(torps_ok!=0)) movcom(); - if (nenhere==0 || (nenhere==1 && iqhere && iqengry==0)) return; - pfac = 1.0/inshld; - if (shldchg == 1) chgfac = 0.25+0.5*Rand(); - skip(1); - if (skill <= SKILL_FAIR) i = 2; - for_local_enemies(l) { - if (game.kpower[l] < 0) continue; /* too weak to attack */ - /* compute hit strength and diminsh shield power */ - r = Rand(); - /* Increase chance of photon torpedos if docked or enemy energy low */ - if (condit == IHDOCKED) r *= 0.25; - if (game.kpower[l] < 500) r *= 0.25; - jx = game.kx[l]; - jy = game.ky[l]; - iquad = game.quad[jx][jy]; - if (iquad==IHT || (iquad==IHQUEST && !iqengry)) continue; - itflag = (iquad == IHK && r > 0.0005) || !torps_ok || - (iquad==IHC && r > 0.015) || - (iquad==IHR && r > 0.3) || - (iquad==IHS && r > 0.07) || - (iquad==IHQUEST && r > 0.05); - if (itflag) { - /* Enemy uses phasers */ - if (condit == IHDOCKED) continue; /* Don't waste the effort! */ - attempt = 1; /* Attempt to attack */ - dustfac = 0.8+0.05*Rand(); - hit = game.kpower[l]*pow(dustfac,game.kavgd[l]); - game.kpower[l] *= 0.75; - } - else { /* Enemy used photon torpedo */ - double course = 1.90985*atan2((double)secty-jy, (double)jx-sectx); - hit = 0; - proutn("***TORPEDO INCOMING"); - if (game.damage[DSRSENS] <= 0.0) { - proutn(" From "); - crmena(0, iquad, i, jx, jy); - } - attempt = 1; - prout(" "); - r = (Rand()+Rand())*0.5 -0.5; - r += 0.002*game.kpower[l]*r; - torpedo(course, r, jx, jy, &hit, 1, 1); - if (KLINGREM==0) - finish(FWON); /* Klingons did themselves in! */ - if (game.state.galaxy[quadx][quady].supernova || alldone) - return; /* Supernova or finished */ - if (hit == 0) continue; - } - if (shldup != 0 || shldchg != 0 || condit==IHDOCKED) { - /* shields will take hits */ - double absorb, hitsh, propor = pfac*shield*(condit==IHDOCKED ? 2.1 : 1.0); - if(propor < 0.1) propor = 0.1; - hitsh = propor*chgfac*hit+1.0; - atackd=1; - absorb = 0.8*hitsh; - if (absorb > shield) absorb = shield; - shield -= absorb; - hit -= hitsh; - if (condit==IHDOCKED) dock(0); - if (propor > 0.1 && hit < 0.005*energy) continue; - } - /* It's a hit -- print out hit size */ - atackd = 1; /* We weren't going to check casualties, etc. if - shields were down for some strange reason. This - doesn't make any sense, so I've fixed it */ - ihurt = 1; - proutn("%d unit hit", (int)hit); - if ((game.damage[DSRSENS] > 0 && itflag) || skill<=SKILL_FAIR) { - proutn(" on the "); - crmshp(); - } - if (game.damage[DSRSENS] <= 0.0 && itflag) { - proutn(" from "); - crmena(0, iquad, i, jx, jy); - } - skip(1); - /* Decide if hit is critical */ - if (hit > hitmax) hitmax = hit; - hittot += hit; - fry(hit); - prout("Hit %g energy %g", hit, energy); - energy -= hit; - if (condit==IHDOCKED) - dock(0); - } - if (energy <= 0) { - /* Returning home upon your shield, not with it... */ - finish(FBATTLE); - return; - } - if (attempt == 0 && condit == IHDOCKED) - prout("***Enemies decide against attacking your ship."); - if (atackd == 0) return; - percent = 100.0*pfac*shield+0.5; - if (ihurt==0) { - /* Shields fully protect ship */ - proutn("Enemy attack reduces shield strength to "); - } - else { - /* Print message if starship suffered hit(s) */ - skip(1); - proutn("Energy left %2d shields ", (int)energy); - if (shldup) proutn("up "); - else if (game.damage[DSHIELD] == 0) proutn("down "); - else proutn("damaged, "); - } - prout("%d%%, torpedoes left %d", percent, torps); - /* Check if anyone was hurt */ - if (hitmax >= 200 || hittot >= 500) { - int icas= hittot*Rand()*0.015; - if (icas >= 2) { - skip(1); - prout("Mc Coy- \"Sickbay to bridge. We suffered %d casualties", icas); - prout(" in that last attack.\""); - casual += icas; - } - } - /* After attack, reset average distance to enemies */ - for_local_enemies(l) - game.kavgd[l] = game.kdist[l]; - sortkl(); - return; -} - -void deadkl(int ix, int iy, int type, int ixx, int iyy) -{ - /* Added ixx and iyy allow enemy to "move" before dying */ - - int i,j; - - skip(1); - crmena(1, type, 2, ixx, iyy); - /* Decide what kind of enemy it is and update approriately */ - if (type == IHR) { - /* chalk up a Romulan */ - game.state.galaxy[quadx][quady].romulans--; - irhere--; - game.state.nromrem--; - } - else if (type == IHT) { - /* Killed a Tholian */ - ithere = 0; - } - else if (type == IHQUEST) { - /* Killed a Thingy */ - iqhere=iqengry=thingx=thingy=0; - } - else { - /* Some type of a Klingon */ - game.state.galaxy[quadx][quady].klingons--; - klhere--; - switch (type) { - case IHC: - comhere = 0; - for_commanders (i) - if (game.state.cx[i]==quadx && game.state.cy[i]==quady) break; - game.state.cx[i] = game.state.cx[game.state.remcom]; - game.state.cy[i] = game.state.cy[game.state.remcom]; - game.state.cx[game.state.remcom] = 0; - game.state.cy[game.state.remcom] = 0; - game.state.remcom--; - game.future[FTBEAM] = FOREVER; - if (game.state.remcom != 0) - game.future[FTBEAM] = game.state.date + expran(1.0*incom/game.state.remcom); - break; - case IHK: - game.state.remkl--; - break; - case IHS: - game.state.nscrem--; - ishere = game.state.isx = game.state.isy = isatb = iscate = 0; - game.future[FSCMOVE] = game.future[FSCDBAS] = FOREVER; - break; - } - } - - /* For each kind of enemy, finish message to player */ - prout(" destroyed."); - game.quad[ix][iy] = IHDOT; - if (KLINGREM==0) return; - - game.state.remtime = game.state.remres/(game.state.remkl + 4*game.state.remcom); - - /* Remove enemy ship from arrays describing local conditions */ - if (game.future[FCDBAS] < FOREVER && batx==quadx && baty==quady && type==IHC) - game.future[FCDBAS] = FOREVER; - for_local_enemies(i) - if (game.kx[i]==ix && game.ky[i]==iy) break; - nenhere--; - if (i <= nenhere) { - for (j=i; j<=nenhere; j++) { - game.kx[j] = game.kx[j+1]; - game.ky[j] = game.ky[j+1]; - game.kpower[j] = game.kpower[j+1]; - game.kavgd[j] = game.kdist[j] = game.kdist[j+1]; - } - } - game.kx[nenhere+1] = 0; - game.ky[nenhere+1] = 0; - game.kdist[nenhere+1] = 0; - game.kavgd[nenhere+1] = 0; - game.kpower[nenhere+1] = 0; - return; -} - -static int targetcheck(double x, double y, double *course) -{ - double deltx, delty; - /* Return TRUE if target is invalid */ - if (!VALID_SECTOR(x, y)) { - huh(); - return 1; - } - deltx = 0.1*(y - secty); - delty = 0.1*(sectx - x); - if (deltx==0 && delty== 0) { - skip(1); - prout("Spock- \"Bridge to sickbay. Dr. McCoy,"); - prout(" I recommend an immediate review of"); - prout(" the Captain's psychological profile.\""); - chew(); - return 1; - } - *course = 1.90985932*atan2(deltx, delty); - return 0; -} - -void photon(void) -{ - double targ[4][3], course[4]; - double r, dummy; - int key, n, i, osuabor; - - ididit = 0; - - if (game.damage[DPHOTON]) { - prout("Photon tubes damaged."); - chew(); - return; - } - if (torps == 0) { - prout("No torpedoes left."); - chew(); - return; - } - key = scan(); - for (;;) { - if (key == IHALPHA) { - huh(); - return; - } - else if (key == IHEOL) { - prout("%d torpedoes left.", torps); - proutn("Number of torpedoes to fire- "); - key = scan(); - } - else /* key == IHREAL */ { - n = aaitem + 0.5; - if (n <= 0) { /* abort command */ - chew(); - return; - } - if (n > 3) { - chew(); - prout("Maximum of 3 torpedoes per burst."); - key = IHEOL; - return; - } - if (n <= torps) break; - chew(); - key = IHEOL; - } - } - for (i = 1; i <= n; i++) { - key = scan(); - if (i==1 && key == IHEOL) { - break; /* we will try prompting */ - } - if (i==2 && key == IHEOL) { - /* direct all torpedoes at one target */ - while (i <= n) { - targ[i][1] = targ[1][1]; - targ[i][2] = targ[1][2]; - course[i] = course[1]; - i++; - } - break; - } - if (key != IHREAL) { - huh(); - return; - } - targ[i][1] = aaitem; - key = scan(); - if (key != IHREAL) { - huh(); - return; - } - targ[i][2] = aaitem; - if (targetcheck(targ[i][1], targ[i][2], &course[i])) return; - } - chew(); - if (i == 1 && key == IHEOL) { - /* prompt for each one */ - for (i = 1; i <= n; i++) { - proutn("Target sector for torpedo number %d- ", i); - key = scan(); - if (key != IHREAL) { - huh(); - return; - } - targ[i][1] = aaitem; - key = scan(); - if (key != IHREAL) { - huh(); - return; - } - targ[i][2] = aaitem; - chew(); - if (targetcheck(targ[i][1], targ[i][2], &course[i])) return; - } - } - ididit = 1; - /* Loop for moving torpedoes */ - osuabor = 0; - for (i = 1; i <= n && !osuabor; i++) { - if (condit != IHDOCKED) torps--; - r = (Rand()+Rand())*0.5 -0.5; - if (fabs(r) >= 0.47) { - /* misfire! */ - r = (Rand()+1.2) * r; - if (n>1) { - prouts("***TORPEDO NUMBER %d MISFIRES", i); - } - else prouts("***TORPEDO MISFIRES."); - skip(1); - if (i < n) - prout(" Remainder of burst aborted."); - osuabor=1; - if (Rand() <= 0.2) { - prout("***Photon tubes damaged by misfire."); - game.damage[DPHOTON] = damfac*(1.0+2.0*Rand()); - break; - } - } - if (shldup || condit == IHDOCKED) - r *= 1.0 + 0.0001*shield; - torpedo(course[i], r, sectx, secty, &dummy, i, n); - if (alldone || game.state.galaxy[quadx][quady].supernova) - return; - } - if (KLINGREM==0) finish(FWON); -} - - - -static void overheat(double rpow) -{ - if (rpow > 1500) { - double chekbrn = (rpow-1500.)*0.00038; - if (Rand() <= chekbrn) { - prout("Weapons officer Sulu- \"Phasers overheated, sir.\""); - game.damage[DPHASER] = damfac*(1.0 + Rand()) * (1.0+chekbrn); - } - } -} - -static int checkshctrl(double rpow) -{ - double hit; - int icas; - - skip(1); - if (Rand() < .998) { - prout("Shields lowered."); - return 0; - } - /* Something bad has happened */ - prouts("***RED ALERT! RED ALERT!"); - skip(2); - hit = rpow*shield/inshld; - energy -= rpow+hit*0.8; - shield -= hit*0.2; - if (energy <= 0.0) { - prouts("Sulu- \"Captain! Shield malf***********************\""); - skip(1); - stars(); - finish(FPHASER); - return 1; - } - prouts("Sulu- \"Captain! Shield malfunction! Phaser fire contained!\""); - skip(2); - prout("Lt. Uhura- \"Sir, all decks reporting damage.\""); - icas = hit*Rand()*0.012; - skip(1); - fry(0.8*hit); - if (icas) { - skip(1); - prout("McCoy to bridge- \"Severe radiation burns, Jim."); - prout(" %d casualties so far.\"", icas); - casual -= icas; - } - skip(1); - prout("Phaser energy dispersed by shields."); - prout("Enemy unaffected."); - overheat(rpow); - return 1; -} - - -void phasers(void) -{ - double hits[21], rpow=0, extra, powrem, over, temp; - int kz = 0, k=1, i, irec=0; /* Cheating inhibitor */ - int ifast=0, no=0, ipoop=1, msgflag = 1; - enum {NOTSET, MANUAL, FORCEMAN, AUTOMATIC} automode = NOTSET; - int key=0; - - skip(1); - /* SR sensors and Computer */ - if (game.damage[DSRSENS]+game.damage[DCOMPTR] > 0) ipoop = 0; - if (condit == IHDOCKED) { - prout("Phasers can't be fired through base shields."); - chew(); - return; - } - if (game.damage[DPHASER] != 0) { - prout("Phaser control damaged."); - chew(); - return; - } - if (shldup) { - if (game.damage[DSHCTRL]) { - prout("High speed shield control damaged."); - chew(); - return; - } - if (energy <= 200.0) { - prout("Insufficient energy to activate high-speed shield control."); - chew(); - return; - } - prout("Weapons Officer Sulu- \"High-speed shield control enabled, sir.\""); - ifast = 1; - - } - /* Original code so convoluted, I re-did it all */ - while (automode==NOTSET) { - key=scan(); - if (key == IHALPHA) { - if (isit("manual")) { - if (nenhere==0) { - prout("There is no enemy present to select."); - chew(); - key = IHEOL; - automode=AUTOMATIC; - } - else { - automode = MANUAL; - key = scan(); - } - } - else if (isit("automatic")) { - if ((!ipoop) && nenhere != 0) { - automode = FORCEMAN; - } - else { - if (nenhere==0) - prout("Energy will be expended into space."); - automode = AUTOMATIC; - key = scan(); - } - } - else if (isit("no")) { - no = 1; - } - else { - huh(); - return; - } - } - else if (key == IHREAL) { - if (nenhere==0) { - prout("Energy will be expended into space."); - automode = AUTOMATIC; - } - else if (!ipoop) - automode = FORCEMAN; - else - automode = AUTOMATIC; - } - else { - /* IHEOL */ - if (nenhere==0) { - prout("Energy will be expended into space."); - automode = AUTOMATIC; - } - else if (!ipoop) - automode = FORCEMAN; - else - proutn("Manual or automatic? "); - } - } - - switch (automode) { - case AUTOMATIC: - if (key == IHALPHA && isit("no")) { - no = 1; - key = scan(); - } - if (key != IHREAL && nenhere != 0) { - prout("Phasers locked on target. Energy available: %.2f", - ifast?energy-200.0:energy,1,2); - } - irec=0; - do { - chew(); - if (!kz) for_local_enemies(i) - irec+=fabs(game.kpower[i])/(PHASEFAC*pow(0.90,game.kdist[i]))* - (1.01+0.05*Rand()) + 1.0; - kz=1; - proutn("(%d) units required. ", irec); - chew(); - proutn("Units to fire= "); - key = scan(); - if (key!=IHREAL) return; - rpow = aaitem; - if (rpow > (ifast?energy-200:energy)) { - proutn("Energy available= %.2f", - ifast?energy-200:energy); - skip(1); - key = IHEOL; - } - } while (rpow > (ifast?energy-200:energy)); - if (rpow<=0) { - /* chicken out */ - chew(); - return; - } - if ((key=scan()) == IHALPHA && isit("no")) { - no = 1; - } - if (ifast) { - energy -= 200; /* Go and do it! */ - if (checkshctrl(rpow)) return; - } - chew(); - energy -= rpow; - extra = rpow; - if (nenhere) { - extra = 0.0; - powrem = rpow; - for_local_enemies(i) { - hits[i] = 0.0; - if (powrem <= 0) continue; - hits[i] = fabs(game.kpower[i])/(PHASEFAC*pow(0.90,game.kdist[i])); - over = (0.01 + 0.05*Rand())*hits[i]; - temp = powrem; - powrem -= hits[i] + over; - if (powrem <= 0 && temp < hits[i]) hits[i] = temp; - if (powrem <= 0) over = 0.0; - extra += over; - } - if (powrem > 0.0) extra += powrem; - hittem(hits); - ididit=1; - } - if (extra > 0 && alldone == 0) { - if (ithere) { - proutn("*** Tholian web absorbs "); - if (nenhere>0) proutn("excess "); - prout("phaser energy."); - } - else { - prout("%d expended on empty space.", (int)extra); - } - } - break; - - case FORCEMAN: - chew(); - key = IHEOL; - if (game.damage[DCOMPTR]!=0) - prout("Battle comuter damaged, manual file only."); - else { - skip(1); - prouts("---WORKING---"); - skip(1); - prout("Short-range-sensors-damaged"); - prout("Insufficient-data-for-automatic-phaser-fire"); - prout("Manual-fire-must-be-used"); - skip(1); - } - case MANUAL: - rpow = 0.0; - for (k = 1; k <= nenhere;) { - int ii = game.kx[k], jj = game.ky[k]; - int ienm = game.quad[ii][jj]; - if (msgflag) { - proutn("Energy available= %.2f", - energy-.006-(ifast?200:0)); - skip(1); - msgflag = 0; - rpow = 0.0; - } - if (game.damage[DSRSENS] && !(abs(sectx-ii) < 2 && abs(secty-jj) < 2) && - (ienm == IHC || ienm == IHS)) { - cramen(ienm); - prout(" can't be located without short range scan."); - chew(); - key = IHEOL; - hits[k] = 0; /* prevent overflow -- thanks to Alexei Voitenko */ - k++; - continue; - } - if (key == IHEOL) { - chew(); - if (ipoop && k > kz) - irec=(fabs(game.kpower[k])/(PHASEFAC*pow(0.9,game.kdist[k])))* - (1.01+0.05*Rand()) + 1.0; - kz = k; - proutn("("); - if (game.damage[DCOMPTR]==0) proutn("%d", irec); - else proutn("??"); - proutn(") "); - proutn("units to fire at "); - crmena(0, ienm, 2, ii, jj); - proutn("- "); - key = scan(); - } - if (key == IHALPHA && isit("no")) { - no = 1; - key = scan(); - continue; - } - if (key == IHALPHA) { - huh(); - return; - } - if (key == IHEOL) { - if (k==1) { /* Let me say I'm baffled by this */ - msgflag = 1; - } - continue; - } - if (aaitem < 0) { - /* abort out */ - chew(); - return; - } - hits[k] = aaitem; - rpow += aaitem; - /* If total requested is too much, inform and start over */ - - if (rpow > (ifast?energy-200:energy)) { - prout("Available energy exceeded -- try again."); - chew(); - return; - } - key = scan(); /* scan for next value */ - k++; - } - if (rpow == 0.0) { - /* zero energy -- abort */ - chew(); - return; - } - if (key == IHALPHA && isit("no")) { - no = 1; - } - energy -= rpow; - chew(); - if (ifast) { - energy -= 200.0; - if (checkshctrl(rpow)) return; - } - hittem(hits); - ididit=1; - case NOTSET:; /* avoid gcc warning */ - } - /* Say shield raised or malfunction, if necessary */ - if (alldone) - return; - if (ifast) { - skip(1); - if (no == 0) { - if (Rand() >= 0.99) { - prout("Sulu- \"Sir, the high-speed shield control has malfunctioned . . ."); - prouts(" CLICK CLICK POP . . ."); - prout(" No response, sir!"); - shldup = 0; - } - else - prout("Shields raised."); - } - else - shldup = 0; - } - overheat(rpow); -} - -void hittem(double *hits) -{ - double kp, kpow, wham, hit, dustfac, kpini; - int nenhr2=nenhere, k=1, kk=1, ii, jj, ienm; - - skip(1); - - for (; k <= nenhr2; k++, kk++) { - if ((wham = hits[k])==0) continue; - dustfac = 0.9 + 0.01*Rand(); - hit = wham*pow(dustfac,game.kdist[kk]); - kpini = game.kpower[kk]; - kp = fabs(kpini); - if (PHASEFAC*hit < kp) kp = PHASEFAC*hit; - game.kpower[kk] -= (game.kpower[kk] < 0 ? -kp: kp); - kpow = game.kpower[kk]; - ii = game.kx[kk]; - jj = game.ky[kk]; - if (hit > 0.005) { - if (game.damage[DSRSENS]==0) - boom(ii, jj); - proutn("%d unit hit on ", (int)hit); - } - else - proutn("Very small hit on "); - ienm = game.quad[ii][jj]; - if (ienm==IHQUEST) iqengry=1; - crmena(0,ienm,2,ii,jj); - skip(1); - if (kpow == 0) { - deadkl(ii, jj, ienm, ii, jj); - if (KLINGREM==0) finish(FWON); - if (alldone) return; - kk--; /* don't do the increment */ - } - else /* decide whether or not to emasculate klingon */ - if (kpow > 0 && Rand() >= 0.9 && - kpow <= ((0.4 + 0.4*Rand())*kpini)) { - prout("***Mr. Spock- \"Captain, the vessel at ", - cramlc(sector,ii,jj)); - prout(" has just lost its firepower.\""); - game.kpower[kk] = -kpow; - } - } - return; -} - diff --git a/compile b/compile new file mode 100755 index 0000000..1b1d232 --- /dev/null +++ b/compile @@ -0,0 +1,142 @@ +#! /bin/sh +# Wrapper for compilers which do not understand `-c -o'. + +scriptversion=2005-05-14.22 + +# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc. +# Written by Tom Tromey . +# +# 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, 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +case $1 in + '') + echo "$0: No command. Try \`$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: compile [--help] [--version] PROGRAM [ARGS] + +Wrapper for compilers which do not understand `-c -o'. +Remove `-o dest.o' from ARGS, run PROGRAM with the remaining +arguments, and rename the output as expected. + +If you are trying to build a whole package this is not the +right script to run: please start by reading the file `INSTALL'. + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "compile $scriptversion" + exit $? + ;; +esac + +ofile= +cfile= +eat= + +for arg +do + if test -n "$eat"; then + eat= + else + case $1 in + -o) + # configure might choose to run compile as `compile cc -o foo foo.c'. + # So we strip `-o arg' only if arg is an object. + eat=1 + case $2 in + *.o | *.obj) + ofile=$2 + ;; + *) + set x "$@" -o "$2" + shift + ;; + esac + ;; + *.c) + cfile=$1 + set x "$@" "$1" + shift + ;; + *) + set x "$@" "$1" + shift + ;; + esac + fi + shift +done + +if test -z "$ofile" || test -z "$cfile"; then + # If no `-o' option was seen then we might have been invoked from a + # pattern rule where we don't need one. That is ok -- this is a + # normal compilation that the losing compiler can handle. If no + # `.c' file was seen then we are probably linking. That is also + # ok. + exec "$@" +fi + +# Name of file we expect compiler to create. +cofile=`echo "$cfile" | sed -e 's|^.*/||' -e 's/\.c$/.o/'` + +# Create the lock directory. +# Note: use `[/.-]' here to ensure that we don't use the same name +# that we are using for the .o file. Also, base the name on the expected +# object file name, since that is what matters with a parallel build. +lockdir=`echo "$cofile" | sed -e 's|[/.-]|_|g'`.d +while true; do + if mkdir "$lockdir" >/dev/null 2>&1; then + break + fi + sleep 1 +done +# FIXME: race condition here if user kills between mkdir and trap. +trap "rmdir '$lockdir'; exit 1" 1 2 15 + +# Run the compile. +"$@" +ret=$? + +if test -f "$cofile"; then + mv "$cofile" "$ofile" +elif test -f "${cofile}bj"; then + mv "${cofile}bj" "$ofile" +fi + +rmdir "$lockdir" +exit $ret + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/config.guess b/config.guess new file mode 100755 index 0000000..917bbc5 --- /dev/null +++ b/config.guess @@ -0,0 +1,1463 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. + +timestamp='2005-07-08' + +# This file 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., 51 Franklin Street - Fifth Floor, Boston, MA +# 02110-1301, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + + +# Originally written by Per Bothner . +# Please send patches to . Submit a context +# diff and a properly formatted ChangeLog entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# The plan is that this can be called by configure scripts if you +# don't specify an explicit build system type. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep __ELF__ >/dev/null + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerppc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE="alpha" ;; + "EV4.5 (21064)") + UNAME_MACHINE="alpha" ;; + "LCA4 (21066/21068)") + UNAME_MACHINE="alpha" ;; + "EV5 (21164)") + UNAME_MACHINE="alphaev5" ;; + "EV5.6 (21164A)") + UNAME_MACHINE="alphaev56" ;; + "EV5.6 (21164PC)") + UNAME_MACHINE="alphapca56" ;; + "EV5.7 (21164PC)") + UNAME_MACHINE="alphapca57" ;; + "EV6 (21264)") + UNAME_MACHINE="alphaev6" ;; + "EV6.7 (21264A)") + UNAME_MACHINE="alphaev67" ;; + "EV6.8CB (21264C)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8AL (21264B)") + UNAME_MACHINE="alphaev68" ;; + "EV6.8CX (21264D)") + UNAME_MACHINE="alphaev68" ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE="alphaev69" ;; + "EV7 (21364)") + UNAME_MACHINE="alphaev7" ;; + "EV7.9 (21364A)") + UNAME_MACHINE="alphaev79" ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm:riscos:*:*|arm:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:SunOS:5.*:*) + echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[45]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep __LP64__ >/dev/null + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + i*:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + x86:Interix*:[34]*) + echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//' + exit ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + arm*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + cris:Linux:*:*) + echo cris-axis-linux-gnu + exit ;; + crisv32:Linux:*:*) + echo crisv32-axis-linux-gnu + exit ;; + frv:Linux:*:*) + echo frv-unknown-linux-gnu + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + mips:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips + #undef mipsel + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mipsel + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips64 + #undef mips64el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mips64el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips64 + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=` + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } + ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit ;; + i*86:Linux:*:*) + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. cd to the root directory to prevent + # problems with other programs or directories called `ld' in the path. + # Set LC_ALL=C to ensure ld outputs messages in English. + ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ + | sed -ne '/supported targets:/!d + s/[ ][ ]*/ /g + s/.*supported targets: *// + s/ .*// + p'` + case "$ld_supported_targets" in + elf32-i386) + TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" + ;; + a.out-i386-linux) + echo "${UNAME_MACHINE}-pc-linux-gnuaout" + exit ;; + coff-i386) + echo "${UNAME_MACHINE}-pc-linux-gnucoff" + exit ;; + "") + # Either a pre-BFD a.out linker (linux-gnuoldld) or + # one that does not give us useful --help. + echo "${UNAME_MACHINE}-pc-linux-gnuoldld" + exit ;; + esac + # Determine whether the default compiler is a.out or elf + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #ifdef __ELF__ + # ifdef __GLIBC__ + # if __GLIBC__ >= 2 + LIBC=gnu + # else + LIBC=gnulibc1 + # endif + # else + LIBC=gnulibc1 + # endif + #else + #ifdef __INTEL_COMPILER + LIBC=gnu + #else + LIBC=gnuaout + #endif + #endif + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` + test x"${LIBC}" != x && { + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + exit + } + test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } + ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i386. + echo i386-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + case $UNAME_PROCESSOR in + *86) UNAME_PROCESSOR=i686 ;; + unknown) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = "x86"; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/config.rpath b/config.rpath new file mode 100755 index 0000000..3f1bef3 --- /dev/null +++ b/config.rpath @@ -0,0 +1,571 @@ +#! /bin/sh +# Output a system dependent set of variables, describing how to set the +# run time search path of shared libraries in an executable. +# +# Copyright 1996-2005 Free Software Foundation, Inc. +# Taken from GNU libtool, 2001 +# Originally by Gordon Matzigkeit , 1996 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. +# +# The first argument passed to this file is the canonical host specification, +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld +# should be set by the caller. +# +# The set of defined variables is at the end of this script. + +# Known limitations: +# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer +# than 256 bytes, otherwise the compiler driver will dump core. The only +# known workaround is to choose shorter directory names for the build +# directory and/or the installation directory. + +# All known linkers require a `.a' archive for static linking (except M$VC, +# which needs '.lib'). +libext=a +shrext=.so + +host="$1" +host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + +cc_basename=`echo "$CC" | sed -e 's%^.*/%%'` + +# Code taken from libtool.m4's AC_LIBTOOL_PROG_COMPILER_PIC. + +wl= +if test "$GCC" = yes; then + wl='-Wl,' +else + case "$host_os" in + aix*) + wl='-Wl,' + ;; + darwin*) + case "$cc_basename" in + xlc*) + wl='-Wl,' + ;; + esac + ;; + mingw* | pw32* | os2*) + ;; + hpux9* | hpux10* | hpux11*) + wl='-Wl,' + ;; + irix5* | irix6* | nonstopux*) + wl='-Wl,' + ;; + newsos6) + ;; + linux*) + case $cc_basename in + icc* | ecc*) + wl='-Wl,' + ;; + pgcc | pgf77 | pgf90) + wl='-Wl,' + ;; + ccc*) + wl='-Wl,' + ;; + como) + wl='-lopt=' + ;; + esac + ;; + osf3* | osf4* | osf5*) + wl='-Wl,' + ;; + sco3.2v5*) + ;; + solaris*) + wl='-Wl,' + ;; + sunos4*) + wl='-Qoption ld ' + ;; + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + wl='-Wl,' + ;; + sysv4*MP*) + ;; + unicos*) + wl='-Wl,' + ;; + uts4*) + ;; + esac +fi + +# Code taken from libtool.m4's AC_LIBTOOL_PROG_LD_SHLIBS. + +hardcode_libdir_flag_spec= +hardcode_libdir_separator= +hardcode_direct=no +hardcode_minus_L=no + +case "$host_os" in + cygwin* | mingw* | pw32*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + openbsd*) + with_gnu_ld=no + ;; +esac + +ld_shlibs=yes +if test "$with_gnu_ld" = yes; then + case "$host_os" in + aix3* | aix4* | aix5*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + fi + ;; + amigaos*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we cannot use + # them. + ld_shlibs=no + ;; + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + cygwin* | mingw* | pw32*) + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + netbsd*) + ;; + solaris* | sysv5*) + if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + sunos4*) + hardcode_direct=yes + ;; + linux*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + esac + if test "$ld_shlibs" = yes; then + # Unlike libtool, we use -rpath here, not --rpath, since the documented + # option of GNU ld is called -rpath, not --rpath. + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + fi +else + case "$host_os" in + aix3*) + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + aix4* | aix5*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + else + aix_use_runtimelinking=no + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix5*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + esac + fi + hardcode_direct=yes + hardcode_libdir_separator=':' + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + hardcode_direct=yes + else + # We have old collect2 + hardcode_direct=unsupported + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + esac + fi + # Begin _LT_AC_SYS_LIBPATH_AIX. + echo 'int main () { return 0; }' > conftest.c + ${CC} ${LDFLAGS} conftest.c -o conftest + aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` + if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` + fi + if test -z "$aix_libpath"; then + aix_libpath="/usr/lib:/lib" + fi + rm -f conftest.c conftest + # End _LT_AC_SYS_LIBPATH_AIX. + if test "$aix_use_runtimelinking" = yes; then + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + else + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + fi + fi + ;; + amigaos*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + # see comment about different semantics on the GNU ld section + ld_shlibs=no + ;; + bsdi[45]*) + ;; + cygwin* | mingw* | pw32*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec=' ' + libext=lib + ;; + darwin* | rhapsody*) + hardcode_direct=no + if test "$GCC" = yes ; then + : + else + case "$cc_basename" in + xlc*) + ;; + *) + ld_shlibs=no + ;; + esac + fi + ;; + dgux*) + hardcode_libdir_flag_spec='-L$libdir' + ;; + freebsd1*) + ld_shlibs=no + ;; + freebsd2.2*) + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + ;; + freebsd2*) + hardcode_direct=yes + hardcode_minus_L=yes + ;; + freebsd* | kfreebsd*-gnu | dragonfly*) + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + ;; + hpux9*) + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + hpux10* | hpux11*) + if test "$with_gnu_ld" = no; then + case "$host_cpu" in + hppa*64*) + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=no + ;; + ia64*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=no + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + *) + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + irix5* | irix6* | nonstopux*) + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + netbsd*) + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + ;; + newsos6) + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + openbsd*) + hardcode_direct=yes + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + else + case "$host_os" in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + ;; + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + osf3*) + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + osf4* | osf5*) + if test "$GCC" = yes; then + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + # Both cc and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + hardcode_libdir_separator=: + ;; + sco3.2v5*) + ;; + solaris*) + hardcode_libdir_flag_spec='-R$libdir' + ;; + sunos4*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + ;; + sysv4) + case $host_vendor in + sni) + hardcode_direct=yes # is this really true??? + ;; + siemens) + hardcode_direct=no + ;; + motorola) + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + ;; + sysv4.3*) + ;; + sysv4*MP*) + if test -d /usr/nec; then + ld_shlibs=yes + fi + ;; + sysv4.2uw2*) + hardcode_direct=yes + hardcode_minus_L=no + ;; + sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) + ;; + sysv5*) + hardcode_libdir_flag_spec= + ;; + uts4*) + hardcode_libdir_flag_spec='-L$libdir' + ;; + *) + ld_shlibs=no + ;; + esac +fi + +# Check dynamic linker characteristics +# Code taken from libtool.m4's AC_LIBTOOL_SYS_DYNAMIC_LINKER. +libname_spec='lib$name' +case "$host_os" in + aix3*) + ;; + aix4* | aix5*) + ;; + amigaos*) + ;; + beos*) + ;; + bsdi[45]*) + ;; + cygwin* | mingw* | pw32*) + shrext=.dll + ;; + darwin* | rhapsody*) + shrext=.dylib + ;; + dgux*) + ;; + freebsd1*) + ;; + kfreebsd*-gnu) + ;; + freebsd*) + ;; + gnu*) + ;; + hpux9* | hpux10* | hpux11*) + case "$host_cpu" in + ia64*) + shrext=.so + ;; + hppa*64*) + shrext=.sl + ;; + *) + shrext=.sl + ;; + esac + ;; + irix5* | irix6* | nonstopux*) + case "$host_os" in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; + *) libsuff= shlibsuff= ;; + esac + ;; + esac + ;; + linux*oldld* | linux*aout* | linux*coff*) + ;; + linux*) + ;; + knetbsd*-gnu) + ;; + netbsd*) + ;; + newsos6) + ;; + nto-qnx*) + ;; + openbsd*) + ;; + os2*) + libname_spec='$name' + shrext=.dll + ;; + osf3* | osf4* | osf5*) + ;; + sco3.2v5*) + ;; + solaris*) + ;; + sunos4*) + ;; + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + ;; + sysv4*MP*) + ;; + uts4*) + ;; +esac + +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' +escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` +shlibext=`echo "$shrext" | sed -e 's,^\.,,'` +escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` + +LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <. Submit a context +# diff and a properly formatted ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 +Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \ + kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray) + os= + basic_machine=$1 + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | m32r | m32rle | m68000 | m68k | m88k | maxq | mcore \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64vr | mips64vrel \ + | mips64orion | mips64orionel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | ms1 \ + | msp430 \ + | ns16k | ns32k \ + | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b \ + | strongarm \ + | tahoe | thumb | tic4x | tic80 | tron \ + | v850 | v850e \ + | we32k \ + | x86 | xscale | xscalee[bl] | xstormy16 | xtensa \ + | z8k) + basic_machine=$basic_machine-unknown + ;; + m32c) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | ms1-* \ + | msp430-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tron-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \ + | xstormy16-* | xtensa-* \ + | ymp-* \ + | z8k-*) + ;; + m32c-*) + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16c) + basic_machine=cr16c-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little | ppc64-le | powerpc64-little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tic55x | c55x*) + basic_machine=tic55x-unknown + os=-coff + ;; + tic6x | c6x*) + basic_machine=tic6x-unknown + os=-coff + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -zvmoe) + os=-zvmoe + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/configure b/configure new file mode 100755 index 0000000..75f845b --- /dev/null +++ b/configure @@ -0,0 +1,8783 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.59 for sst 2.0. +# +# Report bugs to . +# +# Copyright (C) 2003 Free Software Foundation, Inc. +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then + set -o posix +fi +DUALCASE=1; export DUALCASE # for MKS sh + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# Work around bugs in pre-3.0 UWIN ksh. +$as_unset ENV MAIL MAILPATH +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)$' \| \ + . : '\(.\)' 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } + /^X\/\(\/\/\)$/{ s//\1/; q; } + /^X\/\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + + +# PATH needs CR, and LINENO needs CR and PATH. +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" || { + # Find who we are. Look in the path if we contain no path at all + # relative or not. + case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done + + ;; + esac + # We did not find ourselves, most probably we were run as `sh COMMAND' + # in which case we are not to be found in the path. + if test "x$as_myself" = x; then + as_myself=$0 + fi + if test ! -f "$as_myself"; then + { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 + { (exit 1); exit 1; }; } + fi + case $CONFIG_SHELL in + '') + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for as_base in sh bash ksh sh5; do + case $as_dir in + /*) + if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } + $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } + CONFIG_SHELL=$as_dir/$as_base + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" ${1+"$@"} + fi;; + esac + done +done +;; + esac + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line before each line; the second 'sed' does the real + # work. The second script uses 'N' to pair each line-number line + # with the numbered line, and appends trailing '-' during + # substitution so that $LINENO is not a special case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) + sed '=' <$as_myself | + sed ' + N + s,$,-, + : loop + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + t loop + s,-$,, + s,^['$as_cr_digits']*\n,, + ' >$as_me.lineno && + chmod +x $as_me.lineno || + { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensible to this). + . ./$as_me.lineno + # Exit status is that of the last command. + exit +} + + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac + +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + # We could just check for DJGPP; but this test a) works b) is more generic + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). + if test -f conf$$.exe; then + # Don't use ln at all; we don't have any links + as_ln_s='cp -p' + else + as_ln_s='ln -s' + fi +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.file + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_executable_p="test -f" + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +# IFS +# We need space, tab and new line, in precisely that order. +as_nl=' +' +IFS=" $as_nl" + +# CDPATH. +$as_unset CDPATH + + +# Name of the host. +# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +exec 6>&1 + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_config_libobj_dir=. +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} + +# Maximum number of lines to put in a shell here document. +# This variable seems obsolete. It should probably be removed, and +# only ac_max_sed_lines should be used. +: ${ac_max_here_lines=38} + +# Identity of this package. +PACKAGE_NAME='sst' +PACKAGE_TARNAME='sst' +PACKAGE_VERSION='2.0' +PACKAGE_STRING='sst 2.0' +PACKAGE_BUGREPORT='stsp' + +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#if HAVE_SYS_TYPES_H +# include +#endif +#if HAVE_SYS_STAT_H +# include +#endif +#if STDC_HEADERS +# include +# include +#else +# if HAVE_STDLIB_H +# include +# endif +#endif +#if HAVE_STRING_H +# if !STDC_HEADERS && HAVE_MEMORY_H +# include +# endif +# include +#endif +#if HAVE_STRINGS_H +# include +#endif +#if HAVE_INTTYPES_H +# include +#else +# if HAVE_STDINT_H +# include +# endif +#endif +#if HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar MKINSTALLDIRS USE_NLS MSGFMT GMSGFMT XGETTEXT MSGMERGE CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE build build_cpu build_vendor build_os host host_cpu host_vendor host_os INTL_MACOSX_LIBS LIBICONV LTLIBICONV INTLLIBS LIBINTL LTLIBINTL POSUB LN_S have_xmlto ac_ct_have_xmlto have_python ac_ct_have_python CPP EGREP LIBOBJS LTLIBOBJS' +ac_subst_files='' + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datadir='${prefix}/share' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +libdir='${exec_prefix}/lib' +includedir='${prefix}/include' +oldincludedir='/usr/include' +infodir='${prefix}/info' +mandir='${prefix}/man' + +ac_prev= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval "$ac_prev=\$ac_option" + ac_prev= + continue + fi + + ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_option in + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad | --data | --dat | --da) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ + | --da=*) + datadir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/-/_/g'` + eval "enable_$ac_feature=no" ;; + + -enable-* | --enable-*) + ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/-/_/g'` + case $ac_option in + *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; + *) ac_optarg=yes ;; + esac + eval "enable_$ac_feature='$ac_optarg'" ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst \ + | --locals | --local | --loca | --loc | --lo) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* \ + | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package| sed 's/-/_/g'` + case $ac_option in + *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; + *) ac_optarg=yes ;; + esac + eval "with_$ac_package='$ac_optarg'" ;; + + -without-* | --without-*) + ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package | sed 's/-/_/g'` + eval "with_$ac_package=no" ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) { echo "$as_me: error: unrecognized option: $ac_option +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 + { (exit 1); exit 1; }; } + ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` + eval "$ac_envvar='$ac_optarg'" + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + { echo "$as_me: error: missing argument to $ac_option" >&2 + { (exit 1); exit 1; }; } +fi + +# Be sure to have absolute paths. +for ac_var in exec_prefix prefix +do + eval ac_val=$`echo $ac_var` + case $ac_val in + [\\/$]* | ?:[\\/]* | NONE | '' ) ;; + *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; };; + esac +done + +# Be sure to have absolute paths. +for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ + localstatedir libdir includedir oldincludedir infodir mandir +do + eval ac_val=$`echo $ac_var` + case $ac_val in + [\\/$]* | ?:[\\/]* ) ;; + *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; };; + esac +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used." >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then its parent. + ac_confdir=`(dirname "$0") 2>/dev/null || +$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$0" : 'X\(//\)[^/]' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$0" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r $srcdir/$ac_unique_file; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r $srcdir/$ac_unique_file; then + if test "$ac_srcdir_defaulted" = yes; then + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 + { (exit 1); exit 1; }; } + else + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 + { (exit 1); exit 1; }; } + fi +fi +(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || + { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 + { (exit 1); exit 1; }; } +srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` +ac_env_build_alias_set=${build_alias+set} +ac_env_build_alias_value=$build_alias +ac_cv_env_build_alias_set=${build_alias+set} +ac_cv_env_build_alias_value=$build_alias +ac_env_host_alias_set=${host_alias+set} +ac_env_host_alias_value=$host_alias +ac_cv_env_host_alias_set=${host_alias+set} +ac_cv_env_host_alias_value=$host_alias +ac_env_target_alias_set=${target_alias+set} +ac_env_target_alias_value=$target_alias +ac_cv_env_target_alias_set=${target_alias+set} +ac_cv_env_target_alias_value=$target_alias +ac_env_CC_set=${CC+set} +ac_env_CC_value=$CC +ac_cv_env_CC_set=${CC+set} +ac_cv_env_CC_value=$CC +ac_env_CFLAGS_set=${CFLAGS+set} +ac_env_CFLAGS_value=$CFLAGS +ac_cv_env_CFLAGS_set=${CFLAGS+set} +ac_cv_env_CFLAGS_value=$CFLAGS +ac_env_LDFLAGS_set=${LDFLAGS+set} +ac_env_LDFLAGS_value=$LDFLAGS +ac_cv_env_LDFLAGS_set=${LDFLAGS+set} +ac_cv_env_LDFLAGS_value=$LDFLAGS +ac_env_CPPFLAGS_set=${CPPFLAGS+set} +ac_env_CPPFLAGS_value=$CPPFLAGS +ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} +ac_cv_env_CPPFLAGS_value=$CPPFLAGS +ac_env_CPP_set=${CPP+set} +ac_env_CPP_value=$CPP +ac_cv_env_CPP_set=${CPP+set} +ac_cv_env_CPP_value=$CPP + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures sst 2.0 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +_ACEOF + + cat <<_ACEOF +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --datadir=DIR read-only architecture-independent data [PREFIX/share] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --infodir=DIR info documentation [PREFIX/info] + --mandir=DIR man documentation [PREFIX/man] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of sst 2.0:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --disable-nls do not use Native Language Support + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors + --disable-rpath do not hardcode runtime library paths + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-gnu-ld assume the C compiler uses GNU ld default=no + --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib + --without-libiconv-prefix don't search for libiconv in includedir and libdir + --with-libintl-prefix[=DIR] search for libintl in DIR/include and DIR/lib + --without-libintl-prefix don't search for libintl in includedir and libdir + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have + headers in a nonstandard directory + CPP C preprocessor + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to . +_ACEOF +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + ac_popdir=`pwd` + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d $ac_dir || continue + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac + +# Do not use `cd foo && pwd` to compute absolute paths, because +# the directories may not exist. +case `pwd` in +.) ac_abs_builddir="$ac_dir";; +*) + case "$ac_dir" in + .) ac_abs_builddir=`pwd`;; + [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; + *) ac_abs_builddir=`pwd`/"$ac_dir";; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_builddir=${ac_top_builddir}.;; +*) + case ${ac_top_builddir}. in + .) ac_abs_top_builddir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; + *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_srcdir=$ac_srcdir;; +*) + case $ac_srcdir in + .) ac_abs_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; + *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_srcdir=$ac_top_srcdir;; +*) + case $ac_top_srcdir in + .) ac_abs_top_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; + *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; + esac;; +esac + + cd $ac_dir + # Check for guested configure; otherwise get Cygnus style configure. + if test -f $ac_srcdir/configure.gnu; then + echo + $SHELL $ac_srcdir/configure.gnu --help=recursive + elif test -f $ac_srcdir/configure; then + echo + $SHELL $ac_srcdir/configure --help=recursive + elif test -f $ac_srcdir/configure.ac || + test -f $ac_srcdir/configure.in; then + echo + $ac_configure --help + else + echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi + cd $ac_popdir + done +fi + +test -n "$ac_init_help" && exit 0 +if $ac_init_version; then + cat <<\_ACEOF +sst configure 2.0 +generated by GNU Autoconf 2.59 + +Copyright (C) 2003 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit 0 +fi +exec 5>config.log +cat >&5 <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by sst $as_me 2.0, which was +generated by GNU Autoconf 2.59. Invocation command line was + + $ $0 $@ + +_ACEOF +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +hostinfo = `(hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + echo "PATH: $as_dir" +done + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_sep= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) + ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; + 2) + ac_configure_args1="$ac_configure_args1 '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" + # Get rid of the leading space. + ac_sep=" " + ;; + esac + done +done +$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } +$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Be sure not to use single quotes in there, as some shells, +# such as our DU 5.0 friend, will then `close' the trap. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + cat <<\_ASBOX +## ---------------- ## +## Cache variables. ## +## ---------------- ## +_ASBOX + echo + # The following way of writing the cache mishandles newlines in values, +{ + (set) 2>&1 | + case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in + *ac_space=\ *) + sed -n \ + "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" + ;; + *) + sed -n \ + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + ;; + esac; +} + echo + + cat <<\_ASBOX +## ----------------- ## +## Output variables. ## +## ----------------- ## +_ASBOX + echo + for ac_var in $ac_subst_vars + do + eval ac_val=$`echo $ac_var` + echo "$ac_var='"'"'$ac_val'"'"'" + done | sort + echo + + if test -n "$ac_subst_files"; then + cat <<\_ASBOX +## ------------- ## +## Output files. ## +## ------------- ## +_ASBOX + echo + for ac_var in $ac_subst_files + do + eval ac_val=$`echo $ac_var` + echo "$ac_var='"'"'$ac_val'"'"'" + done | sort + echo + fi + + if test -s confdefs.h; then + cat <<\_ASBOX +## ----------- ## +## confdefs.h. ## +## ----------- ## +_ASBOX + echo + sed "/^$/d" confdefs.h | sort + echo + fi + test "$ac_signal" != 0 && + echo "$as_me: caught signal $ac_signal" + echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core && + rm -rf conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status + ' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -rf conftest* confdefs.h +# AIX cpp loses on an empty file, so make sure it contains at least a newline. +echo >confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer explicitly selected file to automatically selected ones. +if test -z "$CONFIG_SITE"; then + if test "x$prefix" != xNONE; then + CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" + else + CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" + fi +fi +for ac_site_file in $CONFIG_SITE; do + if test -r "$ac_site_file"; then + { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 +echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special + # files actually), so we avoid doing that. + if test -f "$cache_file"; then + { echo "$as_me:$LINENO: loading cache $cache_file" >&5 +echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . $cache_file;; + *) . ./$cache_file;; + esac + fi +else + { echo "$as_me:$LINENO: creating cache $cache_file" >&5 +echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in `(set) 2>&1 | + sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val="\$ac_cv_env_${ac_var}_value" + eval ac_new_val="\$ac_env_${ac_var}_value" + case $ac_old_set,$ac_new_set in + set,) + { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 +echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 +echo "$as_me: former value: $ac_old_val" >&2;} + { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 +echo "$as_me: current value: $ac_new_val" >&2;} + ac_cache_corrupted=: + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) + ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 +echo "$as_me: error: changes in the environment can compromise the build" >&2;} + { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 +echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} + { (exit 1); exit 1; }; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + + + + + + + + + + + + + + + + + + + + + + + +am__api_version="1.9" +ac_aux_dir= +for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do + if test -f $ac_dir/install-sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f $ac_dir/install.sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f $ac_dir/shtool; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 +echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} + { (exit 1); exit 1; }; } +fi +ac_config_guess="$SHELL $ac_aux_dir/config.guess" +ac_config_sub="$SHELL $ac_aux_dir/config.sub" +ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 +if test -z "$INSTALL"; then +if test "${ac_cv_path_install+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in + ./ | .// | /cC/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + done + done + ;; +esac +done + + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. We don't cache a + # path for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the path is relative. + INSTALL=$ac_install_sh + fi +fi +echo "$as_me:$LINENO: result: $INSTALL" >&5 +echo "${ECHO_T}$INSTALL" >&6 + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +echo "$as_me:$LINENO: checking whether build environment is sane" >&5 +echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6 +# Just in case +sleep 1 +echo timestamp > conftest.file +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t $srcdir/configure conftest.file` + fi + rm -f conftest.file + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" >&5 +echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken +alias in your environment" >&2;} + { (exit 1); exit 1; }; } + fi + + test "$2" = conftest.file + ) +then + # Ok. + : +else + { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! +Check your system clock" >&5 +echo "$as_me: error: newly created file is older than distributed files! +Check your system clock" >&2;} + { (exit 1); exit 1; }; } +fi +echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +test "$program_prefix" != NONE && + program_transform_name="s,^,$program_prefix,;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s,\$,$program_suffix,;$program_transform_name" +# Double any \ or $. echo might interpret backslashes. +# By default was `s,x,x', remove it if useless. +cat <<\_ACEOF >conftest.sed +s/[\\$]/&&/g;s/;s,x,x,$// +_ACEOF +program_transform_name=`echo $program_transform_name | sed -f conftest.sed` +rm conftest.sed + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing" +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5 +echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then + # We used to keeping the `.' as first argument, in order to + # allow $(mkdir_p) to be used without argument. As in + # $(mkdir_p) $(somedir) + # where $(somedir) is conditionally defined. However this is wrong + # for two reasons: + # 1. if the package is installed by a user who cannot write `.' + # make install will fail, + # 2. the above comment should most certainly read + # $(mkdir_p) $(DESTDIR)$(somedir) + # so it does not work when $(somedir) is undefined and + # $(DESTDIR) is not. + # To support the latter case, we have to write + # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), + # so the `.' trick is pointless. + mkdir_p='mkdir -p --' +else + # On NextStep and OpenStep, the `mkdir' command does not + # recognize any option. It will interpret all options as + # directories to create, and then abort because `.' already + # exists. + for d in ./-p ./--version; + do + test -d $d && rmdir $d + done + # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. + if test -f "$ac_aux_dir/mkinstalldirs"; then + mkdir_p='$(mkinstalldirs)' + else + mkdir_p='$(install_sh) -d' + fi +fi + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_AWK+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + echo "$as_me:$LINENO: result: $AWK" >&5 +echo "${ECHO_T}$AWK" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$AWK" && break +done + +echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6 +set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` +if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.make <<\_ACEOF +all: + @echo 'ac_maketemp="$(MAKE)"' +_ACEOF +# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` +if test -n "$ac_maketemp"; then + eval ac_cv_prog_make_${ac_make}_set=yes +else + eval ac_cv_prog_make_${ac_make}_set=no +fi +rm -f conftest.make +fi +if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + SET_MAKE= +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +# test to see if srcdir already configured +if test "`cd $srcdir && pwd`" != "`pwd`" && + test -f $srcdir/config.status; then + { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5 +echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;} + { (exit 1); exit 1; }; } +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='sst' + VERSION='2.0' + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +install_sh=${install_sh-"$am_aux_dir/install-sh"} + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + echo "$as_me:$LINENO: result: $STRIP" >&5 +echo "${ECHO_T}$STRIP" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 +echo "${ECHO_T}$ac_ct_STRIP" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + STRIP=$ac_ct_STRIP +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s" + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. + +AMTAR=${AMTAR-"${am_missing_run}tar"} + +am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' + + + + + + + + MKINSTALLDIRS= + if test -n "$ac_aux_dir"; then + case "$ac_aux_dir" in + /*) MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" ;; + *) MKINSTALLDIRS="\$(top_builddir)/$ac_aux_dir/mkinstalldirs" ;; + esac + fi + if test -z "$MKINSTALLDIRS"; then + MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" + fi + + + + echo "$as_me:$LINENO: checking whether NLS is requested" >&5 +echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6 + # Check whether --enable-nls or --disable-nls was given. +if test "${enable_nls+set}" = set; then + enableval="$enable_nls" + USE_NLS=$enableval +else + USE_NLS=yes +fi; + echo "$as_me:$LINENO: result: $USE_NLS" >&5 +echo "${ECHO_T}$USE_NLS" >&6 + + + + + + +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + +# Find out how to test for executable files. Don't use a zero-byte file, +# as systems may use methods other than mode bits to determine executability. +cat >conf$$.file <<_ASEOF +#! /bin/sh +exit 0 +_ASEOF +chmod +x conf$$.file +if test -x conf$$.file >/dev/null 2>&1; then + ac_executable_p="test -x" +else + ac_executable_p="test -f" +fi +rm -f conf$$.file + +# Extract the first word of "msgfmt", so it can be a program name with args. +set dummy msgfmt; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_MSGFMT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case "$MSGFMT" in + [\\/]* | ?:[\\/]*) + ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. + ;; + *) + ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$ac_save_IFS" + test -z "$ac_dir" && ac_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then + echo "$as_me: trying $ac_dir/$ac_word..." >&5 + if $ac_dir/$ac_word --statistics /dev/null >&5 2>&1 && + (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then + ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext" + break 2 + fi + fi + done + done + IFS="$ac_save_IFS" + test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":" + ;; +esac +fi +MSGFMT="$ac_cv_path_MSGFMT" +if test "$MSGFMT" != ":"; then + echo "$as_me:$LINENO: result: $MSGFMT" >&5 +echo "${ECHO_T}$MSGFMT" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + # Extract the first word of "gmsgfmt", so it can be a program name with args. +set dummy gmsgfmt; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_GMSGFMT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case $GMSGFMT in + [\\/]* | ?:[\\/]*) + ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" + ;; +esac +fi +GMSGFMT=$ac_cv_path_GMSGFMT + +if test -n "$GMSGFMT"; then + echo "$as_me:$LINENO: result: $GMSGFMT" >&5 +echo "${ECHO_T}$GMSGFMT" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + + +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + +# Find out how to test for executable files. Don't use a zero-byte file, +# as systems may use methods other than mode bits to determine executability. +cat >conf$$.file <<_ASEOF +#! /bin/sh +exit 0 +_ASEOF +chmod +x conf$$.file +if test -x conf$$.file >/dev/null 2>&1; then + ac_executable_p="test -x" +else + ac_executable_p="test -f" +fi +rm -f conf$$.file + +# Extract the first word of "xgettext", so it can be a program name with args. +set dummy xgettext; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_XGETTEXT+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case "$XGETTEXT" in + [\\/]* | ?:[\\/]*) + ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. + ;; + *) + ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$ac_save_IFS" + test -z "$ac_dir" && ac_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then + echo "$as_me: trying $ac_dir/$ac_word..." >&5 + if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&5 2>&1 && + (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then + ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext" + break 2 + fi + fi + done + done + IFS="$ac_save_IFS" + test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" + ;; +esac +fi +XGETTEXT="$ac_cv_path_XGETTEXT" +if test "$XGETTEXT" != ":"; then + echo "$as_me:$LINENO: result: $XGETTEXT" >&5 +echo "${ECHO_T}$XGETTEXT" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + rm -f messages.po + + +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + +# Find out how to test for executable files. Don't use a zero-byte file, +# as systems may use methods other than mode bits to determine executability. +cat >conf$$.file <<_ASEOF +#! /bin/sh +exit 0 +_ASEOF +chmod +x conf$$.file +if test -x conf$$.file >/dev/null 2>&1; then + ac_executable_p="test -x" +else + ac_executable_p="test -f" +fi +rm -f conf$$.file + +# Extract the first word of "msgmerge", so it can be a program name with args. +set dummy msgmerge; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_path_MSGMERGE+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + case "$MSGMERGE" in + [\\/]* | ?:[\\/]*) + ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. + ;; + *) + ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$ac_save_IFS" + test -z "$ac_dir" && ac_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then + echo "$as_me: trying $ac_dir/$ac_word..." >&5 + if $ac_dir/$ac_word --update -q /dev/null /dev/null >&5 2>&1; then + ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext" + break 2 + fi + fi + done + done + IFS="$ac_save_IFS" + test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":" + ;; +esac +fi +MSGMERGE="$ac_cv_path_MSGMERGE" +if test "$MSGMERGE" != ":"; then + echo "$as_me:$LINENO: result: $MSGMERGE" >&5 +echo "${ECHO_T}$MSGMERGE" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + + if test "$GMSGFMT" != ":"; then + if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 && + (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then + : ; + else + GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'` + echo "$as_me:$LINENO: result: found $GMSGFMT program is not GNU msgfmt; ignore it" >&5 +echo "${ECHO_T}found $GMSGFMT program is not GNU msgfmt; ignore it" >&6 + GMSGFMT=":" + fi + fi + + if test "$XGETTEXT" != ":"; then + if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 && + (if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then + : ; + else + echo "$as_me:$LINENO: result: found xgettext program is not GNU xgettext; ignore it" >&5 +echo "${ECHO_T}found xgettext program is not GNU xgettext; ignore it" >&6 + XGETTEXT=":" + fi + rm -f messages.po + fi + + ac_config_commands="$ac_config_commands default-1" + + + + if test "X$prefix" = "XNONE"; then + acl_final_prefix="$ac_default_prefix" + else + acl_final_prefix="$prefix" + fi + if test "X$exec_prefix" = "XNONE"; then + acl_final_exec_prefix='${prefix}' + else + acl_final_exec_prefix="$exec_prefix" + fi + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" + prefix="$acl_save_prefix" + +DEPDIR="${am__leading_dot}deps" + + ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo done +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 +echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6 +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# We grep out `Entering directory' and `Leaving directory' +# messages which can occur if `w' ends up in MAKEFLAGS. +# In particular we don't look at `^make:' because GNU make might +# be invoked under some other name (usually "gmake"), in which +# case it prints its new name instead of `make'. +if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then + am__include=include + am__quote= + _am_result=GNU +fi +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then + am__include=.include + am__quote="\"" + _am_result=BSD + fi +fi + + +echo "$as_me:$LINENO: result: $_am_result" >&5 +echo "${ECHO_T}$_am_result" >&6 +rm -f confinc confmf + +# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then + enableval="$enable_dependency_tracking" + +fi; +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi + + +if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + CC=$ac_ct_CC +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + CC=$ac_ct_CC +else + CC="$ac_cv_prog_CC" +fi + +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$ac_ct_CC" && break +done + + CC=$ac_ct_CC +fi + +fi + + +test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&5 +echo "$as_me: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } + +# Provide some information about the compiler. +echo "$as_me:$LINENO:" \ + "checking for C compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 + (eval $ac_compiler --version &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 + (eval $ac_compiler -v &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 + (eval $ac_compiler -V &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 +echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 +ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` +if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 + (eval $ac_link_default) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Find the output, starting from the most likely. This scheme is +# not robust to junk in `.', hence go to wildcards (a.*) only as a last +# resort. + +# Be careful to initialize this variable, since it used to be cached. +# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. +ac_cv_exeext= +# b.out is created by i960 compilers. +for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) + ;; + conftest.$ac_ext ) + # This is the source file. + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + # FIXME: I believe we export ac_cv_exeext for Libtool, + # but it would be cool to find out if it's true. Does anybody + # maintain Libtool? --akim. + export ac_cv_exeext + break;; + * ) + break;; + esac +done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { echo "$as_me:$LINENO: error: C compiler cannot create executables +See \`config.log' for more details." >&5 +echo "$as_me: error: C compiler cannot create executables +See \`config.log' for more details." >&2;} + { (exit 77); exit 77; }; } +fi + +ac_exeext=$ac_cv_exeext +echo "$as_me:$LINENO: result: $ac_file" >&5 +echo "${ECHO_T}$ac_file" >&6 + +# Check the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +echo "$as_me:$LINENO: checking whether the C compiler works" >&5 +echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 +# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 +# If not cross compiling, check that we can run a simple program. +if test "$cross_compiling" != yes; then + if { ac_try='./$ac_file' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { echo "$as_me:$LINENO: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } + fi + fi +fi +echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + +rm -f a.out a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +# Check the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 +echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 +echo "$as_me:$LINENO: result: $cross_compiling" >&5 +echo "${ECHO_T}$cross_compiling" >&6 + +echo "$as_me:$LINENO: checking for suffix of executables" >&5 +echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + export ac_cv_exeext + break;; + * ) break;; + esac +done +else + { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest$ac_cv_exeext +echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 +echo "${ECHO_T}$ac_cv_exeext" >&6 + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +echo "$as_me:$LINENO: checking for suffix of object files" >&5 +echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 +if test "${ac_cv_objext+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 +echo "${ECHO_T}$ac_cv_objext" >&6 +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 +echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 +if test "${ac_cv_c_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_compiler_gnu=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_compiler_gnu=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 +echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 +GCC=`test $ac_compiler_gnu = yes && echo yes` +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +CFLAGS="-g" +echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 +echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 +if test "${ac_cv_prog_cc_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_cc_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_prog_cc_g=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 +echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 +if test "${ac_cv_prog_cc_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_prog_cc_stdc=no +ac_save_CC=$CC +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std1 is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std1. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +# Don't try gcc -ansi; that turns off useful extensions and +# breaks some systems' header files. +# AIX -qlanglvl=ansi +# Ultrix and OSF/1 -std1 +# HP-UX 10.20 and later -Ae +# HP-UX older versions -Aa -D_HPUX_SOURCE +# SVR4 -Xc -D__EXTENSIONS__ +for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_cc_stdc=$ac_arg +break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext +done +rm -f conftest.$ac_ext conftest.$ac_objext +CC=$ac_save_CC + +fi + +case "x$ac_cv_prog_cc_stdc" in + x|xno) + echo "$as_me:$LINENO: result: none needed" >&5 +echo "${ECHO_T}none needed" >&6 ;; + *) + echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 + CC="$CC $ac_cv_prog_cc_stdc" ;; +esac + +# Some people use a C++ compiler to compile C. Since we use `exit', +# in C++ we need to declare it. In case someone uses the same compiler +# for both compiling C and C++ we need to have the C++ compiler decide +# the declaration of exit, since it's the most demanding environment. +cat >conftest.$ac_ext <<_ACEOF +#ifndef __cplusplus + choke me +#endif +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + for ac_declaration in \ + '' \ + 'extern "C" void std::exit (int) throw (); using std::exit;' \ + 'extern "C" void std::exit (int); using std::exit;' \ + 'extern "C" void exit (int) throw ();' \ + 'extern "C" void exit (int);' \ + 'void exit (int);' +do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_declaration +#include +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +continue +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_declaration +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +done +rm -f conftest* +if test -n "$ac_declaration"; then + echo '#ifdef __cplusplus' >>confdefs.h + echo $ac_declaration >>confdefs.h + echo '#endif' >>confdefs.h +fi + +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CC" am_compiler_list= + +echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 +echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 +if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + case $depmode in + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + none) break ;; + esac + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. + if depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 +echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6 +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + + +if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +# Make sure we can run config.sub. +$ac_config_sub sun4 >/dev/null 2>&1 || + { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 +echo "$as_me: error: cannot run $ac_config_sub" >&2;} + { (exit 1); exit 1; }; } + +echo "$as_me:$LINENO: checking build system type" >&5 +echo $ECHO_N "checking build system type... $ECHO_C" >&6 +if test "${ac_cv_build+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_build_alias=$build_alias +test -z "$ac_cv_build_alias" && + ac_cv_build_alias=`$ac_config_guess` +test -z "$ac_cv_build_alias" && + { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 +echo "$as_me: error: cannot guess build type; you must specify one" >&2;} + { (exit 1); exit 1; }; } +ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || + { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 +echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +echo "$as_me:$LINENO: result: $ac_cv_build" >&5 +echo "${ECHO_T}$ac_cv_build" >&6 +build=$ac_cv_build +build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + + +echo "$as_me:$LINENO: checking host system type" >&5 +echo $ECHO_N "checking host system type... $ECHO_C" >&6 +if test "${ac_cv_host+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_host_alias=$host_alias +test -z "$ac_cv_host_alias" && + ac_cv_host_alias=$ac_cv_build_alias +ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || + { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 +echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +echo "$as_me:$LINENO: result: $ac_cv_host" >&5 +echo "${ECHO_T}$ac_cv_host" >&6 +host=$ac_cv_host +host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + + + +# Check whether --with-gnu-ld or --without-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then + withval="$with_gnu_ld" + test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi; +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + echo "$as_me:$LINENO: checking for ld used by GCC" >&5 +echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6 + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | [A-Za-z]:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the path of ld + ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + echo "$as_me:$LINENO: checking for GNU ld" >&5 +echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6 +else + echo "$as_me:$LINENO: checking for non-GNU ld" >&5 +echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6 +fi +if test "${acl_cv_path_LD+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -z "$LD"; then + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + acl_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in + *GNU* | *'with BFD'*) + test "$with_gnu_ld" != no && break ;; + *) + test "$with_gnu_ld" != yes && break ;; + esac + fi + done + IFS="$ac_save_ifs" +else + acl_cv_path_LD="$LD" # Let the user override the test with a path. +fi +fi + +LD="$acl_cv_path_LD" +if test -n "$LD"; then + echo "$as_me:$LINENO: result: $LD" >&5 +echo "${ECHO_T}$LD" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi +test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5 +echo "$as_me: error: no acceptable ld found in \$PATH" >&2;} + { (exit 1); exit 1; }; } +echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5 +echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6 +if test "${acl_cv_prog_gnu_ld+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # I'd rather use --version here, but apparently some GNU ld's only accept -v. +case `$LD -v 2>&1 &5 +echo "${ECHO_T}$acl_cv_prog_gnu_ld" >&6 +with_gnu_ld=$acl_cv_prog_gnu_ld + + + + + echo "$as_me:$LINENO: checking for shared library run path origin" >&5 +echo $ECHO_N "checking for shared library run path origin... $ECHO_C" >&6 +if test "${acl_cv_rpath+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ + ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh + . ./conftest.sh + rm -f ./conftest.sh + acl_cv_rpath=done + +fi +echo "$as_me:$LINENO: result: $acl_cv_rpath" >&5 +echo "${ECHO_T}$acl_cv_rpath" >&6 + wl="$acl_cv_wl" + libext="$acl_cv_libext" + shlibext="$acl_cv_shlibext" + hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" + hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" + hardcode_direct="$acl_cv_hardcode_direct" + hardcode_minus_L="$acl_cv_hardcode_minus_L" + # Check whether --enable-rpath or --disable-rpath was given. +if test "${enable_rpath+set}" = set; then + enableval="$enable_rpath" + : +else + enable_rpath=yes +fi; + + + + + + + + use_additional=yes + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + +# Check whether --with-libiconv-prefix or --without-libiconv-prefix was given. +if test "${with_libiconv_prefix+set}" = set; then + withval="$with_libiconv_prefix" + + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + else + additional_includedir="$withval/include" + additional_libdir="$withval/lib" + fi + fi + +fi; + LIBICONV= + LTLIBICONV= + INCICONV= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='iconv ' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value" + else + : + fi + else + found_dir= + found_la= + found_so= + found_a= + if test $use_additional = yes; then + if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then + found_dir="$additional_libdir" + found_so="$additional_libdir/lib$name.$shlibext" + if test -f "$additional_libdir/lib$name.la"; then + found_la="$additional_libdir/lib$name.la" + fi + else + if test -f "$additional_libdir/lib$name.$libext"; then + found_dir="$additional_libdir" + found_a="$additional_libdir/lib$name.$libext" + if test -f "$additional_libdir/lib$name.la"; then + found_la="$additional_libdir/lib$name.la" + fi + fi + fi + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then + found_dir="$dir" + found_so="$dir/lib$name.$shlibext" + if test -f "$dir/lib$name.la"; then + found_la="$dir/lib$name.la" + fi + else + if test -f "$dir/lib$name.$libext"; then + found_dir="$dir" + found_a="$dir/lib$name.$libext" + if test -f "$dir/lib$name.la"; then + found_la="$dir/lib$name.la" + fi + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + else + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + if test "$hardcode_direct" = yes; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + else + if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + haveit= + for x in $LDFLAGS $LIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir" + fi + if test "$hardcode_minus_L" != no; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + else + LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a" + else + LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name" + fi + fi + additional_includedir= + case "$found_dir" in + */lib | */lib/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'` + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INCICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + if test -n "$found_la"; then + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + for dep in $dependency_libs; do + case "$dep" in + -L*) + additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + if test "X$additional_libdir" != "X/usr/lib"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/lib"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + LIBICONV="${LIBICONV}${LIBICONV:+ }$dep" + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep" + ;; + esac + done + fi + else + LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name" + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$hardcode_libdir_separator"; then + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" + done + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" + else + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + for found_dir in $ltrpathdirs; do + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir" + done + fi + + + + + + + + + + + + + + + + + + + + echo "$as_me:$LINENO: checking for CFPreferencesCopyAppValue" >&5 +echo $ECHO_N "checking for CFPreferencesCopyAppValue... $ECHO_C" >&6 +if test "${gt_cv_func_CFPreferencesCopyAppValue+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + gt_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS -I/System/Library/Frameworks/CoreFoundation.framework/Headers" + gt_save_LIBS="$LIBS" + LIBS="$LIBS -framework CoreFoundation" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ +CFPreferencesCopyAppValue(NULL, NULL) + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gt_cv_func_CFPreferencesCopyAppValue=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +gt_cv_func_CFPreferencesCopyAppValue=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + CPPFLAGS="$gt_save_CPPFLAGS" + LIBS="$gt_save_LIBS" +fi +echo "$as_me:$LINENO: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 +echo "${ECHO_T}$gt_cv_func_CFPreferencesCopyAppValue" >&6 + if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CFPREFERENCESCOPYAPPVALUE 1 +_ACEOF + + fi + echo "$as_me:$LINENO: checking for CFLocaleCopyCurrent" >&5 +echo $ECHO_N "checking for CFLocaleCopyCurrent... $ECHO_C" >&6 +if test "${gt_cv_func_CFLocaleCopyCurrent+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + gt_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS -I/System/Library/Frameworks/CoreFoundation.framework/Headers" + gt_save_LIBS="$LIBS" + LIBS="$LIBS -framework CoreFoundation" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +int +main () +{ +CFLocaleCopyCurrent(); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gt_cv_func_CFLocaleCopyCurrent=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +gt_cv_func_CFLocaleCopyCurrent=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + CPPFLAGS="$gt_save_CPPFLAGS" + LIBS="$gt_save_LIBS" +fi +echo "$as_me:$LINENO: result: $gt_cv_func_CFLocaleCopyCurrent" >&5 +echo "${ECHO_T}$gt_cv_func_CFLocaleCopyCurrent" >&6 + if test $gt_cv_func_CFLocaleCopyCurrent = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_CFLOCALECOPYCURRENT 1 +_ACEOF + + fi + INTL_MACOSX_LIBS= + if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then + INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" + fi + + + + + echo "$as_me:$LINENO: checking whether NLS is requested" >&5 +echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6 + # Check whether --enable-nls or --disable-nls was given. +if test "${enable_nls+set}" = set; then + enableval="$enable_nls" + USE_NLS=$enableval +else + USE_NLS=yes +fi; + echo "$as_me:$LINENO: result: $USE_NLS" >&5 +echo "${ECHO_T}$USE_NLS" >&6 + + + + + LIBINTL= + LTLIBINTL= + POSUB= + + if test "$USE_NLS" = "yes"; then + gt_use_preinstalled_gnugettext=no + + + + + + + echo "$as_me:$LINENO: checking for GNU gettext in libc" >&5 +echo $ECHO_N "checking for GNU gettext in libc... $ECHO_C" >&6 +if test "${gt_cv_func_gnugettext1_libc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +extern int _nl_msg_cat_cntr; +extern int *_nl_domain_bindings; +int +main () +{ +bindtextdomain ("", ""); +return * gettext ("") + _nl_msg_cat_cntr + *_nl_domain_bindings + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gt_cv_func_gnugettext1_libc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +gt_cv_func_gnugettext1_libc=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $gt_cv_func_gnugettext1_libc" >&5 +echo "${ECHO_T}$gt_cv_func_gnugettext1_libc" >&6 + + if test "$gt_cv_func_gnugettext1_libc" != "yes"; then + + + + + + am_save_CPPFLAGS="$CPPFLAGS" + + for element in $INCICONV; do + haveit= + for x in $CPPFLAGS; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" + fi + done + + + echo "$as_me:$LINENO: checking for iconv" >&5 +echo $ECHO_N "checking for iconv... $ECHO_C" >&6 +if test "${am_cv_func_iconv+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + + am_cv_func_iconv="no, consider installing GNU libiconv" + am_cv_lib_iconv=no + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +int +main () +{ +iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + am_cv_func_iconv=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test "$am_cv_func_iconv" != yes; then + am_save_LIBS="$LIBS" + LIBS="$LIBS $LIBICONV" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +int +main () +{ +iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + am_cv_lib_iconv=yes + am_cv_func_iconv=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$am_save_LIBS" + fi + +fi +echo "$as_me:$LINENO: result: $am_cv_func_iconv" >&5 +echo "${ECHO_T}$am_cv_func_iconv" >&6 + if test "$am_cv_func_iconv" = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_ICONV 1 +_ACEOF + + fi + if test "$am_cv_lib_iconv" = yes; then + echo "$as_me:$LINENO: checking how to link with libiconv" >&5 +echo $ECHO_N "checking how to link with libiconv... $ECHO_C" >&6 + echo "$as_me:$LINENO: result: $LIBICONV" >&5 +echo "${ECHO_T}$LIBICONV" >&6 + else + CPPFLAGS="$am_save_CPPFLAGS" + LIBICONV= + LTLIBICONV= + fi + + + + + + + use_additional=yes + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + +# Check whether --with-libintl-prefix or --without-libintl-prefix was given. +if test "${with_libintl_prefix+set}" = set; then + withval="$with_libintl_prefix" + + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + else + additional_includedir="$withval/include" + additional_libdir="$withval/lib" + fi + fi + +fi; + LIBINTL= + LTLIBINTL= + INCINTL= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='intl ' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIBINTL="${LIBINTL}${LIBINTL:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$value" + else + : + fi + else + found_dir= + found_la= + found_so= + found_a= + if test $use_additional = yes; then + if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then + found_dir="$additional_libdir" + found_so="$additional_libdir/lib$name.$shlibext" + if test -f "$additional_libdir/lib$name.la"; then + found_la="$additional_libdir/lib$name.la" + fi + else + if test -f "$additional_libdir/lib$name.$libext"; then + found_dir="$additional_libdir" + found_a="$additional_libdir/lib$name.$libext" + if test -f "$additional_libdir/lib$name.la"; then + found_la="$additional_libdir/lib$name.la" + fi + fi + fi + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIBINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then + found_dir="$dir" + found_so="$dir/lib$name.$shlibext" + if test -f "$dir/lib$name.la"; then + found_la="$dir/lib$name.la" + fi + else + if test -f "$dir/lib$name.$libext"; then + found_dir="$dir" + found_a="$dir/lib$name.$libext" + if test -f "$dir/lib$name.la"; then + found_la="$dir/lib$name.la" + fi + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" + else + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + if test "$hardcode_direct" = yes; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" + else + if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + haveit= + for x in $LDFLAGS $LIBINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir" + fi + if test "$hardcode_minus_L" != no; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" + else + LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_a" + else + LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir -l$name" + fi + fi + additional_includedir= + case "$found_dir" in + */lib | */lib/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'` + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INCINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + INCINTL="${INCINTL}${INCINTL:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + if test -n "$found_la"; then + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + for dep in $dependency_libs; do + case "$dep" in + -L*) + additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + if test "X$additional_libdir" != "X/usr/lib"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/lib"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIBINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LIBINTL="${LIBINTL}${LIBINTL:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIBINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$additional_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + LIBINTL="${LIBINTL}${LIBINTL:+ }$dep" + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$dep" + ;; + esac + done + fi + else + LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l$name" + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$hardcode_libdir_separator"; then + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" + done + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" + else + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + for found_dir in $ltrpathdirs; do + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-R$found_dir" + done + fi + + echo "$as_me:$LINENO: checking for GNU gettext in libintl" >&5 +echo $ECHO_N "checking for GNU gettext in libintl... $ECHO_C" >&6 +if test "${gt_cv_func_gnugettext1_libintl+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + gt_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $INCINTL" + gt_save_LIBS="$LIBS" + LIBS="$LIBS $LIBINTL" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias (const char *); +int +main () +{ +bindtextdomain ("", ""); +return * gettext ("") + _nl_msg_cat_cntr + *_nl_expand_alias ("") + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + gt_cv_func_gnugettext1_libintl=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +gt_cv_func_gnugettext1_libintl=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test "$gt_cv_func_gnugettext1_libintl" != yes && test -n "$LIBICONV"; then + LIBS="$LIBS $LIBICONV" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias (const char *); +int +main () +{ +bindtextdomain ("", ""); +return * gettext ("") + _nl_msg_cat_cntr + *_nl_expand_alias ("") + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + LIBINTL="$LIBINTL $LIBICONV" + LTLIBINTL="$LTLIBINTL $LTLIBICONV" + gt_cv_func_gnugettext1_libintl=yes + +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + fi + CPPFLAGS="$gt_save_CPPFLAGS" + LIBS="$gt_save_LIBS" +fi +echo "$as_me:$LINENO: result: $gt_cv_func_gnugettext1_libintl" >&5 +echo "${ECHO_T}$gt_cv_func_gnugettext1_libintl" >&6 + fi + + if test "$gt_cv_func_gnugettext1_libc" = "yes" \ + || { test "$gt_cv_func_gnugettext1_libintl" = "yes" \ + && test "$PACKAGE" != gettext-runtime \ + && test "$PACKAGE" != gettext-tools; }; then + gt_use_preinstalled_gnugettext=yes + else + LIBINTL= + LTLIBINTL= + INCINTL= + fi + + + + if test -n "$INTL_MACOSX_LIBS"; then + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" + LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" + fi + fi + + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + +cat >>confdefs.h <<\_ACEOF +#define ENABLE_NLS 1 +_ACEOF + + else + USE_NLS=no + fi + fi + + echo "$as_me:$LINENO: checking whether to use NLS" >&5 +echo $ECHO_N "checking whether to use NLS... $ECHO_C" >&6 + echo "$as_me:$LINENO: result: $USE_NLS" >&5 +echo "${ECHO_T}$USE_NLS" >&6 + if test "$USE_NLS" = "yes"; then + echo "$as_me:$LINENO: checking where the gettext function comes from" >&5 +echo $ECHO_N "checking where the gettext function comes from... $ECHO_C" >&6 + if test "$gt_use_preinstalled_gnugettext" = "yes"; then + if test "$gt_cv_func_gnugettext1_libintl" = "yes"; then + gt_source="external libintl" + else + gt_source="libc" + fi + else + gt_source="included intl directory" + fi + echo "$as_me:$LINENO: result: $gt_source" >&5 +echo "${ECHO_T}$gt_source" >&6 + fi + + if test "$USE_NLS" = "yes"; then + + if test "$gt_use_preinstalled_gnugettext" = "yes"; then + if test "$gt_cv_func_gnugettext1_libintl" = "yes"; then + echo "$as_me:$LINENO: checking how to link with libintl" >&5 +echo $ECHO_N "checking how to link with libintl... $ECHO_C" >&6 + echo "$as_me:$LINENO: result: $LIBINTL" >&5 +echo "${ECHO_T}$LIBINTL" >&6 + + for element in $INCINTL; do + haveit= + for x in $CPPFLAGS; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" + fi + done + + fi + + +cat >>confdefs.h <<\_ACEOF +#define HAVE_GETTEXT 1 +_ACEOF + + +cat >>confdefs.h <<\_ACEOF +#define HAVE_DCGETTEXT 1 +_ACEOF + + fi + + POSUB=po + fi + + + + INTLLIBS="$LIBINTL" + + + + + + + + ac_config_headers="$ac_config_headers src/config.h" + + +# Checks for programs. +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + CC=$ac_ct_CC +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + CC=$ac_ct_CC +else + CC="$ac_cv_prog_CC" +fi + +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$ac_ct_CC" && break +done + + CC=$ac_ct_CC +fi + +fi + + +test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&5 +echo "$as_me: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } + +# Provide some information about the compiler. +echo "$as_me:$LINENO:" \ + "checking for C compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 + (eval $ac_compiler --version &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 + (eval $ac_compiler -v &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 + (eval $ac_compiler -V &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + +echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 +echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 +if test "${ac_cv_c_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_compiler_gnu=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_compiler_gnu=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 +echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 +GCC=`test $ac_compiler_gnu = yes && echo yes` +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +CFLAGS="-g" +echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 +echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 +if test "${ac_cv_prog_cc_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_cc_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_prog_cc_g=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 +echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 +if test "${ac_cv_prog_cc_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_prog_cc_stdc=no +ac_save_CC=$CC +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std1 is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std1. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +# Don't try gcc -ansi; that turns off useful extensions and +# breaks some systems' header files. +# AIX -qlanglvl=ansi +# Ultrix and OSF/1 -std1 +# HP-UX 10.20 and later -Ae +# HP-UX older versions -Aa -D_HPUX_SOURCE +# SVR4 -Xc -D__EXTENSIONS__ +for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_cc_stdc=$ac_arg +break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext +done +rm -f conftest.$ac_ext conftest.$ac_objext +CC=$ac_save_CC + +fi + +case "x$ac_cv_prog_cc_stdc" in + x|xno) + echo "$as_me:$LINENO: result: none needed" >&5 +echo "${ECHO_T}none needed" >&6 ;; + *) + echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 + CC="$CC $ac_cv_prog_cc_stdc" ;; +esac + +# Some people use a C++ compiler to compile C. Since we use `exit', +# in C++ we need to declare it. In case someone uses the same compiler +# for both compiling C and C++ we need to have the C++ compiler decide +# the declaration of exit, since it's the most demanding environment. +cat >conftest.$ac_ext <<_ACEOF +#ifndef __cplusplus + choke me +#endif +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + for ac_declaration in \ + '' \ + 'extern "C" void std::exit (int) throw (); using std::exit;' \ + 'extern "C" void std::exit (int); using std::exit;' \ + 'extern "C" void exit (int) throw ();' \ + 'extern "C" void exit (int);' \ + 'void exit (int);' +do + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_declaration +#include +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +continue +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_declaration +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +done +rm -f conftest* +if test -n "$ac_declaration"; then + echo '#ifdef __cplusplus' >>confdefs.h + echo $ac_declaration >>confdefs.h + echo '#endif' >>confdefs.h +fi + +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CC" am_compiler_list= + +echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 +echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 +if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + case $depmode in + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + none) break ;; + esac + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. + if depmode=$depmode \ + source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 +echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6 +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + + +if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 +if test -z "$INSTALL"; then +if test "${ac_cv_path_install+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in + ./ | .// | /cC/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + done + done + ;; +esac +done + + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. We don't cache a + # path for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the path is relative. + INSTALL=$ac_install_sh + fi +fi +echo "$as_me:$LINENO: result: $INSTALL" >&5 +echo "${ECHO_T}$INSTALL" >&6 + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +echo "$as_me:$LINENO: checking whether ln -s works" >&5 +echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6 +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 +else + echo "$as_me:$LINENO: result: no, using $LN_S" >&5 +echo "${ECHO_T}no, using $LN_S" >&6 +fi + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}xmlto", so it can be a program name with args. +set dummy ${ac_tool_prefix}xmlto; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_have_xmlto+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$have_xmlto"; then + ac_cv_prog_have_xmlto="$have_xmlto" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_have_xmlto="${ac_tool_prefix}xmlto" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +have_xmlto=$ac_cv_prog_have_xmlto +if test -n "$have_xmlto"; then + echo "$as_me:$LINENO: result: $have_xmlto" >&5 +echo "${ECHO_T}$have_xmlto" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_have_xmlto"; then + ac_ct_have_xmlto=$have_xmlto + # Extract the first word of "xmlto", so it can be a program name with args. +set dummy xmlto; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_have_xmlto+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_have_xmlto"; then + ac_cv_prog_ac_ct_have_xmlto="$ac_ct_have_xmlto" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_have_xmlto="xmlto" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_ac_ct_have_xmlto" && ac_cv_prog_ac_ct_have_xmlto=""no"" +fi +fi +ac_ct_have_xmlto=$ac_cv_prog_ac_ct_have_xmlto +if test -n "$ac_ct_have_xmlto"; then + echo "$as_me:$LINENO: result: $ac_ct_have_xmlto" >&5 +echo "${ECHO_T}$ac_ct_have_xmlto" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + have_xmlto=$ac_ct_have_xmlto +else + have_xmlto="$ac_cv_prog_have_xmlto" +fi + +if test "$have_xmlto" = "no"; +then + { { echo "$as_me:$LINENO: error: xmlto is not installed" >&5 +echo "$as_me: error: xmlto is not installed" >&2;} + { (exit 1); exit 1; }; } +fi +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}python", so it can be a program name with args. +set dummy ${ac_tool_prefix}python; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_have_python+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$have_python"; then + ac_cv_prog_have_python="$have_python" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_have_python="${ac_tool_prefix}python" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +have_python=$ac_cv_prog_have_python +if test -n "$have_python"; then + echo "$as_me:$LINENO: result: $have_python" >&5 +echo "${ECHO_T}$have_python" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_have_python"; then + ac_ct_have_python=$have_python + # Extract the first word of "python", so it can be a program name with args. +set dummy python; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_have_python+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_have_python"; then + ac_cv_prog_ac_ct_have_python="$ac_ct_have_python" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_have_python="python" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + + test -z "$ac_cv_prog_ac_ct_have_python" && ac_cv_prog_ac_ct_have_python=""no"" +fi +fi +ac_ct_have_python=$ac_cv_prog_ac_ct_have_python +if test -n "$ac_ct_have_python"; then + echo "$as_me:$LINENO: result: $ac_ct_have_python" >&5 +echo "${ECHO_T}$ac_ct_have_python" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + have_python=$ac_ct_have_python +else + have_python="$ac_cv_prog_have_python" +fi + +if test "$have_python" = "no"; +then + { { echo "$as_me:$LINENO: error: python is not installed" >&5 +echo "$as_me: error: python is not installed" >&2;} + { (exit 1); exit 1; }; } +fi + +# Checks for libraries. + +echo "$as_me:$LINENO: checking for floor in -lm" >&5 +echo $ECHO_N "checking for floor in -lm... $ECHO_C" >&6 +if test "${ac_cv_lib_m_floor+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lm $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char floor (); +int +main () +{ +floor (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_m_floor=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_m_floor=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_m_floor" >&5 +echo "${ECHO_T}$ac_cv_lib_m_floor" >&6 +if test $ac_cv_lib_m_floor = yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBM 1 +_ACEOF + + LIBS="-lm $LIBS" + +else + { { echo "$as_me:$LINENO: error: math library is missing on your system." >&5 +echo "$as_me: error: math library is missing on your system." >&2;} + { (exit 1); exit 1; }; } +fi + + +echo "$as_me:$LINENO: checking for newwin in -lncurses" >&5 +echo $ECHO_N "checking for newwin in -lncurses... $ECHO_C" >&6 +if test "${ac_cv_lib_ncurses_newwin+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lncurses $LIBS" +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char newwin (); +int +main () +{ +newwin (); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_lib_ncurses_newwin=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_lib_ncurses_newwin=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +echo "$as_me:$LINENO: result: $ac_cv_lib_ncurses_newwin" >&5 +echo "${ECHO_T}$ac_cv_lib_ncurses_newwin" >&6 +if test $ac_cv_lib_ncurses_newwin = yes; then + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBNCURSES 1 +_ACEOF + + LIBS="-lncurses $LIBS" + +else + { { echo "$as_me:$LINENO: error: ncurses library is missing on your system." >&5 +echo "$as_me: error: ncurses library is missing on your system." >&2;} + { (exit 1); exit 1; }; } +fi + + +# Checks for header files. +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 +echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test "${ac_cv_prog_CPP+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether non-existent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +echo "$as_me:$LINENO: result: $CPP" >&5 +echo "${ECHO_T}$CPP" >&6 +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.$ac_ext + + # OK, works on sane cases. Now check whether non-existent headers + # can be detected and how. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + # Broken: success on invalid input. +continue +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.err conftest.$ac_ext +if $ac_preproc_ok; then + : +else + { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&5 +echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +echo "$as_me:$LINENO: checking for egrep" >&5 +echo $ECHO_N "checking for egrep... $ECHO_C" >&6 +if test "${ac_cv_prog_egrep+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if echo a | (grep -E '(a|b)') >/dev/null 2>&1 + then ac_cv_prog_egrep='grep -E' + else ac_cv_prog_egrep='egrep' + fi +fi +echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 +echo "${ECHO_T}$ac_cv_prog_egrep" >&6 + EGREP=$ac_cv_prog_egrep + + +echo "$as_me:$LINENO: checking for ANSI C header files" >&5 +echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 +if test "${ac_cv_header_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_header_stdc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_header_stdc=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then + : +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then + : +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + exit(2); + exit (0); +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_cv_header_stdc=no +fi +rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi +fi +fi +echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 +echo "${ECHO_T}$ac_cv_header_stdc" >&6 +if test $ac_cv_header_stdc = yes; then + +cat >>confdefs.h <<\_ACEOF +#define STDC_HEADERS 1 +_ACEOF + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. + + + + + + + + + +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default + +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_Header=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "$as_ac_Header=no" +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + +for ac_header in curses.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( + cat <<\_ASBOX +## ------------------- ## +## Report this to stsp ## +## ------------------- ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +else + { { echo "$as_me:$LINENO: error: curses headers are missing on your system." >&5 +echo "$as_me: error: curses headers are missing on your system." >&2;} + { (exit 1); exit 1; }; } +fi + +done + + + + +for ac_header in fcntl.h sys/ioctl.h linux/kd.h +do +as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 +else + # Is the header compilable? +echo "$as_me:$LINENO: checking $ac_header usability" >&5 +echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_includes_default +#include <$ac_header> +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_header_compiler=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_header_compiler=no +fi +rm -f conftest.err conftest.$ac_objext conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 +echo "${ECHO_T}$ac_header_compiler" >&6 + +# Is the header present? +echo "$as_me:$LINENO: checking $ac_header presence" >&5 +echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 +cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include <$ac_header> +_ACEOF +if { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&5 + (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } >/dev/null; then + if test -s conftest.err; then + ac_cpp_err=$ac_c_preproc_warn_flag + ac_cpp_err=$ac_cpp_err$ac_c_werror_flag + else + ac_cpp_err= + fi +else + ac_cpp_err=yes +fi +if test -z "$ac_cpp_err"; then + ac_header_preproc=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_header_preproc=no +fi +rm -f conftest.err conftest.$ac_ext +echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 +echo "${ECHO_T}$ac_header_preproc" >&6 + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in + yes:no: ) + { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 +echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} + ac_header_preproc=yes + ;; + no:yes:* ) + { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 +echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 +echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 +echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5 +echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 +echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} + { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 +echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} + ( + cat <<\_ASBOX +## ------------------- ## +## Report this to stsp ## +## ------------------- ## +_ASBOX + ) | + sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac +echo "$as_me:$LINENO: checking for $ac_header" >&5 +echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 +if eval "test \"\${$as_ac_Header+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + eval "$as_ac_Header=\$ac_header_preproc" +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 + +fi +if test `eval echo '${'$as_ac_Header'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + +# Checks for typedefs, structures, and compiler characteristics. + +# Checks for library functions. +if test $ac_cv_c_compiler_gnu = yes; then + echo "$as_me:$LINENO: checking whether $CC needs -traditional" >&5 +echo $ECHO_N "checking whether $CC needs -traditional... $ECHO_C" >&6 +if test "${ac_cv_prog_gcc_traditional+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_pattern="Autoconf.*'x'" + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +Autoconf TIOCGETP +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "$ac_pattern" >/dev/null 2>&1; then + ac_cv_prog_gcc_traditional=yes +else + ac_cv_prog_gcc_traditional=no +fi +rm -f conftest* + + + if test $ac_cv_prog_gcc_traditional = no; then + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +Autoconf TCGETA +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "$ac_pattern" >/dev/null 2>&1; then + ac_cv_prog_gcc_traditional=yes +fi +rm -f conftest* + + fi +fi +echo "$as_me:$LINENO: result: $ac_cv_prog_gcc_traditional" >&5 +echo "${ECHO_T}$ac_cv_prog_gcc_traditional" >&6 + if test $ac_cv_prog_gcc_traditional = yes; then + CC="$CC -traditional" + fi +fi + + +for ac_func in vprintf +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +if eval "test \"\${$as_ac_var+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +char (*f) () = $ac_func; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != $ac_func; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "$as_ac_var=no" +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +echo "$as_me:$LINENO: checking for _doprnt" >&5 +echo $ECHO_N "checking for _doprnt... $ECHO_C" >&6 +if test "${ac_cv_func__doprnt+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define _doprnt to an innocuous variant, in case declares _doprnt. + For example, HP-UX 11i declares gettimeofday. */ +#define _doprnt innocuous__doprnt + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char _doprnt (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef _doprnt + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char _doprnt (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub__doprnt) || defined (__stub____doprnt) +choke me +#else +char (*f) () = _doprnt; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != _doprnt; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_func__doprnt=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_func__doprnt=no +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_func__doprnt" >&5 +echo "${ECHO_T}$ac_cv_func__doprnt" >&6 +if test $ac_cv_func__doprnt = yes; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_DOPRNT 1 +_ACEOF + +fi + +fi +done + + + + + + + + + + +for ac_func in pow sqrt floor strcasecmp strncasecmp strchr strstr atexit +do +as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` +echo "$as_me:$LINENO: checking for $ac_func" >&5 +echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6 +if eval "test \"\${$as_ac_var+set}\" = set"; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +/* Define $ac_func to an innocuous variant, in case declares $ac_func. + For example, HP-UX 11i declares gettimeofday. */ +#define $ac_func innocuous_$ac_func + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $ac_func (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $ac_func + +/* Override any gcc2 internal prototype to avoid an error. */ +#ifdef __cplusplus +extern "C" +{ +#endif +/* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ +char $ac_func (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined (__stub_$ac_func) || defined (__stub___$ac_func) +choke me +#else +char (*f) () = $ac_func; +#endif +#ifdef __cplusplus +} +#endif + +int +main () +{ +return f != $ac_func; + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>conftest.er1 + ac_status=$? + grep -v '^ *+' conftest.er1 >conftest.err + rm -f conftest.er1 + cat conftest.err >&5 + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -z "$ac_c_werror_flag" + || test ! -s conftest.err' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; } && + { ac_try='test -s conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + eval "$as_ac_var=yes" +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +eval "$as_ac_var=no" +fi +rm -f conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 +echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 +if test `eval echo '${'$as_ac_var'}'` = yes; then + cat >>confdefs.h <<_ACEOF +#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +else + { { echo "$as_me:$LINENO: error: some functions are missing on your system." >&5 +echo "$as_me: error: some functions are missing on your system." >&2;} + { (exit 1); exit 1; }; } +fi +done + + + ac_config_files="$ac_config_files Makefile src/Makefile po/Makefile.in doc/Makefile" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +{ + (set) 2>&1 | + case `(ac_space=' '; set | grep ac_space) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n \ + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + ;; + esac; +} | + sed ' + t clear + : clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + : end' >>confcache +if diff $cache_file confcache >/dev/null 2>&1; then :; else + if test -w $cache_file; then + test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" + cat confcache >$cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/; +s/:*\${srcdir}:*/:/; +s/:*@srcdir@:*/:/; +s/^\([^=]*=[ ]*\):*/\1/; +s/:*$//; +s/^[^=]*=[ ]*$//; +}' +fi + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_i=`echo "$ac_i" | + sed 's/\$U\././;s/\.o$//;s/\.obj$//'` + # 2. Add them. + ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" + ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&5 +echo "$as_me: error: conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." >&2;} + { (exit 1); exit 1; }; } +fi + +: ${CONFIG_STATUS=./config.status} +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 +echo "$as_me: creating $CONFIG_STATUS" >&6;} +cat >$CONFIG_STATUS <<_ACEOF +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false +SHELL=\${CONFIG_SHELL-$SHELL} +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then + set -o posix +fi +DUALCASE=1; export DUALCASE # for MKS sh + +# Support unset when possible. +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# Work around bugs in pre-3.0 UWIN ksh. +$as_unset ENV MAIL MAILPATH +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)$' \| \ + . : '\(.\)' 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } + /^X\/\(\/\/\)$/{ s//\1/; q; } + /^X\/\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + + +# PATH needs CR, and LINENO needs CR and PATH. +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" || { + # Find who we are. Look in the path if we contain no path at all + # relative or not. + case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done + + ;; + esac + # We did not find ourselves, most probably we were run as `sh COMMAND' + # in which case we are not to be found in the path. + if test "x$as_myself" = x; then + as_myself=$0 + fi + if test ! -f "$as_myself"; then + { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 +echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} + { (exit 1); exit 1; }; } + fi + case $CONFIG_SHELL in + '') + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for as_base in sh bash ksh sh5; do + case $as_dir in + /*) + if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } + $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } + CONFIG_SHELL=$as_dir/$as_base + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" ${1+"$@"} + fi;; + esac + done +done +;; + esac + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line before each line; the second 'sed' does the real + # work. The second script uses 'N' to pair each line-number line + # with the numbered line, and appends trailing '-' during + # substitution so that $LINENO is not a special case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) + sed '=' <$as_myself | + sed ' + N + s,$,-, + : loop + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + t loop + s,-$,, + s,^['$as_cr_digits']*\n,, + ' >$as_me.lineno && + chmod +x $as_me.lineno || + { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 +echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensible to this). + . ./$as_me.lineno + # Exit status is that of the last command. + exit +} + + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac + +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + # We could just check for DJGPP; but this test a) works b) is more generic + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). + if test -f conf$$.exe; then + # Don't use ln at all; we don't have any links + as_ln_s='cp -p' + else + as_ln_s='ln -s' + fi +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.file + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_executable_p="test -f" + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +# IFS +# We need space, tab and new line, in precisely that order. +as_nl=' +' +IFS=" $as_nl" + +# CDPATH. +$as_unset CDPATH + +exec 6>&1 + +# Open the log real soon, to keep \$[0] and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. Logging --version etc. is OK. +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX +} >&5 +cat >&5 <<_CSEOF + +This file was extended by sst $as_me 2.0, which was +generated by GNU Autoconf 2.59. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +_CSEOF +echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 +echo >&5 +_ACEOF + +# Files that config.status was made for. +if test -n "$ac_config_files"; then + echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_headers"; then + echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_links"; then + echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_commands"; then + echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS +fi + +cat >>$CONFIG_STATUS <<\_ACEOF + +ac_cs_usage="\ +\`$as_me' instantiates files from templates according to the +current configuration. + +Usage: $0 [OPTIONS] [FILE]... + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to ." +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF +ac_cs_version="\\ +sst config.status 2.0 +configured by $0, generated by GNU Autoconf 2.59, + with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" + +Copyright (C) 2003 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." +srcdir=$srcdir +INSTALL="$INSTALL" +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +# If no file are specified by the user, then we need to provide default +# value. By we need to know if files were specified by the user. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=*) + ac_option=`expr "x$1" : 'x\([^=]*\)='` + ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` + ac_shift=: + ;; + -*) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + *) # This is not an option, so the user has probably given explicit + # arguments. + ac_option=$1 + ac_need_defaults=false;; + esac + + case $ac_option in + # Handling of the options. +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --vers* | -V ) + echo "$ac_cs_version"; exit 0 ;; + --he | --h) + # Conflict between --help and --header + { { echo "$as_me:$LINENO: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&5 +echo "$as_me: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&2;} + { (exit 1); exit 1; }; };; + --help | --hel | -h ) + echo "$ac_cs_usage"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + CONFIG_FILES="$CONFIG_FILES $ac_optarg" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" + ac_need_defaults=false;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&5 +echo "$as_me: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&2;} + { (exit 1); exit 1; }; } ;; + + *) ac_config_targets="$ac_config_targets $1" ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF +if \$ac_cs_recheck; then + echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 + exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion +fi + +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF +# +# INIT-COMMANDS section. +# + +# Capture the value of obsolete ALL_LINGUAS because we need it to compute + # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it + # from automake. + eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' + # Capture the value of LINGUAS because we need it to compute CATALOGS. + LINGUAS="${LINGUAS-%UNSET%}" + +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + +_ACEOF + + + +cat >>$CONFIG_STATUS <<\_ACEOF +for ac_config_target in $ac_config_targets +do + case "$ac_config_target" in + # Handling of arguments. + "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "src/Makefile" ) CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; + "po/Makefile.in" ) CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; + "doc/Makefile" ) CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; + "default-1" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; + "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "src/config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS src/config.h" ;; + *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 +echo "$as_me: error: invalid argument: $ac_config_target" >&2;} + { (exit 1); exit 1; }; };; + esac +done + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason to put it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Create a temporary directory, and hook for its removal unless debugging. +$debug || +{ + trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 + trap '{ (exit 1); exit 1; }' 1 2 13 15 +} + +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./confstat$$-$RANDOM + (umask 077 && mkdir $tmp) +} || +{ + echo "$me: cannot create a temporary directory in ." >&2 + { (exit 1); exit 1; } +} + +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF + +# +# CONFIG_FILES section. +# + +# No need to generate the scripts if there are no CONFIG_FILES. +# This happens for instance when ./config.status config.h +if test -n "\$CONFIG_FILES"; then + # Protect against being on the right side of a sed subst in config.status. + sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; + s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF +s,@SHELL@,$SHELL,;t t +s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t +s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t +s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t +s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t +s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t +s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t +s,@exec_prefix@,$exec_prefix,;t t +s,@prefix@,$prefix,;t t +s,@program_transform_name@,$program_transform_name,;t t +s,@bindir@,$bindir,;t t +s,@sbindir@,$sbindir,;t t +s,@libexecdir@,$libexecdir,;t t +s,@datadir@,$datadir,;t t +s,@sysconfdir@,$sysconfdir,;t t +s,@sharedstatedir@,$sharedstatedir,;t t +s,@localstatedir@,$localstatedir,;t t +s,@libdir@,$libdir,;t t +s,@includedir@,$includedir,;t t +s,@oldincludedir@,$oldincludedir,;t t +s,@infodir@,$infodir,;t t +s,@mandir@,$mandir,;t t +s,@build_alias@,$build_alias,;t t +s,@host_alias@,$host_alias,;t t +s,@target_alias@,$target_alias,;t t +s,@DEFS@,$DEFS,;t t +s,@ECHO_C@,$ECHO_C,;t t +s,@ECHO_N@,$ECHO_N,;t t +s,@ECHO_T@,$ECHO_T,;t t +s,@LIBS@,$LIBS,;t t +s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t +s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t +s,@INSTALL_DATA@,$INSTALL_DATA,;t t +s,@CYGPATH_W@,$CYGPATH_W,;t t +s,@PACKAGE@,$PACKAGE,;t t +s,@VERSION@,$VERSION,;t t +s,@ACLOCAL@,$ACLOCAL,;t t +s,@AUTOCONF@,$AUTOCONF,;t t +s,@AUTOMAKE@,$AUTOMAKE,;t t +s,@AUTOHEADER@,$AUTOHEADER,;t t +s,@MAKEINFO@,$MAKEINFO,;t t +s,@install_sh@,$install_sh,;t t +s,@STRIP@,$STRIP,;t t +s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t +s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t +s,@mkdir_p@,$mkdir_p,;t t +s,@AWK@,$AWK,;t t +s,@SET_MAKE@,$SET_MAKE,;t t +s,@am__leading_dot@,$am__leading_dot,;t t +s,@AMTAR@,$AMTAR,;t t +s,@am__tar@,$am__tar,;t t +s,@am__untar@,$am__untar,;t t +s,@MKINSTALLDIRS@,$MKINSTALLDIRS,;t t +s,@USE_NLS@,$USE_NLS,;t t +s,@MSGFMT@,$MSGFMT,;t t +s,@GMSGFMT@,$GMSGFMT,;t t +s,@XGETTEXT@,$XGETTEXT,;t t +s,@MSGMERGE@,$MSGMERGE,;t t +s,@CC@,$CC,;t t +s,@CFLAGS@,$CFLAGS,;t t +s,@LDFLAGS@,$LDFLAGS,;t t +s,@CPPFLAGS@,$CPPFLAGS,;t t +s,@ac_ct_CC@,$ac_ct_CC,;t t +s,@EXEEXT@,$EXEEXT,;t t +s,@OBJEXT@,$OBJEXT,;t t +s,@DEPDIR@,$DEPDIR,;t t +s,@am__include@,$am__include,;t t +s,@am__quote@,$am__quote,;t t +s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t +s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t +s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t +s,@CCDEPMODE@,$CCDEPMODE,;t t +s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t +s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t +s,@build@,$build,;t t +s,@build_cpu@,$build_cpu,;t t +s,@build_vendor@,$build_vendor,;t t +s,@build_os@,$build_os,;t t +s,@host@,$host,;t t +s,@host_cpu@,$host_cpu,;t t +s,@host_vendor@,$host_vendor,;t t +s,@host_os@,$host_os,;t t +s,@INTL_MACOSX_LIBS@,$INTL_MACOSX_LIBS,;t t +s,@LIBICONV@,$LIBICONV,;t t +s,@LTLIBICONV@,$LTLIBICONV,;t t +s,@INTLLIBS@,$INTLLIBS,;t t +s,@LIBINTL@,$LIBINTL,;t t +s,@LTLIBINTL@,$LTLIBINTL,;t t +s,@POSUB@,$POSUB,;t t +s,@LN_S@,$LN_S,;t t +s,@have_xmlto@,$have_xmlto,;t t +s,@ac_ct_have_xmlto@,$ac_ct_have_xmlto,;t t +s,@have_python@,$have_python,;t t +s,@ac_ct_have_python@,$ac_ct_have_python,;t t +s,@CPP@,$CPP,;t t +s,@EGREP@,$EGREP,;t t +s,@LIBOBJS@,$LIBOBJS,;t t +s,@LTLIBOBJS@,$LTLIBOBJS,;t t +CEOF + +_ACEOF + + cat >>$CONFIG_STATUS <<\_ACEOF + # Split the substitutions into bite-sized pieces for seds with + # small command number limits, like on Digital OSF/1 and HP-UX. + ac_max_sed_lines=48 + ac_sed_frag=1 # Number of current file. + ac_beg=1 # First line for current file. + ac_end=$ac_max_sed_lines # Line after last line for current file. + ac_more_lines=: + ac_sed_cmds= + while $ac_more_lines; do + if test $ac_beg -gt 1; then + sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + else + sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + fi + if test ! -s $tmp/subs.frag; then + ac_more_lines=false + else + # The purpose of the label and of the branching condition is to + # speed up the sed processing (if there are no `@' at all, there + # is no need to browse any of the substitutions). + # These are the two extra sed commands mentioned above. + (echo ':t + /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed + if test -z "$ac_sed_cmds"; then + ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" + else + ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" + fi + ac_sed_frag=`expr $ac_sed_frag + 1` + ac_beg=$ac_end + ac_end=`expr $ac_end + $ac_max_sed_lines` + fi + done + if test -z "$ac_sed_cmds"; then + ac_sed_cmds=cat + fi +fi # test -n "$CONFIG_FILES" + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case $ac_file in + - | *:- | *:-:* ) # input from stdin + cat >$tmp/stdin + ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + * ) ac_file_in=$ac_file.in ;; + esac + + # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. + ac_dir=`(dirname "$ac_file") 2>/dev/null || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p "$ac_dir" + else + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } + + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac + +# Do not use `cd foo && pwd` to compute absolute paths, because +# the directories may not exist. +case `pwd` in +.) ac_abs_builddir="$ac_dir";; +*) + case "$ac_dir" in + .) ac_abs_builddir=`pwd`;; + [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; + *) ac_abs_builddir=`pwd`/"$ac_dir";; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_builddir=${ac_top_builddir}.;; +*) + case ${ac_top_builddir}. in + .) ac_abs_top_builddir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; + *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_srcdir=$ac_srcdir;; +*) + case $ac_srcdir in + .) ac_abs_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; + *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_srcdir=$ac_top_srcdir;; +*) + case $ac_top_srcdir in + .) ac_abs_top_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; + *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; + esac;; +esac + + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_builddir$INSTALL ;; + esac + + if test x"$ac_file" != x-; then + { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + rm -f "$ac_file" + fi + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + if test x"$ac_file" = x-; then + configure_input= + else + configure_input="$ac_file. " + fi + configure_input=$configure_input"Generated from `echo $ac_file_in | + sed 's,.*/,,'` by configure." + + # First look for the input files in the build tree, otherwise in the + # src tree. + ac_file_inputs=`IFS=: + for f in $ac_file_in; do + case $f in + -) echo $tmp/stdin ;; + [\\/$]*) + # Absolute (can't be DOS-style, as IFS=:) + test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + echo "$f";; + *) # Relative + if test -f "$f"; then + # Build tree + echo "$f" + elif test -f "$srcdir/$f"; then + # Source tree + echo "$srcdir/$f" + else + # /dev/null tree + { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + fi;; + esac + done` || { (exit 1); exit 1; } +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF + sed "$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s,@configure_input@,$configure_input,;t t +s,@srcdir@,$ac_srcdir,;t t +s,@abs_srcdir@,$ac_abs_srcdir,;t t +s,@top_srcdir@,$ac_top_srcdir,;t t +s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t +s,@builddir@,$ac_builddir,;t t +s,@abs_builddir@,$ac_abs_builddir,;t t +s,@top_builddir@,$ac_top_builddir,;t t +s,@abs_top_builddir@,$ac_abs_top_builddir,;t t +s,@INSTALL@,$ac_INSTALL,;t t +" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out + rm -f $tmp/stdin + if test x"$ac_file" != x-; then + mv $tmp/out $ac_file + else + cat $tmp/out + rm -f $tmp/out + fi + +done +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF + +# +# CONFIG_HEADER section. +# + +# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where +# NAME is the cpp macro being defined and VALUE is the value it is being given. +# +# ac_d sets the value in "#define NAME VALUE" lines. +ac_dA='s,^\([ ]*\)#\([ ]*define[ ][ ]*\)' +ac_dB='[ ].*$,\1#\2' +ac_dC=' ' +ac_dD=',;t' +# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". +ac_uA='s,^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' +ac_uB='$,\1#\2define\3' +ac_uC=' ' +ac_uD=',;t' + +for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case $ac_file in + - | *:- | *:-:* ) # input from stdin + cat >$tmp/stdin + ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + * ) ac_file_in=$ac_file.in ;; + esac + + test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + + # First look for the input files in the build tree, otherwise in the + # src tree. + ac_file_inputs=`IFS=: + for f in $ac_file_in; do + case $f in + -) echo $tmp/stdin ;; + [\\/$]*) + # Absolute (can't be DOS-style, as IFS=:) + test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + # Do quote $f, to prevent DOS paths from being IFS'd. + echo "$f";; + *) # Relative + if test -f "$f"; then + # Build tree + echo "$f" + elif test -f "$srcdir/$f"; then + # Source tree + echo "$srcdir/$f" + else + # /dev/null tree + { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + fi;; + esac + done` || { (exit 1); exit 1; } + # Remove the trailing spaces. + sed 's/[ ]*$//' $ac_file_inputs >$tmp/in + +_ACEOF + +# Transform confdefs.h into two sed scripts, `conftest.defines' and +# `conftest.undefs', that substitutes the proper values into +# config.h.in to produce config.h. The first handles `#define' +# templates, and the second `#undef' templates. +# And first: Protect against being on the right side of a sed subst in +# config.status. Protect against being in an unquoted here document +# in config.status. +rm -f conftest.defines conftest.undefs +# Using a here document instead of a string reduces the quoting nightmare. +# Putting comments in sed scripts is not portable. +# +# `end' is used to avoid that the second main sed command (meant for +# 0-ary CPP macros) applies to n-ary macro definitions. +# See the Autoconf documentation for `clear'. +cat >confdef2sed.sed <<\_ACEOF +s/[\\&,]/\\&/g +s,[\\$`],\\&,g +t clear +: clear +s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*\)\(([^)]*)\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp +t end +s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp +: end +_ACEOF +# If some macros were called several times there might be several times +# the same #defines, which is useless. Nevertheless, we may not want to +# sort them, since we want the *last* AC-DEFINE to be honored. +uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines +sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs +rm -f confdef2sed.sed + +# This sed command replaces #undef with comments. This is necessary, for +# example, in the case of _POSIX_SOURCE, which is predefined and required +# on some systems where configure will not decide to define it. +cat >>conftest.undefs <<\_ACEOF +s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, +_ACEOF + +# Break up conftest.defines because some shells have a limit on the size +# of here documents, and old seds have small limits too (100 cmds). +echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS +echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS +echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS +echo ' :' >>$CONFIG_STATUS +rm -f conftest.tail +while grep . conftest.defines >/dev/null +do + # Write a limited-size here document to $tmp/defines.sed. + echo ' cat >$tmp/defines.sed <>$CONFIG_STATUS + # Speed up: don't consider the non `#define' lines. + echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS + # Work around the forget-to-reset-the-flag bug. + echo 't clr' >>$CONFIG_STATUS + echo ': clr' >>$CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS + echo 'CEOF + sed -f $tmp/defines.sed $tmp/in >$tmp/out + rm -f $tmp/in + mv $tmp/out $tmp/in +' >>$CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail + rm -f conftest.defines + mv conftest.tail conftest.defines +done +rm -f conftest.defines +echo ' fi # grep' >>$CONFIG_STATUS +echo >>$CONFIG_STATUS + +# Break up conftest.undefs because some shells have a limit on the size +# of here documents, and old seds have small limits too (100 cmds). +echo ' # Handle all the #undef templates' >>$CONFIG_STATUS +rm -f conftest.tail +while grep . conftest.undefs >/dev/null +do + # Write a limited-size here document to $tmp/undefs.sed. + echo ' cat >$tmp/undefs.sed <>$CONFIG_STATUS + # Speed up: don't consider the non `#undef' + echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS + # Work around the forget-to-reset-the-flag bug. + echo 't clr' >>$CONFIG_STATUS + echo ': clr' >>$CONFIG_STATUS + sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS + echo 'CEOF + sed -f $tmp/undefs.sed $tmp/in >$tmp/out + rm -f $tmp/in + mv $tmp/out $tmp/in +' >>$CONFIG_STATUS + sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail + rm -f conftest.undefs + mv conftest.tail conftest.undefs +done +rm -f conftest.undefs + +cat >>$CONFIG_STATUS <<\_ACEOF + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + if test x"$ac_file" = x-; then + echo "/* Generated by configure. */" >$tmp/config.h + else + echo "/* $ac_file. Generated by configure. */" >$tmp/config.h + fi + cat $tmp/in >>$tmp/config.h + rm -f $tmp/in + if test x"$ac_file" != x-; then + if diff $ac_file $tmp/config.h >/dev/null 2>&1; then + { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 +echo "$as_me: $ac_file is unchanged" >&6;} + else + ac_dir=`(dirname "$ac_file") 2>/dev/null || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p "$ac_dir" + else + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } + + rm -f $ac_file + mv $tmp/config.h $ac_file + fi + else + cat $tmp/config.h + rm -f $tmp/config.h + fi +# Compute $ac_file's index in $config_headers. +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $ac_file | $ac_file:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null || +$as_expr X$ac_file : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X$ac_file : 'X\(//\)[^/]' \| \ + X$ac_file : 'X\(//\)$' \| \ + X$ac_file : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X$ac_file | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'`/stamp-h$_am_stamp_count +done +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF + +# +# CONFIG_COMMANDS section. +# +for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue + ac_dest=`echo "$ac_file" | sed 's,:.*,,'` + ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_dir=`(dirname "$ac_dest") 2>/dev/null || +$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_dest" : 'X\(//\)[^/]' \| \ + X"$ac_dest" : 'X\(//\)$' \| \ + X"$ac_dest" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_dest" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p "$ac_dir" + else + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } + + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac + +# Do not use `cd foo && pwd` to compute absolute paths, because +# the directories may not exist. +case `pwd` in +.) ac_abs_builddir="$ac_dir";; +*) + case "$ac_dir" in + .) ac_abs_builddir=`pwd`;; + [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";; + *) ac_abs_builddir=`pwd`/"$ac_dir";; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_builddir=${ac_top_builddir}.;; +*) + case ${ac_top_builddir}. in + .) ac_abs_top_builddir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; + *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_srcdir=$ac_srcdir;; +*) + case $ac_srcdir in + .) ac_abs_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;; + *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; + esac;; +esac +case $ac_abs_builddir in +.) ac_abs_top_srcdir=$ac_top_srcdir;; +*) + case $ac_top_srcdir in + .) ac_abs_top_srcdir=$ac_abs_builddir;; + [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; + *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; + esac;; +esac + + + { echo "$as_me:$LINENO: executing $ac_dest commands" >&5 +echo "$as_me: executing $ac_dest commands" >&6;} + case $ac_dest in + default-1 ) + for ac_file in $CONFIG_FILES; do + # Support "outfile[:infile[:infile...]]" + case "$ac_file" in + *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + esac + # PO directories have a Makefile.in generated from Makefile.in.in. + case "$ac_file" in */Makefile.in) + # Adjust a relative srcdir. + ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` + ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" + ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` + # In autoconf-2.13 it is called $ac_given_srcdir. + # In autoconf-2.50 it is called $srcdir. + test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" + case "$ac_given_srcdir" in + .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; + /*) top_srcdir="$ac_given_srcdir" ;; + *) top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + # Treat a directory as a PO directory if and only if it has a + # POTFILES.in file. This allows packages to have multiple PO + # directories under different names or in different locations. + if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then + rm -f "$ac_dir/POTFILES" + test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" + cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" + POMAKEFILEDEPS="POTFILES.in" + # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend + # on $ac_dir but don't depend on user-specified configuration + # parameters. + if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then + # The LINGUAS file contains the set of available languages. + if test -n "$OBSOLETE_ALL_LINGUAS"; then + test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" + fi + ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` + # Hide the ALL_LINGUAS assigment from automake. + eval 'ALL_LINGUAS''=$ALL_LINGUAS_' + POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" + else + # The set of available languages was given in configure.in. + eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' + fi + # Compute POFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) + # Compute UPDATEPOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) + # Compute DUMMYPOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) + # Compute GMOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) + case "$ac_given_srcdir" in + .) srcdirpre= ;; + *) srcdirpre='$(srcdir)/' ;; + esac + POFILES= + UPDATEPOFILES= + DUMMYPOFILES= + GMOFILES= + for lang in $ALL_LINGUAS; do + POFILES="$POFILES $srcdirpre$lang.po" + UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" + DUMMYPOFILES="$DUMMYPOFILES $lang.nop" + GMOFILES="$GMOFILES $srcdirpre$lang.gmo" + done + # CATALOGS depends on both $ac_dir and the user's LINGUAS + # environment variable. + INST_LINGUAS= + if test -n "$ALL_LINGUAS"; then + for presentlang in $ALL_LINGUAS; do + useit=no + if test "%UNSET%" != "$LINGUAS"; then + desiredlanguages="$LINGUAS" + else + desiredlanguages="$ALL_LINGUAS" + fi + for desiredlang in $desiredlanguages; do + # Use the presentlang catalog if desiredlang is + # a. equal to presentlang, or + # b. a variant of presentlang (because in this case, + # presentlang can be used as a fallback for messages + # which are not translated in the desiredlang catalog). + case "$desiredlang" in + "$presentlang"*) useit=yes;; + esac + done + if test $useit = yes; then + INST_LINGUAS="$INST_LINGUAS $presentlang" + fi + done + fi + CATALOGS= + if test -n "$INST_LINGUAS"; then + for lang in $INST_LINGUAS; do + CATALOGS="$CATALOGS $lang.gmo" + done + fi + test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" + sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" + for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do + if test -f "$f"; then + case "$f" in + *.orig | *.bak | *~) ;; + *) cat "$f" >> "$ac_dir/Makefile" ;; + esac + fi + done + fi + ;; + esac + done ;; + depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # So let's grep whole file. + if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then + dirpart=`(dirname "$mf") 2>/dev/null || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`(dirname "$file") 2>/dev/null || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p $dirpart/$fdir + else + as_dir=$dirpart/$fdir + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5 +echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;} + { (exit 1); exit 1; }; }; } + + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done +done + ;; + esac +done +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF + +{ (exit 0); exit 0; } +_ACEOF +chmod +x $CONFIG_STATUS +ac_clean_files=$ac_clean_files_save + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || { (exit 1); exit 1; } +fi + diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..5ac7654 --- /dev/null +++ b/configure.ac @@ -0,0 +1,52 @@ +# -*- Autoconf -*- +# Process this file with autoconf to produce a configure script. + +AC_PREREQ(2.57) +AC_INIT(sst, 2.0, stsp) +AM_INIT_AUTOMAKE([]) +AM_GNU_GETTEXT([external]) +AM_GNU_GETTEXT_VERSION(0.14.5) +AM_CONFIG_HEADER([src/config.h]) + +# Checks for programs. +AC_PROG_CC +AC_PROG_INSTALL +AC_PROG_LN_S + +AC_CHECK_TOOL(have_xmlto, xmlto, "no") +if test "$have_xmlto" = "no"; +then + AC_MSG_ERROR([xmlto is not installed]) +fi +AC_CHECK_TOOL(have_python, python, "no") +if test "$have_python" = "no"; +then + AC_MSG_ERROR([python is not installed]) +fi + +# Checks for libraries. +AC_CHECK_LIB(m, floor, [], + AC_MSG_ERROR([math library is missing on your system.])) +AC_CHECK_LIB(ncurses, newwin, [], + AC_MSG_ERROR([ncurses library is missing on your system.])) + +# Checks for header files. +AC_HEADER_STDC +AC_CHECK_HEADERS([curses.h], + [], AC_MSG_ERROR([curses headers are missing on your system.])) +AC_CHECK_HEADERS([fcntl.h sys/ioctl.h linux/kd.h]) +# Checks for typedefs, structures, and compiler characteristics. + +# Checks for library functions. +AC_PROG_GCC_TRADITIONAL +AC_FUNC_VPRINTF +AC_CHECK_FUNCS([pow sqrt floor strcasecmp strncasecmp strchr strstr atexit], [], + AC_MSG_ERROR([some functions are missing on your system.])) + +AC_CONFIG_FILES([ + Makefile + src/Makefile + po/Makefile.in + doc/Makefile +]) +AC_OUTPUT diff --git a/depcomp b/depcomp new file mode 100755 index 0000000..04701da --- /dev/null +++ b/depcomp @@ -0,0 +1,530 @@ +#! /bin/sh +# depcomp - compile a program generating dependencies as side-effects + +scriptversion=2005-07-09.11 + +# Copyright (C) 1999, 2000, 2003, 2004, 2005 Free Software Foundation, Inc. + +# 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, 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., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# Originally written by Alexandre Oliva . + +case $1 in + '') + echo "$0: No command. Try \`$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: depcomp [--help] [--version] PROGRAM [ARGS] + +Run PROGRAMS ARGS to compile a file, generating dependencies +as side-effects. + +Environment variables: + depmode Dependency tracking mode. + source Source file read by `PROGRAMS ARGS'. + object Object file output by `PROGRAMS ARGS'. + DEPDIR directory where to store dependencies. + depfile Dependency file to output. + tmpdepfile Temporary file to use when outputing dependencies. + libtool Whether libtool is used (yes/no). + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "depcomp $scriptversion" + exit $? + ;; +esac + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi + +# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. +depfile=${depfile-`echo "$object" | + sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. + "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz +## The second -e expression handles DOS-style file names with drive letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the `deleted header file' problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. + tr ' ' ' +' < "$tmpdepfile" | +## Some versions of gcc put a space before the `:'. On the theory +## that the space means something, we add a space to the output as +## well. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like `#:fec' to the end of the + # dependency line. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ + tr ' +' ' ' >> $depfile + echo >> $depfile + + # The second pass generates a dummy entry for each header file. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> $depfile + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. In older versions, this file always lives in the + # current directory. Also, the AIX compiler puts `$object:' at the + # start of each line; $object doesn't have directory information. + # Version 6 uses the directory in both cases. + stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'` + tmpdepfile="$stripped.u" + if test "$libtool" = yes; then + "$@" -Wc,-M + else + "$@" -M + fi + stat=$? + + if test -f "$tmpdepfile"; then : + else + stripped=`echo "$stripped" | sed 's,^.*/,,'` + tmpdepfile="$stripped.u" + fi + + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + + if test -f "$tmpdepfile"; then + outname="$stripped.o" + # Each line is of the form `foo.o: dependent.h'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile" + sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +icc) + # Intel's C compiler understands `-MD -MF file'. However on + # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c + # ICC 7.0 will fill foo.d with something like + # foo.o: sub/foo.c + # foo.o: sub/foo.h + # which is wrong. We want: + # sub/foo.o: sub/foo.c + # sub/foo.o: sub/foo.h + # sub/foo.c: + # sub/foo.h: + # ICC 7.1 will output + # foo.o: sub/foo.c sub/foo.h + # and will wrap long lines using \ : + # foo.o: sub/foo.c ... \ + # sub/foo.h ... \ + # ... + + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h', + # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | + sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in `foo.d' instead, so we check for that too. + # Subdirectories are respected. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + + if test "$libtool" = yes; then + # With Tru64 cc, shared objects can also be used to make a + # static library. This mecanism is used in libtool 1.4 series to + # handle both shared and static libraries in a single compilation. + # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. + # + # With libtool 1.5 this exception was removed, and libtool now + # generates 2 separate objects for the 2 libraries. These two + # compilations output dependencies in in $dir.libs/$base.o.d and + # in $dir$base.o.d. We have to check for both files, because + # one of the two compilations can be disabled. We should prefer + # $dir$base.o.d over $dir.libs/$base.o.d because the latter is + # automatically cleaned when .libs/ is deleted, while ignoring + # the former would cause a distcleancheck panic. + tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 + tmpdepfile2=$dir$base.o.d # libtool 1.5 + tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 + tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 + "$@" -Wc,-MD + else + tmpdepfile1=$dir$base.o.d + tmpdepfile2=$dir$base.d + tmpdepfile3=$dir$base.d + tmpdepfile4=$dir$base.d + "$@" -MD + fi + + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # Require at least two characters before searching for `:' + # in the target name. This is to cope with DOS-style filenames: + # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. + "$@" $dashmflag | + sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + tr ' ' ' +' < "$tmpdepfile" | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no + for arg in "$@"; do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix="`echo $object | sed 's/^.*\././'`" + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + sed '1,2d' "$tmpdepfile" | tr ' ' ' +' | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test $1 != '--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E | + sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | + sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o, + # because we must use -o when running libtool. + "$@" || exit $? + IFS=" " + for arg + do + case "$arg" in + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" + echo " " >> "$depfile" + . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/doc/Makefile.am b/doc/Makefile.am new file mode 100644 index 0000000..ee2477f --- /dev/null +++ b/doc/Makefile.am @@ -0,0 +1,15 @@ +man_MANS = sst.6 +pkgdata_DATA = sst-doc.txt sst.doc +CLEANFILES = $(pkgdata_DATA) $(man_MANS) +EXTRA_DIST = makehelp.py sst-doc.xml sst-layer.xsl sst.xml + +sst.6: sst.xml + xmlto man sst.xml + +sst-doc.txt: sst-doc.xml + xmlto -m sst-layer.xsl txt sst-doc.xml +sst.doc: sst-doc.txt + makehelp.py >sst.doc + +sst-doc.html: sst-doc.xml + xmlto xhtml-nochunks sst-doc.xml diff --git a/doc/Makefile.in b/doc/Makefile.in new file mode 100644 index 0000000..221b947 --- /dev/null +++ b/doc/Makefile.in @@ -0,0 +1,400 @@ +# Makefile.in generated by automake 1.9.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = .. +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = doc +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/src/config.h +CONFIG_CLEAN_FILES = +SOURCES = +DIST_SOURCES = +man6dir = $(mandir)/man6 +am__installdirs = "$(DESTDIR)$(man6dir)" "$(DESTDIR)$(pkgdatadir)" +NROFF = nroff +MANS = $(man_MANS) +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; +pkgdataDATA_INSTALL = $(INSTALL_DATA) +DATA = $(pkgdata_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GMSGFMT = @GMSGFMT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LDFLAGS = @LDFLAGS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_STRIP = @ac_ct_STRIP@ +ac_ct_have_python = @ac_ct_have_python@ +ac_ct_have_xmlto = @ac_ct_have_xmlto@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +have_python = @have_python@ +have_xmlto = @have_xmlto@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +man_MANS = sst.6 +pkgdata_DATA = sst-doc.txt sst.doc +CLEANFILES = $(pkgdata_DATA) $(man_MANS) +EXTRA_DIST = makehelp.py sst-doc.xml sst-layer.xsl sst.xml +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu doc/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +uninstall-info-am: +install-man6: $(man6_MANS) $(man_MANS) + @$(NORMAL_INSTALL) + test -z "$(man6dir)" || $(mkdir_p) "$(DESTDIR)$(man6dir)" + @list='$(man6_MANS) $(dist_man6_MANS) $(nodist_man6_MANS)'; \ + l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ + for i in $$l2; do \ + case "$$i" in \ + *.6*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ + else file=$$i; fi; \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + case "$$ext" in \ + 6*) ;; \ + *) ext='6' ;; \ + esac; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed -e 's/^.*\///'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man6dir)/$$inst'"; \ + $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man6dir)/$$inst"; \ + done +uninstall-man6: + @$(NORMAL_UNINSTALL) + @list='$(man6_MANS) $(dist_man6_MANS) $(nodist_man6_MANS)'; \ + l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ + for i in $$l2; do \ + case "$$i" in \ + *.6*) list="$$list $$i" ;; \ + esac; \ + done; \ + for i in $$list; do \ + ext=`echo $$i | sed -e 's/^.*\\.//'`; \ + case "$$ext" in \ + 6*) ;; \ + *) ext='6' ;; \ + esac; \ + inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ + inst=`echo $$inst | sed -e 's/^.*\///'`; \ + inst=`echo $$inst | sed '$(transform)'`.$$ext; \ + echo " rm -f '$(DESTDIR)$(man6dir)/$$inst'"; \ + rm -f "$(DESTDIR)$(man6dir)/$$inst"; \ + done +install-pkgdataDATA: $(pkgdata_DATA) + @$(NORMAL_INSTALL) + test -z "$(pkgdatadir)" || $(mkdir_p) "$(DESTDIR)$(pkgdatadir)" + @list='$(pkgdata_DATA)'; for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + f=$(am__strip_dir) \ + echo " $(pkgdataDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgdatadir)/$$f'"; \ + $(pkgdataDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgdatadir)/$$f"; \ + done + +uninstall-pkgdataDATA: + @$(NORMAL_UNINSTALL) + @list='$(pkgdata_DATA)'; for p in $$list; do \ + f=$(am__strip_dir) \ + echo " rm -f '$(DESTDIR)$(pkgdatadir)/$$f'"; \ + rm -f "$(DESTDIR)$(pkgdatadir)/$$f"; \ + done +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(MANS) $(DATA) +installdirs: + for dir in "$(DESTDIR)$(man6dir)" "$(DESTDIR)$(pkgdatadir)"; do \ + test -z "$$dir" || $(mkdir_p) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: install-man install-pkgdataDATA + +install-exec-am: + +install-info: install-info-am + +install-man: install-man6 + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am uninstall-man uninstall-pkgdataDATA + +uninstall-man: uninstall-man6 + +.PHONY: all all-am check check-am clean clean-generic distclean \ + distclean-generic distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-man6 install-pkgdataDATA install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ + pdf-am ps ps-am uninstall uninstall-am uninstall-info-am \ + uninstall-man uninstall-man6 uninstall-pkgdataDATA + + +sst.6: sst.xml + xmlto man sst.xml + +sst-doc.txt: sst-doc.xml + xmlto -m sst-layer.xsl txt sst-doc.xml +sst.doc: sst-doc.txt + makehelp.py >sst.doc + +sst-doc.html: sst-doc.xml + xmlto xhtml-nochunks sst-doc.xml +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/doc/makehelp.py b/doc/makehelp.py new file mode 100755 index 0000000..0a171f2 --- /dev/null +++ b/doc/makehelp.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python +# +# Generate an on-line help file for SST 2K from the text generated from +# the XML documentation. +# +# By Eric S. Raymond for the Super Star Trek project +import os, re, sys + +enddelim = "********\n" + +# This is the part most likely to bit-rot +beginmarker1 = "Mnemonic:" +endmarker1 = "Miscellaneous Notes" +beginmarker2 = " ABBREV" +endmarker2 = "Game History and Modifications" + +fp = open("sst-doc.txt", "r") +savetext = "" +state = 0 +while True: + line = fp.readline() + if not line: + break + if state == 0 and line.startswith(beginmarker1): + line = "%% " + line[12:].lstrip() + state = 1 + if state == 0 and line.startswith(beginmarker2): + savetext += enddelim + "%% ABBREV\n" + state = 2 + if state == 1: + if line.find(endmarker1) > -1: + state = 0 + if state == 2: + if line.find(endmarker2) > -1: + state = 0 + if state: + savetext += line + +# Remove the section titles +savetext = re.sub("\n+.*\n*Mnemonic:\\s*", "\n********\n%% ", savetext) + +# Hack Unicode non-breaking spaces into ordinary spaces +savetext = savetext.replace("\xc2\xa0", " ").replace("\240", "") + +sys.stdout.write(savetext + enddelim) diff --git a/doc/sst-doc.xml b/doc/sst-doc.xml new file mode 100644 index 0000000..8510e6d --- /dev/null +++ b/doc/sst-doc.xml @@ -0,0 +1,1964 @@ + + + +]> + + +Super Star Trek + + + + David + Matuzsek + + + Paul + Reynolds + + + Tom + Almy + + + Stas + Sergeev + + + Eric + Steven + Raymond + + + + +Permission is hereby granted for the copying, distribution, +modification and use of this program and associated documentation +for recreational purposes, provided that all references to the +authors are retained. However, permission is not and will not be +granted for the sale or promotional use of this program or program +documentation, or for use in any situation in which profit may be +considered an objective, since it is the desire of the authors to +respect the copyrights of the originators of Star Trek. + + + + + + + SSSSS U U PPPPP EEEEE RRRRR + S U U P P E R R + SSSSS U U PPPPP EEEE RRRRR + S U U P E R R + SSSSS UUUUU P EEEEE R R + + + SSSSSSS TTTTTTTT A RRRRRRR + SSSSSSSS TTTTTTTT AAA RRRRRRRR + SS TT AAA RR RR + SSSSSSS TT AA AA RR RR + SSSSSSS TT AA AA RRRRRRRR + SS TT AAAAAAA RRRRRRR + SS TT AAAAAAA RR RR + SSSSSSSS TT AA AA RR RR + SSSSSSS TT AA AA RR RR + + + + TTTTTTTT RRRRRRR EEEEEEEEE KK KK + TTTTTTTT RRRRRRRR EEEEEEEEE KK KK + TT RR RR EE KK KK + TT RR RR EEEEEE KKKKKK + TT RRRRRRRR EEEEEE KKKKK + TT RRRRRRR EE KK KK + TT RR RR EE KK KK + TT RR RR EEEEEEEEE KK KK + TT RR RR EEEEEEEEE KK KK + + + Produced For Your Enjoyment + + By + + David Matuszek + and + Paul Reynolds + + With Modifications By + Don Smith + + Resurrected By + Tom Almy + + Curses Interface By + Stas Sergeev + + SST 2K polishing and historical research by + Eric S. Raymond + + + +Introduction +The Organian Peace Treaty has collapsed, and the Federation is at war +with the Klingon Empire. Joining the Klingons against the Federation +are the members of the Romulan Star Empire. As commander of the +Starship U.S.S. Enterprise, your job is to wipe out the Klingon +invasion fleet and make the galaxy safe for democracy. + +Your battleground is the entire galaxy, which for convenience is +divided up into eight rows of eight quadrants each, like a +checkerboard. Rows are numbered from top to bottom, and columns are +numbered left to right, so quadrant 1 - 8 would be in the upper right +hand corner of the galaxy. + +During battle you will be concerned only with those enemies that +occupy the same quadrant as yourself. Quadrants are divided up into +sectors: ten rows of ten sectors each. Sectors are numbered in the +same way as quadrants, so the sector in the upper right corner is +sector 1 - 10. You have a short-range scanner which allows you to +look at the entire quadrant in a single display. + +Enemies recharge during your absence. If you leave a quadrant +containing a weakened enemy, when you return to that quadrant he will +be strong again. Also, each time you enter a quadrant, the positions +of everthing in the quadrant (except your ship) are randomized, to +save you the trouble of trying to remember where everything in the +quadrant is. Notice that this refers only to the positions of things +in the quadrant—the numbers of each kind of thing are not changed +(except for black holes and the Super-commander, which move around +the galaxy). If you kill something, it stays dead. + +The Romulans are not as serious a threat to the Federation as the +Klingons. For one thing, there are not as many of them. For +another, the Romulans are not as treacherous. However, Romulans are +not to be trifled with, especially when you are in violation of the +Romulan Neutral Zone. + +There are two kinds of Klingons: Ordinary Klingons, which are +bad enough, and Klingon Commanders, which are even worse. Commanders +are about three times stronger than ordinary Klingons. Commanders are +more resistant to your weapons. Commanders can move about during +battle while Ordinary Klingons stay put. And finally, Commanders have +a thing called a long-range tractor beam which they can +use, at random intervals, to yank you away from what you are doing +into their quadrant, to do battle with them. There is also a special +commander, called the Super-commander. This character +is so bad he is reserved for the Good, Expert, and Emeritus games. +Fortunately, there is just one Super-commander in a game. In addition +to the undesirable traits of Commanders, he can move from quadrant to +quadrant at will, seeking out and destroying your starbases and any +helpful planets he runs across. He also has a spy planted aboard your +ship, giving him valuable information about your condition. Using +this information, he can do dastardly things like tractor beam your +ship when you are in bad shape. And once you've been tractor beamed +by the Super-commander — + +But the advantages are not all on the side of the enemy. Your ship +is more powerful, and has better weapons. Besides, in the this +galaxy there are from two to five starbases, at which you can stop to +refuel and lick your wounds, safe from phaser attack or tractor +beams. But you had best not dally there too long, since time is not +on your side. The Klingons are not just after you; they are +attacking the entire Federation. There is always a finite time +left, which is how much longer the Federation can hold out if you +just sit on your fat behind and do nothing. As you wipe out +Klingons, you reduce the rate at which the invasion fleet weakens the +Federation, and so the time left until the Federation collapses may +actually increase. Since Klingons are the main threat to the +Federation, the Romulans do not figure into the time left. In +fact, you need not kill all the Romulans to win. If you can get all +the Klingons, the Federation will abide forever, and you have won the +game. + +Space is vast, and it takes precious time to move from one place to +another. In comparison, other things happen so quickly that we +assume they take no time at all. Two ways that time can pass are when +you move, or when you issue a command to sit still and rest for a +period of time. You will sometimes want to do the latter, since the +various devices aboard your starship may be damaged and require time +to repair. Of course, repairs can be made more quickly at a starbase +than than can in flight. + +In addition to Klingons, Romulans, and starbases, the galaxy +contains (surprise) stars. Mostly, stars are a nuisance and just get +in your way. You can trigger a star into going nova by shooting one +of your photon torpedoes at it. When a star novas, it does a lot of +dammage to anything immediately adjacent to it. If another star is +adjacent to a nova, it too will go nova. Stars may also occasionally +go supernova; a supernova in a quadrant destroys everything in the +quadrant andmakes the quadrant permanently uninhabitable. You may +jump over a quadrant containing a supernova when you +move, but you should not stop there. + +Supernovas may happen spontaneously, without provocation. If a +supernova occurs in the same quadrant you are in, your starship has an +emergency automatic override which picks some random +direction and some random warp factor, and tries to throw you clear of +the supernova. If the supernova occurs in some other quadrant, you +just get a warning message from starfleet about it (provided, of +course, that your subspace radio is working). + +Also a few planets are scattered through the galaxy. These can +sometimes be a great help since some of them will have dilithium +crystals, which are capable of replenishing the ship's energy +supply. You can either beam down to the planet surface using the +transporter, or take the shuttle craft Galileo. + +Finally, each quadrant will contain from zero to three black +holes. These can deflect or swallow torpedoes passing near them. They +also swallow enemy ships knocked into them. If your ship enters one +— + +Star Trek is a rich game, full of detail. These instructions are +written at a moderate level—no attempt has been made fully to +describe everything about the game, but there is quite a bit more +here than you need to get started. If you are new to the game, just +get a rough idea of the kinds of commands available, and start +playing. After a game or two you will have learned everthing +important, and the detailed command descriptions which follow will be +a lot more meaningful to you. + +You have weapons: phasers and photon torpedoes. You have a defense: +deflector shields. You can look at things: long-range scaners, +short-range scanners, and a star chart. You can move about, under +warp drive or impulse power. You can also dock at a starbase, rest +while repairs are being made, abandon ship, self destruct, or give up +and start a new game. + +The Klingons are waiting. + + +Starting the Game + +The program will ask you some setup questions. You can give it +command-line arguments that will be treated as answers. Any token +may be abbreviated to a unique prefix. + +The first question concerns whether you want a regullar, +tournament, or saved game. For discussion, see the description of the freeze command. + +The second question will concern the length of the game. +Longer games include more enemies. + +The third question will set the game's difficulty level. +You should probably start out at the novice level, even if you are +already familiar with one of the other versions of the Star Trek +game—but, of course, the level of game you play is up to you. If +you want to start at the Expert level, go ahead. It's your funeral. +The Emeritus game is strictly for masochists. + +The fourth question, new in SST2K, sets your game options. A +blank answer or 'fancy' enables all SST2K features. The option +'plain' disables a number of features (Tholians, planets & +dilithium, Thingies shooting back, deep-space-probes, Klingon ramming +and movement, time-warping through black holes, death-ray upgrade), +approximating the original CDC 6600 FORTRAN game from UT Austin. The +option 'almy' approximates Tom Almy's C translation from 1979, +disabling Thingies shooting back, base shields, and time-warping +through black holes. + + +How To Issue Commands + +When the game is waiting for you to enter a command it will +print out + + + COMMAND> + + +You may then type in your command. All you have to remember for each +command is the mnemonic. For example, if you want to move straight up +one quadrant, you can type in the mnemonic (case insensitive) + + + move + + +and the computer will prompt you with + + + Manual or automatic- + + +Say you type in manual. The computer then responds + + + X and Y displacements- + + +Now you type in 0 1 which specifies an X movement of zero and a Y +movement of one. + +When you have learned the commands, you can avoid being prompted +simply by typing in the information without waiting to be asked for +it. For example, in the above example, you could simply type in + + + move manual 0 1 + + +and it will be done. Or you could type in + + + move manual + + +and when the computer responds with the displacement prompt, you +can type in + + + 0 1 + + +and it will understand. + +You can abbreviate most mnemonics. For move, you can use any +of + + + move mov mo m + + +successfully. For your safety, certain critical commands (such as to +abandon ship) must be written out in full. Also, in a few cases two +or more commands begin with the same letter, and in this case that +letter refers to a particular one of the commands; to get the other, +your abbreviation must be two or more characters long. This sounds +complicated, but you will learn the abbreviations qGuickly enough. + +What this all boils down to is: + + +You can abbreviate practically anything +If you forget, the computer will prompt you +If you remember, you can type it all on one line + + +If you are part way through entering a command and you change your +minde, you can cancel the command by typing -1 as one of the +parameters, with the exception of the manual move command. + +If anything is not clear to you, experiment. The worst you can do is +lose a game or two. + + +List of Commands + +Short-Range Scan + + +Mnemonic: SRSCAN +Shortest abbreviation: S +Full commands: SRSCAN + SRSCAN NO + SRSCAN CHART + + + +If you are using the screen-oriented interface, this command is +suppressed; instead, a short-range scan will always be present on the +screen. + +The short-range scan gives you a considerable amount of information +about the quadrant your starship is in. A short-range scan is best +described by an example. + + + 1 2 3 4 5 6 7 8 9 10 + 1 * . . . . R . . . . Stardate 2516.3 + 2 . . . E . . . . . . Condition RED + 3 . . . . . * . B . . Position 5 - 1, 2 - 4 + 4 . . . S . . . . . . Life Support DAMAGED, Reserves=2.30 + 5 . . . . . . . K . . Warp Factor 5.0 + 6 . K . . . . . * . Energy 2176.24 + 7 . . . . . P . . . . Torpedoes 3 + 8 . . . . * . . . . . Shields UP, 42% 1050.0 units + 9 . * . . * . . . C . Klingons Left 12 + 10 . . . . . . . . . . Time Left 3.72 + + +The left part is a picture of the quadrant. The E at sector 2 - +4 represents the Enterprise; the B at sector 3 - 8 is a starbase. +There are ordinary Klingons (K) at sectors 5 - 8 and 6 - 2, and a +Klingon Commander (C) at 9 - 9. The (GULP) +Super-commander (S) is occupies sector 4 - 4, and a +Romulan (R) is at 1 - 6. A planet (P) is at sector 7 - 6. There are +also a large number of stars (*). The periods (.) are just empty +space—they are printed to help you get your bearings. Sector 6 +- 4 contains a black hole ( ). + +The information on the right is assorted status information. You +can get this alone with the STATUS command. The status information +will be absent if you type N after SRSCAN. Otherwise +status information will be presented. + +If you type C after SRSCAN, you will be given a +short-range scan and a Star Chart. + +Short-range scans are free. That is, they use up no energy and no +time. If you are in battle, doing a short-range scan does not give +the enemies another chance to hit you. You can safely do a +short-range scan anytime you like. + +If your short-range sensors are damaged, this command will only show +the contents of adjacent sectors. + +Status Report + + +Mnemonic: STATUS +Shortest abbreviation: ST + + + +If you are using the screen-oriented interface, this command is +suppressed; instead, a full status report will always be present on the +screen. + +This command gives you information about the current state of your +starship as follows: + + + +STARDATE + +The current date. A stardate is the same as a day. + + + +CONDITION + +There are four possible conditions: + + + DOCKED + docked at starbase. + + + RED + in battle. + + + YELLOW + low on energy (<1000 units) + + + GREEN + none of the above + + + + + +POSITION + +Quadrant is given first, then sector + + + +LIFE SUPPOR + +If ACTIVE then life support systems are functioning +normally. If on RESERVES the number is how many stardates your +reserve food, air, etc. will last—you must get repairs made or get to +starbase before your reserves run out. + + + +WARP FACTOR + +What your warp factor is currently set to. + + + +ENERGY + +The amount of energy you have left. If it drops to zero, you die. + + + +TORPEDOES + +How many photon torpedoes you have left. + + + +SHIELDS + +Whether your shields are up or down, how strong they are +(what percentage of a hit they can deflect), and shield energy. + + + +KLINGONS LEFT + +How many of the Klingons are still out there. + + + +TIME LEFT + +How long the Federation can hold out against the +present number of Klingons; that is, how long until the end +if you do nothing in the meantime. If you kill Klingons +quickly, this number will go up—if not, it will go down. If +it reaches zero, the federation is conquered and you lose. + + + + +Status information is free—it uses no time or energy, and +if you are in battle, the Klingons are not given another chance to hit +you. + +Status information can also be obtained by doing a short-range scan. +See the SRSCAN command for details. + +Each item of information can be obtained singly by requesting it. +See REQUEST command for details. + + +Long-Range Scan + + +Mnemonic: LRSCAN +Shortest abbreviation: L + + + +If you are using the screen-oriented interface, this command is +suppressed; instead, a long-range scan will always be present on the +screen. + +A long-range scan gives you general information about where you are +and what is around you. Here is an example output. + + + Long-range scan for Quadrant 5 - 1 + -1 107 103 + -1 316 5 + -1 105 1000 + + +This scan says that you are in row 5, column 1 of the 8 by 8 galaxy. +The numbers in the scan indicate how many of each kind of thing there +is in your quadrant and all adjacent quadrants. The digits are +interpreted as follows. + + + + + + Thousands digit: + 1000 indicates a supernova (only) + + + Hundreds digit: + number of Klingons present + + + Tens digit: + number of starbases present + + + Ones digit: + number of stars present + + + + + +For example, in your quadrant (5 - 1) the number is 316, which +indicates 3 Klingons, 1 starbase, and 6 stars. The long-range +scanner does not distinguish between ordinary Klingons and Klingon +command ships. If there is a supernova, as in the quadrant below and +to your right (quadrant 6 - 2), there is nothing else in the +quadrant. + +Romulans possess a cloaking device which prevents +their detection by long-range scan. Because of this fact, Starfleet +Command is never sure how many Romulans are out there. +When you kill the last Klingon, the remaining Romulans surrender to +the Federation. + +Planets are also undetectable by long-range scan. The only way to +detect a planet is to find it in your current quadrant with the +short-range sensors. + +Since you are in column 1, there are no quadrants to your left. The +minus ones indicate the negative energy barrier at the edge of the +galaxy, which you are not permitted to cross. + +Long-range scans are free. They use up no energy or time, and can be +done safely regardless of battle conditions. + +Star Chart + + +Mnemonic: CHART +Shortest abbreviation: C + + +As you proceed in the game, you learn more and more about what things +are where in the galaxy. When ever you first do a scan in a quadrant, +telemetry sensors are ejected which will report any changes in the +quadrant(s) back to your ship, providing the sub-space radio is +working. Spock will enter this information in the chart. If the radio +is not working, Spock can only enter new information discovered from +scans, and information in other quadrants may be obsolete. + +The chart looks like an 8 by 8 array of numbers. These numbers are +interpreted exactly as they are on a long-range scan. A period (.) in +place of a digit means you do not know that information yet. For +example, ... means you know nothing about the quadrant, while .1. +menas you know it contains a base, but an unknown number of Klingons +and stars. + +Looking at the star chart is a free operation. It costs neither time +nor energy, and can be done safely whether in or out of battle. + + +Damage Report + + +Mnemonic: DAMAGES +Shortest abbreviation: DA + + +At any time you may ask for a damage report to find out what devices +are damaged and how long it will take to repair them. Naturally, +repairs proceed faster at a starbase. + +If you suffer damages while moving, it is possible that a subsequent +damage report will not show any damage. This happens if the time +spent on the move exceeds the repair time, since in this case the +damaged devices were fixed en route. + +Damage reports are free. They use no energy or time, and can be done +safely even in the midst of battle. + + +Move Under Warp Drive + + +Mnemonic: MOVE +Shortest abbreviation: M +Full command: MOVE MANUAL <displacement> + MOVE AUTOMATIC <destination> + + +This command is the usual way to move from one place to another +within the galaxy. You move under warp drive, according to the +current warp factor (see WARP FACTOR). + +There are two command modes for movement: MANUAL and AUTOMATIC. +The manual mode requires the following format: + + + MOVE MANUAL <deltax> <deltay> + + +<deltax> and <deltay> are the horizontal and vertical +displacements for your starship, in quadrants; a displacement of one +sector is 0.1 quadrants. Specifying <deltax> and <deltay> +causes your ship to move in a straight line to the specified +destination. If <deltay> is omitted, it is assumed zero. For +example, the shortest possible command to move one sector to the right +would be + + + M M .1 + + +The following examples of manual movement refer to the short-range +scan shown earlier. + + + Destination Sector Manual Movement command + 3 - 1 M M -.3 -.1 + 2 - 1 M M -.3 + 1 - 2 M M -.2 .1 + 1 - 4 M M 0 .1 + (leaving quadrant) M M 0 .2 + + +The automatic mode is as follows: + + + MOVE AUTOMATIC <qrow> <qcol> <srow> <scol> + + +<para>where <qrow> and <qcol> are the row and column +numbers of the destination quadrant, and <srow> and <scol> +are the row and column numbers of the destination sector in that +quadrant. This command also moves your ship in a straight line path +to the destination. For moving within a quadrant, <qrow> and +<qcol> may be omitted. For example, to move to sector 2 - 9 in +the current quadrant, the shortest command would be + + + M A 2 9 + + +To move to quadrant 3 - 7, sector 5 - 8, type + + + M A 3 7 5 8 + + +and it will be done. In automatic mode, either two or four numbers +must be supplied. + +Automatic mode utilizes the ship's battle computer. If the +computer is damaged, manual movement must be used. + +If warp engines are damaged less than 10 stardates (undocked) you can +still go warp 4. + +It uses time and energy to move. How much time and how much energy +depends on your current warp factor, the distance you move, and +whether your shields are up. The higher the warp factor, the faster +you move, but higher warp factors require more energy. You may move +with your shields up, but this doubles the energy required. + +You can move within a quadrant without being attacked if you just +entered the quadrant or have been attacked since your last move +command. This enables you to move and hit them before they +retaliate. + + +Warp Factor + + +Mnemonic: WARP +Shortest abbreviation: W +Full command: WARP <number> + + +Your warp factor controls the speed of your starship. The larger the +warp factor, the faster you go and the more energy you use. + +Your minimum warp factor is 1.0 and your maximum warp factor is 10.0 +(which is 100 times as fast and uses 1000 times as much energy). At +speeds above warp 6 there is some danger of causing damage to your +warp engines; this damage is larger at higher warp factors and also +depends on how far you go at that warp factor. + +At exactly warp 10 there is some probability of entering a +so-called time warp and being thrown foward or backward +in time. The farther you go at warp 10, the greater is the +probability of entering the time warp. + + +Impulse Engines + + +Mnemonic: IMPULSE +Shortest abbreviation: I +Full command: IMPULSE MANUAL <displacement> + IMPULSE AUTOMATIC <destination> + + +The impulse engines give you a way to move when your warp engines are +damaged. They move you at a speed of 0.95 sectors per stardate, +which is the equivalent of a warp factor of about 0.975, so they are +much too slow to use except in emergencies. + +Movement commands are indicated just as in the MOVE command. + +The impulse engines require 20 units of energy to engage, plus 10 +units per sector (100 units per quadrant) traveled. It does not cost +extra to move with the shields up. + + +Deflector Shields + + +Mnemonic: SHIELDS +Shortest abbreviation: SH +Full commands: SHIELDS UP + SHIELDS DOWN + SHIELDS TRANSFER <amount of energy to transfer> + + +Your deflector shields are a defensive device to protect you from +Klingon attacks (and nearby novas). As the shields protect you, they +gradually weaken. A shield strength of 75%, for example, means that +the next time a Klingon hits you, your shields will deflect 75% of +the hit, and let 25% get through to hurt you. + +It costs 50 units of energy to raise shields, nothing to lower them. +You may move with your shields up; this costs nothing under impulse +power, but doubles the energy required for warp drive. + +Each time you raise or lower your shields, the Klingons have another +chance to attack. Since shields do not raise and lower +instantaneously, the hits you receive will be intermediate between +what they would be if the shields were completely up or completely +down. + +You may not fire phasers through your shields. However you may +use the high-speed shield control to lower shields, +fire phasers, and raise the shields again before the Klingons can +react. Since rapid lowering and raising of the shields requires more +energy than normal speed operation, it costs you 200 units of energy +to activate this control. It is automatically activated when you fire +phasers while shields are up. You may fire photon torpedoes, but they +may be deflected considerably from their intended course as they pass +through the shields (depending on shield strength). + +You may transfer energy beteen the ship's energy (given as +Energy in the status) and the shields. The word +TRANSFER may be abbreviated T. The +ammount of energy to transfer is the number of units of energy you +wish to take from the ship's energy and put into the shields. If you +specify an negative number, energy is drained from the shields to the +ship. Transfering energy constitutes a turn. If you transfer energy +to the shields while you are under attack, they will be at the new +energy level when you are next hit. + +Enemy torpedoes hitting your ship explode on your shields (if they +are up) and have essentially the same effect as phaser hits. + + +Phasers + + +Mnemonic: PHASERS +Shortest abbreviation: P +Full commands: PHASERS AUTOMATIC <AMOUNT TO FIRE> <NO> + PHASERS <AMOUNT TO FIRE> <NO> + PHASERS MANUAL <NO> <AMOUNT 1> <AMOUNT 2>...<AMOUNT N> + + +Phasers are energy weapons. As you fire phasers at Klingons, you +specify an amount to fire which is drawn from your +energy reserves. The amount of total hit required to kill an enemy is +partly random. but also depends on skill level. + +The average hit required to kill an ordinary Klingon varies from 200 +units in the Novice game to 250 units in the Emeritus game. +Commanders normally require from 600 (Novice) to 700 (Emeritus). The +Super-commander requres from 875 (Good) to 1000 (Emeritus). Romulans +require an average of 350 (Novice) to 450 (Emeritus). + +Hits on enemies are cumulative, as long as you don't leave the +quadrant. + +In general, not all that you fire will reach the Klingons. The +farther away they are, the less phaser energy will reach them. If a +Klingon is adjacent to you, he will receive about 90% of the phaser +energy directed at him; a Klingon 5 sectors away will receive about +60% and a Klingon 10 sectors away will receive about 35%. There is +some randomness involved, so these figures are not exact. Phasers +have no effect beyond the boundaries of the quadrant you are in. + +Phasers may overheat (and be damaged) if you fire too large a burst +at once. Firing up to 1500 units is safe. From 1500 on up the +probability of overheat increases with the amount fired. + +If phaser firing is automatic, the computer decides how to +divide up your <amount to fire> among the Klingons present. If +phaser firing is manual, you specify how much energy to fire at each +Klingon present (nearest first), rather than just specifying a total +amount. You can abreviate MANUAL and +AUTOMATIC to one or more letters; if you mention +neither, automatic fire is usually assumed. + +Battle computer information is available by firing phasers manually, +and allowing the computer to prompt you. If you enter zero for the +amount to fire at each enemy, you will get a complete report, without +cost. The battle computer will tell you how much phaser energy to +fire at each enemy for a sure kill. This information appears in +parentheses prior to the prompt for each enemy. Since the amount is +computed from sensor data, if either the computer or the S.R. sensors +are damaged, this information will be unavailable, and phasers must +be fired manually. + +A safety interlock prevents phasers from being fired through +the shields. If this were not so, the shields would contain your fire +and you would fry yourself. However, you may utilize the +high-speed shield control to drop shields, fire +phasers, and raise shields before the enemy can react. Since it takes +more energy to work the shields rapidly with a shot, it costs you 200 +units of energy each time you activate this control. It is +automatically activated when you fire phasers while the shields are +up. By specifying the <no> option, shields are not raised after +firing. + +Phasers have no effect on starbases (which are shielded) or on +stars. + + +Report + + +Mnemonic: REPORT +Shortest abbreviation: REP + + +This command supplies you with information about the state of the +current game. Its purpose is to remind you of things that you have +learned during play, but may have forgotten, and cannot otherwise +retrieve if you are not playing at a hard-copy terminal. + +You are told the following things: + + +The length and skill level of the game you are playing +The original number of Klingons +How many Klingons you have destroyed +Whether the Super-Commander has been destroyed +How many bases have been destroyed +How many bases are left +What bases (if any) are under attack; your subspace radio +must have been working since the attack to get this +information. +How many casualties you have suffered +How many times you have called for help. + + +This same information is automatically given to you when you start to +play a frozen game. + + +Computer + + +Mnemonic: COMPUTER +Shortest abbreviation: CO + + +This command allows using the ship's computer (if functional) to +calculate travel times and energy usage. + + +Photon Torpedoes + + +Mnemonic: PHOTONS +Shortest abbreviation: PHO +Full commands: PHOTONS <NUMBER> <TARG1> <TARG2> <TARG3> + + +Photon torpedoes are projectile weapons—you either hit what you aim +at, or you don't. There are no partial hits. + +One photon torpedo will usually kill one ordinary Klingon, but it +usually takes about two for a Klingon Commander. Photon torpedoes +can also blow up stars and starbases, if you aren't careful. + +You may fire photon torpedoes singly, or in bursts of two or three. +Each torpedo is individually targetable. The computer will prompt +you, asking for the target sector for each torpedo. Alternately, you +may specify each target in the command line. + +Photon torpedoes cannot be aimed precisely—there is always some +randomness involved in the direction they go. Photon torpedoes may +be fired with your shields up, but as they pass through the shields +they are randomly deflected from their intended course even more. + +Photon torpedoes are proximity-fused. The closer they explode to the +enemy, the more damage they do. There is a hit window about one +sector wide. If the torpedo misses the hit window, it does not +explode and the enemy is unaffected. Photon torpedoes are only +effective within the quadrant. They have no effect on things in +adjacent quadrants. + +If more than one torpedo is fired and only one target sector is +specified, all torpedoes are fired at that sector. For example, to +fire two torpedoes at sector 3 - 4, you type + + + PHO 2 3 4 (or) PHO 2 3 4 3 4 + + +To fire torpedoes at, consecutively, sectors 2 - 6, 1 - 10, and 4 - +7, type + + + PHO 3 2 6 1 10 4 7 + + +There is no restriction to fire directly at a sector. For example, +you can enter + + + PHO 1 3 2.5 + + +to aim between two sectors. However, sector numbers must be 1 to 10 +inclusive. + + +Dock at Starbase + + +Mnemonic: DOCK +Shortest abbreviation: D + + +You may dock your starship whenever you are in one of the eight +sector positions immediately adjacent to a starbase. When you dock, +your starship is resupplied with energy, shield energy photon +torpedoes, and life support reserves. Repairs also proceed faster at +starbase, so if some of your devices are damaged, you may wish to stay +at base (by using the REST command) until they are +fixed. If your ship has more than its normal maximum energy (which +can happen if you've loaded crystals) the ship's energy is not +changed. + +You may not dock while in standard orbit around a planet. + +Starbases have their own deflector shields, so you are completely +safe from phaser attack while docked. You are also safe from +long-range tractor beams. + +Starbases also have both short and long range sensors, which you can +use if yours are broken. There's also a subspace radio to get +information about happenings in the galaxy. Mr. Spock will update the +star chart if your ask for it while docked and your own radio is dead. + + +Rest + + +Mnemonic: REST +Shortest abbreviation: R +Full command: REST <NUMBER OF STARDATES> + + +This command simply allows the specified number of stardates to go +by. This is useful if you have suffered damages and wish to wait +until repairs are made before you go back into battle. + +It is not generally advisable to rest while you are under attack by +Klingons. + + +Call Starbase for Help + + +Mnemonic: MAYDAY +(No abbreviation) + + +[Originally, this command was called HELP, but +these days that might be misconstrued as an attempt to browae built-in +documentation! In some later versions it was CALL.] + +When you get into serious trouble, you may call a starbase for +help. Starbases have a device called a long-range transporter +beam which they can use to teleport you to base. This works +by dematerializing your starship at its current position and +re-materializing it adjacent to the nearest starbase. Teleportation +is instantaneous, and starbase supplies the required energy—all +you have to do is let them know (via subspace radio) that you need to +be rescued. + +This command should be employed only when absolutely necessary. In +the first place, calling for help is an admission on your part that +you got yourself into something you cannot get yourself out of, and +you are heavily penalized for this in the final scoring. Secondly, +the long-range transporter beam is not reliable—starbase can always +manage to dematerialize your starship, but (depending on distance) +may or may not be able to re-materialize you again. The long-range +transporter beam has no absolute maximum range; if you are in the +same quadrant as a starbase, you have a good chance (about 90%) of +re-materializing successfully. your chances drop to roughly 50-50 at +just over 3 quadrants. + + +Abandon Ship + + +Mnemonic: ABANDON +(no abbreviation) + + +You may abandon the Enterprise if necessary. If there is still a +starbase in the galaxy, you will be sent there and put in charge of a +weaker ship, the Faerie Queene. + +The Faerie Queene cannot be abandoned. + + +Self-Destruct + + +Mnemonic: DESTRUCT +(no abbreviation) + + +You may self-destruct, thus killing yourself and ending the game. If +there are nearby Klingons, you may take a few of them with you (the +more energy you have left, the bigger the bang). + +In order to self-destruct you must remember the password you typed in +at the beginning of the game. + + +Quit Game + + +Mnemonic: QUIT +(no abbreviation) + + +Immediately cancel the current game; no conclusion is reached. You +will be given an opportunity to start a new game or to leave the Star +Trek program. + + +Sensor-Scan + + +Mnemonic: SENSORS +Shortest abbreviation: SE + + +Utilizing the short-range sensors, science officer Spock gives you a +readout on any planet in your quadrant. Planets come in three +classes: M, N, and O. Only class M planets have earth-like +conditions. Spock informs you if the planet has any dilithium +crystals. Sensor scans are free. + + +Enter Standard Orbit + + +Mnemonic: ORBIT +Shortest abbreviation: O + + +To land on a planet you must first be in standard orbit. You achieve +this in a manner similar to docking at starbase. Moving to one of +the eight sector positions immediately adjacent to the planet, you +give the orbit command which puts your ship into standard orbit about +the planet. Since this is a maneuver, a small amount of time is +used; negligible energy is required. If enemies are present, they +will attack. + + +Transporter Travel + + +Mnemonic: TRANSPORT +Shortest abbreviation: T + + +The transporter is a device which can convert any physical object +into energy, beam the energy through space, and reconstruct the +physical object at some destination. Transporting is one way to land +on a planet. Since the transporter has a limited range, you must be +in standard orbit to beam down to a planet. Shields must be down +while transporting. + +The transport command is used to beam a landing party onto a planet +to mine dilithium crystals. Each time the command is given the +landing party (which you lead) moves from the ship to the planet, or +vice-versa. + +You are advised against needless transporting, since like all +devices, the transporter will sometimes malfunction. + +The transporter consumes negligible time and energy. Its use does +not constitute a turn. + + +Shuttle Craft + + +Mnemonic: SHUTTLE +Shortest abbreviation: SHU + + +An alternate way to travel to and from planets. Because of limited +range, you must be in standard orbit to use the shuttle craft, named +"Galileo". Shields must be down. + +Unlike transporting, use of the shuttle craft does constitute a +turn since time is consumed. The time naturally +depends on orbit altitude, and is equal to 3.0e-5 times altitude. +Shuttling uses no ship energy. + +You should use the same travel device going from the planet to the +ship as you use to go from the ship to the planet. However it is +possible to transport to the planet and have the Galileo crew come +and pick your landing party up, or to take the Galileo to the planet +and then transport back, leaving the shuttle craft on the planet. + + +Mine Dilithium Crystals + + +Mnemonic: MINE +Shortest abbreviation: MI + + +Once you and your mining party are on the surface of a planet which +has dilithium crystals, this command will dig them for you. + +Mining requires time and constitutes a turn. No +energy is used. Class M planets require 0.1 to 0.3 stardates to mine. +Class N planets take twice as long, and class O planets take three +times as long. + +Dilithium crystals contain enormous energy in a form that is readily +released in the ship's power system. It is an excellent idea to mine +them whenever possible, for use in emergencies. You keep the +crystals until the game is over or you abandon ship when not at a +starbase. + + +Load Dilithium Crystals + + +Mnemonic: CRYSTALS +Shortest abbreviation: CR + + +This is a very powerful command which should be used with caution. +Once you have dilithium crystals aboard ship, this command will +instruct engineering officer Scott and Mr. Spock to place a raw +dilithium crystal into the power channel of the ship's +matter-antimatter converter. When it works, this command will +greatly boost the ship's energy. + +Because the crystals are raw and impure, instabilities can occur in +the power channel. Usually Scotty can control these. When he +cannot, the results are disastrous. Scotty will use those crystals +that appear to be most stable first. + +Since using raw dilithium crystals for this purpose entails +considerable risk, Starfleet Regulations allow its use only during +"condition yellow". No time or energy is used. + + +Planet Report + + +Mnemonic: PLANETS +Shortest abbreviation: PL + + +Mr. Spock presents you a list of the available information on planets +in the galaxy. Since planets do not show up on long-range scans, the +only way to obtain this information is with the SENSORS command. + + +Freeze + + +Mnemonic: FREEZE +(no abbreviation) +Full command: FREEZE <FILE NAME> + + +The purpose of the FREEZE command is to allow a player to save the +current state of the game, so that it can be finished later. A +plaque may not be generated from a frozen game. A file with the +specified <file name> and type '.TRK' is created (if necessary) in +the current directory, and all pertinent information about the game +is written to that file. The game may be continued as usual or be +terminated at the user's option. + +To restart a game created by the FREEZE command, +the user need only type FROZEN in response to the +initial question about the type of game desired, followed by the +<file name>. + +NOTE: A tournament game is like a frozen game, +with the following differences. (1) Tournament games always start +from the beginning, while a frozen game can start at any point. (2) +Tournament games require only that the player remember the name or +number of the tournament, while the information about a frozen game +must be kept on a file. Tournament games can be frozen, but then they +behave like regular frozen games. + +A point worth noting is that 'FREEZE' does not save the seed for the +random number generator, so that identical actions after restarting +the same frozen game can lead to different results. However, +identical actions after starting a given tournament game always lead +to the same results. + + +Request + + +Mnemonic: REQUEST +Shortest abbreviation: REQ +Full command: REQUEST <ITEM> + + + +If you are using the screen-oriented interface, this command is +suppressed; instead, a full status report will always be present on the +screen. + +This command allows you to get any single piece of information +from the <STATUS> command. <ITEM> specifies which +information as follows: + + + + + + Information + Mnemonic for <item> + Shortest Abbreviation + + + +STARDATE DATE D +CONDITION CONDITION C +POSITION POSITION P +LIFE SUPPORTLSUPPORT L +WARP FACTOR WARPFACTORW +ENERGY ENERGY E +TORPEDOES TORPEDOES T +SHIELDS SHIELDS S +KLINGONS LEFTKLINGONS K +TIME LEFT TIME TI +BASES LEFT BASES BA + + + + + +Experimental Death Ray + + +Mnemonic: DEATHRAY +(No abbreviation) + + +This command should be used only in those desperate cases where +you have absolutely no alternative. The death ray uses energy to +rearrange matter. Unfortunately, its working principles are not yet +thoroughly understood, and the results are highly +unpredictable. + +The only good thing that can result is the destruction of all +enemies in your current quadrant. This will happen about 70% of the +time. Only enemies are destroyed; starbases, stars, and planets are +unaffected. + +Constituting the remaining 30% are results varying from bad to +fatal. + +The death ray requires no energy or time, but if you survive, enemies +will hit you. + +The Faerie Queene has no death ray. + +If the death ray is damaged in its use, it must be totally replaced. +This can only be done at starbase. Because it is a very complex +device, it takes 9.99 stardates at base to replace the death ray. +The death ray cannot be repaired in flight. + + +Launch Deep Space Probe + + +Mnemonic: PROBE +Shortest abbreviation: PR +Full command: PROBE <ARMED> MANUAL <displacement> + PROBE <ARMED> AUTOMATIC <destination> + + +The Enterprise carries a limited number of Long Range Probes. These +fly to the end of the galaxy and report back a count of the number of +important things found in each quadrant through which it went. The +probe flies at warp 10, and therefore uses time during its flight. +Results are reported immediately via subspace radio and are recorded +in the star chart. + +The probe can also be armed with a NOVAMAX warhead. When launched +with the warhead armed, the probe flies the same except as soon as it +reaches the target location, it detonates the warhead in the heart of +a star, causing a supernova and destroying everything in the +quadrant. It then flies no further. There must be a star in the +target quadrant for the NOVAMAX to function. + +The probe can fly around objects in a galaxy, but is destroyed if it +enters a quadrant containing a supernova, or if it leaves the galaxy. + +The target location is specified in the same manner as the MOVE +command, however for automatic movement, if only one pair of +coordinates are specified they are assumed to be the quadrant and not +the sector in the current quadrant! + +The Faerie Queene has no probes. + + +Emergency Exit + + +Mnemonic: EMEXIT +Shortest abbreviation: E + + +This command provides a quick way to exit from the game when you +observe a Klingon battle cruiser approaching your terminal. Its +effect is to freeze the game on the file 'EMSAVE.TRK' in your current +directory, erase the screen, and exit. + +Of course, you do lose the chance to get a plaque when you use this +maneuver. + + +Ask for Help + + +Mnemonic: HELP +Full command: HELP <command> + + +This command reads the appropriate section from the SST.DOC file, +providing the file is in the current directory. + + + +Miscellaneous Notes + +Starbases can be attacked by either commanders or by the +Super-Commander. When this happens, you will be +notified by subspace radio, provided it is working. The message will +inform you how long the base under attack can last. Since the +Super-Commander is more powerful than an ordinary +commander, he can destroy a base more quickly. + +The Super-Commander travels around the galaxy at +a speed of about warp 6 or 7. His movement is strictly time based; +the more time passes, the further he can go. + +Scattered through the galaxy are certain zones of control, +collectively designated the Romulan Neutral Zone. Any +quadrant which contains Romulans without Klingons is part of the +Neutral Zone, except if a base is present. Since Romulans do not show +on either the long-range scan or the star chart, it is easy for you to +stumble into this zone. When you do, if your subspace radio is +working, you will receive a warning message from the Romulan, politely +asking you to leave. + +In general, Romulans are a galactic nuisance. + +The high-speed shield control is fairly reliable, but it has been +known to malfunction. + +You can observe the galactic movements of the +Super-Commander on the star chart, provided he is in +territory you have scanned and your subspace radio is working. + +Periodically, you will receive intelligence reports from +starfleet command, indicating the current quadrant of the +Super-Commander. Your subspace radio must be working, +of course. + +Each quadrant will contain from 0 to 3 black holes. Torpedoes +entering a black hole disappear. In fact, anything entering a black +hole disappears, permanently. If you can displace an enemy into one, +he is a goner. Black holes do not necessarily remain in a quadrant. +they are transient phenomena. + +Commanders will ram your ship, killing themselves and inflicting +heavy damage to you, if they should happen to decide to advance into +your sector. + +You can get a list of commands by typing +COMMANDS. + + +Scoring + +Scoring is fairly simple. You get points for good things, and you +lose points for bad things. + +You gain— + + +10 points for each ordinary Klingon you kill, +50 points for each commander you kill, +200 points for killing the Super-Commander, +20 points for each Romulan killed, +1 point for each Romulan captured. + +100 times your average Klingon/stardate kill rate. If you lose +the game, your kill rate is based on a minimum of 5 stardates. + + +You get a bonus if you win the game, based on your rating: +Novice=100, Fair=200, Good=300, Expert=400, Emeritus=500. + + + +You lose— + + +200 points if you get yourself killed, +100 points for each starbase you destroy, +100 points for each starship you lose, +45 points for each time you had to call for help, +10 points for each planet you destroyed, +5 points for each star you destroyed, and +1 point for each casualty you incurred. + + +In addition to your score, you may also be promoted one grade in rank +if you play well enough. Promotion is based primarily on your +Klingon/stardate kill rate, since this is the best indicator of +whether you are ready to go on to the next higher rating. However, +if you have lost 100 or more points in penalties, the required kill +rate goes up. Normally, the required kill rate is 0.1 * skill * +(skill + 1.0) + 0.1, where skill ranges from 1 for Novice to 5 for +Emeritus. + +You can be promoted from any level. There is a special +promotion available if you go beyond the Expert range. +You can also have a certificate of merit printed with your name, date, +and Klingon kill rate, provided you are promoted from either the +Expert or Emeritus levels. This +plaque requires a 132 column printer. You may need +print the certificate to a file, import it into your word processor, +selecting Courier 8pt font, and then print in landscape +orientation. + + +Handy Reference Page + + + ABBREV FULL COMMAND DEVICE USED + ------ ------------ ----------- + ABANDON ABANDON shuttle craft + C CHART (none) + CO COMPUTER computer + CR CRYSTALS (none) + DA DAMAGES (none) + DEATHRAY DEATHRAY (none) + DESTRUCT DESTRUCT computer + D DOCK (none) + E EMEXIT (none) + FREEZE FREEZE <FILE NAME> (none) + I IMPULSE <MANUAL> <DISPLACEMENT> impulse engines + IMPULSE AUTOMATIC <DESTINATION> impulse engines and computer + L LRSCAN long-range sensors + MAYDAY MAYDAY (for help) subspace radio + MI MINE (none) + M MOVE <MANUAL> <DISPLACEMENT> warp engines + MOVE AUTOMATIC <DESTINATION> warp engines and computer + O ORBIT warp or impulse engines + P PHASERS <TOTAL AMOUNT> phasers and computer + PHASERS AUTOMATIC <TOTAL AMOUNT> phasers, computer, sr sensors + PHASERS MANUAL <AMT1> <AMT2> ... phasers + PHO PHOTONS <NUMBER> <TARGETS> torpedo tubes + PL PLANETS (none) + PR PROBE <ARMED> <MANUAL> <DISPLACEMENT> probe launcher, radio + PROBE <ARMED> AUTOMATIC <DESTINATION> launcher, radio, computer + REP REPORT (none) + REQ REQUEST (none) + R REST <NUMBER OF STARDATES> (none) + QUIT QUIT (none) + S SRSCAN <NO or CHART> short-range sensors + SE SENSORS short-range sensors + SH SHIELDS <UP, DOWN, or TRANSFER> deflector shields + SHU SHUTTLE shuttle craft + ST STATUS (none) + T TRANSPORT transporter + W WARP <FACTOR> (none) + + L. R. Scan: thousands digit: supernova + hundreds digit: Klingons + tens digit: starbases + ones digit: stars + period (.): digit not known (star chart only) + +Courses are given in manual mode in X - Y displacements; in automatic + mode as destination quadrant and/or sector. Manual mode is default. +Distances are given in quadrants. A distance of one sector is 0.1 quadrant. +Ordinary Klingons have about 400 units of energy, Commanders about + 1200. Romulans normally have about 800 units of energy, and the + (GULP) "Super-Commander" has about 1800. +Phaser fire diminishes to about 60 percent at 5 sectors. Up to 1500 + units may be fired in a single burst without danger of overheat. +Warp 6 is the fastest safe speed. At higher speeds, engine damage + may occur. At warp 10 you may enter a time warp. +Shields cost 50 units of energy to raise, and double the power + requirements of moving under warp drive. Engaging the high-speed + shield control requires 200 units of energy. +Warp drive requires (distance)*(warp factor cubed) units of energy + to travel at a speed of (warp factor squared)/10 quadrants per stardate. +Impulse engines require 20 units to warm up, plus 100 units per + quadrant. Speed is just under one sector per stardate. + + + +Game History and Modifications + +Origins + +The original Star Trek seems to have been written by Mike +Mayfield at the beginning of the 1970s. His first version was in +BASIC for a Sigma 7 in 1971; in 1972 he rewrote it in Hewlett Packard +BASIC. The source is available on the +SST2K website. In January 1975 it became part of the DECUS library +under the name SPACWR. + +While some people claim to have recollections of playing Trek +games in the late 1960s, the earlier ones seem actually to have been +variants of + +SPACEWAR, the earlier space-combat game on the +PDP-1. Mayfield wrote +in 2000 that he invented the Trek-style galactic grid, and the +evidence seems to back that up. Some of the confusion probably stems +from the fact that Mayfield's original and several early descendants +were distributed under the name SPACWR. + +Many different versions radiated from Mayfield's original; most +of the ones in BASIC are descended from a SPACWR version that David +Ahl published in 101 BASIC Computer Games, +July 1973. This was a port of Mayfield's version obtained from the HP +Contributed Programs library. + +Our SST2K is descended from a Taurus BASIC program by Grady +Hicks dated 5 April 1973. This does not appear to have been derived +from Ahl's SPACWR. The header says "GENERAL IDEA STOLEN FROM +PENN. U.", and the game has several features not present in SPACEWR: +notably, the Death Ray, ramming, and the Klingon summons to surrender. +And, of course, it predates Ahl's book. The source is available on the +SST2K website. + +Dave Matuszek, Paul Reynolds et. al. at UT Austin played the +Hicks version on a CDC6600, but disliked the long load time and +extreme slowness of the BASIC program. (David Matuszek notes that the +Hicks version he played had a habit of throwing long +quotes from Marcus Aurelius at the users, a feature he found +intolerable on a TTY at 110 baud. It must, therefore, have been +rather longer than the one we have.) The Austin crew proceeded to +write their own Trek game, loosely based on the Hicks version, in +CDC6600 FORTRAN. At that time, it was just called "Star Trek"; the +"Super" was added by later developers. In the rest of this history +we'll call it the "UT FORTRAN" version. + +At the time the UT FORTRAN source was last translated to C it emitted +the message "Latest update-21 Sept 78". Thus, it actually predated +(and may have influenced) the best-known BASIC version, the "Super +Star Trek" published by David Ahl in his November 1978 sequel +BASIC Computer Games. + +This 1978 "Super Star Trek" had been reworked by Robert Leedom and +friends from (according to Leedom) Mayfield's HP port. There is +internal evidence to suggest that at least some features of Leedom's +SST may have derived from the UT FORTRAN version. In particular, Dave +Matuszek recalls implementing command words to replace the original +numeric command codes, a feature Leedom's SST also had but the +1973 and 1975 SPACWRs did not. + +One signature trait of the UT FORTRAN game and its descendants +is that the sectors are 10x10 (rather than the 8x8 in Mike Mayfield's +1972 original and its BASIC descendants). The UT FORTRAN version also +preserves the original numbered quadrants rather than the +astronomically-named quadrants introduced in Ahl's SST and its +descendants. + + + + +Eric Allman's BSD Trek game is one of these, also descended from +the UT FORTRAN version via translation to C. However, the mainline version +(now SST2K) has had a lot more stuff folded into it over the years +— deep space probes, dilithium mining, the Tholian Web, and so +forth. + + +Tom Almy's story + +Back in (about) 1977 I got a copy of the Super Star Trek game for +the CDC 6600 mainframe computer. Someone had converted it to PDP-11 +Fortran but couldn't get it to run because of its size. I modified +the program to use overlays and managed to shoehorn it in on the 56k +byte machine. + +I liked the game so much I put some time into fixing bugs, mainly +what could be called continuity errors and loopholes in the game's +logic. We even played a couple tournaments. + +In 1979, I lost access to that PDP-11. I did save the source code +listing. In 1995, missing that old friend, I started converting the +program into portable ANSI C. It's been slow, tedious work that took +over a year to accomplish. + +In early 1997, I got the bright idea to look for references to +Super Star Trek on the World Wide Web. There weren't +many hits, but there was one that came up with 1979 Fortran sources! +This version had a few additional features that mine didn't have, +however mine had some feature it didn't have. So I merged its features +that I liked. I also took a peek at the DECUS version (a port, less +sources, to the PDP-10), and some other variations. + +Modifications I made: + +Compared to original version, I've changed the +help command to call and the +terminate command to quit to better +match user expectations. The DECUS version apparently made those +changes as well as changing freeze to +save. However I like freeze. + +I added EMEXIT from the 1979 version. + +That later version also mentions srscan and lrscan working when +docked (using the starbase's scanners), so I made some changes here +to do this (and indicating that fact to the player), and then +realized the base would have a subspace radio as well — doing a +Chart when docked updates the star chart, and all radio reports will +be heard. The Dock command will also give a report if a base is under +attack. + +It also had some added logic to spread the initial positioning of +bases. That made sense to add because most people abort games with +bad base placement. + +The experimental deathray originally had only a 5% chance of success, +but could be used repeatedly. I guess after a couple years of use, it +was less experimental because the 1979 version had a 70% success +rate. However it was prone to breaking after use. I upgraded the +deathray, but kept the original set of failure modes (great humor!). + +I put in the Tholian Web code from the 1979 version. + +I added code so that Romulans and regular Klingons could move in +advanced games. I re-enabled the code which allows enemy ships to +ram the Enterprise; it had never worked right. The 1979 version +seems to have it all fixed up, but I'm still not overly happy with +the algorithm. + +The DECUS version had a Deep Space Probe. Looked like a good idea +so I implemented it based on its description. + + +Stas Sergeev's story + +I started from an older Tom Almy version and added features I had +seen in other mainframe variants of the game, I wrote a screen-oriented +interface for it based on the curses library. + + + +The Space Thingy can be shoved, if you ram it, and can fire back if +fired upon. + + +The Tholian can be hit with phasers. + + +When you are docked, base covers you with an almost invincible shields + (a commander can still ram you, or a Romulan can destroy the base, + or a SCom can even succeed with direct attack IIRC, but this rarely + happens). + + +SCom can't escape from you if no more enemies remain (without this, + chasing SCom can take an eternity). + + +Probe target you enter is now the destination quadrant. Before I don't + remember what it was, but it was something I had difficulty using. + + +Secret password is now autogenerated. + + +Victory plaque is adjusted for A4 paper rather than 132-column greenbar +:-) + + +Phasers now tells you how much energy needed, but only if the computer +is alive. + + +Planets are auto-scanned when you enter the quadrant. + + +Mining or using crystals in presense of enemy now yields an attack. +There are other minor adjustments to what yields an attack +and what does not. + + +Ramming a black hole is no longer instant death. There is a +chance you might get timewarped instead. + + +"freeze" command reverts to "save", most people will understand this +better anyway. + + +Screen-oriented interface, with sensor scans always up. + + + +My changes got merged into SST2K in 2005, and I work on it now. + + +Eric Raymond's story + +I played the FORTRAN version of this game in the late 1970s on a +DEC minicomputer. In the late 1980s Dave Matuszek and I became +friends; I was vaguely aware that he had had something to do with the +original Star Trek game. In October 2004, sitting in Dave's living +room, we got to talking about the game and I realized it would make a +great exhibit for the Retrocomputing Museum. + +A few quick web searches later we found Tom Almy's page. We +downloaded his code and Dave verified that that it was a direct +descendent of UT Super Star Trek — even though it had been translated +to C, he was able to recognize names and techniques from the FORTRAN +version he co-wrote. + +This game became an open-source project; see the project +site. + +After I launched the Berlios project, Stas Sergeev contacted me. +We worked together to merge in his changes. + +Modifications I've made: + + + +I converted the flat-text SST.DOC file to XML-Docbook so it can be +webbed. (That's what you're reading now.) + + +The command-help code needed a rewrite because the flat-text form of +the documentation is now generated from XML and doesn't have the +easily recognizable section delimiters it used to. I wrote a script +to filter that flat-text form into an sst.doc that's easy to parse for +command descriptions, and changed some logic in sst.c to match. + + +I've cleaned up a lot of grubby FORTRANisms in the code internals -- +used sizeof(), replaced magic numeric constants with #defines, +that sort of thing. + + +I fixed a surprising number of typos in the code and documentation. + + +All the game state now lives in one big structure that can be +written to and read from disk as one blob. The write gives it an +an identifiable magic number and the thaw logic checks for same. + + +I made the internal pager work, and in the process got rid of a number +of platform dependencies in the code. + + +The HELP/CALL/SOS command is now MAYDAY. + + +Status report now indicates if dilithium crystals are on board. + + +At Dave's prompting, restored the Space Thingy's original elusive behavior. + + +Clean separation of game engine from the UI code, improving Stas +Sergeev's excellent work on the curses interface. + + + +Here are some good pages on the history of Star Trek games: + + + +http://www.dunnington.u-net.com/public/startrek/ + + +http://www3.sympatico.ca/maury/games/space/star_trek.html + + +http://www.cactus.org/%7Enystrom/startrek.html + + + + +Authors' Acknowledgments + +These are the original acknowledgments by Dave Matuszek and Paul +Reynolds: + +The authors would like to thank Professor Michael Duggan for his +encouragement and administrative assistance with the development of +the Star Trek game, without which it might never have been completed. + +Much credit is due to Patrick McGehearty and Rich Cohen, who assisted +with the original design of the game and contributed greatly to its +conceptual development. + +Thanks are also due to Carl Strange, Hardy Tichenor and Steven Bruell +for their assistance with certain coding problems. + +This game was inspired by and rather loosely based on an earlier +game, programmed in the BASIC language, by Jim Korp and Grady Hicks. +It is the authors' understanding that the BASIC game was in turn +derived from a still earlier version in use at Penn State University. + + +References + + +Star Trek (the original television +series), produced and directed by Gene Rodenberry. + +Star Trek (the animated +television series), produced by Gene Rodenberry and directed by Hal +Sutherland. Also excellent, and not just kiddie fare. If you enjoyed +the original series you should enjoy this one (unless you have some +sort of a hangup about watching cartoons). + +The Making of Star Trek, by +Steven E. Whitfield and Gene Rodenberry. The best and most complete +readily available book about Star Trek. (Ballantine +Books) + +The World of Star Trek, by +David Gerrold. Similiar in scope to the above book. +(Bantam) + +The Star Trek Guide, third revision 4/17/67, by Gene +Roddenberry. The original writer's guide for the television +series, but less comprehensive than (3) above. +(Norway Productions) + +The Trouble With Tribbles, by +David Gerrold. Includes the complete script of this popular show. +(Ballantine Books) + +Star Trek, Star Trek +2, ..., Star Trek 9, by James +Blish. The original shows in short story form. +(Bantam) + +Spock Must Die, by James Blish. +An original novel, but rather similar to the show The Enemy +Within. (Bantam) + +Model kits of the Enterprise and a Klingon +Battle-Cruiser by AMT Corporation are available at most hobby +shops. + + + + + diff --git a/doc/sst-layer.xsl b/doc/sst-layer.xsl new file mode 100644 index 0000000..774dd27 --- /dev/null +++ b/doc/sst-layer.xsl @@ -0,0 +1,11 @@ + + + + + + + + diff --git a/doc/sst.xml b/doc/sst.xml new file mode 100644 index 0000000..5a56584 --- /dev/null +++ b/doc/sst.xml @@ -0,0 +1,67 @@ + + + +sst +6 +Nov 1 2004 + + +sst +the classic Super Star Trek game + + + + +sst +-t +command + + + + +DESCRIPTION + +The Organian Peace Treaty has collapsed, and the Federation is +at war with the Klingon Empire. Joining the Klingons against the +Federation are the members of the Romulan Star Empire. As commander +of the Starship U.S.S. Enterprise, your job is to wipe out the Klingon +invasion fleet and make the galaxy safe for democracy. + +This is one of the great early classic computer games from the +1970s and still has a remarkable amount of play value. Run +sst in a terminal window to start it. Typing +'comands' at the prompt will list all commands; help is available for +each one individually as well. Full documentation is browseable. On +systems where /usr/share/doc/sst/ is a legal +filename, it will probably be installed there as well. + +There is one option -t, which forces the original pure-tty mode. +Normally sst tries to come up in full-screen mode that assumes it is +running on a cursor-addressable terminal or terminal emulator. + +Input tokens for the setup prompts will be read from the +remainder of the command line before standard input. Thus, for +example, you can invoke the program as + + +sst regular medium good fancy + + +to start a regular medium game as a good player in 'fancy' +mode (all features enabled). + + +AUTHORS +Super Star Trek was designed and written by David Matuszek, Paul +Reynolds, and Don Smith in the 1970s. It was resurrected by Tom Almy. +The screen-oriented interface is by Stas Sergeev. This version has +been cleaned up and documented by Eric S. Raymond +esr@snark.thyrsus.com. There is a project +page. + + + diff --git a/events.c b/events.c deleted file mode 100644 index 589a838..0000000 --- a/events.c +++ /dev/null @@ -1,755 +0,0 @@ -#include "sst.h" -#include - -void events(void) -{ - int ictbeam=0, ipage=0, istract=0, line, i=0, j, k, l, ixhold=0, iyhold=0; - double fintim = game.state.date + Time, datemin, xtime, repair, yank=0; - int radio_was_broken; - -#ifdef DEBUG - if (idebug) prout("EVENTS"); -#endif - - radio_was_broken = (game.damage[DRADIO] != 0.0); - - for (;;) { - /* Select earliest extraneous event, line==0 if no events */ - line = FSPY; - if (alldone) return; - datemin = fintim; - for (l = 1; l < NEVENTS; l++) - if (game.future[l] < datemin) { - line = l; - datemin = game.future[l]; - } - xtime = datemin-game.state.date; - game.state.date = datemin; - /* Decrement Federation resources and recompute remaining time */ - game.state.remres -= (game.state.remkl+4*game.state.remcom)*xtime; - game.state.remtime = game.state.remres/(game.state.remkl+4*game.state.remcom); - if (game.state.remtime <=0) { - finish(FDEPLETE); - return; - } - /* Is life support adequate? */ - if (game.damage[DLIFSUP] && condit != IHDOCKED) { - if (lsupres < xtime && game.damage[DLIFSUP] > lsupres) { - finish(FLIFESUP); - return; - } - lsupres -= xtime; - if (game.damage[DLIFSUP] <= xtime) lsupres = inlsr; - } - /* Fix devices */ - repair = xtime; - if (condit == IHDOCKED) repair /= docfac; - /* Don't fix Deathray here */ - for (l=0; l 0.0 && l != DDRAY) - game.damage[l] -= (game.damage[l]-repair > 0.0 ? repair : game.damage[l]); - /* If radio repaired, update star chart and attack reports */ - if (radio_was_broken && game.damage[DRADIO] == 0.0) { - prout("Lt. Uhura- \"Captain, the sub-space radio is working and"); - prout(" surveillance reports are coming in."); - skip(1); - if (iseenit==0) { - attakreport(0); - iseenit = 1; - } - rechart(); - prout(" The star chart is now up to date.\""); - skip(1); - } - /* Cause extraneous event LINE to occur */ - Time -= xtime; - switch (line) { - case FSNOVA: /* Supernova */ - if (ipage==0) pause_game(1); - ipage=1; - snova(0,0); - game.future[FSNOVA] = game.state.date + expran(0.5*intime); - if (game.state.galaxy[quadx][quady].supernova) return; - break; - case FSPY: /* Check with spy to see if S.C. should tractor beam */ - if (game.state.nscrem == 0 || - ictbeam+istract > 0 || - condit==IHDOCKED || isatb==1 || iscate==1) return; - if (ientesc || - (energy < 2000 && torps < 4 && shield < 1250) || - (game.damage[DPHASER]>0 && (game.damage[DPHOTON]>0 || torps < 4)) || - (game.damage[DSHIELD] > 0 && - (energy < 2500 || game.damage[DPHASER] > 0) && - (torps < 5 || game.damage[DPHOTON] > 0))) { - /* Tractor-beam her! */ - istract=1; - yank = square(game.state.isx-quadx) + square(game.state.isy-quady); - /********* fall through to FTBEAM code ***********/ - } - else return; - case FTBEAM: /* Tractor beam */ - if (line==FTBEAM) { - if (game.state.remcom == 0) { - game.future[FTBEAM] = FOREVER; - break; - } - i = Rand()*game.state.remcom+1.0; - yank = square(game.state.cx[i]-quadx) + square(game.state.cy[i]-quady); - if (istract || condit == IHDOCKED || yank == 0) { - /* Drats! Have to reschedule */ - game.future[FTBEAM] = game.state.date + Time + - expran(1.5*intime/game.state.remcom); - break; - } - } - /* tractor beaming cases merge here */ - yank = sqrt(yank); - if (ipage==0) pause_game(1); - ipage=1; - Time = (10.0/(7.5*7.5))*yank; /* 7.5 is yank rate (warp 7.5) */ - ictbeam = 1; - skip(1); - proutn("***"); - crmshp(); - prout(" caught in long range tractor beam--"); - /* If Kirk & Co. screwing around on planet, handle */ - atover(1); /* atover(1) is Grab */ - if (alldone) return; - if (icraft == 1) { /* Caught in Galileo? */ - finish(FSTRACTOR); - return; - } - /* Check to see if shuttle is aboard */ - if (iscraft==0) { - skip(1); - if (Rand() > 0.5) { - prout("Galileo, left on the planet surface, is captured"); - prout("by aliens and made into a flying McDonald's."); - game.damage[DSHUTTL] = -10; - iscraft = -1; - } - else { - prout("Galileo, left on the planet surface, is well hidden."); - } - } - if (line==0) { - quadx = game.state.isx; - quady = game.state.isy; - } - else { - quadx = game.state.cx[i]; - quady = game.state.cy[i]; - } - iran(QUADSIZE, §x, §y); - crmshp(); - proutn(" is pulled to "); - proutn(cramlc(quadrant, quadx, quady)); - proutn(", "); - prout(cramlc(sector, sectx, secty)); - if (resting) { - prout("(Remainder of rest/repair period cancelled.)"); - resting = 0; - } - if (shldup==0) { - if (game.damage[DSHIELD]==0 && shield > 0) { - doshield(2); /* Shldsup */ - shldchg=0; - } - else prout("(Shields not currently useable.)"); - } - newqad(0); - /* Adjust finish time to time of tractor beaming */ - fintim = game.state.date+Time; - attack(0); - if (game.state.remcom <= 0) game.future[FTBEAM] = FOREVER; - else game.future[FTBEAM] = game.state.date+Time+expran(1.5*intime/game.state.remcom); - break; - case FSNAP: /* Snapshot of the universe (for time warp) */ - game.snapsht = game.state; - game.state.snap = 1; - game.future[FSNAP] = game.state.date + expran(0.5 * intime); - break; - case FBATTAK: /* Commander attacks starbase */ - if (game.state.remcom==0 || game.state.rembase==0) { - /* no can do */ - game.future[FBATTAK] = game.future[FCDBAS] = FOREVER; - break; - } - i = 0; - for_starbases(j) { - for_commanders(k) - if (game.state.baseqx[j]==game.state.cx[k] && game.state.baseqy[j]==game.state.cy[k] && - (game.state.baseqx[j]!=quadx || game.state.baseqy[j]!=quady) && - (game.state.baseqx[j]!=game.state.isx || game.state.baseqy[j]!=game.state.isy)) { - i = 1; - break; - } - if (i == 1) break; - } - if (j>game.state.rembase) { - /* no match found -- try later */ - game.future[FBATTAK] = game.state.date + expran(0.3*intime); - game.future[FCDBAS] = FOREVER; - break; - } - /* commander + starbase combination found -- launch attack */ - batx = game.state.baseqx[j]; - baty = game.state.baseqy[j]; - game.future[FCDBAS] = game.state.date+1.0+3.0*Rand(); - if (isatb) /* extra time if SC already attacking */ - game.future[FCDBAS] += game.future[FSCDBAS]-game.state.date; - game.future[FBATTAK] = game.future[FCDBAS] +expran(0.3*intime); - iseenit = 0; - if (game.damage[DRADIO] != 0.0 && - condit != IHDOCKED) break; /* No warning :-( */ - iseenit = 1; - if (ipage==0) pause_game(1); - ipage = 1; - skip(1); - proutn("Lt. Uhura- \"Captain, the starbase in "); - prout(cramlc(quadrant, batx, baty)); - prout(" reports that it is under attack and that it can"); - proutn(" hold out only until stardate %d", - (int)game.future[FCDBAS]); - prout(".\""); - if (resting) { - skip(1); - proutn("Mr. Spock- \"Captain, shall we cancel the rest period?\" "); - if (ja()) { - resting = 0; - Time = 0.0; - return; - } - } - break; - case FSCDBAS: /* Supercommander destroys base */ - game.future[FSCDBAS] = FOREVER; - isatb = 2; - if (!game.state.galaxy[game.state.isx][game.state.isy].starbase) - break; /* WAS RETURN! */ - ixhold = batx; - iyhold = baty; - batx = game.state.isx; - baty = game.state.isy; - case FCDBAS: /* Commander succeeds in destroying base */ - if (line==FCDBAS) { - game.future[FCDBAS] = FOREVER; - /* find the lucky pair */ - for_commanders(i) - if (game.state.cx[i]==batx && game.state.cy[i]==baty) - break; - if (i > game.state.remcom || game.state.rembase == 0 || - !game.state.galaxy[batx][baty].starbase) { - /* No action to take after all */ - batx = baty = 0; - break; - } - } - /* Code merges here for any commander destroying base */ - /* Not perfect, but will have to do */ - /* Handle case where base is in same quadrant as starship */ - if (batx==quadx && baty==quady) { - game.state.chart[batx][baty].starbase = FALSE; - game.quad[basex][basey]= IHDOT; - basex=basey=0; - newcnd(); - skip(1); - prout("Spock- \"Captain, I believe the starbase has been destroyegame.state.\""); - } - else if (game.state.rembase != 1 && - (game.damage[DRADIO] <= 0.0 || condit == IHDOCKED)) { - /* Get word via subspace radio */ - if (ipage==0) pause_game(1); - ipage = 1; - skip(1); - prout("Lt. Uhura- \"Captain, Starfleet Command reports that"); - proutn(" the starbase in "); - proutn(cramlc(quadrant, batx, baty)); - prout(" has been destroyed by"); - if (isatb==2) prout("the Klingon Super-Commander"); - else prout("a Klingon Commander"); - game.state.chart[batx][baty].starbase = FALSE; - } - /* Remove Starbase from galaxy */ - game.state.galaxy[batx][baty].starbase = FALSE; - for_starbases(i) - if (game.state.baseqx[i]==batx && game.state.baseqy[i]==baty) { - game.state.baseqx[i]=game.state.baseqx[game.state.rembase]; - game.state.baseqy[i]=game.state.baseqy[game.state.rembase]; - } - game.state.rembase--; - if (isatb == 2) { - /* reinstate a commander's base attack */ - batx = ixhold; - baty = iyhold; - isatb = 0; - } - else { - batx = baty = 0; - } - break; - case FSCMOVE: /* Supercommander moves */ - game.future[FSCMOVE] = game.state.date+0.2777; - if (ientesc+istract==0 && - isatb!=1 && - (iscate!=1 || justin==1)) scom(&ipage); - break; - case FDSPROB: /* Move deep space probe */ - game.future[FDSPROB] = game.state.date + 0.01; - probex += probeinx; - probey += probeiny; - i = (int)(probex/QUADSIZE +0.05); - j = (int)(probey/QUADSIZE + 0.05); - if (probecx != i || probecy != j) { - probecx = i; - probecy = j; - if (!VALID_QUADRANT(i, j) || - game.state.galaxy[probecx][probecy].supernova) { - // Left galaxy or ran into supernova - if (game.damage[DRADIO]==0.0 || condit == IHDOCKED) { - if (ipage==0) pause_game(1); - ipage = 1; - skip(1); - proutn("Lt. Uhura- \"The deep space probe "); - if (!VALID_QUADRANT(j, i)) - proutn("has left the galaxy"); - else - proutn("is no longer transmitting"); - prout(".\""); - } - game.future[FDSPROB] = FOREVER; - break; - } - if (game.damage[DRADIO]==0.0 || condit == IHDOCKED) { - if (ipage==0) pause_game(1); - ipage = 1; - skip(1); - proutn("Lt. Uhura- \"The deep space probe is now in "); - proutn(cramlc(quadrant, probecx, probecy)); - prout(".\""); - } - } - /* Update star chart if Radio is working or have access to - radio. */ - if (game.damage[DRADIO] == 0.0 || condit == IHDOCKED) { - game.state.chart[probecx][probecy].klingons = game.state.galaxy[probecx][probecy].klingons; - game.state.chart[probecx][probecy].starbase = game.state.galaxy[probecx][probecy].starbase; - game.state.chart[probecx][probecy].stars = game.state.galaxy[probecx][probecy].stars; - game.state.galaxy[probecx][probecy].charted = TRUE; - } - proben--; // One less to travel - if (proben == 0 && isarmed && - game.state.galaxy[probecx][probecy].stars) { - /* lets blow the sucker! */ - snova(1,0); - game.future[FDSPROB] = FOREVER; - if (game.state.galaxy[quadx][quady].supernova) - return; - } - break; - } - } -} - - -void wait(void) -{ - int key; - double temp, delay, origTime; - - ididit = 0; - for (;;) { - key = scan(); - if (key != IHEOL) break; - proutn("How long? "); - } - chew(); - if (key != IHREAL) { - huh(); - return; - } - origTime = delay = aaitem; - if (delay <= 0.0) return; - if (delay >= game.state.remtime || nenhere != 0) { - proutn("Are you sure? "); - if (ja() == 0) return; - } - - /* Alternate resting periods (events) with attacks */ - - resting = 1; - do { - if (delay <= 0) resting = 0; - if (resting == 0) { - prout("%d stardates left.", (int)game.state.remtime); - return; - } - temp = Time = delay; - - if (nenhere) { - double rtime = 1.0 + Rand(); - if (rtime < temp) temp = rtime; - Time = temp; - } - if (Time < delay) attack(0); - if (alldone) return; - events(); - ididit = 1; - if (alldone) return; - delay -= temp; - /* Repair Deathray if long rest at starbase */ - if (origTime-delay >= 9.99 && condit == IHDOCKED) - game.damage[DDRAY] = 0.0; - } while - // leave if quadrant supernovas - (!game.state.galaxy[quadx][quady].supernova); - - resting = 0; - Time = 0; -} - -void nova(int ix, int iy) -{ - static double course[] = - {0.0, 10.5, 12.0, 1.5, 9.0, 0.0, 3.0, 7.5, 6.0, 4.5}; - int bot, top, top2, hits[QUADSIZE+1][3], kount, icx, icy, mm, nn, j; - int iquad, iquad1, i, ll, newcx, newcy, ii, jj; - if (Rand() < 0.05) { - /* Wow! We've supernova'ed */ - snova(ix, iy); - return; - } - - /* handle initial nova */ - game.quad[ix][iy] = IHDOT; - crmena(1, IHSTAR, 2, ix, iy); - prout(" novas."); - game.state.galaxy[quadx][quady].stars--; - game.state.starkl++; - - /* Set up stack to recursively trigger adjacent stars */ - bot = top = top2 = 1; - kount = 0; - icx = icy = 0; - hits[1][1] = ix; - hits[1][2] = iy; - while (1) { - for (mm = bot; mm <= top; mm++) - for (nn = 1; nn <= 3; nn++) /* nn,j represents coordinates around current */ - for (j = 1; j <= 3; j++) { - if (j==2 && nn== 2) continue; - ii = hits[mm][1]+nn-2; - jj = hits[mm][2]+j-2; - if (!VALID_SECTOR(jj, ii)) continue; - iquad = game.quad[ii][jj]; - switch (iquad) { - // case IHDOT: /* Empty space ends reaction - // case IHQUEST: - // case IHBLANK: - // case IHT: - // case IHWEB: - default: - break; - case IHSTAR: /* Affect another star */ - if (Rand() < 0.05) { - /* This star supernovas */ - snova(ii,jj); - return; - } - top2++; - hits[top2][1]=ii; - hits[top2][2]=jj; - game.state.galaxy[quadx][quady].stars -= 1; - game.state.starkl++; - crmena(1, IHSTAR, 2, ii, jj); - prout(" novas."); - game.quad[ii][jj] = IHDOT; - break; - case IHP: /* Destroy planet */ - game.state.galaxy[quadx][quady].planets -= 1; - game.state.nplankl++; - crmena(1, IHP, 2, ii, jj); - prout(" destroyed."); - DESTROY(&game.state.plnets[iplnet]); - iplnet = plnetx = plnety = 0; - if (landed == 1) { - finish(FPNOVA); - return; - } - game.quad[ii][jj] = IHDOT; - break; - case IHB: /* Destroy base */ - game.state.galaxy[quadx][quady].starbase = FALSE; - for_starbases(i) - if (game.state.baseqx[i]==quadx && game.state.baseqy[i]==quady) - break; - game.state.baseqx[i] = game.state.baseqx[game.state.rembase]; - game.state.baseqy[i] = game.state.baseqy[game.state.rembase]; - game.state.rembase--; - basex = basey = 0; - game.state.basekl++; - newcnd(); - crmena(1, IHB, 2, ii, jj); - prout(" destroyed."); - game.quad[ii][jj] = IHDOT; - break; - case IHE: /* Buffet ship */ - case IHF: - prout("***Starship buffeted by nova."); - if (shldup) { - if (shield >= 2000.0) shield -= 2000.0; - else { - double diff = 2000.0 - shield; - energy -= diff; - shield = 0.0; - shldup = 0; - prout("***Shields knocked out."); - game.damage[DSHIELD] += 0.005*damfac*Rand()*diff; - } - } - else energy -= 2000.0; - if (energy <= 0) { - finish(FNOVA); - return; - } - /* add in course nova contributes to kicking starship*/ - icx += sectx-hits[mm][1]; - icy += secty-hits[mm][2]; - kount++; - break; - case IHK: /* kill klingon */ - deadkl(ii,jj,iquad, ii, jj); - break; - case IHC: /* Damage/destroy big enemies */ - case IHS: - case IHR: - for_local_enemies(ll) - if (game.kx[ll]==ii && game.ky[ll]==jj) break; - game.kpower[ll] -= 800.0; /* If firepower is lost, die */ - if (game.kpower[ll] <= 0.0) { - deadkl(ii, jj, iquad, ii, jj); - break; - } - newcx = ii + ii - hits[mm][1]; - newcy = jj + jj - hits[mm][2]; - crmena(1, iquad, 2, ii, jj); - proutn(" damaged"); - if (!VALID_SECTOR(newcx, newcy)) { - /* can't leave quadrant */ - skip(1); - break; - } - iquad1 = game.quad[newcx][newcy]; - if (iquad1 == IHBLANK) { - proutn(", blasted into "); - crmena(0, IHBLANK, 2, newcx, newcy); - skip(1); - deadkl(ii, jj, iquad, newcx, newcy); - break; - } - if (iquad1 != IHDOT) { - /* can't move into something else */ - skip(1); - break; - } - proutn(", buffeted to "); - proutn(cramlc(sector, newcx, newcy)); - game.quad[ii][jj] = IHDOT; - game.quad[newcx][newcy] = iquad; - game.kx[ll] = newcx; - game.ky[ll] = newcy; - game.kavgd[ll] = sqrt(square(sectx-newcx)+square(secty-newcy)); - game.kdist[ll] = game.kavgd[ll]; - skip(1); - break; - } - } - if (top == top2) - break; - bot = top + 1; - top = top2; - } - if (kount==0) - return; - - /* Starship affected by nova -- kick it away. */ - dist = kount*0.1; - if (icx) icx = (icx < 0 ? -1 : 1); - if (icy) icy = (icy < 0 ? -1 : 1); - direc = course[3*(icx+1)+icy+2]; - if (direc == 0.0) dist = 0.0; - if (dist == 0.0) return; - Time = 10.0*dist/16.0; - skip(1); - prout("Force of nova displaces starship."); - iattak=2; /* Eliminates recursion problem */ - imove(); - Time = 10.0*dist/16.0; - return; -} - - -void snova(int insx, int insy) -{ - int comdead, nqx=0, nqy=0, nsx, nsy, num=0, kldead, iscdead; - int nrmdead, npdead; - int incipient=0; - - nsx = insy; - nsy = insy; - - if (insy== 0) { - if (insx == 1) { - /* NOVAMAX being used */ - nqx = probecx; - nqy = probecy; - } - else { - int stars = 0; - /* Scheduled supernova -- select star */ - /* logic changed here so that we won't favor quadrants in top - left of universe */ - for_quadrants(nqx) { - for_quadrants(nqy) { - stars += game.state.galaxy[nqx][nqy].stars; - } - } - if (stars == 0) return; /* nothing to supernova exists */ - num = Rand()*stars + 1; - for_quadrants(nqx) { - for_quadrants(nqy) { - num -= game.state.galaxy[nqx][nqy].stars; - if (num <= 0) break; - } - if (num <=0) break; - } -#ifdef DEBUG - if (idebug) { - proutn("Super nova here?"); - if (ja()==1) { - nqx = quadx; - nqy = quady; - } - } -#endif - } - - if (nqx != quady || nqy != quady || justin != 0) { - /* it isn't here, or we just entered (treat as inroute) */ - if (game.damage[DRADIO] == 0.0 || condit == IHDOCKED) { - skip(1); - prout("Message from Starfleet Command Stardate %.2f", game.state.date); - prout(" Supernova in %s; caution advised.", - cramlc(quadrant, nqx, nqy)); - } - } - else { - /* we are in the quadrant! */ - incipient = 1; - num = Rand()* game.state.galaxy[nqx][nqy].stars + 1; - for_sectors(nsx) { - for_sectors(nsy) { - if (game.quad[nsx][nsy]==IHSTAR) { - num--; - if (num==0) break; - } - } - if (num==0) break; - } - } - } - else { - incipient = 1; - } - - if (incipient) { - skip(1); - prouts("***RED ALERT! RED ALERT!"); - skip(1); - prout("***Incipient supernova detected at ", cramlc(sector, nsx, nsy)); - nqx = quadx; - nqy = quady; - if (square(nsx-sectx) + square(nsy-secty) <= 2.1) { - proutn("Emergency override attempts t"); - prouts("***************"); - skip(1); - stars(); - alldone=1; - } - } - /* destroy any Klingons in supernovaed quadrant */ - kldead = game.state.galaxy[nqx][nqy].klingons; - game.state.galaxy[nqx][nqy].klingons = 0; - comdead = iscdead = 0; - if (nqx==game.state.isx && nqy == game.state.isy) { - /* did in the Supercommander! */ - game.state.nscrem = game.state.isx = game.state.isy = isatb = iscate = 0; - iscdead = 1; - game.future[FSCMOVE] = game.future[FSCDBAS] = FOREVER; - } - if (game.state.remcom) { - int maxloop = game.state.remcom, l; - for (l = 1; l <= maxloop; l++) { - if (game.state.cx[l] == nqx && game.state.cy[l] == nqy) { - game.state.cx[l] = game.state.cx[game.state.remcom]; - game.state.cy[l] = game.state.cy[game.state.remcom]; - game.state.cx[game.state.remcom] = game.state.cy[game.state.remcom] = 0; - game.state.remcom--; - kldead--; - comdead++; - if (game.state.remcom==0) game.future[FTBEAM] = FOREVER; - break; - } - } - } - game.state.remkl -= kldead; - /* destroy Romulans and planets in supernovaed quadrant */ - nrmdead = game.state.galaxy[nqx][nqy].romulans; - game.state.galaxy[nqx][nqy].romulans = 0; - game.state.nromrem -= nrmdead; - npdead = num - nrmdead*10; - if (npdead) { - int l; - for (l = 0; l < inplan; l++) - if (game.state.plnets[l].x == nqx && game.state.plnets[l].y == nqy) { - DESTROY(&game.state.plnets[l]); - } - } - /* Destroy any base in supernovaed quadrant */ - if (game.state.rembase) { - int maxloop = game.state.rembase, l; - for (l = 1; l <= maxloop; l++) - if (game.state.baseqx[l]==nqx && game.state.baseqy[l]==nqy) { - game.state.baseqx[l] = game.state.baseqx[game.state.rembase]; - game.state.baseqy[l] = game.state.baseqy[game.state.rembase]; - game.state.baseqx[game.state.rembase] = game.state.baseqy[game.state.rembase] = 0; - game.state.rembase--; - break; - } - } - /* If starship caused supernova, tally up destruction */ - if (insx) { - game.state.starkl += game.state.galaxy[nqx][nqy].stars; - game.state.basekl += game.state.galaxy[nqx][nqy].starbase; - game.state.nplankl += npdead; - } - /* mark supernova in galaxy and in star chart */ - if ((quadx == nqx && quady == nqy) || - game.damage[DRADIO] == 0 || - condit == IHDOCKED) - game.state.galaxy[nqx][nqy].supernova = TRUE; - /* If supernova destroys last klingons give special message */ - if (KLINGREM==0 && (nqx != quadx || nqy != quady)) { - skip(2); - if (insx == 0) prout("Lucky you!"); - proutn("A supernova in %s has just destroyed the last Klingons.", - cramlc(quadrant, nqx, nqy)); - finish(FWON); - return; - } - /* if some Klingons remain, continue or die in supernova */ - if (alldone) finish(FSNOVAED); - return; -} - - diff --git a/finish.c b/finish.c deleted file mode 100644 index c0d3569..0000000 --- a/finish.c +++ /dev/null @@ -1,453 +0,0 @@ -#include "sst.h" -#include -#include - -void dstrct() -{ - /* Finish with a BANG! */ - chew(); - if (game.damage[DCOMPTR] != 0.0) { - prout("Computer damaged; cannot execute destruct sequence."); - return; - } - prouts("---WORKING---"); skip(1); - prouts("SELF-DESTRUCT-SEQUENCE-ACTIVATED"); skip(1); - prouts(" 10"); skip(1); - prouts(" 9"); skip(1); - prouts(" 8"); skip(1); - prouts(" 7"); skip(1); - prouts(" 6"); skip(1); - skip(1); - prout("ENTER-CORRECT-PASSWORD-TO-CONTINUE-"); - skip(1); - prout("SELF-DESTRUCT-SEQUENCE-OTHERWISE-"); - skip(1); - prout("SELF-DESTRUCT-SEQUENCE-WILL-BE-ABORTED"); - skip(1); - scan(); - chew(); - if (strcmp(game.passwd, citem) != 0) { - prouts("PASSWORD-REJECTED;"); skip(1); - prouts("CONTINUITY-EFFECTED"); - skip(2); - return; - } - prouts("PASSWORD-ACCEPTED"); skip(1); - prouts(" 5"); skip(1); - prouts(" 4"); skip(1); - prouts(" 3"); skip(1); - prouts(" 2"); skip(1); - prouts(" 1"); skip(1); - if (Rand() < 0.15) { - prouts("GOODBYE-CRUEL-WORLD"); - skip(1); - } - kaboom(); -} - -void kaboom(void) -{ - stars(); - if (ship==IHE) prouts("***"); - prouts("********* Entropy of "); - crmshp(); - prouts(" maximized *********"); - skip(1); - stars(); - skip(1); - if (nenhere != 0) { - double whammo = 25.0 * energy; - int l=1; - while (l <= nenhere) { - if (game.kpower[l]*game.kdist[l] <= whammo) - deadkl(game.kx[l],game.ky[l], game.quad[game.kx[l]][game.ky[l]], game.kx[l], game.ky[l]); - l++; - } - } - finish(FDILITHIUM); -} - - -void finish(FINTYPE ifin) -{ - int igotit = 0; - alldone = 1; - skip(3); - prout("It is stardate %.1f.", game.state.date); - skip(1); - switch (ifin) { - case FWON: // Game has been won - if (game.state.nromrem != 0) - prout("The remaining %d Romulans surrender to Starfleet Command.", - game.state.nromrem); - - prout("You have smashed the Klingon invasion fleet and saved"); - prout("the Federation."); - gamewon=1; - if (alive) { - double badpt; - badpt = 5.0*game.state.starkl + casual + 10.0*game.state.nplankl + - 45.*nhelp+100.*game.state.basekl; - if (ship == IHF) badpt += 100.0; - else if (ship == 0) badpt += 200.0; - if (badpt < 100.0) badpt = 0.0; // Close enough! - if (game.state.date-indate < 5.0 || - // killsPerDate >= RateMax - KLINGKILLED/(game.state.date-indate) >= - 0.1*skill*(skill+1.0) + 0.1 + 0.008*badpt) { - skip(1); - prout("In fact, you have done so well that Starfleet Command"); - switch (skill) { - case SKILL_NOVICE: - prout("promotes you one step in rank from \"Novice\" to \"Fair\"."); - break; - case SKILL_FAIR: - prout("promotes you one step in rank from \"Fair\" to \"Good\"."); - break; - case SKILL_GOOD: - prout("promotes you one step in rank from \"Good\" to \"Expert\"."); - break; - case SKILL_EXPERT: - prout("promotes you to Commodore Emeritus."); - skip(1); - prout("Now that you think you're really good, try playing"); - prout("the \"Emeritus\" game. It will splatter your ego."); - break; - case SKILL_EMERITUS: - skip(1); - proutn("Computer- "); - prouts("ERROR-ERROR-ERROR-ERROR"); - skip(2); - prouts(" YOUR-SKILL-HAS-EXCEEDED-THE-CAPACITY-OF-THIS-PROGRAM"); - skip(1); - prouts(" THIS-PROGRAM-MUST-SURVIVE"); - skip(1); - prouts(" THIS-PROGRAM-MUST-SURVIVE"); - skip(1); - prouts(" THIS-PROGRAM-MUST-SURVIVE"); - skip(1); - prouts(" THIS-PROGRAM-MUST?- MUST ? - SUR? ? -? VI"); - skip(2); - prout("Now you can retire and write your own Star Trek game!"); - skip(1); - break; - } - if (skill >= SKILL_EXPERT) { - if (thawed -#ifdef DEBUG - && !idebug -#endif - ) - prout("You cannot get a citation, so..."); - else { - proutn("Do you want your Commodore Emeritus Citation printed? "); - chew(); - if (ja()) { - igotit = 1; - } - } - } - } - // Only grant long life if alive (original didn't!) - skip(1); - prout("LIVE LONG AND PROSPER."); - } - score(); - if (igotit != 0) plaque(); - return; - case FDEPLETE: // Federation Resources Depleted - prout("Your time has run out and the Federation has been"); - prout("conquered. Your starship is now Klingon property,"); - prout("and you are put on trial as a war criminal. On the"); - proutn("basis of your record, you are "); - if (KLINGREM*3.0 > INKLINGTOT) { - prout("aquitted."); - skip(1); - prout("LIVE LONG AND PROSPER."); - } - else { - prout("found guilty and"); - prout("sentenced to death by slow torture."); - alive = 0; - } - score(); - return; - case FLIFESUP: - prout("Your life support reserves have run out, and"); - prout("you die of thirst, starvation, and asphyxiation."); - prout("Your starship is a derelict in space."); - break; - case FNRG: - prout("Your energy supply is exhausted."); - skip(1); - prout("Your starship is a derelict in space."); - break; - case FBATTLE: - proutn("The "); - crmshp(); - prout("has been destroyed in battle."); - skip(1); - prout("Dulce et decorum est pro patria mori."); - break; - case FNEG3: - prout("You have made three attempts to cross the negative energy"); - prout("barrier which surrounds the galaxy."); - skip(1); - prout("Your navigation is abominable."); - score(); - return; - case FNOVA: - prout("Your starship has been destroyed by a nova."); - prout("That was a great shot."); - skip(1); - break; - case FSNOVAED: - proutn("The "); - crmshp(); - prout(" has been fried by a supernova."); - prout("...Not even cinders remain..."); - break; - case FABANDN: - prout("You have been captured by the Klingons. If you still"); - prout("had a starbase to be returned to, you would have been"); - prout("repatriated and given another chance. Since you have"); - prout("no starbases, you will be mercilessly tortured to death."); - break; - case FDILITHIUM: - prout("Your starship is now an expanding cloud of subatomic particles"); - break; - case FMATERIALIZE: - prout("Starbase was unable to re-materialize your starship."); - prout("Sic transit gloria muntdi"); - break; - case FPHASER: - proutn("The "); - crmshp(); - prout(" has been cremated by its own phasers."); - break; - case FLOST: - prout("You and your landing party have been"); - prout("converted to energy, disipating through space."); - break; - case FMINING: - prout("You are left with your landing party on"); - prout("a wild jungle planet inhabited by primitive cannibals."); - skip(1); - prout("They are very fond of \"Captain Kirk\" soup."); - skip(1); - proutn("Without your leadership, the "); - crmshp(); - prout(" is destroyed."); - break; - case FDPLANET: - prout("You and your mining party perish."); - skip(1); - prout("That was a great shot."); - skip(1); - break; - case FSSC: - prout("The Galileo is instantly annihilated by the supernova."); - // no break; - case FPNOVA: - prout("You and your mining party are atomized."); - skip(1); - proutn("Mr. Spock takes command of the "); - crmshp(); - prout(" and"); - prout("joins the Romulans, reigning terror on the Federation."); - break; - case FSTRACTOR: - prout("The shuttle craft Galileo is also caught,"); - prout("and breaks up under the strain."); - skip(1); - prout("Your debris is scattered for millions of miles."); - proutn("Without your leadership, the "); - crmshp(); - prout(" is destroyed."); - break; - case FDRAY: - prout("The mutants attack and kill Spock."); - prout("Your ship is captured by Klingons, and"); - prout("your crew is put on display in a Klingon zoo."); - break; - case FTRIBBLE: - prout("Tribbles consume all remaining water,"); - prout("food, and oxygen on your ship."); - skip(1); - prout("You die of thirst, starvation, and asphyxiation."); - prout("Your starship is a derelict in space."); - break; - case FHOLE: - prout("Your ship is drawn to the center of the black hole."); - prout("You are crushed into extremely dense matter."); - break; - } - if (ship==IHF) ship= 0; - else if (ship == IHE) ship = IHF; - alive = 0; - if (KLINGREM != 0) { - double goodies = game.state.remres/inresor; - double baddies = (game.state.remkl + 2.0*game.state.remcom)/(inkling+2.0*incom); - if (goodies/baddies >= 1.0+0.5*Rand()) { - prout("As a result of your actions, a treaty with the Klingon"); - prout("Empire has been signed. The terms of the treaty are"); - if (goodies/baddies >= 3.0+Rand()) { - prout("favorable to the Federation."); - skip(1); - prout("Congratulations!"); - } - else - prout("highly unfavorable to the Federation."); - } - else - prout("The Federation will be destroyed."); - } - else { - prout("Since you took the last Klingon with you, you are a"); - prout("martyr and a hero. Someday maybe they'll erect a"); - prout("statue in your memory. Rest in peace, and try not"); - prout("to think about pigeons."); - gamewon = 1; - } - score(); -} - -void score(void) -{ - double timused = game.state.date - indate; - int ithperd, iwon, klship; - - iskill = skill; - if ((timused == 0 || KLINGREM != 0) && timused < 5.0) timused = 5.0; - perdate = KLINGKILLED/timused; - ithperd = 500*perdate + 0.5; - iwon = 0; - if (gamewon) iwon = 100*skill; - if (ship == IHE) klship = 0; - else if (ship == IHF) klship = 1; - else klship = 2; - if (gamewon == 0) game.state.nromrem = 0; // None captured if no win - iscore = 10*NKILLK + 50*NKILLC + ithperd + iwon - - 100*game.state.basekl - 100*klship - 45*nhelp -5*game.state.starkl - casual - + 20*NKILLROM + 200*NKILLSC - 10*game.state.nplankl + game.state.nromrem; - if (alive == 0) iscore -= 200; - skip(2); - prout("Your score --"); - if (NKILLROM) - prout("%6d Romulans destroyed %5d", - NKILLROM,20*NKILLROM); - if (game.state.nromrem) - prout("%6d Romulans captured %5d", - game.state.nromrem, game.state.nromrem); - if (NKILLK) - prout("%6d ordinary Klingons destroyed %5d", - NKILLK, 10*NKILLK); - if (NKILLC) - prout("%6d Klingon commanders destroyed %5d", - NKILLC, 50*NKILLC); - if (NKILLSC) - prout("%6d Super-Commander destroyed %5d", - NKILLSC, 200*NKILLSC); - if (ithperd) - prout("%6.2f Klingons per stardate %5d", - perdate, ithperd); - if (game.state.starkl) - prout("%6d stars destroyed by your action %5d", - game.state.starkl, -5*game.state.starkl); - if (game.state.nplankl) - prout("%6d planets destroyed by your action %5d", - game.state.nplankl, -10*game.state.nplankl); - if (game.state.basekl) - prout("%6d bases destroyed by your action %5d", - game.state.basekl, -100*game.state.basekl); - if (nhelp) - prout("%6d calls for help from starbase %5d", - nhelp, -45*nhelp); - if (casual) - prout("%6d casualties incurred %5d", - casual, -casual); - if (klship) - prout("%6d ship(s) lost or destroyed %5d", - klship, -100*klship); - if (alive==0) - prout("Penalty for getting yourself killed -200"); - if (gamewon) { - proutn("Bonus for winning "); - switch (skill) { - case SKILL_NOVICE: proutn("Novice game "); break; - case SKILL_FAIR: proutn("Fair game "); break; - case SKILL_GOOD: proutn("Good game "); break; - case SKILL_EXPERT: proutn("Expert game "); break; - case SKILL_EMERITUS: proutn("Emeritus game"); break; - } - prout(" %5d", iwon); - } - skip(1); - prout("TOTAL SCORE %5d", iscore); -} - -void plaque(void) { - FILE *fp=NULL; - time_t t; - char *timestring; - int nskip; - char winner[128]; - - skip(2); - - while (fp == NULL) { - proutn("File or device name for your plaque: "); - cgetline(winner, sizeof(winner)); - fp = fopen(winner, "w"); - if (fp==NULL) { - prout("Invalid name."); - } - } - - proutn("Enter name to go on plaque (up to 30 characters): "); - cgetline(winner, sizeof(winner)); - /* The 38 below must be 64 for 132-column paper */ - nskip = 38 - strlen(winner)/2; - - fprintf(fp,"\n\n\n\n"); - /* --------DRAW ENTERPRISE PICTURE. */ - fprintf(fp, " EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE\n" ); - fprintf(fp, " EEE E : : : E\n" ); - fprintf(fp, " EE EEE E : : NCC-1701 : E\n"); - fprintf(fp, "EEEEEEEEEEEEEEEE EEEEEEEEEEEEEEE : : : E\n"); - fprintf(fp, " E EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE\n"); - fprintf(fp, " EEEEEEEEE EEEEEEEEEEEEE E E\n"); - fprintf(fp, " EEEEEEE EEEEE E E E E\n"); - fprintf(fp, " EEE E E E E\n"); - fprintf(fp, " E E E E\n"); - fprintf(fp, " EEEEEEEEEEEEE E E\n"); - fprintf(fp, " EEE : EEEEEEE EEEEEEEE\n"); - fprintf(fp, " :E : EEEE E\n"); - fprintf(fp, " .-E -:----- E\n"); - fprintf(fp, " :E : E\n"); - fprintf(fp, " EE : EEEEEEEE\n"); - fprintf(fp, " EEEEEEEEEEEEEEEEEEEEEEE\n"); - fprintf(fp, "\n\n\n"); - fprintf(fp, " U. S. S. ENTERPRISE\n"); - fprintf(fp, "\n\n\n\n"); - fprintf(fp, " For demonstrating outstanding ability as a starship captain\n"); - fprintf(fp, "\n"); - fprintf(fp, " Starfleet Command bestows to you\n"); - fprintf(fp, "\n"); - fprintf(fp,"%*s%s\n\n", nskip, "", winner); - fprintf(fp, " the rank of\n\n"); - fprintf(fp, " \"Commodore Emeritus\"\n\n"); - fprintf(fp, " "); - switch (iskill) { - case SKILL_EXPERT: fprintf(fp," Expert level\n\n"); break; - case SKILL_EMERITUS: fprintf(fp,"Emeritus level\n\n"); break; - default: fprintf(fp," Cheat level\n\n"); break; - } - t = time(NULL); - timestring = ctime(&t); - fprintf(fp, " This day of %.6s %.4s, %.8s\n\n", - timestring+4, timestring+20, timestring+11); - fprintf(fp," Your score: %d\n\n", iscore); - fprintf(fp," Klingons per stardate: %.2f\n", perdate); - fclose(fp); -} diff --git a/install-sh b/install-sh new file mode 100755 index 0000000..4d4a951 --- /dev/null +++ b/install-sh @@ -0,0 +1,323 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2005-05-14.22 + +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# FSF changes to this file are in the public domain. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. It can only install one file at a time, a restriction +# shared with many OS's install programs. + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit="${DOITPROG-}" + +# put in absolute paths if you don't have them in your path; or use env. vars. + +mvprog="${MVPROG-mv}" +cpprog="${CPPROG-cp}" +chmodprog="${CHMODPROG-chmod}" +chownprog="${CHOWNPROG-chown}" +chgrpprog="${CHGRPPROG-chgrp}" +stripprog="${STRIPPROG-strip}" +rmprog="${RMPROG-rm}" +mkdirprog="${MKDIRPROG-mkdir}" + +chmodcmd="$chmodprog 0755" +chowncmd= +chgrpcmd= +stripcmd= +rmcmd="$rmprog -f" +mvcmd="$mvprog" +src= +dst= +dir_arg= +dstarg= +no_target_directory= + +usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 [OPTION]... -t DIRECTORY SRCFILES... + or: $0 [OPTION]... -d DIRECTORIES... + +In the 1st form, copy SRCFILE to DSTFILE. +In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. +In the 4th, create DIRECTORIES. + +Options: +-c (ignored) +-d create directories instead of installing files. +-g GROUP $chgrpprog installed files to GROUP. +-m MODE $chmodprog installed files to MODE. +-o USER $chownprog installed files to USER. +-s $stripprog installed files. +-t DIRECTORY install into DIRECTORY. +-T report an error if DSTFILE is a directory. +--help display this help and exit. +--version display version info and exit. + +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG +" + +while test -n "$1"; do + case $1 in + -c) shift + continue;; + + -d) dir_arg=true + shift + continue;; + + -g) chgrpcmd="$chgrpprog $2" + shift + shift + continue;; + + --help) echo "$usage"; exit $?;; + + -m) chmodcmd="$chmodprog $2" + shift + shift + continue;; + + -o) chowncmd="$chownprog $2" + shift + shift + continue;; + + -s) stripcmd=$stripprog + shift + continue;; + + -t) dstarg=$2 + shift + shift + continue;; + + -T) no_target_directory=true + shift + continue;; + + --version) echo "$0 $scriptversion"; exit $?;; + + *) # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + test -n "$dir_arg$dstarg" && break + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dstarg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dstarg" + shift # fnord + fi + shift # arg + dstarg=$arg + done + break;; + esac +done + +if test -z "$1"; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call `install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi + +for src +do + # Protect names starting with `-'. + case $src in + -*) src=./$src ;; + esac + + if test -n "$dir_arg"; then + dst=$src + src= + + if test -d "$dst"; then + mkdircmd=: + chmodcmd= + else + mkdircmd=$mkdirprog + fi + else + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dstarg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + + dst=$dstarg + # Protect names starting with `-'. + case $dst in + -*) dst=./$dst ;; + esac + + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + if test -n "$no_target_directory"; then + echo "$0: $dstarg: Is a directory" >&2 + exit 1 + fi + dst=$dst/`basename "$src"` + fi + fi + + # This sed command emulates the dirname command. + dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'` + + # Make sure that the destination directory exists. + + # Skip lots of stat calls in the usual case. + if test ! -d "$dstdir"; then + defaultIFS=' + ' + IFS="${IFS-$defaultIFS}" + + oIFS=$IFS + # Some sh's can't handle IFS=/ for some reason. + IFS='%' + set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` + shift + IFS=$oIFS + + pathcomp= + + while test $# -ne 0 ; do + pathcomp=$pathcomp$1 + shift + if test ! -d "$pathcomp"; then + $mkdirprog "$pathcomp" + # mkdir can fail with a `File exist' error in case several + # install-sh are creating the directory concurrently. This + # is OK. + test -d "$pathcomp" || exit + fi + pathcomp=$pathcomp/ + done + fi + + if test -n "$dir_arg"; then + $doit $mkdircmd "$dst" \ + && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ + && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ + && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ + && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } + + else + dstfile=`basename "$dst"` + + # Make a couple of temp file names in the proper directory. + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + trap '(exit $?); exit' 1 2 13 15 + + # Copy the file name to the temp name. + $doit $cpprog "$src" "$dsttmp" && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ + && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ + && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ + && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } && + + # Now rename the file to the real destination. + { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \ + || { + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + if test -f "$dstdir/$dstfile"; then + $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ + || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ + || { + echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 + (exit 1); exit 1 + } + else + : + fi + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" + } + } + fi || { (exit 1); exit 1; } +done + +# The final little trick to "correctly" pass the exit status to the exit trap. +{ + (exit 0); exit 0 +} + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/io.c b/io.c deleted file mode 100644 index 8698ab8..0000000 --- a/io.c +++ /dev/null @@ -1,439 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include - -#include "sst.h" -#include "sstlinux.h" - -static int rows, linecount; /* for paging */ - -WINDOW *curwnd; - -static void outro(void) -/* wrap up, either normally or due to signal */ -{ - if (game.options & OPTION_CURSES) { - clear(); - curs_set(1); - (void)refresh(); - (void)resetterm(); - //(void)echo(); - (void)endwin(); - putchar('\n'); - } -} - -void iostart(void) -{ - if (!(game.options & OPTION_CURSES)) { - rows = atoi(getenv("LINES")); - } else { - if (atexit(outro)){ - fprintf(stderr,"Unable to register outro(), exiting...\n"); - exit(1); - } - (void)initscr(); -#ifdef KEY_MIN - keypad(stdscr, TRUE); -#endif /* KEY_MIN */ - (void)saveterm(); - (void)nonl(); - (void)cbreak(); -#ifdef A_COLOR - { - start_color(); - init_pair(COLOR_BLACK, COLOR_BLACK, COLOR_BLACK); - init_pair(COLOR_GREEN, COLOR_GREEN, COLOR_BLACK); - init_pair(COLOR_RED, COLOR_RED, COLOR_BLACK); - init_pair(COLOR_CYAN, COLOR_CYAN, COLOR_BLACK); - init_pair(COLOR_WHITE, COLOR_WHITE, COLOR_BLACK); - init_pair(COLOR_MAGENTA, COLOR_MAGENTA, COLOR_BLACK); - init_pair(COLOR_BLUE, COLOR_BLUE, COLOR_BLACK); - init_pair(COLOR_YELLOW, COLOR_YELLOW, COLOR_BLACK); - } -#endif /* A_COLOR */ - //(void)noecho(); - fullscreen_window = stdscr; - srscan_window = newwin(12, 25, 0, 0); - report_window = newwin(10, 0, 1, 25); - lrscan_window = newwin(10, 0, 0, 64); - message_window = newwin(0, 0, 12, 0); - prompt_window = newwin(1, 0, LINES-2, 0); - scrollok(message_window, TRUE); - setwnd(fullscreen_window); - textcolor(DEFAULT); - } -} - - -void waitfor(void) -/* wait for user action -- OK to do nothing if on a TTY */ -{ - if (game.options & OPTION_CURSES) - getch(); -} - -void pause_game(int i) -{ - char *prompt; - char buf[BUFSIZ]; - if (i==1) { - if (skill > SKILL_FAIR) - prompt = "[ANOUNCEMENT ARRIVING...]"; - else - prompt = "[IMPORTANT ANNOUNCEMENT ARRIVING -- PRESS ENTER TO CONTINUE]"; - } - else { - if (skill > SKILL_FAIR) - prompt = "[CONTINUE?]"; - else - prompt = "[PRESS ENTER TO CONTINUE]"; - - } - if (game.options & OPTION_CURSES) { - drawmaps(0); - setwnd(prompt_window); - wclear(prompt_window); - waddstr(prompt_window, prompt); - wgetnstr(prompt_window, buf, sizeof(buf)); - wclear(prompt_window); - wrefresh(prompt_window); - setwnd(message_window); - } else { - putchar('\n'); - proutn(prompt); - fgets(buf, sizeof(buf), stdin); - if (i != 0) { - int j; - for (j = 0; j < rows; j++) - putchar('\n'); - } - linecount = 0; - } -} - - -void skip(int i) -{ - while (i-- > 0) { - if (game.options & OPTION_CURSES) { - if (curwnd == message_window && linecount >= getmaxy(curwnd) - 3) { - pause_game(0); - clrscr(); - } else { - proutn("\n"); - if (curwnd == message_window) - linecount++; - } - } else { - linecount++; - if (linecount >= rows) - pause_game(0); - else - putchar('\n'); - } - } -} - -static void vproutn(char *fmt, va_list ap) -{ - if (game.options & OPTION_CURSES) { - vwprintw(curwnd, fmt, ap); - wrefresh(curwnd); - } - else - vprintf(fmt, ap); -} - -void proutn(char *fmt, ...) -{ - va_list ap; - va_start(ap, fmt); - vproutn(fmt, ap); - va_end(ap); -} - -void prout(char *fmt, ...) -{ - va_list ap; - va_start(ap, fmt); - vproutn(fmt, ap); - va_end(ap); - skip(1); -} - -void prouts(char *fmt, ...) -/* print slowly! */ -{ - char *s, buf[BUFSIZ]; - va_list ap; - va_start(ap, fmt); - vsprintf(buf, fmt, ap); - va_end(ap); - for (s = buf; *s; s++) { - delay(30); - if (game.options & OPTION_CURSES) { - waddch(curwnd, *s); - wrefresh(curwnd); - } - else { - putchar(*s); - fflush(stdout); - } - } -} - -void cgetline(char *line, int max) -{ - if (game.options & OPTION_CURSES) { - wgetnstr(curwnd, line, max); - strcat(line, "\n"); - wrefresh(curwnd); - } else { - fgets(line, max, stdin); - } - line[strlen(line)-1] = '\0'; -} - -void setwnd(WINDOW *wnd) -/* change windows -- OK for this to be a no-op in tty mode */ -{ - if (game.options & OPTION_CURSES) { - curwnd=wnd; - curs_set(wnd == fullscreen_window || wnd == message_window || wnd == prompt_window); - } -} - -void clreol (void) -/* clear to end of line -- can be a no-op in tty mode */ -{ - if (game.options & OPTION_CURSES) { - wclrtoeol(curwnd); - wrefresh(curwnd); - } -} - -void clrscr (void) -/* clear screen -- can be a no-op in tty mode */ -{ - if (game.options & OPTION_CURSES) { - wclear(curwnd); - wmove(curwnd,0,0); - wrefresh(curwnd); - } - linecount = 0; -} - -void textcolor (int color) -{ -#ifdef A_COLOR - if (game.options & OPTION_CURSES) { - switch(color) { - case DEFAULT: - wattrset(curwnd, 0); - break; - case BLACK: - wattron(curwnd, COLOR_PAIR(COLOR_BLACK)); - break; - case BLUE: - wattron(curwnd, COLOR_PAIR(COLOR_BLUE)); - break; - case GREEN: - wattron(curwnd, COLOR_PAIR(COLOR_GREEN)); - break; - case CYAN: - wattron(curwnd, COLOR_PAIR(COLOR_CYAN)); - break; - case RED: - wattron(curwnd, COLOR_PAIR(COLOR_RED)); - break; - case MAGENTA: - wattron(curwnd, COLOR_PAIR(COLOR_MAGENTA)); - break; - case BROWN: - wattron(curwnd, COLOR_PAIR(COLOR_YELLOW)); - break; - case LIGHTGRAY: - wattron(curwnd, COLOR_PAIR(COLOR_WHITE)); - break; - case DARKGRAY: - wattron(curwnd, COLOR_PAIR(COLOR_BLACK) | A_BOLD); - break; - case LIGHTBLUE: - wattron(curwnd, COLOR_PAIR(COLOR_BLUE) | A_BOLD); - break; - case LIGHTGREEN: - wattron(curwnd, COLOR_PAIR(COLOR_GREEN) | A_BOLD); - break; - case LIGHTCYAN: - wattron(curwnd, COLOR_PAIR(COLOR_CYAN) | A_BOLD); - break; - case LIGHTRED: - wattron(curwnd, COLOR_PAIR(COLOR_RED) | A_BOLD); - break; - case LIGHTMAGENTA: - wattron(curwnd, COLOR_PAIR(COLOR_MAGENTA) | A_BOLD); - break; - case YELLOW: - wattron(curwnd, COLOR_PAIR(COLOR_YELLOW) | A_BOLD); - break; - case WHITE: - wattron(curwnd, COLOR_PAIR(COLOR_WHITE) | A_BOLD); - break; - } - } -#endif /* A_COLOR */ -} - -void highvideo (void) -{ - if (game.options & OPTION_CURSES) { - wattron(curwnd, A_REVERSE); - } -} - -void commandhook(char *cmd, int before) { -} - -/* - * Things past this point have policy implications. - */ - -void drawmaps(short l) -/* hook to be called after moving to redraw maps */ -{ - if (game.options & OPTION_CURSES) { - if (l == 1) - sensor(); - setwnd(srscan_window); - wmove(curwnd, 0, 0); - enqueue("no"); - srscan(SCAN_FULL); - if (l != 2) { - setwnd(report_window); - wclear(report_window); - wmove(report_window, 0, 0); - srscan(SCAN_NO_LEFTSIDE); - setwnd(lrscan_window); - wclear(lrscan_window); - wmove(lrscan_window, 0, 0); - enqueue("l"); - lrscan(); - } - } -} - -static void put_srscan_sym(int x, int y, char sym) -{ - wmove(srscan_window, x+1, y*2+2); - waddch(srscan_window, sym); - wrefresh(srscan_window); -} - -void boom(int ii, int jj) -/* enemy fall down, go boom */ -{ - if (game.options & OPTION_CURSES) { - drawmaps(2); - setwnd(srscan_window); - wattron(srscan_window, A_REVERSE); - put_srscan_sym(ii, jj, game.quad[ii][jj]); - sound(500); - delay(1000); - nosound(); - wattroff(srscan_window, A_REVERSE); - put_srscan_sym(ii, jj, game.quad[ii][jj]); - delay(500); - setwnd(message_window); - } -} - -void warble(void) -/* sound and visual effects for teleportation */ -{ - if (game.options & OPTION_CURSES) { - drawmaps(2); - setwnd(message_window); - sound(50); - } - prouts(" . . . . . "); - if (game.options & OPTION_CURSES) { - delay(1000); - nosound(); - } -} - -void tracktorpedo(int ix, int iy, int l, int i, int n, int iquad) -/* torpedo-track animation */ -{ - if (!game.options & OPTION_CURSES) { - if (l == 1) { - if (n != 1) { - skip(1); - proutn("Track for torpedo number %d- ", i); - } - else { - skip(1); - proutn("Torpedo track- "); - } - } else if (l==4 || l==9) - skip(1); - proutn("%d - %d ", ix, iy); - } else { - if (game.damage[DSRSENS]==0 || condit==IHDOCKED) { - if (i != 1 && l == 1) { - drawmaps(2); - delay(400); - } - if ((iquad==IHDOT)||(iquad==IHBLANK)){ - put_srscan_sym(ix, iy, '+'); - sound(l*10); - delay(100); - nosound(); - put_srscan_sym(ix, iy, iquad); - } - else { - wattron(curwnd, A_REVERSE); - put_srscan_sym(ix, iy, iquad); - sound(500); - delay(1000); - nosound(); - wattroff(curwnd, A_REVERSE); - put_srscan_sym(ix, iy, iquad); - } - } else { - proutn("%d - %d ", ix, iy); - } - } -} - -void makechart(void) -{ - if (game.options & OPTION_CURSES) { - setwnd(message_window); - wclear(message_window); - chart(0); - } -} - -void setpassword(void) -{ - if (!(game.options & OPTION_CURSES)) { - while (TRUE) { - scan(); - strcpy(game.passwd, citem); - chew(); - if (*game.passwd != 0) break; - proutn("Please type in a secret password-"); - } - } else { - int i; - for(i=0;i<3;i++) game.passwd[i]=(char)(97+(int)(Rand()*25)); - game.passwd[3]=0; - } -} - diff --git a/m4/ChangeLog b/m4/ChangeLog new file mode 100644 index 0000000..6fb230e --- /dev/null +++ b/m4/ChangeLog @@ -0,0 +1,32 @@ +2006-09-12 gettextize + + * codeset.m4: New file, from gettext-0.14.5. + * gettext.m4: New file, from gettext-0.14.5. + * glibc2.m4: New file, from gettext-0.14.5. + * glibc21.m4: New file, from gettext-0.14.5. + * iconv.m4: New file, from gettext-0.14.5. + * intdiv0.m4: New file, from gettext-0.14.5. + * intmax.m4: New file, from gettext-0.14.5. + * inttypes.m4: New file, from gettext-0.14.5. + * inttypes_h.m4: New file, from gettext-0.14.5. + * inttypes-pri.m4: New file, from gettext-0.14.5. + * isc-posix.m4: New file, from gettext-0.14.5. + * lcmessage.m4: New file, from gettext-0.14.5. + * lib-ld.m4: New file, from gettext-0.14.5. + * lib-link.m4: New file, from gettext-0.14.5. + * lib-prefix.m4: New file, from gettext-0.14.5. + * longdouble.m4: New file, from gettext-0.14.5. + * longlong.m4: New file, from gettext-0.14.5. + * nls.m4: New file, from gettext-0.14.5. + * po.m4: New file, from gettext-0.14.5. + * printf-posix.m4: New file, from gettext-0.14.5. + * progtest.m4: New file, from gettext-0.14.5. + * signed.m4: New file, from gettext-0.14.5. + * size_max.m4: New file, from gettext-0.14.5. + * stdint_h.m4: New file, from gettext-0.14.5. + * uintmax_t.m4: New file, from gettext-0.14.5. + * ulonglong.m4: New file, from gettext-0.14.5. + * wchar_t.m4: New file, from gettext-0.14.5. + * wint_t.m4: New file, from gettext-0.14.5. + * xsize.m4: New file, from gettext-0.14.5. + diff --git a/m4/codeset.m4 b/m4/codeset.m4 new file mode 100644 index 0000000..a6e67ec --- /dev/null +++ b/m4/codeset.m4 @@ -0,0 +1,21 @@ +# codeset.m4 serial AM1 (gettext-0.10.40) +dnl Copyright (C) 2000-2002 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +AC_DEFUN([AM_LANGINFO_CODESET], +[ + AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset, + [AC_TRY_LINK([#include ], + [char* cs = nl_langinfo(CODESET);], + am_cv_langinfo_codeset=yes, + am_cv_langinfo_codeset=no) + ]) + if test $am_cv_langinfo_codeset = yes; then + AC_DEFINE(HAVE_LANGINFO_CODESET, 1, + [Define if you have and nl_langinfo(CODESET).]) + fi +]) diff --git a/m4/gettext.m4 b/m4/gettext.m4 new file mode 100644 index 0000000..624a807 --- /dev/null +++ b/m4/gettext.m4 @@ -0,0 +1,549 @@ +# gettext.m4 serial 37 (gettext-0.14.4) +dnl Copyright (C) 1995-2005 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Authors: +dnl Ulrich Drepper , 1995-2000. +dnl Bruno Haible , 2000-2003. + +dnl Macro to add for using GNU gettext. + +dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]). +dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The +dnl default (if it is not specified or empty) is 'no-libtool'. +dnl INTLSYMBOL should be 'external' for packages with no intl directory, +dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory. +dnl If INTLSYMBOL is 'use-libtool', then a libtool library +dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static, +dnl depending on --{enable,disable}-{shared,static} and on the presence of +dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library +dnl $(top_builddir)/intl/libintl.a will be created. +dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext +dnl implementations (in libc or libintl) without the ngettext() function +dnl will be ignored. If NEEDSYMBOL is specified and is +dnl 'need-formatstring-macros', then GNU gettext implementations that don't +dnl support the ISO C 99 formatstring macros will be ignored. +dnl INTLDIR is used to find the intl libraries. If empty, +dnl the value `$(top_builddir)/intl/' is used. +dnl +dnl The result of the configuration is one of three cases: +dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled +dnl and used. +dnl Catalog format: GNU --> install in $(datadir) +dnl Catalog extension: .mo after installation, .gmo in source tree +dnl 2) GNU gettext has been found in the system's C library. +dnl Catalog format: GNU --> install in $(datadir) +dnl Catalog extension: .mo after installation, .gmo in source tree +dnl 3) No internationalization, always use English msgid. +dnl Catalog format: none +dnl Catalog extension: none +dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur. +dnl The use of .gmo is historical (it was needed to avoid overwriting the +dnl GNU format catalogs when building on a platform with an X/Open gettext), +dnl but we keep it in order not to force irrelevant filename changes on the +dnl maintainers. +dnl +AC_DEFUN([AM_GNU_GETTEXT], +[ + dnl Argument checking. + ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], , + [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT +])])])])]) + ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], , + [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT +])])])]) + define([gt_included_intl], ifelse([$1], [external], [no], [yes])) + define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], [])) + + AC_REQUIRE([AM_PO_SUBDIRS])dnl + ifelse(gt_included_intl, yes, [ + AC_REQUIRE([AM_INTL_SUBDIR])dnl + ]) + + dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + + dnl Sometimes libintl requires libiconv, so first search for libiconv. + dnl Ideally we would do this search only after the + dnl if test "$USE_NLS" = "yes"; then + dnl if test "$gt_cv_func_gnugettext_libc" != "yes"; then + dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT + dnl the configure script would need to contain the same shell code + dnl again, outside any 'if'. There are two solutions: + dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'. + dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE. + dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not + dnl documented, we avoid it. + ifelse(gt_included_intl, yes, , [ + AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) + ]) + + dnl Sometimes, on MacOS X, libintl requires linking with CoreFoundation. + gt_INTL_MACOSX + + dnl Set USE_NLS. + AM_NLS + + ifelse(gt_included_intl, yes, [ + BUILD_INCLUDED_LIBINTL=no + USE_INCLUDED_LIBINTL=no + ]) + LIBINTL= + LTLIBINTL= + POSUB= + + dnl If we use NLS figure out what method + if test "$USE_NLS" = "yes"; then + gt_use_preinstalled_gnugettext=no + ifelse(gt_included_intl, yes, [ + AC_MSG_CHECKING([whether included gettext is requested]) + AC_ARG_WITH(included-gettext, + [ --with-included-gettext use the GNU gettext library included here], + nls_cv_force_use_gnu_gettext=$withval, + nls_cv_force_use_gnu_gettext=no) + AC_MSG_RESULT($nls_cv_force_use_gnu_gettext) + + nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" + if test "$nls_cv_force_use_gnu_gettext" != "yes"; then + ]) + dnl User does not insist on using GNU NLS library. Figure out what + dnl to use. If GNU gettext is available we use this. Else we have + dnl to fall back to GNU NLS library. + + dnl Add a version number to the cache macros. + define([gt_api_version], ifelse([$2], [need-formatstring-macros], 3, ifelse([$2], [need-ngettext], 2, 1))) + define([gt_cv_func_gnugettext_libc], [gt_cv_func_gnugettext]gt_api_version[_libc]) + define([gt_cv_func_gnugettext_libintl], [gt_cv_func_gnugettext]gt_api_version[_libintl]) + + AC_CACHE_CHECK([for GNU gettext in libc], gt_cv_func_gnugettext_libc, + [AC_TRY_LINK([#include +]ifelse([$2], [need-formatstring-macros], +[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION +#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) +#endif +changequote(,)dnl +typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; +changequote([,])dnl +], [])[extern int _nl_msg_cat_cntr; +extern int *_nl_domain_bindings;], + [bindtextdomain ("", ""); +return * gettext ("")]ifelse([$2], [need-ngettext], [ + * ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_domain_bindings], + gt_cv_func_gnugettext_libc=yes, + gt_cv_func_gnugettext_libc=no)]) + + if test "$gt_cv_func_gnugettext_libc" != "yes"; then + dnl Sometimes libintl requires libiconv, so first search for libiconv. + ifelse(gt_included_intl, yes, , [ + AM_ICONV_LINK + ]) + dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL + dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv]) + dnl because that would add "-liconv" to LIBINTL and LTLIBINTL + dnl even if libiconv doesn't exist. + AC_LIB_LINKFLAGS_BODY([intl]) + AC_CACHE_CHECK([for GNU gettext in libintl], + gt_cv_func_gnugettext_libintl, + [gt_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $INCINTL" + gt_save_LIBS="$LIBS" + LIBS="$LIBS $LIBINTL" + dnl Now see whether libintl exists and does not depend on libiconv. + AC_TRY_LINK([#include +]ifelse([$2], [need-formatstring-macros], +[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION +#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) +#endif +changequote(,)dnl +typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; +changequote([,])dnl +], [])[extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias (const char *);], + [bindtextdomain ("", ""); +return * gettext ("")]ifelse([$2], [need-ngettext], [ + * ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias ("")], + gt_cv_func_gnugettext_libintl=yes, + gt_cv_func_gnugettext_libintl=no) + dnl Now see whether libintl exists and depends on libiconv. + if test "$gt_cv_func_gnugettext_libintl" != yes && test -n "$LIBICONV"; then + LIBS="$LIBS $LIBICONV" + AC_TRY_LINK([#include +]ifelse([$2], [need-formatstring-macros], +[#ifndef __GNU_GETTEXT_SUPPORTED_REVISION +#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) +#endif +changequote(,)dnl +typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; +changequote([,])dnl +], [])[extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias (const char *);], + [bindtextdomain ("", ""); +return * gettext ("")]ifelse([$2], [need-ngettext], [ + * ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias ("")], + [LIBINTL="$LIBINTL $LIBICONV" + LTLIBINTL="$LTLIBINTL $LTLIBICONV" + gt_cv_func_gnugettext_libintl=yes + ]) + fi + CPPFLAGS="$gt_save_CPPFLAGS" + LIBS="$gt_save_LIBS"]) + fi + + dnl If an already present or preinstalled GNU gettext() is found, + dnl use it. But if this macro is used in GNU gettext, and GNU + dnl gettext is already preinstalled in libintl, we update this + dnl libintl. (Cf. the install rule in intl/Makefile.in.) + if test "$gt_cv_func_gnugettext_libc" = "yes" \ + || { test "$gt_cv_func_gnugettext_libintl" = "yes" \ + && test "$PACKAGE" != gettext-runtime \ + && test "$PACKAGE" != gettext-tools; }; then + gt_use_preinstalled_gnugettext=yes + else + dnl Reset the values set by searching for libintl. + LIBINTL= + LTLIBINTL= + INCINTL= + fi + + ifelse(gt_included_intl, yes, [ + if test "$gt_use_preinstalled_gnugettext" != "yes"; then + dnl GNU gettext is not found in the C library. + dnl Fall back on included GNU gettext library. + nls_cv_use_gnu_gettext=yes + fi + fi + + if test "$nls_cv_use_gnu_gettext" = "yes"; then + dnl Mark actions used to generate GNU NLS library. + BUILD_INCLUDED_LIBINTL=yes + USE_INCLUDED_LIBINTL=yes + LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV" + LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV" + LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` + fi + + CATOBJEXT= + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + dnl Mark actions to use GNU gettext tools. + CATOBJEXT=.gmo + fi + ]) + + if test -n "$INTL_MACOSX_LIBS"; then + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + dnl Some extra flags are needed during linking. + LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" + LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" + fi + fi + + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + AC_DEFINE(ENABLE_NLS, 1, + [Define to 1 if translation of program messages to the user's native language + is requested.]) + else + USE_NLS=no + fi + fi + + AC_MSG_CHECKING([whether to use NLS]) + AC_MSG_RESULT([$USE_NLS]) + if test "$USE_NLS" = "yes"; then + AC_MSG_CHECKING([where the gettext function comes from]) + if test "$gt_use_preinstalled_gnugettext" = "yes"; then + if test "$gt_cv_func_gnugettext_libintl" = "yes"; then + gt_source="external libintl" + else + gt_source="libc" + fi + else + gt_source="included intl directory" + fi + AC_MSG_RESULT([$gt_source]) + fi + + if test "$USE_NLS" = "yes"; then + + if test "$gt_use_preinstalled_gnugettext" = "yes"; then + if test "$gt_cv_func_gnugettext_libintl" = "yes"; then + AC_MSG_CHECKING([how to link with libintl]) + AC_MSG_RESULT([$LIBINTL]) + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL]) + fi + + dnl For backward compatibility. Some packages may be using this. + AC_DEFINE(HAVE_GETTEXT, 1, + [Define if the GNU gettext() function is already present or preinstalled.]) + AC_DEFINE(HAVE_DCGETTEXT, 1, + [Define if the GNU dcgettext() function is already present or preinstalled.]) + fi + + dnl We need to process the po/ directory. + POSUB=po + fi + + ifelse(gt_included_intl, yes, [ + dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL + dnl to 'yes' because some of the testsuite requires it. + if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then + BUILD_INCLUDED_LIBINTL=yes + fi + + dnl Make all variables we use known to autoconf. + AC_SUBST(BUILD_INCLUDED_LIBINTL) + AC_SUBST(USE_INCLUDED_LIBINTL) + AC_SUBST(CATOBJEXT) + + dnl For backward compatibility. Some configure.ins may be using this. + nls_cv_header_intl= + nls_cv_header_libgt= + + dnl For backward compatibility. Some Makefiles may be using this. + DATADIRNAME=share + AC_SUBST(DATADIRNAME) + + dnl For backward compatibility. Some Makefiles may be using this. + INSTOBJEXT=.mo + AC_SUBST(INSTOBJEXT) + + dnl For backward compatibility. Some Makefiles may be using this. + GENCAT=gencat + AC_SUBST(GENCAT) + + dnl For backward compatibility. Some Makefiles may be using this. + INTLOBJS= + if test "$USE_INCLUDED_LIBINTL" = yes; then + INTLOBJS="\$(GETTOBJS)" + fi + AC_SUBST(INTLOBJS) + + dnl Enable libtool support if the surrounding package wishes it. + INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix + AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX) + ]) + + dnl For backward compatibility. Some Makefiles may be using this. + INTLLIBS="$LIBINTL" + AC_SUBST(INTLLIBS) + + dnl Make all documented variables known to autoconf. + AC_SUBST(LIBINTL) + AC_SUBST(LTLIBINTL) + AC_SUBST(POSUB) +]) + + +dnl Checks for all prerequisites of the intl subdirectory, +dnl except for INTL_LIBTOOL_SUFFIX_PREFIX (and possibly LIBTOOL), INTLOBJS, +dnl USE_INCLUDED_LIBINTL, BUILD_INCLUDED_LIBINTL. +AC_DEFUN([AM_INTL_SUBDIR], +[ + AC_REQUIRE([AC_PROG_INSTALL])dnl + AC_REQUIRE([AM_MKINSTALLDIRS])dnl + AC_REQUIRE([AC_PROG_CC])dnl + AC_REQUIRE([AC_CANONICAL_HOST])dnl + AC_REQUIRE([gt_GLIBC2])dnl + AC_REQUIRE([AC_PROG_RANLIB])dnl + AC_REQUIRE([AC_ISC_POSIX])dnl + AC_REQUIRE([AC_HEADER_STDC])dnl + AC_REQUIRE([AC_C_CONST])dnl + AC_REQUIRE([bh_C_SIGNED])dnl + AC_REQUIRE([AC_C_INLINE])dnl + AC_REQUIRE([AC_TYPE_OFF_T])dnl + AC_REQUIRE([AC_TYPE_SIZE_T])dnl + AC_REQUIRE([gl_AC_TYPE_LONG_LONG])dnl + AC_REQUIRE([gt_TYPE_LONGDOUBLE])dnl + AC_REQUIRE([gt_TYPE_WCHAR_T])dnl + AC_REQUIRE([gt_TYPE_WINT_T])dnl + AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) + AC_REQUIRE([gl_AC_HEADER_STDINT_H]) + AC_REQUIRE([gt_TYPE_INTMAX_T]) + AC_REQUIRE([gt_PRINTF_POSIX]) + AC_REQUIRE([AC_FUNC_ALLOCA])dnl + AC_REQUIRE([AC_FUNC_MMAP])dnl + AC_REQUIRE([gl_GLIBC21])dnl + AC_REQUIRE([gt_INTDIV0])dnl + AC_REQUIRE([gl_AC_TYPE_UINTMAX_T])dnl + AC_REQUIRE([gt_HEADER_INTTYPES_H])dnl + AC_REQUIRE([gt_INTTYPES_PRI])dnl + AC_REQUIRE([gl_XSIZE])dnl + AC_REQUIRE([gt_INTL_MACOSX])dnl + + AC_CHECK_TYPE([ptrdiff_t], , + [AC_DEFINE([ptrdiff_t], [long], + [Define as the type of the result of subtracting two pointers, if the system doesn't define it.]) + ]) + AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \ +stdlib.h string.h unistd.h sys/param.h]) + AC_CHECK_FUNCS([asprintf fwprintf getcwd getegid geteuid getgid getuid \ +mempcpy munmap putenv setenv setlocale snprintf stpcpy strcasecmp strdup \ +strtoul tsearch wcslen __argz_count __argz_stringify __argz_next \ +__fsetlocking]) + + dnl Use the _snprintf function only if it is declared (because on NetBSD it + dnl is defined as a weak alias of snprintf; we prefer to use the latter). + gt_CHECK_DECL(_snprintf, [#include ]) + gt_CHECK_DECL(_snwprintf, [#include ]) + + dnl Use the *_unlocked functions only if they are declared. + dnl (because some of them were defined without being declared in Solaris + dnl 2.5.1 but were removed in Solaris 2.6, whereas we want binaries built + dnl on Solaris 2.5.1 to run on Solaris 2.6). + dnl Don't use AC_CHECK_DECLS because it isn't supported in autoconf-2.13. + gt_CHECK_DECL(feof_unlocked, [#include ]) + gt_CHECK_DECL(fgets_unlocked, [#include ]) + gt_CHECK_DECL(getc_unlocked, [#include ]) + + case $gt_cv_func_printf_posix in + *yes) HAVE_POSIX_PRINTF=1 ;; + *) HAVE_POSIX_PRINTF=0 ;; + esac + AC_SUBST([HAVE_POSIX_PRINTF]) + if test "$ac_cv_func_asprintf" = yes; then + HAVE_ASPRINTF=1 + else + HAVE_ASPRINTF=0 + fi + AC_SUBST([HAVE_ASPRINTF]) + if test "$ac_cv_func_snprintf" = yes; then + HAVE_SNPRINTF=1 + else + HAVE_SNPRINTF=0 + fi + AC_SUBST([HAVE_SNPRINTF]) + if test "$ac_cv_func_wprintf" = yes; then + HAVE_WPRINTF=1 + else + HAVE_WPRINTF=0 + fi + AC_SUBST([HAVE_WPRINTF]) + + AM_ICONV + AM_LANGINFO_CODESET + if test $ac_cv_header_locale_h = yes; then + gt_LC_MESSAGES + fi + + if test -n "$INTL_MACOSX_LIBS"; then + CPPFLAGS="$CPPFLAGS -I/System/Library/Frameworks/CoreFoundation.framework/Headers" + fi + + dnl intl/plural.c is generated from intl/plural.y. It requires bison, + dnl because plural.y uses bison specific features. It requires at least + dnl bison-1.26 because earlier versions generate a plural.c that doesn't + dnl compile. + dnl bison is only needed for the maintainer (who touches plural.y). But in + dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put + dnl the rule in general Makefile. Now, some people carelessly touch the + dnl files or have a broken "make" program, hence the plural.c rule will + dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not + dnl present or too old. + AC_CHECK_PROGS([INTLBISON], [bison]) + if test -z "$INTLBISON"; then + ac_verc_fail=yes + else + dnl Found it, now check the version. + AC_MSG_CHECKING([version of bison]) +changequote(<<,>>)dnl + ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'` + case $ac_prog_version in + '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; + 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*) +changequote([,])dnl + ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; + *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; + esac + AC_MSG_RESULT([$ac_prog_version]) + fi + if test $ac_verc_fail = yes; then + INTLBISON=: + fi +]) + + +dnl Checks for special options needed on MacOS X. +dnl Defines INTL_MACOSX_LIBS. +AC_DEFUN([gt_INTL_MACOSX], +[ + dnl Check for API introduced in MacOS X 10.2. + AC_CACHE_CHECK([for CFPreferencesCopyAppValue], + gt_cv_func_CFPreferencesCopyAppValue, + [gt_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS -I/System/Library/Frameworks/CoreFoundation.framework/Headers" + gt_save_LIBS="$LIBS" + LIBS="$LIBS -framework CoreFoundation" + AC_TRY_LINK([#include ], + [CFPreferencesCopyAppValue(NULL, NULL)], + [gt_cv_func_CFPreferencesCopyAppValue=yes], + [gt_cv_func_CFPreferencesCopyAppValue=no]) + CPPFLAGS="$gt_save_CPPFLAGS" + LIBS="$gt_save_LIBS"]) + if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then + AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], 1, + [Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in the CoreFoundation framework.]) + fi + dnl Check for API introduced in MacOS X 10.3. + AC_CACHE_CHECK([for CFLocaleCopyCurrent], gt_cv_func_CFLocaleCopyCurrent, + [gt_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS -I/System/Library/Frameworks/CoreFoundation.framework/Headers" + gt_save_LIBS="$LIBS" + LIBS="$LIBS -framework CoreFoundation" + AC_TRY_LINK([#include ], [CFLocaleCopyCurrent();], + [gt_cv_func_CFLocaleCopyCurrent=yes], + [gt_cv_func_CFLocaleCopyCurrent=no]) + CPPFLAGS="$gt_save_CPPFLAGS" + LIBS="$gt_save_LIBS"]) + if test $gt_cv_func_CFLocaleCopyCurrent = yes; then + AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], 1, + [Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the CoreFoundation framework.]) + fi + INTL_MACOSX_LIBS= + if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then + INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" + fi + AC_SUBST([INTL_MACOSX_LIBS]) +]) + + +dnl gt_CHECK_DECL(FUNC, INCLUDES) +dnl Check whether a function is declared. +AC_DEFUN([gt_CHECK_DECL], +[ + AC_CACHE_CHECK([whether $1 is declared], ac_cv_have_decl_$1, + [AC_TRY_COMPILE([$2], [ +#ifndef $1 + char *p = (char *) $1; +#endif +], ac_cv_have_decl_$1=yes, ac_cv_have_decl_$1=no)]) + if test $ac_cv_have_decl_$1 = yes; then + gt_value=1 + else + gt_value=0 + fi + AC_DEFINE_UNQUOTED([HAVE_DECL_]translit($1, [a-z], [A-Z]), [$gt_value], + [Define to 1 if you have the declaration of `$1', and to 0 if you don't.]) +]) + + +dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version]) +AC_DEFUN([AM_GNU_GETTEXT_VERSION], []) diff --git a/m4/glibc2.m4 b/m4/glibc2.m4 new file mode 100644 index 0000000..e8f5bfe --- /dev/null +++ b/m4/glibc2.m4 @@ -0,0 +1,30 @@ +# glibc2.m4 serial 1 +dnl Copyright (C) 2000-2002, 2004 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +# Test for the GNU C Library, version 2.0 or newer. +# From Bruno Haible. + +AC_DEFUN([gt_GLIBC2], + [ + AC_CACHE_CHECK(whether we are using the GNU C Library 2 or newer, + ac_cv_gnu_library_2, + [AC_EGREP_CPP([Lucky GNU user], + [ +#include +#ifdef __GNU_LIBRARY__ + #if (__GLIBC__ >= 2) + Lucky GNU user + #endif +#endif + ], + ac_cv_gnu_library_2=yes, + ac_cv_gnu_library_2=no) + ] + ) + AC_SUBST(GLIBC2) + GLIBC2="$ac_cv_gnu_library_2" + ] +) diff --git a/m4/glibc21.m4 b/m4/glibc21.m4 new file mode 100644 index 0000000..d95fd98 --- /dev/null +++ b/m4/glibc21.m4 @@ -0,0 +1,30 @@ +# glibc21.m4 serial 3 +dnl Copyright (C) 2000-2002, 2004 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +# Test for the GNU C Library, version 2.1 or newer. +# From Bruno Haible. + +AC_DEFUN([gl_GLIBC21], + [ + AC_CACHE_CHECK(whether we are using the GNU C Library 2.1 or newer, + ac_cv_gnu_library_2_1, + [AC_EGREP_CPP([Lucky GNU user], + [ +#include +#ifdef __GNU_LIBRARY__ + #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) + Lucky GNU user + #endif +#endif + ], + ac_cv_gnu_library_2_1=yes, + ac_cv_gnu_library_2_1=no) + ] + ) + AC_SUBST(GLIBC21) + GLIBC21="$ac_cv_gnu_library_2_1" + ] +) diff --git a/m4/iconv.m4 b/m4/iconv.m4 new file mode 100644 index 0000000..654c415 --- /dev/null +++ b/m4/iconv.m4 @@ -0,0 +1,101 @@ +# iconv.m4 serial AM4 (gettext-0.11.3) +dnl Copyright (C) 2000-2002 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +AC_DEFUN([AM_ICONV_LINKFLAGS_BODY], +[ + dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + + dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV + dnl accordingly. + AC_LIB_LINKFLAGS_BODY([iconv]) +]) + +AC_DEFUN([AM_ICONV_LINK], +[ + dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and + dnl those with the standalone portable GNU libiconv installed). + + dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV + dnl accordingly. + AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) + + dnl Add $INCICONV to CPPFLAGS before performing the following checks, + dnl because if the user has installed libiconv and not disabled its use + dnl via --without-libiconv-prefix, he wants to use it. The first + dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed. + am_save_CPPFLAGS="$CPPFLAGS" + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV]) + + AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [ + am_cv_func_iconv="no, consider installing GNU libiconv" + am_cv_lib_iconv=no + AC_TRY_LINK([#include +#include ], + [iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd);], + am_cv_func_iconv=yes) + if test "$am_cv_func_iconv" != yes; then + am_save_LIBS="$LIBS" + LIBS="$LIBS $LIBICONV" + AC_TRY_LINK([#include +#include ], + [iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd);], + am_cv_lib_iconv=yes + am_cv_func_iconv=yes) + LIBS="$am_save_LIBS" + fi + ]) + if test "$am_cv_func_iconv" = yes; then + AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.]) + fi + if test "$am_cv_lib_iconv" = yes; then + AC_MSG_CHECKING([how to link with libiconv]) + AC_MSG_RESULT([$LIBICONV]) + else + dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV + dnl either. + CPPFLAGS="$am_save_CPPFLAGS" + LIBICONV= + LTLIBICONV= + fi + AC_SUBST(LIBICONV) + AC_SUBST(LTLIBICONV) +]) + +AC_DEFUN([AM_ICONV], +[ + AM_ICONV_LINK + if test "$am_cv_func_iconv" = yes; then + AC_MSG_CHECKING([for iconv declaration]) + AC_CACHE_VAL(am_cv_proto_iconv, [ + AC_TRY_COMPILE([ +#include +#include +extern +#ifdef __cplusplus +"C" +#endif +#if defined(__STDC__) || defined(__cplusplus) +size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); +#else +size_t iconv(); +#endif +], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const") + am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) + am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` + AC_MSG_RESULT([$]{ac_t:- + }[$]am_cv_proto_iconv) + AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1, + [Define as const if the declaration of iconv() needs const.]) + fi +]) diff --git a/m4/intdiv0.m4 b/m4/intdiv0.m4 new file mode 100644 index 0000000..b8d7817 --- /dev/null +++ b/m4/intdiv0.m4 @@ -0,0 +1,70 @@ +# intdiv0.m4 serial 1 (gettext-0.11.3) +dnl Copyright (C) 2002 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +AC_DEFUN([gt_INTDIV0], +[ + AC_REQUIRE([AC_PROG_CC])dnl + AC_REQUIRE([AC_CANONICAL_HOST])dnl + + AC_CACHE_CHECK([whether integer division by zero raises SIGFPE], + gt_cv_int_divbyzero_sigfpe, + [ + AC_TRY_RUN([ +#include +#include + +static void +#ifdef __cplusplus +sigfpe_handler (int sig) +#else +sigfpe_handler (sig) int sig; +#endif +{ + /* Exit with code 0 if SIGFPE, with code 1 if any other signal. */ + exit (sig != SIGFPE); +} + +int x = 1; +int y = 0; +int z; +int nan; + +int main () +{ + signal (SIGFPE, sigfpe_handler); +/* IRIX and AIX (when "xlc -qcheck" is used) yield signal SIGTRAP. */ +#if (defined (__sgi) || defined (_AIX)) && defined (SIGTRAP) + signal (SIGTRAP, sigfpe_handler); +#endif +/* Linux/SPARC yields signal SIGILL. */ +#if defined (__sparc__) && defined (__linux__) + signal (SIGILL, sigfpe_handler); +#endif + + z = x / y; + nan = y / y; + exit (1); +} +], gt_cv_int_divbyzero_sigfpe=yes, gt_cv_int_divbyzero_sigfpe=no, + [ + # Guess based on the CPU. + case "$host_cpu" in + alpha* | i[34567]86 | m68k | s390*) + gt_cv_int_divbyzero_sigfpe="guessing yes";; + *) + gt_cv_int_divbyzero_sigfpe="guessing no";; + esac + ]) + ]) + case "$gt_cv_int_divbyzero_sigfpe" in + *yes) value=1;; + *) value=0;; + esac + AC_DEFINE_UNQUOTED(INTDIV0_RAISES_SIGFPE, $value, + [Define if integer division by zero raises signal SIGFPE.]) +]) diff --git a/m4/intmax.m4 b/m4/intmax.m4 new file mode 100644 index 0000000..d99c999 --- /dev/null +++ b/m4/intmax.m4 @@ -0,0 +1,30 @@ +# intmax.m4 serial 2 (gettext-0.14.2) +dnl Copyright (C) 2002-2005 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. +dnl Test whether the system has the 'intmax_t' type, but don't attempt to +dnl find a replacement if it is lacking. + +AC_DEFUN([gt_TYPE_INTMAX_T], +[ + AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) + AC_REQUIRE([gl_AC_HEADER_STDINT_H]) + AC_CACHE_CHECK(for intmax_t, gt_cv_c_intmax_t, + [AC_TRY_COMPILE([ +#include +#include +#if HAVE_STDINT_H_WITH_UINTMAX +#include +#endif +#if HAVE_INTTYPES_H_WITH_UINTMAX +#include +#endif +], [intmax_t x = -1;], gt_cv_c_intmax_t=yes, gt_cv_c_intmax_t=no)]) + if test $gt_cv_c_intmax_t = yes; then + AC_DEFINE(HAVE_INTMAX_T, 1, + [Define if you have the 'intmax_t' type in or .]) + fi +]) diff --git a/m4/inttypes-pri.m4 b/m4/inttypes-pri.m4 new file mode 100644 index 0000000..4d56a9a --- /dev/null +++ b/m4/inttypes-pri.m4 @@ -0,0 +1,30 @@ +# inttypes-pri.m4 serial 1 (gettext-0.11.4) +dnl Copyright (C) 1997-2002 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +# Define PRI_MACROS_BROKEN if exists and defines the PRI* +# macros to non-string values. This is the case on AIX 4.3.3. + +AC_DEFUN([gt_INTTYPES_PRI], +[ + AC_REQUIRE([gt_HEADER_INTTYPES_H]) + if test $gt_cv_header_inttypes_h = yes; then + AC_CACHE_CHECK([whether the inttypes.h PRIxNN macros are broken], + gt_cv_inttypes_pri_broken, + [ + AC_TRY_COMPILE([#include +#ifdef PRId32 +char *p = PRId32; +#endif +], [], gt_cv_inttypes_pri_broken=no, gt_cv_inttypes_pri_broken=yes) + ]) + fi + if test "$gt_cv_inttypes_pri_broken" = yes; then + AC_DEFINE_UNQUOTED(PRI_MACROS_BROKEN, 1, + [Define if exists and defines unusable PRI* macros.]) + fi +]) diff --git a/m4/inttypes.m4 b/m4/inttypes.m4 new file mode 100644 index 0000000..779bcea --- /dev/null +++ b/m4/inttypes.m4 @@ -0,0 +1,25 @@ +# inttypes.m4 serial 1 (gettext-0.11.4) +dnl Copyright (C) 1997-2002 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Paul Eggert. + +# Define HAVE_INTTYPES_H if exists and doesn't clash with +# . + +AC_DEFUN([gt_HEADER_INTTYPES_H], +[ + AC_CACHE_CHECK([for inttypes.h], gt_cv_header_inttypes_h, + [ + AC_TRY_COMPILE( + [#include +#include ], + [], gt_cv_header_inttypes_h=yes, gt_cv_header_inttypes_h=no) + ]) + if test $gt_cv_header_inttypes_h = yes; then + AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H, 1, + [Define if exists and doesn't clash with .]) + fi +]) diff --git a/m4/inttypes_h.m4 b/m4/inttypes_h.m4 new file mode 100644 index 0000000..a5d075d --- /dev/null +++ b/m4/inttypes_h.m4 @@ -0,0 +1,26 @@ +# inttypes_h.m4 serial 6 +dnl Copyright (C) 1997-2004 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Paul Eggert. + +# Define HAVE_INTTYPES_H_WITH_UINTMAX if exists, +# doesn't clash with , and declares uintmax_t. + +AC_DEFUN([gl_AC_HEADER_INTTYPES_H], +[ + AC_CACHE_CHECK([for inttypes.h], gl_cv_header_inttypes_h, + [AC_TRY_COMPILE( + [#include +#include ], + [uintmax_t i = (uintmax_t) -1;], + gl_cv_header_inttypes_h=yes, + gl_cv_header_inttypes_h=no)]) + if test $gl_cv_header_inttypes_h = yes; then + AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H_WITH_UINTMAX, 1, + [Define if exists, doesn't clash with , + and declares uintmax_t. ]) + fi +]) diff --git a/m4/isc-posix.m4 b/m4/isc-posix.m4 new file mode 100644 index 0000000..74dc8f2 --- /dev/null +++ b/m4/isc-posix.m4 @@ -0,0 +1,24 @@ +# isc-posix.m4 serial 2 (gettext-0.11.2) +dnl Copyright (C) 1995-2002 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +# This file is not needed with autoconf-2.53 and newer. Remove it in 2005. + +# This test replaces the one in autoconf. +# Currently this macro should have the same name as the autoconf macro +# because gettext's gettext.m4 (distributed in the automake package) +# still uses it. Otherwise, the use in gettext.m4 makes autoheader +# give these diagnostics: +# configure.in:556: AC_TRY_COMPILE was called before AC_ISC_POSIX +# configure.in:556: AC_TRY_RUN was called before AC_ISC_POSIX + +undefine([AC_ISC_POSIX]) + +AC_DEFUN([AC_ISC_POSIX], + [ + dnl This test replaces the obsolescent AC_ISC_POSIX kludge. + AC_CHECK_LIB(cposix, strerror, [LIBS="$LIBS -lcposix"]) + ] +) diff --git a/m4/lcmessage.m4 b/m4/lcmessage.m4 new file mode 100644 index 0000000..19aa77e --- /dev/null +++ b/m4/lcmessage.m4 @@ -0,0 +1,30 @@ +# lcmessage.m4 serial 4 (gettext-0.14.2) +dnl Copyright (C) 1995-2002, 2004-2005 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Authors: +dnl Ulrich Drepper , 1995. + +# Check whether LC_MESSAGES is available in . + +AC_DEFUN([gt_LC_MESSAGES], +[ + AC_CACHE_CHECK([for LC_MESSAGES], gt_cv_val_LC_MESSAGES, + [AC_TRY_LINK([#include ], [return LC_MESSAGES], + gt_cv_val_LC_MESSAGES=yes, gt_cv_val_LC_MESSAGES=no)]) + if test $gt_cv_val_LC_MESSAGES = yes; then + AC_DEFINE(HAVE_LC_MESSAGES, 1, + [Define if your file defines LC_MESSAGES.]) + fi +]) diff --git a/m4/lib-ld.m4 b/m4/lib-ld.m4 new file mode 100644 index 0000000..96c4e2c --- /dev/null +++ b/m4/lib-ld.m4 @@ -0,0 +1,110 @@ +# lib-ld.m4 serial 3 (gettext-0.13) +dnl Copyright (C) 1996-2003 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Subroutines of libtool.m4, +dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision +dnl with libtool.m4. + +dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no. +AC_DEFUN([AC_LIB_PROG_LD_GNU], +[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld, +[# I'd rather use --version here, but apparently some GNU ld's only accept -v. +case `$LD -v 2>&1 conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by GCC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]* | [A-Za-z]:[\\/]*)] + [re_direlt='/[^/][^/]*/\.\./'] + # Canonicalize the path of ld + ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(acl_cv_path_LD, +[if test -z "$LD"; then + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + acl_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in + *GNU* | *'with BFD'*) + test "$with_gnu_ld" != no && break ;; + *) + test "$with_gnu_ld" != yes && break ;; + esac + fi + done + IFS="$ac_save_ifs" +else + acl_cv_path_LD="$LD" # Let the user override the test with a path. +fi]) +LD="$acl_cv_path_LD" +if test -n "$LD"; then + AC_MSG_RESULT($LD) +else + AC_MSG_RESULT(no) +fi +test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) +AC_LIB_PROG_LD_GNU +]) diff --git a/m4/lib-link.m4 b/m4/lib-link.m4 new file mode 100644 index 0000000..ea0b0c4 --- /dev/null +++ b/m4/lib-link.m4 @@ -0,0 +1,553 @@ +# lib-link.m4 serial 6 (gettext-0.14.3) +dnl Copyright (C) 2001-2005 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +AC_PREREQ(2.50) + +dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and +dnl the libraries corresponding to explicit and implicit dependencies. +dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and +dnl augments the CPPFLAGS variable. +AC_DEFUN([AC_LIB_LINKFLAGS], +[ + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + define([Name],[translit([$1],[./-], [___])]) + define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [ + AC_LIB_LINKFLAGS_BODY([$1], [$2]) + ac_cv_lib[]Name[]_libs="$LIB[]NAME" + ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" + ac_cv_lib[]Name[]_cppflags="$INC[]NAME" + ]) + LIB[]NAME="$ac_cv_lib[]Name[]_libs" + LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" + INC[]NAME="$ac_cv_lib[]Name[]_cppflags" + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) + AC_SUBST([LIB]NAME) + AC_SUBST([LTLIB]NAME) + dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the + dnl results of this search when this library appears as a dependency. + HAVE_LIB[]NAME=yes + undefine([Name]) + undefine([NAME]) +]) + +dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode) +dnl searches for libname and the libraries corresponding to explicit and +dnl implicit dependencies, together with the specified include files and +dnl the ability to compile and link the specified testcode. If found, it +dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and +dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and +dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs +dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. +AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], +[ + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + define([Name],[translit([$1],[./-], [___])]) + define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + + dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME + dnl accordingly. + AC_LIB_LINKFLAGS_BODY([$1], [$2]) + + dnl Add $INC[]NAME to CPPFLAGS before performing the following checks, + dnl because if the user has installed lib[]Name and not disabled its use + dnl via --without-lib[]Name-prefix, he wants to use it. + ac_save_CPPFLAGS="$CPPFLAGS" + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) + + AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [ + ac_save_LIBS="$LIBS" + LIBS="$LIBS $LIB[]NAME" + AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no]) + LIBS="$ac_save_LIBS" + ]) + if test "$ac_cv_lib[]Name" = yes; then + HAVE_LIB[]NAME=yes + AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.]) + AC_MSG_CHECKING([how to link with lib[]$1]) + AC_MSG_RESULT([$LIB[]NAME]) + else + HAVE_LIB[]NAME=no + dnl If $LIB[]NAME didn't lead to a usable library, we don't need + dnl $INC[]NAME either. + CPPFLAGS="$ac_save_CPPFLAGS" + LIB[]NAME= + LTLIB[]NAME= + fi + AC_SUBST([HAVE_LIB]NAME) + AC_SUBST([LIB]NAME) + AC_SUBST([LTLIB]NAME) + undefine([Name]) + undefine([NAME]) +]) + +dnl Determine the platform dependent parameters needed to use rpath: +dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator, +dnl hardcode_direct, hardcode_minus_L. +AC_DEFUN([AC_LIB_RPATH], +[ + dnl Tell automake >= 1.10 to complain if config.rpath is missing. + m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])]) + AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS + AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld + AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host + AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir + AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [ + CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ + ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh + . ./conftest.sh + rm -f ./conftest.sh + acl_cv_rpath=done + ]) + wl="$acl_cv_wl" + libext="$acl_cv_libext" + shlibext="$acl_cv_shlibext" + hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" + hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" + hardcode_direct="$acl_cv_hardcode_direct" + hardcode_minus_L="$acl_cv_hardcode_minus_L" + dnl Determine whether the user wants rpath handling at all. + AC_ARG_ENABLE(rpath, + [ --disable-rpath do not hardcode runtime library paths], + :, enable_rpath=yes) +]) + +dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and +dnl the libraries corresponding to explicit and implicit dependencies. +dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. +AC_DEFUN([AC_LIB_LINKFLAGS_BODY], +[ + define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + dnl By default, look in $includedir and $libdir. + use_additional=yes + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + AC_LIB_ARG_WITH([lib$1-prefix], +[ --with-lib$1-prefix[=DIR] search for lib$1 in DIR/include and DIR/lib + --without-lib$1-prefix don't search for lib$1 in includedir and libdir], +[ + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + else + additional_includedir="$withval/include" + additional_libdir="$withval/lib" + fi + fi +]) + dnl Search the library and its dependencies in $additional_libdir and + dnl $LDFLAGS. Using breadth-first-seach. + LIB[]NAME= + LTLIB[]NAME= + INC[]NAME= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='$1 $2' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + dnl See if it was already located by an earlier AC_LIB_LINKFLAGS + dnl or AC_LIB_HAVE_LINKFLAGS call. + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" + else + dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined + dnl that this library doesn't exist. So just drop it. + : + fi + else + dnl Search the library lib$name in $additional_libdir and $LDFLAGS + dnl and the already constructed $LIBNAME/$LTLIBNAME. + found_dir= + found_la= + found_so= + found_a= + if test $use_additional = yes; then + if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then + found_dir="$additional_libdir" + found_so="$additional_libdir/lib$name.$shlibext" + if test -f "$additional_libdir/lib$name.la"; then + found_la="$additional_libdir/lib$name.la" + fi + else + if test -f "$additional_libdir/lib$name.$libext"; then + found_dir="$additional_libdir" + found_a="$additional_libdir/lib$name.$libext" + if test -f "$additional_libdir/lib$name.la"; then + found_la="$additional_libdir/lib$name.la" + fi + fi + fi + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then + found_dir="$dir" + found_so="$dir/lib$name.$shlibext" + if test -f "$dir/lib$name.la"; then + found_la="$dir/lib$name.la" + fi + else + if test -f "$dir/lib$name.$libext"; then + found_dir="$dir" + found_a="$dir/lib$name.$libext" + if test -f "$dir/lib$name.la"; then + found_la="$dir/lib$name.la" + fi + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + dnl Found the library. + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + dnl Linking with a shared library. We attempt to hardcode its + dnl directory into the executable's runpath, unless it's the + dnl standard /usr/lib. + if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then + dnl No hardcoding is needed. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else + dnl Use an explicit option to hardcode DIR into the resulting + dnl binary. + dnl Potentially add DIR to ltrpathdirs. + dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + dnl The hardcoding into $LIBNAME is system dependent. + if test "$hardcode_direct" = yes; then + dnl Using DIR/libNAME.so during linking hardcodes DIR into the + dnl resulting binary. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else + if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then + dnl Use an explicit option to hardcode DIR into the resulting + dnl binary. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + dnl Potentially add DIR to rpathdirs. + dnl The rpathdirs will be appended to $LIBNAME at the end. + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + dnl Rely on "-L$found_dir". + dnl But don't add it if it's already contained in the LDFLAGS + dnl or the already constructed $LIBNAME + haveit= + for x in $LDFLAGS $LIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" + fi + if test "$hardcode_minus_L" != no; then + dnl FIXME: Not sure whether we should use + dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" + dnl here. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else + dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH + dnl here, because this doesn't fit in flags passed to the + dnl compiler. So give up. No hardcoding. This affects only + dnl very old systems. + dnl FIXME: Not sure whether we should use + dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" + dnl here. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + dnl Linking with a static library. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" + else + dnl We shouldn't come here, but anyway it's good to have a + dnl fallback. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" + fi + fi + dnl Assume the include files are nearby. + additional_includedir= + case "$found_dir" in + */lib | */lib/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'` + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + dnl Potentially add $additional_includedir to $INCNAME. + dnl But don't add it + dnl 1. if it's the standard /usr/include, + dnl 2. if it's /usr/local/include and we are using GCC on Linux, + dnl 3. if it's already present in $CPPFLAGS or the already + dnl constructed $INCNAME, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INC[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + dnl Really add $additional_includedir to $INCNAME. + INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + dnl Look for dependencies. + if test -n "$found_la"; then + dnl Read the .la file. It defines the variables + dnl dlname, library_names, old_library, dependency_libs, current, + dnl age, revision, installed, dlopen, dlpreopen, libdir. + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + dnl We use only dependency_libs. + for dep in $dependency_libs; do + case "$dep" in + -L*) + additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. + dnl But don't add it + dnl 1. if it's the standard /usr/lib, + dnl 2. if it's /usr/local/lib and we are using GCC on Linux, + dnl 3. if it's already present in $LDFLAGS or the already + dnl constructed $LIBNAME, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_libdir" != "X/usr/lib"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/lib"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + dnl Really add $additional_libdir to $LIBNAME. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + dnl Really add $additional_libdir to $LTLIBNAME. + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + dnl Potentially add DIR to rpathdirs. + dnl The rpathdirs will be appended to $LIBNAME at the end. + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + dnl Potentially add DIR to ltrpathdirs. + dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + dnl Handle this in the next round. + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + dnl Handle this in the next round. Throw away the .la's + dnl directory; it is already contained in a preceding -L + dnl option. + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + dnl Most likely an immediate library name. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" + ;; + esac + done + fi + else + dnl Didn't find the library; assume it is in the system directories + dnl known to the linker and runtime loader. (All the system + dnl directories known to the linker should also be known to the + dnl runtime loader, otherwise the system is severely misconfigured.) + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$hardcode_libdir_separator"; then + dnl Weird platform: only the last -rpath option counts, the user must + dnl pass all path elements in one option. We can arrange that for a + dnl single library, but not when more than one $LIBNAMEs are used. + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" + done + dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl. + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" + else + dnl The -rpath options are cumulative. + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + dnl When using libtool, the option that works for both libraries and + dnl executables is -R. The -R options are cumulative. + for found_dir in $ltrpathdirs; do + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" + done + fi +]) + +dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, +dnl unless already present in VAR. +dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes +dnl contains two or three consecutive elements that belong together. +AC_DEFUN([AC_LIB_APPENDTOVAR], +[ + for element in [$2]; do + haveit= + for x in $[$1]; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + [$1]="${[$1]}${[$1]:+ }$element" + fi + done +]) diff --git a/m4/lib-prefix.m4 b/m4/lib-prefix.m4 new file mode 100644 index 0000000..0d895ca --- /dev/null +++ b/m4/lib-prefix.m4 @@ -0,0 +1,153 @@ +# lib-prefix.m4 serial 4 (gettext-0.14.2) +dnl Copyright (C) 2001-2005 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and +dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't +dnl require excessive bracketing. +ifdef([AC_HELP_STRING], +[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])], +[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])]) + +dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed +dnl to access previously installed libraries. The basic assumption is that +dnl a user will want packages to use other packages he previously installed +dnl with the same --prefix option. +dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate +dnl libraries, but is otherwise very convenient. +AC_DEFUN([AC_LIB_PREFIX], +[ + AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + dnl By default, look in $includedir and $libdir. + use_additional=yes + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + AC_LIB_ARG_WITH([lib-prefix], +[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib + --without-lib-prefix don't search for libraries in includedir and libdir], +[ + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + else + additional_includedir="$withval/include" + additional_libdir="$withval/lib" + fi + fi +]) + if test $use_additional = yes; then + dnl Potentially add $additional_includedir to $CPPFLAGS. + dnl But don't add it + dnl 1. if it's the standard /usr/include, + dnl 2. if it's already present in $CPPFLAGS, + dnl 3. if it's /usr/local/include and we are using GCC on Linux, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + for x in $CPPFLAGS; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + dnl Really add $additional_includedir to $CPPFLAGS. + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" + fi + fi + fi + fi + dnl Potentially add $additional_libdir to $LDFLAGS. + dnl But don't add it + dnl 1. if it's the standard /usr/lib, + dnl 2. if it's already present in $LDFLAGS, + dnl 3. if it's /usr/local/lib and we are using GCC on Linux, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_libdir" != "X/usr/lib"; then + haveit= + for x in $LDFLAGS; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test "X$additional_libdir" = "X/usr/local/lib"; then + if test -n "$GCC"; then + case $host_os in + linux*) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + dnl Really add $additional_libdir to $LDFLAGS. + LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" + fi + fi + fi + fi + fi +]) + +dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, +dnl acl_final_exec_prefix, containing the values to which $prefix and +dnl $exec_prefix will expand at the end of the configure script. +AC_DEFUN([AC_LIB_PREPARE_PREFIX], +[ + dnl Unfortunately, prefix and exec_prefix get only finally determined + dnl at the end of configure. + if test "X$prefix" = "XNONE"; then + acl_final_prefix="$ac_default_prefix" + else + acl_final_prefix="$prefix" + fi + if test "X$exec_prefix" = "XNONE"; then + acl_final_exec_prefix='${prefix}' + else + acl_final_exec_prefix="$exec_prefix" + fi + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" + prefix="$acl_save_prefix" +]) + +dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the +dnl variables prefix and exec_prefix bound to the values they will have +dnl at the end of the configure script. +AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], +[ + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + $1 + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" +]) diff --git a/m4/longdouble.m4 b/m4/longdouble.m4 new file mode 100644 index 0000000..40cd7ce --- /dev/null +++ b/m4/longdouble.m4 @@ -0,0 +1,28 @@ +# longdouble.m4 serial 1 (gettext-0.12) +dnl Copyright (C) 2002-2003 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. +dnl Test whether the compiler supports the 'long double' type. +dnl Prerequisite: AC_PROG_CC + +AC_DEFUN([gt_TYPE_LONGDOUBLE], +[ + AC_CACHE_CHECK([for long double], gt_cv_c_long_double, + [if test "$GCC" = yes; then + gt_cv_c_long_double=yes + else + AC_TRY_COMPILE([ + /* The Stardent Vistra knows sizeof(long double), but does not support it. */ + long double foo = 0.0; + /* On Ultrix 4.3 cc, long double is 4 and double is 8. */ + int array [2*(sizeof(long double) >= sizeof(double)) - 1]; + ], , + gt_cv_c_long_double=yes, gt_cv_c_long_double=no) + fi]) + if test $gt_cv_c_long_double = yes; then + AC_DEFINE(HAVE_LONG_DOUBLE, 1, [Define if you have the 'long double' type.]) + fi +]) diff --git a/m4/longlong.m4 b/m4/longlong.m4 new file mode 100644 index 0000000..7b399e0 --- /dev/null +++ b/m4/longlong.m4 @@ -0,0 +1,23 @@ +# longlong.m4 serial 5 +dnl Copyright (C) 1999-2004 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Paul Eggert. + +# Define HAVE_LONG_LONG if 'long long' works. + +AC_DEFUN([gl_AC_TYPE_LONG_LONG], +[ + AC_CACHE_CHECK([for long long], ac_cv_type_long_long, + [AC_TRY_LINK([long long ll = 1LL; int i = 63;], + [long long llmax = (long long) -1; + return ll << i | ll >> i | llmax / ll | llmax % ll;], + ac_cv_type_long_long=yes, + ac_cv_type_long_long=no)]) + if test $ac_cv_type_long_long = yes; then + AC_DEFINE(HAVE_LONG_LONG, 1, + [Define if you have the 'long long' type.]) + fi +]) diff --git a/m4/nls.m4 b/m4/nls.m4 new file mode 100644 index 0000000..2082c3b --- /dev/null +++ b/m4/nls.m4 @@ -0,0 +1,51 @@ +# nls.m4 serial 2 (gettext-0.14.3) +dnl Copyright (C) 1995-2003, 2005 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Authors: +dnl Ulrich Drepper , 1995-2000. +dnl Bruno Haible , 2000-2003. + +AC_PREREQ(2.50) + +AC_DEFUN([AM_NLS], +[ + AC_MSG_CHECKING([whether NLS is requested]) + dnl Default is enabled NLS + AC_ARG_ENABLE(nls, + [ --disable-nls do not use Native Language Support], + USE_NLS=$enableval, USE_NLS=yes) + AC_MSG_RESULT($USE_NLS) + AC_SUBST(USE_NLS) +]) + +AC_DEFUN([AM_MKINSTALLDIRS], +[ + dnl Tell automake >= 1.10 to complain if mkinstalldirs is missing. + m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([mkinstalldirs])]) + dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly + dnl find the mkinstalldirs script in another subdir but $(top_srcdir). + dnl Try to locate it. + MKINSTALLDIRS= + if test -n "$ac_aux_dir"; then + case "$ac_aux_dir" in + /*) MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" ;; + *) MKINSTALLDIRS="\$(top_builddir)/$ac_aux_dir/mkinstalldirs" ;; + esac + fi + if test -z "$MKINSTALLDIRS"; then + MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" + fi + AC_SUBST(MKINSTALLDIRS) +]) diff --git a/m4/po.m4 b/m4/po.m4 new file mode 100644 index 0000000..f2795ee --- /dev/null +++ b/m4/po.m4 @@ -0,0 +1,429 @@ +# po.m4 serial 7 (gettext-0.14.3) +dnl Copyright (C) 1995-2005 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Authors: +dnl Ulrich Drepper , 1995-2000. +dnl Bruno Haible , 2000-2003. + +AC_PREREQ(2.50) + +dnl Checks for all prerequisites of the po subdirectory. +AC_DEFUN([AM_PO_SUBDIRS], +[ + AC_REQUIRE([AC_PROG_MAKE_SET])dnl + AC_REQUIRE([AC_PROG_INSTALL])dnl + AC_REQUIRE([AM_MKINSTALLDIRS])dnl + AC_REQUIRE([AM_NLS])dnl + + dnl Perform the following tests also if --disable-nls has been given, + dnl because they are needed for "make dist" to work. + + dnl Search for GNU msgfmt in the PATH. + dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions. + dnl The second test excludes FreeBSD msgfmt. + AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, + [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && + (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], + :) + AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) + + dnl Search for GNU xgettext 0.12 or newer in the PATH. + dnl The first test excludes Solaris xgettext and early GNU xgettext versions. + dnl The second test excludes FreeBSD xgettext. + AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, + [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && + (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], + :) + dnl Remove leftover from FreeBSD xgettext call. + rm -f messages.po + + dnl Search for GNU msgmerge 0.11 or newer in the PATH. + AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge, + [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :) + + dnl This could go away some day; the PATH_PROG_WITH_TEST already does it. + dnl Test whether we really found GNU msgfmt. + if test "$GMSGFMT" != ":"; then + dnl If it is no GNU msgfmt we define it as : so that the + dnl Makefiles still can work. + if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 && + (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then + : ; + else + GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'` + AC_MSG_RESULT( + [found $GMSGFMT program is not GNU msgfmt; ignore it]) + GMSGFMT=":" + fi + fi + + dnl This could go away some day; the PATH_PROG_WITH_TEST already does it. + dnl Test whether we really found GNU xgettext. + if test "$XGETTEXT" != ":"; then + dnl If it is no GNU xgettext we define it as : so that the + dnl Makefiles still can work. + if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 && + (if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then + : ; + else + AC_MSG_RESULT( + [found xgettext program is not GNU xgettext; ignore it]) + XGETTEXT=":" + fi + dnl Remove leftover from FreeBSD xgettext call. + rm -f messages.po + fi + + AC_OUTPUT_COMMANDS([ + for ac_file in $CONFIG_FILES; do + # Support "outfile[:infile[:infile...]]" + case "$ac_file" in + *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + esac + # PO directories have a Makefile.in generated from Makefile.in.in. + case "$ac_file" in */Makefile.in) + # Adjust a relative srcdir. + ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` + ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" + ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` + # In autoconf-2.13 it is called $ac_given_srcdir. + # In autoconf-2.50 it is called $srcdir. + test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" + case "$ac_given_srcdir" in + .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; + /*) top_srcdir="$ac_given_srcdir" ;; + *) top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + # Treat a directory as a PO directory if and only if it has a + # POTFILES.in file. This allows packages to have multiple PO + # directories under different names or in different locations. + if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then + rm -f "$ac_dir/POTFILES" + test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" + cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" + POMAKEFILEDEPS="POTFILES.in" + # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend + # on $ac_dir but don't depend on user-specified configuration + # parameters. + if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then + # The LINGUAS file contains the set of available languages. + if test -n "$OBSOLETE_ALL_LINGUAS"; then + test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" + fi + ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` + # Hide the ALL_LINGUAS assigment from automake. + eval 'ALL_LINGUAS''=$ALL_LINGUAS_' + POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" + else + # The set of available languages was given in configure.in. + eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' + fi + # Compute POFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) + # Compute UPDATEPOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) + # Compute DUMMYPOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) + # Compute GMOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) + case "$ac_given_srcdir" in + .) srcdirpre= ;; + *) srcdirpre='$(srcdir)/' ;; + esac + POFILES= + UPDATEPOFILES= + DUMMYPOFILES= + GMOFILES= + for lang in $ALL_LINGUAS; do + POFILES="$POFILES $srcdirpre$lang.po" + UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" + DUMMYPOFILES="$DUMMYPOFILES $lang.nop" + GMOFILES="$GMOFILES $srcdirpre$lang.gmo" + done + # CATALOGS depends on both $ac_dir and the user's LINGUAS + # environment variable. + INST_LINGUAS= + if test -n "$ALL_LINGUAS"; then + for presentlang in $ALL_LINGUAS; do + useit=no + if test "%UNSET%" != "$LINGUAS"; then + desiredlanguages="$LINGUAS" + else + desiredlanguages="$ALL_LINGUAS" + fi + for desiredlang in $desiredlanguages; do + # Use the presentlang catalog if desiredlang is + # a. equal to presentlang, or + # b. a variant of presentlang (because in this case, + # presentlang can be used as a fallback for messages + # which are not translated in the desiredlang catalog). + case "$desiredlang" in + "$presentlang"*) useit=yes;; + esac + done + if test $useit = yes; then + INST_LINGUAS="$INST_LINGUAS $presentlang" + fi + done + fi + CATALOGS= + if test -n "$INST_LINGUAS"; then + for lang in $INST_LINGUAS; do + CATALOGS="$CATALOGS $lang.gmo" + done + fi + test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" + sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" + for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do + if test -f "$f"; then + case "$f" in + *.orig | *.bak | *~) ;; + *) cat "$f" >> "$ac_dir/Makefile" ;; + esac + fi + done + fi + ;; + esac + done], + [# Capture the value of obsolete ALL_LINGUAS because we need it to compute + # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it + # from automake. + eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' + # Capture the value of LINGUAS because we need it to compute CATALOGS. + LINGUAS="${LINGUAS-%UNSET%}" + ]) +]) + +dnl Postprocesses a Makefile in a directory containing PO files. +AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE], +[ + # When this code is run, in config.status, two variables have already been + # set: + # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in, + # - LINGUAS is the value of the environment variable LINGUAS at configure + # time. + +changequote(,)dnl + # Adjust a relative srcdir. + ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` + ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" + ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` + # In autoconf-2.13 it is called $ac_given_srcdir. + # In autoconf-2.50 it is called $srcdir. + test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" + case "$ac_given_srcdir" in + .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; + /*) top_srcdir="$ac_given_srcdir" ;; + *) top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + + # Find a way to echo strings without interpreting backslash. + if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then + gt_echo='echo' + else + if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then + gt_echo='printf %s\n' + else + echo_func () { + cat < "$ac_file.tmp" + if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then + # Add dependencies that cannot be formulated as a simple suffix rule. + for lang in $ALL_LINGUAS; do + frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` + cat >> "$ac_file.tmp" < /dev/null; then + # Add dependencies that cannot be formulated as a simple suffix rule. + for lang in $ALL_LINGUAS; do + frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` + cat >> "$ac_file.tmp" <> "$ac_file.tmp" < +#include +/* The string "%2$d %1$d", with dollar characters protected from the shell's + dollar expansion (possibly an autoconf bug). */ +static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' }; +static char buf[100]; +int main () +{ + sprintf (buf, format, 33, 55); + return (strcmp (buf, "55 33") != 0); +}], gt_cv_func_printf_posix=yes, gt_cv_func_printf_posix=no, + [ + AC_EGREP_CPP(notposix, [ +#if defined __NetBSD__ || defined _MSC_VER || defined __MINGW32__ || defined __CYGWIN__ + notposix +#endif + ], gt_cv_func_printf_posix="guessing no", + gt_cv_func_printf_posix="guessing yes") + ]) + ]) + case $gt_cv_func_printf_posix in + *yes) + AC_DEFINE(HAVE_POSIX_PRINTF, 1, + [Define if your printf() function supports format strings with positions.]) + ;; + esac +]) diff --git a/m4/progtest.m4 b/m4/progtest.m4 new file mode 100644 index 0000000..a56365c --- /dev/null +++ b/m4/progtest.m4 @@ -0,0 +1,92 @@ +# progtest.m4 serial 4 (gettext-0.14.2) +dnl Copyright (C) 1996-2003, 2005 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Authors: +dnl Ulrich Drepper , 1996. + +AC_PREREQ(2.50) + +# Search path for a program which passes the given test. + +dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, +dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) +AC_DEFUN([AM_PATH_PROG_WITH_TEST], +[ +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + +# Find out how to test for executable files. Don't use a zero-byte file, +# as systems may use methods other than mode bits to determine executability. +cat >conf$$.file <<_ASEOF +#! /bin/sh +exit 0 +_ASEOF +chmod +x conf$$.file +if test -x conf$$.file >/dev/null 2>&1; then + ac_executable_p="test -x" +else + ac_executable_p="test -f" +fi +rm -f conf$$.file + +# Extract the first word of "$2", so it can be a program name with args. +set dummy $2; ac_word=[$]2 +AC_MSG_CHECKING([for $ac_word]) +AC_CACHE_VAL(ac_cv_path_$1, +[case "[$]$1" in + [[\\/]]* | ?:[[\\/]]*) + ac_cv_path_$1="[$]$1" # Let the user override the test with a path. + ;; + *) + ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in ifelse([$5], , $PATH, [$5]); do + IFS="$ac_save_IFS" + test -z "$ac_dir" && ac_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then + echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD + if [$3]; then + ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext" + break 2 + fi + fi + done + done + IFS="$ac_save_IFS" +dnl If no 4th arg is given, leave the cache variable unset, +dnl so AC_PATH_PROGS will keep looking. +ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" +])dnl + ;; +esac])dnl +$1="$ac_cv_path_$1" +if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then + AC_MSG_RESULT([$]$1) +else + AC_MSG_RESULT(no) +fi +AC_SUBST($1)dnl +]) diff --git a/m4/signed.m4 b/m4/signed.m4 new file mode 100644 index 0000000..048f593 --- /dev/null +++ b/m4/signed.m4 @@ -0,0 +1,17 @@ +# signed.m4 serial 1 (gettext-0.10.40) +dnl Copyright (C) 2001-2002 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +AC_DEFUN([bh_C_SIGNED], +[ + AC_CACHE_CHECK([for signed], bh_cv_c_signed, + [AC_TRY_COMPILE(, [signed char x;], bh_cv_c_signed=yes, bh_cv_c_signed=no)]) + if test $bh_cv_c_signed = no; then + AC_DEFINE(signed, , + [Define to empty if the C compiler doesn't support this keyword.]) + fi +]) diff --git a/m4/size_max.m4 b/m4/size_max.m4 new file mode 100644 index 0000000..4fe81c7 --- /dev/null +++ b/m4/size_max.m4 @@ -0,0 +1,59 @@ +# size_max.m4 serial 2 +dnl Copyright (C) 2003 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +AC_DEFUN([gl_SIZE_MAX], +[ + AC_CHECK_HEADERS(stdint.h) + dnl First test whether the system already has SIZE_MAX. + AC_MSG_CHECKING([for SIZE_MAX]) + result= + AC_EGREP_CPP([Found it], [ +#include +#if HAVE_STDINT_H +#include +#endif +#ifdef SIZE_MAX +Found it +#endif +], result=yes) + if test -z "$result"; then + dnl Define it ourselves. Here we assume that the type 'size_t' is not wider + dnl than the type 'unsigned long'. + dnl The _AC_COMPUTE_INT macro works up to LONG_MAX, since it uses 'expr', + dnl which is guaranteed to work from LONG_MIN to LONG_MAX. + _AC_COMPUTE_INT([~(size_t)0 / 10], res_hi, + [#include ], result=?) + _AC_COMPUTE_INT([~(size_t)0 % 10], res_lo, + [#include ], result=?) + _AC_COMPUTE_INT([sizeof (size_t) <= sizeof (unsigned int)], fits_in_uint, + [#include ], result=?) + if test "$fits_in_uint" = 1; then + dnl Even though SIZE_MAX fits in an unsigned int, it must be of type + dnl 'unsigned long' if the type 'size_t' is the same as 'unsigned long'. + AC_TRY_COMPILE([#include + extern size_t foo; + extern unsigned long foo; + ], [], fits_in_uint=0) + fi + if test -z "$result"; then + if test "$fits_in_uint" = 1; then + result="$res_hi$res_lo"U + else + result="$res_hi$res_lo"UL + fi + else + dnl Shouldn't happen, but who knows... + result='~(size_t)0' + fi + fi + AC_MSG_RESULT([$result]) + if test "$result" != yes; then + AC_DEFINE_UNQUOTED([SIZE_MAX], [$result], + [Define as the maximum value of type 'size_t', if the system doesn't define it.]) + fi +]) diff --git a/m4/stdint_h.m4 b/m4/stdint_h.m4 new file mode 100644 index 0000000..3355f35 --- /dev/null +++ b/m4/stdint_h.m4 @@ -0,0 +1,26 @@ +# stdint_h.m4 serial 5 +dnl Copyright (C) 1997-2004 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Paul Eggert. + +# Define HAVE_STDINT_H_WITH_UINTMAX if exists, +# doesn't clash with , and declares uintmax_t. + +AC_DEFUN([gl_AC_HEADER_STDINT_H], +[ + AC_CACHE_CHECK([for stdint.h], gl_cv_header_stdint_h, + [AC_TRY_COMPILE( + [#include +#include ], + [uintmax_t i = (uintmax_t) -1;], + gl_cv_header_stdint_h=yes, + gl_cv_header_stdint_h=no)]) + if test $gl_cv_header_stdint_h = yes; then + AC_DEFINE_UNQUOTED(HAVE_STDINT_H_WITH_UINTMAX, 1, + [Define if exists, doesn't clash with , + and declares uintmax_t. ]) + fi +]) diff --git a/m4/uintmax_t.m4 b/m4/uintmax_t.m4 new file mode 100644 index 0000000..bf83ed7 --- /dev/null +++ b/m4/uintmax_t.m4 @@ -0,0 +1,30 @@ +# uintmax_t.m4 serial 9 +dnl Copyright (C) 1997-2004 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Paul Eggert. + +AC_PREREQ(2.13) + +# Define uintmax_t to 'unsigned long' or 'unsigned long long' +# if it is not already defined in or . + +AC_DEFUN([gl_AC_TYPE_UINTMAX_T], +[ + AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) + AC_REQUIRE([gl_AC_HEADER_STDINT_H]) + if test $gl_cv_header_inttypes_h = no && test $gl_cv_header_stdint_h = no; then + AC_REQUIRE([gl_AC_TYPE_UNSIGNED_LONG_LONG]) + test $ac_cv_type_unsigned_long_long = yes \ + && ac_type='unsigned long long' \ + || ac_type='unsigned long' + AC_DEFINE_UNQUOTED(uintmax_t, $ac_type, + [Define to unsigned long or unsigned long long + if and don't define.]) + else + AC_DEFINE(HAVE_UINTMAX_T, 1, + [Define if you have the 'uintmax_t' type in or .]) + fi +]) diff --git a/m4/ulonglong.m4 b/m4/ulonglong.m4 new file mode 100644 index 0000000..dee10cc --- /dev/null +++ b/m4/ulonglong.m4 @@ -0,0 +1,23 @@ +# ulonglong.m4 serial 4 +dnl Copyright (C) 1999-2004 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Paul Eggert. + +# Define HAVE_UNSIGNED_LONG_LONG if 'unsigned long long' works. + +AC_DEFUN([gl_AC_TYPE_UNSIGNED_LONG_LONG], +[ + AC_CACHE_CHECK([for unsigned long long], ac_cv_type_unsigned_long_long, + [AC_TRY_LINK([unsigned long long ull = 1ULL; int i = 63;], + [unsigned long long ullmax = (unsigned long long) -1; + return ull << i | ull >> i | ullmax / ull | ullmax % ull;], + ac_cv_type_unsigned_long_long=yes, + ac_cv_type_unsigned_long_long=no)]) + if test $ac_cv_type_unsigned_long_long = yes; then + AC_DEFINE(HAVE_UNSIGNED_LONG_LONG, 1, + [Define if you have the 'unsigned long long' type.]) + fi +]) diff --git a/m4/wchar_t.m4 b/m4/wchar_t.m4 new file mode 100644 index 0000000..cde2129 --- /dev/null +++ b/m4/wchar_t.m4 @@ -0,0 +1,20 @@ +# wchar_t.m4 serial 1 (gettext-0.12) +dnl Copyright (C) 2002-2003 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. +dnl Test whether has the 'wchar_t' type. +dnl Prerequisite: AC_PROG_CC + +AC_DEFUN([gt_TYPE_WCHAR_T], +[ + AC_CACHE_CHECK([for wchar_t], gt_cv_c_wchar_t, + [AC_TRY_COMPILE([#include + wchar_t foo = (wchar_t)'\0';], , + gt_cv_c_wchar_t=yes, gt_cv_c_wchar_t=no)]) + if test $gt_cv_c_wchar_t = yes; then + AC_DEFINE(HAVE_WCHAR_T, 1, [Define if you have the 'wchar_t' type.]) + fi +]) diff --git a/m4/wint_t.m4 b/m4/wint_t.m4 new file mode 100644 index 0000000..b8fff9c --- /dev/null +++ b/m4/wint_t.m4 @@ -0,0 +1,20 @@ +# wint_t.m4 serial 1 (gettext-0.12) +dnl Copyright (C) 2003 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. +dnl Test whether has the 'wint_t' type. +dnl Prerequisite: AC_PROG_CC + +AC_DEFUN([gt_TYPE_WINT_T], +[ + AC_CACHE_CHECK([for wint_t], gt_cv_c_wint_t, + [AC_TRY_COMPILE([#include + wint_t foo = (wchar_t)'\0';], , + gt_cv_c_wint_t=yes, gt_cv_c_wint_t=no)]) + if test $gt_cv_c_wint_t = yes; then + AC_DEFINE(HAVE_WINT_T, 1, [Define if you have the 'wint_t' type.]) + fi +]) diff --git a/m4/xsize.m4 b/m4/xsize.m4 new file mode 100644 index 0000000..85bb721 --- /dev/null +++ b/m4/xsize.m4 @@ -0,0 +1,13 @@ +# xsize.m4 serial 3 +dnl Copyright (C) 2003-2004 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_XSIZE], +[ + dnl Prerequisites of lib/xsize.h. + AC_REQUIRE([gl_SIZE_MAX]) + AC_REQUIRE([AC_C_INLINE]) + AC_CHECK_HEADERS(stdint.h) +]) diff --git a/makehelp.py b/makehelp.py deleted file mode 100755 index 0a171f2..0000000 --- a/makehelp.py +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env python -# -# Generate an on-line help file for SST 2K from the text generated from -# the XML documentation. -# -# By Eric S. Raymond for the Super Star Trek project -import os, re, sys - -enddelim = "********\n" - -# This is the part most likely to bit-rot -beginmarker1 = "Mnemonic:" -endmarker1 = "Miscellaneous Notes" -beginmarker2 = " ABBREV" -endmarker2 = "Game History and Modifications" - -fp = open("sst-doc.txt", "r") -savetext = "" -state = 0 -while True: - line = fp.readline() - if not line: - break - if state == 0 and line.startswith(beginmarker1): - line = "%% " + line[12:].lstrip() - state = 1 - if state == 0 and line.startswith(beginmarker2): - savetext += enddelim + "%% ABBREV\n" - state = 2 - if state == 1: - if line.find(endmarker1) > -1: - state = 0 - if state == 2: - if line.find(endmarker2) > -1: - state = 0 - if state: - savetext += line - -# Remove the section titles -savetext = re.sub("\n+.*\n*Mnemonic:\\s*", "\n********\n%% ", savetext) - -# Hack Unicode non-breaking spaces into ordinary spaces -savetext = savetext.replace("\xc2\xa0", " ").replace("\240", "") - -sys.stdout.write(savetext + enddelim) diff --git a/missing b/missing new file mode 100755 index 0000000..894e786 --- /dev/null +++ b/missing @@ -0,0 +1,360 @@ +#! /bin/sh +# Common stub for a few missing GNU programs while installing. + +scriptversion=2005-06-08.21 + +# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005 +# Free Software Foundation, Inc. +# Originally by Fran,cois Pinard , 1996. + +# 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, 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., 51 Franklin Street, Fifth Floor, Boston, MA +# 02110-1301, USA. + +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +if test $# -eq 0; then + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 +fi + +run=: + +# In the cases where this matters, `missing' is being run in the +# srcdir already. +if test -f configure.ac; then + configure_ac=configure.ac +else + configure_ac=configure.in +fi + +msg="missing on your system" + +case "$1" in +--run) + # Try to run requested program, and just exit if it succeeds. + run= + shift + "$@" && exit 0 + # Exit code 63 means version mismatch. This often happens + # when the user try to use an ancient version of a tool on + # a file that requires a minimum version. In this case we + # we should proceed has if the program had been absent, or + # if --run hadn't been passed. + if test $? = 63; then + run=: + msg="probably too old" + fi + ;; + + -h|--h|--he|--hel|--help) + echo "\ +$0 [OPTION]... PROGRAM [ARGUMENT]... + +Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an +error status if there is no known handling for PROGRAM. + +Options: + -h, --help display this help and exit + -v, --version output version information and exit + --run try to run the given command, and emulate it if it fails + +Supported PROGRAM values: + aclocal touch file \`aclocal.m4' + autoconf touch file \`configure' + autoheader touch file \`config.h.in' + automake touch all \`Makefile.in' files + bison create \`y.tab.[ch]', if possible, from existing .[ch] + flex create \`lex.yy.c', if possible, from existing .c + help2man touch the output file + lex create \`lex.yy.c', if possible, from existing .c + makeinfo touch the output file + tar try tar, gnutar, gtar, then tar without non-portable flags + yacc create \`y.tab.[ch]', if possible, from existing .[ch] + +Send bug reports to ." + exit $? + ;; + + -v|--v|--ve|--ver|--vers|--versi|--versio|--version) + echo "missing $scriptversion (GNU Automake)" + exit $? + ;; + + -*) + echo 1>&2 "$0: Unknown \`$1' option" + echo 1>&2 "Try \`$0 --help' for more information" + exit 1 + ;; + +esac + +# Now exit if we have it, but it failed. Also exit now if we +# don't have it and --version was passed (most likely to detect +# the program). +case "$1" in + lex|yacc) + # Not GNU programs, they don't have --version. + ;; + + tar) + if test -n "$run"; then + echo 1>&2 "ERROR: \`tar' requires --run" + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + exit 1 + fi + ;; + + *) + if test -z "$run" && ($1 --version) > /dev/null 2>&1; then + # We have it, but it failed. + exit 1 + elif test "x$2" = "x--version" || test "x$2" = "x--help"; then + # Could not run --version or --help. This is probably someone + # running `$TOOL --version' or `$TOOL --help' to check whether + # $TOOL exists and not knowing $TOOL uses missing. + exit 1 + fi + ;; +esac + +# If it does not exist, or fails to run (possibly an outdated version), +# try to emulate it. +case "$1" in + aclocal*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acinclude.m4' or \`${configure_ac}'. You might want + to install the \`Automake' and \`Perl' packages. Grab them from + any GNU archive site." + touch aclocal.m4 + ;; + + autoconf) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`${configure_ac}'. You might want to install the + \`Autoconf' and \`GNU m4' packages. Grab them from any GNU + archive site." + touch configure + ;; + + autoheader) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`acconfig.h' or \`${configure_ac}'. You might want + to install the \`Autoconf' and \`GNU m4' packages. Grab them + from any GNU archive site." + files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` + test -z "$files" && files="config.h" + touch_files= + for f in $files; do + case "$f" in + *:*) touch_files="$touch_files "`echo "$f" | + sed -e 's/^[^:]*://' -e 's/:.*//'`;; + *) touch_files="$touch_files $f.in";; + esac + done + touch $touch_files + ;; + + automake*) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. + You might want to install the \`Automake' and \`Perl' packages. + Grab them from any GNU archive site." + find . -type f -name Makefile.am -print | + sed 's/\.am$/.in/' | + while read f; do touch "$f"; done + ;; + + autom4te) + echo 1>&2 "\ +WARNING: \`$1' is needed, but is $msg. + You might have modified some files without having the + proper tools for further handling them. + You can get \`$1' as part of \`Autoconf' from any GNU + archive site." + + file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'` + test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'` + if test -f "$file"; then + touch $file + else + test -z "$file" || exec >$file + echo "#! /bin/sh" + echo "# Created by GNU Automake missing as a replacement of" + echo "# $ $@" + echo "exit 0" + chmod +x $file + exit 1 + fi + ;; + + bison|yacc) + echo 1>&2 "\ +WARNING: \`$1' $msg. You should only need it if + you modified a \`.y' file. You may need the \`Bison' package + in order for those modifications to take effect. You can get + \`Bison' from any GNU archive site." + rm -f y.tab.c y.tab.h + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.y) + SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.c + fi + SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" y.tab.h + fi + ;; + esac + fi + if [ ! -f y.tab.h ]; then + echo >y.tab.h + fi + if [ ! -f y.tab.c ]; then + echo 'main() { return 0; }' >y.tab.c + fi + ;; + + lex|flex) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.l' file. You may need the \`Flex' package + in order for those modifications to take effect. You can get + \`Flex' from any GNU archive site." + rm -f lex.yy.c + if [ $# -ne 1 ]; then + eval LASTARG="\${$#}" + case "$LASTARG" in + *.l) + SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` + if [ -f "$SRCFILE" ]; then + cp "$SRCFILE" lex.yy.c + fi + ;; + esac + fi + if [ ! -f lex.yy.c ]; then + echo 'main() { return 0; }' >lex.yy.c + fi + ;; + + help2man) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a dependency of a manual page. You may need the + \`Help2man' package in order for those modifications to take + effect. You can get \`Help2man' from any GNU archive site." + + file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` + if test -z "$file"; then + file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'` + fi + if [ -f "$file" ]; then + touch $file + else + test -z "$file" || exec >$file + echo ".ab help2man is required to generate this page" + exit 1 + fi + ;; + + makeinfo) + echo 1>&2 "\ +WARNING: \`$1' is $msg. You should only need it if + you modified a \`.texi' or \`.texinfo' file, or any other file + indirectly affecting the aspect of the manual. The spurious + call might also be the consequence of using a buggy \`make' (AIX, + DU, IRIX). You might want to install the \`Texinfo' package or + the \`GNU make' package. Grab either from any GNU archive site." + # The file to touch is that specified with -o ... + file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'` + if test -z "$file"; then + # ... or it is the one specified with @setfilename ... + infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` + file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile` + # ... or it is derived from the source name (dir/f.texi becomes f.info) + test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info + fi + # If the file does not exist, the user really needs makeinfo; + # let's fail without touching anything. + test -f $file || exit 1 + touch $file + ;; + + tar) + shift + + # We have already tried tar in the generic part. + # Look for gnutar/gtar before invocation to avoid ugly error + # messages. + if (gnutar --version > /dev/null 2>&1); then + gnutar "$@" && exit 0 + fi + if (gtar --version > /dev/null 2>&1); then + gtar "$@" && exit 0 + fi + firstarg="$1" + if shift; then + case "$firstarg" in + *o*) + firstarg=`echo "$firstarg" | sed s/o//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + case "$firstarg" in + *h*) + firstarg=`echo "$firstarg" | sed s/h//` + tar "$firstarg" "$@" && exit 0 + ;; + esac + fi + + echo 1>&2 "\ +WARNING: I can't seem to be able to run \`tar' with the given arguments. + You may want to install GNU tar or Free paxutils, or check the + command line arguments." + exit 1 + ;; + + *) + echo 1>&2 "\ +WARNING: \`$1' is needed, and is $msg. + You might have modified some files without having the + proper tools for further handling them. Check the \`README' file, + it often tells you about the needed prerequisites for installing + this package. You may also peek at any GNU archive site, in case + some other package would contain this missing \`$1' program." + exit 1 + ;; +esac + +exit 0 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/mkinstalldirs b/mkinstalldirs new file mode 100755 index 0000000..6fbe5e1 --- /dev/null +++ b/mkinstalldirs @@ -0,0 +1,150 @@ +#! /bin/sh +# mkinstalldirs --- make directory hierarchy + +scriptversion=2004-02-15.20 + +# Original author: Noah Friedman +# Created: 1993-05-16 +# Public domain. +# +# This file is maintained in Automake, please report +# bugs to or send patches to +# . + +errstatus=0 +dirmode="" + +usage="\ +Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ... + +Create each directory DIR (with mode MODE, if specified), including all +leading file name components. + +Report bugs to ." + +# process command line arguments +while test $# -gt 0 ; do + case $1 in + -h | --help | --h*) # -h for help + echo "$usage" + exit 0 + ;; + -m) # -m PERM arg + shift + test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } + dirmode=$1 + shift + ;; + --version) + echo "$0 $scriptversion" + exit 0 + ;; + --) # stop option processing + shift + break + ;; + -*) # unknown option + echo "$usage" 1>&2 + exit 1 + ;; + *) # first non-opt arg + break + ;; + esac +done + +for file +do + if test -d "$file"; then + shift + else + break + fi +done + +case $# in + 0) exit 0 ;; +esac + +# Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and +# mkdir -p a/c at the same time, both will detect that a is missing, +# one will create a, then the other will try to create a and die with +# a "File exists" error. This is a problem when calling mkinstalldirs +# from a parallel make. We use --version in the probe to restrict +# ourselves to GNU mkdir, which is thread-safe. +case $dirmode in + '') + if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then + echo "mkdir -p -- $*" + exec mkdir -p -- "$@" + else + # On NextStep and OpenStep, the `mkdir' command does not + # recognize any option. It will interpret all options as + # directories to create, and then abort because `.' already + # exists. + test -d ./-p && rmdir ./-p + test -d ./--version && rmdir ./--version + fi + ;; + *) + if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 && + test ! -d ./--version; then + echo "mkdir -m $dirmode -p -- $*" + exec mkdir -m "$dirmode" -p -- "$@" + else + # Clean up after NextStep and OpenStep mkdir. + for d in ./-m ./-p ./--version "./$dirmode"; + do + test -d $d && rmdir $d + done + fi + ;; +esac + +for file +do + set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` + shift + + pathcomp= + for d + do + pathcomp="$pathcomp$d" + case $pathcomp in + -*) pathcomp=./$pathcomp ;; + esac + + if test ! -d "$pathcomp"; then + echo "mkdir $pathcomp" + + mkdir "$pathcomp" || lasterr=$? + + if test ! -d "$pathcomp"; then + errstatus=$lasterr + else + if test ! -z "$dirmode"; then + echo "chmod $dirmode $pathcomp" + lasterr="" + chmod "$dirmode" "$pathcomp" || lasterr=$? + + if test ! -z "$lasterr"; then + errstatus=$lasterr + fi + fi + fi + fi + + pathcomp="$pathcomp/" + done +done + +exit $errstatus + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-end: "$" +# End: diff --git a/moving.c b/moving.c deleted file mode 100644 index a5d11b3..0000000 --- a/moving.c +++ /dev/null @@ -1,1009 +0,0 @@ -#include -#include "sstlinux.h" -#include "sst.h" - -static void getcd(int, int); - -void imove(void) -{ - double angle, deltax, deltay, bigger, x, y, - finald, finalx, finaly, stopegy, probf; - int trbeam = 0, n, l, ix=0, iy=0, kink, kinks, iquad; - - if (inorbit) { - prout("Helmsman Sulu- \"Leaving standard orbit.\""); - inorbit = FALSE; - } - - angle = ((15.0 - direc) * 0.5235988); - deltax = -sin(angle); - deltay = cos(angle); - if (fabs(deltax) > fabs(deltay)) - bigger = fabs(deltax); - else - bigger = fabs(deltay); - - deltay /= bigger; - deltax /= bigger; - - /* If tractor beam is to occur, don't move full distance */ - if (game.state.date+Time >= game.future[FTBEAM]) { - trbeam = 1; - condit = IHRED; - dist = dist*(game.future[FTBEAM]-game.state.date)/Time + 0.1; - Time = game.future[FTBEAM] - game.state.date + 1e-5; - } - /* Move within the quadrant */ - game.quad[sectx][secty] = IHDOT; - x = sectx; - y = secty; - n = 10.0*dist*bigger+0.5; - - if (n > 0) { - for (l = 1; l <= n; l++) { - ix = (x += deltax) + 0.5; - iy = (y += deltay) + 0.5; - if (!VALID_SECTOR(ix, iy)) { - /* Leaving quadrant -- allow final enemy attack */ - /* Don't do it if being pushed by Nova */ - if (nenhere != 0 && iattak != 2) { - newcnd(); - for_local_enemies(l) { - finald = sqrt((ix-game.kx[l])*(double)(ix-game.kx[l]) + - (iy-game.ky[l])*(double)(iy-game.ky[l])); - game.kavgd[l] = 0.5 * (finald+game.kdist[l]); - } - /* - * Stas Sergeev added the condition - * that attacks only happen if Klingons - * are present and your skill is good. - */ - if (skill > SKILL_GOOD && klhere > 0 && !game.state.galaxy[quadx][quady].supernova) - attack(0); - if (alldone) return; - } - /* compute final position -- new quadrant and sector */ - x = QUADSIZE*(quadx-1)+sectx; - y = QUADSIZE*(quady-1)+secty; - ix = x+10.0*dist*bigger*deltax+0.5; - iy = y+10.0*dist*bigger*deltay+0.5; - /* check for edge of galaxy */ - kinks = 0; - do { - kink = 0; - if (ix <= 0) { - ix = -ix + 1; - kink = 1; - } - if (iy <= 0) { - iy = -iy + 1; - kink = 1; - } - if (ix > GALSIZE*QUADSIZE) { - ix = (GALSIZE*QUADSIZE*2)+1 - ix; - kink = 1; - } - if (iy > GALSIZE*QUADSIZE) { - iy = (GALSIZE*QUADSIZE*2)+1 - iy; - kink = 1; - } - if (kink) kinks = 1; - } while (kink); - - if (kinks) { - nkinks += 1; - if (nkinks == 3) { - /* Three strikes -- you're out! */ - finish(FNEG3); - return; - } - skip(1); - prout("YOU HAVE ATTEMPTED TO CROSS THE NEGATIVE ENERGY BARRIER"); - prout("AT THE EDGE OF THE GALAXY. THE THIRD TIME YOU TRY THIS,"); - prout("YOU WILL BE DESTROYED."); - } - /* Compute final position in new quadrant */ - if (trbeam) return; /* Don't bother if we are to be beamed */ - quadx = (ix+(QUADSIZE-1))/QUADSIZE; - quady = (iy+(QUADSIZE-1))/QUADSIZE; - sectx = ix - QUADSIZE*(quadx-1); - secty = iy - QUADSIZE*(quady-1); - skip(1); - prout("Entering %s.", - cramlc(quadrant, quadx, quady)); - game.quad[sectx][secty] = ship; - newqad(0); - if (skill>SKILL_NOVICE) attack(0); - return; - } - iquad = game.quad[ix][iy]; - if (iquad != IHDOT) { - /* object encountered in flight path */ - stopegy = 50.0*dist/Time; - dist=0.1*sqrt((sectx-ix)*(double)(sectx-ix) + - (secty-iy)*(double)(secty-iy)); - switch (iquad) { - case IHT: /* Ram a Tholian */ - case IHK: /* Ram enemy ship */ - case IHC: - case IHS: - case IHR: - case IHQUEST: - sectx = ix; - secty = iy; - ram(0, iquad, sectx, secty); - finalx = sectx; - finaly = secty; - break; - case IHBLANK: - skip(1); - prouts("***RED ALERT! RED ALERT!"); - skip(1); - proutn("***"); - crmshp(); - proutn(" pulled into black hole at "); - prout(cramlc(sector, ix, iy)); - /* - * Getting pulled into a black hole was certain - * death in Almy's original. Stas Sergeev added a - * possibility that you'll get timewarped instead. - */ - n=0; - for (l=0;l0) - n++; - probf=pow(1.4,(energy+shield)/5000.0-1.0)*pow(1.3,1.0/(n+1)-1.0); - if ((game.options & OPTION_BLKHOLE) && Rand()>probf) - timwrp(); - else - finish(FHOLE); - return; - default: - /* something else */ - skip(1); - crmshp(); - if (iquad == IHWEB) - proutn(" encounters Tholian web at "); - else - proutn(" blocked by object at "); - proutn(cramlc(sector, ix,iy)); - prout(";"); - proutn("Emergency stop required "); - prout("%2d units of energy.", (int)stopegy); - energy -= stopegy; - finalx = x-deltax+0.5; - sectx = finalx; - finaly = y-deltay+0.5; - secty = finaly; - if (energy <= 0) { - finish(FNRG); - return; - } - break; - } - goto no_quad_change; /* sorry! */ - } - } - dist = 0.1*sqrt((sectx-ix)*(double)(sectx-ix) + - (secty-iy)*(double)(secty-iy)); - sectx = ix; - secty = iy; - } - finalx = sectx; - finaly = secty; -no_quad_change: - /* No quadrant change -- compute new avg enemy distances */ - game.quad[sectx][secty] = ship; - if (nenhere) { - for_local_enemies(l) { - finald = sqrt((ix-game.kx[l])*(double)(ix-game.kx[l]) + - (iy-game.ky[l])*(double)(iy-game.ky[l])); - game.kavgd[l] = 0.5 * (finald+game.kdist[l]); - game.kdist[l] = finald; - } - sortkl(); - if (!game.state.galaxy[quadx][quady].supernova && iattak == 0) - attack(0); - for_local_enemies(l) game.kavgd[l] = game.kdist[l]; - } - newcnd(); - iattak = 0; - drawmaps(0); - setwnd(message_window); - return; -} - -void dock(int l) -{ - chew(); - if (condit == IHDOCKED && l) { - prout("Already docked."); - return; - } - if (inorbit) { - prout("You must first leave standard orbit."); - return; - } - if (basex==0 || abs(sectx-basex) > 1 || abs(secty-basey) > 1) { - crmshp(); - prout(" not adjacent to base."); - return; - } - condit = IHDOCKED; - if (l) prout("Docked."); - ididit=1; - if (energy < inenrg) energy = inenrg; - shield = inshld; - torps = intorps; - lsupres = inlsr; - if (game.damage[DRADIO] == 0.0 && - (game.future[FCDBAS] < FOREVER || isatb == 1) && iseenit == 0) { - /* get attack report from base */ - prout("Lt. Uhura- \"Captain, an important message from the starbase:\""); - attakreport(0); - iseenit = 1; - } -} - -static void getcd(int isprobe, int akey) { - /* This program originally required input in terms of a (clock) - direction and distance. Somewhere in history, it was changed to - cartesian coordinates. So we need to convert. I think - "manual" input should still be done this way -- it's a real - pain if the computer isn't working! Manual mode is still confusing - because it involves giving x and y motions, yet the coordinates - are always displayed y - x, where +y is downward! */ - - - int irowq=quadx, icolq=quady, irows, icols, itemp=0, iprompt=0, key=0; - double xi, xj, xk, xl; - double deltax, deltay; - int automatic = -1; - - /* Get course direction and distance. If user types bad values, return - with DIREC = -1.0. */ - - direc = -1.0; - - if (landed == 1 && !isprobe) { - prout("Dummy! You can't leave standard orbit until you"); - proutn("are back aboard the "); - crmshp(); - prout("."); - chew(); - return; - } - while (automatic == -1) { - if (game.damage[DCOMPTR]) { - if (isprobe) - prout("Computer damaged; manual navigation only"); - else - prout("Computer damaged; manual movement only"); - chew(); - automatic = 0; - key = IHEOL; - break; - } - if (isprobe && akey != -1) { - /* For probe launch, use pre-scaned value first time */ - key = akey; - akey = -1; - } - else - key = scan(); - - if (key == IHEOL) { - proutn("Manual or automatic- "); - iprompt = 1; - chew(); - } - else if (key == IHALPHA) { - if (isit("manual")) { - automatic =0; - key = scan(); - break; - } - else if (isit("automatic")) { - automatic = 1; - key = scan(); - break; - } - else { - huh(); - chew(); - return; - } - } - else { /* numeric */ - if (isprobe) - prout("(Manual navigation assumed.)"); - else - prout("(Manual movement assumed.)"); - automatic = 0; - break; - } - } - - if (automatic) { - while (key == IHEOL) { - if (isprobe) - proutn("Target quadrant or quadrant§or- "); - else - proutn("Destination sector or quadrant§or- "); - chew(); - iprompt = 1; - key = scan(); - } - - if (key != IHREAL) { - huh(); - return; - } - xi = aaitem; - key = scan(); - if (key != IHREAL){ - huh(); - return; - } - xj = aaitem; - key = scan(); - if (key == IHREAL) { - /* both quadrant and sector specified */ - xk = aaitem; - key = scan(); - if (key != IHREAL) { - huh(); - return; - } - xl = aaitem; - - irowq = xi + 0.5; - icolq = xj + 0.5; - irows = xk + 0.5; - icols = xl + 0.5; - } - else { - if (isprobe) { - /* only quadrant specified -- go to center of dest quad */ - irowq = xi + 0.5; - icolq = xj + 0.5; - irows = icols = 5; - } - else { - irows = xi + 0.5; - icols = xj + 0.5; - } - itemp = 1; - } - if (!VALID_QUADRANT(icolq,irowq)||!VALID_SECTOR(icols,irows)) { - huh(); - return; - } - skip(1); - if (!isprobe) { - if (itemp) { - if (iprompt) { - prout("Helmsman Sulu- \"Course locked in for %s.\"", - cramlc(sector, irows, icols)); - } - } - else prout("Ensign Chekov- \"Course laid in, Captain.\""); - } - deltax = icolq - quady + 0.1*(icols-secty); - deltay = quadx - irowq + 0.1*(sectx-irows); - } - else { /* manual */ - while (key == IHEOL) { - proutn("X and Y displacements- "); - chew(); - iprompt = 1; - key = scan(); - } - itemp = 2; - if (key != IHREAL) { - huh(); - return; - } - deltax = aaitem; - key = scan(); - if (key != IHREAL) { - huh(); - return; - } - deltay = aaitem; - } - /* Check for zero movement */ - if (deltax == 0 && deltay == 0) { - chew(); - return; - } - if (itemp == 2 && !isprobe) { - skip(1); - prout("Helmsman Sulu- \"Aye, Sir.\""); - } - dist = sqrt(deltax*deltax + deltay*deltay); - direc = atan2(deltax, deltay)*1.90985932; - if (direc < 0.0) direc += 12.0; - chew(); - return; - -} - - - -void impuls(void) -{ - double power; - - ididit = 0; - if (game.damage[DIMPULS]) { - chew(); - skip(1); - prout("Engineer Scott- \"The impulse engines are damaged, Sir.\""); - return; - } - - if (energy > 30.0) { - getcd(FALSE, 0); - if (direc == -1.0) return; - power = 20.0 + 100.0*dist; - } - else - power = 30.0; - - if (power >= energy) { - /* Insufficient power for trip */ - skip(1); - prout("First Officer Spock- \"Captain, the impulse engines"); - prout("require 20.0 units to engage, plus 100.0 units per"); - if (energy > 30) { - proutn("quadrant. We can go, therefore, a maximum of %d", - (int)(0.01 * (energy-20.0)-0.05)); - prout(" quadrants.\""); - } - else { - prout("quadrant. They are, therefore, useless.\""); - } - chew(); - return; - } - /* Make sure enough time is left for the trip */ - Time = dist/0.095; - if (Time >= game.state.remtime) { - prout("First Officer Spock- \"Captain, our speed under impulse"); - prout("power is only 0.95 sectors per stardate. Are you sure"); - proutn("we dare spend the time?\" "); - if (ja() == 0) return; - } - /* Activate impulse engines and pay the cost */ - imove(); - ididit = 1; - if (alldone) return; - power = 20.0 + 100.0*dist; - energy -= power; - Time = dist/0.095; - if (energy <= 0) finish(FNRG); - return; -} - - -void warp(int i) -{ - int blooey=0, twarp=0, iwarp; - double power; - - if (i!=2) { /* Not WARPX entry */ - ididit = 0; - if (game.damage[DWARPEN] > 10.0) { - chew(); - skip(1); - prout("Engineer Scott- \"The impulse engines are damaged, Sir.\""); - return; - } - if (game.damage[DWARPEN] > 0.0 && warpfac > 4.0) { - chew(); - skip(1); - prout("Engineer Scott- \"Sorry, Captain. Until this damage"); - prout(" is repaired, I can only give you warp 4.\""); - return; - } - - /* Read in course and distance */ - getcd(FALSE, 0); - if (direc == -1.0) return; - - /* Make sure starship has enough energy for the trip */ - power = (dist+0.05)*warpfac*warpfac*warpfac*(shldup+1); - - - if (power >= energy) { - /* Insufficient power for trip */ - ididit = 0; - skip(1); - prout("Engineering to bridge--"); - if (shldup==0 || 0.5*power > energy) { - iwarp = pow((energy/(dist+0.05)), 0.333333333); - if (iwarp <= 0) { - prout("We can't do it, Captain. We haven't the energy."); - } - else { - proutn("We haven't the energy, but we could do it at warp %d", iwarp); - if (shldup) { - prout(","); - prout("if you'll lower the shields."); - } - else - prout("."); - } - } - else - prout("We haven't the energy to go that far with the shields up."); - return; - } - - /* Make sure enough time is left for the trip */ - Time = 10.0*dist/wfacsq; - if (Time >= 0.8*game.state.remtime) { - skip(1); - prout("First Officer Spock- \"Captain, I compute that such"); - proutn(" a trip would require approximately %2.0f", - 100.0*Time/game.state.remtime); - prout(" percent of our"); - proutn(" remaining time. Are you sure this is wise?\" "); - if (ja() == 0) { ididit = 0; Time=0; return;} - } - } - /* Entry WARPX */ - if (warpfac > 6.0) { - /* Decide if engine damage will occur */ - double prob = dist*(6.0-warpfac)*(6.0-warpfac)/66.666666666; - if (prob > Rand()) { - blooey = 1; - dist = Rand()*dist; - } - /* Decide if time warp will occur */ - if (0.5*dist*pow(7.0,warpfac-10.0) > Rand()) twarp=1; -#ifdef DEBUG - if (idebug &&warpfac==10 && twarp==0) { - blooey=0; - proutn("Force time warp? "); - if (ja()==1) twarp=1; - } -#endif - if (blooey || twarp) { - /* If time warp or engine damage, check path */ - /* If it is obstructed, don't do warp or damage */ - double angle = ((15.0-direc)*0.5235998); - double deltax = -sin(angle); - double deltay = cos(angle); - double bigger, x, y; - int n, l, ix, iy; - if (fabs(deltax) > fabs(deltay)) - bigger = fabs(deltax); - else - bigger = fabs(deltay); - - deltax /= bigger; - deltay /= bigger; - n = 10.0 * dist * bigger +0.5; - x = sectx; - y = secty; - for (l = 1; l <= n; l++) { - x += deltax; - ix = x + 0.5; - y += deltay; - iy = y +0.5; - if (!VALID_SECTOR(ix, iy)) break; - if (game.quad[ix][iy] != IHDOT) { - blooey = 0; - twarp = 0; - } - } - } - } - - - /* Activate Warp Engines and pay the cost */ - imove(); - if (alldone) return; - energy -= dist*warpfac*warpfac*warpfac*(shldup+1); - if (energy <= 0) finish(FNRG); - Time = 10.0*dist/wfacsq; - if (twarp) timwrp(); - if (blooey) { - game.damage[DWARPEN] = damfac*(3.0*Rand()+1.0); - skip(1); - prout("Engineering to bridge--"); - prout(" Scott here. The warp engines are damaged."); - prout(" We'll have to reduce speed to warp 4."); - } - ididit = 1; - return; -} - - - -void setwrp(void) -{ - int key; - double oldfac; - - while ((key=scan()) == IHEOL) { - chew(); - proutn("Warp factor- "); - } - chew(); - if (key != IHREAL) { - huh(); - return; - } - if (game.damage[DWARPEN] > 10.0) { - prout("Warp engines inoperative."); - return; - } - if (game.damage[DWARPEN] > 0.0 && aaitem > 4.0) { - prout("Engineer Scott- \"I'm doing my best, Captain,"); - prout(" but right now we can only go warp 4.\""); - return; - } - if (aaitem > 10.0) { - prout("Helmsman Sulu- \"Our top speed is warp 10, Captain.\""); - return; - } - if (aaitem < 1.0) { - prout("Helmsman Sulu- \"We can't go below warp 1, Captain.\""); - return; - } - oldfac = warpfac; - warpfac = aaitem; - wfacsq=warpfac*warpfac; - if (warpfac <= oldfac || warpfac <= 6.0) { - proutn("Helmsman Sulu- \"Warp factor %d, Captain.\"", - (int)warpfac); - return; - } - if (warpfac < 8.00) { - prout("Engineer Scott- \"Aye, but our maximum safe speed is warp 6.\""); - return; - } - if (warpfac == 10.0) { - prout("Engineer Scott- \"Aye, Captain, we'll try it.\""); - return; - } - prout("Engineer Scott- \"Aye, Captain, but our engines may not take it.\""); - return; -} - -void atover(int igrab) -{ - double power, distreq; - - chew(); - /* is captain on planet? */ - if (landed==1) { - if (game.damage[DTRANSP]) { - finish(FPNOVA); - return; - } - prout("Scotty rushes to the transporter controls."); - if (shldup) { - prout("But with the shields up it's hopeless."); - finish(FPNOVA); - } - prouts("His desperate attempt to rescue you . . ."); - if (Rand() <= 0.5) { - prout("fails."); - finish(FPNOVA); - return; - } - prout("SUCCEEDS!"); - if (imine) { - imine = 0; - proutn("The crystals mined were "); - if (Rand() <= 0.25) { - prout("lost."); - } - else { - prout("saved."); - icrystl = 1; - } - } - } - if (igrab) return; - - /* Check to see if captain in shuttle craft */ - if (icraft) finish(FSTRACTOR); - if (alldone) return; - - /* Inform captain of attempt to reach safety */ - skip(1); - do { - if (justin) { - prouts("***RED ALERT! READ ALERT!"); - skip(1); - proutn("The "); - crmshp(); - prout(" has stopped in a quadrant containing"); - prouts(" a supernova."); - skip(2); - } - proutn("***Emergency automatic override attempts to hurl "); - crmshp(); - skip(1); - prout("safely out of quadrant."); - if (game.damage[DRADIO] == 0.0) - game.state.galaxy[quadx][quady].charted = TRUE; - /* Try to use warp engines */ - if (game.damage[DWARPEN]) { - skip(1); - prout("Warp engines damaged."); - finish(FSNOVAED); - return; - } - warpfac = 6.0+2.0*Rand(); - wfacsq = warpfac * warpfac; - prout("Warp factor set to %d", (int)warpfac); - power = 0.75*energy; - dist = power/(warpfac*warpfac*warpfac*(shldup+1)); - distreq = 1.4142+Rand(); - if (distreq < dist) dist = distreq; - Time = 10.0*dist/wfacsq; - direc = 12.0*Rand(); /* How dumb! */ - justin = 0; - inorbit = 0; - warp(2); - if (justin == 0) { - /* This is bad news, we didn't leave quadrant. */ - if (alldone) return; - skip(1); - prout("Insufficient energy to leave quadrant."); - finish(FSNOVAED); - return; - } - } while - /* Repeat if another snova */ - (game.state.galaxy[quadx][quady].supernova); - if (KLINGREM==0) - finish(FWON); /* Snova killed remaining enemy. */ -} - -void timwrp() -{ - int l, gotit; - prout("***TIME WARP ENTERED."); - if (game.state.snap && Rand() < 0.5) { - /* Go back in time */ - prout("You are traveling backwards in time %d stardates.", - (int)(game.state.date-game.snapsht.date)); - game.state = game.snapsht; - game.state.snap = 0; - if (game.state.remcom) { - game.future[FTBEAM] = game.state.date + expran(intime/game.state.remcom); - game.future[FBATTAK] = game.state.date + expran(0.3*intime); - } - game.future[FSNOVA] = game.state.date + expran(0.5*intime); - game.future[FSNAP] = game.state.date +expran(0.25*game.state.remtime); /* next snapshot will - be sooner */ - if (game.state.nscrem) game.future[FSCMOVE] = 0.2777; - isatb = 0; - game.future[FCDBAS] = game.future[FSCDBAS] = FOREVER; - batx = baty = 0; - - /* Make sure Galileo is consistant -- Snapshot may have been taken - when on planet, which would give us two Galileos! */ - gotit = 0; - for (l = 0; l < inplan; l++) { - if (game.state.plnets[l].known == shuttle_down) { - gotit = 1; - if (iscraft==1 && ship==IHE) { - prout("Checkov- \"Security reports the Galileo has disappeared, Sir!"); - iscraft = 0; - } - } - } - /* Likewise, if in the original time the Galileo was abandoned, but - was on ship earlier, it would have vanished -- lets restore it */ - if (iscraft==0 && gotit==0 && game.damage[DSHUTTL] >= 0.0) { - prout("Checkov- \"Security reports the Galileo has reappeared in the dock!\""); - iscraft = 1; - } - /* - * There used to be code to do the actual reconstrction here, - * but the starchart is now part of the snapshotted galaxy state. - */ - prout("Spock has reconstructed a correct star chart from memory"); - } - else { - /* Go forward in time */ - Time = -0.5*intime*log(Rand()); - prout("You are traveling forward in time %d stardates.", (int)Time); - /* cheat to make sure no tractor beams occur during time warp */ - game.future[FTBEAM] += Time; - game.damage[DRADIO] += Time; - } - newqad(0); - events(); /* Stas Sergeev added this -- do pending events */ -} - -void probe(void) -{ - double angle, bigger; - int key; - /* New code to launch a deep space probe */ - if (nprobes == 0) { - chew(); - skip(1); - if (ship == IHE) - prout("Engineer Scott- \"We have no more deep space probes, Sir.\""); - else - prout("Ye Faerie Queene has no deep space probes."); - return; - } - if (game.damage[DDSP] != 0.0) { - chew(); - skip(1); - prout("Engineer Scott- \"The probe launcher is damaged, Sir.\""); - return; - } - if (game.future[FDSPROB] != FOREVER) { - chew(); - skip(1); - if (game.damage[DRADIO] != 0 && condit != IHDOCKED) { - prout("Spock- \"Records show the previous probe has not yet"); - prout(" reached its destination.\""); - } - else - prout("Uhura- \"The previous probe is still reporting data, Sir.\""); - return; - } - key = scan(); - - if (key == IHEOL) { - /* slow mode, so let Kirk know how many probes there are left */ - prout(nprobes==1 ? "%d probe left." : "%d probes left.", nprobes); - proutn("Are you sure you want to fire a probe? "); - if (ja()==0) return; - } - - isarmed = FALSE; - if (key == IHALPHA && strcmp(citem,"armed") == 0) { - isarmed = TRUE; - key = scan(); - } - else if (key == IHEOL) { - proutn("Arm NOVAMAX warhead? "); - isarmed = ja(); - } - getcd(TRUE, key); - if (direc == -1.0) return; - nprobes--; - angle = ((15.0 - direc) * 0.5235988); - probeinx = -sin(angle); - probeiny = cos(angle); - if (fabs(probeinx) > fabs(probeiny)) - bigger = fabs(probeinx); - else - bigger = fabs(probeiny); - - probeiny /= bigger; - probeinx /= bigger; - proben = 10.0*dist*bigger +0.5; - probex = quadx*QUADSIZE + sectx - 1; // We will use better packing than original - probey = quady*QUADSIZE + secty - 1; - probecx = quadx; - probecy = quady; - game.future[FDSPROB] = game.state.date + 0.01; // Time to move one sector - prout("Ensign Chekov- \"The deep space probe is launched, Captain.\""); - ididit = 1; - return; -} - -void help(void) -{ - /* There's more than one way to move in this game! */ - double ddist, xdist, probf; - int line = 0, l, ix, iy; - - chew(); - /* Test for conditions which prevent calling for help */ - if (condit == IHDOCKED) { - prout("Lt. Uhura- \"But Captain, we're already docked.\""); - return; - } - if (game.damage[DRADIO] != 0) { - prout("Subspace radio damaged."); - return; - } - if (game.state.rembase==0) { - prout("Lt. Uhura- \"Captain, I'm not getting any response from Starbase.\""); - return; - } - if (landed == 1) { - proutn("You must be aboard the "); - crmshp(); - prout("."); - return; - } - /* OK -- call for help from nearest starbase */ - nhelp++; - if (basex!=0) { - /* There's one in this quadrant */ - ddist = sqrt(square(basex-sectx)+square(basey-secty)); - } - else { - ddist = FOREVER; - for_starbases(l) { - xdist=10.0*sqrt(square(game.state.baseqx[l]-quadx)+square(game.state.baseqy[l]-quady)); - if (xdist < ddist) { - ddist = xdist; - line = l; - } - } - /* Since starbase not in quadrant, set up new quadrant */ - quadx = game.state.baseqx[line]; - quady = game.state.baseqy[line]; - newqad(1); - } - /* dematerialize starship */ - game.quad[sectx][secty]=IHDOT; - proutn("Starbase in %s responds--", cramlc(quadrant, quadx, quady)); - proutn(""); - crmshp(); - prout(" dematerializes."); - sectx=0; - for (l = 1; l <= 5; l++) { - ix = basex+3.0*Rand()-1; - iy = basey+3.0*Rand()-1; - if (VALID_SECTOR(ix,iy) && game.quad[ix][iy]==IHDOT) { - /* found one -- finish up */ - sectx=ix; - secty=iy; - break; - } - } - if (sectx==0){ - prout("You have been lost in space..."); - finish(FMATERIALIZE); - return; - } - /* Give starbase three chances to rematerialize starship */ - probf = pow((1.0 - pow(0.98,ddist)), 0.33333333); - for (l = 1; l <= 3; l++) { - switch (l) { - case 1: proutn("1st"); break; - case 2: proutn("2nd"); break; - case 3: proutn("3rd"); break; - } - proutn(" attempt to re-materialize "); - crmshp(); - switch (l){ - case 1: game.quad[ix][iy]=IHMATER0; - break; - case 2: game.quad[ix][iy]=IHMATER1; - break; - case 3: game.quad[ix][iy]=IHMATER2; - break; - } - textcolor(RED); - warble(); - if (Rand() > probf) break; - prout("fails."); - delay(500); - textcolor(DEFAULT); - } - if (l > 3) { - game.quad[ix][iy]=IHQUEST; - alive = 0; - drawmaps(1); - setwnd(message_window); - finish(FMATERIALIZE); - return; - } - game.quad[ix][iy]=ship; - textcolor(GREEN); - prout("succeeds."); - textcolor(DEFAULT); - dock(0); - skip(1); - prout("Lt. Uhura- \"Captain, we made it!\""); -} diff --git a/planets.c b/planets.c deleted file mode 100644 index 217ce14..0000000 --- a/planets.c +++ /dev/null @@ -1,506 +0,0 @@ -#include "sst.h" - -static char *classes[] = {"M","N","O"}; - -static int consumeTime(void) -{ -/* I think most of this avoidance was caused by overlay scheme. - Let's see what happens if all events can occur here */ - -// double asave; - ididit = 1; -#if 0 - /* Don't worry about this */ - if (future[FTBEAM] <= game.state.date+Time && game.state.remcom != 0 && condit != IHDOCKED) { - /* We are about to be tractor beamed -- operation fails */ - return 1; - } -#endif -// asave = future[FSNOVA]; -// future[FSNOVA] = FOREVER; /* defer supernovas */ - events(); /* Used to avoid if future[FSCMOVE] within time */ -// future[FSNOVA] = asave; - /*fails if game over, quadrant super-novas or we've moved to new quadrant*/ - if (alldone || game.state.galaxy[quadx][quady].supernova || justin != 0) return 1; - return 0; -} - -void preport(void) -{ - int iknow = 0, i; - skip(1); - chew(); - prout("Spock- \"Planet report follows, Captain.\""); - skip(1); - for (i = 0; i < inplan; i++) { - if (game.state.plnets[i].known != unknown -#ifdef DEBUG - || ( idebug && game.state.plnets[i].x !=0) -#endif - ) { - iknow = 1; -#ifdef DEBUG - if (idebug && game.state.plnets[i].known==unknown) proutn("(Unknown) "); -#endif - proutn(cramlc(quadrant, game.state.plnets[i].x, game.state.plnets[i].y)); - proutn(" class "); - proutn(classes[game.state.plnets[i].pclass]); - proutn(" "); - if (game.state.plnets[i].crystals == 0) proutn("no "); - prout("dilithium crystals present."); - if (game.state.plnets[i].known==shuttle_down) - prout(" Shuttle Craft Galileo on surface."); - } - } - if (iknow==0) prout("No information available."); -} - -void orbit(void) -{ - skip(1); - chew(); - if (inorbit!=0) { - prout("Already in standard orbit."); - return; - } - if (game.damage[DWARPEN] != 0 && game.damage[DIMPULS] != 0) { - prout("Both warp and impulse engines damaged."); - return; - } - if (plnetx == 0 || abs(sectx-plnetx) > 1 || abs(secty-plnety) > 1) { - crmshp(); - prout(" not adjacent to planet."); - skip(1); - return; - } - Time = 0.02+0.03*Rand(); - prout("Helmsman Sulu- \"Entering standard orbit, Sir.\""); - newcnd(); - if (consumeTime()) return; - game.height = (1400.0+7200.0*Rand()); - prout("Sulu- \"Entered orbit at altitude %.2f kilometers.\"", game.height); - inorbit = 1; - ididit=1; -} - -void sensor(void) -{ - skip(1); - chew(); - if (game.damage[DSRSENS] != 0.0) { - prout("Short range sensors damaged."); - return; - } - if (!plnetx && (game.options & OPTION_TTY)) { - prout("Spock- \"No planet in this quadrant, Captain.\""); - return; - } - if ((plnetx != 0)&& (game.state.plnets[iplnet].known == unknown)) { - prout("Spock- \"Sensor scan for %s-", cramlc(quadrant, quadx, quady)); - skip(1); - prout(" Planet at %s is of class %s.", - cramlc(sector, plnetx, plnety), - classes[game.state.plnets[iplnet].pclass]); - if (game.state.plnets[iplnet].known==shuttle_down) - prout(" Sensors show Galileo still on surface."); - proutn(" Readings indicate"); - if (game.state.plnets[iplnet].crystals == 0) proutn(" no"); - prout(" dilithium crystals present.\""); - if (game.state.plnets[iplnet].known == unknown) game.state.plnets[iplnet].known = known; - } -} - -void beam(void) -{ - chew(); - skip(1); - if (game.damage[DTRANSP] != 0) { - prout("Transporter damaged."); - if (game.damage[DSHUTTL]==0 && (game.state.plnets[iplnet].known==shuttle_down || iscraft == 1)) { - skip(1); - proutn("Spock- \"May I suggest the shuttle craft, Sir?\" "); - if (ja() != 0) shuttle(); - } - return; - } - if (inorbit==0) { - crmshp(); - prout(" not in standard orbit."); - return; - } - if (shldup!=0) { - prout("Impossible to transport through shields."); - return; - } - if (game.state.plnets[iplnet].known==unknown) { - prout("Spock- \"Captain, we have no information on this planet"); - prout(" and Starfleet Regulations clearly state that in this situation"); - prout(" you may not go down.\""); - return; - } - if (landed==1) { - /* Coming from planet */ - if (game.state.plnets[iplnet].known==shuttle_down) { - proutn("Spock- \"Wouldn't you rather take the Galileo?\" "); - if (ja() != 0) { - chew(); - return; - } - prout("Your crew hides the Galileo to prevent capture by aliens."); - } - prout("Landing party assembled, ready to beam up."); - skip(1); - prout("Kirk whips out communicator..."); - prouts("BEEP BEEP BEEP"); - skip(2); - prout("\"Kirk to enterprise- Lock on coordinates...energize.\""); - } - else { - /* Going to planet */ - if (game.state.plnets[iplnet].crystals==0) { - prout("Spock- \"Captain, I fail to see the logic in"); - prout(" exploring a planet with no dilithium crystals."); - proutn(" Are you sure this is wise?\" "); - if (ja()==0) { - chew(); - return; - } - } - prout("Scotty- \"Transporter room ready, Sir.\""); - skip(1); - prout("Kirk, and landing party prepare to beam down to planet surface."); - skip(1); - prout("Kirk- \"Energize.\""); - } - ididit=1; - skip(1); - prouts("WWHOOOIIIIIRRRRREEEE.E.E. . . . . . ."); - skip(2); - if (Rand() > 0.98) { - prouts("BOOOIIIOOOIIOOOOIIIOIING . . ."); - skip(2); - prout("Scotty- \"Oh my God! I've lost them.\""); - finish(FLOST); - return; - } - prouts(". . . . . . .E.E.EEEERRRRRIIIIIOOOHWW"); - skip(2); - prout("Transport complete."); - landed = -landed; - if (landed==1 && game.state.plnets[iplnet].known==shuttle_down) { - prout("The shuttle craft Galileo is here!"); - } - if (landed!=1 && imine==1) { - icrystl = 1; - cryprob = 0.05; - } - imine = 0; - return; -} - -void mine(void) -{ - skip(1); - chew(); - if (landed!= 1) { - prout("Mining party not on planet."); - return; - } - if (game.state.plnets[iplnet].crystals == 0) { - prout("No dilithium crystals on this planet."); - return; - } - if (imine == 1) { - prout("You've already mined enough crystals for this trip."); - return; - } - if (icrystl == 1 && cryprob == 0.05) { - proutn("With all those fresh crystals aboard the "); - crmshp(); - skip(1); - prout("there's no reason to mine more at this time."); - return; - } - Time = (0.1+0.2*Rand())*game.state.plnets[iplnet].pclass; - if (consumeTime()) return; - prout("Mining operation complete."); - imine = 1; - ididit=1; -} - -void usecrystals(void) -{ - ididit=0; - skip(1); - chew(); - if (icrystl!=1) { - prout("No dilithium crystals available."); - return; - } - if (energy >= 1000) { - prout("Spock- \"Captain, Starfleet Regulations prohibit such an operation"); - prout(" except when condition Yellow exists."); - return; - } - prout("Spock- \"Captain, I must warn you that loading"); - prout(" raw dilithium crystals into the ship's power"); - prout(" system may risk a severe explosion."); - proutn(" Are you sure this is wise?\" "); - if (ja()==0) { - chew(); - return; - } - skip(1); - prout("Engineering Officer Scott- \"(GULP) Aye Sir."); - prout(" Mr. Spock and I will try it.\""); - skip(1); - prout("Spock- \"Crystals in place, Sir."); - prout(" Ready to activate circuit.\""); - skip(1); - prouts("Scotty- \"Keep your fingers crossed, Sir!\""); - skip(1); - if (Rand() <= cryprob) { - prouts(" \"Activating now! - - No good! It's***"); - skip(2); - prouts("***RED ALERT! RED A*L********************************"); - skip(1); - stars(); - prouts("****************** KA-BOOM!!!! *******************"); - skip(1); - kaboom(); - return; - } - energy += 5000.0*(1.0 + 0.9*Rand()); - prouts(" \"Activating now! - - "); - prout("The instruments"); - prout(" are going crazy, but I think it's"); - prout(" going to work!! Congratulations, Sir!\""); - cryprob *= 2.0; - ididit=1; -} - -void shuttle(void) -{ - chew(); - skip(1); - if(game.damage[DSHUTTL] != 0.0) { - if (game.damage[DSHUTTL] == -1.0) { - if (inorbit && game.state.plnets[iplnet].known == shuttle_down) - prout("Ye Faerie Queene has no shuttle craft bay to dock it at."); - else - prout("Ye Faerie Queene had no shuttle craft."); - } - else if (game.damage[DSHUTTL] > 0) - prout("The Galileo is damaged."); - else prout("Shuttle craft is now serving Big Macs."); - return; - } - if (inorbit==0) { - crmshp(); - prout(" not in standard orbit."); - return; - } - if ((game.state.plnets[iplnet].known != shuttle_down) && iscraft != 1) { - prout("Shuttle craft not currently available."); - return; - } - if (landed==-1 && game.state.plnets[iplnet].known==shuttle_down) { - prout("You will have to beam down to retrieve the shuttle craft."); - return; - } - if (shldup!=0 || condit == IHDOCKED) { - prout("Shuttle craft cannot pass through shields."); - return; - } - if (game.state.plnets[iplnet].known==unknown) { - prout("Spock- \"Captain, we have no information on this planet"); - prout(" and Starfleet Regulations clearly state that in this situation"); - prout(" you may not fly down.\""); - return; - } - Time = 3.0e-5*game.height; - if (Time >= 0.8*game.state.remtime) { - prout("First Officer Spock- \"Captain, I compute that such"); - proutn(" a maneuver would require approximately 2d%% of our", - (int)(100*Time/game.state.remtime)); - prout("remaining time."); - proutn("Are you sure this is wise?\" "); - if (ja()==0) { - Time = 0.0; - return; - } - } - if (landed == 1) { - /* Kirk on planet */ - if (iscraft==1) { - /* Galileo on ship! */ - if (game.damage[DTRANSP]==0) { - proutn("Spock- \"Would you rather use the transporter?\" "); - if (ja() != 0) { - beam(); - return; - } - proutn("Shuttle crew"); - } - else - proutn("Rescue party"); - prout(" boards Galileo and swoops toward planet surface."); - iscraft = 0; - skip(1); - if (consumeTime()) return; - game.state.plnets[iplnet].known=shuttle_down; - prout("Trip complete."); - return; - } - else { - /* Ready to go back to ship */ - prout("You and your mining party board the"); - prout("shuttle craft for the trip back to the Enterprise."); - skip(1); - prout("The short hop begins . . ."); - game.state.plnets[iplnet].known=known; - icraft = 1; - skip(1); - landed = -1; - if (consumeTime()) return; - iscraft = 1; - icraft = 0; - if (imine!=0) { - icrystl = 1; - cryprob = 0.05; - } - imine = 0; - prout("Trip complete."); - return; - } - } - else { - /* Kirk on ship */ - /* and so is Galileo */ - prout("Mining party assembles in the hangar deck,"); - prout("ready to board the shuttle craft \"Galileo\"."); - skip(1); - prouts("The hangar doors open; the trip begins."); - skip(1); - icraft = 1; - iscraft = 0; - if (consumeTime()) return; - game.state.plnets[iplnet].known = shuttle_down; - landed = 1; - icraft = 0; - prout("Trip complete"); - return; - } -} - -void deathray(void) -{ - double dprob, r = Rand(); - - ididit = 0; - skip(1); - chew(); - if (ship != IHE) { - prout("Ye Faerie Queene has no death ray."); - return; - } - if (nenhere==0) { - prout("Sulu- \"But Sir, there are no enemies in this quadrant.\""); - return; - } - if (game.damage[DDRAY] > 0.0) { - prout("Death Ray is damaged."); - return; - } - prout("Spock- \"Captain, the 'Experimental Death Ray'"); - prout(" is highly unpredictible. Considering the alternatives,"); - proutn(" are you sure this is wise?\" "); - if (ja()==0) return; - prout("Spock- \"Acknowledged.\""); - skip(1); - ididit=1; - prouts("WHOOEE ... WHOOEE ... WHOOEE ... WHOOEE"); - skip(1); - prout("Crew scrambles in emergency preparation."); - prout("Spock and Scotty ready the death ray and"); - prout("prepare to channel all ship's power to the device."); - skip(1); - prout("Spock- \"Preparations complete, sir.\""); - prout("Kirk- \"Engage!\""); - skip(1); - prouts("WHIRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR"); - skip(1); - dprob = .30; - if (game.options & OPTION_PLAIN) - dprob = .5; - if (r > dprob) { - prouts("Sulu- \"Captain! It's working!\""); - skip(2); - while (nenhere > 0) - deadkl(game.kx[1],game.ky[1],game.quad[game.kx[1]][game.ky[1]],game.kx[1],game.ky[1]); - prout("Ensign Chekov- \"Congratulations, Captain!\""); - if (KLINGREM == 0) finish(FWON); - if ((game.options & OPTION_PLAIN) == 0) { - prout("Spock- \"Captain, I believe the `Experimental Death Ray'"); - if (Rand() <= 0.05) { - prout(" is still operational.\""); - } - else { - prout(" has been rendered nonfunctional.\""); - game.damage[DDRAY] = 39.95; - } - } - return; - } - r = Rand(); // Pick failure method - if (r <= .30) { - prouts("Sulu- \"Captain! It's working!\""); - skip(1); - prouts("***RED ALERT! RED ALERT!"); - skip(1); - prout("***MATTER-ANTIMATTER IMPLOSION IMMINENT!"); - skip(1); - prouts("***RED ALERT! RED A*L********************************"); - skip(1); - stars(); - prouts("****************** KA-BOOM!!!! *******************"); - skip(1); - kaboom(); - return; - } - if (r <= .55) { - prouts("Sulu- \"Captain! Yagabandaghangrapl, brachriigringlanbla!\""); - skip(1); - prout("Lt. Uhura- \"Graaeek! Graaeek!\""); - skip(1); - prout("Spock- \"Fascinating! . . . All humans aboard"); - prout(" have apparently been transformed into strange mutations."); - prout(" Vulcans do not seem to be affected."); - skip(1); - prout("Kirk- \"Raauch! Raauch!\""); - finish(FDRAY); - return; - } - if (r <= 0.75) { - int i,j; - prouts("Sulu- \"Captain! It's --WHAT?!?!\""); - skip(2); - proutn("Spock- \"I believe the word is"); - prouts(" *ASTONISHING*"); - prout(" Mr. Sulu."); - for_sectors(i) - for_sectors(j) - if (game.quad[i][j] == IHDOT) game.quad[i][j] = IHQUEST; - prout(" Captain, our quadrant is now infested with"); - prouts(" - - - - - - *THINGS*."); - skip(1); - prout(" I have no logical explanation.\""); - return; - } - prouts("Sulu- \"Captain! The Death Ray is creating tribbles!\""); - skip(1); - prout("Scotty- \"There are so many tribbles down here"); - prout(" in Engineering, we can't move for 'em, Captain.\""); - finish(FTRIBBLE); - return; -} diff --git a/po/ChangeLog b/po/ChangeLog new file mode 100644 index 0000000..a5bcc93 --- /dev/null +++ b/po/ChangeLog @@ -0,0 +1,12 @@ +2006-09-12 gettextize + + * Makefile.in.in: New file, from gettext-0.14.5. + * boldquot.sed: New file, from gettext-0.14.5. + * en@boldquot.header: New file, from gettext-0.14.5. + * en@quot.header: New file, from gettext-0.14.5. + * insert-header.sin: New file, from gettext-0.14.5. + * quot.sed: New file, from gettext-0.14.5. + * remove-potcdate.sin: New file, from gettext-0.14.5. + * Rules-quot: New file, from gettext-0.14.5. + * POTFILES.in: New file. + diff --git a/po/Makefile b/po/Makefile new file mode 100644 index 0000000..0978b90 --- /dev/null +++ b/po/Makefile @@ -0,0 +1,472 @@ +# Makefile for PO directory in any package using GNU gettext. +# Copyright (C) 1995-1997, 2000-2005 by Ulrich Drepper +# +# This file can be copied and used freely without restrictions. It can +# be used in projects which are not available under the GNU General Public +# License but which still want to provide support for the GNU gettext +# functionality. +# Please note that the actual code of GNU gettext is covered by the GNU +# General Public License and is *not* in the public domain. +# +# Origin: gettext-0.14.4 + +PACKAGE = sst +VERSION = 2.0 +PACKAGE_BUGREPORT = stsp + +SHELL = /bin/sh + + +srcdir = . +top_srcdir = .. + + +prefix = /usr/local +exec_prefix = ${prefix} +datadir = ${prefix}/share +localedir = $(datadir)/locale +gettextsrcdir = $(datadir)/gettext/po + +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +MKINSTALLDIRS = $(top_builddir)/./mkinstalldirs +mkinstalldirs = $(SHELL) $(MKINSTALLDIRS) + +GMSGFMT = /usr/bin/msgfmt +MSGFMT = /usr/bin/msgfmt +XGETTEXT = /usr/bin/xgettext +MSGMERGE = msgmerge +MSGMERGE_UPDATE = /usr/bin/msgmerge --update +MSGINIT = msginit +MSGCONV = msgconv +MSGFILTER = msgfilter + +POFILES = +GMOFILES = +UPDATEPOFILES = +DUMMYPOFILES = +DISTFILES.common = Makefile.in.in remove-potcdate.sin \ +$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3) +DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \ +$(POFILES) $(GMOFILES) \ +$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3) + +POTFILES = \ + +CATALOGS = + +# Makevars gets inserted here. (Don't remove this line!) +# Makefile variables for PO directory in any package using GNU gettext. + +# Usually the message domain is the same as the package name. +DOMAIN = $(PACKAGE) + +# These two variables depend on the location of this directory. +subdir = po +top_builddir = .. + +# These options get passed to xgettext. +XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ + +# This is the copyright holder that gets inserted into the header of the +# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding +# package. (Note that the msgstr strings, extracted from the package's +# sources, belong to the copyright holder of the package.) Translators are +# expected to transfer the copyright for their translations to this person +# or entity, or to disclaim their copyright. The empty string stands for +# the public domain; in this case the translators are expected to disclaim +# their copyright. +COPYRIGHT_HOLDER = Free Software Foundation, Inc. + +# This is the email address or URL to which the translators shall report +# bugs in the untranslated strings: +# - Strings which are not entire sentences, see the maintainer guidelines +# in the GNU gettext documentation, section 'Preparing Strings'. +# - Strings which use unclear terms or require additional context to be +# understood. +# - Strings which make invalid assumptions about notation of date, time or +# money. +# - Pluralisation problems. +# - Incorrect English spelling. +# - Incorrect formatting. +# It can be your email address, or a mailing list address where translators +# can write to without being subscribed, or the URL of a web page through +# which the translators can contact you. +MSGID_BUGS_ADDRESS = + +# This is the list of locale categories, beyond LC_MESSAGES, for which the +# message catalogs shall be used. It is usually empty. +EXTRA_LOCALE_CATEGORIES = + +.SUFFIXES: +.SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update + +.po.mo: + @echo "$(MSGFMT) -c -o $@ $<"; \ + $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@ + +.po.gmo: + @lang=`echo $* | sed -e 's,.*/,,'`; \ + test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ + echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o $${lang}.gmo $${lang}.po"; \ + cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo + +.sin.sed: + sed -e '/^#/d' $< > t-$@ + mv t-$@ $@ + + +all: all-yes + +all-yes: stamp-po +all-no: + +# $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no +# internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because +# we don't want to bother translators with empty POT files). We assume that +# LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty. +# In this case, stamp-po is a nop (i.e. a phony target). + +# stamp-po is a timestamp denoting the last time at which the CATALOGS have +# been loosely updated. Its purpose is that when a developer or translator +# checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS, +# "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent +# invocations of "make" will do nothing. This timestamp would not be necessary +# if updating the $(CATALOGS) would always touch them; however, the rule for +# $(POFILES) has been designed to not touch files that don't need to be +# changed. +stamp-po: $(srcdir)/$(DOMAIN).pot + test ! -f $(srcdir)/$(DOMAIN).pot || \ + test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES) + @test ! -f $(srcdir)/$(DOMAIN).pot || { \ + echo "touch stamp-po" && \ + echo timestamp > stamp-poT && \ + mv stamp-poT stamp-po; \ + } + +# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update', +# otherwise packages like GCC can not be built if only parts of the source +# have been downloaded. + +# This target rebuilds $(DOMAIN).pot; it is an expensive operation. +# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed. +$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed + if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \ + msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \ + else \ + msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \ + fi; \ + $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ + --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) \ + --files-from=$(srcdir)/POTFILES.in \ + --copyright-holder='$(COPYRIGHT_HOLDER)' \ + --msgid-bugs-address="$$msgid_bugs_address" + test ! -f $(DOMAIN).po || { \ + if test -f $(srcdir)/$(DOMAIN).pot; then \ + sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \ + sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \ + if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \ + rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \ + else \ + rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \ + mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ + fi; \ + else \ + mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ + fi; \ + } + +# This rule has no dependencies: we don't need to update $(DOMAIN).pot at +# every "make" invocation, only create it when it is missing. +# Only "make $(DOMAIN).pot-update" or "make dist" will force an update. +$(srcdir)/$(DOMAIN).pot: + $(MAKE) $(DOMAIN).pot-update + +# This target rebuilds a PO file if $(DOMAIN).pot has changed. +# Note that a PO file is not touched if it doesn't need to be changed. +$(POFILES): $(srcdir)/$(DOMAIN).pot + @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \ + if test -f "$(srcdir)/$${lang}.po"; then \ + test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ + echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \ + cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot; \ + else \ + $(MAKE) $${lang}.po-create; \ + fi + + +install: install-exec install-data +install-exec: +install-data: install-data-yes + if test "$(PACKAGE)" = "gettext-tools"; then \ + $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \ + for file in $(DISTFILES.common) Makevars.template; do \ + $(INSTALL_DATA) $(srcdir)/$$file \ + $(DESTDIR)$(gettextsrcdir)/$$file; \ + done; \ + for file in Makevars; do \ + rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ + done; \ + else \ + : ; \ + fi +install-data-no: all +install-data-yes: all + $(mkinstalldirs) $(DESTDIR)$(datadir) + @catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ + dir=$(localedir)/$$lang/LC_MESSAGES; \ + $(mkinstalldirs) $(DESTDIR)$$dir; \ + if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \ + $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \ + echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \ + for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ + if test -n "$$lc"; then \ + if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ + link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ + mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ + for file in *; do \ + if test -f $$file; then \ + ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ + fi; \ + done); \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + else \ + if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ + :; \ + else \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + fi; \ + fi; \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ + ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ + ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ + cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ + echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \ + fi; \ + done; \ + done + +install-strip: install + +installdirs: installdirs-exec installdirs-data +installdirs-exec: +installdirs-data: installdirs-data-yes + if test "$(PACKAGE)" = "gettext-tools"; then \ + $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \ + else \ + : ; \ + fi +installdirs-data-no: +installdirs-data-yes: + $(mkinstalldirs) $(DESTDIR)$(datadir) + @catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ + dir=$(localedir)/$$lang/LC_MESSAGES; \ + $(mkinstalldirs) $(DESTDIR)$$dir; \ + for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ + if test -n "$$lc"; then \ + if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ + link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ + mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ + for file in *; do \ + if test -f $$file; then \ + ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ + fi; \ + done); \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + else \ + if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ + :; \ + else \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + fi; \ + fi; \ + fi; \ + done; \ + done + +# Define this as empty until I found a useful application. +installcheck: + +uninstall: uninstall-exec uninstall-data +uninstall-exec: +uninstall-data: uninstall-data-yes + if test "$(PACKAGE)" = "gettext-tools"; then \ + for file in $(DISTFILES.common) Makevars.template; do \ + rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ + done; \ + else \ + : ; \ + fi +uninstall-data-no: +uninstall-data-yes: + catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ + for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ + done; \ + done + +check: all + +info dvi ps pdf html tags TAGS ctags CTAGS ID: + +mostlyclean: + rm -f remove-potcdate.sed + rm -f stamp-poT + rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po + rm -fr *.o + +clean: mostlyclean + +distclean: clean + rm -f Makefile Makefile.in POTFILES *.mo + +maintainer-clean: distclean + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + rm -f stamp-po $(GMOFILES) + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) +dist distdir: + $(MAKE) update-po + @$(MAKE) dist2 +# This is a separate target because 'update-po' must be executed before. +dist2: stamp-po $(DISTFILES) + dists="$(DISTFILES)"; \ + if test "$(PACKAGE)" = "gettext-tools"; then \ + dists="$$dists Makevars.template"; \ + fi; \ + if test -f $(srcdir)/$(DOMAIN).pot; then \ + dists="$$dists $(DOMAIN).pot stamp-po"; \ + fi; \ + if test -f $(srcdir)/ChangeLog; then \ + dists="$$dists ChangeLog"; \ + fi; \ + for i in 0 1 2 3 4 5 6 7 8 9; do \ + if test -f $(srcdir)/ChangeLog.$$i; then \ + dists="$$dists ChangeLog.$$i"; \ + fi; \ + done; \ + if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \ + for file in $$dists; do \ + if test -f $$file; then \ + cp -p $$file $(distdir) || exit 1; \ + else \ + cp -p $(srcdir)/$$file $(distdir) || exit 1; \ + fi; \ + done + +update-po: Makefile + $(MAKE) $(DOMAIN).pot-update + test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES) + $(MAKE) update-gmo + +# General rule for creating PO files. + +.nop.po-create: + @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \ + echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \ + exit 1 + +# General rule for updating PO files. + +.nop.po-update: + @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \ + if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; fi; \ + tmpdir=`pwd`; \ + echo "$$lang:"; \ + test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ + echo "$${cdcmd}$(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \ + cd $(srcdir); \ + if $(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$tmpdir/$$lang.new.po; then \ + if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ + rm -f $$tmpdir/$$lang.new.po; \ + else \ + if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ + :; \ + else \ + echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ + exit 1; \ + fi; \ + fi; \ + else \ + echo "msgmerge for $$lang.po failed!" 1>&2; \ + rm -f $$tmpdir/$$lang.new.po; \ + fi + +$(DUMMYPOFILES): + +update-gmo: Makefile $(GMOFILES) + @: + +Makefile: Makefile.in.in Makevars $(top_builddir)/config.status POTFILES.in + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \ + $(SHELL) ./config.status + +force: + +# Tell versions [3.59,3.63) of GNU make not to export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: +# Special Makefile rules for English message catalogs with quotation marks. + +DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot + +.SUFFIXES: .insert-header .po-update-en + +en@quot.po-create: + $(MAKE) en@quot.po-update +en@boldquot.po-create: + $(MAKE) en@boldquot.po-update + +en@quot.po-update: en@quot.po-update-en +en@boldquot.po-update: en@boldquot.po-update-en + +.insert-header.po-update-en: + @lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \ + if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \ + tmpdir=`pwd`; \ + echo "$$lang:"; \ + ll=`echo $$lang | sed -e 's/@.*//'`; \ + LC_ALL=C; export LC_ALL; \ + cd $(srcdir); \ + if $(MSGINIT) -i $(DOMAIN).pot --no-translator -l $$ll -o - 2>/dev/null | sed -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | $(MSGFILTER) sed -f `echo $$lang | sed -e 's/.*@//'`.sed 2>/dev/null > $$tmpdir/$$lang.new.po; then \ + if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ + rm -f $$tmpdir/$$lang.new.po; \ + else \ + if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ + :; \ + else \ + echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ + exit 1; \ + fi; \ + fi; \ + else \ + echo "creation of $$lang.po failed!" 1>&2; \ + rm -f $$tmpdir/$$lang.new.po; \ + fi + +en@quot.insert-header: insert-header.sin + sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header + +en@boldquot.insert-header: insert-header.sin + sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header + +mostlyclean: mostlyclean-quot +mostlyclean-quot: + rm -f *.insert-header diff --git a/po/Makefile.in b/po/Makefile.in new file mode 100644 index 0000000..f39b023 --- /dev/null +++ b/po/Makefile.in @@ -0,0 +1,384 @@ +# Makefile for PO directory in any package using GNU gettext. +# Copyright (C) 1995-1997, 2000-2005 by Ulrich Drepper +# +# This file can be copied and used freely without restrictions. It can +# be used in projects which are not available under the GNU General Public +# License but which still want to provide support for the GNU gettext +# functionality. +# Please note that the actual code of GNU gettext is covered by the GNU +# General Public License and is *not* in the public domain. +# +# Origin: gettext-0.14.4 + +PACKAGE = sst +VERSION = 2.0 +PACKAGE_BUGREPORT = stsp + +SHELL = /bin/sh + + +srcdir = . +top_srcdir = .. + + +prefix = /usr/local +exec_prefix = ${prefix} +datadir = ${prefix}/share +localedir = $(datadir)/locale +gettextsrcdir = $(datadir)/gettext/po + +INSTALL = /usr/bin/install -c +INSTALL_DATA = ${INSTALL} -m 644 +MKINSTALLDIRS = $(top_builddir)/./mkinstalldirs +mkinstalldirs = $(SHELL) $(MKINSTALLDIRS) + +GMSGFMT = /usr/bin/msgfmt +MSGFMT = /usr/bin/msgfmt +XGETTEXT = /usr/bin/xgettext +MSGMERGE = msgmerge +MSGMERGE_UPDATE = /usr/bin/msgmerge --update +MSGINIT = msginit +MSGCONV = msgconv +MSGFILTER = msgfilter + +POFILES = @POFILES@ +GMOFILES = @GMOFILES@ +UPDATEPOFILES = @UPDATEPOFILES@ +DUMMYPOFILES = @DUMMYPOFILES@ +DISTFILES.common = Makefile.in.in remove-potcdate.sin \ +$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3) +DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \ +$(POFILES) $(GMOFILES) \ +$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3) + +POTFILES = \ + +CATALOGS = @CATALOGS@ + +# Makevars gets inserted here. (Don't remove this line!) + +.SUFFIXES: +.SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update + +.po.mo: + @echo "$(MSGFMT) -c -o $@ $<"; \ + $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@ + +.po.gmo: + @lang=`echo $* | sed -e 's,.*/,,'`; \ + test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ + echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o $${lang}.gmo $${lang}.po"; \ + cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo + +.sin.sed: + sed -e '/^#/d' $< > t-$@ + mv t-$@ $@ + + +all: all-yes + +all-yes: stamp-po +all-no: + +# $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no +# internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because +# we don't want to bother translators with empty POT files). We assume that +# LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty. +# In this case, stamp-po is a nop (i.e. a phony target). + +# stamp-po is a timestamp denoting the last time at which the CATALOGS have +# been loosely updated. Its purpose is that when a developer or translator +# checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS, +# "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent +# invocations of "make" will do nothing. This timestamp would not be necessary +# if updating the $(CATALOGS) would always touch them; however, the rule for +# $(POFILES) has been designed to not touch files that don't need to be +# changed. +stamp-po: $(srcdir)/$(DOMAIN).pot + test ! -f $(srcdir)/$(DOMAIN).pot || \ + test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES) + @test ! -f $(srcdir)/$(DOMAIN).pot || { \ + echo "touch stamp-po" && \ + echo timestamp > stamp-poT && \ + mv stamp-poT stamp-po; \ + } + +# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update', +# otherwise packages like GCC can not be built if only parts of the source +# have been downloaded. + +# This target rebuilds $(DOMAIN).pot; it is an expensive operation. +# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed. +$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed + if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \ + msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \ + else \ + msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \ + fi; \ + $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ + --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) \ + --files-from=$(srcdir)/POTFILES.in \ + --copyright-holder='$(COPYRIGHT_HOLDER)' \ + --msgid-bugs-address="$$msgid_bugs_address" + test ! -f $(DOMAIN).po || { \ + if test -f $(srcdir)/$(DOMAIN).pot; then \ + sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \ + sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \ + if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \ + rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \ + else \ + rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \ + mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ + fi; \ + else \ + mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ + fi; \ + } + +# This rule has no dependencies: we don't need to update $(DOMAIN).pot at +# every "make" invocation, only create it when it is missing. +# Only "make $(DOMAIN).pot-update" or "make dist" will force an update. +$(srcdir)/$(DOMAIN).pot: + $(MAKE) $(DOMAIN).pot-update + +# This target rebuilds a PO file if $(DOMAIN).pot has changed. +# Note that a PO file is not touched if it doesn't need to be changed. +$(POFILES): $(srcdir)/$(DOMAIN).pot + @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \ + if test -f "$(srcdir)/$${lang}.po"; then \ + test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ + echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \ + cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot; \ + else \ + $(MAKE) $${lang}.po-create; \ + fi + + +install: install-exec install-data +install-exec: +install-data: install-data-yes + if test "$(PACKAGE)" = "gettext-tools"; then \ + $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \ + for file in $(DISTFILES.common) Makevars.template; do \ + $(INSTALL_DATA) $(srcdir)/$$file \ + $(DESTDIR)$(gettextsrcdir)/$$file; \ + done; \ + for file in Makevars; do \ + rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ + done; \ + else \ + : ; \ + fi +install-data-no: all +install-data-yes: all + $(mkinstalldirs) $(DESTDIR)$(datadir) + @catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ + dir=$(localedir)/$$lang/LC_MESSAGES; \ + $(mkinstalldirs) $(DESTDIR)$$dir; \ + if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \ + $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \ + echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \ + for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ + if test -n "$$lc"; then \ + if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ + link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ + mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ + for file in *; do \ + if test -f $$file; then \ + ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ + fi; \ + done); \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + else \ + if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ + :; \ + else \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + fi; \ + fi; \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ + ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ + ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ + cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ + echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \ + fi; \ + done; \ + done + +install-strip: install + +installdirs: installdirs-exec installdirs-data +installdirs-exec: +installdirs-data: installdirs-data-yes + if test "$(PACKAGE)" = "gettext-tools"; then \ + $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \ + else \ + : ; \ + fi +installdirs-data-no: +installdirs-data-yes: + $(mkinstalldirs) $(DESTDIR)$(datadir) + @catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ + dir=$(localedir)/$$lang/LC_MESSAGES; \ + $(mkinstalldirs) $(DESTDIR)$$dir; \ + for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ + if test -n "$$lc"; then \ + if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ + link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ + mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ + for file in *; do \ + if test -f $$file; then \ + ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ + fi; \ + done); \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + else \ + if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ + :; \ + else \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + fi; \ + fi; \ + fi; \ + done; \ + done + +# Define this as empty until I found a useful application. +installcheck: + +uninstall: uninstall-exec uninstall-data +uninstall-exec: +uninstall-data: uninstall-data-yes + if test "$(PACKAGE)" = "gettext-tools"; then \ + for file in $(DISTFILES.common) Makevars.template; do \ + rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ + done; \ + else \ + : ; \ + fi +uninstall-data-no: +uninstall-data-yes: + catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ + for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ + done; \ + done + +check: all + +info dvi ps pdf html tags TAGS ctags CTAGS ID: + +mostlyclean: + rm -f remove-potcdate.sed + rm -f stamp-poT + rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po + rm -fr *.o + +clean: mostlyclean + +distclean: clean + rm -f Makefile Makefile.in POTFILES *.mo + +maintainer-clean: distclean + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + rm -f stamp-po $(GMOFILES) + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) +dist distdir: + $(MAKE) update-po + @$(MAKE) dist2 +# This is a separate target because 'update-po' must be executed before. +dist2: stamp-po $(DISTFILES) + dists="$(DISTFILES)"; \ + if test "$(PACKAGE)" = "gettext-tools"; then \ + dists="$$dists Makevars.template"; \ + fi; \ + if test -f $(srcdir)/$(DOMAIN).pot; then \ + dists="$$dists $(DOMAIN).pot stamp-po"; \ + fi; \ + if test -f $(srcdir)/ChangeLog; then \ + dists="$$dists ChangeLog"; \ + fi; \ + for i in 0 1 2 3 4 5 6 7 8 9; do \ + if test -f $(srcdir)/ChangeLog.$$i; then \ + dists="$$dists ChangeLog.$$i"; \ + fi; \ + done; \ + if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \ + for file in $$dists; do \ + if test -f $$file; then \ + cp -p $$file $(distdir) || exit 1; \ + else \ + cp -p $(srcdir)/$$file $(distdir) || exit 1; \ + fi; \ + done + +update-po: Makefile + $(MAKE) $(DOMAIN).pot-update + test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES) + $(MAKE) update-gmo + +# General rule for creating PO files. + +.nop.po-create: + @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \ + echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \ + exit 1 + +# General rule for updating PO files. + +.nop.po-update: + @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \ + if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; fi; \ + tmpdir=`pwd`; \ + echo "$$lang:"; \ + test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ + echo "$${cdcmd}$(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \ + cd $(srcdir); \ + if $(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$tmpdir/$$lang.new.po; then \ + if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ + rm -f $$tmpdir/$$lang.new.po; \ + else \ + if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ + :; \ + else \ + echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ + exit 1; \ + fi; \ + fi; \ + else \ + echo "msgmerge for $$lang.po failed!" 1>&2; \ + rm -f $$tmpdir/$$lang.new.po; \ + fi + +$(DUMMYPOFILES): + +update-gmo: Makefile $(GMOFILES) + @: + +Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@ + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \ + $(SHELL) ./config.status + +force: + +# Tell versions [3.59,3.63) of GNU make not to export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/po/Makefile.in.in b/po/Makefile.in.in new file mode 100644 index 0000000..1f5cc28 --- /dev/null +++ b/po/Makefile.in.in @@ -0,0 +1,384 @@ +# Makefile for PO directory in any package using GNU gettext. +# Copyright (C) 1995-1997, 2000-2005 by Ulrich Drepper +# +# This file can be copied and used freely without restrictions. It can +# be used in projects which are not available under the GNU General Public +# License but which still want to provide support for the GNU gettext +# functionality. +# Please note that the actual code of GNU gettext is covered by the GNU +# General Public License and is *not* in the public domain. +# +# Origin: gettext-0.14.4 + +PACKAGE = @PACKAGE@ +VERSION = @VERSION@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ + +SHELL = /bin/sh +@SET_MAKE@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ + +prefix = @prefix@ +exec_prefix = @exec_prefix@ +datadir = @datadir@ +localedir = $(datadir)/locale +gettextsrcdir = $(datadir)/gettext/po + +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +mkinstalldirs = $(SHELL) $(MKINSTALLDIRS) + +GMSGFMT = @GMSGFMT@ +MSGFMT = @MSGFMT@ +XGETTEXT = @XGETTEXT@ +MSGMERGE = msgmerge +MSGMERGE_UPDATE = @MSGMERGE@ --update +MSGINIT = msginit +MSGCONV = msgconv +MSGFILTER = msgfilter + +POFILES = @POFILES@ +GMOFILES = @GMOFILES@ +UPDATEPOFILES = @UPDATEPOFILES@ +DUMMYPOFILES = @DUMMYPOFILES@ +DISTFILES.common = Makefile.in.in remove-potcdate.sin \ +$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3) +DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \ +$(POFILES) $(GMOFILES) \ +$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3) + +POTFILES = \ + +CATALOGS = @CATALOGS@ + +# Makevars gets inserted here. (Don't remove this line!) + +.SUFFIXES: +.SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update + +.po.mo: + @echo "$(MSGFMT) -c -o $@ $<"; \ + $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@ + +.po.gmo: + @lang=`echo $* | sed -e 's,.*/,,'`; \ + test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ + echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o $${lang}.gmo $${lang}.po"; \ + cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo + +.sin.sed: + sed -e '/^#/d' $< > t-$@ + mv t-$@ $@ + + +all: all-@USE_NLS@ + +all-yes: stamp-po +all-no: + +# $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no +# internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because +# we don't want to bother translators with empty POT files). We assume that +# LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty. +# In this case, stamp-po is a nop (i.e. a phony target). + +# stamp-po is a timestamp denoting the last time at which the CATALOGS have +# been loosely updated. Its purpose is that when a developer or translator +# checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS, +# "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent +# invocations of "make" will do nothing. This timestamp would not be necessary +# if updating the $(CATALOGS) would always touch them; however, the rule for +# $(POFILES) has been designed to not touch files that don't need to be +# changed. +stamp-po: $(srcdir)/$(DOMAIN).pot + test ! -f $(srcdir)/$(DOMAIN).pot || \ + test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES) + @test ! -f $(srcdir)/$(DOMAIN).pot || { \ + echo "touch stamp-po" && \ + echo timestamp > stamp-poT && \ + mv stamp-poT stamp-po; \ + } + +# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update', +# otherwise packages like GCC can not be built if only parts of the source +# have been downloaded. + +# This target rebuilds $(DOMAIN).pot; it is an expensive operation. +# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed. +$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed + if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \ + msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \ + else \ + msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \ + fi; \ + $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ + --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) \ + --files-from=$(srcdir)/POTFILES.in \ + --copyright-holder='$(COPYRIGHT_HOLDER)' \ + --msgid-bugs-address="$$msgid_bugs_address" + test ! -f $(DOMAIN).po || { \ + if test -f $(srcdir)/$(DOMAIN).pot; then \ + sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \ + sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \ + if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \ + rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \ + else \ + rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \ + mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ + fi; \ + else \ + mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ + fi; \ + } + +# This rule has no dependencies: we don't need to update $(DOMAIN).pot at +# every "make" invocation, only create it when it is missing. +# Only "make $(DOMAIN).pot-update" or "make dist" will force an update. +$(srcdir)/$(DOMAIN).pot: + $(MAKE) $(DOMAIN).pot-update + +# This target rebuilds a PO file if $(DOMAIN).pot has changed. +# Note that a PO file is not touched if it doesn't need to be changed. +$(POFILES): $(srcdir)/$(DOMAIN).pot + @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \ + if test -f "$(srcdir)/$${lang}.po"; then \ + test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ + echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \ + cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot; \ + else \ + $(MAKE) $${lang}.po-create; \ + fi + + +install: install-exec install-data +install-exec: +install-data: install-data-@USE_NLS@ + if test "$(PACKAGE)" = "gettext-tools"; then \ + $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \ + for file in $(DISTFILES.common) Makevars.template; do \ + $(INSTALL_DATA) $(srcdir)/$$file \ + $(DESTDIR)$(gettextsrcdir)/$$file; \ + done; \ + for file in Makevars; do \ + rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ + done; \ + else \ + : ; \ + fi +install-data-no: all +install-data-yes: all + $(mkinstalldirs) $(DESTDIR)$(datadir) + @catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ + dir=$(localedir)/$$lang/LC_MESSAGES; \ + $(mkinstalldirs) $(DESTDIR)$$dir; \ + if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \ + $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \ + echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \ + for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ + if test -n "$$lc"; then \ + if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ + link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ + mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ + for file in *; do \ + if test -f $$file; then \ + ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ + fi; \ + done); \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + else \ + if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ + :; \ + else \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + fi; \ + fi; \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ + ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ + ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ + cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ + echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \ + fi; \ + done; \ + done + +install-strip: install + +installdirs: installdirs-exec installdirs-data +installdirs-exec: +installdirs-data: installdirs-data-@USE_NLS@ + if test "$(PACKAGE)" = "gettext-tools"; then \ + $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \ + else \ + : ; \ + fi +installdirs-data-no: +installdirs-data-yes: + $(mkinstalldirs) $(DESTDIR)$(datadir) + @catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ + dir=$(localedir)/$$lang/LC_MESSAGES; \ + $(mkinstalldirs) $(DESTDIR)$$dir; \ + for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ + if test -n "$$lc"; then \ + if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ + link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ + mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ + for file in *; do \ + if test -f $$file; then \ + ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ + fi; \ + done); \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ + else \ + if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ + :; \ + else \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ + mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ + fi; \ + fi; \ + fi; \ + done; \ + done + +# Define this as empty until I found a useful application. +installcheck: + +uninstall: uninstall-exec uninstall-data +uninstall-exec: +uninstall-data: uninstall-data-@USE_NLS@ + if test "$(PACKAGE)" = "gettext-tools"; then \ + for file in $(DISTFILES.common) Makevars.template; do \ + rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ + done; \ + else \ + : ; \ + fi +uninstall-data-no: +uninstall-data-yes: + catalogs='$(CATALOGS)'; \ + for cat in $$catalogs; do \ + cat=`basename $$cat`; \ + lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ + for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \ + rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ + done; \ + done + +check: all + +info dvi ps pdf html tags TAGS ctags CTAGS ID: + +mostlyclean: + rm -f remove-potcdate.sed + rm -f stamp-poT + rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po + rm -fr *.o + +clean: mostlyclean + +distclean: clean + rm -f Makefile Makefile.in POTFILES *.mo + +maintainer-clean: distclean + @echo "This command is intended for maintainers to use;" + @echo "it deletes files that may require special tools to rebuild." + rm -f stamp-po $(GMOFILES) + +distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) +dist distdir: + $(MAKE) update-po + @$(MAKE) dist2 +# This is a separate target because 'update-po' must be executed before. +dist2: stamp-po $(DISTFILES) + dists="$(DISTFILES)"; \ + if test "$(PACKAGE)" = "gettext-tools"; then \ + dists="$$dists Makevars.template"; \ + fi; \ + if test -f $(srcdir)/$(DOMAIN).pot; then \ + dists="$$dists $(DOMAIN).pot stamp-po"; \ + fi; \ + if test -f $(srcdir)/ChangeLog; then \ + dists="$$dists ChangeLog"; \ + fi; \ + for i in 0 1 2 3 4 5 6 7 8 9; do \ + if test -f $(srcdir)/ChangeLog.$$i; then \ + dists="$$dists ChangeLog.$$i"; \ + fi; \ + done; \ + if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \ + for file in $$dists; do \ + if test -f $$file; then \ + cp -p $$file $(distdir) || exit 1; \ + else \ + cp -p $(srcdir)/$$file $(distdir) || exit 1; \ + fi; \ + done + +update-po: Makefile + $(MAKE) $(DOMAIN).pot-update + test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES) + $(MAKE) update-gmo + +# General rule for creating PO files. + +.nop.po-create: + @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \ + echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \ + exit 1 + +# General rule for updating PO files. + +.nop.po-update: + @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \ + if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; fi; \ + tmpdir=`pwd`; \ + echo "$$lang:"; \ + test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ + echo "$${cdcmd}$(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \ + cd $(srcdir); \ + if $(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$tmpdir/$$lang.new.po; then \ + if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ + rm -f $$tmpdir/$$lang.new.po; \ + else \ + if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ + :; \ + else \ + echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ + exit 1; \ + fi; \ + fi; \ + else \ + echo "msgmerge for $$lang.po failed!" 1>&2; \ + rm -f $$tmpdir/$$lang.new.po; \ + fi + +$(DUMMYPOFILES): + +update-gmo: Makefile $(GMOFILES) + @: + +Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@ + cd $(top_builddir) \ + && CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \ + $(SHELL) ./config.status + +force: + +# Tell versions [3.59,3.63) of GNU make not to export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/po/Makevars b/po/Makevars new file mode 100644 index 0000000..32692ab --- /dev/null +++ b/po/Makevars @@ -0,0 +1,41 @@ +# Makefile variables for PO directory in any package using GNU gettext. + +# Usually the message domain is the same as the package name. +DOMAIN = $(PACKAGE) + +# These two variables depend on the location of this directory. +subdir = po +top_builddir = .. + +# These options get passed to xgettext. +XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ + +# This is the copyright holder that gets inserted into the header of the +# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding +# package. (Note that the msgstr strings, extracted from the package's +# sources, belong to the copyright holder of the package.) Translators are +# expected to transfer the copyright for their translations to this person +# or entity, or to disclaim their copyright. The empty string stands for +# the public domain; in this case the translators are expected to disclaim +# their copyright. +COPYRIGHT_HOLDER = Free Software Foundation, Inc. + +# This is the email address or URL to which the translators shall report +# bugs in the untranslated strings: +# - Strings which are not entire sentences, see the maintainer guidelines +# in the GNU gettext documentation, section 'Preparing Strings'. +# - Strings which use unclear terms or require additional context to be +# understood. +# - Strings which make invalid assumptions about notation of date, time or +# money. +# - Pluralisation problems. +# - Incorrect English spelling. +# - Incorrect formatting. +# It can be your email address, or a mailing list address where translators +# can write to without being subscribed, or the URL of a web page through +# which the translators can contact you. +MSGID_BUGS_ADDRESS = + +# This is the list of locale categories, beyond LC_MESSAGES, for which the +# message catalogs shall be used. It is usually empty. +EXTRA_LOCALE_CATEGORIES = diff --git a/po/Makevars.template b/po/Makevars.template new file mode 100644 index 0000000..32692ab --- /dev/null +++ b/po/Makevars.template @@ -0,0 +1,41 @@ +# Makefile variables for PO directory in any package using GNU gettext. + +# Usually the message domain is the same as the package name. +DOMAIN = $(PACKAGE) + +# These two variables depend on the location of this directory. +subdir = po +top_builddir = .. + +# These options get passed to xgettext. +XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ + +# This is the copyright holder that gets inserted into the header of the +# $(DOMAIN).pot file. Set this to the copyright holder of the surrounding +# package. (Note that the msgstr strings, extracted from the package's +# sources, belong to the copyright holder of the package.) Translators are +# expected to transfer the copyright for their translations to this person +# or entity, or to disclaim their copyright. The empty string stands for +# the public domain; in this case the translators are expected to disclaim +# their copyright. +COPYRIGHT_HOLDER = Free Software Foundation, Inc. + +# This is the email address or URL to which the translators shall report +# bugs in the untranslated strings: +# - Strings which are not entire sentences, see the maintainer guidelines +# in the GNU gettext documentation, section 'Preparing Strings'. +# - Strings which use unclear terms or require additional context to be +# understood. +# - Strings which make invalid assumptions about notation of date, time or +# money. +# - Pluralisation problems. +# - Incorrect English spelling. +# - Incorrect formatting. +# It can be your email address, or a mailing list address where translators +# can write to without being subscribed, or the URL of a web page through +# which the translators can contact you. +MSGID_BUGS_ADDRESS = + +# This is the list of locale categories, beyond LC_MESSAGES, for which the +# message catalogs shall be used. It is usually empty. +EXTRA_LOCALE_CATEGORIES = diff --git a/po/POTFILES b/po/POTFILES new file mode 100644 index 0000000..e69de29 diff --git a/po/POTFILES.in b/po/POTFILES.in new file mode 100644 index 0000000..667e27c --- /dev/null +++ b/po/POTFILES.in @@ -0,0 +1 @@ +# List of source files which contain translatable strings. diff --git a/po/Rules-quot b/po/Rules-quot new file mode 100644 index 0000000..9c2a995 --- /dev/null +++ b/po/Rules-quot @@ -0,0 +1,47 @@ +# Special Makefile rules for English message catalogs with quotation marks. + +DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot + +.SUFFIXES: .insert-header .po-update-en + +en@quot.po-create: + $(MAKE) en@quot.po-update +en@boldquot.po-create: + $(MAKE) en@boldquot.po-update + +en@quot.po-update: en@quot.po-update-en +en@boldquot.po-update: en@boldquot.po-update-en + +.insert-header.po-update-en: + @lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \ + if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \ + tmpdir=`pwd`; \ + echo "$$lang:"; \ + ll=`echo $$lang | sed -e 's/@.*//'`; \ + LC_ALL=C; export LC_ALL; \ + cd $(srcdir); \ + if $(MSGINIT) -i $(DOMAIN).pot --no-translator -l $$ll -o - 2>/dev/null | sed -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | $(MSGFILTER) sed -f `echo $$lang | sed -e 's/.*@//'`.sed 2>/dev/null > $$tmpdir/$$lang.new.po; then \ + if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ + rm -f $$tmpdir/$$lang.new.po; \ + else \ + if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ + :; \ + else \ + echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ + exit 1; \ + fi; \ + fi; \ + else \ + echo "creation of $$lang.po failed!" 1>&2; \ + rm -f $$tmpdir/$$lang.new.po; \ + fi + +en@quot.insert-header: insert-header.sin + sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header + +en@boldquot.insert-header: insert-header.sin + sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header + +mostlyclean: mostlyclean-quot +mostlyclean-quot: + rm -f *.insert-header diff --git a/po/boldquot.sed b/po/boldquot.sed new file mode 100644 index 0000000..4b937aa --- /dev/null +++ b/po/boldquot.sed @@ -0,0 +1,10 @@ +s/"\([^"]*\)"/“\1”/g +s/`\([^`']*\)'/‘\1’/g +s/ '\([^`']*\)' / ‘\1’ /g +s/ '\([^`']*\)'$/ ‘\1’/g +s/^'\([^`']*\)' /‘\1’ /g +s/“”/""/g +s/“/“/g +s/”/”/g +s/‘/‘/g +s/’/’/g diff --git a/po/en@boldquot.header b/po/en@boldquot.header new file mode 100644 index 0000000..fedb6a0 --- /dev/null +++ b/po/en@boldquot.header @@ -0,0 +1,25 @@ +# All this catalog "translates" are quotation characters. +# The msgids must be ASCII and therefore cannot contain real quotation +# characters, only substitutes like grave accent (0x60), apostrophe (0x27) +# and double quote (0x22). These substitutes look strange; see +# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html +# +# This catalog translates grave accent (0x60) and apostrophe (0x27) to +# left single quotation mark (U+2018) and right single quotation mark (U+2019). +# It also translates pairs of apostrophe (0x27) to +# left single quotation mark (U+2018) and right single quotation mark (U+2019) +# and pairs of quotation mark (0x22) to +# left double quotation mark (U+201C) and right double quotation mark (U+201D). +# +# When output to an UTF-8 terminal, the quotation characters appear perfectly. +# When output to an ISO-8859-1 terminal, the single quotation marks are +# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to +# grave/acute accent (by libiconv), and the double quotation marks are +# transliterated to 0x22. +# When output to an ASCII terminal, the single quotation marks are +# transliterated to apostrophes, and the double quotation marks are +# transliterated to 0x22. +# +# This catalog furthermore displays the text between the quotation marks in +# bold face, assuming the VT100/XTerm escape sequences. +# diff --git a/po/en@quot.header b/po/en@quot.header new file mode 100644 index 0000000..a9647fc --- /dev/null +++ b/po/en@quot.header @@ -0,0 +1,22 @@ +# All this catalog "translates" are quotation characters. +# The msgids must be ASCII and therefore cannot contain real quotation +# characters, only substitutes like grave accent (0x60), apostrophe (0x27) +# and double quote (0x22). These substitutes look strange; see +# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html +# +# This catalog translates grave accent (0x60) and apostrophe (0x27) to +# left single quotation mark (U+2018) and right single quotation mark (U+2019). +# It also translates pairs of apostrophe (0x27) to +# left single quotation mark (U+2018) and right single quotation mark (U+2019) +# and pairs of quotation mark (0x22) to +# left double quotation mark (U+201C) and right double quotation mark (U+201D). +# +# When output to an UTF-8 terminal, the quotation characters appear perfectly. +# When output to an ISO-8859-1 terminal, the single quotation marks are +# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to +# grave/acute accent (by libiconv), and the double quotation marks are +# transliterated to 0x22. +# When output to an ASCII terminal, the single quotation marks are +# transliterated to apostrophes, and the double quotation marks are +# transliterated to 0x22. +# diff --git a/po/insert-header.sin b/po/insert-header.sin new file mode 100644 index 0000000..b26de01 --- /dev/null +++ b/po/insert-header.sin @@ -0,0 +1,23 @@ +# Sed script that inserts the file called HEADER before the header entry. +# +# At each occurrence of a line starting with "msgid ", we execute the following +# commands. At the first occurrence, insert the file. At the following +# occurrences, do nothing. The distinction between the first and the following +# occurrences is achieved by looking at the hold space. +/^msgid /{ +x +# Test if the hold space is empty. +s/m/m/ +ta +# Yes it was empty. First occurrence. Read the file. +r HEADER +# Output the file's contents by reading the next line. But don't lose the +# current line while doing this. +g +N +bb +:a +# The hold space was nonempty. Following occurrences. Do nothing. +x +:b +} diff --git a/po/quot.sed b/po/quot.sed new file mode 100644 index 0000000..0122c46 --- /dev/null +++ b/po/quot.sed @@ -0,0 +1,6 @@ +s/"\([^"]*\)"/“\1”/g +s/`\([^`']*\)'/‘\1’/g +s/ '\([^`']*\)' / ‘\1’ /g +s/ '\([^`']*\)'$/ ‘\1’/g +s/^'\([^`']*\)' /‘\1’ /g +s/“”/""/g diff --git a/po/remove-potcdate.sed b/po/remove-potcdate.sed new file mode 100644 index 0000000..edb38d7 --- /dev/null +++ b/po/remove-potcdate.sed @@ -0,0 +1,11 @@ +/^"POT-Creation-Date: .*"$/{ +x +s/P/P/ +ta +g +d +bb +:a +x +:b +} diff --git a/po/remove-potcdate.sin b/po/remove-potcdate.sin new file mode 100644 index 0000000..2436c49 --- /dev/null +++ b/po/remove-potcdate.sin @@ -0,0 +1,19 @@ +# Sed script that remove the POT-Creation-Date line in the header entry +# from a POT file. +# +# The distinction between the first and the following occurrences of the +# pattern is achieved by looking at the hold space. +/^"POT-Creation-Date: .*"$/{ +x +# Test if the hold space is empty. +s/P/P/ +ta +# Yes it was empty. First occurrence. Remove the line. +g +d +bb +:a +# The hold space was nonempty. Following occurrences. Do nothing. +x +:b +} diff --git a/reports.c b/reports.c deleted file mode 100644 index f0dc134..0000000 --- a/reports.c +++ /dev/null @@ -1,537 +0,0 @@ -#include "sst.h" -#include -#include -#include - -void attakreport(int curt) -{ - if (!curt) { - if (game.future[FCDBAS] < FOREVER) { - prout("Starbase in %s is currently under Commander attack.", - cramlc(quadrant, batx, baty)); - prout("It can hold out until Stardate %d.", - (int)game.future[FCDBAS]); - } - if (isatb == 1) { - prout("Starbase in %s is under Super-commander attack.", - cramlc(quadrant, game.state.isx, game.state.isy)); - prout("It can hold out until Stardate %d.", - (int)game.future[FSCDBAS]); - } - } else { - if (game.future[FCDBAS] < FOREVER) - proutn("Base in %i - %i attacked by C. Alive until %.1f", batx, baty, game.future[FCDBAS]); - if (isatb == 1) - proutn("Base in %i - %i attacked by S. Alive until %.1f", game.state.isx, game.state.isy, game.future[FSCDBAS]); - } - clreol(); -} - - -void report(void) -{ - char *s1,*s2,*s3; - - chew(); - s1 = (thawed?"thawed ":""); - switch (length) { - case 1: s2="short"; break; - case 2: s2="medium"; break; - case 4: s2="long"; break; - default: s2="unknown length"; break; - } - switch (skill) { - case SKILL_NOVICE: s3="novice"; break; - case SKILL_FAIR: s3="fair"; break; - case SKILL_GOOD: s3="good"; break; - case SKILL_EXPERT: s3="expert"; break; - case SKILL_EMERITUS: s3="emeritus"; break; - default: s3="skilled"; break; - } - prout(""); - prout("You %s playing a %s%s %s game.", - alldone? "were": "are now", s1, s2, s3); - if (skill>SKILL_GOOD && thawed && !alldone) prout("No plaque is allowed."); - if (tourn) prout("This is tournament game %d.", tourn); - prout("Your secret password is \"%s\"",game.passwd); - proutn("%d of %d Klingons have been killed", KLINGKILLED, INKLINGTOT); - if (NKILLC) prout(", including %d Commander%s.", NKILLC, NKILLC==1?"":"s"); - else if (NKILLK + NKILLSC > 0) prout(", but no Commanders."); - else prout("."); - if (skill > SKILL_FAIR) prout("The Super Commander has %sbeen destroyed.", - game.state.nscrem?"not ":""); - if (game.state.rembase != inbase) { - proutn("There "); - if (inbase-game.state.rembase==1) proutn("has been 1 base"); - else { - proutn("have been %d bases", inbase-game.state.rembase); - } - prout(" destroyed, %d remaining.", game.state.rembase); - } - else prout("There are %d bases.", inbase); - if (game.damage[DRADIO] == 0.0 || condit == IHDOCKED || iseenit) { - /* Don't report this if not seen and - either the radio is dead or not at base! */ - attakreport(0); - iseenit = 1; - } - if (casual) prout("%d casualt%s suffered so far.", - casual, casual==1? "y" : "ies"); - if (nhelp) prout("There were %d call%s for help.", - nhelp, nhelp==1 ? "" : "s"); - if (ship == IHE) { - proutn("You have "); - if (nprobes) proutn("%d", nprobes); - else proutn("no"); - proutn(" deep space probe"); - if (nprobes!=1) proutn("s"); - prout("."); - } - if ((game.damage[DRADIO] == 0.0 || condit == IHDOCKED)&& - game.future[FDSPROB] != FOREVER) { - if (isarmed) - proutn("An armed deep space probe is in"); - else - proutn("A deep space probe is in"); - proutn(cramlc(quadrant, probecx, probecy)); - prout("."); - } - if (icrystl) { - if (cryprob <= .05) - prout("Dilithium crystals aboard ship... not yet used."); - else { - int i=0; - double ai = 0.05; - while (cryprob > ai) { - ai *= 2.0; - i++; - } - prout("Dilithium crystals have been used %d time%s.", - i, i==1? "" : "s"); - } - } - skip(1); -} - -void lrscan(void) -{ - int x, y; - chew(); - if (game.damage[DLRSENS] != 0.0) { - /* Now allow base's sensors if docked */ - if (condit != IHDOCKED) { - prout("LONG-RANGE SENSORS DAMAGED."); - return; - } - prout("Starbase's long-range scan"); - } - else { - prout("Long-range scan"); - } - for (x = quadx-1; x <= quadx+1; x++) { - proutn(" "); - for (y = quady-1; y <= quady+1; y++) { - if (!VALID_QUADRANT(x, y)) - proutn(" -1"); - else { - if (!game.damage[DRADIO]) - game.state.galaxy[x][y].charted = TRUE; - game.state.chart[x][y].klingons = game.state.galaxy[x][y].klingons; - game.state.chart[x][y].starbase = game.state.galaxy[x][y].starbase; - game.state.chart[x][y].stars = game.state.galaxy[x][y].stars; - if (game.state.galaxy[x][y].supernova) - proutn(" ***"); - else - proutn(" %3d", game.state.chart[x][y].klingons*100 + game.state.chart[x][y].starbase * 10 + game.state.chart[x][y].stars); - } - } - prout(" "); - } -} - -void dreprt(void) -{ - int jdam = FALSE, i; - chew(); - - for (i = 0; i < NDEVICES; i++) { - if (game.damage[i] > 0.0) { - if (!jdam) { - prout("DEVICE -REPAIR TIMES-"); - prout(" IN FLIGHT DOCKED"); - jdam = TRUE; - } - prout(" %16s %8.2f %8.2f", - device[i], - game.damage[i]+0.05, - docfac*game.damage[i]+0.005); - } - } - if (!jdam) prout("All devices functional."); -} - -void rechart(void) -/* update the chart in the Enterprise's computer from galaxy data */ -{ - int i, j; - lastchart = game.state.date; - for_quadrants(i) - for_quadrants(j) - if (game.state.galaxy[i][j].charted) { - game.state.chart[i][j].klingons = game.state.galaxy[i][j].klingons; - game.state.chart[i][j].starbase = game.state.galaxy[i][j].starbase; - game.state.chart[i][j].stars = game.state.galaxy[i][j].stars; - } -} - -void chart(int nn) -{ - int i,j; - chew(); - - if (game.damage[DRADIO] == 0.0) - rechart(); - - if (lastchart < game.state.date && condit == IHDOCKED) { - prout("Spock- \"I revised the Star Chart from the starbase's records.\""); - rechart(); - } - - if (nn == 0) prout(" STAR CHART FOR THE KNOWN GALAXY"); - if (game.state.date > lastchart) - prout("(Last surveillance update %d stardates ago).", - (int)(game.state.date-lastchart)); - prout(" 1 2 3 4 5 6 7 8"); - for_quadrants(i) { - proutn("%d |", i); - for_quadrants(j) { - char buf[4]; - if ((game.options & OPTION_SHOWME) && i == quadx && j == quady) - proutn("<"); - else - proutn(" "); - if (game.state.galaxy[i][j].supernova) - strcpy(buf, "***"); - else if (!game.state.galaxy[i][j].charted && game.state.galaxy[i][j].starbase) - strcpy(buf, ".1."); - else if (game.state.galaxy[i][j].charted) - sprintf(buf, "%3d", game.state.chart[i][j].klingons*100 + game.state.chart[i][j].starbase * 10 + game.state.chart[i][j].stars); - else - strcpy(buf, "..."); - proutn(buf); - if ((game.options & OPTION_SHOWME) && i == quadx && j == quady) - proutn(">"); - else - proutn(" "); - } - proutn(" |"); - if (i0) - dam++; - proutn("Condition %s, %i DAMAGES", cp, dam); - break; - case 3: - proutn("Position %d - %d , %d - %d", - quadx, quady, sectx, secty); - break; - case 4: - proutn("Life Support "); - if (game.damage[DLIFSUP] != 0.0) { - if (condit == IHDOCKED) - proutn("DAMAGED, Base provides"); - else - proutn("DAMAGED, reserves=%4.2f", lsupres); - } - else - proutn("ACTIVE"); - break; - case 5: - proutn("Warp Factor %.1f", warpfac); - break; - case 6: - proutn("Energy %.2f", energy); - if (icrystl && (game.options & OPTION_SHOWME)) /* ESR */ - proutn(" (have crystals)"); - break; - case 7: - proutn("Torpedoes %d", torps); - break; - case 8: - proutn("Shields "); - if (game.damage[DSHIELD] != 0) - proutn("DAMAGED,"); - else if (shldup) - proutn("UP,"); - else - proutn("DOWN,"); - proutn(" %d%% %.1f units", - (int)((100.0*shield)/inshld + 0.5), shield); - break; - case 9: - proutn("Klingons Left %d", KLINGREM); - break; - case 10: - attakreport(1); - break; - } -} - -int srscan(int l) -{ - static char requests[][3] = - {"","da","co","po","ls","wa","en","to","sh","kl","ti"}; - int leftside=TRUE, rightside=TRUE, i, j, jj, req=0, nn=FALSE; - int goodScan=TRUE; - switch (l) { - case SCAN_FULL: // SRSCAN - if (game.damage[DSRSENS] != 0) { - /* Allow base's sensors if docked */ - if (condit != IHDOCKED) { - prout(" S.R. SENSORS DAMAGED!"); - goodScan=FALSE; - } - else - prout(" [Using Base's sensors]"); - } - else prout(" Short-range scan"); - if (goodScan && !game.damage[DRADIO]) { - game.state.chart[quadx][quady].klingons = game.state.galaxy[quadx][quady].klingons; - game.state.chart[quadx][quady].starbase = game.state.galaxy[quadx][quady].starbase; - game.state.chart[quadx][quady].stars = game.state.galaxy[quadx][quady].stars; - game.state.galaxy[quadx][quady].charted = TRUE; - } - scan(); - if (isit("chart")) nn = TRUE; - if (isit("no")) rightside = FALSE; - chew(); - prout(" 1 2 3 4 5 6 7 8 9 10"); - break; - case SCAN_REQUEST: - while (scan() == IHEOL) - proutn("Information desired? "); - chew(); - for (req = 1; req <= sizeof(requests)/sizeof(requests[0]); req++) - if (strncmp(citem,requests[req],min(2,strlen(citem)))==0) - break; - if (req > sizeof(requests)/sizeof(requests[0])) { - prout("UNRECOGNIZED REQUEST. Legal requests are:"); - prout(" date, condition, position, lsupport, warpfactor,"); - prout(" energy, torpedoes, shields, klingons, time, bases."); - return FALSE; - } - // no break - case SCAN_STATUS: // STATUS - chew(); - leftside = FALSE; - skip(1); - // no break - case SCAN_NO_LEFTSIDE: // REQUEST - leftside=FALSE; - break; - } - if (condit != IHDOCKED) newcnd(); - for (i = 1; i <= max(QUADSIZE, sizeof(requests)/sizeof(requests[0])); i++) { - jj = (req!=0 ? req : i); - if (leftside && i <= QUADSIZE) { - proutn("%2d ", i); - for_sectors(j) { - sectscan(goodScan, i, j); - } - } - if (rightside) - status(jj); - if (iix1) ix2 = 1; - else ix2=QUADSIZE; - if (quadx>iy1) iy2 = 1; - else iy2=QUADSIZE; - } - - if (!VALID_QUADRANT(ix1, iy1) || !VALID_SECTOR(ix2, iy2)) { - huh(); - return; - } - dist = sqrt(square(iy1-quadx+0.1*(iy2-sectx))+ - square(ix1-quady+0.1*(ix2-secty))); - wfl = FALSE; - - if (prompt) prout("Answer \"no\" if you don't know the value:"); - while (TRUE) { - chew(); - proutn("Time or arrival date? "); - if (scan()==IHREAL) { - ttime = aaitem; - if (ttime > game.state.date) ttime -= game.state.date; // Actually a star date - if (ttime <= 1e-10 || - (twarp=(floor(sqrt((10.0*dist)/ttime)*10.0)+1.0)/10.0) > 10) { - prout("We'll never make it, sir."); - chew(); - return; - } - if (twarp < 1.0) twarp = 1.0; - break; - } - chew(); - proutn("Warp factor? "); - if (scan()== IHREAL) { - wfl = TRUE; - twarp = aaitem; - if (twarp<1.0 || twarp > 10.0) { - huh(); - return; - } - break; - } - prout("Captain, certainly you can give me one of these."); - } - while (TRUE) { - chew(); - ttime = (10.0*dist)/square(twarp); - tpower = dist*twarp*twarp*twarp*(shldup+1); - if (tpower >= energy) { - prout("Insufficient energy, sir."); - if (shldup==0 || tpower > energy*2.0) { - if (!wfl) return; - proutn("New warp factor to try? "); - if (scan() == IHREAL) { - wfl = TRUE; - twarp = aaitem; - if (twarp<1.0 || twarp > 10.0) { - huh(); - return; - } - continue; - } - else { - chew(); - skip(1); - return; - } - } - prout("But if you lower your shields,"); - proutn("remaining"); - tpower /= 2; - } - else - proutn("Remaining"); - prout(" energy will be %.2f.", energy-tpower); - if (wfl) { - prout("And we will arrive at stardate %.2f.", - game.state.date+ttime); - } - else if (twarp==1.0) - prout("Any warp speed is adequate."); - else { - prout("Minimum warp needed is %.2f,", twarp); - prout("and we will arrive at stardate %.2f.", - game.state.date+ttime); - } - if (game.state.remtime < ttime) - prout("Unfortunately, the Federation will be destroyed by then."); - if (twarp > 6.0) - prout("You'll be taking risks at that speed, Captain"); - if ((isatb==1 && game.state.isy == ix1 && game.state.isx == iy1 && - game.future[FSCDBAS]< ttime+game.state.date)|| - (game.future[FCDBAS] 10.0) { - huh(); - return; - } - } - else { - chew(); - skip(1); - return; - } - } - -} diff --git a/setup.c b/setup.c deleted file mode 100644 index 8499184..0000000 --- a/setup.c +++ /dev/null @@ -1,742 +0,0 @@ -#include -#include -#include "sst.h" - -static long filelength(int fd) { -struct stat buf; - fstat(fd, &buf); - return buf.st_size; -} - -void prelim(void) -{ - skip(2); - prout("-SUPER- STAR TREK"); - skip(1); -#ifdef __HISTORICAL__ - prout("Latest update-21 Sept 78"); - skip(1); -#endif /* __HISTORICAL__ */ -} - -void freeze(int boss) -{ - FILE *fp; - int key; - if (boss) { - strcpy(citem, "emsave.trk"); - } - else { - if ((key = scan()) == IHEOL) { - proutn("File name: "); - key = scan(); - } - if (key != IHALPHA) { - huh(); - return; - } - chew(); - if (strchr(citem, '.') == NULL) { - strcat(citem, ".trk"); - } - } - if ((fp = fopen(citem, "wb")) == NULL) { - proutn("Can't freeze game as file "); - proutn(citem); - skip(1); - return; - } - strcpy(game.magic, SSTMAGIC); - fwrite(&game, sizeof(game), 1, fp); - - fclose(fp); - - /* I hope that's enough! */ -} - - -int thaw(void) -{ - FILE *fp; - int key; - - game.passwd[0] = '\0'; - if ((key = scan()) == IHEOL) { - proutn("File name: "); - key = scan(); - } - if (key != IHALPHA) { - huh(); - return 1; - } - chew(); - if (strchr(citem, '.') == NULL) { - strcat(citem, ".trk"); - } - if ((fp = fopen(citem, "rb")) == NULL) { - proutn("Can't find game file "); - proutn(citem); - skip(1); - return 1; - } - fread(&game, sizeof(game), 1, fp); - if (feof(fp) || ftell(fp) != filelength(fileno(fp)) || strcmp(game.magic, SSTMAGIC)) { - prout("Game file format is bad, should begin with " SSTMAGIC); - skip(1); - fclose(fp); - return 1; - } - - fclose(fp); - - return 0; -} - -void abandn(void) -{ - int nb, l; - - chew(); - if (condit==IHDOCKED) { - if (ship!=IHE) { - prout("You cannot abandon Ye Faerie Queene."); - return; - } - } - else { - /* Must take shuttle craft to exit */ - if (game.damage[DSHUTTL]==-1) { - prout("Ye Faerie Queene has no shuttle craft."); - return; - } - if (game.damage[DSHUTTL]<0) { - prout("Shuttle craft now serving Big Mac's."); - return; - } - if (game.damage[DSHUTTL]>0) { - prout("Shuttle craft damaged."); - return; - } - if (landed==1) { - prout("You must be aboard the Enterprise."); - return; - } - if (iscraft!=1) { - prout("Shuttle craft not currently available."); - return; - } - /* Print abandon ship messages */ - skip(1); - prouts("***ABANDON SHIP! ABANDON SHIP!"); - skip(1); - prouts("***ALL HANDS ABANDON SHIP!"); - skip(2); - prout("Captain and crew escape in shuttle craft."); - prout("Remainder of ship's complement beam down"); - prout("to nearest habitable planet."); - if (game.state.rembase==0) { - /* Ops! no place to go... */ - finish(FABANDN); - return; - } - /* If at least one base left, give 'em the Faerie Queene */ - skip(1); - icrystl = 0; /* crystals are lost */ - nprobes = 0; /* No probes */ - prout("You are captured by Klingons and released to"); - prout("the Federation in a prisoner-of-war exchange."); - nb = Rand()*game.state.rembase+1; - /* Set up quadrant and position FQ adjacient to base */ - if (quadx!=game.state.baseqx[nb] || quady!=game.state.baseqy[nb]) { - quadx = game.state.baseqx[nb]; - quady = game.state.baseqy[nb]; - sectx = secty = 5; - newqad(1); - } - for (;;) { - /* position next to base by trial and error */ - game.quad[sectx][secty] = IHDOT; - for_sectors(l) { - sectx = 3.0*Rand() - 1.0 + basex; - secty = 3.0*Rand() - 1.0 + basey; - if (VALID_SECTOR(sectx, secty) && - game.quad[sectx][secty] == IHDOT) break; - } - if (l < QUADSIZE+1) break; /* found a spot */ - sectx=QUADSIZE/2; - secty=QUADSIZE/2; - newqad(1); - } - } - /* Get new commission */ - game.quad[sectx][secty] = ship = IHF; - prout("Starfleet puts you in command of another ship,"); - prout("the Faerie Queene, which is antiquated but,"); - prout("still useable."); - if (icrystl!=0) prout("The dilithium crystals have been moved."); - imine=0; - iscraft=0; /* Gallileo disappears */ - /* Resupply ship */ - condit=IHDOCKED; - for (l = 0; l < NDEVICES; l++) - game.damage[l] = 0.0; - game.damage[DSHUTTL] = -1; - energy = inenrg = 3000.0; - shield = inshld = 1250.0; - torps = intorps = 6; - lsupres=inlsr=3.0; - shldup=0; - warpfac=5.0; - wfacsq=25.0; - return; -} - -void setup(int needprompt) -{ - int i,j, krem, klumper; - int ix, iy; -#ifdef DEBUG - idebug = 0; -#endif - // Decide how many of everything - if (choose(needprompt)) return; // frozen game - // Prepare the Enterprise - alldone = gamewon = 0; - ship = IHE; - energy = inenrg = 5000.0; - shield = inshld = 2500.0; - shldchg = shldup = 0; - inlsr = 4.0; - lsupres = 4.0; - iran(GALSIZE, &quadx, &quady); - iran(QUADSIZE, §x, §y); - torps = intorps = 10; - nprobes = (int)(3.0*Rand() + 2.0); /* Give them 2-4 of these wonders */ - warpfac = 5.0; - wfacsq = warpfac * warpfac; - for (i=0; i < NDEVICES; i++) - game.damage[i] = 0.0; - // Set up assorted game parameters - batx = baty = 0; - game.state.date = indate = 100.0*(int)(31.0*Rand()+20.0); - nkinks = nhelp = resting = casual = 0; - isatb = iscate = imine = icrystl = icraft = game.state.nplankl = 0; - game.state.starkl = game.state.basekl = 0; - iscraft = 1; - landed = -1; - alive = 1; - docfac = 0.25; - for_quadrants(i) - for_quadrants(j) { - game.state.galaxy[i][j].charted = 0; - game.state.galaxy[i][j].planets = 0; - game.state.galaxy[i][j].romulans = 0; - game.state.galaxy[i][j].klingons = 0; - game.state.galaxy[i][j].starbase = 0; - game.state.galaxy[i][j].supernova = 0; - } - // Initialize times for extraneous events - game.future[FSNOVA] = game.state.date + expran(0.5 * intime); - game.future[FTBEAM] = game.state.date + expran(1.5 * (intime / game.state.remcom)); - game.future[FSNAP] = game.state.date + 1.0 + Rand(); // Force an early snapshot - game.future[FBATTAK] = game.state.date + expran(0.3*intime); - game.future[FCDBAS] = FOREVER; - game.future[FSCMOVE] = game.state.nscrem ? game.state.date+0.2777 : FOREVER; - game.future[FSCDBAS] = FOREVER; - game.future[FDSPROB] = FOREVER; - // Starchart is functional but we've never seen it - lastchart = FOREVER; - // Put stars in the galaxy - instar = 0; - for_quadrants(i) - for_quadrants(j) { - int k = Rand()*9.0 + 1.0; - instar += k; - game.state.galaxy[i][j].stars = k; - } - // Locate star bases in galaxy - for (i = 1; i <= inbase; i++) { - int contflag; - do { - do iran(GALSIZE, &ix, &iy); - while (game.state.galaxy[ix][iy].starbase); - contflag = FALSE; - for (j = i-1; j > 0; j--) { - /* Improved placement algorithm to spread out bases */ - double distq = square(ix-game.state.baseqx[j]) + square(iy-game.state.baseqy[j]); - if (distq < 6.0*(BASEMAX+1-inbase) && Rand() < 0.75) { - contflag = TRUE; -#ifdef DEBUG - prout("DEBUG: Abandoning base #%d at %d-%d", i, ix, iy); -#endif - break; - } -#ifdef DEBUG - else if (distq < 6.0 * (BASEMAX+1-inbase)) { - prout("DEBUG: saving base #%d, close to #%d", i, j); - } -#endif - } - } while (contflag); - - game.state.baseqx[i] = ix; - game.state.baseqy[i] = iy; - game.state.galaxy[ix][iy].starbase = 1; - game.state.chart[ix][iy].starbase = 1; - } - // Position ordinary Klingon Battle Cruisers - krem = inkling; - klumper = 0.25*skill*(9.0-length)+1.0; - if (klumper > 9) klumper = 9; // Can't have more than 9 in quadrant - do { - double r = Rand(); - int klump = (1.0 - r*r)*klumper; - if (klump > krem) klump = krem; - krem -= klump; - do iran(GALSIZE,&ix,&iy); - while (game.state.galaxy[ix][iy].supernova || - game.state.galaxy[ix][iy].klingons + klump > 9); - game.state.galaxy[ix][iy].klingons += klump; - } while (krem > 0); - // Position Klingon Commander Ships -#ifdef DEBUG - klumper = 1; -#endif - for (i = 1; i <= incom; i++) { - do { - do { /* IF debugging, put commanders by bases, always! */ -#ifdef DEBUG - if (idebug && klumper <= inbase) { - ix = game.state.baseqx[klumper]; - iy = game.state.baseqy[klumper]; - klumper++; - } - else -#endif - iran(GALSIZE, &ix, &iy); - } - while ((!game.state.galaxy[ix][iy].klingons && Rand() < 0.75)|| - game.state.galaxy[ix][iy].supernova|| - game.state.galaxy[ix][iy].klingons > 8); - // check for duplicate - for (j = 1; j < i; j++) - if (game.state.cx[j]==ix && game.state.cy[j]==iy) break; - } while (j < i); - game.state.galaxy[ix][iy].klingons++; - game.state.cx[i] = ix; - game.state.cy[i] = iy; - } - // Locate planets in galaxy - for (i = 0; i < inplan; i++) { - do iran(GALSIZE, &ix, &iy); while (game.state.galaxy[ix][iy].planets); - game.state.galaxy[ix][iy].planets = 1; - game.state.plnets[i].x = ix; - game.state.plnets[i].y = iy; - game.state.plnets[i].pclass = Rand()*3.0; // Planet class M N or O - game.state.plnets[i].crystals = 1.5*Rand(); // 1 in 3 chance of crystals - game.state.plnets[i].known = unknown; - } - // Locate Romulans - for (i = 1; i <= game.state.nromrem; i++) { - iran(GALSIZE, &ix, &iy); - game.state.galaxy[ix][iy].romulans = 1; - } - // Locate the Super Commander - if (game.state.nscrem > 0) { - do iran(GALSIZE, &ix, &iy); - while (game.state.galaxy[ix][iy].supernova || game.state.galaxy[ix][iy].klingons > 8); - game.state.isx = ix; - game.state.isy = iy; - game.state.galaxy[ix][iy].klingons++; - } - // Place thing (in tournament game, thingx == -1, don't want one!) - if (thingx != -1) { - iran(GALSIZE, &thingx, &thingy); - } - else { - thingx = thingy = 0; - } - -// idate = date; - skip(2); - game.state.snap = 0; - - if (skill == SKILL_NOVICE) { - prout("It is stardate %d. The Federation is being attacked by", - (int)game.state.date); - prout("a deadly Klingon invasion force. As captain of the United"); - prout("Starship U.S.S. Enterprise, it is your mission to seek out"); - prout("and destroy this invasion force of %d battle cruisers.", - INKLINGTOT); - prout("You have an initial allotment of %d stardates to complete", (int)intime); - prout("your mission. As you proceed you may be given more time."); - prout(""); - prout("You will have %d supporting starbases.", inbase); - proutn("Starbase locations- "); - } - else { - prout("Stardate %d.", (int)game.state.date); - prout(""); - prout("%d Klingons.", INKLINGTOT); - prout("An unknown number of Romulans."); - if (game.state.nscrem) prout("and one (GULP) Super-Commander."); - prout("%d stardates.",(int)intime); - proutn("%d starbases in ", inbase); - } - for (i = 1; i <= inbase; i++) { - proutn(cramlc(0, game.state.baseqx[i], game.state.baseqy[i])); - proutn(" "); - } - skip(2); - proutn("The Enterprise is currently in "); - proutn(cramlc(quadrant, quadx, quady)); - proutn(" "); - proutn(cramlc(sector, sectx, secty)); - skip(2); - prout("Good Luck!"); - if (game.state.nscrem) prout(" YOU'LL NEED IT."); - waitfor(); - newqad(0); - if (nenhere-iqhere-ithere) shldup=1.0; - if (neutz) attack(0); // bad luck to start in a Romulan Neutral Zone -} - -void randomize(void) -{ - srand((int)time(NULL)); -} - -int choose(int needprompt) -{ - while (TRUE) { - tourn = 0; - thawed = 0; - skill = SKILL_NONE; - length = 0; - if (needprompt) /* Can start with command line options */ - proutn("Would you like a regular, tournament, or saved game? "); - scan(); - if (strlen(citem)==0) continue; // Try again - if (isit("tournament")) { - while (scan() == IHEOL) { - proutn("Type in tournament number-"); - } - if (aaitem == 0) { - chew(); - continue; // We don't want a blank entry - } - tourn = (int)aaitem; - thingx = -1; - srand((unsigned int)(int)aaitem); - break; - } - if (isit("saved") || isit("frozen")) { - if (thaw()) continue; - chew(); - if (*game.passwd==0) continue; - if (!alldone) thawed = 1; // No plaque if not finished - report(); - waitfor(); - return TRUE; - } - if (isit("regular")) break; - proutn("What is \""); - proutn(citem); - prout("\"?"); - chew(); - } - while (length==0 || skill==SKILL_NONE) { - if (scan() == IHALPHA) { - if (isit("short")) length = 1; - else if (isit("medium")) length = 2; - else if (isit("long")) length = 4; - else if (isit("novice")) skill = SKILL_NOVICE; - else if (isit("fair")) skill = SKILL_FAIR; - else if (isit("good")) skill = SKILL_GOOD; - else if (isit("expert")) skill = SKILL_EXPERT; - else if (isit("emeritus")) skill = SKILL_EMERITUS; - else { - proutn("What is \""); - proutn(citem); - prout("\"?"); - } - } - else { - chew(); - if (length==0) proutn("Would you like a Short, Medium, or Long game? "); - else if (skill == SKILL_NONE) proutn("Are you a Novice, Fair, Good, Expert, or Emeritus player? "); - } - } - // Choose game options -- added by ESR for SST2K - if (scan() != IHALPHA) { - chew(); - proutn("Choose your game options: "); - scan(); - } - if (isit("plain")) { - // Approximates the UT FORTRAN version. - game.options &=~ (OPTION_THOLIAN | OPTION_PLANETS | OPTION_THINGY | OPTION_PROBE | OPTION_RAMMING | OPTION_MVBADDY | OPTION_BLKHOLE | OPTION_BASE); - game.options |= OPTION_PLAIN; - } - else if (isit("almy")) { - // Approximates Tom Almy's version. - game.options &=~ (OPTION_THINGY | OPTION_BLKHOLE | OPTION_BASE); - game.options |= OPTION_ALMY; - } - else if (isit("fancy")) - /* do nothing */; - else if (strlen(citem)) { - proutn("What is \""); - proutn(citem); - prout("\"?"); - } - setpassword(); -#ifdef DEBUG - if (strcmp(game.passwd, "debug")==0) idebug = 1; -#endif - - // Use parameters to generate initial values of things - damfac = 0.5 * skill; - game.state.rembase = 2.0 + Rand()*(BASEMAX-2.0); - inbase = game.state.rembase; - if (game.options & OPTION_PLANETS) - inplan = (PLNETMAX/2) + (PLNETMAX/2+1)*Rand(); - game.state.nromrem = inrom = (2.0+Rand())*skill; - game.state.nscrem = inscom = (skill > SKILL_FAIR ? 1 : 0); - game.state.remtime = 7.0 * length; - intime = game.state.remtime; - game.state.remkl = inkling = 2.0*intime*((skill+1 - 2*Rand())*skill*0.1+.15); - incom = skill + 0.0625*inkling*Rand(); - game.state.remcom = min(10, incom); - incom = game.state.remcom; - game.state.remres = (inkling+4*incom)*intime; - inresor = game.state.remres; - if (inkling > 50) { - inbase = (game.state.rembase += 1); - } - return FALSE; -} - -void dropin(int iquad, int *ix, int *iy) -{ - do iran(QUADSIZE, ix, iy); - while (game.quad[*ix][*iy] != IHDOT); - game.quad[*ix][*iy] = iquad; -} - -void newcnd(void) -{ - condit = IHGREEN; - if (energy < 1000.0) condit = IHYELLOW; - if (game.state.galaxy[quadx][quady].klingons || game.state.galaxy[quadx][quady].romulans) - condit = IHRED; - if (!alive) condit=IHDEAD; -} - - -void newqad(int shutup) -{ - int i, j, ix, iy, nplan; - - iattak = 1; - justin = 1; - basex = basey = 0; - klhere = 0; - comhere = 0; - plnetx = plnety = 0; - ishere = 0; - irhere = 0; - iplnet = 0; - nenhere = 0; - neutz = 0; - inorbit = 0; - landed = -1; - ientesc = 0; - ithere = 0; - iqhere=0; - iqengry=0; - iseenit = 0; - if (iscate) { - // Attempt to escape Super-commander, so tbeam back! - iscate = 0; - ientesc = 1; - } - // Clear quadrant - for_sectors(i) - for_sectors(j) - game.quad[i][j] = IHDOT; - // cope with supernova - if (game.state.galaxy[quadx][quady].supernova) - return; - klhere = game.state.galaxy[quadx][quady].klingons; - irhere = game.state.galaxy[quadx][quady].romulans; - nplan = game.state.galaxy[quadx][quady].planets; - nenhere = klhere + irhere; - - // Position Starship - game.quad[sectx][secty] = ship; - - if (game.state.galaxy[quadx][quady].klingons) { - // Position ordinary Klingons - for (i = 1; i <= klhere; i++) { - dropin(IHK, &ix, &iy); - game.kx[i] = ix; - game.ky[i] = iy; - game.kdist[i] = game.kavgd[i] = sqrt(square(sectx-ix) + square(secty-iy)); - game.kpower[i] = Rand()*150.0 +300.0 +25.0*skill; - } - // If we need a commander, promote a Klingon - for_commanders(i) - if (game.state.cx[i]==quadx && game.state.cy[i]==quady) break; - - if (i <= game.state.remcom) { - game.quad[ix][iy] = IHC; - game.kpower[klhere] = 950.0+400.0*Rand()+50.0*skill; - comhere = 1; - } - - // If we need a super-commander, promote a Klingon - if (quadx == game.state.isx && quady == game.state.isy) { - game.quad[game.kx[1]][game.ky[1]] = IHS; - game.kpower[1] = 1175.0 + 400.0*Rand() + 125.0*skill; - iscate = game.state.remkl>1; - ishere = 1; - } - } - // Put in Romulans if needed - for (i = klhere+1; i <= nenhere; i++) { - dropin(IHR, &ix, &iy); - game.kx[i] = ix; - game.ky[i] = iy; - game.kdist[i] = game.kavgd[i] = sqrt(square(sectx-ix) + square(secty-iy)); - game.kpower[i] = Rand()*400.0 + 450.0 + 50.0*skill; - } - // If quadrant needs a starbase, put it in - if (game.state.galaxy[quadx][quady].starbase) - dropin(IHB, &basex, &basey); - - if (nplan) { - // If quadrant needs a planet, put it in - for (i=0; i < inplan; i++) - if (game.state.plnets[i].x == quadx && game.state.plnets[i].y == quady) break; - if (i < inplan) { - iplnet = i; - dropin(IHP, &plnetx, &plnety); - } - } - // Check for condition - newcnd(); - // And finally the stars - for (i = 1; i <= game.state.galaxy[quadx][quady].stars; i++) - dropin(IHSTAR, &ix, &iy); - - // Check for RNZ - if (irhere > 0 && klhere == 0) { - neutz = 1; - if (game.damage[DRADIO] <= 0.0) { - skip(1); - prout("LT. Uhura- \"Captain, an urgent message."); - prout(" I'll put it on audio.\" CLICK"); - skip(1); - prout("INTRUDER! YOU HAVE VIOLATED THE ROMULAN NEUTRAL ZONE."); - prout("LEAVE AT ONCE, OR YOU WILL BE DESTROYED!"); - } - } - - if (shutup==0) { - // Put in THING if needed - if (thingx == quadx && thingy == quady) { - dropin(IHQUEST, &ix, &iy); - iran(GALSIZE, &thingx, &thingy); - nenhere++; - iqhere=1; - game.kx[nenhere] = ix; - game.ky[nenhere] = iy; - game.kdist[nenhere] = game.kavgd[nenhere] = - sqrt(square(sectx-ix) + square(secty-iy)); - game.kpower[nenhere] = Rand()*6000.0 +500.0 +250.0*skill; - if (game.damage[DSRSENS] == 0.0) { - skip(1); - prout("MR. SPOCK- \"Captain, this is most unusual."); - prout(" Please examine your short-range scan.\""); - } - } - } - - // Decide if quadrant needs a Tholian - if (game.options & OPTION_THOLIAN) { - if ((skill < SKILL_GOOD && Rand() <= 0.02) || /* Lighten up if skill is low */ - (skill == SKILL_GOOD && Rand() <= 0.05) || - (skill > SKILL_GOOD && Rand() <= 0.08) - #ifdef DEBUG - || strcmp(game.passwd, "tholianx")==0 - #endif - ) { - do { - ithx = Rand() > 0.5 ? QUADSIZE : 1; - ithy = Rand() > 0.5 ? QUADSIZE : 1; - } while (game.quad[ithx][ithy] != IHDOT); - game.quad[ithx][ithy] = IHT; - ithere = 1; - nenhere++; - game.kx[nenhere] = ithx; - game.ky[nenhere] = ithy; - game.kdist[nenhere] = game.kavgd[nenhere] = - sqrt(square(sectx-ithx) + square(secty-ithy)); - game.kpower[nenhere] = Rand()*400.0 +100.0 +25.0*skill; - /* Reserve unocupied corners */ - if (game.quad[1][1]==IHDOT) game.quad[1][1] = 'X'; - if (game.quad[1][QUADSIZE]==IHDOT) game.quad[1][QUADSIZE] = 'X'; - if (game.quad[QUADSIZE][1]==IHDOT) game.quad[QUADSIZE][1] = 'X'; - if (game.quad[QUADSIZE][QUADSIZE]==IHDOT) game.quad[QUADSIZE][QUADSIZE] = 'X'; - } - } - - sortkl(); - - // Put in a few black holes - for (i = 1; i <= 3; i++) - if (Rand() > 0.5) - dropin(IHBLANK, &ix, &iy); - - // Take out X's in corners if Tholian present - if (ithere) { - if (game.quad[1][1]=='X') game.quad[1][1] = IHDOT; - if (game.quad[1][QUADSIZE]=='X') game.quad[1][QUADSIZE] = IHDOT; - if (game.quad[QUADSIZE][1]=='X') game.quad[QUADSIZE][1] = IHDOT; - if (game.quad[QUADSIZE][QUADSIZE]=='X') game.quad[QUADSIZE][QUADSIZE] = IHDOT; - } -} - -void sortkl(void) -{ - double t; - int sw, j, k; - - // The author liked bubble sort. So we will use it. :-( - - if (nenhere-iqhere-ithere < 2) return; - - do { - sw = FALSE; - for (j = 1; j < nenhere; j++) - if (game.kdist[j] > game.kdist[j+1]) { - sw = TRUE; - t = game.kdist[j]; - game.kdist[j] = game.kdist[j+1]; - game.kdist[j+1] = t; - t = game.kavgd[j]; - game.kavgd[j] = game.kavgd[j+1]; - game.kavgd[j+1] = t; - k = game.kx[j]; - game.kx[j] = game.kx[j+1]; - game.kx[j+1] = k; - k = game.ky[j]; - game.ky[j] = game.ky[j+1]; - game.ky[j+1] = k; - t = game.kpower[j]; - game.kpower[j] = game.kpower[j+1]; - game.kpower[j+1] = t; - } - } while (sw); -} diff --git a/src/Makefile.am b/src/Makefile.am new file mode 100644 index 0000000..2249438 --- /dev/null +++ b/src/Makefile.am @@ -0,0 +1,21 @@ +AM_CFLAGS = -Wall -Wimplicit -Wunused -Wmissing-prototypes \ + -Wuninitialized -fno-inline -O1 -DDATA_DIR=\"$(pkgdatadir)\" @CFLAGS@ + +bin_PROGRAMS = sst + +sst_SOURCES = \ + ai.c \ + battle.c \ + events.c \ + finish.c \ + moving.c \ + planets.c \ + reports.c \ + setup.c \ + sst.c \ + io.c \ + sstlinux.c + +EXTRA_DIST = \ + sst.h \ + sstlinux.h diff --git a/src/Makefile.in b/src/Makefile.in new file mode 100644 index 0000000..95a9820 --- /dev/null +++ b/src/Makefile.in @@ -0,0 +1,472 @@ +# Makefile.in generated by automake 1.9.6 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = .. +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +bin_PROGRAMS = sst$(EXEEXT) +subdir = src +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/config.h.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = +am__installdirs = "$(DESTDIR)$(bindir)" +binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) +PROGRAMS = $(bin_PROGRAMS) +am_sst_OBJECTS = ai.$(OBJEXT) battle.$(OBJEXT) events.$(OBJEXT) \ + finish.$(OBJEXT) moving.$(OBJEXT) planets.$(OBJEXT) \ + reports.$(OBJEXT) setup.$(OBJEXT) sst.$(OBJEXT) io.$(OBJEXT) \ + sstlinux.$(OBJEXT) +sst_OBJECTS = $(am_sst_OBJECTS) +sst_LDADD = $(LDADD) +DEFAULT_INCLUDES = -I. -I$(srcdir) -I. +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +SOURCES = $(sst_SOURCES) +DIST_SOURCES = $(sst_SOURCES) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GMSGFMT = @GMSGFMT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +LDFLAGS = @LDFLAGS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGMERGE = @MSGMERGE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_STRIP = @ac_ct_STRIP@ +ac_ct_have_python = @ac_ct_have_python@ +ac_ct_have_xmlto = @ac_ct_have_xmlto@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +have_python = @have_python@ +have_xmlto = @have_xmlto@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +AM_CFLAGS = -Wall -Wimplicit -Wunused -Wmissing-prototypes \ + -Wuninitialized -fno-inline -O1 -DDATA_DIR=\"$(pkgdatadir)\" @CFLAGS@ + +sst_SOURCES = \ + ai.c \ + battle.c \ + events.c \ + finish.c \ + moving.c \ + planets.c \ + reports.c \ + setup.c \ + sst.c \ + io.c \ + sstlinux.c + +EXTRA_DIST = \ + sst.h \ + sstlinux.h + +all: config.h + $(MAKE) $(AM_MAKEFLAGS) all-am + +.SUFFIXES: +.SUFFIXES: .c .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnu src/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +config.h: stamp-h1 + @if test ! -f $@; then \ + rm -f stamp-h1; \ + $(MAKE) stamp-h1; \ + else :; fi + +stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status src/config.h +$(srcdir)/config.h.in: $(am__configure_deps) + cd $(top_srcdir) && $(AUTOHEADER) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config.h stamp-h1 +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; for p in $$list; do \ + p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ + if test -f $$p \ + ; then \ + f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ + echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \ + $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \ + else :; fi; \ + done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; for p in $$list; do \ + f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ + echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ + rm -f "$(DESTDIR)$(bindir)/$$f"; \ + done + +clean-binPROGRAMS: + -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) +sst$(EXEEXT): $(sst_OBJECTS) $(sst_DEPENDENCIES) + @rm -f sst$(EXEEXT) + $(LINK) $(sst_LDFLAGS) $(sst_OBJECTS) $(sst_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ai.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/battle.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/events.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/finish.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/io.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/moving.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/planets.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reports.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setup.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sst.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sstlinux.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` +uninstall-info-am: + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) config.h +installdirs: + for dir in "$(DESTDIR)$(bindir)"; do \ + test -z "$$dir" || $(mkdir_p) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-binPROGRAMS clean-generic mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-hdr distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: install-binPROGRAMS + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-binPROGRAMS uninstall-info-am + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ + clean-generic ctags distclean distclean-compile \ + distclean-generic distclean-hdr distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-binPROGRAMS install-data install-data-am install-exec \ + install-exec-am install-info install-info-am install-man \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-binPROGRAMS \ + uninstall-info-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/src/ai.c b/src/ai.c new file mode 100644 index 0000000..a1b4bbf --- /dev/null +++ b/src/ai.c @@ -0,0 +1,615 @@ +#include "sst.h" + +static int tryexit(int lookx, int looky, int ienm, int loccom, int irun) +{ + int iqx, iqy, l; + + iqx = quadx+(lookx+(QUADSIZE-1))/QUADSIZE - 1; + iqy = quady+(looky+(QUADSIZE-1))/QUADSIZE - 1; + if (!VALID_QUADRANT(iqx,iqy) || + game.state.galaxy[iqx][iqy].supernova || + game.state.galaxy[iqx][iqy].klingons > 8) + return 0; /* no can do -- neg energy, supernovae, or >8 Klingons */ + if (ienm == IHR) return 0; /* Romulans cannot escape! */ + if (irun == 0) { + /* avoid intruding on another commander's territory */ + if (ienm == IHC) { + for_commanders(l) + if (game.state.cx[l]==iqx && game.state.cy[l]==iqy) return 0; + /* refuse to leave if currently attacking starbase */ + if (batx==quadx && baty==quady) return 0; + } + /* don't leave if over 1000 units of energy */ + if (game.kpower[loccom] > 1000.) return 0; + } + /* print escape message and move out of quadrant. + We know this if either short or long range sensors are working */ + if (game.damage[DSRSENS] == 0.0 || game.damage[DLRSENS] == 0.0 || + condit == IHDOCKED) { + crmena(1, ienm, 2, game.kx[loccom], game.ky[loccom]); + prout(" escapes to %s (and regains strength).", + cramlc(quadrant, iqx, iqy)); + } + /* handle local matters related to escape */ + game.quad[game.kx[loccom]][game.ky[loccom]] = IHDOT; + game.kx[loccom] = game.kx[nenhere]; + game.ky[loccom] = game.ky[nenhere]; + game.kavgd[loccom] = game.kavgd[nenhere]; + game.kpower[loccom] = game.kpower[nenhere]; + game.kdist[loccom] = game.kdist[nenhere]; + klhere--; + nenhere--; + if (condit != IHDOCKED) newcnd(); + /* Handle global matters related to escape */ + game.state.galaxy[quadx][quady].klingons--; + game.state.galaxy[iqx][iqy].klingons++; + if (ienm==IHS) { + ishere=0; + iscate=0; + ientesc=0; + isatb=0; + game.future[FSCMOVE]=0.2777+game.state.date; + game.future[FSCDBAS]=FOREVER; + game.state.isx=iqx; + game.state.isy=iqy; + } + else { + for_commanders(l) { + if (game.state.cx[l]==quadx && game.state.cy[l]==quady) { + game.state.cx[l]=iqx; + game.state.cy[l]=iqy; + break; + } + } + comhere = 0; + } + return 1; /* success */ +} + + +static void movebaddy(int comx, int comy, int loccom, int ienm) +{ + int motion, mdist, nsteps, mx, my, nextx, nexty, lookx, looky, ll; + int irun = 0; + int krawlx, krawly; + int success; + int attempts; + /* This should probably be just comhere + ishere */ + int nbaddys = skill >= SKILL_EXPERT ? + (int)((comhere*2 + ishere*2+klhere*1.23+irhere*1.5)/2.0): + (comhere + ishere); + double dist1, forces; + + dist1 = game.kdist[loccom]; + mdist = dist1 + 0.5; /* Nearest integer distance */ + + /* If SC, check with spy to see if should hi-tail it */ + if (ienm==IHS && + (game.kpower[loccom] <= 500.0 || (condit==IHDOCKED && game.damage[DPHOTON]==0))) { + irun = 1; + motion = -QUADSIZE; + } + else { + /* decide whether to advance, retreat, or hold position */ +/* Algorithm: + * Enterprise has "force" based on condition of phaser and photon torpedoes. + If both are operating full strength, force is 1000. If both are damaged, + force is -1000. Having shields down subtracts an additional 1000. + + * Enemy has forces equal to the energy of the attacker plus + 100*(K+R) + 500*(C+S) - 400 for novice through good levels OR + 346*K + 400*R + 500*(C+S) - 400 for expert and emeritus. + + Attacker Initial energy levels (nominal): + Klingon Romulan Commander Super-Commander + Novice 400 700 1200 + Fair 425 750 1250 + Good 450 800 1300 1750 + Expert 475 850 1350 1875 + Emeritus 500 900 1400 2000 + VARIANCE 75 200 200 200 + + Enemy vessels only move prior to their attack. In Novice - Good games + only commanders move. In Expert games, all enemy vessels move if there + is a commander present. In Emeritus games all enemy vessels move. + + * If Enterprise is not docked, an agressive action is taken if enemy + forces are 1000 greater than Enterprise. + + Agressive action on average cuts the distance between the ship and + the enemy to 1/4 the original. + + * At lower energy advantage, movement units are proportional to the + advantage with a 650 advantage being to hold ground, 800 to move forward + 1, 950 for two, 150 for back 4, etc. Variance of 100. + + If docked, is reduced by roughly 1.75*skill, generally forcing a + retreat, especially at high skill levels. + + * Motion is limited to skill level, except for SC hi-tailing it out. + */ + + forces = game.kpower[loccom]+100.0*nenhere+400*(nbaddys-1); + if (shldup==0) forces += 1000; /* Good for enemy if shield is down! */ + if (game.damage[DPHASER] == 0.0 || game.damage[DPHOTON] == 0.0) { + if (game.damage[DPHASER] != 0) /* phasers damaged */ + forces += 300.0; + else + forces -= 0.2*(energy - 2500.0); + if (game.damage[DPHOTON] != 0) /* photon torpedoes damaged */ + forces += 300.0; + else + forces -= 50.0*torps; + } + else { + /* phasers and photon tubes both out! */ + forces += 1000.0; + } + motion = 0; + if (forces <= 1000.0 && condit != IHDOCKED) /* Typical situation */ + motion = ((forces+200.0*Rand())/150.0) - 5.0; + else { + if (forces > 1000.0) /* Very strong -- move in for kill */ + motion = (1.0-square(Rand()))*dist1 + 1.0; + if (condit==IHDOCKED && (game.options & OPTION_BASE)) /* protected by base -- back off ! */ + motion -= skill*(2.0-square(Rand())); + } +#ifdef DEBUG + if (idebug) { + proutn("MOTION = %1.2f", motion); + proutn(" FORCES = %1,2f", forces); + } +#endif + /* don't move if no motion */ + if (motion==0) return; + /* Limit motion according to skill */ + if (abs(motion) > skill) motion = (motion < 0) ? -skill : skill; + } + /* calculate preferred number of steps */ + nsteps = motion < 0 ? -motion : motion; + if (motion > 0 && nsteps > mdist) nsteps = mdist; /* don't overshoot */ + if (nsteps > QUADSIZE) nsteps = QUADSIZE; /* This shouldn't be necessary */ + if (nsteps < 1) nsteps = 1; /* This shouldn't be necessary */ +#ifdef DEBUG + if (idebug) { + prout("NSTEPS = %d", nsteps); + } +#endif + /* Compute preferred values of delta X and Y */ + mx = sectx - comx; + my = secty - comy; + if (2.0 * abs(mx) < abs(my)) mx = 0; + if (2.0 * abs(my) < abs(sectx-comx)) my = 0; + if (mx != 0) mx = mx*motion < 0 ? -1 : 1; + if (my != 0) my = my*motion < 0 ? -1 : 1; + nextx = comx; + nexty = comy; + /* main move loop */ + for (ll = 0; ll < nsteps; ll++) { +#ifdef DEBUG + if (idebug) { + prout("%d", ll+1); + } +#endif + /* Check if preferred position available */ + lookx = nextx + mx; + looky = nexty + my; + krawlx = mx < 0 ? 1 : -1; + krawly = my < 0 ? 1 : -1; + success = 0; + attempts = 0; /* Settle mysterious hang problem */ + while (attempts++ < 20 && !success) { + if (lookx < 1 || lookx > QUADSIZE) { + if (motion < 0 && tryexit(lookx, looky, ienm, loccom, irun)) + return; + if (krawlx == mx || my == 0) break; + lookx = nextx + krawlx; + krawlx = -krawlx; + } + else if (looky < 1 || looky > QUADSIZE) { + if (motion < 0 && tryexit(lookx, looky, ienm, loccom, irun)) + return; + if (krawly == my || mx == 0) break; + looky = nexty + krawly; + krawly = -krawly; + } + else if ((game.options & OPTION_RAMMING) && game.quad[lookx][looky] != IHDOT) { + /* See if we should ram ship */ + if (game.quad[lookx][looky] == ship && + (ienm == IHC || ienm == IHS)) { + ram(1, ienm, comx, comy); + return; + } + if (krawlx != mx && my != 0) { + lookx = nextx + krawlx; + krawlx = -krawlx; + } + else if (krawly != my && mx != 0) { + looky = nexty + krawly; + krawly = -krawly; + } + else break; /* we have failed */ + } + else success = 1; + } + if (success) { + nextx = lookx; + nexty = looky; +#ifdef DEBUG + if (idebug) { + prout(cramlc(neither, nextx, nexty)); + } +#endif + } + else break; /* done early */ + } + /* Put commander in place within same quadrant */ + game.quad[comx][comy] = IHDOT; + game.quad[nextx][nexty] = ienm; + if (nextx != comx || nexty != comy) { + /* it moved */ + game.kx[loccom] = nextx; + game.ky[loccom] = nexty; + game.kdist[loccom] = game.kavgd[loccom] = + sqrt(square(sectx-nextx)+square(secty-nexty)); + if (game.damage[DSRSENS] == 0 || condit == IHDOCKED) { + proutn("***"); + cramen(ienm); + proutn(" from %s", cramlc(2, comx, comy)); + if (game.kdist[loccom] < dist1) proutn(" advances to "); + else proutn(" retreats to "); + prout(cramlc(sector, nextx, nexty)); + } + } +} + +void movcom(void) +{ + int ix, iy, i; + +#ifdef DEBUG + if (idebug) prout("MOVCOM"); +#endif + + /* Figure out which Klingon is the commander (or Supercommander) + and do move */ + if (comhere) + for_local_enemies(i) { + ix = game.kx[i]; + iy = game.ky[i]; + if (game.quad[ix][iy] == IHC) { + movebaddy(ix, iy, i, IHC); + break; + } + } + if (ishere) + for_local_enemies(i) { + ix = game.kx[i]; + iy = game.ky[i]; + if (game.quad[ix][iy] == IHS) { + movebaddy(ix, iy, i, IHS); + break; + } + } + /* if skill level is high, move other Klingons and Romulans too! + Move these last so they can base their actions on what the + commander(s) do. */ + if (skill >= SKILL_EXPERT && (game.options & OPTION_MVBADDY)) + for_local_enemies(i) { + ix = game.kx[i]; + iy = game.ky[i]; + if (game.quad[ix][iy] == IHK || game.quad[ix][iy] == IHR) + movebaddy(ix, iy, i, game.quad[ix][iy]); + } + + sortkl(); +} + +static int movescom(int iqx, int iqy, int flag, int *ipage) +{ + int i; + + if ((iqx==quadx && iqy==quady) || + !VALID_QUADRANT(iqx, iqy) || + game.state.galaxy[iqx][iqy].supernova || + game.state.galaxy[iqx][iqy].klingons > 8) + return 1; + if (flag) { + /* Avoid quadrants with bases if we want to avoid Enterprise */ + for_starbases(i) + if (game.state.baseqx[i]==iqx && game.state.baseqy[i]==iqy) return 1; + } + if (justin && !iscate) return 1; + /* do the move */ + game.state.galaxy[game.state.isx][game.state.isy].klingons--; + game.state.isx = iqx; + game.state.isy = iqy; + game.state.galaxy[game.state.isx][game.state.isy].klingons++; + if (ishere) { + /* SC has scooted, Remove him from current quadrant */ + iscate=0; + isatb=0; + ishere=0; + ientesc=0; + game.future[FSCDBAS]=FOREVER; + for_local_enemies(i) + if (game.quad[game.kx[i]][game.ky[i]] == IHS) break; + game.quad[game.kx[i]][game.ky[i]] = IHDOT; + game.kx[i] = game.kx[nenhere]; + game.ky[i] = game.ky[nenhere]; + game.kdist[i] = game.kdist[nenhere]; + game.kavgd[i] = game.kavgd[nenhere]; + game.kpower[i] = game.kpower[nenhere]; + klhere--; + nenhere--; + if (condit!=IHDOCKED) newcnd(); + sortkl(); + } + /* check for a helpful planet */ + for (i = 0; i < inplan; i++) { + if (game.state.plnets[i].x==game.state.isx && game.state.plnets[i].y==game.state.isy && + game.state.plnets[i].crystals == 1) { + /* destroy the planet */ + DESTROY(&game.state.plnets[i]); + game.state.galaxy[game.state.isx][game.state.isy].planets -= 1; + if (game.damage[DRADIO] == 0.0 || condit == IHDOCKED) { + if (*ipage==0) pause_game(1); + *ipage = 1; + prout("Lt. Uhura- \"Captain, Starfleet Intelligence reports"); + proutn(" a planet in "); + proutn(cramlc(quadrant, game.state.isx, game.state.isy)); + prout(" has been destroyed"); + prout(" by the Super-commander.\""); + } + break; + } + } + return 0; /* looks good! */ +} + +void scom(int *ipage) +{ + int i, i2, j, ideltax, ideltay, ibqx, ibqy, sx, sy, ifindit, iwhichb; + int iqx, iqy; + int basetbl[BASEMAX+1]; + double bdist[BASEMAX+1]; + int flag; +#ifdef DEBUG + if (idebug) prout("SCOM"); +#endif + + /* Decide on being active or passive */ + flag = ((NKILLC+NKILLK)/(game.state.date+0.01-indate) < 0.1*skill*(skill+1.0) || + (game.state.date-indate) < 3.0); + if (iscate==0 && flag) { + /* compute move away from Enterprise */ + ideltax = game.state.isx-quadx; + ideltay = game.state.isy-quady; + if (sqrt(ideltax*(double)ideltax+ideltay*(double)ideltay) > 2.0) { + /* circulate in space */ + ideltax = game.state.isy-quady; + ideltay = quadx-game.state.isx; + } + } + else { + /* compute distances to starbases */ + if (game.state.rembase <= 0) { + /* nothing left to do */ + game.future[FSCMOVE] = FOREVER; + return; + } + sx = game.state.isx; + sy = game.state.isy; + for_starbases(i) { + basetbl[i] = i; + ibqx = game.state.baseqx[i]; + ibqy = game.state.baseqy[i]; + bdist[i] = sqrt(square(ibqx-sx) + square(ibqy-sy)); + } + if (game.state.rembase > 1) { + /* sort into nearest first order */ + int iswitch; + do { + iswitch = 0; + for (i=1; i < game.state.rembase-1; i++) { + if (bdist[i] > bdist[i+1]) { + int ti = basetbl[i]; + double t = bdist[i]; + bdist[i] = bdist[i+1]; + bdist[i+1] = t; + basetbl[i] = basetbl[i+1]; + basetbl[i+1] =ti; + iswitch = 1; + } + } + } while (iswitch); + } + /* look for nearest base without a commander, no Enterprise, and + without too many Klingons, and not already under attack. */ + ifindit = iwhichb = 0; + + for_starbases(i2) { + i = basetbl[i2]; /* bug in original had it not finding nearest*/ + ibqx = game.state.baseqx[i]; + ibqy = game.state.baseqy[i]; + if ((ibqx == quadx && ibqy == quady) || + (ibqx == batx && ibqy == baty) || + game.state.galaxy[ibqx][ibqy].supernova || + game.state.galaxy[ibqx][ibqy].klingons > 8) + continue; + /* if there is a commander, an no other base is appropriate, + we will take the one with the commander */ + for_commanders (j) { + if (ibqx==game.state.cx[j] && ibqy==game.state.cy[j] && ifindit!= 2) { + ifindit = 2; + iwhichb = i; + break; + } + } + if (j > game.state.remcom) { /* no commander -- use this one */ + ifindit = 1; + iwhichb = i; + break; + } + } + if (ifindit==0) return; /* Nothing suitable -- wait until next time*/ + ibqx = game.state.baseqx[iwhichb]; + ibqy = game.state.baseqy[iwhichb]; + /* decide how to move toward base */ + ideltax = ibqx - game.state.isx; + ideltay = ibqy - game.state.isy; + } + /* Maximum movement is 1 quadrant in either or both axis */ + if (ideltax > 1) ideltax = 1; + if (ideltax < -1) ideltax = -1; + if (ideltay > 1) ideltay = 1; + if (ideltay < -1) ideltay = -1; + + /* try moving in both x and y directions */ + iqx = game.state.isx + ideltax; + iqy = game.state.isy + ideltax; + if (movescom(iqx, iqy, flag, ipage)) { + /* failed -- try some other maneuvers */ + if (ideltax==0 || ideltay==0) { + /* attempt angle move */ + if (ideltax != 0) { + iqy = game.state.isy + 1; + if (movescom(iqx, iqy, flag, ipage)) { + iqy = game.state.isy - 1; + movescom(iqx, iqy, flag, ipage); + } + } + else { + iqx = game.state.isx + 1; + if (movescom(iqx, iqy, flag, ipage)) { + iqx = game.state.isx - 1; + movescom(iqx, iqy, flag, ipage); + } + } + } + else { + /* try moving just in x or y */ + iqy = game.state.isy; + if (movescom(iqx, iqy, flag, ipage)) { + iqy = game.state.isy + ideltay; + iqx = game.state.isx; + movescom(iqx, iqy, flag, ipage); + } + } + } + /* check for a base */ + if (game.state.rembase == 0) { + game.future[FSCMOVE] = FOREVER; + } + else for_starbases(i) { + ibqx = game.state.baseqx[i]; + ibqy = game.state.baseqy[i]; + if (ibqx==game.state.isx && ibqy == game.state.isy && game.state.isx != batx && game.state.isy != baty) { + /* attack the base */ + if (flag) return; /* no, don't attack base! */ + iseenit = 0; + isatb=1; + game.future[FSCDBAS] = game.state.date + 1.0 +2.0*Rand(); + if (game.future[FCDBAS] < FOREVER) game.future[FSCDBAS] += + game.future[FCDBAS]-game.state.date; + if (game.damage[DRADIO] > 0 && condit != IHDOCKED) + return; /* no warning */ + iseenit = 1; + if (*ipage == 0) pause_game(1); + *ipage=1; + proutn("Lt. Uhura- \"Captain, the starbase in "); + proutn(cramlc(quadrant, game.state.isx, game.state.isy)); + skip(1); + prout(" reports that it is under attack from the Klingon Super-commander."); + proutn(" It can survive until stardate %d.\"", + (int)game.future[FSCDBAS]); + if (resting==0) return; + prout("Mr. Spock- \"Captain, shall we cancel the rest period?\""); + if (ja()==0) return; + resting = 0; + Time = 0.0; /* actually finished */ + return; + } + } + /* Check for intelligence report */ + if ( +#ifdef DEBUG + idebug==0 && +#endif + (Rand() > 0.2 || + (game.damage[DRADIO] > 0.0 && condit != IHDOCKED) || + !game.state.galaxy[game.state.isx][game.state.isy].charted)) + return; + if (*ipage==0) pause_game(1); + *ipage = 1; + prout("Lt. Uhura- \"Captain, Starfleet Intelligence reports"); + proutn(" the Super-commander is in "); + proutn(cramlc(quadrant, game.state.isx, game.state. isy)); + prout(".\""); + return; +} + +void movetho(void) +{ + int idx, idy, im, i, dum, my; + /* Move the Tholian */ + if (ithere==0 || justin == 1) return; + + if (ithx == 1 && ithy == 1) { + idx = 1; idy = QUADSIZE; + } + else if (ithx == 1 && ithy == QUADSIZE) { + idx = QUADSIZE; idy = QUADSIZE; + } + else if (ithx == QUADSIZE && ithy == QUADSIZE) { + idx = QUADSIZE; idy = 1; + } + else if (ithx == QUADSIZE && ithy == 1) { + idx = 1; idy = 1; + } + else { + /* something is wrong! */ + ithere = 0; + return; + } + + /* Do nothing if we are blocked */ + if (game.quad[idx][idy]!= IHDOT && game.quad[idx][idy]!= IHWEB) return; + game.quad[ithx][ithy] = IHWEB; + + if (ithx != idx) { + /* move in x axis */ + im = fabs((double)idx - ithx)/((double)idx - ithx); + while (ithx != idx) { + ithx += im; + if (game.quad[ithx][ithy]==IHDOT) game.quad[ithx][ithy] = IHWEB; + } + } + else if (ithy != idy) { + /* move in y axis */ + im = fabs((double)idy - ithy)/((double)idy - ithy); + while (ithy != idy) { + ithy += im; + if (game.quad[ithx][ithy]==IHDOT) game.quad[ithx][ithy] = IHWEB; + } + } + game.quad[ithx][ithy] = IHT; + game.kx[nenhere]=ithx; + game.ky[nenhere]=ithy; + + /* check to see if all holes plugged */ + for_sectors(i) { + if (game.quad[1][i]!=IHWEB && game.quad[1][i]!=IHT) return; + if (game.quad[QUADSIZE][i]!=IHWEB && game.quad[QUADSIZE][i]!=IHT) return; + if (game.quad[i][1]!=IHWEB && game.quad[i][1]!=IHT) return; + if (game.quad[i][QUADSIZE]!=IHWEB && game.quad[i][QUADSIZE]!=IHT) return; + } + /* All plugged up -- Tholian splits */ + game.quad[ithx][ithy]=IHWEB; + dropin(IHBLANK, &dum, &my); + crmena(1,IHT, 2, ithx, ithy); + prout(" completes web."); + ithere = ithx = ithy = 0; + nenhere--; + return; +} diff --git a/src/battle.c b/src/battle.c new file mode 100644 index 0000000..374b382 --- /dev/null +++ b/src/battle.c @@ -0,0 +1,1225 @@ +#include "sst.h" + +void doshield(int i) +{ + int key; + enum {NONE, SHUP, SHDN, NRG} action = NONE; + + ididit = 0; + + if (i == 2) action = SHUP; + else { + key = scan(); + if (key == IHALPHA) { + if (isit("transfer")) + action = NRG; + else { + chew(); + if (game.damage[DSHIELD]) { + prout("Shields damaged and down."); + return; + } + if (isit("up")) + action = SHUP; + else if (isit("down")) + action = SHDN; + } + } + if (action==NONE) { + proutn("Do you wish to change shield energy? "); + if (ja()) { + proutn("Energy to transfer to shields- "); + action = NRG; + } + else if (game.damage[DSHIELD]) { + prout("Shields damaged and down."); + return; + } + else if (shldup) { + proutn("Shields are up. Do you want them down? "); + if (ja()) action = SHDN; + else { + chew(); + return; + } + } + else { + proutn("Shields are down. Do you want them up? "); + if (ja()) action = SHUP; + else { + chew(); + return; + } + } + } + } + switch (action) { + case SHUP: /* raise shields */ + if (shldup) { + prout("Shields already up."); + return; + } + shldup = 1; + shldchg = 1; + if (condit != IHDOCKED) energy -= 50.0; + prout("Shields raised."); + if (energy <= 0) { + skip(1); + prout("Shields raising uses up last of energy."); + finish(FNRG); + return; + } + ididit=1; + return; + case SHDN: + if (shldup==0) { + prout("Shields already down."); + return; + } + shldup=0; + shldchg=1; + prout("Shields lowered."); + ididit=1; + return; + case NRG: + while (scan() != IHREAL) { + chew(); + proutn("Energy to transfer to shields- "); + } + chew(); + if (aaitem==0) return; + if (aaitem > energy) { + prout("Insufficient ship energy."); + return; + } + ididit = 1; + if (shield+aaitem >= inshld) { + prout("Shield energy maximized."); + if (shield+aaitem > inshld) { + prout("Excess energy requested returned to ship energy"); + } + energy -= inshld-shield; + shield = inshld; + return; + } + if (aaitem < 0.0 && energy-aaitem > inenrg) { + /* Prevent shield drain loophole */ + skip(1); + prout("Engineering to bridge--"); + prout(" Scott here. Power circuit problem, Captain."); + prout(" I can't drain the shields."); + ididit = 0; + return; + } + if (shield+aaitem < 0) { + prout("All shield energy transferred to ship."); + energy += shield; + shield = 0.0; + return; + } + proutn("Scotty- \""); + if (aaitem > 0) + prout("Transferring energy to shields.\""); + else + prout("Draining energy from shields.\""); + shield += aaitem; + energy -= aaitem; + return; + case NONE:; /* avoid gcc warning */ + } +} + +void ram(int ibumpd, int ienm, int ix, int iy) +{ + double type = 1.0, extradm; + int icas, l; + + prouts("***RED ALERT! RED ALERT!"); + skip(1); + prout("***COLLISION IMMINENT."); + skip(2); + proutn("***"); + crmshp(); + switch (ienm) { + case IHR: type = 1.5; break; + case IHC: type = 2.0; break; + case IHS: type = 2.5; break; + case IHT: type = 0.5; break; + case IHQUEST: type = 4.0; break; + } + proutn(ibumpd ? " rammed by " : " rams "); + crmena(0, ienm, 2, ix, iy); + if (ibumpd) proutn(" (original position)"); + skip(1); + deadkl(ix, iy, ienm, sectx, secty); + proutn("***"); + crmshp(); + prout(" heavily damaged."); + icas = 10.0+20.0*Rand(); + prout("***Sickbay reports %d casualties", icas); + casual += icas; + for (l=0; l < NDEVICES; l++) { + if (l == DDRAY) + continue; // Don't damage deathray + if (game.damage[l] < 0) + continue; + extradm = (10.0*type*Rand()+1.0)*damfac; + game.damage[l] += Time + extradm; /* Damage for at least time of travel! */ + } + shldup = 0; + if (KLINGREM) { + pause_game(2); + dreprt(); + } + else finish(FWON); + return; +} + +void torpedo(double course, double r, int inx, int iny, double *hit, int i, int n) +{ + int l, iquad=0, ix=0, iy=0, jx=0, jy=0, shoved=0, ll; + + double ac=course + 0.25*r; + double angle = (15.0-ac)*0.5235988; + double bullseye = (15.0 - course)*0.5235988; + double deltax=-sin(angle), deltay=cos(angle), x=inx, y=iny, bigger; + double ang, temp, xx, yy, kp, h1; + + bigger = fabs(deltax); + if (fabs(deltay) > bigger) bigger = fabs(deltay); + deltax /= bigger; + deltay /= bigger; + if (game.damage[DSRSENS]==0 || condit==IHDOCKED) + setwnd(srscan_window); + else + setwnd(message_window); + /* Loop to move a single torpedo */ + for (l=1; l <= 15; l++) { + x += deltax; + ix = x + 0.5; + y += deltay; + iy = y + 0.5; + if (!VALID_SECTOR(ix, iy)) break; + iquad=game.quad[ix][iy]; + tracktorpedo(ix, iy, l, i, n, iquad); + if (iquad==IHDOT) continue; + /* hit something */ + setwnd(message_window); + skip(1); /* start new line after text track */ + switch(iquad) { + case IHE: /* Hit our ship */ + case IHF: + skip(1); + proutn("Torpedo hits "); + crmshp(); + prout("."); + *hit = 700.0 + 100.0*Rand() - + 1000.0*sqrt(square(ix-inx)+square(iy-iny))* + fabs(sin(bullseye-angle)); + *hit = fabs(*hit); + newcnd(); /* we're blown out of dock */ + /* We may be displaced. */ + if (landed==1 || condit==IHDOCKED) return; /* Cheat if on a planet */ + ang = angle + 2.5*(Rand()-0.5); + temp = fabs(sin(ang)); + if (fabs(cos(ang)) > temp) temp = fabs(cos(ang)); + xx = -sin(ang)/temp; + yy = cos(ang)/temp; + jx=ix+xx+0.5; + jy=iy+yy+0.5; + if (!VALID_SECTOR(jx, jy)) return; + if (game.quad[jx][jy]==IHBLANK) { + finish(FHOLE); + return; + } + if (game.quad[jx][jy]!=IHDOT) { + /* can't move into object */ + return; + } + sectx = jx; + secty = jy; + crmshp(); + shoved = 1; + break; + + case IHC: /* Hit a commander */ + case IHS: + if (Rand() <= 0.05) { + crmena(1, iquad, 2, ix, iy); + prout(" uses anti-photon device;"); + prout(" torpedo neutralized."); + return; + } + case IHR: /* Hit a regular enemy */ + case IHK: + /* find the enemy */ + for_local_enemies(ll) + if (ix==game.kx[ll] && iy==game.ky[ll]) break; + kp = fabs(game.kpower[ll]); + h1 = 700.0 + 100.0*Rand() - + 1000.0*sqrt(square(ix-inx)+square(iy-iny))* + fabs(sin(bullseye-angle)); + h1 = fabs(h1); + if (kp < h1) h1 = kp; + game.kpower[ll] -= (game.kpower[ll]<0 ? -h1 : h1); + if (game.kpower[ll] == 0) { + deadkl(ix, iy, iquad, ix, iy); + return; + } + crmena(1, iquad, 2, ix, iy); + /* If enemy damaged but not destroyed, try to displace */ + ang = angle + 2.5*(Rand()-0.5); + temp = fabs(sin(ang)); + if (fabs(cos(ang)) > temp) temp = fabs(cos(ang)); + xx = -sin(ang)/temp; + yy = cos(ang)/temp; + jx=ix+xx+0.5; + jy=iy+yy+0.5; + if (!VALID_SECTOR(jx, jy)) { + prout(" damaged but not destroyed."); + return; + } + if (game.quad[jx][jy]==IHBLANK) { + prout(" buffeted into black hole."); + deadkl(ix, iy, iquad, jx, jy); + return; + } + if (game.quad[jx][jy]!=IHDOT) { + /* can't move into object */ + prout(" damaged but not destroyed."); + return; + } + proutn(" damaged--"); + game.kx[ll] = jx; + game.ky[ll] = jy; + shoved = 1; + break; + case IHB: /* Hit a base */ + skip(1); + prout("***STARBASE DESTROYED.."); + for_starbases(ll) { + if (game.state.baseqx[ll]==quadx && game.state.baseqy[ll]==quady) { + game.state.baseqx[ll]=game.state.baseqx[game.state.rembase]; + game.state.baseqy[ll]=game.state.baseqy[game.state.rembase]; + break; + } + } + game.quad[ix][iy]=IHDOT; + game.state.rembase--; + basex=basey=0; + game.state.galaxy[quadx][quady].starbase--; + game.state.chart[quadx][quady].starbase--; + game.state.basekl++; + newcnd(); + return; + case IHP: /* Hit a planet */ + crmena(1, iquad, 2, ix, iy); + prout(" destroyed."); + game.state.nplankl++; + game.state.galaxy[quadx][quady].planets--; + DESTROY(&game.state.plnets[iplnet]); + iplnet = 0; + plnetx = plnety = 0; + game.quad[ix][iy] = IHDOT; + if (landed==1) { + /* captain perishes on planet */ + finish(FDPLANET); + } + return; + case IHSTAR: /* Hit a star */ + if (Rand() > 0.10) { + nova(ix, iy); + return; + } + crmena(1, IHSTAR, 2, ix, iy); + prout(" unaffected by photon blast."); + return; + case IHQUEST: /* Hit a thingy */ + if (!(game.options & OPTION_THINGY) || Rand()>0.7) { + skip(1); + prouts("AAAAIIIIEEEEEEEEAAAAAAAAUUUUUGGGGGHHHHHHHHHHHH!!!"); + skip(1); + prouts(" HACK! HACK! HACK! *CHOKE!* "); + skip(1); + proutn("Mr. Spock-"); + prouts(" \"Fascinating!\""); + skip(1); + deadkl(ix, iy, iquad, ix, iy); + } else { + /* + * Stas Sergeev added the possibility that + * you can shove the Thingy and piss it off. + * It then becomes an enemy and may fire at you. + */ + iqengry=1; + shoved=1; + } + return; + case IHBLANK: /* Black hole */ + skip(1); + crmena(1, IHBLANK, 2, ix, iy); + prout(" swallows torpedo."); + return; + case IHWEB: /* hit the web */ + skip(1); + prout("***Torpedo absorbed by Tholian web."); + return; + case IHT: /* Hit a Tholian */ + h1 = 700.0 + 100.0*Rand() - + 1000.0*sqrt(square(ix-inx)+square(iy-iny))* + fabs(sin(bullseye-angle)); + h1 = fabs(h1); + if (h1 >= 600) { + game.quad[ix][iy] = IHDOT; + ithere = 0; + ithx = ithy = 0; + deadkl(ix, iy, iquad, ix, iy); + return; + } + skip(1); + crmena(1, IHT, 2, ix, iy); + if (Rand() > 0.05) { + prout(" survives photon blast."); + return; + } + prout(" disappears."); + game.quad[ix][iy] = IHWEB; + ithere = ithx = ithy = 0; + nenhere--; + { + int dum, my; + dropin(IHBLANK, &dum, &my); + } + return; + + default: /* Problem! */ + skip(1); + proutn("Don't know how to handle collision with "); + crmena(1, iquad, 2, ix, iy); + skip(1); + return; + } + break; + } + if(curwnd!=message_window) { + setwnd(message_window); + } + if (shoved) { + game.quad[jx][jy]=iquad; + game.quad[ix][iy]=IHDOT; + prout(" displaced by blast to %s ", cramlc(sector, jx, jy)); + for_local_enemies(ll) + game.kdist[ll] = game.kavgd[ll] = sqrt(square(sectx-game.kx[ll])+square(secty-game.ky[ll])); + sortkl(); + return; + } + skip(1); + prout("Torpedo missed."); + return; +} + +static void fry(double hit) +{ + double ncrit, extradm; + int ktr=1, l, ll, j, cdam[NDEVICES]; + + /* a critical hit occured */ + if (hit < (275.0-25.0*skill)*(1.0+0.5*Rand())) return; + + ncrit = 1.0 + hit/(500.0+100.0*Rand()); + proutn("***CRITICAL HIT--"); + /* Select devices and cause damage */ + for (l = 0; l < ncrit && 0 < NDEVICES; l++) { + do { + j = NDEVICES*Rand(); + /* Cheat to prevent shuttle damage unless on ship */ + } while + (game.damage[j]<0.0 || (j==DSHUTTL && iscraft!=1) || j==DDRAY); + cdam[l] = j; + extradm = (hit*damfac)/(ncrit*(75.0+25.0*Rand())); + game.damage[j] += extradm; + if (l > 0) { + for (ll=2; ll<=l && j != cdam[ll-1]; ll++) ; + if (ll<=l) continue; + ktr += 1; + if (ktr==3) skip(1); + proutn(" and "); + } + proutn(device[j]); + } + prout(" damaged."); + if (game.damage[DSHIELD] && shldup) { + prout("***Shields knocked down."); + shldup=0; + } +} + +void attack(int torps_ok) +{ + /* torps_ok == 0 forces use of phasers in an attack */ + int percent, ihurt=0, l, i=0, jx, jy, iquad, itflag; + int atackd = 0, attempt = 0; + double hit; + double pfac, dustfac, hitmax=0.0, hittot=0.0, chgfac=1.0, r; + + iattak = 1; + if (alldone) return; +#ifdef DEBUG + if (idebug) prout("ATTACK!"); +#endif + + if (ithere) movetho(); + + if (neutz) { /* The one chance not to be attacked */ + neutz = 0; + return; + } + if ((((comhere || ishere) && (justin == 0)) || skill == SKILL_EMERITUS)&&(torps_ok!=0)) movcom(); + if (nenhere==0 || (nenhere==1 && iqhere && iqengry==0)) return; + pfac = 1.0/inshld; + if (shldchg == 1) chgfac = 0.25+0.5*Rand(); + skip(1); + if (skill <= SKILL_FAIR) i = 2; + for_local_enemies(l) { + if (game.kpower[l] < 0) continue; /* too weak to attack */ + /* compute hit strength and diminsh shield power */ + r = Rand(); + /* Increase chance of photon torpedos if docked or enemy energy low */ + if (condit == IHDOCKED) r *= 0.25; + if (game.kpower[l] < 500) r *= 0.25; + jx = game.kx[l]; + jy = game.ky[l]; + iquad = game.quad[jx][jy]; + if (iquad==IHT || (iquad==IHQUEST && !iqengry)) continue; + itflag = (iquad == IHK && r > 0.0005) || !torps_ok || + (iquad==IHC && r > 0.015) || + (iquad==IHR && r > 0.3) || + (iquad==IHS && r > 0.07) || + (iquad==IHQUEST && r > 0.05); + if (itflag) { + /* Enemy uses phasers */ + if (condit == IHDOCKED) continue; /* Don't waste the effort! */ + attempt = 1; /* Attempt to attack */ + dustfac = 0.8+0.05*Rand(); + hit = game.kpower[l]*pow(dustfac,game.kavgd[l]); + game.kpower[l] *= 0.75; + } + else { /* Enemy used photon torpedo */ + double course = 1.90985*atan2((double)secty-jy, (double)jx-sectx); + hit = 0; + proutn("***TORPEDO INCOMING"); + if (game.damage[DSRSENS] <= 0.0) { + proutn(" From "); + crmena(0, iquad, i, jx, jy); + } + attempt = 1; + prout(" "); + r = (Rand()+Rand())*0.5 -0.5; + r += 0.002*game.kpower[l]*r; + torpedo(course, r, jx, jy, &hit, 1, 1); + if (KLINGREM==0) + finish(FWON); /* Klingons did themselves in! */ + if (game.state.galaxy[quadx][quady].supernova || alldone) + return; /* Supernova or finished */ + if (hit == 0) continue; + } + if (shldup != 0 || shldchg != 0 || condit==IHDOCKED) { + /* shields will take hits */ + double absorb, hitsh, propor = pfac*shield*(condit==IHDOCKED ? 2.1 : 1.0); + if(propor < 0.1) propor = 0.1; + hitsh = propor*chgfac*hit+1.0; + atackd=1; + absorb = 0.8*hitsh; + if (absorb > shield) absorb = shield; + shield -= absorb; + hit -= hitsh; + if (condit==IHDOCKED) dock(0); + if (propor > 0.1 && hit < 0.005*energy) continue; + } + /* It's a hit -- print out hit size */ + atackd = 1; /* We weren't going to check casualties, etc. if + shields were down for some strange reason. This + doesn't make any sense, so I've fixed it */ + ihurt = 1; + proutn("%d unit hit", (int)hit); + if ((game.damage[DSRSENS] > 0 && itflag) || skill<=SKILL_FAIR) { + proutn(" on the "); + crmshp(); + } + if (game.damage[DSRSENS] <= 0.0 && itflag) { + proutn(" from "); + crmena(0, iquad, i, jx, jy); + } + skip(1); + /* Decide if hit is critical */ + if (hit > hitmax) hitmax = hit; + hittot += hit; + fry(hit); + prout("Hit %g energy %g", hit, energy); + energy -= hit; + if (condit==IHDOCKED) + dock(0); + } + if (energy <= 0) { + /* Returning home upon your shield, not with it... */ + finish(FBATTLE); + return; + } + if (attempt == 0 && condit == IHDOCKED) + prout("***Enemies decide against attacking your ship."); + if (atackd == 0) return; + percent = 100.0*pfac*shield+0.5; + if (ihurt==0) { + /* Shields fully protect ship */ + proutn("Enemy attack reduces shield strength to "); + } + else { + /* Print message if starship suffered hit(s) */ + skip(1); + proutn("Energy left %2d shields ", (int)energy); + if (shldup) proutn("up "); + else if (game.damage[DSHIELD] == 0) proutn("down "); + else proutn("damaged, "); + } + prout("%d%%, torpedoes left %d", percent, torps); + /* Check if anyone was hurt */ + if (hitmax >= 200 || hittot >= 500) { + int icas= hittot*Rand()*0.015; + if (icas >= 2) { + skip(1); + prout("Mc Coy- \"Sickbay to bridge. We suffered %d casualties", icas); + prout(" in that last attack.\""); + casual += icas; + } + } + /* After attack, reset average distance to enemies */ + for_local_enemies(l) + game.kavgd[l] = game.kdist[l]; + sortkl(); + return; +} + +void deadkl(int ix, int iy, int type, int ixx, int iyy) +{ + /* Added ixx and iyy allow enemy to "move" before dying */ + + int i,j; + + skip(1); + crmena(1, type, 2, ixx, iyy); + /* Decide what kind of enemy it is and update approriately */ + if (type == IHR) { + /* chalk up a Romulan */ + game.state.galaxy[quadx][quady].romulans--; + irhere--; + game.state.nromrem--; + } + else if (type == IHT) { + /* Killed a Tholian */ + ithere = 0; + } + else if (type == IHQUEST) { + /* Killed a Thingy */ + iqhere=iqengry=thingx=thingy=0; + } + else { + /* Some type of a Klingon */ + game.state.galaxy[quadx][quady].klingons--; + klhere--; + switch (type) { + case IHC: + comhere = 0; + for_commanders (i) + if (game.state.cx[i]==quadx && game.state.cy[i]==quady) break; + game.state.cx[i] = game.state.cx[game.state.remcom]; + game.state.cy[i] = game.state.cy[game.state.remcom]; + game.state.cx[game.state.remcom] = 0; + game.state.cy[game.state.remcom] = 0; + game.state.remcom--; + game.future[FTBEAM] = FOREVER; + if (game.state.remcom != 0) + game.future[FTBEAM] = game.state.date + expran(1.0*incom/game.state.remcom); + break; + case IHK: + game.state.remkl--; + break; + case IHS: + game.state.nscrem--; + ishere = game.state.isx = game.state.isy = isatb = iscate = 0; + game.future[FSCMOVE] = game.future[FSCDBAS] = FOREVER; + break; + } + } + + /* For each kind of enemy, finish message to player */ + prout(" destroyed."); + game.quad[ix][iy] = IHDOT; + if (KLINGREM==0) return; + + game.state.remtime = game.state.remres/(game.state.remkl + 4*game.state.remcom); + + /* Remove enemy ship from arrays describing local conditions */ + if (game.future[FCDBAS] < FOREVER && batx==quadx && baty==quady && type==IHC) + game.future[FCDBAS] = FOREVER; + for_local_enemies(i) + if (game.kx[i]==ix && game.ky[i]==iy) break; + nenhere--; + if (i <= nenhere) { + for (j=i; j<=nenhere; j++) { + game.kx[j] = game.kx[j+1]; + game.ky[j] = game.ky[j+1]; + game.kpower[j] = game.kpower[j+1]; + game.kavgd[j] = game.kdist[j] = game.kdist[j+1]; + } + } + game.kx[nenhere+1] = 0; + game.ky[nenhere+1] = 0; + game.kdist[nenhere+1] = 0; + game.kavgd[nenhere+1] = 0; + game.kpower[nenhere+1] = 0; + return; +} + +static int targetcheck(double x, double y, double *course) +{ + double deltx, delty; + /* Return TRUE if target is invalid */ + if (!VALID_SECTOR(x, y)) { + huh(); + return 1; + } + deltx = 0.1*(y - secty); + delty = 0.1*(sectx - x); + if (deltx==0 && delty== 0) { + skip(1); + prout("Spock- \"Bridge to sickbay. Dr. McCoy,"); + prout(" I recommend an immediate review of"); + prout(" the Captain's psychological profile.\""); + chew(); + return 1; + } + *course = 1.90985932*atan2(deltx, delty); + return 0; +} + +void photon(void) +{ + double targ[4][3], course[4]; + double r, dummy; + int key, n, i, osuabor; + + ididit = 0; + + if (game.damage[DPHOTON]) { + prout("Photon tubes damaged."); + chew(); + return; + } + if (torps == 0) { + prout("No torpedoes left."); + chew(); + return; + } + key = scan(); + for (;;) { + if (key == IHALPHA) { + huh(); + return; + } + else if (key == IHEOL) { + prout("%d torpedoes left.", torps); + proutn("Number of torpedoes to fire- "); + key = scan(); + } + else /* key == IHREAL */ { + n = aaitem + 0.5; + if (n <= 0) { /* abort command */ + chew(); + return; + } + if (n > 3) { + chew(); + prout("Maximum of 3 torpedoes per burst."); + key = IHEOL; + return; + } + if (n <= torps) break; + chew(); + key = IHEOL; + } + } + for (i = 1; i <= n; i++) { + key = scan(); + if (i==1 && key == IHEOL) { + break; /* we will try prompting */ + } + if (i==2 && key == IHEOL) { + /* direct all torpedoes at one target */ + while (i <= n) { + targ[i][1] = targ[1][1]; + targ[i][2] = targ[1][2]; + course[i] = course[1]; + i++; + } + break; + } + if (key != IHREAL) { + huh(); + return; + } + targ[i][1] = aaitem; + key = scan(); + if (key != IHREAL) { + huh(); + return; + } + targ[i][2] = aaitem; + if (targetcheck(targ[i][1], targ[i][2], &course[i])) return; + } + chew(); + if (i == 1 && key == IHEOL) { + /* prompt for each one */ + for (i = 1; i <= n; i++) { + proutn("Target sector for torpedo number %d- ", i); + key = scan(); + if (key != IHREAL) { + huh(); + return; + } + targ[i][1] = aaitem; + key = scan(); + if (key != IHREAL) { + huh(); + return; + } + targ[i][2] = aaitem; + chew(); + if (targetcheck(targ[i][1], targ[i][2], &course[i])) return; + } + } + ididit = 1; + /* Loop for moving torpedoes */ + osuabor = 0; + for (i = 1; i <= n && !osuabor; i++) { + if (condit != IHDOCKED) torps--; + r = (Rand()+Rand())*0.5 -0.5; + if (fabs(r) >= 0.47) { + /* misfire! */ + r = (Rand()+1.2) * r; + if (n>1) { + prouts("***TORPEDO NUMBER %d MISFIRES", i); + } + else prouts("***TORPEDO MISFIRES."); + skip(1); + if (i < n) + prout(" Remainder of burst aborted."); + osuabor=1; + if (Rand() <= 0.2) { + prout("***Photon tubes damaged by misfire."); + game.damage[DPHOTON] = damfac*(1.0+2.0*Rand()); + break; + } + } + if (shldup || condit == IHDOCKED) + r *= 1.0 + 0.0001*shield; + torpedo(course[i], r, sectx, secty, &dummy, i, n); + if (alldone || game.state.galaxy[quadx][quady].supernova) + return; + } + if (KLINGREM==0) finish(FWON); +} + + + +static void overheat(double rpow) +{ + if (rpow > 1500) { + double chekbrn = (rpow-1500.)*0.00038; + if (Rand() <= chekbrn) { + prout("Weapons officer Sulu- \"Phasers overheated, sir.\""); + game.damage[DPHASER] = damfac*(1.0 + Rand()) * (1.0+chekbrn); + } + } +} + +static int checkshctrl(double rpow) +{ + double hit; + int icas; + + skip(1); + if (Rand() < .998) { + prout("Shields lowered."); + return 0; + } + /* Something bad has happened */ + prouts("***RED ALERT! RED ALERT!"); + skip(2); + hit = rpow*shield/inshld; + energy -= rpow+hit*0.8; + shield -= hit*0.2; + if (energy <= 0.0) { + prouts("Sulu- \"Captain! Shield malf***********************\""); + skip(1); + stars(); + finish(FPHASER); + return 1; + } + prouts("Sulu- \"Captain! Shield malfunction! Phaser fire contained!\""); + skip(2); + prout("Lt. Uhura- \"Sir, all decks reporting damage.\""); + icas = hit*Rand()*0.012; + skip(1); + fry(0.8*hit); + if (icas) { + skip(1); + prout("McCoy to bridge- \"Severe radiation burns, Jim."); + prout(" %d casualties so far.\"", icas); + casual -= icas; + } + skip(1); + prout("Phaser energy dispersed by shields."); + prout("Enemy unaffected."); + overheat(rpow); + return 1; +} + + +void phasers(void) +{ + double hits[21], rpow=0, extra, powrem, over, temp; + int kz = 0, k=1, i, irec=0; /* Cheating inhibitor */ + int ifast=0, no=0, ipoop=1, msgflag = 1; + enum {NOTSET, MANUAL, FORCEMAN, AUTOMATIC} automode = NOTSET; + int key=0; + + skip(1); + /* SR sensors and Computer */ + if (game.damage[DSRSENS]+game.damage[DCOMPTR] > 0) ipoop = 0; + if (condit == IHDOCKED) { + prout("Phasers can't be fired through base shields."); + chew(); + return; + } + if (game.damage[DPHASER] != 0) { + prout("Phaser control damaged."); + chew(); + return; + } + if (shldup) { + if (game.damage[DSHCTRL]) { + prout("High speed shield control damaged."); + chew(); + return; + } + if (energy <= 200.0) { + prout("Insufficient energy to activate high-speed shield control."); + chew(); + return; + } + prout("Weapons Officer Sulu- \"High-speed shield control enabled, sir.\""); + ifast = 1; + + } + /* Original code so convoluted, I re-did it all */ + while (automode==NOTSET) { + key=scan(); + if (key == IHALPHA) { + if (isit("manual")) { + if (nenhere==0) { + prout("There is no enemy present to select."); + chew(); + key = IHEOL; + automode=AUTOMATIC; + } + else { + automode = MANUAL; + key = scan(); + } + } + else if (isit("automatic")) { + if ((!ipoop) && nenhere != 0) { + automode = FORCEMAN; + } + else { + if (nenhere==0) + prout("Energy will be expended into space."); + automode = AUTOMATIC; + key = scan(); + } + } + else if (isit("no")) { + no = 1; + } + else { + huh(); + return; + } + } + else if (key == IHREAL) { + if (nenhere==0) { + prout("Energy will be expended into space."); + automode = AUTOMATIC; + } + else if (!ipoop) + automode = FORCEMAN; + else + automode = AUTOMATIC; + } + else { + /* IHEOL */ + if (nenhere==0) { + prout("Energy will be expended into space."); + automode = AUTOMATIC; + } + else if (!ipoop) + automode = FORCEMAN; + else + proutn("Manual or automatic? "); + } + } + + switch (automode) { + case AUTOMATIC: + if (key == IHALPHA && isit("no")) { + no = 1; + key = scan(); + } + if (key != IHREAL && nenhere != 0) { + prout("Phasers locked on target. Energy available: %.2f", + ifast?energy-200.0:energy,1,2); + } + irec=0; + do { + chew(); + if (!kz) for_local_enemies(i) + irec+=fabs(game.kpower[i])/(PHASEFAC*pow(0.90,game.kdist[i]))* + (1.01+0.05*Rand()) + 1.0; + kz=1; + proutn("(%d) units required. ", irec); + chew(); + proutn("Units to fire= "); + key = scan(); + if (key!=IHREAL) return; + rpow = aaitem; + if (rpow > (ifast?energy-200:energy)) { + proutn("Energy available= %.2f", + ifast?energy-200:energy); + skip(1); + key = IHEOL; + } + } while (rpow > (ifast?energy-200:energy)); + if (rpow<=0) { + /* chicken out */ + chew(); + return; + } + if ((key=scan()) == IHALPHA && isit("no")) { + no = 1; + } + if (ifast) { + energy -= 200; /* Go and do it! */ + if (checkshctrl(rpow)) return; + } + chew(); + energy -= rpow; + extra = rpow; + if (nenhere) { + extra = 0.0; + powrem = rpow; + for_local_enemies(i) { + hits[i] = 0.0; + if (powrem <= 0) continue; + hits[i] = fabs(game.kpower[i])/(PHASEFAC*pow(0.90,game.kdist[i])); + over = (0.01 + 0.05*Rand())*hits[i]; + temp = powrem; + powrem -= hits[i] + over; + if (powrem <= 0 && temp < hits[i]) hits[i] = temp; + if (powrem <= 0) over = 0.0; + extra += over; + } + if (powrem > 0.0) extra += powrem; + hittem(hits); + ididit=1; + } + if (extra > 0 && alldone == 0) { + if (ithere) { + proutn("*** Tholian web absorbs "); + if (nenhere>0) proutn("excess "); + prout("phaser energy."); + } + else { + prout("%d expended on empty space.", (int)extra); + } + } + break; + + case FORCEMAN: + chew(); + key = IHEOL; + if (game.damage[DCOMPTR]!=0) + prout("Battle comuter damaged, manual file only."); + else { + skip(1); + prouts("---WORKING---"); + skip(1); + prout("Short-range-sensors-damaged"); + prout("Insufficient-data-for-automatic-phaser-fire"); + prout("Manual-fire-must-be-used"); + skip(1); + } + case MANUAL: + rpow = 0.0; + for (k = 1; k <= nenhere;) { + int ii = game.kx[k], jj = game.ky[k]; + int ienm = game.quad[ii][jj]; + if (msgflag) { + proutn("Energy available= %.2f", + energy-.006-(ifast?200:0)); + skip(1); + msgflag = 0; + rpow = 0.0; + } + if (game.damage[DSRSENS] && !(abs(sectx-ii) < 2 && abs(secty-jj) < 2) && + (ienm == IHC || ienm == IHS)) { + cramen(ienm); + prout(" can't be located without short range scan."); + chew(); + key = IHEOL; + hits[k] = 0; /* prevent overflow -- thanks to Alexei Voitenko */ + k++; + continue; + } + if (key == IHEOL) { + chew(); + if (ipoop && k > kz) + irec=(fabs(game.kpower[k])/(PHASEFAC*pow(0.9,game.kdist[k])))* + (1.01+0.05*Rand()) + 1.0; + kz = k; + proutn("("); + if (game.damage[DCOMPTR]==0) proutn("%d", irec); + else proutn("??"); + proutn(") "); + proutn("units to fire at "); + crmena(0, ienm, 2, ii, jj); + proutn("- "); + key = scan(); + } + if (key == IHALPHA && isit("no")) { + no = 1; + key = scan(); + continue; + } + if (key == IHALPHA) { + huh(); + return; + } + if (key == IHEOL) { + if (k==1) { /* Let me say I'm baffled by this */ + msgflag = 1; + } + continue; + } + if (aaitem < 0) { + /* abort out */ + chew(); + return; + } + hits[k] = aaitem; + rpow += aaitem; + /* If total requested is too much, inform and start over */ + + if (rpow > (ifast?energy-200:energy)) { + prout("Available energy exceeded -- try again."); + chew(); + return; + } + key = scan(); /* scan for next value */ + k++; + } + if (rpow == 0.0) { + /* zero energy -- abort */ + chew(); + return; + } + if (key == IHALPHA && isit("no")) { + no = 1; + } + energy -= rpow; + chew(); + if (ifast) { + energy -= 200.0; + if (checkshctrl(rpow)) return; + } + hittem(hits); + ididit=1; + case NOTSET:; /* avoid gcc warning */ + } + /* Say shield raised or malfunction, if necessary */ + if (alldone) + return; + if (ifast) { + skip(1); + if (no == 0) { + if (Rand() >= 0.99) { + prout("Sulu- \"Sir, the high-speed shield control has malfunctioned . . ."); + prouts(" CLICK CLICK POP . . ."); + prout(" No response, sir!"); + shldup = 0; + } + else + prout("Shields raised."); + } + else + shldup = 0; + } + overheat(rpow); +} + +void hittem(double *hits) +{ + double kp, kpow, wham, hit, dustfac, kpini; + int nenhr2=nenhere, k=1, kk=1, ii, jj, ienm; + + skip(1); + + for (; k <= nenhr2; k++, kk++) { + if ((wham = hits[k])==0) continue; + dustfac = 0.9 + 0.01*Rand(); + hit = wham*pow(dustfac,game.kdist[kk]); + kpini = game.kpower[kk]; + kp = fabs(kpini); + if (PHASEFAC*hit < kp) kp = PHASEFAC*hit; + game.kpower[kk] -= (game.kpower[kk] < 0 ? -kp: kp); + kpow = game.kpower[kk]; + ii = game.kx[kk]; + jj = game.ky[kk]; + if (hit > 0.005) { + if (game.damage[DSRSENS]==0) + boom(ii, jj); + proutn("%d unit hit on ", (int)hit); + } + else + proutn("Very small hit on "); + ienm = game.quad[ii][jj]; + if (ienm==IHQUEST) iqengry=1; + crmena(0,ienm,2,ii,jj); + skip(1); + if (kpow == 0) { + deadkl(ii, jj, ienm, ii, jj); + if (KLINGREM==0) finish(FWON); + if (alldone) return; + kk--; /* don't do the increment */ + } + else /* decide whether or not to emasculate klingon */ + if (kpow > 0 && Rand() >= 0.9 && + kpow <= ((0.4 + 0.4*Rand())*kpini)) { + prout("***Mr. Spock- \"Captain, the vessel at ", + cramlc(sector,ii,jj)); + prout(" has just lost its firepower.\""); + game.kpower[kk] = -kpow; + } + } + return; +} + diff --git a/src/config.h.in b/src/config.h.in new file mode 100644 index 0000000..7ceb83a --- /dev/null +++ b/src/config.h.in @@ -0,0 +1,122 @@ +/* src/config.h.in. Generated from configure.ac by autoheader. */ + +/* Define to 1 if translation of program messages to the user's native + language is requested. */ +#undef ENABLE_NLS + +/* Define to 1 if you have the `atexit' function. */ +#undef HAVE_ATEXIT + +/* Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the + CoreFoundation framework. */ +#undef HAVE_CFLOCALECOPYCURRENT + +/* Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in + the CoreFoundation framework. */ +#undef HAVE_CFPREFERENCESCOPYAPPVALUE + +/* Define to 1 if you have the header file. */ +#undef HAVE_CURSES_H + +/* Define if the GNU dcgettext() function is already present or preinstalled. + */ +#undef HAVE_DCGETTEXT + +/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */ +#undef HAVE_DOPRNT + +/* Define to 1 if you have the header file. */ +#undef HAVE_FCNTL_H + +/* Define to 1 if you have the `floor' function. */ +#undef HAVE_FLOOR + +/* Define if the GNU gettext() function is already present or preinstalled. */ +#undef HAVE_GETTEXT + +/* Define if you have the iconv() function. */ +#undef HAVE_ICONV + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the `m' library (-lm). */ +#undef HAVE_LIBM + +/* Define to 1 if you have the `ncurses' library (-lncurses). */ +#undef HAVE_LIBNCURSES + +/* Define to 1 if you have the header file. */ +#undef HAVE_LINUX_KD_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the `pow' function. */ +#undef HAVE_POW + +/* Define to 1 if you have the `sqrt' function. */ +#undef HAVE_SQRT + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the `strcasecmp' function. */ +#undef HAVE_STRCASECMP + +/* Define to 1 if you have the `strchr' function. */ +#undef HAVE_STRCHR + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the `strncasecmp' function. */ +#undef HAVE_STRNCASECMP + +/* Define to 1 if you have the `strstr' function. */ +#undef HAVE_STRSTR + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_IOCTL_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define to 1 if you have the `vprintf' function. */ +#undef HAVE_VPRINTF + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Version number of package */ +#undef VERSION diff --git a/src/events.c b/src/events.c new file mode 100644 index 0000000..589a838 --- /dev/null +++ b/src/events.c @@ -0,0 +1,755 @@ +#include "sst.h" +#include + +void events(void) +{ + int ictbeam=0, ipage=0, istract=0, line, i=0, j, k, l, ixhold=0, iyhold=0; + double fintim = game.state.date + Time, datemin, xtime, repair, yank=0; + int radio_was_broken; + +#ifdef DEBUG + if (idebug) prout("EVENTS"); +#endif + + radio_was_broken = (game.damage[DRADIO] != 0.0); + + for (;;) { + /* Select earliest extraneous event, line==0 if no events */ + line = FSPY; + if (alldone) return; + datemin = fintim; + for (l = 1; l < NEVENTS; l++) + if (game.future[l] < datemin) { + line = l; + datemin = game.future[l]; + } + xtime = datemin-game.state.date; + game.state.date = datemin; + /* Decrement Federation resources and recompute remaining time */ + game.state.remres -= (game.state.remkl+4*game.state.remcom)*xtime; + game.state.remtime = game.state.remres/(game.state.remkl+4*game.state.remcom); + if (game.state.remtime <=0) { + finish(FDEPLETE); + return; + } + /* Is life support adequate? */ + if (game.damage[DLIFSUP] && condit != IHDOCKED) { + if (lsupres < xtime && game.damage[DLIFSUP] > lsupres) { + finish(FLIFESUP); + return; + } + lsupres -= xtime; + if (game.damage[DLIFSUP] <= xtime) lsupres = inlsr; + } + /* Fix devices */ + repair = xtime; + if (condit == IHDOCKED) repair /= docfac; + /* Don't fix Deathray here */ + for (l=0; l 0.0 && l != DDRAY) + game.damage[l] -= (game.damage[l]-repair > 0.0 ? repair : game.damage[l]); + /* If radio repaired, update star chart and attack reports */ + if (radio_was_broken && game.damage[DRADIO] == 0.0) { + prout("Lt. Uhura- \"Captain, the sub-space radio is working and"); + prout(" surveillance reports are coming in."); + skip(1); + if (iseenit==0) { + attakreport(0); + iseenit = 1; + } + rechart(); + prout(" The star chart is now up to date.\""); + skip(1); + } + /* Cause extraneous event LINE to occur */ + Time -= xtime; + switch (line) { + case FSNOVA: /* Supernova */ + if (ipage==0) pause_game(1); + ipage=1; + snova(0,0); + game.future[FSNOVA] = game.state.date + expran(0.5*intime); + if (game.state.galaxy[quadx][quady].supernova) return; + break; + case FSPY: /* Check with spy to see if S.C. should tractor beam */ + if (game.state.nscrem == 0 || + ictbeam+istract > 0 || + condit==IHDOCKED || isatb==1 || iscate==1) return; + if (ientesc || + (energy < 2000 && torps < 4 && shield < 1250) || + (game.damage[DPHASER]>0 && (game.damage[DPHOTON]>0 || torps < 4)) || + (game.damage[DSHIELD] > 0 && + (energy < 2500 || game.damage[DPHASER] > 0) && + (torps < 5 || game.damage[DPHOTON] > 0))) { + /* Tractor-beam her! */ + istract=1; + yank = square(game.state.isx-quadx) + square(game.state.isy-quady); + /********* fall through to FTBEAM code ***********/ + } + else return; + case FTBEAM: /* Tractor beam */ + if (line==FTBEAM) { + if (game.state.remcom == 0) { + game.future[FTBEAM] = FOREVER; + break; + } + i = Rand()*game.state.remcom+1.0; + yank = square(game.state.cx[i]-quadx) + square(game.state.cy[i]-quady); + if (istract || condit == IHDOCKED || yank == 0) { + /* Drats! Have to reschedule */ + game.future[FTBEAM] = game.state.date + Time + + expran(1.5*intime/game.state.remcom); + break; + } + } + /* tractor beaming cases merge here */ + yank = sqrt(yank); + if (ipage==0) pause_game(1); + ipage=1; + Time = (10.0/(7.5*7.5))*yank; /* 7.5 is yank rate (warp 7.5) */ + ictbeam = 1; + skip(1); + proutn("***"); + crmshp(); + prout(" caught in long range tractor beam--"); + /* If Kirk & Co. screwing around on planet, handle */ + atover(1); /* atover(1) is Grab */ + if (alldone) return; + if (icraft == 1) { /* Caught in Galileo? */ + finish(FSTRACTOR); + return; + } + /* Check to see if shuttle is aboard */ + if (iscraft==0) { + skip(1); + if (Rand() > 0.5) { + prout("Galileo, left on the planet surface, is captured"); + prout("by aliens and made into a flying McDonald's."); + game.damage[DSHUTTL] = -10; + iscraft = -1; + } + else { + prout("Galileo, left on the planet surface, is well hidden."); + } + } + if (line==0) { + quadx = game.state.isx; + quady = game.state.isy; + } + else { + quadx = game.state.cx[i]; + quady = game.state.cy[i]; + } + iran(QUADSIZE, §x, §y); + crmshp(); + proutn(" is pulled to "); + proutn(cramlc(quadrant, quadx, quady)); + proutn(", "); + prout(cramlc(sector, sectx, secty)); + if (resting) { + prout("(Remainder of rest/repair period cancelled.)"); + resting = 0; + } + if (shldup==0) { + if (game.damage[DSHIELD]==0 && shield > 0) { + doshield(2); /* Shldsup */ + shldchg=0; + } + else prout("(Shields not currently useable.)"); + } + newqad(0); + /* Adjust finish time to time of tractor beaming */ + fintim = game.state.date+Time; + attack(0); + if (game.state.remcom <= 0) game.future[FTBEAM] = FOREVER; + else game.future[FTBEAM] = game.state.date+Time+expran(1.5*intime/game.state.remcom); + break; + case FSNAP: /* Snapshot of the universe (for time warp) */ + game.snapsht = game.state; + game.state.snap = 1; + game.future[FSNAP] = game.state.date + expran(0.5 * intime); + break; + case FBATTAK: /* Commander attacks starbase */ + if (game.state.remcom==0 || game.state.rembase==0) { + /* no can do */ + game.future[FBATTAK] = game.future[FCDBAS] = FOREVER; + break; + } + i = 0; + for_starbases(j) { + for_commanders(k) + if (game.state.baseqx[j]==game.state.cx[k] && game.state.baseqy[j]==game.state.cy[k] && + (game.state.baseqx[j]!=quadx || game.state.baseqy[j]!=quady) && + (game.state.baseqx[j]!=game.state.isx || game.state.baseqy[j]!=game.state.isy)) { + i = 1; + break; + } + if (i == 1) break; + } + if (j>game.state.rembase) { + /* no match found -- try later */ + game.future[FBATTAK] = game.state.date + expran(0.3*intime); + game.future[FCDBAS] = FOREVER; + break; + } + /* commander + starbase combination found -- launch attack */ + batx = game.state.baseqx[j]; + baty = game.state.baseqy[j]; + game.future[FCDBAS] = game.state.date+1.0+3.0*Rand(); + if (isatb) /* extra time if SC already attacking */ + game.future[FCDBAS] += game.future[FSCDBAS]-game.state.date; + game.future[FBATTAK] = game.future[FCDBAS] +expran(0.3*intime); + iseenit = 0; + if (game.damage[DRADIO] != 0.0 && + condit != IHDOCKED) break; /* No warning :-( */ + iseenit = 1; + if (ipage==0) pause_game(1); + ipage = 1; + skip(1); + proutn("Lt. Uhura- \"Captain, the starbase in "); + prout(cramlc(quadrant, batx, baty)); + prout(" reports that it is under attack and that it can"); + proutn(" hold out only until stardate %d", + (int)game.future[FCDBAS]); + prout(".\""); + if (resting) { + skip(1); + proutn("Mr. Spock- \"Captain, shall we cancel the rest period?\" "); + if (ja()) { + resting = 0; + Time = 0.0; + return; + } + } + break; + case FSCDBAS: /* Supercommander destroys base */ + game.future[FSCDBAS] = FOREVER; + isatb = 2; + if (!game.state.galaxy[game.state.isx][game.state.isy].starbase) + break; /* WAS RETURN! */ + ixhold = batx; + iyhold = baty; + batx = game.state.isx; + baty = game.state.isy; + case FCDBAS: /* Commander succeeds in destroying base */ + if (line==FCDBAS) { + game.future[FCDBAS] = FOREVER; + /* find the lucky pair */ + for_commanders(i) + if (game.state.cx[i]==batx && game.state.cy[i]==baty) + break; + if (i > game.state.remcom || game.state.rembase == 0 || + !game.state.galaxy[batx][baty].starbase) { + /* No action to take after all */ + batx = baty = 0; + break; + } + } + /* Code merges here for any commander destroying base */ + /* Not perfect, but will have to do */ + /* Handle case where base is in same quadrant as starship */ + if (batx==quadx && baty==quady) { + game.state.chart[batx][baty].starbase = FALSE; + game.quad[basex][basey]= IHDOT; + basex=basey=0; + newcnd(); + skip(1); + prout("Spock- \"Captain, I believe the starbase has been destroyegame.state.\""); + } + else if (game.state.rembase != 1 && + (game.damage[DRADIO] <= 0.0 || condit == IHDOCKED)) { + /* Get word via subspace radio */ + if (ipage==0) pause_game(1); + ipage = 1; + skip(1); + prout("Lt. Uhura- \"Captain, Starfleet Command reports that"); + proutn(" the starbase in "); + proutn(cramlc(quadrant, batx, baty)); + prout(" has been destroyed by"); + if (isatb==2) prout("the Klingon Super-Commander"); + else prout("a Klingon Commander"); + game.state.chart[batx][baty].starbase = FALSE; + } + /* Remove Starbase from galaxy */ + game.state.galaxy[batx][baty].starbase = FALSE; + for_starbases(i) + if (game.state.baseqx[i]==batx && game.state.baseqy[i]==baty) { + game.state.baseqx[i]=game.state.baseqx[game.state.rembase]; + game.state.baseqy[i]=game.state.baseqy[game.state.rembase]; + } + game.state.rembase--; + if (isatb == 2) { + /* reinstate a commander's base attack */ + batx = ixhold; + baty = iyhold; + isatb = 0; + } + else { + batx = baty = 0; + } + break; + case FSCMOVE: /* Supercommander moves */ + game.future[FSCMOVE] = game.state.date+0.2777; + if (ientesc+istract==0 && + isatb!=1 && + (iscate!=1 || justin==1)) scom(&ipage); + break; + case FDSPROB: /* Move deep space probe */ + game.future[FDSPROB] = game.state.date + 0.01; + probex += probeinx; + probey += probeiny; + i = (int)(probex/QUADSIZE +0.05); + j = (int)(probey/QUADSIZE + 0.05); + if (probecx != i || probecy != j) { + probecx = i; + probecy = j; + if (!VALID_QUADRANT(i, j) || + game.state.galaxy[probecx][probecy].supernova) { + // Left galaxy or ran into supernova + if (game.damage[DRADIO]==0.0 || condit == IHDOCKED) { + if (ipage==0) pause_game(1); + ipage = 1; + skip(1); + proutn("Lt. Uhura- \"The deep space probe "); + if (!VALID_QUADRANT(j, i)) + proutn("has left the galaxy"); + else + proutn("is no longer transmitting"); + prout(".\""); + } + game.future[FDSPROB] = FOREVER; + break; + } + if (game.damage[DRADIO]==0.0 || condit == IHDOCKED) { + if (ipage==0) pause_game(1); + ipage = 1; + skip(1); + proutn("Lt. Uhura- \"The deep space probe is now in "); + proutn(cramlc(quadrant, probecx, probecy)); + prout(".\""); + } + } + /* Update star chart if Radio is working or have access to + radio. */ + if (game.damage[DRADIO] == 0.0 || condit == IHDOCKED) { + game.state.chart[probecx][probecy].klingons = game.state.galaxy[probecx][probecy].klingons; + game.state.chart[probecx][probecy].starbase = game.state.galaxy[probecx][probecy].starbase; + game.state.chart[probecx][probecy].stars = game.state.galaxy[probecx][probecy].stars; + game.state.galaxy[probecx][probecy].charted = TRUE; + } + proben--; // One less to travel + if (proben == 0 && isarmed && + game.state.galaxy[probecx][probecy].stars) { + /* lets blow the sucker! */ + snova(1,0); + game.future[FDSPROB] = FOREVER; + if (game.state.galaxy[quadx][quady].supernova) + return; + } + break; + } + } +} + + +void wait(void) +{ + int key; + double temp, delay, origTime; + + ididit = 0; + for (;;) { + key = scan(); + if (key != IHEOL) break; + proutn("How long? "); + } + chew(); + if (key != IHREAL) { + huh(); + return; + } + origTime = delay = aaitem; + if (delay <= 0.0) return; + if (delay >= game.state.remtime || nenhere != 0) { + proutn("Are you sure? "); + if (ja() == 0) return; + } + + /* Alternate resting periods (events) with attacks */ + + resting = 1; + do { + if (delay <= 0) resting = 0; + if (resting == 0) { + prout("%d stardates left.", (int)game.state.remtime); + return; + } + temp = Time = delay; + + if (nenhere) { + double rtime = 1.0 + Rand(); + if (rtime < temp) temp = rtime; + Time = temp; + } + if (Time < delay) attack(0); + if (alldone) return; + events(); + ididit = 1; + if (alldone) return; + delay -= temp; + /* Repair Deathray if long rest at starbase */ + if (origTime-delay >= 9.99 && condit == IHDOCKED) + game.damage[DDRAY] = 0.0; + } while + // leave if quadrant supernovas + (!game.state.galaxy[quadx][quady].supernova); + + resting = 0; + Time = 0; +} + +void nova(int ix, int iy) +{ + static double course[] = + {0.0, 10.5, 12.0, 1.5, 9.0, 0.0, 3.0, 7.5, 6.0, 4.5}; + int bot, top, top2, hits[QUADSIZE+1][3], kount, icx, icy, mm, nn, j; + int iquad, iquad1, i, ll, newcx, newcy, ii, jj; + if (Rand() < 0.05) { + /* Wow! We've supernova'ed */ + snova(ix, iy); + return; + } + + /* handle initial nova */ + game.quad[ix][iy] = IHDOT; + crmena(1, IHSTAR, 2, ix, iy); + prout(" novas."); + game.state.galaxy[quadx][quady].stars--; + game.state.starkl++; + + /* Set up stack to recursively trigger adjacent stars */ + bot = top = top2 = 1; + kount = 0; + icx = icy = 0; + hits[1][1] = ix; + hits[1][2] = iy; + while (1) { + for (mm = bot; mm <= top; mm++) + for (nn = 1; nn <= 3; nn++) /* nn,j represents coordinates around current */ + for (j = 1; j <= 3; j++) { + if (j==2 && nn== 2) continue; + ii = hits[mm][1]+nn-2; + jj = hits[mm][2]+j-2; + if (!VALID_SECTOR(jj, ii)) continue; + iquad = game.quad[ii][jj]; + switch (iquad) { + // case IHDOT: /* Empty space ends reaction + // case IHQUEST: + // case IHBLANK: + // case IHT: + // case IHWEB: + default: + break; + case IHSTAR: /* Affect another star */ + if (Rand() < 0.05) { + /* This star supernovas */ + snova(ii,jj); + return; + } + top2++; + hits[top2][1]=ii; + hits[top2][2]=jj; + game.state.galaxy[quadx][quady].stars -= 1; + game.state.starkl++; + crmena(1, IHSTAR, 2, ii, jj); + prout(" novas."); + game.quad[ii][jj] = IHDOT; + break; + case IHP: /* Destroy planet */ + game.state.galaxy[quadx][quady].planets -= 1; + game.state.nplankl++; + crmena(1, IHP, 2, ii, jj); + prout(" destroyed."); + DESTROY(&game.state.plnets[iplnet]); + iplnet = plnetx = plnety = 0; + if (landed == 1) { + finish(FPNOVA); + return; + } + game.quad[ii][jj] = IHDOT; + break; + case IHB: /* Destroy base */ + game.state.galaxy[quadx][quady].starbase = FALSE; + for_starbases(i) + if (game.state.baseqx[i]==quadx && game.state.baseqy[i]==quady) + break; + game.state.baseqx[i] = game.state.baseqx[game.state.rembase]; + game.state.baseqy[i] = game.state.baseqy[game.state.rembase]; + game.state.rembase--; + basex = basey = 0; + game.state.basekl++; + newcnd(); + crmena(1, IHB, 2, ii, jj); + prout(" destroyed."); + game.quad[ii][jj] = IHDOT; + break; + case IHE: /* Buffet ship */ + case IHF: + prout("***Starship buffeted by nova."); + if (shldup) { + if (shield >= 2000.0) shield -= 2000.0; + else { + double diff = 2000.0 - shield; + energy -= diff; + shield = 0.0; + shldup = 0; + prout("***Shields knocked out."); + game.damage[DSHIELD] += 0.005*damfac*Rand()*diff; + } + } + else energy -= 2000.0; + if (energy <= 0) { + finish(FNOVA); + return; + } + /* add in course nova contributes to kicking starship*/ + icx += sectx-hits[mm][1]; + icy += secty-hits[mm][2]; + kount++; + break; + case IHK: /* kill klingon */ + deadkl(ii,jj,iquad, ii, jj); + break; + case IHC: /* Damage/destroy big enemies */ + case IHS: + case IHR: + for_local_enemies(ll) + if (game.kx[ll]==ii && game.ky[ll]==jj) break; + game.kpower[ll] -= 800.0; /* If firepower is lost, die */ + if (game.kpower[ll] <= 0.0) { + deadkl(ii, jj, iquad, ii, jj); + break; + } + newcx = ii + ii - hits[mm][1]; + newcy = jj + jj - hits[mm][2]; + crmena(1, iquad, 2, ii, jj); + proutn(" damaged"); + if (!VALID_SECTOR(newcx, newcy)) { + /* can't leave quadrant */ + skip(1); + break; + } + iquad1 = game.quad[newcx][newcy]; + if (iquad1 == IHBLANK) { + proutn(", blasted into "); + crmena(0, IHBLANK, 2, newcx, newcy); + skip(1); + deadkl(ii, jj, iquad, newcx, newcy); + break; + } + if (iquad1 != IHDOT) { + /* can't move into something else */ + skip(1); + break; + } + proutn(", buffeted to "); + proutn(cramlc(sector, newcx, newcy)); + game.quad[ii][jj] = IHDOT; + game.quad[newcx][newcy] = iquad; + game.kx[ll] = newcx; + game.ky[ll] = newcy; + game.kavgd[ll] = sqrt(square(sectx-newcx)+square(secty-newcy)); + game.kdist[ll] = game.kavgd[ll]; + skip(1); + break; + } + } + if (top == top2) + break; + bot = top + 1; + top = top2; + } + if (kount==0) + return; + + /* Starship affected by nova -- kick it away. */ + dist = kount*0.1; + if (icx) icx = (icx < 0 ? -1 : 1); + if (icy) icy = (icy < 0 ? -1 : 1); + direc = course[3*(icx+1)+icy+2]; + if (direc == 0.0) dist = 0.0; + if (dist == 0.0) return; + Time = 10.0*dist/16.0; + skip(1); + prout("Force of nova displaces starship."); + iattak=2; /* Eliminates recursion problem */ + imove(); + Time = 10.0*dist/16.0; + return; +} + + +void snova(int insx, int insy) +{ + int comdead, nqx=0, nqy=0, nsx, nsy, num=0, kldead, iscdead; + int nrmdead, npdead; + int incipient=0; + + nsx = insy; + nsy = insy; + + if (insy== 0) { + if (insx == 1) { + /* NOVAMAX being used */ + nqx = probecx; + nqy = probecy; + } + else { + int stars = 0; + /* Scheduled supernova -- select star */ + /* logic changed here so that we won't favor quadrants in top + left of universe */ + for_quadrants(nqx) { + for_quadrants(nqy) { + stars += game.state.galaxy[nqx][nqy].stars; + } + } + if (stars == 0) return; /* nothing to supernova exists */ + num = Rand()*stars + 1; + for_quadrants(nqx) { + for_quadrants(nqy) { + num -= game.state.galaxy[nqx][nqy].stars; + if (num <= 0) break; + } + if (num <=0) break; + } +#ifdef DEBUG + if (idebug) { + proutn("Super nova here?"); + if (ja()==1) { + nqx = quadx; + nqy = quady; + } + } +#endif + } + + if (nqx != quady || nqy != quady || justin != 0) { + /* it isn't here, or we just entered (treat as inroute) */ + if (game.damage[DRADIO] == 0.0 || condit == IHDOCKED) { + skip(1); + prout("Message from Starfleet Command Stardate %.2f", game.state.date); + prout(" Supernova in %s; caution advised.", + cramlc(quadrant, nqx, nqy)); + } + } + else { + /* we are in the quadrant! */ + incipient = 1; + num = Rand()* game.state.galaxy[nqx][nqy].stars + 1; + for_sectors(nsx) { + for_sectors(nsy) { + if (game.quad[nsx][nsy]==IHSTAR) { + num--; + if (num==0) break; + } + } + if (num==0) break; + } + } + } + else { + incipient = 1; + } + + if (incipient) { + skip(1); + prouts("***RED ALERT! RED ALERT!"); + skip(1); + prout("***Incipient supernova detected at ", cramlc(sector, nsx, nsy)); + nqx = quadx; + nqy = quady; + if (square(nsx-sectx) + square(nsy-secty) <= 2.1) { + proutn("Emergency override attempts t"); + prouts("***************"); + skip(1); + stars(); + alldone=1; + } + } + /* destroy any Klingons in supernovaed quadrant */ + kldead = game.state.galaxy[nqx][nqy].klingons; + game.state.galaxy[nqx][nqy].klingons = 0; + comdead = iscdead = 0; + if (nqx==game.state.isx && nqy == game.state.isy) { + /* did in the Supercommander! */ + game.state.nscrem = game.state.isx = game.state.isy = isatb = iscate = 0; + iscdead = 1; + game.future[FSCMOVE] = game.future[FSCDBAS] = FOREVER; + } + if (game.state.remcom) { + int maxloop = game.state.remcom, l; + for (l = 1; l <= maxloop; l++) { + if (game.state.cx[l] == nqx && game.state.cy[l] == nqy) { + game.state.cx[l] = game.state.cx[game.state.remcom]; + game.state.cy[l] = game.state.cy[game.state.remcom]; + game.state.cx[game.state.remcom] = game.state.cy[game.state.remcom] = 0; + game.state.remcom--; + kldead--; + comdead++; + if (game.state.remcom==0) game.future[FTBEAM] = FOREVER; + break; + } + } + } + game.state.remkl -= kldead; + /* destroy Romulans and planets in supernovaed quadrant */ + nrmdead = game.state.galaxy[nqx][nqy].romulans; + game.state.galaxy[nqx][nqy].romulans = 0; + game.state.nromrem -= nrmdead; + npdead = num - nrmdead*10; + if (npdead) { + int l; + for (l = 0; l < inplan; l++) + if (game.state.plnets[l].x == nqx && game.state.plnets[l].y == nqy) { + DESTROY(&game.state.plnets[l]); + } + } + /* Destroy any base in supernovaed quadrant */ + if (game.state.rembase) { + int maxloop = game.state.rembase, l; + for (l = 1; l <= maxloop; l++) + if (game.state.baseqx[l]==nqx && game.state.baseqy[l]==nqy) { + game.state.baseqx[l] = game.state.baseqx[game.state.rembase]; + game.state.baseqy[l] = game.state.baseqy[game.state.rembase]; + game.state.baseqx[game.state.rembase] = game.state.baseqy[game.state.rembase] = 0; + game.state.rembase--; + break; + } + } + /* If starship caused supernova, tally up destruction */ + if (insx) { + game.state.starkl += game.state.galaxy[nqx][nqy].stars; + game.state.basekl += game.state.galaxy[nqx][nqy].starbase; + game.state.nplankl += npdead; + } + /* mark supernova in galaxy and in star chart */ + if ((quadx == nqx && quady == nqy) || + game.damage[DRADIO] == 0 || + condit == IHDOCKED) + game.state.galaxy[nqx][nqy].supernova = TRUE; + /* If supernova destroys last klingons give special message */ + if (KLINGREM==0 && (nqx != quadx || nqy != quady)) { + skip(2); + if (insx == 0) prout("Lucky you!"); + proutn("A supernova in %s has just destroyed the last Klingons.", + cramlc(quadrant, nqx, nqy)); + finish(FWON); + return; + } + /* if some Klingons remain, continue or die in supernova */ + if (alldone) finish(FSNOVAED); + return; +} + + diff --git a/src/finish.c b/src/finish.c new file mode 100644 index 0000000..c0d3569 --- /dev/null +++ b/src/finish.c @@ -0,0 +1,453 @@ +#include "sst.h" +#include +#include + +void dstrct() +{ + /* Finish with a BANG! */ + chew(); + if (game.damage[DCOMPTR] != 0.0) { + prout("Computer damaged; cannot execute destruct sequence."); + return; + } + prouts("---WORKING---"); skip(1); + prouts("SELF-DESTRUCT-SEQUENCE-ACTIVATED"); skip(1); + prouts(" 10"); skip(1); + prouts(" 9"); skip(1); + prouts(" 8"); skip(1); + prouts(" 7"); skip(1); + prouts(" 6"); skip(1); + skip(1); + prout("ENTER-CORRECT-PASSWORD-TO-CONTINUE-"); + skip(1); + prout("SELF-DESTRUCT-SEQUENCE-OTHERWISE-"); + skip(1); + prout("SELF-DESTRUCT-SEQUENCE-WILL-BE-ABORTED"); + skip(1); + scan(); + chew(); + if (strcmp(game.passwd, citem) != 0) { + prouts("PASSWORD-REJECTED;"); skip(1); + prouts("CONTINUITY-EFFECTED"); + skip(2); + return; + } + prouts("PASSWORD-ACCEPTED"); skip(1); + prouts(" 5"); skip(1); + prouts(" 4"); skip(1); + prouts(" 3"); skip(1); + prouts(" 2"); skip(1); + prouts(" 1"); skip(1); + if (Rand() < 0.15) { + prouts("GOODBYE-CRUEL-WORLD"); + skip(1); + } + kaboom(); +} + +void kaboom(void) +{ + stars(); + if (ship==IHE) prouts("***"); + prouts("********* Entropy of "); + crmshp(); + prouts(" maximized *********"); + skip(1); + stars(); + skip(1); + if (nenhere != 0) { + double whammo = 25.0 * energy; + int l=1; + while (l <= nenhere) { + if (game.kpower[l]*game.kdist[l] <= whammo) + deadkl(game.kx[l],game.ky[l], game.quad[game.kx[l]][game.ky[l]], game.kx[l], game.ky[l]); + l++; + } + } + finish(FDILITHIUM); +} + + +void finish(FINTYPE ifin) +{ + int igotit = 0; + alldone = 1; + skip(3); + prout("It is stardate %.1f.", game.state.date); + skip(1); + switch (ifin) { + case FWON: // Game has been won + if (game.state.nromrem != 0) + prout("The remaining %d Romulans surrender to Starfleet Command.", + game.state.nromrem); + + prout("You have smashed the Klingon invasion fleet and saved"); + prout("the Federation."); + gamewon=1; + if (alive) { + double badpt; + badpt = 5.0*game.state.starkl + casual + 10.0*game.state.nplankl + + 45.*nhelp+100.*game.state.basekl; + if (ship == IHF) badpt += 100.0; + else if (ship == 0) badpt += 200.0; + if (badpt < 100.0) badpt = 0.0; // Close enough! + if (game.state.date-indate < 5.0 || + // killsPerDate >= RateMax + KLINGKILLED/(game.state.date-indate) >= + 0.1*skill*(skill+1.0) + 0.1 + 0.008*badpt) { + skip(1); + prout("In fact, you have done so well that Starfleet Command"); + switch (skill) { + case SKILL_NOVICE: + prout("promotes you one step in rank from \"Novice\" to \"Fair\"."); + break; + case SKILL_FAIR: + prout("promotes you one step in rank from \"Fair\" to \"Good\"."); + break; + case SKILL_GOOD: + prout("promotes you one step in rank from \"Good\" to \"Expert\"."); + break; + case SKILL_EXPERT: + prout("promotes you to Commodore Emeritus."); + skip(1); + prout("Now that you think you're really good, try playing"); + prout("the \"Emeritus\" game. It will splatter your ego."); + break; + case SKILL_EMERITUS: + skip(1); + proutn("Computer- "); + prouts("ERROR-ERROR-ERROR-ERROR"); + skip(2); + prouts(" YOUR-SKILL-HAS-EXCEEDED-THE-CAPACITY-OF-THIS-PROGRAM"); + skip(1); + prouts(" THIS-PROGRAM-MUST-SURVIVE"); + skip(1); + prouts(" THIS-PROGRAM-MUST-SURVIVE"); + skip(1); + prouts(" THIS-PROGRAM-MUST-SURVIVE"); + skip(1); + prouts(" THIS-PROGRAM-MUST?- MUST ? - SUR? ? -? VI"); + skip(2); + prout("Now you can retire and write your own Star Trek game!"); + skip(1); + break; + } + if (skill >= SKILL_EXPERT) { + if (thawed +#ifdef DEBUG + && !idebug +#endif + ) + prout("You cannot get a citation, so..."); + else { + proutn("Do you want your Commodore Emeritus Citation printed? "); + chew(); + if (ja()) { + igotit = 1; + } + } + } + } + // Only grant long life if alive (original didn't!) + skip(1); + prout("LIVE LONG AND PROSPER."); + } + score(); + if (igotit != 0) plaque(); + return; + case FDEPLETE: // Federation Resources Depleted + prout("Your time has run out and the Federation has been"); + prout("conquered. Your starship is now Klingon property,"); + prout("and you are put on trial as a war criminal. On the"); + proutn("basis of your record, you are "); + if (KLINGREM*3.0 > INKLINGTOT) { + prout("aquitted."); + skip(1); + prout("LIVE LONG AND PROSPER."); + } + else { + prout("found guilty and"); + prout("sentenced to death by slow torture."); + alive = 0; + } + score(); + return; + case FLIFESUP: + prout("Your life support reserves have run out, and"); + prout("you die of thirst, starvation, and asphyxiation."); + prout("Your starship is a derelict in space."); + break; + case FNRG: + prout("Your energy supply is exhausted."); + skip(1); + prout("Your starship is a derelict in space."); + break; + case FBATTLE: + proutn("The "); + crmshp(); + prout("has been destroyed in battle."); + skip(1); + prout("Dulce et decorum est pro patria mori."); + break; + case FNEG3: + prout("You have made three attempts to cross the negative energy"); + prout("barrier which surrounds the galaxy."); + skip(1); + prout("Your navigation is abominable."); + score(); + return; + case FNOVA: + prout("Your starship has been destroyed by a nova."); + prout("That was a great shot."); + skip(1); + break; + case FSNOVAED: + proutn("The "); + crmshp(); + prout(" has been fried by a supernova."); + prout("...Not even cinders remain..."); + break; + case FABANDN: + prout("You have been captured by the Klingons. If you still"); + prout("had a starbase to be returned to, you would have been"); + prout("repatriated and given another chance. Since you have"); + prout("no starbases, you will be mercilessly tortured to death."); + break; + case FDILITHIUM: + prout("Your starship is now an expanding cloud of subatomic particles"); + break; + case FMATERIALIZE: + prout("Starbase was unable to re-materialize your starship."); + prout("Sic transit gloria muntdi"); + break; + case FPHASER: + proutn("The "); + crmshp(); + prout(" has been cremated by its own phasers."); + break; + case FLOST: + prout("You and your landing party have been"); + prout("converted to energy, disipating through space."); + break; + case FMINING: + prout("You are left with your landing party on"); + prout("a wild jungle planet inhabited by primitive cannibals."); + skip(1); + prout("They are very fond of \"Captain Kirk\" soup."); + skip(1); + proutn("Without your leadership, the "); + crmshp(); + prout(" is destroyed."); + break; + case FDPLANET: + prout("You and your mining party perish."); + skip(1); + prout("That was a great shot."); + skip(1); + break; + case FSSC: + prout("The Galileo is instantly annihilated by the supernova."); + // no break; + case FPNOVA: + prout("You and your mining party are atomized."); + skip(1); + proutn("Mr. Spock takes command of the "); + crmshp(); + prout(" and"); + prout("joins the Romulans, reigning terror on the Federation."); + break; + case FSTRACTOR: + prout("The shuttle craft Galileo is also caught,"); + prout("and breaks up under the strain."); + skip(1); + prout("Your debris is scattered for millions of miles."); + proutn("Without your leadership, the "); + crmshp(); + prout(" is destroyed."); + break; + case FDRAY: + prout("The mutants attack and kill Spock."); + prout("Your ship is captured by Klingons, and"); + prout("your crew is put on display in a Klingon zoo."); + break; + case FTRIBBLE: + prout("Tribbles consume all remaining water,"); + prout("food, and oxygen on your ship."); + skip(1); + prout("You die of thirst, starvation, and asphyxiation."); + prout("Your starship is a derelict in space."); + break; + case FHOLE: + prout("Your ship is drawn to the center of the black hole."); + prout("You are crushed into extremely dense matter."); + break; + } + if (ship==IHF) ship= 0; + else if (ship == IHE) ship = IHF; + alive = 0; + if (KLINGREM != 0) { + double goodies = game.state.remres/inresor; + double baddies = (game.state.remkl + 2.0*game.state.remcom)/(inkling+2.0*incom); + if (goodies/baddies >= 1.0+0.5*Rand()) { + prout("As a result of your actions, a treaty with the Klingon"); + prout("Empire has been signed. The terms of the treaty are"); + if (goodies/baddies >= 3.0+Rand()) { + prout("favorable to the Federation."); + skip(1); + prout("Congratulations!"); + } + else + prout("highly unfavorable to the Federation."); + } + else + prout("The Federation will be destroyed."); + } + else { + prout("Since you took the last Klingon with you, you are a"); + prout("martyr and a hero. Someday maybe they'll erect a"); + prout("statue in your memory. Rest in peace, and try not"); + prout("to think about pigeons."); + gamewon = 1; + } + score(); +} + +void score(void) +{ + double timused = game.state.date - indate; + int ithperd, iwon, klship; + + iskill = skill; + if ((timused == 0 || KLINGREM != 0) && timused < 5.0) timused = 5.0; + perdate = KLINGKILLED/timused; + ithperd = 500*perdate + 0.5; + iwon = 0; + if (gamewon) iwon = 100*skill; + if (ship == IHE) klship = 0; + else if (ship == IHF) klship = 1; + else klship = 2; + if (gamewon == 0) game.state.nromrem = 0; // None captured if no win + iscore = 10*NKILLK + 50*NKILLC + ithperd + iwon + - 100*game.state.basekl - 100*klship - 45*nhelp -5*game.state.starkl - casual + + 20*NKILLROM + 200*NKILLSC - 10*game.state.nplankl + game.state.nromrem; + if (alive == 0) iscore -= 200; + skip(2); + prout("Your score --"); + if (NKILLROM) + prout("%6d Romulans destroyed %5d", + NKILLROM,20*NKILLROM); + if (game.state.nromrem) + prout("%6d Romulans captured %5d", + game.state.nromrem, game.state.nromrem); + if (NKILLK) + prout("%6d ordinary Klingons destroyed %5d", + NKILLK, 10*NKILLK); + if (NKILLC) + prout("%6d Klingon commanders destroyed %5d", + NKILLC, 50*NKILLC); + if (NKILLSC) + prout("%6d Super-Commander destroyed %5d", + NKILLSC, 200*NKILLSC); + if (ithperd) + prout("%6.2f Klingons per stardate %5d", + perdate, ithperd); + if (game.state.starkl) + prout("%6d stars destroyed by your action %5d", + game.state.starkl, -5*game.state.starkl); + if (game.state.nplankl) + prout("%6d planets destroyed by your action %5d", + game.state.nplankl, -10*game.state.nplankl); + if (game.state.basekl) + prout("%6d bases destroyed by your action %5d", + game.state.basekl, -100*game.state.basekl); + if (nhelp) + prout("%6d calls for help from starbase %5d", + nhelp, -45*nhelp); + if (casual) + prout("%6d casualties incurred %5d", + casual, -casual); + if (klship) + prout("%6d ship(s) lost or destroyed %5d", + klship, -100*klship); + if (alive==0) + prout("Penalty for getting yourself killed -200"); + if (gamewon) { + proutn("Bonus for winning "); + switch (skill) { + case SKILL_NOVICE: proutn("Novice game "); break; + case SKILL_FAIR: proutn("Fair game "); break; + case SKILL_GOOD: proutn("Good game "); break; + case SKILL_EXPERT: proutn("Expert game "); break; + case SKILL_EMERITUS: proutn("Emeritus game"); break; + } + prout(" %5d", iwon); + } + skip(1); + prout("TOTAL SCORE %5d", iscore); +} + +void plaque(void) { + FILE *fp=NULL; + time_t t; + char *timestring; + int nskip; + char winner[128]; + + skip(2); + + while (fp == NULL) { + proutn("File or device name for your plaque: "); + cgetline(winner, sizeof(winner)); + fp = fopen(winner, "w"); + if (fp==NULL) { + prout("Invalid name."); + } + } + + proutn("Enter name to go on plaque (up to 30 characters): "); + cgetline(winner, sizeof(winner)); + /* The 38 below must be 64 for 132-column paper */ + nskip = 38 - strlen(winner)/2; + + fprintf(fp,"\n\n\n\n"); + /* --------DRAW ENTERPRISE PICTURE. */ + fprintf(fp, " EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE\n" ); + fprintf(fp, " EEE E : : : E\n" ); + fprintf(fp, " EE EEE E : : NCC-1701 : E\n"); + fprintf(fp, "EEEEEEEEEEEEEEEE EEEEEEEEEEEEEEE : : : E\n"); + fprintf(fp, " E EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE\n"); + fprintf(fp, " EEEEEEEEE EEEEEEEEEEEEE E E\n"); + fprintf(fp, " EEEEEEE EEEEE E E E E\n"); + fprintf(fp, " EEE E E E E\n"); + fprintf(fp, " E E E E\n"); + fprintf(fp, " EEEEEEEEEEEEE E E\n"); + fprintf(fp, " EEE : EEEEEEE EEEEEEEE\n"); + fprintf(fp, " :E : EEEE E\n"); + fprintf(fp, " .-E -:----- E\n"); + fprintf(fp, " :E : E\n"); + fprintf(fp, " EE : EEEEEEEE\n"); + fprintf(fp, " EEEEEEEEEEEEEEEEEEEEEEE\n"); + fprintf(fp, "\n\n\n"); + fprintf(fp, " U. S. S. ENTERPRISE\n"); + fprintf(fp, "\n\n\n\n"); + fprintf(fp, " For demonstrating outstanding ability as a starship captain\n"); + fprintf(fp, "\n"); + fprintf(fp, " Starfleet Command bestows to you\n"); + fprintf(fp, "\n"); + fprintf(fp,"%*s%s\n\n", nskip, "", winner); + fprintf(fp, " the rank of\n\n"); + fprintf(fp, " \"Commodore Emeritus\"\n\n"); + fprintf(fp, " "); + switch (iskill) { + case SKILL_EXPERT: fprintf(fp," Expert level\n\n"); break; + case SKILL_EMERITUS: fprintf(fp,"Emeritus level\n\n"); break; + default: fprintf(fp," Cheat level\n\n"); break; + } + t = time(NULL); + timestring = ctime(&t); + fprintf(fp, " This day of %.6s %.4s, %.8s\n\n", + timestring+4, timestring+20, timestring+11); + fprintf(fp," Your score: %d\n\n", iscore); + fprintf(fp," Klingons per stardate: %.2f\n", perdate); + fclose(fp); +} diff --git a/src/io.c b/src/io.c new file mode 100644 index 0000000..adbbca0 --- /dev/null +++ b/src/io.c @@ -0,0 +1,438 @@ +#include +#include +#include +#include +#include +#include + +#include "sst.h" +#include "sstlinux.h" + +static int rows, linecount; /* for paging */ + +WINDOW *curwnd; + +static void outro(void) +/* wrap up, either normally or due to signal */ +{ + if (game.options & OPTION_CURSES) { + clear(); + curs_set(1); + (void)refresh(); + (void)resetterm(); + //(void)echo(); + (void)endwin(); + putchar('\n'); + } +} + +void iostart(void) +{ + if (!(game.options & OPTION_CURSES)) { + rows = atoi(getenv("LINES")); + } else { + if (atexit(outro)){ + fprintf(stderr,"Unable to register outro(), exiting...\n"); + exit(1); + } + (void)initscr(); +#ifdef KEY_MIN + keypad(stdscr, TRUE); +#endif /* KEY_MIN */ + (void)saveterm(); + (void)nonl(); + (void)cbreak(); +#ifdef A_COLOR + { + start_color(); + init_pair(COLOR_BLACK, COLOR_BLACK, COLOR_BLACK); + init_pair(COLOR_GREEN, COLOR_GREEN, COLOR_BLACK); + init_pair(COLOR_RED, COLOR_RED, COLOR_BLACK); + init_pair(COLOR_CYAN, COLOR_CYAN, COLOR_BLACK); + init_pair(COLOR_WHITE, COLOR_WHITE, COLOR_BLACK); + init_pair(COLOR_MAGENTA, COLOR_MAGENTA, COLOR_BLACK); + init_pair(COLOR_BLUE, COLOR_BLUE, COLOR_BLACK); + init_pair(COLOR_YELLOW, COLOR_YELLOW, COLOR_BLACK); + } +#endif /* A_COLOR */ + //(void)noecho(); + fullscreen_window = stdscr; + srscan_window = newwin(12, 25, 0, 0); + report_window = newwin(10, 0, 1, 25); + lrscan_window = newwin(10, 0, 0, 64); + message_window = newwin(0, 0, 12, 0); + prompt_window = newwin(1, 0, LINES-2, 0); + scrollok(message_window, TRUE); + setwnd(fullscreen_window); + textcolor(DEFAULT); + } +} + + +void waitfor(void) +/* wait for user action -- OK to do nothing if on a TTY */ +{ + if (game.options & OPTION_CURSES) + getch(); +} + +void pause_game(int i) +{ + char *prompt; + char buf[BUFSIZ]; + if (i==1) { + if (skill > SKILL_FAIR) + prompt = "[ANOUNCEMENT ARRIVING...]"; + else + prompt = "[IMPORTANT ANNOUNCEMENT ARRIVING -- PRESS ENTER TO CONTINUE]"; + } + else { + if (skill > SKILL_FAIR) + prompt = "[CONTINUE?]"; + else + prompt = "[PRESS ENTER TO CONTINUE]"; + + } + if (game.options & OPTION_CURSES) { + drawmaps(0); + setwnd(prompt_window); + wclear(prompt_window); + waddstr(prompt_window, prompt); + wgetnstr(prompt_window, buf, sizeof(buf)); + wclear(prompt_window); + wrefresh(prompt_window); + setwnd(message_window); + } else { + putchar('\n'); + proutn(prompt); + fgets(buf, sizeof(buf), stdin); + if (i != 0) { + int j; + for (j = 0; j < rows; j++) + putchar('\n'); + } + linecount = 0; + } +} + + +void skip(int i) +{ + while (i-- > 0) { + if (game.options & OPTION_CURSES) { + if (curwnd == message_window && linecount >= getmaxy(curwnd) - 3) { + pause_game(0); + clrscr(); + } else { + proutn("\n"); + if (curwnd == message_window) + linecount++; + } + } else { + linecount++; + if (linecount >= rows) + pause_game(0); + else + putchar('\n'); + } + } +} + +static void vproutn(char *fmt, va_list ap) +{ + if (game.options & OPTION_CURSES) { + vwprintw(curwnd, fmt, ap); + wrefresh(curwnd); + } + else + vprintf(fmt, ap); +} + +void proutn(char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + vproutn(fmt, ap); + va_end(ap); +} + +void prout(char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + vproutn(fmt, ap); + va_end(ap); + skip(1); +} + +void prouts(char *fmt, ...) +/* print slowly! */ +{ + char *s, buf[BUFSIZ]; + va_list ap; + va_start(ap, fmt); + vsprintf(buf, fmt, ap); + va_end(ap); + for (s = buf; *s; s++) { + delay(30); + if (game.options & OPTION_CURSES) { + waddch(curwnd, *s); + wrefresh(curwnd); + } + else { + putchar(*s); + fflush(stdout); + } + } +} + +void cgetline(char *line, int max) +{ + if (game.options & OPTION_CURSES) { + wgetnstr(curwnd, line, max); + strcat(line, "\n"); + wrefresh(curwnd); + } else { + fgets(line, max, stdin); + } + line[strlen(line)-1] = '\0'; +} + +void setwnd(WINDOW *wnd) +/* change windows -- OK for this to be a no-op in tty mode */ +{ + if (game.options & OPTION_CURSES) { + curwnd=wnd; + curs_set(wnd == fullscreen_window || wnd == message_window || wnd == prompt_window); + } +} + +void clreol (void) +/* clear to end of line -- can be a no-op in tty mode */ +{ + if (game.options & OPTION_CURSES) { + wclrtoeol(curwnd); + wrefresh(curwnd); + } +} + +void clrscr (void) +/* clear screen -- can be a no-op in tty mode */ +{ + if (game.options & OPTION_CURSES) { + wclear(curwnd); + wmove(curwnd,0,0); + wrefresh(curwnd); + } + linecount = 0; +} + +void textcolor (int color) +{ +#ifdef A_COLOR + if (game.options & OPTION_CURSES) { + switch(color) { + case DEFAULT: + wattrset(curwnd, 0); + break; + case BLACK: + wattron(curwnd, COLOR_PAIR(COLOR_BLACK)); + break; + case BLUE: + wattron(curwnd, COLOR_PAIR(COLOR_BLUE)); + break; + case GREEN: + wattron(curwnd, COLOR_PAIR(COLOR_GREEN)); + break; + case CYAN: + wattron(curwnd, COLOR_PAIR(COLOR_CYAN)); + break; + case RED: + wattron(curwnd, COLOR_PAIR(COLOR_RED)); + break; + case MAGENTA: + wattron(curwnd, COLOR_PAIR(COLOR_MAGENTA)); + break; + case BROWN: + wattron(curwnd, COLOR_PAIR(COLOR_YELLOW)); + break; + case LIGHTGRAY: + wattron(curwnd, COLOR_PAIR(COLOR_WHITE)); + break; + case DARKGRAY: + wattron(curwnd, COLOR_PAIR(COLOR_BLACK) | A_BOLD); + break; + case LIGHTBLUE: + wattron(curwnd, COLOR_PAIR(COLOR_BLUE) | A_BOLD); + break; + case LIGHTGREEN: + wattron(curwnd, COLOR_PAIR(COLOR_GREEN) | A_BOLD); + break; + case LIGHTCYAN: + wattron(curwnd, COLOR_PAIR(COLOR_CYAN) | A_BOLD); + break; + case LIGHTRED: + wattron(curwnd, COLOR_PAIR(COLOR_RED) | A_BOLD); + break; + case LIGHTMAGENTA: + wattron(curwnd, COLOR_PAIR(COLOR_MAGENTA) | A_BOLD); + break; + case YELLOW: + wattron(curwnd, COLOR_PAIR(COLOR_YELLOW) | A_BOLD); + break; + case WHITE: + wattron(curwnd, COLOR_PAIR(COLOR_WHITE) | A_BOLD); + break; + } + } +#endif /* A_COLOR */ +} + +void highvideo (void) +{ + if (game.options & OPTION_CURSES) { + wattron(curwnd, A_REVERSE); + } +} + +void commandhook(char *cmd, int before) { +} + +/* + * Things past this point have policy implications. + */ + +void drawmaps(short l) +/* hook to be called after moving to redraw maps */ +{ + if (game.options & OPTION_CURSES) { + if (l == 1) + sensor(); + setwnd(srscan_window); + wmove(curwnd, 0, 0); + enqueue("no"); + srscan(SCAN_FULL); + if (l != 2) { + setwnd(report_window); + wclear(report_window); + wmove(report_window, 0, 0); + srscan(SCAN_NO_LEFTSIDE); + setwnd(lrscan_window); + wclear(lrscan_window); + wmove(lrscan_window, 0, 0); + enqueue("l"); + lrscan(); + } + } +} + +static void put_srscan_sym(int x, int y, char sym) +{ + wmove(srscan_window, x+1, y*2+2); + waddch(srscan_window, sym); + wrefresh(srscan_window); +} + +void boom(int ii, int jj) +/* enemy fall down, go boom */ +{ + if (game.options & OPTION_CURSES) { + drawmaps(2); + setwnd(srscan_window); + wattron(srscan_window, A_REVERSE); + put_srscan_sym(ii, jj, game.quad[ii][jj]); + sound(500); + delay(1000); + nosound(); + wattroff(srscan_window, A_REVERSE); + put_srscan_sym(ii, jj, game.quad[ii][jj]); + delay(500); + setwnd(message_window); + } +} + +void warble(void) +/* sound and visual effects for teleportation */ +{ + if (game.options & OPTION_CURSES) { + drawmaps(2); + setwnd(message_window); + sound(50); + } + prouts(" . . . . . "); + if (game.options & OPTION_CURSES) { + delay(1000); + nosound(); + } +} + +void tracktorpedo(int ix, int iy, int l, int i, int n, int iquad) +/* torpedo-track animation */ +{ + if (!game.options & OPTION_CURSES) { + if (l == 1) { + if (n != 1) { + skip(1); + proutn("Track for torpedo number %d- ", i); + } + else { + skip(1); + proutn("Torpedo track- "); + } + } else if (l==4 || l==9) + skip(1); + proutn("%d - %d ", ix, iy); + } else { + if (game.damage[DSRSENS]==0 || condit==IHDOCKED) { + if (i != 1 && l == 1) { + drawmaps(2); + delay(400); + } + if ((iquad==IHDOT)||(iquad==IHBLANK)){ + put_srscan_sym(ix, iy, '+'); + sound(l*10); + delay(100); + nosound(); + put_srscan_sym(ix, iy, iquad); + } + else { + wattron(curwnd, A_REVERSE); + put_srscan_sym(ix, iy, iquad); + sound(500); + delay(1000); + nosound(); + wattroff(curwnd, A_REVERSE); + put_srscan_sym(ix, iy, iquad); + } + } else { + proutn("%d - %d ", ix, iy); + } + } +} + +void makechart(void) +{ + if (game.options & OPTION_CURSES) { + setwnd(message_window); + wclear(message_window); + chart(0); + } +} + +void setpassword(void) +{ + if (!(game.options & OPTION_CURSES)) { + while (TRUE) { + scan(); + strcpy(game.passwd, citem); + chew(); + if (*game.passwd != 0) break; + proutn("Please type in a secret password-"); + } + } else { + int i; + for(i=0;i<3;i++) game.passwd[i]=(char)(97+(int)(Rand()*25)); + game.passwd[3]=0; + } +} + diff --git a/src/moving.c b/src/moving.c new file mode 100644 index 0000000..a5d11b3 --- /dev/null +++ b/src/moving.c @@ -0,0 +1,1009 @@ +#include +#include "sstlinux.h" +#include "sst.h" + +static void getcd(int, int); + +void imove(void) +{ + double angle, deltax, deltay, bigger, x, y, + finald, finalx, finaly, stopegy, probf; + int trbeam = 0, n, l, ix=0, iy=0, kink, kinks, iquad; + + if (inorbit) { + prout("Helmsman Sulu- \"Leaving standard orbit.\""); + inorbit = FALSE; + } + + angle = ((15.0 - direc) * 0.5235988); + deltax = -sin(angle); + deltay = cos(angle); + if (fabs(deltax) > fabs(deltay)) + bigger = fabs(deltax); + else + bigger = fabs(deltay); + + deltay /= bigger; + deltax /= bigger; + + /* If tractor beam is to occur, don't move full distance */ + if (game.state.date+Time >= game.future[FTBEAM]) { + trbeam = 1; + condit = IHRED; + dist = dist*(game.future[FTBEAM]-game.state.date)/Time + 0.1; + Time = game.future[FTBEAM] - game.state.date + 1e-5; + } + /* Move within the quadrant */ + game.quad[sectx][secty] = IHDOT; + x = sectx; + y = secty; + n = 10.0*dist*bigger+0.5; + + if (n > 0) { + for (l = 1; l <= n; l++) { + ix = (x += deltax) + 0.5; + iy = (y += deltay) + 0.5; + if (!VALID_SECTOR(ix, iy)) { + /* Leaving quadrant -- allow final enemy attack */ + /* Don't do it if being pushed by Nova */ + if (nenhere != 0 && iattak != 2) { + newcnd(); + for_local_enemies(l) { + finald = sqrt((ix-game.kx[l])*(double)(ix-game.kx[l]) + + (iy-game.ky[l])*(double)(iy-game.ky[l])); + game.kavgd[l] = 0.5 * (finald+game.kdist[l]); + } + /* + * Stas Sergeev added the condition + * that attacks only happen if Klingons + * are present and your skill is good. + */ + if (skill > SKILL_GOOD && klhere > 0 && !game.state.galaxy[quadx][quady].supernova) + attack(0); + if (alldone) return; + } + /* compute final position -- new quadrant and sector */ + x = QUADSIZE*(quadx-1)+sectx; + y = QUADSIZE*(quady-1)+secty; + ix = x+10.0*dist*bigger*deltax+0.5; + iy = y+10.0*dist*bigger*deltay+0.5; + /* check for edge of galaxy */ + kinks = 0; + do { + kink = 0; + if (ix <= 0) { + ix = -ix + 1; + kink = 1; + } + if (iy <= 0) { + iy = -iy + 1; + kink = 1; + } + if (ix > GALSIZE*QUADSIZE) { + ix = (GALSIZE*QUADSIZE*2)+1 - ix; + kink = 1; + } + if (iy > GALSIZE*QUADSIZE) { + iy = (GALSIZE*QUADSIZE*2)+1 - iy; + kink = 1; + } + if (kink) kinks = 1; + } while (kink); + + if (kinks) { + nkinks += 1; + if (nkinks == 3) { + /* Three strikes -- you're out! */ + finish(FNEG3); + return; + } + skip(1); + prout("YOU HAVE ATTEMPTED TO CROSS THE NEGATIVE ENERGY BARRIER"); + prout("AT THE EDGE OF THE GALAXY. THE THIRD TIME YOU TRY THIS,"); + prout("YOU WILL BE DESTROYED."); + } + /* Compute final position in new quadrant */ + if (trbeam) return; /* Don't bother if we are to be beamed */ + quadx = (ix+(QUADSIZE-1))/QUADSIZE; + quady = (iy+(QUADSIZE-1))/QUADSIZE; + sectx = ix - QUADSIZE*(quadx-1); + secty = iy - QUADSIZE*(quady-1); + skip(1); + prout("Entering %s.", + cramlc(quadrant, quadx, quady)); + game.quad[sectx][secty] = ship; + newqad(0); + if (skill>SKILL_NOVICE) attack(0); + return; + } + iquad = game.quad[ix][iy]; + if (iquad != IHDOT) { + /* object encountered in flight path */ + stopegy = 50.0*dist/Time; + dist=0.1*sqrt((sectx-ix)*(double)(sectx-ix) + + (secty-iy)*(double)(secty-iy)); + switch (iquad) { + case IHT: /* Ram a Tholian */ + case IHK: /* Ram enemy ship */ + case IHC: + case IHS: + case IHR: + case IHQUEST: + sectx = ix; + secty = iy; + ram(0, iquad, sectx, secty); + finalx = sectx; + finaly = secty; + break; + case IHBLANK: + skip(1); + prouts("***RED ALERT! RED ALERT!"); + skip(1); + proutn("***"); + crmshp(); + proutn(" pulled into black hole at "); + prout(cramlc(sector, ix, iy)); + /* + * Getting pulled into a black hole was certain + * death in Almy's original. Stas Sergeev added a + * possibility that you'll get timewarped instead. + */ + n=0; + for (l=0;l0) + n++; + probf=pow(1.4,(energy+shield)/5000.0-1.0)*pow(1.3,1.0/(n+1)-1.0); + if ((game.options & OPTION_BLKHOLE) && Rand()>probf) + timwrp(); + else + finish(FHOLE); + return; + default: + /* something else */ + skip(1); + crmshp(); + if (iquad == IHWEB) + proutn(" encounters Tholian web at "); + else + proutn(" blocked by object at "); + proutn(cramlc(sector, ix,iy)); + prout(";"); + proutn("Emergency stop required "); + prout("%2d units of energy.", (int)stopegy); + energy -= stopegy; + finalx = x-deltax+0.5; + sectx = finalx; + finaly = y-deltay+0.5; + secty = finaly; + if (energy <= 0) { + finish(FNRG); + return; + } + break; + } + goto no_quad_change; /* sorry! */ + } + } + dist = 0.1*sqrt((sectx-ix)*(double)(sectx-ix) + + (secty-iy)*(double)(secty-iy)); + sectx = ix; + secty = iy; + } + finalx = sectx; + finaly = secty; +no_quad_change: + /* No quadrant change -- compute new avg enemy distances */ + game.quad[sectx][secty] = ship; + if (nenhere) { + for_local_enemies(l) { + finald = sqrt((ix-game.kx[l])*(double)(ix-game.kx[l]) + + (iy-game.ky[l])*(double)(iy-game.ky[l])); + game.kavgd[l] = 0.5 * (finald+game.kdist[l]); + game.kdist[l] = finald; + } + sortkl(); + if (!game.state.galaxy[quadx][quady].supernova && iattak == 0) + attack(0); + for_local_enemies(l) game.kavgd[l] = game.kdist[l]; + } + newcnd(); + iattak = 0; + drawmaps(0); + setwnd(message_window); + return; +} + +void dock(int l) +{ + chew(); + if (condit == IHDOCKED && l) { + prout("Already docked."); + return; + } + if (inorbit) { + prout("You must first leave standard orbit."); + return; + } + if (basex==0 || abs(sectx-basex) > 1 || abs(secty-basey) > 1) { + crmshp(); + prout(" not adjacent to base."); + return; + } + condit = IHDOCKED; + if (l) prout("Docked."); + ididit=1; + if (energy < inenrg) energy = inenrg; + shield = inshld; + torps = intorps; + lsupres = inlsr; + if (game.damage[DRADIO] == 0.0 && + (game.future[FCDBAS] < FOREVER || isatb == 1) && iseenit == 0) { + /* get attack report from base */ + prout("Lt. Uhura- \"Captain, an important message from the starbase:\""); + attakreport(0); + iseenit = 1; + } +} + +static void getcd(int isprobe, int akey) { + /* This program originally required input in terms of a (clock) + direction and distance. Somewhere in history, it was changed to + cartesian coordinates. So we need to convert. I think + "manual" input should still be done this way -- it's a real + pain if the computer isn't working! Manual mode is still confusing + because it involves giving x and y motions, yet the coordinates + are always displayed y - x, where +y is downward! */ + + + int irowq=quadx, icolq=quady, irows, icols, itemp=0, iprompt=0, key=0; + double xi, xj, xk, xl; + double deltax, deltay; + int automatic = -1; + + /* Get course direction and distance. If user types bad values, return + with DIREC = -1.0. */ + + direc = -1.0; + + if (landed == 1 && !isprobe) { + prout("Dummy! You can't leave standard orbit until you"); + proutn("are back aboard the "); + crmshp(); + prout("."); + chew(); + return; + } + while (automatic == -1) { + if (game.damage[DCOMPTR]) { + if (isprobe) + prout("Computer damaged; manual navigation only"); + else + prout("Computer damaged; manual movement only"); + chew(); + automatic = 0; + key = IHEOL; + break; + } + if (isprobe && akey != -1) { + /* For probe launch, use pre-scaned value first time */ + key = akey; + akey = -1; + } + else + key = scan(); + + if (key == IHEOL) { + proutn("Manual or automatic- "); + iprompt = 1; + chew(); + } + else if (key == IHALPHA) { + if (isit("manual")) { + automatic =0; + key = scan(); + break; + } + else if (isit("automatic")) { + automatic = 1; + key = scan(); + break; + } + else { + huh(); + chew(); + return; + } + } + else { /* numeric */ + if (isprobe) + prout("(Manual navigation assumed.)"); + else + prout("(Manual movement assumed.)"); + automatic = 0; + break; + } + } + + if (automatic) { + while (key == IHEOL) { + if (isprobe) + proutn("Target quadrant or quadrant§or- "); + else + proutn("Destination sector or quadrant§or- "); + chew(); + iprompt = 1; + key = scan(); + } + + if (key != IHREAL) { + huh(); + return; + } + xi = aaitem; + key = scan(); + if (key != IHREAL){ + huh(); + return; + } + xj = aaitem; + key = scan(); + if (key == IHREAL) { + /* both quadrant and sector specified */ + xk = aaitem; + key = scan(); + if (key != IHREAL) { + huh(); + return; + } + xl = aaitem; + + irowq = xi + 0.5; + icolq = xj + 0.5; + irows = xk + 0.5; + icols = xl + 0.5; + } + else { + if (isprobe) { + /* only quadrant specified -- go to center of dest quad */ + irowq = xi + 0.5; + icolq = xj + 0.5; + irows = icols = 5; + } + else { + irows = xi + 0.5; + icols = xj + 0.5; + } + itemp = 1; + } + if (!VALID_QUADRANT(icolq,irowq)||!VALID_SECTOR(icols,irows)) { + huh(); + return; + } + skip(1); + if (!isprobe) { + if (itemp) { + if (iprompt) { + prout("Helmsman Sulu- \"Course locked in for %s.\"", + cramlc(sector, irows, icols)); + } + } + else prout("Ensign Chekov- \"Course laid in, Captain.\""); + } + deltax = icolq - quady + 0.1*(icols-secty); + deltay = quadx - irowq + 0.1*(sectx-irows); + } + else { /* manual */ + while (key == IHEOL) { + proutn("X and Y displacements- "); + chew(); + iprompt = 1; + key = scan(); + } + itemp = 2; + if (key != IHREAL) { + huh(); + return; + } + deltax = aaitem; + key = scan(); + if (key != IHREAL) { + huh(); + return; + } + deltay = aaitem; + } + /* Check for zero movement */ + if (deltax == 0 && deltay == 0) { + chew(); + return; + } + if (itemp == 2 && !isprobe) { + skip(1); + prout("Helmsman Sulu- \"Aye, Sir.\""); + } + dist = sqrt(deltax*deltax + deltay*deltay); + direc = atan2(deltax, deltay)*1.90985932; + if (direc < 0.0) direc += 12.0; + chew(); + return; + +} + + + +void impuls(void) +{ + double power; + + ididit = 0; + if (game.damage[DIMPULS]) { + chew(); + skip(1); + prout("Engineer Scott- \"The impulse engines are damaged, Sir.\""); + return; + } + + if (energy > 30.0) { + getcd(FALSE, 0); + if (direc == -1.0) return; + power = 20.0 + 100.0*dist; + } + else + power = 30.0; + + if (power >= energy) { + /* Insufficient power for trip */ + skip(1); + prout("First Officer Spock- \"Captain, the impulse engines"); + prout("require 20.0 units to engage, plus 100.0 units per"); + if (energy > 30) { + proutn("quadrant. We can go, therefore, a maximum of %d", + (int)(0.01 * (energy-20.0)-0.05)); + prout(" quadrants.\""); + } + else { + prout("quadrant. They are, therefore, useless.\""); + } + chew(); + return; + } + /* Make sure enough time is left for the trip */ + Time = dist/0.095; + if (Time >= game.state.remtime) { + prout("First Officer Spock- \"Captain, our speed under impulse"); + prout("power is only 0.95 sectors per stardate. Are you sure"); + proutn("we dare spend the time?\" "); + if (ja() == 0) return; + } + /* Activate impulse engines and pay the cost */ + imove(); + ididit = 1; + if (alldone) return; + power = 20.0 + 100.0*dist; + energy -= power; + Time = dist/0.095; + if (energy <= 0) finish(FNRG); + return; +} + + +void warp(int i) +{ + int blooey=0, twarp=0, iwarp; + double power; + + if (i!=2) { /* Not WARPX entry */ + ididit = 0; + if (game.damage[DWARPEN] > 10.0) { + chew(); + skip(1); + prout("Engineer Scott- \"The impulse engines are damaged, Sir.\""); + return; + } + if (game.damage[DWARPEN] > 0.0 && warpfac > 4.0) { + chew(); + skip(1); + prout("Engineer Scott- \"Sorry, Captain. Until this damage"); + prout(" is repaired, I can only give you warp 4.\""); + return; + } + + /* Read in course and distance */ + getcd(FALSE, 0); + if (direc == -1.0) return; + + /* Make sure starship has enough energy for the trip */ + power = (dist+0.05)*warpfac*warpfac*warpfac*(shldup+1); + + + if (power >= energy) { + /* Insufficient power for trip */ + ididit = 0; + skip(1); + prout("Engineering to bridge--"); + if (shldup==0 || 0.5*power > energy) { + iwarp = pow((energy/(dist+0.05)), 0.333333333); + if (iwarp <= 0) { + prout("We can't do it, Captain. We haven't the energy."); + } + else { + proutn("We haven't the energy, but we could do it at warp %d", iwarp); + if (shldup) { + prout(","); + prout("if you'll lower the shields."); + } + else + prout("."); + } + } + else + prout("We haven't the energy to go that far with the shields up."); + return; + } + + /* Make sure enough time is left for the trip */ + Time = 10.0*dist/wfacsq; + if (Time >= 0.8*game.state.remtime) { + skip(1); + prout("First Officer Spock- \"Captain, I compute that such"); + proutn(" a trip would require approximately %2.0f", + 100.0*Time/game.state.remtime); + prout(" percent of our"); + proutn(" remaining time. Are you sure this is wise?\" "); + if (ja() == 0) { ididit = 0; Time=0; return;} + } + } + /* Entry WARPX */ + if (warpfac > 6.0) { + /* Decide if engine damage will occur */ + double prob = dist*(6.0-warpfac)*(6.0-warpfac)/66.666666666; + if (prob > Rand()) { + blooey = 1; + dist = Rand()*dist; + } + /* Decide if time warp will occur */ + if (0.5*dist*pow(7.0,warpfac-10.0) > Rand()) twarp=1; +#ifdef DEBUG + if (idebug &&warpfac==10 && twarp==0) { + blooey=0; + proutn("Force time warp? "); + if (ja()==1) twarp=1; + } +#endif + if (blooey || twarp) { + /* If time warp or engine damage, check path */ + /* If it is obstructed, don't do warp or damage */ + double angle = ((15.0-direc)*0.5235998); + double deltax = -sin(angle); + double deltay = cos(angle); + double bigger, x, y; + int n, l, ix, iy; + if (fabs(deltax) > fabs(deltay)) + bigger = fabs(deltax); + else + bigger = fabs(deltay); + + deltax /= bigger; + deltay /= bigger; + n = 10.0 * dist * bigger +0.5; + x = sectx; + y = secty; + for (l = 1; l <= n; l++) { + x += deltax; + ix = x + 0.5; + y += deltay; + iy = y +0.5; + if (!VALID_SECTOR(ix, iy)) break; + if (game.quad[ix][iy] != IHDOT) { + blooey = 0; + twarp = 0; + } + } + } + } + + + /* Activate Warp Engines and pay the cost */ + imove(); + if (alldone) return; + energy -= dist*warpfac*warpfac*warpfac*(shldup+1); + if (energy <= 0) finish(FNRG); + Time = 10.0*dist/wfacsq; + if (twarp) timwrp(); + if (blooey) { + game.damage[DWARPEN] = damfac*(3.0*Rand()+1.0); + skip(1); + prout("Engineering to bridge--"); + prout(" Scott here. The warp engines are damaged."); + prout(" We'll have to reduce speed to warp 4."); + } + ididit = 1; + return; +} + + + +void setwrp(void) +{ + int key; + double oldfac; + + while ((key=scan()) == IHEOL) { + chew(); + proutn("Warp factor- "); + } + chew(); + if (key != IHREAL) { + huh(); + return; + } + if (game.damage[DWARPEN] > 10.0) { + prout("Warp engines inoperative."); + return; + } + if (game.damage[DWARPEN] > 0.0 && aaitem > 4.0) { + prout("Engineer Scott- \"I'm doing my best, Captain,"); + prout(" but right now we can only go warp 4.\""); + return; + } + if (aaitem > 10.0) { + prout("Helmsman Sulu- \"Our top speed is warp 10, Captain.\""); + return; + } + if (aaitem < 1.0) { + prout("Helmsman Sulu- \"We can't go below warp 1, Captain.\""); + return; + } + oldfac = warpfac; + warpfac = aaitem; + wfacsq=warpfac*warpfac; + if (warpfac <= oldfac || warpfac <= 6.0) { + proutn("Helmsman Sulu- \"Warp factor %d, Captain.\"", + (int)warpfac); + return; + } + if (warpfac < 8.00) { + prout("Engineer Scott- \"Aye, but our maximum safe speed is warp 6.\""); + return; + } + if (warpfac == 10.0) { + prout("Engineer Scott- \"Aye, Captain, we'll try it.\""); + return; + } + prout("Engineer Scott- \"Aye, Captain, but our engines may not take it.\""); + return; +} + +void atover(int igrab) +{ + double power, distreq; + + chew(); + /* is captain on planet? */ + if (landed==1) { + if (game.damage[DTRANSP]) { + finish(FPNOVA); + return; + } + prout("Scotty rushes to the transporter controls."); + if (shldup) { + prout("But with the shields up it's hopeless."); + finish(FPNOVA); + } + prouts("His desperate attempt to rescue you . . ."); + if (Rand() <= 0.5) { + prout("fails."); + finish(FPNOVA); + return; + } + prout("SUCCEEDS!"); + if (imine) { + imine = 0; + proutn("The crystals mined were "); + if (Rand() <= 0.25) { + prout("lost."); + } + else { + prout("saved."); + icrystl = 1; + } + } + } + if (igrab) return; + + /* Check to see if captain in shuttle craft */ + if (icraft) finish(FSTRACTOR); + if (alldone) return; + + /* Inform captain of attempt to reach safety */ + skip(1); + do { + if (justin) { + prouts("***RED ALERT! READ ALERT!"); + skip(1); + proutn("The "); + crmshp(); + prout(" has stopped in a quadrant containing"); + prouts(" a supernova."); + skip(2); + } + proutn("***Emergency automatic override attempts to hurl "); + crmshp(); + skip(1); + prout("safely out of quadrant."); + if (game.damage[DRADIO] == 0.0) + game.state.galaxy[quadx][quady].charted = TRUE; + /* Try to use warp engines */ + if (game.damage[DWARPEN]) { + skip(1); + prout("Warp engines damaged."); + finish(FSNOVAED); + return; + } + warpfac = 6.0+2.0*Rand(); + wfacsq = warpfac * warpfac; + prout("Warp factor set to %d", (int)warpfac); + power = 0.75*energy; + dist = power/(warpfac*warpfac*warpfac*(shldup+1)); + distreq = 1.4142+Rand(); + if (distreq < dist) dist = distreq; + Time = 10.0*dist/wfacsq; + direc = 12.0*Rand(); /* How dumb! */ + justin = 0; + inorbit = 0; + warp(2); + if (justin == 0) { + /* This is bad news, we didn't leave quadrant. */ + if (alldone) return; + skip(1); + prout("Insufficient energy to leave quadrant."); + finish(FSNOVAED); + return; + } + } while + /* Repeat if another snova */ + (game.state.galaxy[quadx][quady].supernova); + if (KLINGREM==0) + finish(FWON); /* Snova killed remaining enemy. */ +} + +void timwrp() +{ + int l, gotit; + prout("***TIME WARP ENTERED."); + if (game.state.snap && Rand() < 0.5) { + /* Go back in time */ + prout("You are traveling backwards in time %d stardates.", + (int)(game.state.date-game.snapsht.date)); + game.state = game.snapsht; + game.state.snap = 0; + if (game.state.remcom) { + game.future[FTBEAM] = game.state.date + expran(intime/game.state.remcom); + game.future[FBATTAK] = game.state.date + expran(0.3*intime); + } + game.future[FSNOVA] = game.state.date + expran(0.5*intime); + game.future[FSNAP] = game.state.date +expran(0.25*game.state.remtime); /* next snapshot will + be sooner */ + if (game.state.nscrem) game.future[FSCMOVE] = 0.2777; + isatb = 0; + game.future[FCDBAS] = game.future[FSCDBAS] = FOREVER; + batx = baty = 0; + + /* Make sure Galileo is consistant -- Snapshot may have been taken + when on planet, which would give us two Galileos! */ + gotit = 0; + for (l = 0; l < inplan; l++) { + if (game.state.plnets[l].known == shuttle_down) { + gotit = 1; + if (iscraft==1 && ship==IHE) { + prout("Checkov- \"Security reports the Galileo has disappeared, Sir!"); + iscraft = 0; + } + } + } + /* Likewise, if in the original time the Galileo was abandoned, but + was on ship earlier, it would have vanished -- lets restore it */ + if (iscraft==0 && gotit==0 && game.damage[DSHUTTL] >= 0.0) { + prout("Checkov- \"Security reports the Galileo has reappeared in the dock!\""); + iscraft = 1; + } + /* + * There used to be code to do the actual reconstrction here, + * but the starchart is now part of the snapshotted galaxy state. + */ + prout("Spock has reconstructed a correct star chart from memory"); + } + else { + /* Go forward in time */ + Time = -0.5*intime*log(Rand()); + prout("You are traveling forward in time %d stardates.", (int)Time); + /* cheat to make sure no tractor beams occur during time warp */ + game.future[FTBEAM] += Time; + game.damage[DRADIO] += Time; + } + newqad(0); + events(); /* Stas Sergeev added this -- do pending events */ +} + +void probe(void) +{ + double angle, bigger; + int key; + /* New code to launch a deep space probe */ + if (nprobes == 0) { + chew(); + skip(1); + if (ship == IHE) + prout("Engineer Scott- \"We have no more deep space probes, Sir.\""); + else + prout("Ye Faerie Queene has no deep space probes."); + return; + } + if (game.damage[DDSP] != 0.0) { + chew(); + skip(1); + prout("Engineer Scott- \"The probe launcher is damaged, Sir.\""); + return; + } + if (game.future[FDSPROB] != FOREVER) { + chew(); + skip(1); + if (game.damage[DRADIO] != 0 && condit != IHDOCKED) { + prout("Spock- \"Records show the previous probe has not yet"); + prout(" reached its destination.\""); + } + else + prout("Uhura- \"The previous probe is still reporting data, Sir.\""); + return; + } + key = scan(); + + if (key == IHEOL) { + /* slow mode, so let Kirk know how many probes there are left */ + prout(nprobes==1 ? "%d probe left." : "%d probes left.", nprobes); + proutn("Are you sure you want to fire a probe? "); + if (ja()==0) return; + } + + isarmed = FALSE; + if (key == IHALPHA && strcmp(citem,"armed") == 0) { + isarmed = TRUE; + key = scan(); + } + else if (key == IHEOL) { + proutn("Arm NOVAMAX warhead? "); + isarmed = ja(); + } + getcd(TRUE, key); + if (direc == -1.0) return; + nprobes--; + angle = ((15.0 - direc) * 0.5235988); + probeinx = -sin(angle); + probeiny = cos(angle); + if (fabs(probeinx) > fabs(probeiny)) + bigger = fabs(probeinx); + else + bigger = fabs(probeiny); + + probeiny /= bigger; + probeinx /= bigger; + proben = 10.0*dist*bigger +0.5; + probex = quadx*QUADSIZE + sectx - 1; // We will use better packing than original + probey = quady*QUADSIZE + secty - 1; + probecx = quadx; + probecy = quady; + game.future[FDSPROB] = game.state.date + 0.01; // Time to move one sector + prout("Ensign Chekov- \"The deep space probe is launched, Captain.\""); + ididit = 1; + return; +} + +void help(void) +{ + /* There's more than one way to move in this game! */ + double ddist, xdist, probf; + int line = 0, l, ix, iy; + + chew(); + /* Test for conditions which prevent calling for help */ + if (condit == IHDOCKED) { + prout("Lt. Uhura- \"But Captain, we're already docked.\""); + return; + } + if (game.damage[DRADIO] != 0) { + prout("Subspace radio damaged."); + return; + } + if (game.state.rembase==0) { + prout("Lt. Uhura- \"Captain, I'm not getting any response from Starbase.\""); + return; + } + if (landed == 1) { + proutn("You must be aboard the "); + crmshp(); + prout("."); + return; + } + /* OK -- call for help from nearest starbase */ + nhelp++; + if (basex!=0) { + /* There's one in this quadrant */ + ddist = sqrt(square(basex-sectx)+square(basey-secty)); + } + else { + ddist = FOREVER; + for_starbases(l) { + xdist=10.0*sqrt(square(game.state.baseqx[l]-quadx)+square(game.state.baseqy[l]-quady)); + if (xdist < ddist) { + ddist = xdist; + line = l; + } + } + /* Since starbase not in quadrant, set up new quadrant */ + quadx = game.state.baseqx[line]; + quady = game.state.baseqy[line]; + newqad(1); + } + /* dematerialize starship */ + game.quad[sectx][secty]=IHDOT; + proutn("Starbase in %s responds--", cramlc(quadrant, quadx, quady)); + proutn(""); + crmshp(); + prout(" dematerializes."); + sectx=0; + for (l = 1; l <= 5; l++) { + ix = basex+3.0*Rand()-1; + iy = basey+3.0*Rand()-1; + if (VALID_SECTOR(ix,iy) && game.quad[ix][iy]==IHDOT) { + /* found one -- finish up */ + sectx=ix; + secty=iy; + break; + } + } + if (sectx==0){ + prout("You have been lost in space..."); + finish(FMATERIALIZE); + return; + } + /* Give starbase three chances to rematerialize starship */ + probf = pow((1.0 - pow(0.98,ddist)), 0.33333333); + for (l = 1; l <= 3; l++) { + switch (l) { + case 1: proutn("1st"); break; + case 2: proutn("2nd"); break; + case 3: proutn("3rd"); break; + } + proutn(" attempt to re-materialize "); + crmshp(); + switch (l){ + case 1: game.quad[ix][iy]=IHMATER0; + break; + case 2: game.quad[ix][iy]=IHMATER1; + break; + case 3: game.quad[ix][iy]=IHMATER2; + break; + } + textcolor(RED); + warble(); + if (Rand() > probf) break; + prout("fails."); + delay(500); + textcolor(DEFAULT); + } + if (l > 3) { + game.quad[ix][iy]=IHQUEST; + alive = 0; + drawmaps(1); + setwnd(message_window); + finish(FMATERIALIZE); + return; + } + game.quad[ix][iy]=ship; + textcolor(GREEN); + prout("succeeds."); + textcolor(DEFAULT); + dock(0); + skip(1); + prout("Lt. Uhura- \"Captain, we made it!\""); +} diff --git a/src/planets.c b/src/planets.c new file mode 100644 index 0000000..217ce14 --- /dev/null +++ b/src/planets.c @@ -0,0 +1,506 @@ +#include "sst.h" + +static char *classes[] = {"M","N","O"}; + +static int consumeTime(void) +{ +/* I think most of this avoidance was caused by overlay scheme. + Let's see what happens if all events can occur here */ + +// double asave; + ididit = 1; +#if 0 + /* Don't worry about this */ + if (future[FTBEAM] <= game.state.date+Time && game.state.remcom != 0 && condit != IHDOCKED) { + /* We are about to be tractor beamed -- operation fails */ + return 1; + } +#endif +// asave = future[FSNOVA]; +// future[FSNOVA] = FOREVER; /* defer supernovas */ + events(); /* Used to avoid if future[FSCMOVE] within time */ +// future[FSNOVA] = asave; + /*fails if game over, quadrant super-novas or we've moved to new quadrant*/ + if (alldone || game.state.galaxy[quadx][quady].supernova || justin != 0) return 1; + return 0; +} + +void preport(void) +{ + int iknow = 0, i; + skip(1); + chew(); + prout("Spock- \"Planet report follows, Captain.\""); + skip(1); + for (i = 0; i < inplan; i++) { + if (game.state.plnets[i].known != unknown +#ifdef DEBUG + || ( idebug && game.state.plnets[i].x !=0) +#endif + ) { + iknow = 1; +#ifdef DEBUG + if (idebug && game.state.plnets[i].known==unknown) proutn("(Unknown) "); +#endif + proutn(cramlc(quadrant, game.state.plnets[i].x, game.state.plnets[i].y)); + proutn(" class "); + proutn(classes[game.state.plnets[i].pclass]); + proutn(" "); + if (game.state.plnets[i].crystals == 0) proutn("no "); + prout("dilithium crystals present."); + if (game.state.plnets[i].known==shuttle_down) + prout(" Shuttle Craft Galileo on surface."); + } + } + if (iknow==0) prout("No information available."); +} + +void orbit(void) +{ + skip(1); + chew(); + if (inorbit!=0) { + prout("Already in standard orbit."); + return; + } + if (game.damage[DWARPEN] != 0 && game.damage[DIMPULS] != 0) { + prout("Both warp and impulse engines damaged."); + return; + } + if (plnetx == 0 || abs(sectx-plnetx) > 1 || abs(secty-plnety) > 1) { + crmshp(); + prout(" not adjacent to planet."); + skip(1); + return; + } + Time = 0.02+0.03*Rand(); + prout("Helmsman Sulu- \"Entering standard orbit, Sir.\""); + newcnd(); + if (consumeTime()) return; + game.height = (1400.0+7200.0*Rand()); + prout("Sulu- \"Entered orbit at altitude %.2f kilometers.\"", game.height); + inorbit = 1; + ididit=1; +} + +void sensor(void) +{ + skip(1); + chew(); + if (game.damage[DSRSENS] != 0.0) { + prout("Short range sensors damaged."); + return; + } + if (!plnetx && (game.options & OPTION_TTY)) { + prout("Spock- \"No planet in this quadrant, Captain.\""); + return; + } + if ((plnetx != 0)&& (game.state.plnets[iplnet].known == unknown)) { + prout("Spock- \"Sensor scan for %s-", cramlc(quadrant, quadx, quady)); + skip(1); + prout(" Planet at %s is of class %s.", + cramlc(sector, plnetx, plnety), + classes[game.state.plnets[iplnet].pclass]); + if (game.state.plnets[iplnet].known==shuttle_down) + prout(" Sensors show Galileo still on surface."); + proutn(" Readings indicate"); + if (game.state.plnets[iplnet].crystals == 0) proutn(" no"); + prout(" dilithium crystals present.\""); + if (game.state.plnets[iplnet].known == unknown) game.state.plnets[iplnet].known = known; + } +} + +void beam(void) +{ + chew(); + skip(1); + if (game.damage[DTRANSP] != 0) { + prout("Transporter damaged."); + if (game.damage[DSHUTTL]==0 && (game.state.plnets[iplnet].known==shuttle_down || iscraft == 1)) { + skip(1); + proutn("Spock- \"May I suggest the shuttle craft, Sir?\" "); + if (ja() != 0) shuttle(); + } + return; + } + if (inorbit==0) { + crmshp(); + prout(" not in standard orbit."); + return; + } + if (shldup!=0) { + prout("Impossible to transport through shields."); + return; + } + if (game.state.plnets[iplnet].known==unknown) { + prout("Spock- \"Captain, we have no information on this planet"); + prout(" and Starfleet Regulations clearly state that in this situation"); + prout(" you may not go down.\""); + return; + } + if (landed==1) { + /* Coming from planet */ + if (game.state.plnets[iplnet].known==shuttle_down) { + proutn("Spock- \"Wouldn't you rather take the Galileo?\" "); + if (ja() != 0) { + chew(); + return; + } + prout("Your crew hides the Galileo to prevent capture by aliens."); + } + prout("Landing party assembled, ready to beam up."); + skip(1); + prout("Kirk whips out communicator..."); + prouts("BEEP BEEP BEEP"); + skip(2); + prout("\"Kirk to enterprise- Lock on coordinates...energize.\""); + } + else { + /* Going to planet */ + if (game.state.plnets[iplnet].crystals==0) { + prout("Spock- \"Captain, I fail to see the logic in"); + prout(" exploring a planet with no dilithium crystals."); + proutn(" Are you sure this is wise?\" "); + if (ja()==0) { + chew(); + return; + } + } + prout("Scotty- \"Transporter room ready, Sir.\""); + skip(1); + prout("Kirk, and landing party prepare to beam down to planet surface."); + skip(1); + prout("Kirk- \"Energize.\""); + } + ididit=1; + skip(1); + prouts("WWHOOOIIIIIRRRRREEEE.E.E. . . . . . ."); + skip(2); + if (Rand() > 0.98) { + prouts("BOOOIIIOOOIIOOOOIIIOIING . . ."); + skip(2); + prout("Scotty- \"Oh my God! I've lost them.\""); + finish(FLOST); + return; + } + prouts(". . . . . . .E.E.EEEERRRRRIIIIIOOOHWW"); + skip(2); + prout("Transport complete."); + landed = -landed; + if (landed==1 && game.state.plnets[iplnet].known==shuttle_down) { + prout("The shuttle craft Galileo is here!"); + } + if (landed!=1 && imine==1) { + icrystl = 1; + cryprob = 0.05; + } + imine = 0; + return; +} + +void mine(void) +{ + skip(1); + chew(); + if (landed!= 1) { + prout("Mining party not on planet."); + return; + } + if (game.state.plnets[iplnet].crystals == 0) { + prout("No dilithium crystals on this planet."); + return; + } + if (imine == 1) { + prout("You've already mined enough crystals for this trip."); + return; + } + if (icrystl == 1 && cryprob == 0.05) { + proutn("With all those fresh crystals aboard the "); + crmshp(); + skip(1); + prout("there's no reason to mine more at this time."); + return; + } + Time = (0.1+0.2*Rand())*game.state.plnets[iplnet].pclass; + if (consumeTime()) return; + prout("Mining operation complete."); + imine = 1; + ididit=1; +} + +void usecrystals(void) +{ + ididit=0; + skip(1); + chew(); + if (icrystl!=1) { + prout("No dilithium crystals available."); + return; + } + if (energy >= 1000) { + prout("Spock- \"Captain, Starfleet Regulations prohibit such an operation"); + prout(" except when condition Yellow exists."); + return; + } + prout("Spock- \"Captain, I must warn you that loading"); + prout(" raw dilithium crystals into the ship's power"); + prout(" system may risk a severe explosion."); + proutn(" Are you sure this is wise?\" "); + if (ja()==0) { + chew(); + return; + } + skip(1); + prout("Engineering Officer Scott- \"(GULP) Aye Sir."); + prout(" Mr. Spock and I will try it.\""); + skip(1); + prout("Spock- \"Crystals in place, Sir."); + prout(" Ready to activate circuit.\""); + skip(1); + prouts("Scotty- \"Keep your fingers crossed, Sir!\""); + skip(1); + if (Rand() <= cryprob) { + prouts(" \"Activating now! - - No good! It's***"); + skip(2); + prouts("***RED ALERT! RED A*L********************************"); + skip(1); + stars(); + prouts("****************** KA-BOOM!!!! *******************"); + skip(1); + kaboom(); + return; + } + energy += 5000.0*(1.0 + 0.9*Rand()); + prouts(" \"Activating now! - - "); + prout("The instruments"); + prout(" are going crazy, but I think it's"); + prout(" going to work!! Congratulations, Sir!\""); + cryprob *= 2.0; + ididit=1; +} + +void shuttle(void) +{ + chew(); + skip(1); + if(game.damage[DSHUTTL] != 0.0) { + if (game.damage[DSHUTTL] == -1.0) { + if (inorbit && game.state.plnets[iplnet].known == shuttle_down) + prout("Ye Faerie Queene has no shuttle craft bay to dock it at."); + else + prout("Ye Faerie Queene had no shuttle craft."); + } + else if (game.damage[DSHUTTL] > 0) + prout("The Galileo is damaged."); + else prout("Shuttle craft is now serving Big Macs."); + return; + } + if (inorbit==0) { + crmshp(); + prout(" not in standard orbit."); + return; + } + if ((game.state.plnets[iplnet].known != shuttle_down) && iscraft != 1) { + prout("Shuttle craft not currently available."); + return; + } + if (landed==-1 && game.state.plnets[iplnet].known==shuttle_down) { + prout("You will have to beam down to retrieve the shuttle craft."); + return; + } + if (shldup!=0 || condit == IHDOCKED) { + prout("Shuttle craft cannot pass through shields."); + return; + } + if (game.state.plnets[iplnet].known==unknown) { + prout("Spock- \"Captain, we have no information on this planet"); + prout(" and Starfleet Regulations clearly state that in this situation"); + prout(" you may not fly down.\""); + return; + } + Time = 3.0e-5*game.height; + if (Time >= 0.8*game.state.remtime) { + prout("First Officer Spock- \"Captain, I compute that such"); + proutn(" a maneuver would require approximately 2d%% of our", + (int)(100*Time/game.state.remtime)); + prout("remaining time."); + proutn("Are you sure this is wise?\" "); + if (ja()==0) { + Time = 0.0; + return; + } + } + if (landed == 1) { + /* Kirk on planet */ + if (iscraft==1) { + /* Galileo on ship! */ + if (game.damage[DTRANSP]==0) { + proutn("Spock- \"Would you rather use the transporter?\" "); + if (ja() != 0) { + beam(); + return; + } + proutn("Shuttle crew"); + } + else + proutn("Rescue party"); + prout(" boards Galileo and swoops toward planet surface."); + iscraft = 0; + skip(1); + if (consumeTime()) return; + game.state.plnets[iplnet].known=shuttle_down; + prout("Trip complete."); + return; + } + else { + /* Ready to go back to ship */ + prout("You and your mining party board the"); + prout("shuttle craft for the trip back to the Enterprise."); + skip(1); + prout("The short hop begins . . ."); + game.state.plnets[iplnet].known=known; + icraft = 1; + skip(1); + landed = -1; + if (consumeTime()) return; + iscraft = 1; + icraft = 0; + if (imine!=0) { + icrystl = 1; + cryprob = 0.05; + } + imine = 0; + prout("Trip complete."); + return; + } + } + else { + /* Kirk on ship */ + /* and so is Galileo */ + prout("Mining party assembles in the hangar deck,"); + prout("ready to board the shuttle craft \"Galileo\"."); + skip(1); + prouts("The hangar doors open; the trip begins."); + skip(1); + icraft = 1; + iscraft = 0; + if (consumeTime()) return; + game.state.plnets[iplnet].known = shuttle_down; + landed = 1; + icraft = 0; + prout("Trip complete"); + return; + } +} + +void deathray(void) +{ + double dprob, r = Rand(); + + ididit = 0; + skip(1); + chew(); + if (ship != IHE) { + prout("Ye Faerie Queene has no death ray."); + return; + } + if (nenhere==0) { + prout("Sulu- \"But Sir, there are no enemies in this quadrant.\""); + return; + } + if (game.damage[DDRAY] > 0.0) { + prout("Death Ray is damaged."); + return; + } + prout("Spock- \"Captain, the 'Experimental Death Ray'"); + prout(" is highly unpredictible. Considering the alternatives,"); + proutn(" are you sure this is wise?\" "); + if (ja()==0) return; + prout("Spock- \"Acknowledged.\""); + skip(1); + ididit=1; + prouts("WHOOEE ... WHOOEE ... WHOOEE ... WHOOEE"); + skip(1); + prout("Crew scrambles in emergency preparation."); + prout("Spock and Scotty ready the death ray and"); + prout("prepare to channel all ship's power to the device."); + skip(1); + prout("Spock- \"Preparations complete, sir.\""); + prout("Kirk- \"Engage!\""); + skip(1); + prouts("WHIRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR"); + skip(1); + dprob = .30; + if (game.options & OPTION_PLAIN) + dprob = .5; + if (r > dprob) { + prouts("Sulu- \"Captain! It's working!\""); + skip(2); + while (nenhere > 0) + deadkl(game.kx[1],game.ky[1],game.quad[game.kx[1]][game.ky[1]],game.kx[1],game.ky[1]); + prout("Ensign Chekov- \"Congratulations, Captain!\""); + if (KLINGREM == 0) finish(FWON); + if ((game.options & OPTION_PLAIN) == 0) { + prout("Spock- \"Captain, I believe the `Experimental Death Ray'"); + if (Rand() <= 0.05) { + prout(" is still operational.\""); + } + else { + prout(" has been rendered nonfunctional.\""); + game.damage[DDRAY] = 39.95; + } + } + return; + } + r = Rand(); // Pick failure method + if (r <= .30) { + prouts("Sulu- \"Captain! It's working!\""); + skip(1); + prouts("***RED ALERT! RED ALERT!"); + skip(1); + prout("***MATTER-ANTIMATTER IMPLOSION IMMINENT!"); + skip(1); + prouts("***RED ALERT! RED A*L********************************"); + skip(1); + stars(); + prouts("****************** KA-BOOM!!!! *******************"); + skip(1); + kaboom(); + return; + } + if (r <= .55) { + prouts("Sulu- \"Captain! Yagabandaghangrapl, brachriigringlanbla!\""); + skip(1); + prout("Lt. Uhura- \"Graaeek! Graaeek!\""); + skip(1); + prout("Spock- \"Fascinating! . . . All humans aboard"); + prout(" have apparently been transformed into strange mutations."); + prout(" Vulcans do not seem to be affected."); + skip(1); + prout("Kirk- \"Raauch! Raauch!\""); + finish(FDRAY); + return; + } + if (r <= 0.75) { + int i,j; + prouts("Sulu- \"Captain! It's --WHAT?!?!\""); + skip(2); + proutn("Spock- \"I believe the word is"); + prouts(" *ASTONISHING*"); + prout(" Mr. Sulu."); + for_sectors(i) + for_sectors(j) + if (game.quad[i][j] == IHDOT) game.quad[i][j] = IHQUEST; + prout(" Captain, our quadrant is now infested with"); + prouts(" - - - - - - *THINGS*."); + skip(1); + prout(" I have no logical explanation.\""); + return; + } + prouts("Sulu- \"Captain! The Death Ray is creating tribbles!\""); + skip(1); + prout("Scotty- \"There are so many tribbles down here"); + prout(" in Engineering, we can't move for 'em, Captain.\""); + finish(FTRIBBLE); + return; +} diff --git a/src/reports.c b/src/reports.c new file mode 100644 index 0000000..f0dc134 --- /dev/null +++ b/src/reports.c @@ -0,0 +1,537 @@ +#include "sst.h" +#include +#include +#include + +void attakreport(int curt) +{ + if (!curt) { + if (game.future[FCDBAS] < FOREVER) { + prout("Starbase in %s is currently under Commander attack.", + cramlc(quadrant, batx, baty)); + prout("It can hold out until Stardate %d.", + (int)game.future[FCDBAS]); + } + if (isatb == 1) { + prout("Starbase in %s is under Super-commander attack.", + cramlc(quadrant, game.state.isx, game.state.isy)); + prout("It can hold out until Stardate %d.", + (int)game.future[FSCDBAS]); + } + } else { + if (game.future[FCDBAS] < FOREVER) + proutn("Base in %i - %i attacked by C. Alive until %.1f", batx, baty, game.future[FCDBAS]); + if (isatb == 1) + proutn("Base in %i - %i attacked by S. Alive until %.1f", game.state.isx, game.state.isy, game.future[FSCDBAS]); + } + clreol(); +} + + +void report(void) +{ + char *s1,*s2,*s3; + + chew(); + s1 = (thawed?"thawed ":""); + switch (length) { + case 1: s2="short"; break; + case 2: s2="medium"; break; + case 4: s2="long"; break; + default: s2="unknown length"; break; + } + switch (skill) { + case SKILL_NOVICE: s3="novice"; break; + case SKILL_FAIR: s3="fair"; break; + case SKILL_GOOD: s3="good"; break; + case SKILL_EXPERT: s3="expert"; break; + case SKILL_EMERITUS: s3="emeritus"; break; + default: s3="skilled"; break; + } + prout(""); + prout("You %s playing a %s%s %s game.", + alldone? "were": "are now", s1, s2, s3); + if (skill>SKILL_GOOD && thawed && !alldone) prout("No plaque is allowed."); + if (tourn) prout("This is tournament game %d.", tourn); + prout("Your secret password is \"%s\"",game.passwd); + proutn("%d of %d Klingons have been killed", KLINGKILLED, INKLINGTOT); + if (NKILLC) prout(", including %d Commander%s.", NKILLC, NKILLC==1?"":"s"); + else if (NKILLK + NKILLSC > 0) prout(", but no Commanders."); + else prout("."); + if (skill > SKILL_FAIR) prout("The Super Commander has %sbeen destroyed.", + game.state.nscrem?"not ":""); + if (game.state.rembase != inbase) { + proutn("There "); + if (inbase-game.state.rembase==1) proutn("has been 1 base"); + else { + proutn("have been %d bases", inbase-game.state.rembase); + } + prout(" destroyed, %d remaining.", game.state.rembase); + } + else prout("There are %d bases.", inbase); + if (game.damage[DRADIO] == 0.0 || condit == IHDOCKED || iseenit) { + /* Don't report this if not seen and + either the radio is dead or not at base! */ + attakreport(0); + iseenit = 1; + } + if (casual) prout("%d casualt%s suffered so far.", + casual, casual==1? "y" : "ies"); + if (nhelp) prout("There were %d call%s for help.", + nhelp, nhelp==1 ? "" : "s"); + if (ship == IHE) { + proutn("You have "); + if (nprobes) proutn("%d", nprobes); + else proutn("no"); + proutn(" deep space probe"); + if (nprobes!=1) proutn("s"); + prout("."); + } + if ((game.damage[DRADIO] == 0.0 || condit == IHDOCKED)&& + game.future[FDSPROB] != FOREVER) { + if (isarmed) + proutn("An armed deep space probe is in"); + else + proutn("A deep space probe is in"); + proutn(cramlc(quadrant, probecx, probecy)); + prout("."); + } + if (icrystl) { + if (cryprob <= .05) + prout("Dilithium crystals aboard ship... not yet used."); + else { + int i=0; + double ai = 0.05; + while (cryprob > ai) { + ai *= 2.0; + i++; + } + prout("Dilithium crystals have been used %d time%s.", + i, i==1? "" : "s"); + } + } + skip(1); +} + +void lrscan(void) +{ + int x, y; + chew(); + if (game.damage[DLRSENS] != 0.0) { + /* Now allow base's sensors if docked */ + if (condit != IHDOCKED) { + prout("LONG-RANGE SENSORS DAMAGED."); + return; + } + prout("Starbase's long-range scan"); + } + else { + prout("Long-range scan"); + } + for (x = quadx-1; x <= quadx+1; x++) { + proutn(" "); + for (y = quady-1; y <= quady+1; y++) { + if (!VALID_QUADRANT(x, y)) + proutn(" -1"); + else { + if (!game.damage[DRADIO]) + game.state.galaxy[x][y].charted = TRUE; + game.state.chart[x][y].klingons = game.state.galaxy[x][y].klingons; + game.state.chart[x][y].starbase = game.state.galaxy[x][y].starbase; + game.state.chart[x][y].stars = game.state.galaxy[x][y].stars; + if (game.state.galaxy[x][y].supernova) + proutn(" ***"); + else + proutn(" %3d", game.state.chart[x][y].klingons*100 + game.state.chart[x][y].starbase * 10 + game.state.chart[x][y].stars); + } + } + prout(" "); + } +} + +void dreprt(void) +{ + int jdam = FALSE, i; + chew(); + + for (i = 0; i < NDEVICES; i++) { + if (game.damage[i] > 0.0) { + if (!jdam) { + prout("DEVICE -REPAIR TIMES-"); + prout(" IN FLIGHT DOCKED"); + jdam = TRUE; + } + prout(" %16s %8.2f %8.2f", + device[i], + game.damage[i]+0.05, + docfac*game.damage[i]+0.005); + } + } + if (!jdam) prout("All devices functional."); +} + +void rechart(void) +/* update the chart in the Enterprise's computer from galaxy data */ +{ + int i, j; + lastchart = game.state.date; + for_quadrants(i) + for_quadrants(j) + if (game.state.galaxy[i][j].charted) { + game.state.chart[i][j].klingons = game.state.galaxy[i][j].klingons; + game.state.chart[i][j].starbase = game.state.galaxy[i][j].starbase; + game.state.chart[i][j].stars = game.state.galaxy[i][j].stars; + } +} + +void chart(int nn) +{ + int i,j; + chew(); + + if (game.damage[DRADIO] == 0.0) + rechart(); + + if (lastchart < game.state.date && condit == IHDOCKED) { + prout("Spock- \"I revised the Star Chart from the starbase's records.\""); + rechart(); + } + + if (nn == 0) prout(" STAR CHART FOR THE KNOWN GALAXY"); + if (game.state.date > lastchart) + prout("(Last surveillance update %d stardates ago).", + (int)(game.state.date-lastchart)); + prout(" 1 2 3 4 5 6 7 8"); + for_quadrants(i) { + proutn("%d |", i); + for_quadrants(j) { + char buf[4]; + if ((game.options & OPTION_SHOWME) && i == quadx && j == quady) + proutn("<"); + else + proutn(" "); + if (game.state.galaxy[i][j].supernova) + strcpy(buf, "***"); + else if (!game.state.galaxy[i][j].charted && game.state.galaxy[i][j].starbase) + strcpy(buf, ".1."); + else if (game.state.galaxy[i][j].charted) + sprintf(buf, "%3d", game.state.chart[i][j].klingons*100 + game.state.chart[i][j].starbase * 10 + game.state.chart[i][j].stars); + else + strcpy(buf, "..."); + proutn(buf); + if ((game.options & OPTION_SHOWME) && i == quadx && j == quady) + proutn(">"); + else + proutn(" "); + } + proutn(" |"); + if (i0) + dam++; + proutn("Condition %s, %i DAMAGES", cp, dam); + break; + case 3: + proutn("Position %d - %d , %d - %d", + quadx, quady, sectx, secty); + break; + case 4: + proutn("Life Support "); + if (game.damage[DLIFSUP] != 0.0) { + if (condit == IHDOCKED) + proutn("DAMAGED, Base provides"); + else + proutn("DAMAGED, reserves=%4.2f", lsupres); + } + else + proutn("ACTIVE"); + break; + case 5: + proutn("Warp Factor %.1f", warpfac); + break; + case 6: + proutn("Energy %.2f", energy); + if (icrystl && (game.options & OPTION_SHOWME)) /* ESR */ + proutn(" (have crystals)"); + break; + case 7: + proutn("Torpedoes %d", torps); + break; + case 8: + proutn("Shields "); + if (game.damage[DSHIELD] != 0) + proutn("DAMAGED,"); + else if (shldup) + proutn("UP,"); + else + proutn("DOWN,"); + proutn(" %d%% %.1f units", + (int)((100.0*shield)/inshld + 0.5), shield); + break; + case 9: + proutn("Klingons Left %d", KLINGREM); + break; + case 10: + attakreport(1); + break; + } +} + +int srscan(int l) +{ + static char requests[][3] = + {"","da","co","po","ls","wa","en","to","sh","kl","ti"}; + int leftside=TRUE, rightside=TRUE, i, j, jj, req=0, nn=FALSE; + int goodScan=TRUE; + switch (l) { + case SCAN_FULL: // SRSCAN + if (game.damage[DSRSENS] != 0) { + /* Allow base's sensors if docked */ + if (condit != IHDOCKED) { + prout(" S.R. SENSORS DAMAGED!"); + goodScan=FALSE; + } + else + prout(" [Using Base's sensors]"); + } + else prout(" Short-range scan"); + if (goodScan && !game.damage[DRADIO]) { + game.state.chart[quadx][quady].klingons = game.state.galaxy[quadx][quady].klingons; + game.state.chart[quadx][quady].starbase = game.state.galaxy[quadx][quady].starbase; + game.state.chart[quadx][quady].stars = game.state.galaxy[quadx][quady].stars; + game.state.galaxy[quadx][quady].charted = TRUE; + } + scan(); + if (isit("chart")) nn = TRUE; + if (isit("no")) rightside = FALSE; + chew(); + prout(" 1 2 3 4 5 6 7 8 9 10"); + break; + case SCAN_REQUEST: + while (scan() == IHEOL) + proutn("Information desired? "); + chew(); + for (req = 1; req <= sizeof(requests)/sizeof(requests[0]); req++) + if (strncmp(citem,requests[req],min(2,strlen(citem)))==0) + break; + if (req > sizeof(requests)/sizeof(requests[0])) { + prout("UNRECOGNIZED REQUEST. Legal requests are:"); + prout(" date, condition, position, lsupport, warpfactor,"); + prout(" energy, torpedoes, shields, klingons, time, bases."); + return FALSE; + } + // no break + case SCAN_STATUS: // STATUS + chew(); + leftside = FALSE; + skip(1); + // no break + case SCAN_NO_LEFTSIDE: // REQUEST + leftside=FALSE; + break; + } + if (condit != IHDOCKED) newcnd(); + for (i = 1; i <= max(QUADSIZE, sizeof(requests)/sizeof(requests[0])); i++) { + jj = (req!=0 ? req : i); + if (leftside && i <= QUADSIZE) { + proutn("%2d ", i); + for_sectors(j) { + sectscan(goodScan, i, j); + } + } + if (rightside) + status(jj); + if (iix1) ix2 = 1; + else ix2=QUADSIZE; + if (quadx>iy1) iy2 = 1; + else iy2=QUADSIZE; + } + + if (!VALID_QUADRANT(ix1, iy1) || !VALID_SECTOR(ix2, iy2)) { + huh(); + return; + } + dist = sqrt(square(iy1-quadx+0.1*(iy2-sectx))+ + square(ix1-quady+0.1*(ix2-secty))); + wfl = FALSE; + + if (prompt) prout("Answer \"no\" if you don't know the value:"); + while (TRUE) { + chew(); + proutn("Time or arrival date? "); + if (scan()==IHREAL) { + ttime = aaitem; + if (ttime > game.state.date) ttime -= game.state.date; // Actually a star date + if (ttime <= 1e-10 || + (twarp=(floor(sqrt((10.0*dist)/ttime)*10.0)+1.0)/10.0) > 10) { + prout("We'll never make it, sir."); + chew(); + return; + } + if (twarp < 1.0) twarp = 1.0; + break; + } + chew(); + proutn("Warp factor? "); + if (scan()== IHREAL) { + wfl = TRUE; + twarp = aaitem; + if (twarp<1.0 || twarp > 10.0) { + huh(); + return; + } + break; + } + prout("Captain, certainly you can give me one of these."); + } + while (TRUE) { + chew(); + ttime = (10.0*dist)/square(twarp); + tpower = dist*twarp*twarp*twarp*(shldup+1); + if (tpower >= energy) { + prout("Insufficient energy, sir."); + if (shldup==0 || tpower > energy*2.0) { + if (!wfl) return; + proutn("New warp factor to try? "); + if (scan() == IHREAL) { + wfl = TRUE; + twarp = aaitem; + if (twarp<1.0 || twarp > 10.0) { + huh(); + return; + } + continue; + } + else { + chew(); + skip(1); + return; + } + } + prout("But if you lower your shields,"); + proutn("remaining"); + tpower /= 2; + } + else + proutn("Remaining"); + prout(" energy will be %.2f.", energy-tpower); + if (wfl) { + prout("And we will arrive at stardate %.2f.", + game.state.date+ttime); + } + else if (twarp==1.0) + prout("Any warp speed is adequate."); + else { + prout("Minimum warp needed is %.2f,", twarp); + prout("and we will arrive at stardate %.2f.", + game.state.date+ttime); + } + if (game.state.remtime < ttime) + prout("Unfortunately, the Federation will be destroyed by then."); + if (twarp > 6.0) + prout("You'll be taking risks at that speed, Captain"); + if ((isatb==1 && game.state.isy == ix1 && game.state.isx == iy1 && + game.future[FSCDBAS]< ttime+game.state.date)|| + (game.future[FCDBAS] 10.0) { + huh(); + return; + } + } + else { + chew(); + skip(1); + return; + } + } + +} diff --git a/src/setup.c b/src/setup.c new file mode 100644 index 0000000..04a0247 --- /dev/null +++ b/src/setup.c @@ -0,0 +1,737 @@ +#include +#include +#include "sst.h" + +static long filelength(int fd) { +struct stat buf; + fstat(fd, &buf); + return buf.st_size; +} + +void prelim(void) +{ + skip(2); + prout("-SUPER- STAR TREK"); + skip(1); +#ifdef __HISTORICAL__ + prout("Latest update-21 Sept 78"); + skip(1); +#endif /* __HISTORICAL__ */ +} + +void freeze(int boss) +{ + FILE *fp; + int key; + if (boss) { + strcpy(citem, "emsave.trk"); + } + else { + if ((key = scan()) == IHEOL) { + proutn("File name: "); + key = scan(); + } + if (key != IHALPHA) { + huh(); + return; + } + chew(); + if (strchr(citem, '.') == NULL) { + strcat(citem, ".trk"); + } + } + if ((fp = fopen(citem, "wb")) == NULL) { + proutn("Can't freeze game as file "); + proutn(citem); + skip(1); + return; + } + strcpy(game.magic, SSTMAGIC); + fwrite(&game, sizeof(game), 1, fp); + + fclose(fp); + + /* I hope that's enough! */ +} + + +int thaw(void) +{ + FILE *fp; + int key; + + game.passwd[0] = '\0'; + if ((key = scan()) == IHEOL) { + proutn("File name: "); + key = scan(); + } + if (key != IHALPHA) { + huh(); + return 1; + } + chew(); + if (strchr(citem, '.') == NULL) { + strcat(citem, ".trk"); + } + if ((fp = fopen(citem, "rb")) == NULL) { + proutn("Can't find game file "); + proutn(citem); + skip(1); + return 1; + } + fread(&game, sizeof(game), 1, fp); + if (feof(fp) || ftell(fp) != filelength(fileno(fp)) || strcmp(game.magic, SSTMAGIC)) { + prout("Game file format is bad, should begin with " SSTMAGIC); + skip(1); + fclose(fp); + return 1; + } + + fclose(fp); + + return 0; +} + +void abandn(void) +{ + int nb, l; + + chew(); + if (condit==IHDOCKED) { + if (ship!=IHE) { + prout("You cannot abandon Ye Faerie Queene."); + return; + } + } + else { + /* Must take shuttle craft to exit */ + if (game.damage[DSHUTTL]==-1) { + prout("Ye Faerie Queene has no shuttle craft."); + return; + } + if (game.damage[DSHUTTL]<0) { + prout("Shuttle craft now serving Big Mac's."); + return; + } + if (game.damage[DSHUTTL]>0) { + prout("Shuttle craft damaged."); + return; + } + if (landed==1) { + prout("You must be aboard the Enterprise."); + return; + } + if (iscraft!=1) { + prout("Shuttle craft not currently available."); + return; + } + /* Print abandon ship messages */ + skip(1); + prouts("***ABANDON SHIP! ABANDON SHIP!"); + skip(1); + prouts("***ALL HANDS ABANDON SHIP!"); + skip(2); + prout("Captain and crew escape in shuttle craft."); + prout("Remainder of ship's complement beam down"); + prout("to nearest habitable planet."); + if (game.state.rembase==0) { + /* Ops! no place to go... */ + finish(FABANDN); + return; + } + /* If at least one base left, give 'em the Faerie Queene */ + skip(1); + icrystl = 0; /* crystals are lost */ + nprobes = 0; /* No probes */ + prout("You are captured by Klingons and released to"); + prout("the Federation in a prisoner-of-war exchange."); + nb = Rand()*game.state.rembase+1; + /* Set up quadrant and position FQ adjacient to base */ + if (quadx!=game.state.baseqx[nb] || quady!=game.state.baseqy[nb]) { + quadx = game.state.baseqx[nb]; + quady = game.state.baseqy[nb]; + sectx = secty = 5; + newqad(1); + } + for (;;) { + /* position next to base by trial and error */ + game.quad[sectx][secty] = IHDOT; + for_sectors(l) { + sectx = 3.0*Rand() - 1.0 + basex; + secty = 3.0*Rand() - 1.0 + basey; + if (VALID_SECTOR(sectx, secty) && + game.quad[sectx][secty] == IHDOT) break; + } + if (l < QUADSIZE+1) break; /* found a spot */ + sectx=QUADSIZE/2; + secty=QUADSIZE/2; + newqad(1); + } + } + /* Get new commission */ + game.quad[sectx][secty] = ship = IHF; + prout("Starfleet puts you in command of another ship,"); + prout("the Faerie Queene, which is antiquated but,"); + prout("still useable."); + if (icrystl!=0) prout("The dilithium crystals have been moved."); + imine=0; + iscraft=0; /* Gallileo disappears */ + /* Resupply ship */ + condit=IHDOCKED; + for (l = 0; l < NDEVICES; l++) + game.damage[l] = 0.0; + game.damage[DSHUTTL] = -1; + energy = inenrg = 3000.0; + shield = inshld = 1250.0; + torps = intorps = 6; + lsupres=inlsr=3.0; + shldup=0; + warpfac=5.0; + wfacsq=25.0; + return; +} + +void setup(int needprompt) +{ + int i,j, krem, klumper; + int ix, iy; +#ifdef DEBUG + idebug = 0; +#endif + // Decide how many of everything + if (choose(needprompt)) return; // frozen game + // Prepare the Enterprise + alldone = gamewon = 0; + ship = IHE; + energy = inenrg = 5000.0; + shield = inshld = 2500.0; + shldchg = shldup = 0; + inlsr = 4.0; + lsupres = 4.0; + iran(GALSIZE, &quadx, &quady); + iran(QUADSIZE, §x, §y); + torps = intorps = 10; + nprobes = (int)(3.0*Rand() + 2.0); /* Give them 2-4 of these wonders */ + warpfac = 5.0; + wfacsq = warpfac * warpfac; + for (i=0; i < NDEVICES; i++) + game.damage[i] = 0.0; + // Set up assorted game parameters + batx = baty = 0; + game.state.date = indate = 100.0*(int)(31.0*Rand()+20.0); + nkinks = nhelp = resting = casual = 0; + isatb = iscate = imine = icrystl = icraft = game.state.nplankl = 0; + game.state.starkl = game.state.basekl = 0; + iscraft = 1; + landed = -1; + alive = 1; + docfac = 0.25; + for_quadrants(i) + for_quadrants(j) { + game.state.galaxy[i][j].charted = 0; + game.state.galaxy[i][j].planets = 0; + game.state.galaxy[i][j].romulans = 0; + game.state.galaxy[i][j].klingons = 0; + game.state.galaxy[i][j].starbase = 0; + game.state.galaxy[i][j].supernova = 0; + } + // Initialize times for extraneous events + game.future[FSNOVA] = game.state.date + expran(0.5 * intime); + game.future[FTBEAM] = game.state.date + expran(1.5 * (intime / game.state.remcom)); + game.future[FSNAP] = game.state.date + 1.0 + Rand(); // Force an early snapshot + game.future[FBATTAK] = game.state.date + expran(0.3*intime); + game.future[FCDBAS] = FOREVER; + game.future[FSCMOVE] = game.state.nscrem ? game.state.date+0.2777 : FOREVER; + game.future[FSCDBAS] = FOREVER; + game.future[FDSPROB] = FOREVER; + // Starchart is functional but we've never seen it + lastchart = FOREVER; + // Put stars in the galaxy + instar = 0; + for_quadrants(i) + for_quadrants(j) { + int k = Rand()*9.0 + 1.0; + instar += k; + game.state.galaxy[i][j].stars = k; + } + // Locate star bases in galaxy + for (i = 1; i <= inbase; i++) { + int contflag; + do { + do iran(GALSIZE, &ix, &iy); + while (game.state.galaxy[ix][iy].starbase); + contflag = FALSE; + for (j = i-1; j > 0; j--) { + /* Improved placement algorithm to spread out bases */ + double distq = square(ix-game.state.baseqx[j]) + square(iy-game.state.baseqy[j]); + if (distq < 6.0*(BASEMAX+1-inbase) && Rand() < 0.75) { + contflag = TRUE; +#ifdef DEBUG + prout("DEBUG: Abandoning base #%d at %d-%d", i, ix, iy); +#endif + break; + } +#ifdef DEBUG + else if (distq < 6.0 * (BASEMAX+1-inbase)) { + prout("DEBUG: saving base #%d, close to #%d", i, j); + } +#endif + } + } while (contflag); + + game.state.baseqx[i] = ix; + game.state.baseqy[i] = iy; + game.state.galaxy[ix][iy].starbase = 1; + game.state.chart[ix][iy].starbase = 1; + } + // Position ordinary Klingon Battle Cruisers + krem = inkling; + klumper = 0.25*skill*(9.0-length)+1.0; + if (klumper > 9) klumper = 9; // Can't have more than 9 in quadrant + do { + double r = Rand(); + int klump = (1.0 - r*r)*klumper; + if (klump > krem) klump = krem; + krem -= klump; + do iran(GALSIZE,&ix,&iy); + while (game.state.galaxy[ix][iy].supernova || + game.state.galaxy[ix][iy].klingons + klump > 9); + game.state.galaxy[ix][iy].klingons += klump; + } while (krem > 0); + // Position Klingon Commander Ships +#ifdef DEBUG + klumper = 1; +#endif + for (i = 1; i <= incom; i++) { + do { + do { /* IF debugging, put commanders by bases, always! */ +#ifdef DEBUG + if (idebug && klumper <= inbase) { + ix = game.state.baseqx[klumper]; + iy = game.state.baseqy[klumper]; + klumper++; + } + else +#endif + iran(GALSIZE, &ix, &iy); + } + while ((!game.state.galaxy[ix][iy].klingons && Rand() < 0.75)|| + game.state.galaxy[ix][iy].supernova|| + game.state.galaxy[ix][iy].klingons > 8); + // check for duplicate + for (j = 1; j < i; j++) + if (game.state.cx[j]==ix && game.state.cy[j]==iy) break; + } while (j < i); + game.state.galaxy[ix][iy].klingons++; + game.state.cx[i] = ix; + game.state.cy[i] = iy; + } + // Locate planets in galaxy + for (i = 0; i < inplan; i++) { + do iran(GALSIZE, &ix, &iy); while (game.state.galaxy[ix][iy].planets); + game.state.galaxy[ix][iy].planets = 1; + game.state.plnets[i].x = ix; + game.state.plnets[i].y = iy; + game.state.plnets[i].pclass = Rand()*3.0; // Planet class M N or O + game.state.plnets[i].crystals = 1.5*Rand(); // 1 in 3 chance of crystals + game.state.plnets[i].known = unknown; + } + // Locate Romulans + for (i = 1; i <= game.state.nromrem; i++) { + iran(GALSIZE, &ix, &iy); + game.state.galaxy[ix][iy].romulans = 1; + } + // Locate the Super Commander + if (game.state.nscrem > 0) { + do iran(GALSIZE, &ix, &iy); + while (game.state.galaxy[ix][iy].supernova || game.state.galaxy[ix][iy].klingons > 8); + game.state.isx = ix; + game.state.isy = iy; + game.state.galaxy[ix][iy].klingons++; + } + // Place thing (in tournament game, thingx == -1, don't want one!) + if (thingx != -1) { + iran(GALSIZE, &thingx, &thingy); + } + else { + thingx = thingy = 0; + } + +// idate = date; + skip(2); + game.state.snap = 0; + + if (skill == SKILL_NOVICE) { + prout("It is stardate %d. The Federation is being attacked by", + (int)game.state.date); + prout("a deadly Klingon invasion force. As captain of the United"); + prout("Starship U.S.S. Enterprise, it is your mission to seek out"); + prout("and destroy this invasion force of %d battle cruisers.", + INKLINGTOT); + prout("You have an initial allotment of %d stardates to complete", (int)intime); + prout("your mission. As you proceed you may be given more time."); + prout(""); + prout("You will have %d supporting starbases.", inbase); + proutn("Starbase locations- "); + } + else { + prout("Stardate %d.", (int)game.state.date); + prout(""); + prout("%d Klingons.", INKLINGTOT); + prout("An unknown number of Romulans."); + if (game.state.nscrem) prout("and one (GULP) Super-Commander."); + prout("%d stardates.",(int)intime); + proutn("%d starbases in ", inbase); + } + for (i = 1; i <= inbase; i++) { + proutn(cramlc(0, game.state.baseqx[i], game.state.baseqy[i])); + proutn(" "); + } + skip(2); + proutn("The Enterprise is currently in "); + proutn(cramlc(quadrant, quadx, quady)); + proutn(" "); + proutn(cramlc(sector, sectx, secty)); + skip(2); + prout("Good Luck!"); + if (game.state.nscrem) prout(" YOU'LL NEED IT."); + waitfor(); + newqad(0); + if (nenhere-iqhere-ithere) shldup=1.0; + if (neutz) attack(0); // bad luck to start in a Romulan Neutral Zone +} + +int choose(int needprompt) +{ + while (TRUE) { + tourn = 0; + thawed = 0; + skill = SKILL_NONE; + length = 0; + if (needprompt) /* Can start with command line options */ + proutn("Would you like a regular, tournament, or saved game? "); + scan(); + if (strlen(citem)==0) continue; // Try again + if (isit("tournament")) { + while (scan() == IHEOL) { + proutn("Type in tournament number-"); + } + if (aaitem == 0) { + chew(); + continue; // We don't want a blank entry + } + tourn = (int)aaitem; + thingx = -1; + srand((unsigned int)(int)aaitem); + break; + } + if (isit("saved") || isit("frozen")) { + if (thaw()) continue; + chew(); + if (*game.passwd==0) continue; + if (!alldone) thawed = 1; // No plaque if not finished + report(); + waitfor(); + return TRUE; + } + if (isit("regular")) break; + proutn("What is \""); + proutn(citem); + prout("\"?"); + chew(); + } + while (length==0 || skill==SKILL_NONE) { + if (scan() == IHALPHA) { + if (isit("short")) length = 1; + else if (isit("medium")) length = 2; + else if (isit("long")) length = 4; + else if (isit("novice")) skill = SKILL_NOVICE; + else if (isit("fair")) skill = SKILL_FAIR; + else if (isit("good")) skill = SKILL_GOOD; + else if (isit("expert")) skill = SKILL_EXPERT; + else if (isit("emeritus")) skill = SKILL_EMERITUS; + else { + proutn("What is \""); + proutn(citem); + prout("\"?"); + } + } + else { + chew(); + if (length==0) proutn("Would you like a Short, Medium, or Long game? "); + else if (skill == SKILL_NONE) proutn("Are you a Novice, Fair, Good, Expert, or Emeritus player? "); + } + } + // Choose game options -- added by ESR for SST2K + if (scan() != IHALPHA) { + chew(); + proutn("Choose your game options: "); + scan(); + } + if (isit("plain")) { + // Approximates the UT FORTRAN version. + game.options &=~ (OPTION_THOLIAN | OPTION_PLANETS | OPTION_THINGY | OPTION_PROBE | OPTION_RAMMING | OPTION_MVBADDY | OPTION_BLKHOLE | OPTION_BASE); + game.options |= OPTION_PLAIN; + } + else if (isit("almy")) { + // Approximates Tom Almy's version. + game.options &=~ (OPTION_THINGY | OPTION_BLKHOLE | OPTION_BASE); + game.options |= OPTION_ALMY; + } + else if (isit("fancy")) + /* do nothing */; + else if (strlen(citem)) { + proutn("What is \""); + proutn(citem); + prout("\"?"); + } + setpassword(); +#ifdef DEBUG + if (strcmp(game.passwd, "debug")==0) idebug = 1; +#endif + + // Use parameters to generate initial values of things + damfac = 0.5 * skill; + game.state.rembase = 2.0 + Rand()*(BASEMAX-2.0); + inbase = game.state.rembase; + if (game.options & OPTION_PLANETS) + inplan = (PLNETMAX/2) + (PLNETMAX/2+1)*Rand(); + game.state.nromrem = inrom = (2.0+Rand())*skill; + game.state.nscrem = inscom = (skill > SKILL_FAIR ? 1 : 0); + game.state.remtime = 7.0 * length; + intime = game.state.remtime; + game.state.remkl = inkling = 2.0*intime*((skill+1 - 2*Rand())*skill*0.1+.15); + incom = skill + 0.0625*inkling*Rand(); + game.state.remcom = min(10, incom); + incom = game.state.remcom; + game.state.remres = (inkling+4*incom)*intime; + inresor = game.state.remres; + if (inkling > 50) { + inbase = (game.state.rembase += 1); + } + return FALSE; +} + +void dropin(int iquad, int *ix, int *iy) +{ + do iran(QUADSIZE, ix, iy); + while (game.quad[*ix][*iy] != IHDOT); + game.quad[*ix][*iy] = iquad; +} + +void newcnd(void) +{ + condit = IHGREEN; + if (energy < 1000.0) condit = IHYELLOW; + if (game.state.galaxy[quadx][quady].klingons || game.state.galaxy[quadx][quady].romulans) + condit = IHRED; + if (!alive) condit=IHDEAD; +} + + +void newqad(int shutup) +{ + int i, j, ix, iy, nplan; + + iattak = 1; + justin = 1; + basex = basey = 0; + klhere = 0; + comhere = 0; + plnetx = plnety = 0; + ishere = 0; + irhere = 0; + iplnet = 0; + nenhere = 0; + neutz = 0; + inorbit = 0; + landed = -1; + ientesc = 0; + ithere = 0; + iqhere=0; + iqengry=0; + iseenit = 0; + if (iscate) { + // Attempt to escape Super-commander, so tbeam back! + iscate = 0; + ientesc = 1; + } + // Clear quadrant + for_sectors(i) + for_sectors(j) + game.quad[i][j] = IHDOT; + // cope with supernova + if (game.state.galaxy[quadx][quady].supernova) + return; + klhere = game.state.galaxy[quadx][quady].klingons; + irhere = game.state.galaxy[quadx][quady].romulans; + nplan = game.state.galaxy[quadx][quady].planets; + nenhere = klhere + irhere; + + // Position Starship + game.quad[sectx][secty] = ship; + + if (game.state.galaxy[quadx][quady].klingons) { + // Position ordinary Klingons + for (i = 1; i <= klhere; i++) { + dropin(IHK, &ix, &iy); + game.kx[i] = ix; + game.ky[i] = iy; + game.kdist[i] = game.kavgd[i] = sqrt(square(sectx-ix) + square(secty-iy)); + game.kpower[i] = Rand()*150.0 +300.0 +25.0*skill; + } + // If we need a commander, promote a Klingon + for_commanders(i) + if (game.state.cx[i]==quadx && game.state.cy[i]==quady) break; + + if (i <= game.state.remcom) { + game.quad[ix][iy] = IHC; + game.kpower[klhere] = 950.0+400.0*Rand()+50.0*skill; + comhere = 1; + } + + // If we need a super-commander, promote a Klingon + if (quadx == game.state.isx && quady == game.state.isy) { + game.quad[game.kx[1]][game.ky[1]] = IHS; + game.kpower[1] = 1175.0 + 400.0*Rand() + 125.0*skill; + iscate = game.state.remkl>1; + ishere = 1; + } + } + // Put in Romulans if needed + for (i = klhere+1; i <= nenhere; i++) { + dropin(IHR, &ix, &iy); + game.kx[i] = ix; + game.ky[i] = iy; + game.kdist[i] = game.kavgd[i] = sqrt(square(sectx-ix) + square(secty-iy)); + game.kpower[i] = Rand()*400.0 + 450.0 + 50.0*skill; + } + // If quadrant needs a starbase, put it in + if (game.state.galaxy[quadx][quady].starbase) + dropin(IHB, &basex, &basey); + + if (nplan) { + // If quadrant needs a planet, put it in + for (i=0; i < inplan; i++) + if (game.state.plnets[i].x == quadx && game.state.plnets[i].y == quady) break; + if (i < inplan) { + iplnet = i; + dropin(IHP, &plnetx, &plnety); + } + } + // Check for condition + newcnd(); + // And finally the stars + for (i = 1; i <= game.state.galaxy[quadx][quady].stars; i++) + dropin(IHSTAR, &ix, &iy); + + // Check for RNZ + if (irhere > 0 && klhere == 0) { + neutz = 1; + if (game.damage[DRADIO] <= 0.0) { + skip(1); + prout("LT. Uhura- \"Captain, an urgent message."); + prout(" I'll put it on audio.\" CLICK"); + skip(1); + prout("INTRUDER! YOU HAVE VIOLATED THE ROMULAN NEUTRAL ZONE."); + prout("LEAVE AT ONCE, OR YOU WILL BE DESTROYED!"); + } + } + + if (shutup==0) { + // Put in THING if needed + if (thingx == quadx && thingy == quady) { + dropin(IHQUEST, &ix, &iy); + iran(GALSIZE, &thingx, &thingy); + nenhere++; + iqhere=1; + game.kx[nenhere] = ix; + game.ky[nenhere] = iy; + game.kdist[nenhere] = game.kavgd[nenhere] = + sqrt(square(sectx-ix) + square(secty-iy)); + game.kpower[nenhere] = Rand()*6000.0 +500.0 +250.0*skill; + if (game.damage[DSRSENS] == 0.0) { + skip(1); + prout("MR. SPOCK- \"Captain, this is most unusual."); + prout(" Please examine your short-range scan.\""); + } + } + } + + // Decide if quadrant needs a Tholian + if (game.options & OPTION_THOLIAN) { + if ((skill < SKILL_GOOD && Rand() <= 0.02) || /* Lighten up if skill is low */ + (skill == SKILL_GOOD && Rand() <= 0.05) || + (skill > SKILL_GOOD && Rand() <= 0.08) + #ifdef DEBUG + || strcmp(game.passwd, "tholianx")==0 + #endif + ) { + do { + ithx = Rand() > 0.5 ? QUADSIZE : 1; + ithy = Rand() > 0.5 ? QUADSIZE : 1; + } while (game.quad[ithx][ithy] != IHDOT); + game.quad[ithx][ithy] = IHT; + ithere = 1; + nenhere++; + game.kx[nenhere] = ithx; + game.ky[nenhere] = ithy; + game.kdist[nenhere] = game.kavgd[nenhere] = + sqrt(square(sectx-ithx) + square(secty-ithy)); + game.kpower[nenhere] = Rand()*400.0 +100.0 +25.0*skill; + /* Reserve unocupied corners */ + if (game.quad[1][1]==IHDOT) game.quad[1][1] = 'X'; + if (game.quad[1][QUADSIZE]==IHDOT) game.quad[1][QUADSIZE] = 'X'; + if (game.quad[QUADSIZE][1]==IHDOT) game.quad[QUADSIZE][1] = 'X'; + if (game.quad[QUADSIZE][QUADSIZE]==IHDOT) game.quad[QUADSIZE][QUADSIZE] = 'X'; + } + } + + sortkl(); + + // Put in a few black holes + for (i = 1; i <= 3; i++) + if (Rand() > 0.5) + dropin(IHBLANK, &ix, &iy); + + // Take out X's in corners if Tholian present + if (ithere) { + if (game.quad[1][1]=='X') game.quad[1][1] = IHDOT; + if (game.quad[1][QUADSIZE]=='X') game.quad[1][QUADSIZE] = IHDOT; + if (game.quad[QUADSIZE][1]=='X') game.quad[QUADSIZE][1] = IHDOT; + if (game.quad[QUADSIZE][QUADSIZE]=='X') game.quad[QUADSIZE][QUADSIZE] = IHDOT; + } +} + +void sortkl(void) +{ + double t; + int sw, j, k; + + // The author liked bubble sort. So we will use it. :-( + + if (nenhere-iqhere-ithere < 2) return; + + do { + sw = FALSE; + for (j = 1; j < nenhere; j++) + if (game.kdist[j] > game.kdist[j+1]) { + sw = TRUE; + t = game.kdist[j]; + game.kdist[j] = game.kdist[j+1]; + game.kdist[j+1] = t; + t = game.kavgd[j]; + game.kavgd[j] = game.kavgd[j+1]; + game.kavgd[j+1] = t; + k = game.kx[j]; + game.kx[j] = game.kx[j+1]; + game.kx[j+1] = k; + k = game.ky[j]; + game.ky[j] = game.ky[j+1]; + game.ky[j+1] = k; + t = game.kpower[j]; + game.kpower[j] = game.kpower[j+1]; + game.kpower[j+1] = t; + } + } while (sw); +} diff --git a/src/sst.c b/src/sst.c new file mode 100644 index 0000000..75dca51 --- /dev/null +++ b/src/sst.c @@ -0,0 +1,871 @@ +#include +#include +#include +#include "sstlinux.h" +#include "sst.h" + +#define DOC_NAME "sst.doc" + +/* + +Dave Matuszek says: + + SRSCAN, MOVE, PHASERS, CALL, STATUS, IMPULSE, PHOTONS, ABANDON, + LRSCAN, WARP, SHIELDS, DESTRUCT, CHART, REST, DOCK, QUIT, and DAMAGE + were in the original non-"super" version of UT FORTRAN Star Trek. + + Tholians weren't in the original. Dave is dubious about their merits. + (They are now controlled by OPTION_THOLIAN and turned off if the game + type is "plain".) + + Planets and dilithium crystals weren't in the original. Dave is OK + with this idea. (It's now controlled by OPTION_PLANETS and turned + off if the game type is "plain".) + + Dave says the bit about the Galileo getting turned into a + McDonald's is "consistant with our original vision". (This has been + left permanently enabled, as it can only happen if OPTION_PLANETS + is on.) + + Dave also says the Space Thingy should not be preserved across saved + games, so you can't prove to others that you've seen it. He says it + shouldn't fire back, either. It should do nothing except scream and + disappear when hit by photon torpedos. It's OK that it may move + when attacked, but it didn't in the original. (Whether the Thingy + can fire back is now controlled by OPTION_THINGY and turned off if the + game type is "plain" or "almy". The no-save behavior has been restored.) + + The Faerie Queen, black holes, and time warping were in the original. + +Here are Tom Almy's changes: + + In early 1997, I got the bright idea to look for references to + "Super Star Trek" on the World Wide Web. There weren't many hits, + but there was one that came up with 1979 Fortran sources! This + version had a few additional features that mine didn't have, + however mine had some feature it didn't have. So I merged its + features that I liked. I also took a peek at the DECUS version (a + port, less sources, to the PDP-10), and some other variations. + + 1, Compared to the original UT version, I've changed the "help" command to + "call" and the "terminate" command to "quit" to better match + user expectations. The DECUS version apparently made those changes + as well as changing "freeze" to "save". However I like "freeze". + (Both "freeze" and "save" work in SST2K.) + + 2. The experimental deathray originally had only a 5% chance of + success, but could be used repeatedly. I guess after a couple + years of use, it was less "experimental" because the 1979 + version had a 70% success rate. However it was prone to breaking + after use. I upgraded the deathray, but kept the original set of + failure modes (great humor!). (Now controlled by OPTION_DEATHRAY + and turned off if game type is "plain".) + + 3. The 1979 version also mentions srscan and lrscan working when + docked (using the starbase's scanners), so I made some changes here + to do this (and indicating that fact to the player), and then realized + the base would have a subspace radio as well -- doing a Chart when docked + updates the star chart, and all radio reports will be heard. The Dock + command will also give a report if a base is under attack. + + 4. Tholian Web from the 1979 version. (Now controlled by + OPTION_THOLIAN and turned off if game type is "plain".) + + 5. Enemies can ram the Enterprise. (Now controlled by OPTION_RAMMING + and turned off if game type is "plain".) + + 6. Regular Klingons and Romulans can move in Expert and Emeritus games. + This code could use improvement. (Now controlled by OPTION_MVBADDY + and turned off if game type is "plain".) + + 7. The deep-space probe feature from the DECUS version. (Now controlled + by OPTION_PROBE and turned off if game type is "plain"). + + 8. 'emexit' command from the 1979 version. + + 9. Bugfix: Klingon commander movements are no longer reported if long-range + sensors are damaged. + + 10. Bugfix: Better base positioning at startup (more spread out). + That made sense to add because most people abort games with + bad base placement. + + In June 2002, I fixed two known bugs and a documentation typo. + In June 2004 I fixed a number of bugs involving: 1) parsing invalid + numbers, 2) manual phasers when SR scan is damaged and commander is + present, 3) time warping into the future, 4) hang when moving + klingons in crowded quadrants. (These fixes are in SST2K.) + +Here are Stas Sergeev's changes: + + 1. The Space Thingy can be shoved, if you ram it, and can fire back if + fired upon. (Now controlled by OPTION_THINGY and turned off if game + type is "plain" or "almy".) + + 2. When you are docked, base covers you with an almost invincible shield. + (A commander can still ram you, or a Romulan can destroy the base, + or a SCom can even succeed with direct attack IIRC, but this rarely + happens.) (Now controlled by OPTION_BASE and turned off if game + type is "plain" or "almy".) + + 3. Ramming a black hole is no longer instant death. There is a + chance you might get timewarped instead. (Now controlled by + OPTION_BLKHOLE and turned off if game type is "plain" or "almy".) + + 4. The Tholian can be hit with phasers. + + 5. SCom can't escape from you if no more enemies remain + (without this, chasing SCom can take an eternity). + + 6. Probe target you enter is now the destination quadrant. Before I don't + remember what it was, but it was something I had difficulty using. + + 7. Secret password is now autogenerated. + + 8. "Plaque" is adjusted for A4 paper :-) + + 9. Phasers now tells you how much energy needed, but only if the computer + is alive. + + 10. Planets are auto-scanned when you enter the quadrant. + + 11. Mining or using crystals in presense of enemy now yields an attack. + There are other minor adjustments to what yields an attack + and what does not. + + 12. "freeze" command reverts to "save", most people will understand this + better anyway. (SST2K recognizes both.) + + 13. Screen-oriented interface, with sensor scans always up. (SST2K + supports both screen-oriented and TTY modes.) + +Eric Raymond's changes: + +Mainly, I translated this C code out of FORTRAN into C -- created #defines +for a lot of magic numbers and refactored the heck out of it. + + 1. "sos" and "call" becomes "mayday", "freeze" and "save" are both good. + + 2. Status report now indicates when dilithium crystals are on board. + + 3. Per Dave Matuszek's remarks, Thingy state is never saved across games. + + 4. Added game option selection so you can play a close (but not bug-for- + bug identical) approximation of older versions. +*/ + +/* the input queue */ +static char line[128], *linep = line; + +struct game game; +int thingx, thingy, iqhere, iqengry; +int iscore, iskill; // Common PLAQ +double aaitem; +double perdate; +char citem[10]; + +char *device[NDEVICES] = { + "S. R. Sensors", + "L. R. Sensors", + "Phasers", + "Photon Tubes", + "Life Support", + "Warp Engines", + "Impulse Engines", + "Shields", + "Subspace Radio", + "Shuttle Craft", + "Computer", + "Transporter", + "Shield Control", + "Death Ray", + "D. S. Probe"}; + +static struct +{ + char *name; + int value; + unsigned long option; +} + +commands[] = { +#define SRSCAN 0 + {"SRSCAN", SRSCAN, OPTION_TTY}, +#define STATUS 1 + {"STATUS", STATUS, OPTION_TTY}, +#define REQUEST 2 + {"REQUEST", REQUEST, OPTION_TTY}, +#define LRSCAN 3 + {"LRSCAN", LRSCAN, OPTION_TTY}, +#define PHASERS 4 + {"PHASERS", PHASERS, 0}, +#define TORPEDO 5 + {"TORPEDO", TORPEDO, 0}, + {"PHOTONS", TORPEDO, 0}, +#define MOVE 6 + {"MOVE", MOVE, 0}, +#define SHIELDS 7 + {"SHIELDS", SHIELDS, 0}, +#define DOCK 8 + {"DOCK", DOCK, 0}, +#define DAMAGES 9 + {"DAMAGES", DAMAGES, 0}, +#define CHART 10 + {"CHART", CHART, 0}, +#define IMPULSE 11 + {"IMPULSE", IMPULSE, 0}, +#define REST 12 + {"REST", REST, 0}, +#define WARP 13 + {"WARP", WARP, 0}, +#define SCORE 14 + {"SCORE", SCORE, 0}, +#define SENSORS 15 + {"SENSORS", SENSORS, OPTION_PLANETS}, +#define ORBIT 16 + {"ORBIT", ORBIT, OPTION_PLANETS}, +#define TRANSPORT 17 + {"TRANSPORT", TRANSPORT, OPTION_PLANETS}, +#define MINE 18 + {"MINE", MINE, OPTION_PLANETS}, +#define CRYSTALS 19 + {"CRYSTALS", CRYSTALS, OPTION_PLANETS}, +#define SHUTTLE 20 + {"SHUTTLE", SHUTTLE, OPTION_PLANETS}, +#define PLANETS 21 + {"PLANETS", PLANETS, OPTION_PLANETS}, +#define REPORT 22 + {"REPORT", REPORT, 0}, +#define COMPUTER 23 + {"COMPUTER", COMPUTER, 0}, +#define COMMANDS 24 + {"COMMANDS", COMMANDS, 0}, +#define EMEXIT 25 + {"EMEXIT", EMEXIT, 0}, +#define PROBE 26 + {"PROBE", PROBE, OPTION_PROBE}, +#define SAVE 27 + {"SAVE", SAVE, 0}, + {"FREEZE", SAVE, 0}, +#define ABANDON 28 + {"ABANDON", ABANDON, 0}, +#define DESTRUCT 29 + {"DESTRUCT", DESTRUCT, 0}, +#define DEATHRAY 30 + {"DEATHRAY", DEATHRAY, 0}, +#define DEBUGCMD 31 + {"DEBUG", DEBUGCMD, 0}, +#define MAYDAY 32 + {"MAYDAY", MAYDAY, 0}, + //{"SOS", MAYDAY, 0}, + //{"CALL", MAYDAY, 0}, +#define QUIT 33 + {"QUIT", QUIT, 0}, +#define HELP 34 + {"HELP", HELP, 0}, +}; + +#define NUMCOMMANDS sizeof(commands)/sizeof(commands[0]) +#define ACCEPT(i) (!commands[i].option || (commands[i].option & game.options)) + +static void listCommands(void) { + int i, k = 0; + proutn("LEGAL COMMANDS ARE:"); + for (i = 0; i < NUMCOMMANDS; i++) { + if (!ACCEPT(i)) + continue; + if (k % 5 == 0) + skip(1); + proutn("%-12s ", commands[i].name); + k++; + } + skip(1); +} + +static void helpme(void) +{ + int i, j; + char cmdbuf[32], *cp; + char linebuf[132]; + FILE *fp; + /* Give help on commands */ + int key; + key = scan(); + while (TRUE) { + if (key == IHEOL) { + setwnd(prompt_window); + proutn("Help on what command? "); + key = scan(); + } + setwnd(message_window); + if (key == IHEOL) return; + for (i = 0; i < NUMCOMMANDS; i++) { + if (ACCEPT(i) && strcasecmp(commands[i].name, citem)==0) { + i = commands[i].value; + break; + } + } + if (i != NUMCOMMANDS) break; + skip(1); + prout("Valid commands:"); + listCommands(); + key = IHEOL; + chew(); + skip(1); + } + if (i == COMMANDS) { + strcpy(cmdbuf, " ABBREV"); + } + else { + for (j = 0; commands[i].name[j]; j++) + cmdbuf[j] = toupper(commands[i].name[j]); + cmdbuf[j] = '\0'; + } + fp = fopen(SSTDOC, "r"); + if (fp == NULL) + fp = fopen(DOC_NAME, "r"); + if (fp == NULL) { + prout("Spock- \"Captain, that information is missing from the"); + prout(" computer. You need to find "DOC_NAME" and put it in the"); + prout(" current directory or to "SSTDOC".\""); + /* + * This used to continue: "You need to find SST.DOC and put + * it in the current directory." + */ + return; + } + for (;;) { + if (fgets(linebuf, sizeof(linebuf), fp) == NULL) { + prout("Spock- \"Captain, there is no information on that command.\""); + fclose(fp); + return; + } + if (linebuf[0] == '%' && linebuf[1] == '%'&& linebuf[2] == ' ') { + for (cp = linebuf+3; isspace(*cp); cp++) + continue; + linebuf[strlen(linebuf)-1] = '\0'; + if (strcasecmp(cp, cmdbuf) == 0) + break; + } + } + + skip(1); + prout("Spock- \"Captain, I've found the following information:\""); + skip(1); + + while (fgets(linebuf, sizeof(linebuf),fp)) { + if (strstr(linebuf, "******")) + break; + proutn(linebuf); + } + fclose(fp); +} + +void enqueue(char *s) +{ + strcpy(line, s); +} + +static void makemoves(void) +{ + int i, v = 0, hitme; + clrscr(); + setwnd(message_window); + while (TRUE) { /* command loop */ + drawmaps(1); + while (TRUE) { /* get a command */ + hitme = FALSE; + justin = 0; + Time = 0.0; + i = -1; + chew(); + setwnd(prompt_window); + clrscr(); + proutn("COMMAND> "); + if (scan() == IHEOL) { + makechart(); + continue; + } + ididit=0; + clrscr(); + setwnd(message_window); + clrscr(); + for (i=0; i < ABANDON; i++) + if (ACCEPT(i) && isit(commands[i].name)) { + v = commands[i].value; + break; + } + if (i < ABANDON && (!commands[i].option || (commands[i].option & game.options))) + break; + for (; i < NUMCOMMANDS; i++) + if (ACCEPT(i) && strcasecmp(commands[i].name, citem) == 0) { + v = commands[i].value; + break; + } + if (i < NUMCOMMANDS && (!commands[i].option || (commands[i].option & game.options))) + break; + listCommands(); + } + commandhook(commands[i].name, TRUE); + switch (v) { /* command switch */ + case SRSCAN: // srscan + srscan(SCAN_FULL); + break; + case STATUS: // status + srscan(SCAN_STATUS); + break; + case REQUEST: // status request + srscan(SCAN_REQUEST); + break; + case LRSCAN: // lrscan + lrscan(); + break; + case PHASERS: // phasers + phasers(); + if (ididit) hitme = TRUE; + break; + case TORPEDO: // photons + photon(); + if (ididit) hitme = TRUE; + break; + case MOVE: // move + warp(1); + break; + case SHIELDS: // shields + doshield(1); + if (ididit) { + hitme=TRUE; + shldchg = 0; + } + break; + case DOCK: // dock + dock(1); + if (ididit) attack(0); + break; + case DAMAGES: // damages + dreprt(); + break; + case CHART: // chart + chart(0); + break; + case IMPULSE: // impulse + impuls(); + break; + case REST: // rest + wait(); + if (ididit) hitme = TRUE; + break; + case WARP: // warp + setwrp(); + break; + case SCORE: // score + score(); + break; + case SENSORS: // sensors + sensor(); + break; + case ORBIT: // orbit + orbit(); + if (ididit) hitme = TRUE; + break; + case TRANSPORT: // transport "beam" + beam(); + break; + case MINE: // mine + mine(); + if (ididit) hitme = TRUE; + break; + case CRYSTALS: // crystals + usecrystals(); + if (ididit) hitme = TRUE; + break; + case SHUTTLE: // shuttle + shuttle(); + if (ididit) hitme = TRUE; + break; + case PLANETS: // Planet list + preport(); + break; + case REPORT: // Game Report + report(); + break; + case COMPUTER: // use COMPUTER! + eta(); + break; + case COMMANDS: + listCommands(); + break; + case EMEXIT: // Emergency exit + clrscr(); // Hide screen + freeze(TRUE); // forced save + exit(1); // And quick exit + break; + case PROBE: + probe(); // Launch probe + if (ididit) hitme = TRUE; + break; + case ABANDON: // Abandon Ship + abandn(); + break; + case DESTRUCT: // Self Destruct + dstrct(); + break; + case SAVE: // Save Game + freeze(FALSE); + clrscr(); + if (skill > SKILL_GOOD) + prout("WARNING--Saved games produce no plaques!"); + break; + case DEATHRAY: // Try a desparation measure + deathray(); + if (ididit) hitme = TRUE; + break; + case DEBUGCMD: // What do we want for debug??? +#ifdef DEBUG + debugme(); +#endif + break; + case MAYDAY: // Call for help + help(); + if (ididit) hitme = TRUE; + break; + case QUIT: + alldone = 1; // quit the game +#ifdef DEBUG + if (idebug) score(); +#endif + break; + case HELP: + helpme(); // get help + break; + } + commandhook(commands[i].name, FALSE); + for (;;) { + if (alldone) break; // Game has ended +#ifdef DEBUG + if (idebug) prout("2500"); +#endif + if (Time != 0.0) { + events(); + if (alldone) break; // Events did us in + } + if (game.state.galaxy[quadx][quady].supernova) { // Galaxy went Nova! + atover(0); + continue; + } + if (hitme && justin==0) { + attack(2); + if (alldone) break; + if (game.state.galaxy[quadx][quady].supernova) { // went NOVA! + atover(0); + hitme = TRUE; + continue; + } + } + break; + } + if (alldone) break; + } +} + + +int main(int argc, char **argv) +{ + int i, option; + + game.options = OPTION_ALL &~ (OPTION_IOMODES | OPTION_SHOWME | OPTION_PLAIN | OPTION_ALMY); + if (getenv("TERM")) + game.options |= OPTION_CURSES | OPTION_SHOWME; + else + game.options |= OPTION_TTY; + + while ((option = getopt(argc, argv, "t")) != -1) { + switch (option) { + case 't': + game.options |= OPTION_TTY; + game.options &=~ OPTION_CURSES; + break; + default: + fprintf(stderr, "usage: sst [-t] [startcommand...].\n"); + exit(0); + } + } + + randomize(); + iostart(); + + line[0] = '\0'; + for (i = optind; i < argc; i++) { + strcat(line, argv[i]); + strcat(line, " "); + } + while (TRUE) { /* Play a game */ + setwnd(fullscreen_window); +#ifdef DEBUG + prout("INITIAL OPTIONS: %0lx", game.options); +#endif /* DEBUG */ + clrscr(); + prelim(); + setup(line[0] == '\0'); + if (alldone) { + score(); + alldone = 0; + } + else makemoves(); + skip(1); + stars(); + skip(1); + + if (tourn && alldone) { + proutn("Do you want your score recorded?"); + if (ja()) { + chew2(); + freeze(FALSE); + } + } + proutn("Do you want to play again? "); + if (!ja()) break; + } + skip(1); + prout("May the Great Bird of the Galaxy roost upon your home planet."); + return 0; +} + + +void cramen(int i) +{ + /* return an enemy */ + char *s; + + switch (i) { + case IHR: s = "Romulan"; break; + case IHK: s = "Klingon"; break; + case IHC: s = "Commander"; break; + case IHS: s = "Super-commander"; break; + case IHSTAR: s = "Star"; break; + case IHP: s = "Planet"; break; + case IHB: s = "Starbase"; break; + case IHBLANK: s = "Black hole"; break; + case IHT: s = "Tholian"; break; + case IHWEB: s = "Tholian web"; break; + case IHQUEST: s = "Stranger"; break; + default: s = "Unknown??"; break; + } + proutn(s); +} + +char *cramlc(enum loctype key, int x, int y) +{ + static char buf[32]; + buf[0] = '\0'; + if (key == quadrant) strcpy(buf, "Quadrant "); + else if (key == sector) strcpy(buf, "Sector "); + sprintf(buf+strlen(buf), "%d - %d", x, y); + return buf; +} + +void crmena(int i, int enemy, int key, int x, int y) +{ + if (i == 1) proutn("***"); + cramen(enemy); + proutn(" at "); + proutn(cramlc(key, x, y)); +} + +void crmshp(void) +{ + char *s; + switch (ship) { + case IHE: s = "Enterprise"; break; + case IHF: s = "Faerie Queene"; break; + default: s = "Ship???"; break; + } + proutn(s); +} + +void stars(void) +{ + prouts("******************************************************"); + skip(1); +} + +double expran(double avrage) +{ + return -avrage*log(1e-7 + Rand()); +} + +double Rand(void) { + return rand()/(1.0 + (double)RAND_MAX); +} + +void iran(int size, int *i, int *j) +{ + *i = Rand()*(size*1.0) + 1.0; + *j = Rand()*(size*1.0) + 1.0; +} + +void chew(void) +{ + linep = line; + *linep = 0; +} + +void chew2(void) +{ + /* return IHEOL next time */ + linep = line+1; + *linep = 0; +} + +int scan(void) +{ + int i; + char *cp; + + // Init result + aaitem = 0.0; + *citem = 0; + + // Read a line if nothing here + if (*linep == 0) { + if (linep != line) { + chew(); + return IHEOL; + } + cgetline(line, sizeof(line)); + fflush(stdin); + if (curwnd==prompt_window){ + clrscr(); + setwnd(message_window); + clrscr(); + } + linep = line; + } + // Skip leading white space + while (*linep == ' ') linep++; + // Nothing left + if (*linep == 0) { + chew(); + return IHEOL; + } + if (isdigit(*linep) || *linep=='+' || *linep=='-' || *linep=='.') { + // treat as a number + i = 0; + if (sscanf(linep, "%lf%n", &aaitem, &i) < 1) { + linep = line; // Invalid numbers are ignored + *linep = 0; + return IHEOL; + } + else { + // skip to end + linep += i; + return IHREAL; + } + } + // Treat as alpha + cp = citem; + while (*linep && *linep!=' ') { + if ((cp - citem) < 9) *cp++ = tolower(*linep); + linep++; + } + *cp = 0; + return IHALPHA; +} + +int ja(void) +{ + chew(); + while (TRUE) { + scan(); + chew(); + if (*citem == 'y') return TRUE; + if (*citem == 'n') return FALSE; + proutn("Please answer with \"Y\" or \"N\": "); + } +} + +void huh(void) +{ + chew(); + skip(1); + prout("Beg your pardon, Captain?"); +} + +int isit(char *s) +{ + /* New function -- compares s to scanned citem and returns true if it + matches to the length of s */ + + return strncasecmp(s, citem, max(1, strlen(citem))) == 0; + +} + +#ifdef DEBUG +void debugme(void) +{ + proutn("Reset levels? "); + if (ja() != 0) { + if (energy < inenrg) energy = inenrg; + shield = inshld; + torps = intorps; + lsupres = inlsr; + } + proutn("Reset damage? "); + if (ja() != 0) { + int i; + for (i=0; i < NDEVICES; i++) + if (game.damage[i] > 0.0) + game.damage[i] = 0.0; + } + proutn("Toggle idebug? "); + if (ja() != 0) { + idebug = !idebug; + if (idebug) prout("Debug output ON"); + else prout("Debug output OFF"); + } + proutn("Cause selective damage? "); + if (ja() != 0) { + int i, key; + for (i=0; i < NDEVICES; i++) { + proutn("Kill "); + proutn(device[i]); + proutn("? "); + chew(); + key = scan(); + if (key == IHALPHA && isit("y")) { + game.damage[i] = 10.0; + } + } + } + proutn("Examine/change events? "); + if (ja() != 0) { + int i; + for (i = 1; i < NEVENTS; i++) { + int key; + if (game.future[i] == FOREVER) continue; + switch (i) { + case FSNOVA: proutn("Supernova "); break; + case FTBEAM: proutn("T Beam "); break; + case FSNAP: proutn("Snapshot "); break; + case FBATTAK: proutn("Base Attack "); break; + case FCDBAS: proutn("Base Destroy "); break; + case FSCMOVE: proutn("SC Move "); break; + case FSCDBAS: proutn("SC Base Destroy "); break; + } + proutn("%.2f", game.future[i]-game.state.date); + chew(); + proutn(" ?"); + key = scan(); + if (key == IHREAL) { + game.future[i] = game.state.date + aaitem; + } + } + chew(); + } + proutn("Induce supernova here? "); + if (ja() != 0) { + game.state.galaxy[quadx][quady].supernova = TRUE; + atover(1); + } +} +#endif diff --git a/src/sst.h b/src/sst.h new file mode 100644 index 0000000..0c0e492 --- /dev/null +++ b/src/sst.h @@ -0,0 +1,515 @@ +#ifndef __SST_H__ + +#include +#include +#include +#include +#include + +#ifdef DATA_DIR +#define SSTDOC DATA_DIR"/"DOC_NAME +#else +#define SSTDOC DOC_NAME +#endif + +#define min(x, y) ((x)<(y)?(x):(y)) +#define max(x, y) ((x)>(y)?(x):(y)) + +// #define DEBUG + +#define PHASEFAC (2.0) +#define PLNETMAX (10) +#define GALSIZE (8) +#define QUADSIZE (10) +#define BASEMAX (5) + +/* + * These macros hide the difference between 0-origin and 1-origin addressing. + * They're a step towards de-FORTRANizing the code. + */ +#define VALID_QUADRANT(x, y) ((x)>=1 && (x)<=GALSIZE && (y)>=1 && (y)<=GALSIZE) +#define VALID_SECTOR(x, y) ((x)>=1 && (x)<=QUADSIZE && (y)>=1 && (y)<=QUADSIZE) +#define for_quadrants(i) for (i = 1; i <= GALSIZE; i++) +#define for_sectors(i) for (i = 1; i <= QUADSIZE; i++) +#define for_commanders(i) for (i = 1; i <= game.state.remcom; i++) +#define for_local_enemies(i) for (i = 1; i <= nenhere; i++) +#define for_starbases(i) for (i = 1; i <= game.state.rembase; i++) + +typedef struct { + int x; /* Quadrant location of planet */ + int y; + enum {M=0, N=1, O=2} pclass; + int crystals; /* has crystals */ + enum {unknown, known, shuttle_down} known; +} planet; + +#define DESTROY(pl) memset(pl, '\0', sizeof(planet)) + +typedef struct { + int snap, // snapshot taken + remkl, // remaining klingons + remcom, // remaining commanders + nscrem, // remaining super commanders + rembase, // remaining bases + starkl, // destroyed stars + basekl, // destroyed bases + cx[QUADSIZE+1],cy[QUADSIZE+1], // Commander quadrant coordinates + baseqx[BASEMAX+1], // Base quadrant X + baseqy[BASEMAX+1], // Base quadrant Y + isx, isy, // Coordinate of Super Commander + nromrem, // Romulans remaining + nplankl; // destroyed planets + planet plnets[PLNETMAX]; // Planet information + double date, // stardate + remres, // remaining resources + remtime; // remaining time + struct { + int stars; + int planets; + int starbase; + int klingons; + int romulans; + int supernova; + int charted; + } galaxy[GALSIZE+1][GALSIZE+1]; // The Galaxy (subscript 0 not used) + struct { + int stars; + int starbase; + int klingons; + } chart[GALSIZE+1][GALSIZE+1]; // the starchart (subscript 0 not used) +} snapshot; // Data that is snapshot + +#define NKILLK (inkling - game.state.remkl) +#define NKILLC (incom - game.state.remcom) +#define NKILLSC (inscom - game.state.nscrem) +#define NKILLROM (inrom - game.state.nromrem) +#define KLINGREM (game.state.remkl + game.state.remcom + game.state.nscrem) +#define INKLINGTOT (inkling + incom + inscom) +#define KLINGKILLED (INKLINGTOT - KLINGREM) + +#define SKILL_NONE 0 +#define SKILL_NOVICE 1 +#define SKILL_FAIR 2 +#define SKILL_GOOD 3 +#define SKILL_EXPERT 4 +#define SKILL_EMERITUS 5 + +/* game options */ +#define OPTION_ALL 0xffffffff +#define OPTION_TTY 0x00000001 /* old interface */ +#define OPTION_CURSES 0x00000002 /* new interface */ +#define OPTION_IOMODES 0x00000003 /* cover both interfaces */ +#define OPTION_PLANETS 0x00000004 /* planets and mining */ +#define OPTION_THOLIAN 0x00000008 /* Tholians and their webs */ +#define OPTION_THINGY 0x00000010 /* Space Thingy can shoot back */ +#define OPTION_PROBE 0x00000020 /* deep-space probes */ +#define OPTION_SHOWME 0x00000040 /* bracket Enterprise in chart */ +#define OPTION_RAMMING 0x00000080 /* enemies may ram Enterprise */ +#define OPTION_MVBADDY 0x00000100 /* more enemies can move */ +#define OPTION_BLKHOLE 0x00000200 /* black hole may timewarp you */ +#define OPTION_BASE 0x00000400 /* bases have good shields */ +#define OPTION_PLAIN 0x01000000 /* user chose plain game */ +#define OPTION_ALMY 0x02000000 /* user chose Almy variant */ + +/* Define devices */ +#define DSRSENS 0 +#define DLRSENS 1 +#define DPHASER 2 +#define DPHOTON 3 +#define DLIFSUP 4 +#define DWARPEN 5 +#define DIMPULS 6 +#define DSHIELD 7 +#define DRADIO 8 +#define DSHUTTL 9 +#define DCOMPTR 10 +#define DTRANSP 11 +#define DSHCTRL 12 +#define DDRAY 13 // Added deathray +#define DDSP 14 // Added deep space probe +#define NDEVICES (15) // Number of devices + +#define FOREVER 1e30 + +/* Define future events */ +#define FSPY 0 // Spy event happens always (no future[] entry) + // can cause SC to tractor beam Enterprise +#define FSNOVA 1 // Supernova +#define FTBEAM 2 // Commander tractor beams Enterprise +#define FSNAP 3 // Snapshot for time warp +#define FBATTAK 4 // Commander attacks base +#define FCDBAS 5 // Commander destroys base +#define FSCMOVE 6 // Supercommander moves (might attack base) +#define FSCDBAS 7 // Supercommander destroys base +#define FDSPROB 8 // Move deep space probe +#define NEVENTS (9) + +// Scalar variables that are needed for freezing the game +// are placed in a structure. #defines are used to access by their +// original names. Gee, I could have done this with the d structure, +// but I just didn't think of it back when I started. + +#define SSTMAGIC "SST2.0\n" + +extern WINDOW *curwnd; + +struct game { + char magic[sizeof(SSTMAGIC)]; + unsigned long options; + snapshot state; + snapshot snapsht; + char quad[QUADSIZE+1][QUADSIZE+1]; // contents of our quadrant + double kpower[(QUADSIZE+1)*(QUADSIZE+1)]; // enemy energy levels + double kdist[(QUADSIZE+1)*(QUADSIZE+1)]; // enemy distances + double kavgd[(QUADSIZE+1)*(QUADSIZE+1)]; // average distances + double damage[NDEVICES]; // damage encountered + double future[NEVENTS]; // future events + char passwd[10]; // Self Destruct password + int kx[(QUADSIZE+1)*(QUADSIZE+1)]; // enemy sector locations + int ky[(QUADSIZE+1)*(QUADSIZE+1)]; + /* members with macro definitions start here */ + int inkling, + inbase, + incom, + inscom, + inrom, + instar, + intorps, + condit, + torps, + ship, + quadx, + quady, + sectx, + secty, + length, + skill, + basex, + basey, + klhere, + comhere, + casual, + nhelp, + nkinks, + ididit, + gamewon, + alive, + justin, + alldone, + shldchg, + plnetx, + plnety, + inorbit, + landed, + iplnet, + imine, + inplan, + nenhere, + ishere, + neutz, + irhere, + icraft, + ientesc, + iscraft, + isatb, + iscate, +#ifdef DEBUG + idebug, +#endif + iattak, + icrystl, + tourn, + thawed, + batx, + baty, + ithere, + ithx, + ithy, + iseenit, + probecx, + probecy, + proben, + isarmed, + nprobes; + double inresor, + intime, + inenrg, + inshld, + inlsr, + indate, + energy, + shield, + shldup, + warpfac, + wfacsq, + lsupres, + dist, + direc, + Time, + docfac, + resting, + damfac, + lastchart, + cryprob, + probex, + probey, + probeinx, + probeiny, + height; +}; +extern struct game game; + +#define inkling game.inkling // Initial number of klingons +#define inbase game.inbase // Initial number of bases +#define incom game.incom // Initian number of commanders +#define inscom game.inscom // Initian number of commanders +#define inrom game.inrom // Initian number of commanders +#define instar game.instar // Initial stars +#define intorps game.intorps // Initial/Max torpedoes +#define condit game.condit // Condition (red/yellow/green/docked) +#define torps game.torps // number of torpedoes +#define ship game.ship // Ship type -- 'E' is Enterprise +#define quadx game.quadx // where we are +#define quady game.quady // +#define sectx game.sectx // where we are +#define secty game.secty // +#define length game.length // length of game +#define skill game.skill // skill level +#define basex game.basex // position of base in current quad +#define basey game.basey // +#define klhere game.klhere // klingons here +#define comhere game.comhere // commanders here +#define casual game.casual // causalties +#define nhelp game.nhelp // calls for help +#define nkinks game.nkinks // +#define ididit game.ididit // Action taken -- allows enemy to attack +#define gamewon game.gamewon // Finished! +#define alive game.alive // We are alive (not killed) +#define justin game.justin // just entered quadrant +#define alldone game.alldone // game is now finished +#define shldchg game.shldchg // shield is changing (affects efficiency) +#define plnetx game.plnetx // location of planet in quadrant +#define plnety game.plnety // +#define inorbit game.inorbit // orbiting +#define landed game.landed // party on planet (1), on ship (-1) +#define iplnet game.iplnet // planet # in quadrant +#define imine game.imine // mining +#define inplan game.inplan // initial planets +#define nenhere game.nenhere // Number of enemies in quadrant +#define ishere game.ishere // Super-commander in quandrant +#define neutz game.neutz // Romulan Neutral Zone +#define irhere game.irhere // Romulans in quadrant +#define icraft game.icraft // Kirk in Galileo +#define ientesc game.ientesc // Attempted escape from supercommander +#define iscraft game.iscraft // =1 if craft on ship, -1 if removed from game +#define isatb game.isatb // =1 if SuperCommander is attacking base +#define iscate game.iscate // Super Commander is here +#ifdef DEBUG +#define idebug game.idebug // Debug mode +#endif +#define iattak game.iattak // attack recursion elimination (was cracks[4]) +#define icrystl game.icrystl // dilithium crystals aboard +#define tourn game.tourn // Tournament number +#define thawed game.thawed // Thawed game +#define batx game.batx // Base coordinates being attacked +#define baty game.baty // +#define ithere game.ithere // Tholean is here +#define ithx game.ithx // coordinates of tholean +#define ithy game.ithy +#define iseenit game.iseenit // Seen base attack report +#define inresor game.inresor // initial resources +#define intime game.intime // initial time +#define inenrg game.inenrg // Initial/Max Energy +#define inshld game.inshld // Initial/Max Shield +#define inlsr game.inlsr // initial life support resources +#define indate game.indate // Initial date +#define energy game.energy // Energy level +#define shield game.shield // Shield level +#define shldup game.shldup // Shields are up +#define warpfac game.warpfac // Warp speed +#define wfacsq game.wfacsq // squared warp factor +#define lsupres game.lsupres // life support reserves +#define dist game.dist // movement distance +#define direc game.direc // movement direction +#define Time game.Time // time taken by current operation +#define docfac game.docfac // repair factor when docking (constant?) +#define resting game.resting // rest time +#define damfac game.damfac // damage factor +#define lastchart game.lastchart // time star chart was last updated +#define cryprob game.cryprob // probability that crystal will work +#define probex game.probex // location of probe +#define probey game.probey +#define probecx game.probecx // current probe quadrant +#define probecy game.probecy +#define probeinx game.probeinx // Probe x,y increment +#define probeiny game.probeiny +#define proben game.proben // number of moves for probe +#define isarmed game.isarmed // Probe is armed +#define nprobes game.nprobes // number of probes available + +/* the following global state doesn't need to be saved */ +extern char *device[NDEVICES]; +extern int iscore, iskill; // Common PLAQ +extern double perdate; +extern double aaitem; +extern char citem[10]; + +/* the Space Thingy's global state should *not* be saved! */ +extern int thingx, thingy, iqhere, iqengry; + +typedef enum {FWON, FDEPLETE, FLIFESUP, FNRG, FBATTLE, + FNEG3, FNOVA, FSNOVAED, FABANDN, FDILITHIUM, + FMATERIALIZE, FPHASER, FLOST, FMINING, FDPLANET, + FPNOVA, FSSC, FSTRACTOR, FDRAY, FTRIBBLE, + FHOLE} FINTYPE ; +enum loctype {neither, quadrant, sector}; + +#ifndef TRUE +#define TRUE (1) +#define FALSE (0) +#endif + +#define IHR 'R' +#define IHK 'K' +#define IHC 'C' +#define IHS 'S' +#define IHSTAR '*' +#define IHP 'P' +#define IHB 'B' +#define IHBLANK ' ' +#define IHDOT '.' +#define IHQUEST '?' +#define IHE 'E' +#define IHF 'F' +#define IHT 'T' +#define IHWEB '#' +#define IHGREEN 'G' +#define IHYELLOW 'Y' +#define IHRED 'R' +#define IHDOCKED 'D' +#define IHDEAD 'Z' +#define IHMATER0 '-' +#define IHMATER1 'o' +#define IHMATER2 '0' + + +/* Function prototypes */ +void prelim(void); +void attack(int); +int choose(int); +void setup(int); +void score(void); +void atover(int); +int srscan(int); +void lrscan(void); +void phasers(void); +void photon(void); +void warp(int); +void doshield(int); +void dock(int); +void dreprt(void); +void chart(int); +void rechart(void); +void impuls(void); +void wait(void); +void setwrp(void); +void events(void); +void report(void); +void eta(void); +void help(void); +void abandn(void); +void finish(FINTYPE); +void dstrct(void); +void kaboom(void); +void freeze(int); +int thaw(void); +void plaque(void); +int scan(void); +#define IHEOL (0) +#define IHALPHA (1) +#define IHREAL (2) +void chew(void); +void chew2(void); +void skip(int); +void prout(char *, ...); +void proutn(char *, ...); +void stars(void); +void newqad(int); +int ja(void); +void cramen(int); +void crmshp(void); +char *cramlc(enum loctype, int, int); +double expran(double); +double Rand(void); +void iran(int, int *, int *); +#define square(i) ((i)*(i)) +void dropin(int, int*, int*); +void newcnd(void); +void sortkl(void); +void imove(void); +void ram(int, int, int, int); +void crmena(int, int, int, int, int); +void deadkl(int, int, int, int, int); +void timwrp(void); +void movcom(void); +void torpedo(double, double, int, int, double *, int, int); +void huh(void); +void pause_game(int); +void nova(int, int); +void snova(int, int); +void scom(int *); +void hittem(double *); +void prouts(char *, ...); +int isit(char *); +void preport(void); +void orbit(void); +void sensor(void); +void drawmaps(short); +void beam(void); +void mine(void); +void usecrystals(void); +void shuttle(void); +void deathray(void); +void debugme(void); +void attakreport(int); +void movetho(void); +void probe(void); +void iostart(void); +void setwnd(WINDOW *); +void warble(void); +void boom(int ii, int jj); +void tracktorpedo(int ix, int iy, int l, int i, int n, int iquad); +void cgetline(char *, int); +void waitfor(void); +void setpassword(void); +void commandhook(char *, int); +void makechart(void); +void enqueue(char *); + +/* mode arguments for srscan() */ +#define SCAN_FULL 1 +#define SCAN_REQUEST 2 +#define SCAN_STATUS 3 +#define SCAN_NO_LEFTSIDE 4 + +WINDOW *fullscreen_window; +WINDOW *srscan_window; +WINDOW *report_window; +WINDOW *lrscan_window; +WINDOW *message_window; +WINDOW *prompt_window; + +extern void clreol(void); +extern void clrscr(void); +extern void textcolor(int color); +extern void highvideo(void); + +enum COLORS { + DEFAULT, + BLACK, BLUE, GREEN, CYAN, RED, MAGENTA, BROWN, LIGHTGRAY, + DARKGRAY, LIGHTBLUE, LIGHTGREEN, LIGHTCYAN, LIGHTRED, LIGHTMAGENTA, YELLOW, WHITE +}; + +#define DAMAGED 128 /* marker for damaged ship in starmap */ + +#endif diff --git a/src/sstlinux.c b/src/sstlinux.c new file mode 100644 index 0000000..3c2ebbe --- /dev/null +++ b/src/sstlinux.c @@ -0,0 +1,27 @@ +#include "config.h" +#include "sstlinux.h" + +#ifdef HAVE_LINUX_KD_H + +#include +#include +#include +#include + +static int fd = 0; +#endif + +void sound(unsigned int freq) +{ +#ifdef HAVE_LINUX_KD_H + if(fd==0) fd=open("/dev/console", O_RDONLY); + if(fd>0) ioctl(fd, KDMKTONE, 1193180/freq + (0xFFFF<<16)); +#endif +} + +void nosound(void) +{ +#ifdef HAVE_LINUX_KD_H + if(fd>0) ioctl(fd, KDMKTONE, 0); +#endif +} diff --git a/src/sstlinux.h b/src/sstlinux.h new file mode 100644 index 0000000..1080f96 --- /dev/null +++ b/src/sstlinux.h @@ -0,0 +1,10 @@ +#ifndef __SSTLINUX_H +#define __SSTLINUX_H + +void sound(unsigned int); +void nosound(void); + +#define delay(x) usleep(x*1000) +#define randomize() srand((unsigned)time(NULL)) + +#endif diff --git a/sst-doc.xml b/sst-doc.xml deleted file mode 100644 index 8510e6d..0000000 --- a/sst-doc.xml +++ /dev/null @@ -1,1964 +0,0 @@ - - - -]> - - -Super Star Trek - - - - David - Matuzsek - - - Paul - Reynolds - - - Tom - Almy - - - Stas - Sergeev - - - Eric - Steven - Raymond - - - - -Permission is hereby granted for the copying, distribution, -modification and use of this program and associated documentation -for recreational purposes, provided that all references to the -authors are retained. However, permission is not and will not be -granted for the sale or promotional use of this program or program -documentation, or for use in any situation in which profit may be -considered an objective, since it is the desire of the authors to -respect the copyrights of the originators of Star Trek. - - - - - - - SSSSS U U PPPPP EEEEE RRRRR - S U U P P E R R - SSSSS U U PPPPP EEEE RRRRR - S U U P E R R - SSSSS UUUUU P EEEEE R R - - - SSSSSSS TTTTTTTT A RRRRRRR - SSSSSSSS TTTTTTTT AAA RRRRRRRR - SS TT AAA RR RR - SSSSSSS TT AA AA RR RR - SSSSSSS TT AA AA RRRRRRRR - SS TT AAAAAAA RRRRRRR - SS TT AAAAAAA RR RR - SSSSSSSS TT AA AA RR RR - SSSSSSS TT AA AA RR RR - - - - TTTTTTTT RRRRRRR EEEEEEEEE KK KK - TTTTTTTT RRRRRRRR EEEEEEEEE KK KK - TT RR RR EE KK KK - TT RR RR EEEEEE KKKKKK - TT RRRRRRRR EEEEEE KKKKK - TT RRRRRRR EE KK KK - TT RR RR EE KK KK - TT RR RR EEEEEEEEE KK KK - TT RR RR EEEEEEEEE KK KK - - - Produced For Your Enjoyment - - By - - David Matuszek - and - Paul Reynolds - - With Modifications By - Don Smith - - Resurrected By - Tom Almy - - Curses Interface By - Stas Sergeev - - SST 2K polishing and historical research by - Eric S. Raymond - - - -Introduction -The Organian Peace Treaty has collapsed, and the Federation is at war -with the Klingon Empire. Joining the Klingons against the Federation -are the members of the Romulan Star Empire. As commander of the -Starship U.S.S. Enterprise, your job is to wipe out the Klingon -invasion fleet and make the galaxy safe for democracy. - -Your battleground is the entire galaxy, which for convenience is -divided up into eight rows of eight quadrants each, like a -checkerboard. Rows are numbered from top to bottom, and columns are -numbered left to right, so quadrant 1 - 8 would be in the upper right -hand corner of the galaxy. - -During battle you will be concerned only with those enemies that -occupy the same quadrant as yourself. Quadrants are divided up into -sectors: ten rows of ten sectors each. Sectors are numbered in the -same way as quadrants, so the sector in the upper right corner is -sector 1 - 10. You have a short-range scanner which allows you to -look at the entire quadrant in a single display. - -Enemies recharge during your absence. If you leave a quadrant -containing a weakened enemy, when you return to that quadrant he will -be strong again. Also, each time you enter a quadrant, the positions -of everthing in the quadrant (except your ship) are randomized, to -save you the trouble of trying to remember where everything in the -quadrant is. Notice that this refers only to the positions of things -in the quadrant—the numbers of each kind of thing are not changed -(except for black holes and the Super-commander, which move around -the galaxy). If you kill something, it stays dead. - -The Romulans are not as serious a threat to the Federation as the -Klingons. For one thing, there are not as many of them. For -another, the Romulans are not as treacherous. However, Romulans are -not to be trifled with, especially when you are in violation of the -Romulan Neutral Zone. - -There are two kinds of Klingons: Ordinary Klingons, which are -bad enough, and Klingon Commanders, which are even worse. Commanders -are about three times stronger than ordinary Klingons. Commanders are -more resistant to your weapons. Commanders can move about during -battle while Ordinary Klingons stay put. And finally, Commanders have -a thing called a long-range tractor beam which they can -use, at random intervals, to yank you away from what you are doing -into their quadrant, to do battle with them. There is also a special -commander, called the Super-commander. This character -is so bad he is reserved for the Good, Expert, and Emeritus games. -Fortunately, there is just one Super-commander in a game. In addition -to the undesirable traits of Commanders, he can move from quadrant to -quadrant at will, seeking out and destroying your starbases and any -helpful planets he runs across. He also has a spy planted aboard your -ship, giving him valuable information about your condition. Using -this information, he can do dastardly things like tractor beam your -ship when you are in bad shape. And once you've been tractor beamed -by the Super-commander — - -But the advantages are not all on the side of the enemy. Your ship -is more powerful, and has better weapons. Besides, in the this -galaxy there are from two to five starbases, at which you can stop to -refuel and lick your wounds, safe from phaser attack or tractor -beams. But you had best not dally there too long, since time is not -on your side. The Klingons are not just after you; they are -attacking the entire Federation. There is always a finite time -left, which is how much longer the Federation can hold out if you -just sit on your fat behind and do nothing. As you wipe out -Klingons, you reduce the rate at which the invasion fleet weakens the -Federation, and so the time left until the Federation collapses may -actually increase. Since Klingons are the main threat to the -Federation, the Romulans do not figure into the time left. In -fact, you need not kill all the Romulans to win. If you can get all -the Klingons, the Federation will abide forever, and you have won the -game. - -Space is vast, and it takes precious time to move from one place to -another. In comparison, other things happen so quickly that we -assume they take no time at all. Two ways that time can pass are when -you move, or when you issue a command to sit still and rest for a -period of time. You will sometimes want to do the latter, since the -various devices aboard your starship may be damaged and require time -to repair. Of course, repairs can be made more quickly at a starbase -than than can in flight. - -In addition to Klingons, Romulans, and starbases, the galaxy -contains (surprise) stars. Mostly, stars are a nuisance and just get -in your way. You can trigger a star into going nova by shooting one -of your photon torpedoes at it. When a star novas, it does a lot of -dammage to anything immediately adjacent to it. If another star is -adjacent to a nova, it too will go nova. Stars may also occasionally -go supernova; a supernova in a quadrant destroys everything in the -quadrant andmakes the quadrant permanently uninhabitable. You may -jump over a quadrant containing a supernova when you -move, but you should not stop there. - -Supernovas may happen spontaneously, without provocation. If a -supernova occurs in the same quadrant you are in, your starship has an -emergency automatic override which picks some random -direction and some random warp factor, and tries to throw you clear of -the supernova. If the supernova occurs in some other quadrant, you -just get a warning message from starfleet about it (provided, of -course, that your subspace radio is working). - -Also a few planets are scattered through the galaxy. These can -sometimes be a great help since some of them will have dilithium -crystals, which are capable of replenishing the ship's energy -supply. You can either beam down to the planet surface using the -transporter, or take the shuttle craft Galileo. - -Finally, each quadrant will contain from zero to three black -holes. These can deflect or swallow torpedoes passing near them. They -also swallow enemy ships knocked into them. If your ship enters one -— - -Star Trek is a rich game, full of detail. These instructions are -written at a moderate level—no attempt has been made fully to -describe everything about the game, but there is quite a bit more -here than you need to get started. If you are new to the game, just -get a rough idea of the kinds of commands available, and start -playing. After a game or two you will have learned everthing -important, and the detailed command descriptions which follow will be -a lot more meaningful to you. - -You have weapons: phasers and photon torpedoes. You have a defense: -deflector shields. You can look at things: long-range scaners, -short-range scanners, and a star chart. You can move about, under -warp drive or impulse power. You can also dock at a starbase, rest -while repairs are being made, abandon ship, self destruct, or give up -and start a new game. - -The Klingons are waiting. - - -Starting the Game - -The program will ask you some setup questions. You can give it -command-line arguments that will be treated as answers. Any token -may be abbreviated to a unique prefix. - -The first question concerns whether you want a regullar, -tournament, or saved game. For discussion, see the description of the freeze command. - -The second question will concern the length of the game. -Longer games include more enemies. - -The third question will set the game's difficulty level. -You should probably start out at the novice level, even if you are -already familiar with one of the other versions of the Star Trek -game—but, of course, the level of game you play is up to you. If -you want to start at the Expert level, go ahead. It's your funeral. -The Emeritus game is strictly for masochists. - -The fourth question, new in SST2K, sets your game options. A -blank answer or 'fancy' enables all SST2K features. The option -'plain' disables a number of features (Tholians, planets & -dilithium, Thingies shooting back, deep-space-probes, Klingon ramming -and movement, time-warping through black holes, death-ray upgrade), -approximating the original CDC 6600 FORTRAN game from UT Austin. The -option 'almy' approximates Tom Almy's C translation from 1979, -disabling Thingies shooting back, base shields, and time-warping -through black holes. - - -How To Issue Commands - -When the game is waiting for you to enter a command it will -print out - - - COMMAND> - - -You may then type in your command. All you have to remember for each -command is the mnemonic. For example, if you want to move straight up -one quadrant, you can type in the mnemonic (case insensitive) - - - move - - -and the computer will prompt you with - - - Manual or automatic- - - -Say you type in manual. The computer then responds - - - X and Y displacements- - - -Now you type in 0 1 which specifies an X movement of zero and a Y -movement of one. - -When you have learned the commands, you can avoid being prompted -simply by typing in the information without waiting to be asked for -it. For example, in the above example, you could simply type in - - - move manual 0 1 - - -and it will be done. Or you could type in - - - move manual - - -and when the computer responds with the displacement prompt, you -can type in - - - 0 1 - - -and it will understand. - -You can abbreviate most mnemonics. For move, you can use any -of - - - move mov mo m - - -successfully. For your safety, certain critical commands (such as to -abandon ship) must be written out in full. Also, in a few cases two -or more commands begin with the same letter, and in this case that -letter refers to a particular one of the commands; to get the other, -your abbreviation must be two or more characters long. This sounds -complicated, but you will learn the abbreviations qGuickly enough. - -What this all boils down to is: - - -You can abbreviate practically anything -If you forget, the computer will prompt you -If you remember, you can type it all on one line - - -If you are part way through entering a command and you change your -minde, you can cancel the command by typing -1 as one of the -parameters, with the exception of the manual move command. - -If anything is not clear to you, experiment. The worst you can do is -lose a game or two. - - -List of Commands - -Short-Range Scan - - -Mnemonic: SRSCAN -Shortest abbreviation: S -Full commands: SRSCAN - SRSCAN NO - SRSCAN CHART - - - -If you are using the screen-oriented interface, this command is -suppressed; instead, a short-range scan will always be present on the -screen. - -The short-range scan gives you a considerable amount of information -about the quadrant your starship is in. A short-range scan is best -described by an example. - - - 1 2 3 4 5 6 7 8 9 10 - 1 * . . . . R . . . . Stardate 2516.3 - 2 . . . E . . . . . . Condition RED - 3 . . . . . * . B . . Position 5 - 1, 2 - 4 - 4 . . . S . . . . . . Life Support DAMAGED, Reserves=2.30 - 5 . . . . . . . K . . Warp Factor 5.0 - 6 . K . . . . . * . Energy 2176.24 - 7 . . . . . P . . . . Torpedoes 3 - 8 . . . . * . . . . . Shields UP, 42% 1050.0 units - 9 . * . . * . . . C . Klingons Left 12 - 10 . . . . . . . . . . Time Left 3.72 - - -The left part is a picture of the quadrant. The E at sector 2 - -4 represents the Enterprise; the B at sector 3 - 8 is a starbase. -There are ordinary Klingons (K) at sectors 5 - 8 and 6 - 2, and a -Klingon Commander (C) at 9 - 9. The (GULP) -Super-commander (S) is occupies sector 4 - 4, and a -Romulan (R) is at 1 - 6. A planet (P) is at sector 7 - 6. There are -also a large number of stars (*). The periods (.) are just empty -space—they are printed to help you get your bearings. Sector 6 -- 4 contains a black hole ( ). - -The information on the right is assorted status information. You -can get this alone with the STATUS command. The status information -will be absent if you type N after SRSCAN. Otherwise -status information will be presented. - -If you type C after SRSCAN, you will be given a -short-range scan and a Star Chart. - -Short-range scans are free. That is, they use up no energy and no -time. If you are in battle, doing a short-range scan does not give -the enemies another chance to hit you. You can safely do a -short-range scan anytime you like. - -If your short-range sensors are damaged, this command will only show -the contents of adjacent sectors. - -Status Report - - -Mnemonic: STATUS -Shortest abbreviation: ST - - - -If you are using the screen-oriented interface, this command is -suppressed; instead, a full status report will always be present on the -screen. - -This command gives you information about the current state of your -starship as follows: - - - -STARDATE - -The current date. A stardate is the same as a day. - - - -CONDITION - -There are four possible conditions: - - - DOCKED - docked at starbase. - - - RED - in battle. - - - YELLOW - low on energy (<1000 units) - - - GREEN - none of the above - - - - - -POSITION - -Quadrant is given first, then sector - - - -LIFE SUPPOR - -If ACTIVE then life support systems are functioning -normally. If on RESERVES the number is how many stardates your -reserve food, air, etc. will last—you must get repairs made or get to -starbase before your reserves run out. - - - -WARP FACTOR - -What your warp factor is currently set to. - - - -ENERGY - -The amount of energy you have left. If it drops to zero, you die. - - - -TORPEDOES - -How many photon torpedoes you have left. - - - -SHIELDS - -Whether your shields are up or down, how strong they are -(what percentage of a hit they can deflect), and shield energy. - - - -KLINGONS LEFT - -How many of the Klingons are still out there. - - - -TIME LEFT - -How long the Federation can hold out against the -present number of Klingons; that is, how long until the end -if you do nothing in the meantime. If you kill Klingons -quickly, this number will go up—if not, it will go down. If -it reaches zero, the federation is conquered and you lose. - - - - -Status information is free—it uses no time or energy, and -if you are in battle, the Klingons are not given another chance to hit -you. - -Status information can also be obtained by doing a short-range scan. -See the SRSCAN command for details. - -Each item of information can be obtained singly by requesting it. -See REQUEST command for details. - - -Long-Range Scan - - -Mnemonic: LRSCAN -Shortest abbreviation: L - - - -If you are using the screen-oriented interface, this command is -suppressed; instead, a long-range scan will always be present on the -screen. - -A long-range scan gives you general information about where you are -and what is around you. Here is an example output. - - - Long-range scan for Quadrant 5 - 1 - -1 107 103 - -1 316 5 - -1 105 1000 - - -This scan says that you are in row 5, column 1 of the 8 by 8 galaxy. -The numbers in the scan indicate how many of each kind of thing there -is in your quadrant and all adjacent quadrants. The digits are -interpreted as follows. - - - - - - Thousands digit: - 1000 indicates a supernova (only) - - - Hundreds digit: - number of Klingons present - - - Tens digit: - number of starbases present - - - Ones digit: - number of stars present - - - - - -For example, in your quadrant (5 - 1) the number is 316, which -indicates 3 Klingons, 1 starbase, and 6 stars. The long-range -scanner does not distinguish between ordinary Klingons and Klingon -command ships. If there is a supernova, as in the quadrant below and -to your right (quadrant 6 - 2), there is nothing else in the -quadrant. - -Romulans possess a cloaking device which prevents -their detection by long-range scan. Because of this fact, Starfleet -Command is never sure how many Romulans are out there. -When you kill the last Klingon, the remaining Romulans surrender to -the Federation. - -Planets are also undetectable by long-range scan. The only way to -detect a planet is to find it in your current quadrant with the -short-range sensors. - -Since you are in column 1, there are no quadrants to your left. The -minus ones indicate the negative energy barrier at the edge of the -galaxy, which you are not permitted to cross. - -Long-range scans are free. They use up no energy or time, and can be -done safely regardless of battle conditions. - -Star Chart - - -Mnemonic: CHART -Shortest abbreviation: C - - -As you proceed in the game, you learn more and more about what things -are where in the galaxy. When ever you first do a scan in a quadrant, -telemetry sensors are ejected which will report any changes in the -quadrant(s) back to your ship, providing the sub-space radio is -working. Spock will enter this information in the chart. If the radio -is not working, Spock can only enter new information discovered from -scans, and information in other quadrants may be obsolete. - -The chart looks like an 8 by 8 array of numbers. These numbers are -interpreted exactly as they are on a long-range scan. A period (.) in -place of a digit means you do not know that information yet. For -example, ... means you know nothing about the quadrant, while .1. -menas you know it contains a base, but an unknown number of Klingons -and stars. - -Looking at the star chart is a free operation. It costs neither time -nor energy, and can be done safely whether in or out of battle. - - -Damage Report - - -Mnemonic: DAMAGES -Shortest abbreviation: DA - - -At any time you may ask for a damage report to find out what devices -are damaged and how long it will take to repair them. Naturally, -repairs proceed faster at a starbase. - -If you suffer damages while moving, it is possible that a subsequent -damage report will not show any damage. This happens if the time -spent on the move exceeds the repair time, since in this case the -damaged devices were fixed en route. - -Damage reports are free. They use no energy or time, and can be done -safely even in the midst of battle. - - -Move Under Warp Drive - - -Mnemonic: MOVE -Shortest abbreviation: M -Full command: MOVE MANUAL <displacement> - MOVE AUTOMATIC <destination> - - -This command is the usual way to move from one place to another -within the galaxy. You move under warp drive, according to the -current warp factor (see WARP FACTOR). - -There are two command modes for movement: MANUAL and AUTOMATIC. -The manual mode requires the following format: - - - MOVE MANUAL <deltax> <deltay> - - -<deltax> and <deltay> are the horizontal and vertical -displacements for your starship, in quadrants; a displacement of one -sector is 0.1 quadrants. Specifying <deltax> and <deltay> -causes your ship to move in a straight line to the specified -destination. If <deltay> is omitted, it is assumed zero. For -example, the shortest possible command to move one sector to the right -would be - - - M M .1 - - -The following examples of manual movement refer to the short-range -scan shown earlier. - - - Destination Sector Manual Movement command - 3 - 1 M M -.3 -.1 - 2 - 1 M M -.3 - 1 - 2 M M -.2 .1 - 1 - 4 M M 0 .1 - (leaving quadrant) M M 0 .2 - - -The automatic mode is as follows: - - - MOVE AUTOMATIC <qrow> <qcol> <srow> <scol> - - -<para>where <qrow> and <qcol> are the row and column -numbers of the destination quadrant, and <srow> and <scol> -are the row and column numbers of the destination sector in that -quadrant. This command also moves your ship in a straight line path -to the destination. For moving within a quadrant, <qrow> and -<qcol> may be omitted. For example, to move to sector 2 - 9 in -the current quadrant, the shortest command would be - - - M A 2 9 - - -To move to quadrant 3 - 7, sector 5 - 8, type - - - M A 3 7 5 8 - - -and it will be done. In automatic mode, either two or four numbers -must be supplied. - -Automatic mode utilizes the ship's battle computer. If the -computer is damaged, manual movement must be used. - -If warp engines are damaged less than 10 stardates (undocked) you can -still go warp 4. - -It uses time and energy to move. How much time and how much energy -depends on your current warp factor, the distance you move, and -whether your shields are up. The higher the warp factor, the faster -you move, but higher warp factors require more energy. You may move -with your shields up, but this doubles the energy required. - -You can move within a quadrant without being attacked if you just -entered the quadrant or have been attacked since your last move -command. This enables you to move and hit them before they -retaliate. - - -Warp Factor - - -Mnemonic: WARP -Shortest abbreviation: W -Full command: WARP <number> - - -Your warp factor controls the speed of your starship. The larger the -warp factor, the faster you go and the more energy you use. - -Your minimum warp factor is 1.0 and your maximum warp factor is 10.0 -(which is 100 times as fast and uses 1000 times as much energy). At -speeds above warp 6 there is some danger of causing damage to your -warp engines; this damage is larger at higher warp factors and also -depends on how far you go at that warp factor. - -At exactly warp 10 there is some probability of entering a -so-called time warp and being thrown foward or backward -in time. The farther you go at warp 10, the greater is the -probability of entering the time warp. - - -Impulse Engines - - -Mnemonic: IMPULSE -Shortest abbreviation: I -Full command: IMPULSE MANUAL <displacement> - IMPULSE AUTOMATIC <destination> - - -The impulse engines give you a way to move when your warp engines are -damaged. They move you at a speed of 0.95 sectors per stardate, -which is the equivalent of a warp factor of about 0.975, so they are -much too slow to use except in emergencies. - -Movement commands are indicated just as in the MOVE command. - -The impulse engines require 20 units of energy to engage, plus 10 -units per sector (100 units per quadrant) traveled. It does not cost -extra to move with the shields up. - - -Deflector Shields - - -Mnemonic: SHIELDS -Shortest abbreviation: SH -Full commands: SHIELDS UP - SHIELDS DOWN - SHIELDS TRANSFER <amount of energy to transfer> - - -Your deflector shields are a defensive device to protect you from -Klingon attacks (and nearby novas). As the shields protect you, they -gradually weaken. A shield strength of 75%, for example, means that -the next time a Klingon hits you, your shields will deflect 75% of -the hit, and let 25% get through to hurt you. - -It costs 50 units of energy to raise shields, nothing to lower them. -You may move with your shields up; this costs nothing under impulse -power, but doubles the energy required for warp drive. - -Each time you raise or lower your shields, the Klingons have another -chance to attack. Since shields do not raise and lower -instantaneously, the hits you receive will be intermediate between -what they would be if the shields were completely up or completely -down. - -You may not fire phasers through your shields. However you may -use the high-speed shield control to lower shields, -fire phasers, and raise the shields again before the Klingons can -react. Since rapid lowering and raising of the shields requires more -energy than normal speed operation, it costs you 200 units of energy -to activate this control. It is automatically activated when you fire -phasers while shields are up. You may fire photon torpedoes, but they -may be deflected considerably from their intended course as they pass -through the shields (depending on shield strength). - -You may transfer energy beteen the ship's energy (given as -Energy in the status) and the shields. The word -TRANSFER may be abbreviated T. The -ammount of energy to transfer is the number of units of energy you -wish to take from the ship's energy and put into the shields. If you -specify an negative number, energy is drained from the shields to the -ship. Transfering energy constitutes a turn. If you transfer energy -to the shields while you are under attack, they will be at the new -energy level when you are next hit. - -Enemy torpedoes hitting your ship explode on your shields (if they -are up) and have essentially the same effect as phaser hits. - - -Phasers - - -Mnemonic: PHASERS -Shortest abbreviation: P -Full commands: PHASERS AUTOMATIC <AMOUNT TO FIRE> <NO> - PHASERS <AMOUNT TO FIRE> <NO> - PHASERS MANUAL <NO> <AMOUNT 1> <AMOUNT 2>...<AMOUNT N> - - -Phasers are energy weapons. As you fire phasers at Klingons, you -specify an amount to fire which is drawn from your -energy reserves. The amount of total hit required to kill an enemy is -partly random. but also depends on skill level. - -The average hit required to kill an ordinary Klingon varies from 200 -units in the Novice game to 250 units in the Emeritus game. -Commanders normally require from 600 (Novice) to 700 (Emeritus). The -Super-commander requres from 875 (Good) to 1000 (Emeritus). Romulans -require an average of 350 (Novice) to 450 (Emeritus). - -Hits on enemies are cumulative, as long as you don't leave the -quadrant. - -In general, not all that you fire will reach the Klingons. The -farther away they are, the less phaser energy will reach them. If a -Klingon is adjacent to you, he will receive about 90% of the phaser -energy directed at him; a Klingon 5 sectors away will receive about -60% and a Klingon 10 sectors away will receive about 35%. There is -some randomness involved, so these figures are not exact. Phasers -have no effect beyond the boundaries of the quadrant you are in. - -Phasers may overheat (and be damaged) if you fire too large a burst -at once. Firing up to 1500 units is safe. From 1500 on up the -probability of overheat increases with the amount fired. - -If phaser firing is automatic, the computer decides how to -divide up your <amount to fire> among the Klingons present. If -phaser firing is manual, you specify how much energy to fire at each -Klingon present (nearest first), rather than just specifying a total -amount. You can abreviate MANUAL and -AUTOMATIC to one or more letters; if you mention -neither, automatic fire is usually assumed. - -Battle computer information is available by firing phasers manually, -and allowing the computer to prompt you. If you enter zero for the -amount to fire at each enemy, you will get a complete report, without -cost. The battle computer will tell you how much phaser energy to -fire at each enemy for a sure kill. This information appears in -parentheses prior to the prompt for each enemy. Since the amount is -computed from sensor data, if either the computer or the S.R. sensors -are damaged, this information will be unavailable, and phasers must -be fired manually. - -A safety interlock prevents phasers from being fired through -the shields. If this were not so, the shields would contain your fire -and you would fry yourself. However, you may utilize the -high-speed shield control to drop shields, fire -phasers, and raise shields before the enemy can react. Since it takes -more energy to work the shields rapidly with a shot, it costs you 200 -units of energy each time you activate this control. It is -automatically activated when you fire phasers while the shields are -up. By specifying the <no> option, shields are not raised after -firing. - -Phasers have no effect on starbases (which are shielded) or on -stars. - - -Report - - -Mnemonic: REPORT -Shortest abbreviation: REP - - -This command supplies you with information about the state of the -current game. Its purpose is to remind you of things that you have -learned during play, but may have forgotten, and cannot otherwise -retrieve if you are not playing at a hard-copy terminal. - -You are told the following things: - - -The length and skill level of the game you are playing -The original number of Klingons -How many Klingons you have destroyed -Whether the Super-Commander has been destroyed -How many bases have been destroyed -How many bases are left -What bases (if any) are under attack; your subspace radio -must have been working since the attack to get this -information. -How many casualties you have suffered -How many times you have called for help. - - -This same information is automatically given to you when you start to -play a frozen game. - - -Computer - - -Mnemonic: COMPUTER -Shortest abbreviation: CO - - -This command allows using the ship's computer (if functional) to -calculate travel times and energy usage. - - -Photon Torpedoes - - -Mnemonic: PHOTONS -Shortest abbreviation: PHO -Full commands: PHOTONS <NUMBER> <TARG1> <TARG2> <TARG3> - - -Photon torpedoes are projectile weapons—you either hit what you aim -at, or you don't. There are no partial hits. - -One photon torpedo will usually kill one ordinary Klingon, but it -usually takes about two for a Klingon Commander. Photon torpedoes -can also blow up stars and starbases, if you aren't careful. - -You may fire photon torpedoes singly, or in bursts of two or three. -Each torpedo is individually targetable. The computer will prompt -you, asking for the target sector for each torpedo. Alternately, you -may specify each target in the command line. - -Photon torpedoes cannot be aimed precisely—there is always some -randomness involved in the direction they go. Photon torpedoes may -be fired with your shields up, but as they pass through the shields -they are randomly deflected from their intended course even more. - -Photon torpedoes are proximity-fused. The closer they explode to the -enemy, the more damage they do. There is a hit window about one -sector wide. If the torpedo misses the hit window, it does not -explode and the enemy is unaffected. Photon torpedoes are only -effective within the quadrant. They have no effect on things in -adjacent quadrants. - -If more than one torpedo is fired and only one target sector is -specified, all torpedoes are fired at that sector. For example, to -fire two torpedoes at sector 3 - 4, you type - - - PHO 2 3 4 (or) PHO 2 3 4 3 4 - - -To fire torpedoes at, consecutively, sectors 2 - 6, 1 - 10, and 4 - -7, type - - - PHO 3 2 6 1 10 4 7 - - -There is no restriction to fire directly at a sector. For example, -you can enter - - - PHO 1 3 2.5 - - -to aim between two sectors. However, sector numbers must be 1 to 10 -inclusive. - - -Dock at Starbase - - -Mnemonic: DOCK -Shortest abbreviation: D - - -You may dock your starship whenever you are in one of the eight -sector positions immediately adjacent to a starbase. When you dock, -your starship is resupplied with energy, shield energy photon -torpedoes, and life support reserves. Repairs also proceed faster at -starbase, so if some of your devices are damaged, you may wish to stay -at base (by using the REST command) until they are -fixed. If your ship has more than its normal maximum energy (which -can happen if you've loaded crystals) the ship's energy is not -changed. - -You may not dock while in standard orbit around a planet. - -Starbases have their own deflector shields, so you are completely -safe from phaser attack while docked. You are also safe from -long-range tractor beams. - -Starbases also have both short and long range sensors, which you can -use if yours are broken. There's also a subspace radio to get -information about happenings in the galaxy. Mr. Spock will update the -star chart if your ask for it while docked and your own radio is dead. - - -Rest - - -Mnemonic: REST -Shortest abbreviation: R -Full command: REST <NUMBER OF STARDATES> - - -This command simply allows the specified number of stardates to go -by. This is useful if you have suffered damages and wish to wait -until repairs are made before you go back into battle. - -It is not generally advisable to rest while you are under attack by -Klingons. - - -Call Starbase for Help - - -Mnemonic: MAYDAY -(No abbreviation) - - -[Originally, this command was called HELP, but -these days that might be misconstrued as an attempt to browae built-in -documentation! In some later versions it was CALL.] - -When you get into serious trouble, you may call a starbase for -help. Starbases have a device called a long-range transporter -beam which they can use to teleport you to base. This works -by dematerializing your starship at its current position and -re-materializing it adjacent to the nearest starbase. Teleportation -is instantaneous, and starbase supplies the required energy—all -you have to do is let them know (via subspace radio) that you need to -be rescued. - -This command should be employed only when absolutely necessary. In -the first place, calling for help is an admission on your part that -you got yourself into something you cannot get yourself out of, and -you are heavily penalized for this in the final scoring. Secondly, -the long-range transporter beam is not reliable—starbase can always -manage to dematerialize your starship, but (depending on distance) -may or may not be able to re-materialize you again. The long-range -transporter beam has no absolute maximum range; if you are in the -same quadrant as a starbase, you have a good chance (about 90%) of -re-materializing successfully. your chances drop to roughly 50-50 at -just over 3 quadrants. - - -Abandon Ship - - -Mnemonic: ABANDON -(no abbreviation) - - -You may abandon the Enterprise if necessary. If there is still a -starbase in the galaxy, you will be sent there and put in charge of a -weaker ship, the Faerie Queene. - -The Faerie Queene cannot be abandoned. - - -Self-Destruct - - -Mnemonic: DESTRUCT -(no abbreviation) - - -You may self-destruct, thus killing yourself and ending the game. If -there are nearby Klingons, you may take a few of them with you (the -more energy you have left, the bigger the bang). - -In order to self-destruct you must remember the password you typed in -at the beginning of the game. - - -Quit Game - - -Mnemonic: QUIT -(no abbreviation) - - -Immediately cancel the current game; no conclusion is reached. You -will be given an opportunity to start a new game or to leave the Star -Trek program. - - -Sensor-Scan - - -Mnemonic: SENSORS -Shortest abbreviation: SE - - -Utilizing the short-range sensors, science officer Spock gives you a -readout on any planet in your quadrant. Planets come in three -classes: M, N, and O. Only class M planets have earth-like -conditions. Spock informs you if the planet has any dilithium -crystals. Sensor scans are free. - - -Enter Standard Orbit - - -Mnemonic: ORBIT -Shortest abbreviation: O - - -To land on a planet you must first be in standard orbit. You achieve -this in a manner similar to docking at starbase. Moving to one of -the eight sector positions immediately adjacent to the planet, you -give the orbit command which puts your ship into standard orbit about -the planet. Since this is a maneuver, a small amount of time is -used; negligible energy is required. If enemies are present, they -will attack. - - -Transporter Travel - - -Mnemonic: TRANSPORT -Shortest abbreviation: T - - -The transporter is a device which can convert any physical object -into energy, beam the energy through space, and reconstruct the -physical object at some destination. Transporting is one way to land -on a planet. Since the transporter has a limited range, you must be -in standard orbit to beam down to a planet. Shields must be down -while transporting. - -The transport command is used to beam a landing party onto a planet -to mine dilithium crystals. Each time the command is given the -landing party (which you lead) moves from the ship to the planet, or -vice-versa. - -You are advised against needless transporting, since like all -devices, the transporter will sometimes malfunction. - -The transporter consumes negligible time and energy. Its use does -not constitute a turn. - - -Shuttle Craft - - -Mnemonic: SHUTTLE -Shortest abbreviation: SHU - - -An alternate way to travel to and from planets. Because of limited -range, you must be in standard orbit to use the shuttle craft, named -"Galileo". Shields must be down. - -Unlike transporting, use of the shuttle craft does constitute a -turn since time is consumed. The time naturally -depends on orbit altitude, and is equal to 3.0e-5 times altitude. -Shuttling uses no ship energy. - -You should use the same travel device going from the planet to the -ship as you use to go from the ship to the planet. However it is -possible to transport to the planet and have the Galileo crew come -and pick your landing party up, or to take the Galileo to the planet -and then transport back, leaving the shuttle craft on the planet. - - -Mine Dilithium Crystals - - -Mnemonic: MINE -Shortest abbreviation: MI - - -Once you and your mining party are on the surface of a planet which -has dilithium crystals, this command will dig them for you. - -Mining requires time and constitutes a turn. No -energy is used. Class M planets require 0.1 to 0.3 stardates to mine. -Class N planets take twice as long, and class O planets take three -times as long. - -Dilithium crystals contain enormous energy in a form that is readily -released in the ship's power system. It is an excellent idea to mine -them whenever possible, for use in emergencies. You keep the -crystals until the game is over or you abandon ship when not at a -starbase. - - -Load Dilithium Crystals - - -Mnemonic: CRYSTALS -Shortest abbreviation: CR - - -This is a very powerful command which should be used with caution. -Once you have dilithium crystals aboard ship, this command will -instruct engineering officer Scott and Mr. Spock to place a raw -dilithium crystal into the power channel of the ship's -matter-antimatter converter. When it works, this command will -greatly boost the ship's energy. - -Because the crystals are raw and impure, instabilities can occur in -the power channel. Usually Scotty can control these. When he -cannot, the results are disastrous. Scotty will use those crystals -that appear to be most stable first. - -Since using raw dilithium crystals for this purpose entails -considerable risk, Starfleet Regulations allow its use only during -"condition yellow". No time or energy is used. - - -Planet Report - - -Mnemonic: PLANETS -Shortest abbreviation: PL - - -Mr. Spock presents you a list of the available information on planets -in the galaxy. Since planets do not show up on long-range scans, the -only way to obtain this information is with the SENSORS command. - - -Freeze - - -Mnemonic: FREEZE -(no abbreviation) -Full command: FREEZE <FILE NAME> - - -The purpose of the FREEZE command is to allow a player to save the -current state of the game, so that it can be finished later. A -plaque may not be generated from a frozen game. A file with the -specified <file name> and type '.TRK' is created (if necessary) in -the current directory, and all pertinent information about the game -is written to that file. The game may be continued as usual or be -terminated at the user's option. - -To restart a game created by the FREEZE command, -the user need only type FROZEN in response to the -initial question about the type of game desired, followed by the -<file name>. - -NOTE: A tournament game is like a frozen game, -with the following differences. (1) Tournament games always start -from the beginning, while a frozen game can start at any point. (2) -Tournament games require only that the player remember the name or -number of the tournament, while the information about a frozen game -must be kept on a file. Tournament games can be frozen, but then they -behave like regular frozen games. - -A point worth noting is that 'FREEZE' does not save the seed for the -random number generator, so that identical actions after restarting -the same frozen game can lead to different results. However, -identical actions after starting a given tournament game always lead -to the same results. - - -Request - - -Mnemonic: REQUEST -Shortest abbreviation: REQ -Full command: REQUEST <ITEM> - - - -If you are using the screen-oriented interface, this command is -suppressed; instead, a full status report will always be present on the -screen. - -This command allows you to get any single piece of information -from the <STATUS> command. <ITEM> specifies which -information as follows: - - - - - - Information - Mnemonic for <item> - Shortest Abbreviation - - - -STARDATE DATE D -CONDITION CONDITION C -POSITION POSITION P -LIFE SUPPORTLSUPPORT L -WARP FACTOR WARPFACTORW -ENERGY ENERGY E -TORPEDOES TORPEDOES T -SHIELDS SHIELDS S -KLINGONS LEFTKLINGONS K -TIME LEFT TIME TI -BASES LEFT BASES BA - - - - - -Experimental Death Ray - - -Mnemonic: DEATHRAY -(No abbreviation) - - -This command should be used only in those desperate cases where -you have absolutely no alternative. The death ray uses energy to -rearrange matter. Unfortunately, its working principles are not yet -thoroughly understood, and the results are highly -unpredictable. - -The only good thing that can result is the destruction of all -enemies in your current quadrant. This will happen about 70% of the -time. Only enemies are destroyed; starbases, stars, and planets are -unaffected. - -Constituting the remaining 30% are results varying from bad to -fatal. - -The death ray requires no energy or time, but if you survive, enemies -will hit you. - -The Faerie Queene has no death ray. - -If the death ray is damaged in its use, it must be totally replaced. -This can only be done at starbase. Because it is a very complex -device, it takes 9.99 stardates at base to replace the death ray. -The death ray cannot be repaired in flight. - - -Launch Deep Space Probe - - -Mnemonic: PROBE -Shortest abbreviation: PR -Full command: PROBE <ARMED> MANUAL <displacement> - PROBE <ARMED> AUTOMATIC <destination> - - -The Enterprise carries a limited number of Long Range Probes. These -fly to the end of the galaxy and report back a count of the number of -important things found in each quadrant through which it went. The -probe flies at warp 10, and therefore uses time during its flight. -Results are reported immediately via subspace radio and are recorded -in the star chart. - -The probe can also be armed with a NOVAMAX warhead. When launched -with the warhead armed, the probe flies the same except as soon as it -reaches the target location, it detonates the warhead in the heart of -a star, causing a supernova and destroying everything in the -quadrant. It then flies no further. There must be a star in the -target quadrant for the NOVAMAX to function. - -The probe can fly around objects in a galaxy, but is destroyed if it -enters a quadrant containing a supernova, or if it leaves the galaxy. - -The target location is specified in the same manner as the MOVE -command, however for automatic movement, if only one pair of -coordinates are specified they are assumed to be the quadrant and not -the sector in the current quadrant! - -The Faerie Queene has no probes. - - -Emergency Exit - - -Mnemonic: EMEXIT -Shortest abbreviation: E - - -This command provides a quick way to exit from the game when you -observe a Klingon battle cruiser approaching your terminal. Its -effect is to freeze the game on the file 'EMSAVE.TRK' in your current -directory, erase the screen, and exit. - -Of course, you do lose the chance to get a plaque when you use this -maneuver. - - -Ask for Help - - -Mnemonic: HELP -Full command: HELP <command> - - -This command reads the appropriate section from the SST.DOC file, -providing the file is in the current directory. - - - -Miscellaneous Notes - -Starbases can be attacked by either commanders or by the -Super-Commander. When this happens, you will be -notified by subspace radio, provided it is working. The message will -inform you how long the base under attack can last. Since the -Super-Commander is more powerful than an ordinary -commander, he can destroy a base more quickly. - -The Super-Commander travels around the galaxy at -a speed of about warp 6 or 7. His movement is strictly time based; -the more time passes, the further he can go. - -Scattered through the galaxy are certain zones of control, -collectively designated the Romulan Neutral Zone. Any -quadrant which contains Romulans without Klingons is part of the -Neutral Zone, except if a base is present. Since Romulans do not show -on either the long-range scan or the star chart, it is easy for you to -stumble into this zone. When you do, if your subspace radio is -working, you will receive a warning message from the Romulan, politely -asking you to leave. - -In general, Romulans are a galactic nuisance. - -The high-speed shield control is fairly reliable, but it has been -known to malfunction. - -You can observe the galactic movements of the -Super-Commander on the star chart, provided he is in -territory you have scanned and your subspace radio is working. - -Periodically, you will receive intelligence reports from -starfleet command, indicating the current quadrant of the -Super-Commander. Your subspace radio must be working, -of course. - -Each quadrant will contain from 0 to 3 black holes. Torpedoes -entering a black hole disappear. In fact, anything entering a black -hole disappears, permanently. If you can displace an enemy into one, -he is a goner. Black holes do not necessarily remain in a quadrant. -they are transient phenomena. - -Commanders will ram your ship, killing themselves and inflicting -heavy damage to you, if they should happen to decide to advance into -your sector. - -You can get a list of commands by typing -COMMANDS. - - -Scoring - -Scoring is fairly simple. You get points for good things, and you -lose points for bad things. - -You gain— - - -10 points for each ordinary Klingon you kill, -50 points for each commander you kill, -200 points for killing the Super-Commander, -20 points for each Romulan killed, -1 point for each Romulan captured. - -100 times your average Klingon/stardate kill rate. If you lose -the game, your kill rate is based on a minimum of 5 stardates. - - -You get a bonus if you win the game, based on your rating: -Novice=100, Fair=200, Good=300, Expert=400, Emeritus=500. - - - -You lose— - - -200 points if you get yourself killed, -100 points for each starbase you destroy, -100 points for each starship you lose, -45 points for each time you had to call for help, -10 points for each planet you destroyed, -5 points for each star you destroyed, and -1 point for each casualty you incurred. - - -In addition to your score, you may also be promoted one grade in rank -if you play well enough. Promotion is based primarily on your -Klingon/stardate kill rate, since this is the best indicator of -whether you are ready to go on to the next higher rating. However, -if you have lost 100 or more points in penalties, the required kill -rate goes up. Normally, the required kill rate is 0.1 * skill * -(skill + 1.0) + 0.1, where skill ranges from 1 for Novice to 5 for -Emeritus. - -You can be promoted from any level. There is a special -promotion available if you go beyond the Expert range. -You can also have a certificate of merit printed with your name, date, -and Klingon kill rate, provided you are promoted from either the -Expert or Emeritus levels. This -plaque requires a 132 column printer. You may need -print the certificate to a file, import it into your word processor, -selecting Courier 8pt font, and then print in landscape -orientation. - - -Handy Reference Page - - - ABBREV FULL COMMAND DEVICE USED - ------ ------------ ----------- - ABANDON ABANDON shuttle craft - C CHART (none) - CO COMPUTER computer - CR CRYSTALS (none) - DA DAMAGES (none) - DEATHRAY DEATHRAY (none) - DESTRUCT DESTRUCT computer - D DOCK (none) - E EMEXIT (none) - FREEZE FREEZE <FILE NAME> (none) - I IMPULSE <MANUAL> <DISPLACEMENT> impulse engines - IMPULSE AUTOMATIC <DESTINATION> impulse engines and computer - L LRSCAN long-range sensors - MAYDAY MAYDAY (for help) subspace radio - MI MINE (none) - M MOVE <MANUAL> <DISPLACEMENT> warp engines - MOVE AUTOMATIC <DESTINATION> warp engines and computer - O ORBIT warp or impulse engines - P PHASERS <TOTAL AMOUNT> phasers and computer - PHASERS AUTOMATIC <TOTAL AMOUNT> phasers, computer, sr sensors - PHASERS MANUAL <AMT1> <AMT2> ... phasers - PHO PHOTONS <NUMBER> <TARGETS> torpedo tubes - PL PLANETS (none) - PR PROBE <ARMED> <MANUAL> <DISPLACEMENT> probe launcher, radio - PROBE <ARMED> AUTOMATIC <DESTINATION> launcher, radio, computer - REP REPORT (none) - REQ REQUEST (none) - R REST <NUMBER OF STARDATES> (none) - QUIT QUIT (none) - S SRSCAN <NO or CHART> short-range sensors - SE SENSORS short-range sensors - SH SHIELDS <UP, DOWN, or TRANSFER> deflector shields - SHU SHUTTLE shuttle craft - ST STATUS (none) - T TRANSPORT transporter - W WARP <FACTOR> (none) - - L. R. Scan: thousands digit: supernova - hundreds digit: Klingons - tens digit: starbases - ones digit: stars - period (.): digit not known (star chart only) - -Courses are given in manual mode in X - Y displacements; in automatic - mode as destination quadrant and/or sector. Manual mode is default. -Distances are given in quadrants. A distance of one sector is 0.1 quadrant. -Ordinary Klingons have about 400 units of energy, Commanders about - 1200. Romulans normally have about 800 units of energy, and the - (GULP) "Super-Commander" has about 1800. -Phaser fire diminishes to about 60 percent at 5 sectors. Up to 1500 - units may be fired in a single burst without danger of overheat. -Warp 6 is the fastest safe speed. At higher speeds, engine damage - may occur. At warp 10 you may enter a time warp. -Shields cost 50 units of energy to raise, and double the power - requirements of moving under warp drive. Engaging the high-speed - shield control requires 200 units of energy. -Warp drive requires (distance)*(warp factor cubed) units of energy - to travel at a speed of (warp factor squared)/10 quadrants per stardate. -Impulse engines require 20 units to warm up, plus 100 units per - quadrant. Speed is just under one sector per stardate. - - - -Game History and Modifications - -Origins - -The original Star Trek seems to have been written by Mike -Mayfield at the beginning of the 1970s. His first version was in -BASIC for a Sigma 7 in 1971; in 1972 he rewrote it in Hewlett Packard -BASIC. The source is available on the -SST2K website. In January 1975 it became part of the DECUS library -under the name SPACWR. - -While some people claim to have recollections of playing Trek -games in the late 1960s, the earlier ones seem actually to have been -variants of - -SPACEWAR, the earlier space-combat game on the -PDP-1. Mayfield wrote -in 2000 that he invented the Trek-style galactic grid, and the -evidence seems to back that up. Some of the confusion probably stems -from the fact that Mayfield's original and several early descendants -were distributed under the name SPACWR. - -Many different versions radiated from Mayfield's original; most -of the ones in BASIC are descended from a SPACWR version that David -Ahl published in 101 BASIC Computer Games, -July 1973. This was a port of Mayfield's version obtained from the HP -Contributed Programs library. - -Our SST2K is descended from a Taurus BASIC program by Grady -Hicks dated 5 April 1973. This does not appear to have been derived -from Ahl's SPACWR. The header says "GENERAL IDEA STOLEN FROM -PENN. U.", and the game has several features not present in SPACEWR: -notably, the Death Ray, ramming, and the Klingon summons to surrender. -And, of course, it predates Ahl's book. The source is available on the -SST2K website. - -Dave Matuszek, Paul Reynolds et. al. at UT Austin played the -Hicks version on a CDC6600, but disliked the long load time and -extreme slowness of the BASIC program. (David Matuszek notes that the -Hicks version he played had a habit of throwing long -quotes from Marcus Aurelius at the users, a feature he found -intolerable on a TTY at 110 baud. It must, therefore, have been -rather longer than the one we have.) The Austin crew proceeded to -write their own Trek game, loosely based on the Hicks version, in -CDC6600 FORTRAN. At that time, it was just called "Star Trek"; the -"Super" was added by later developers. In the rest of this history -we'll call it the "UT FORTRAN" version. - -At the time the UT FORTRAN source was last translated to C it emitted -the message "Latest update-21 Sept 78". Thus, it actually predated -(and may have influenced) the best-known BASIC version, the "Super -Star Trek" published by David Ahl in his November 1978 sequel -BASIC Computer Games. - -This 1978 "Super Star Trek" had been reworked by Robert Leedom and -friends from (according to Leedom) Mayfield's HP port. There is -internal evidence to suggest that at least some features of Leedom's -SST may have derived from the UT FORTRAN version. In particular, Dave -Matuszek recalls implementing command words to replace the original -numeric command codes, a feature Leedom's SST also had but the -1973 and 1975 SPACWRs did not. - -One signature trait of the UT FORTRAN game and its descendants -is that the sectors are 10x10 (rather than the 8x8 in Mike Mayfield's -1972 original and its BASIC descendants). The UT FORTRAN version also -preserves the original numbered quadrants rather than the -astronomically-named quadrants introduced in Ahl's SST and its -descendants. - - - - -Eric Allman's BSD Trek game is one of these, also descended from -the UT FORTRAN version via translation to C. However, the mainline version -(now SST2K) has had a lot more stuff folded into it over the years -— deep space probes, dilithium mining, the Tholian Web, and so -forth. - - -Tom Almy's story - -Back in (about) 1977 I got a copy of the Super Star Trek game for -the CDC 6600 mainframe computer. Someone had converted it to PDP-11 -Fortran but couldn't get it to run because of its size. I modified -the program to use overlays and managed to shoehorn it in on the 56k -byte machine. - -I liked the game so much I put some time into fixing bugs, mainly -what could be called continuity errors and loopholes in the game's -logic. We even played a couple tournaments. - -In 1979, I lost access to that PDP-11. I did save the source code -listing. In 1995, missing that old friend, I started converting the -program into portable ANSI C. It's been slow, tedious work that took -over a year to accomplish. - -In early 1997, I got the bright idea to look for references to -Super Star Trek on the World Wide Web. There weren't -many hits, but there was one that came up with 1979 Fortran sources! -This version had a few additional features that mine didn't have, -however mine had some feature it didn't have. So I merged its features -that I liked. I also took a peek at the DECUS version (a port, less -sources, to the PDP-10), and some other variations. - -Modifications I made: - -Compared to original version, I've changed the -help command to call and the -terminate command to quit to better -match user expectations. The DECUS version apparently made those -changes as well as changing freeze to -save. However I like freeze. - -I added EMEXIT from the 1979 version. - -That later version also mentions srscan and lrscan working when -docked (using the starbase's scanners), so I made some changes here -to do this (and indicating that fact to the player), and then -realized the base would have a subspace radio as well — doing a -Chart when docked updates the star chart, and all radio reports will -be heard. The Dock command will also give a report if a base is under -attack. - -It also had some added logic to spread the initial positioning of -bases. That made sense to add because most people abort games with -bad base placement. - -The experimental deathray originally had only a 5% chance of success, -but could be used repeatedly. I guess after a couple years of use, it -was less experimental because the 1979 version had a 70% success -rate. However it was prone to breaking after use. I upgraded the -deathray, but kept the original set of failure modes (great humor!). - -I put in the Tholian Web code from the 1979 version. - -I added code so that Romulans and regular Klingons could move in -advanced games. I re-enabled the code which allows enemy ships to -ram the Enterprise; it had never worked right. The 1979 version -seems to have it all fixed up, but I'm still not overly happy with -the algorithm. - -The DECUS version had a Deep Space Probe. Looked like a good idea -so I implemented it based on its description. - - -Stas Sergeev's story - -I started from an older Tom Almy version and added features I had -seen in other mainframe variants of the game, I wrote a screen-oriented -interface for it based on the curses library. - - - -The Space Thingy can be shoved, if you ram it, and can fire back if -fired upon. - - -The Tholian can be hit with phasers. - - -When you are docked, base covers you with an almost invincible shields - (a commander can still ram you, or a Romulan can destroy the base, - or a SCom can even succeed with direct attack IIRC, but this rarely - happens). - - -SCom can't escape from you if no more enemies remain (without this, - chasing SCom can take an eternity). - - -Probe target you enter is now the destination quadrant. Before I don't - remember what it was, but it was something I had difficulty using. - - -Secret password is now autogenerated. - - -Victory plaque is adjusted for A4 paper rather than 132-column greenbar -:-) - - -Phasers now tells you how much energy needed, but only if the computer -is alive. - - -Planets are auto-scanned when you enter the quadrant. - - -Mining or using crystals in presense of enemy now yields an attack. -There are other minor adjustments to what yields an attack -and what does not. - - -Ramming a black hole is no longer instant death. There is a -chance you might get timewarped instead. - - -"freeze" command reverts to "save", most people will understand this -better anyway. - - -Screen-oriented interface, with sensor scans always up. - - - -My changes got merged into SST2K in 2005, and I work on it now. - - -Eric Raymond's story - -I played the FORTRAN version of this game in the late 1970s on a -DEC minicomputer. In the late 1980s Dave Matuszek and I became -friends; I was vaguely aware that he had had something to do with the -original Star Trek game. In October 2004, sitting in Dave's living -room, we got to talking about the game and I realized it would make a -great exhibit for the Retrocomputing Museum. - -A few quick web searches later we found Tom Almy's page. We -downloaded his code and Dave verified that that it was a direct -descendent of UT Super Star Trek — even though it had been translated -to C, he was able to recognize names and techniques from the FORTRAN -version he co-wrote. - -This game became an open-source project; see the project -site. - -After I launched the Berlios project, Stas Sergeev contacted me. -We worked together to merge in his changes. - -Modifications I've made: - - - -I converted the flat-text SST.DOC file to XML-Docbook so it can be -webbed. (That's what you're reading now.) - - -The command-help code needed a rewrite because the flat-text form of -the documentation is now generated from XML and doesn't have the -easily recognizable section delimiters it used to. I wrote a script -to filter that flat-text form into an sst.doc that's easy to parse for -command descriptions, and changed some logic in sst.c to match. - - -I've cleaned up a lot of grubby FORTRANisms in the code internals -- -used sizeof(), replaced magic numeric constants with #defines, -that sort of thing. - - -I fixed a surprising number of typos in the code and documentation. - - -All the game state now lives in one big structure that can be -written to and read from disk as one blob. The write gives it an -an identifiable magic number and the thaw logic checks for same. - - -I made the internal pager work, and in the process got rid of a number -of platform dependencies in the code. - - -The HELP/CALL/SOS command is now MAYDAY. - - -Status report now indicates if dilithium crystals are on board. - - -At Dave's prompting, restored the Space Thingy's original elusive behavior. - - -Clean separation of game engine from the UI code, improving Stas -Sergeev's excellent work on the curses interface. - - - -Here are some good pages on the history of Star Trek games: - - - -http://www.dunnington.u-net.com/public/startrek/ - - -http://www3.sympatico.ca/maury/games/space/star_trek.html - - -http://www.cactus.org/%7Enystrom/startrek.html - - - - -Authors' Acknowledgments - -These are the original acknowledgments by Dave Matuszek and Paul -Reynolds: - -The authors would like to thank Professor Michael Duggan for his -encouragement and administrative assistance with the development of -the Star Trek game, without which it might never have been completed. - -Much credit is due to Patrick McGehearty and Rich Cohen, who assisted -with the original design of the game and contributed greatly to its -conceptual development. - -Thanks are also due to Carl Strange, Hardy Tichenor and Steven Bruell -for their assistance with certain coding problems. - -This game was inspired by and rather loosely based on an earlier -game, programmed in the BASIC language, by Jim Korp and Grady Hicks. -It is the authors' understanding that the BASIC game was in turn -derived from a still earlier version in use at Penn State University. - - -References - - -Star Trek (the original television -series), produced and directed by Gene Rodenberry. - -Star Trek (the animated -television series), produced by Gene Rodenberry and directed by Hal -Sutherland. Also excellent, and not just kiddie fare. If you enjoyed -the original series you should enjoy this one (unless you have some -sort of a hangup about watching cartoons). - -The Making of Star Trek, by -Steven E. Whitfield and Gene Rodenberry. The best and most complete -readily available book about Star Trek. (Ballantine -Books) - -The World of Star Trek, by -David Gerrold. Similiar in scope to the above book. -(Bantam) - -The Star Trek Guide, third revision 4/17/67, by Gene -Roddenberry. The original writer's guide for the television -series, but less comprehensive than (3) above. -(Norway Productions) - -The Trouble With Tribbles, by -David Gerrold. Includes the complete script of this popular show. -(Ballantine Books) - -Star Trek, Star Trek -2, ..., Star Trek 9, by James -Blish. The original shows in short story form. -(Bantam) - -Spock Must Die, by James Blish. -An original novel, but rather similar to the show The Enemy -Within. (Bantam) - -Model kits of the Enterprise and a Klingon -Battle-Cruiser by AMT Corporation are available at most hobby -shops. - - - - - diff --git a/sst-layer.xsl b/sst-layer.xsl deleted file mode 100644 index 774dd27..0000000 --- a/sst-layer.xsl +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - diff --git a/sst.c b/sst.c deleted file mode 100644 index e95fa2a..0000000 --- a/sst.c +++ /dev/null @@ -1,846 +0,0 @@ -#define INCLUDED // Define externs here -#include -#include -#include -#include "sstlinux.h" -#include "sst.h" - -#ifndef SSTDOC -#define SSTDOC "sst.doc" -#endif - -/* - -Dave Matuszek says: - - SRSCAN, MOVE, PHASERS, CALL, STATUS, IMPULSE, PHOTONS, ABANDON, - LRSCAN, WARP, SHIELDS, DESTRUCT, CHART, REST, DOCK, QUIT, and DAMAGE - were in the original non-"super" version of UT FORTRAN Star Trek. - - Tholians weren't in the original. Dave is dubious about their merits. - (They are now controlled by OPTION_THOLIAN and turned off if the game - type is "plain".) - - Planets and dilithium crystals weren't in the original. Dave is OK - with this idea. (It's now controlled by OPTION_PLANETS and turned - off if the game type is "plain".) - - Dave says the bit about the Galileo getting turned into a - McDonald's is "consistant with our original vision". (This has been - left permanently enabled, as it can only happen if OPTION_PLANETS - is on.) - - Dave also says the Space Thingy should not be preserved across saved - games, so you can't prove to others that you've seen it. He says it - shouldn't fire back, either. It should do nothing except scream and - disappear when hit by photon torpedos. It's OK that it may move - when attacked, but it didn't in the original. (Whether the Thingy - can fire back is now controlled by OPTION_THINGY and turned off if the - game type is "plain" or "almy". The no-save behavior has been restored.) - - The Faerie Queen, black holes, and time warping were in the original. - -Here are Tom Almy's changes: - - In early 1997, I got the bright idea to look for references to - "Super Star Trek" on the World Wide Web. There weren't many hits, - but there was one that came up with 1979 Fortran sources! This - version had a few additional features that mine didn't have, - however mine had some feature it didn't have. So I merged its - features that I liked. I also took a peek at the DECUS version (a - port, less sources, to the PDP-10), and some other variations. - - 1, Compared to the original UT version, I've changed the "help" command to - "call" and the "terminate" command to "quit" to better match - user expectations. The DECUS version apparently made those changes - as well as changing "freeze" to "save". However I like "freeze". - (Both "freeze" and "save" work in SST2K.) - - 2. The experimental deathray originally had only a 5% chance of - success, but could be used repeatedly. I guess after a couple - years of use, it was less "experimental" because the 1979 - version had a 70% success rate. However it was prone to breaking - after use. I upgraded the deathray, but kept the original set of - failure modes (great humor!). (Now controlled by OPTION_DEATHRAY - and turned off if game type is "plain".) - - 3. The 1979 version also mentions srscan and lrscan working when - docked (using the starbase's scanners), so I made some changes here - to do this (and indicating that fact to the player), and then realized - the base would have a subspace radio as well -- doing a Chart when docked - updates the star chart, and all radio reports will be heard. The Dock - command will also give a report if a base is under attack. - - 4. Tholian Web from the 1979 version. (Now controlled by - OPTION_THOLIAN and turned off if game type is "plain".) - - 5. Enemies can ram the Enterprise. (Now controlled by OPTION_RAMMING - and turned off if game type is "plain".) - - 6. Regular Klingons and Romulans can move in Expert and Emeritus games. - This code could use improvement. (Now controlled by OPTION_MVBADDY - and turned off if game type is "plain".) - - 7. The deep-space probe feature from the DECUS version. (Now controlled - by OPTION_PROBE and turned off if game type is "plain"). - - 8. 'emexit' command from the 1979 version. - - 9. Bugfix: Klingon commander movements are no longer reported if long-range - sensors are damaged. - - 10. Bugfix: Better base positioning at startup (more spread out). - That made sense to add because most people abort games with - bad base placement. - - In June 2002, I fixed two known bugs and a documentation typo. - In June 2004 I fixed a number of bugs involving: 1) parsing invalid - numbers, 2) manual phasers when SR scan is damaged and commander is - present, 3) time warping into the future, 4) hang when moving - klingons in crowded quadrants. (These fixes are in SST2K.) - -Here are Stas Sergeev's changes: - - 1. The Space Thingy can be shoved, if you ram it, and can fire back if - fired upon. (Now controlled by OPTION_THINGY and turned off if game - type is "plain" or "almy".) - - 2. When you are docked, base covers you with an almost invincible shield. - (A commander can still ram you, or a Romulan can destroy the base, - or a SCom can even succeed with direct attack IIRC, but this rarely - happens.) (Now controlled by OPTION_BASE and turned off if game - type is "plain" or "almy".) - - 3. Ramming a black hole is no longer instant death. There is a - chance you might get timewarped instead. (Now controlled by - OPTION_BLKHOLE and turned off if game type is "plain" or "almy".) - - 4. The Tholian can be hit with phasers. - - 5. SCom can't escape from you if no more enemies remain - (without this, chasing SCom can take an eternity). - - 6. Probe target you enter is now the destination quadrant. Before I don't - remember what it was, but it was something I had difficulty using. - - 7. Secret password is now autogenerated. - - 8. "Plaque" is adjusted for A4 paper :-) - - 9. Phasers now tells you how much energy needed, but only if the computer - is alive. - - 10. Planets are auto-scanned when you enter the quadrant. - - 11. Mining or using crystals in presense of enemy now yields an attack. - There are other minor adjustments to what yields an attack - and what does not. - - 12. "freeze" command reverts to "save", most people will understand this - better anyway. (SST2K recognizes both.) - - 13. Screen-oriented interface, with sensor scans always up. (SST2K - supports both screen-oriented and TTY modes.) - -Eric Raymond's changes: - -Mainly, I translated this C code out of FORTRAN into C -- created #defines -for a lot of magic numbers and refactored the heck out of it. - - 1. "sos" and "call" becomes "mayday", "freeze" and "save" are both good. - - 2. Status report now indicates when dilithium crystals are on board. - - 3. Per Dave Matuszek's remarks, Thingy state is never saved across games. - - 4. Added game option selection so you can play a close (but not bug-for- - bug identical) approximation of older versions. -*/ - -/* the input queue */ -static char line[128], *linep = line; - -static struct -{ - char *name; - int value; - unsigned long option; -} -commands[] = { -#define SRSCAN 0 - {"SRSCAN", SRSCAN, OPTION_TTY}, -#define STATUS 1 - {"STATUS", STATUS, OPTION_TTY}, -#define REQUEST 2 - {"REQUEST", REQUEST, OPTION_TTY}, -#define LRSCAN 3 - {"LRSCAN", LRSCAN, OPTION_TTY}, -#define PHASERS 4 - {"PHASERS", PHASERS, 0}, -#define TORPEDO 5 - {"TORPEDO", TORPEDO, 0}, - {"PHOTONS", TORPEDO, 0}, -#define MOVE 6 - {"MOVE", MOVE, 0}, -#define SHIELDS 7 - {"SHIELDS", SHIELDS, 0}, -#define DOCK 8 - {"DOCK", DOCK, 0}, -#define DAMAGES 9 - {"DAMAGES", DAMAGES, 0}, -#define CHART 10 - {"CHART", CHART, 0}, -#define IMPULSE 11 - {"IMPULSE", IMPULSE, 0}, -#define REST 12 - {"REST", REST, 0}, -#define WARP 13 - {"WARP", WARP, 0}, -#define SCORE 14 - {"SCORE", SCORE, 0}, -#define SENSORS 15 - {"SENSORS", SENSORS, OPTION_PLANETS}, -#define ORBIT 16 - {"ORBIT", ORBIT, OPTION_PLANETS}, -#define TRANSPORT 17 - {"TRANSPORT", TRANSPORT, OPTION_PLANETS}, -#define MINE 18 - {"MINE", MINE, OPTION_PLANETS}, -#define CRYSTALS 19 - {"CRYSTALS", CRYSTALS, OPTION_PLANETS}, -#define SHUTTLE 20 - {"SHUTTLE", SHUTTLE, OPTION_PLANETS}, -#define PLANETS 21 - {"PLANETS", PLANETS, OPTION_PLANETS}, -#define REPORT 22 - {"REPORT", REPORT, 0}, -#define COMPUTER 23 - {"COMPUTER", COMPUTER, 0}, -#define COMMANDS 24 - {"COMMANDS", COMMANDS, 0}, -#define EMEXIT 25 - {"EMEXIT", EMEXIT, 0}, -#define PROBE 26 - {"PROBE", PROBE, OPTION_PROBE}, -#define SAVE 27 - {"SAVE", SAVE, 0}, - {"FREEZE", SAVE, 0}, -#define ABANDON 28 - {"ABANDON", ABANDON, 0}, -#define DESTRUCT 29 - {"DESTRUCT", DESTRUCT, 0}, -#define DEATHRAY 30 - {"DEATHRAY", DEATHRAY, 0}, -#define DEBUGCMD 31 - {"DEBUG", DEBUGCMD, 0}, -#define MAYDAY 32 - {"MAYDAY", MAYDAY, 0}, - //{"SOS", MAYDAY, 0}, - //{"CALL", MAYDAY, 0}, -#define QUIT 33 - {"QUIT", QUIT, 0}, -#define HELP 34 - {"HELP", HELP, 0}, -}; - -#define NUMCOMMANDS sizeof(commands)/sizeof(commands[0]) -#define ACCEPT(i) (!commands[i].option || (commands[i].option & game.options)) - -static void listCommands(void) { - int i, k = 0; - proutn("LEGAL COMMANDS ARE:"); - for (i = 0; i < NUMCOMMANDS; i++) { - if (!ACCEPT(i)) - continue; - if (k % 5 == 0) - skip(1); - proutn("%-12s ", commands[i].name); - k++; - } - skip(1); -} - -static void helpme(void) -{ - int i, j; - char cmdbuf[32], *cp; - char linebuf[132]; - FILE *fp; - /* Give help on commands */ - int key; - key = scan(); - while (TRUE) { - if (key == IHEOL) { - setwnd(prompt_window); - proutn("Help on what command? "); - key = scan(); - } - setwnd(message_window); - if (key == IHEOL) return; - for (i = 0; i < NUMCOMMANDS; i++) { - if (ACCEPT(i) && strcasecmp(commands[i].name, citem)==0) { - i = commands[i].value; - break; - } - } - if (i != NUMCOMMANDS) break; - skip(1); - prout("Valid commands:"); - listCommands(); - key = IHEOL; - chew(); - skip(1); - } - if (i == COMMANDS) { - strcpy(cmdbuf, " ABBREV"); - } - else { - for (j = 0; commands[i].name[j]; j++) - cmdbuf[j] = toupper(commands[i].name[j]); - cmdbuf[j] = '\0'; - } - fp = fopen(SSTDOC, "r"); - if (fp == NULL) { - prout("Spock- \"Captain, that information is missing from the"); - prout(" computer.\""); - /* - * This used to continue: "You need to find SST.DOC and put - * it in the current directory." - */ - return; - } - for (;;) { - if (fgets(linebuf, sizeof(linebuf), fp) == NULL) { - prout("Spock- \"Captain, there is no information on that command.\""); - fclose(fp); - return; - } - if (linebuf[0] == '%' && linebuf[1] == '%'&& linebuf[2] == ' ') { - for (cp = linebuf+3; isspace(*cp); cp++) - continue; - linebuf[strlen(linebuf)-1] = '\0'; - if (strcasecmp(cp, cmdbuf) == 0) - break; - } - } - - skip(1); - prout("Spock- \"Captain, I've found the following information:\""); - skip(1); - - while (fgets(linebuf, sizeof(linebuf),fp)) { - if (strstr(linebuf, "******")) - break; - proutn(linebuf); - } - fclose(fp); -} - -void enqueue(char *s) -{ - strcpy(line, s); -} - -static void makemoves(void) -{ - int i, v = 0, hitme; - clrscr(); - setwnd(message_window); - while (TRUE) { /* command loop */ - drawmaps(1); - while (TRUE) { /* get a command */ - hitme = FALSE; - justin = 0; - Time = 0.0; - i = -1; - chew(); - setwnd(prompt_window); - clrscr(); - proutn("COMMAND> "); - if (scan() == IHEOL) { - makechart(); - continue; - } - ididit=0; - clrscr(); - setwnd(message_window); - clrscr(); - for (i=0; i < ABANDON; i++) - if (ACCEPT(i) && isit(commands[i].name)) { - v = commands[i].value; - break; - } - if (i < ABANDON && (!commands[i].option || (commands[i].option & game.options))) - break; - for (; i < NUMCOMMANDS; i++) - if (ACCEPT(i) && strcasecmp(commands[i].name, citem) == 0) { - v = commands[i].value; - break; - } - if (i < NUMCOMMANDS && (!commands[i].option || (commands[i].option & game.options))) - break; - listCommands(); - } - commandhook(commands[i].name, TRUE); - switch (v) { /* command switch */ - case SRSCAN: // srscan - srscan(SCAN_FULL); - break; - case STATUS: // status - srscan(SCAN_STATUS); - break; - case REQUEST: // status request - srscan(SCAN_REQUEST); - break; - case LRSCAN: // lrscan - lrscan(); - break; - case PHASERS: // phasers - phasers(); - if (ididit) hitme = TRUE; - break; - case TORPEDO: // photons - photon(); - if (ididit) hitme = TRUE; - break; - case MOVE: // move - warp(1); - break; - case SHIELDS: // shields - doshield(1); - if (ididit) { - hitme=TRUE; - shldchg = 0; - } - break; - case DOCK: // dock - dock(1); - if (ididit) attack(0); - break; - case DAMAGES: // damages - dreprt(); - break; - case CHART: // chart - chart(0); - break; - case IMPULSE: // impulse - impuls(); - break; - case REST: // rest - wait(); - if (ididit) hitme = TRUE; - break; - case WARP: // warp - setwrp(); - break; - case SCORE: // score - score(); - break; - case SENSORS: // sensors - sensor(); - break; - case ORBIT: // orbit - orbit(); - if (ididit) hitme = TRUE; - break; - case TRANSPORT: // transport "beam" - beam(); - break; - case MINE: // mine - mine(); - if (ididit) hitme = TRUE; - break; - case CRYSTALS: // crystals - usecrystals(); - if (ididit) hitme = TRUE; - break; - case SHUTTLE: // shuttle - shuttle(); - if (ididit) hitme = TRUE; - break; - case PLANETS: // Planet list - preport(); - break; - case REPORT: // Game Report - report(); - break; - case COMPUTER: // use COMPUTER! - eta(); - break; - case COMMANDS: - listCommands(); - break; - case EMEXIT: // Emergency exit - clrscr(); // Hide screen - freeze(TRUE); // forced save - exit(1); // And quick exit - break; - case PROBE: - probe(); // Launch probe - if (ididit) hitme = TRUE; - break; - case ABANDON: // Abandon Ship - abandn(); - break; - case DESTRUCT: // Self Destruct - dstrct(); - break; - case SAVE: // Save Game - freeze(FALSE); - clrscr(); - if (skill > SKILL_GOOD) - prout("WARNING--Saved games produce no plaques!"); - break; - case DEATHRAY: // Try a desparation measure - deathray(); - if (ididit) hitme = TRUE; - break; - case DEBUGCMD: // What do we want for debug??? -#ifdef DEBUG - debugme(); -#endif - break; - case MAYDAY: // Call for help - help(); - if (ididit) hitme = TRUE; - break; - case QUIT: - alldone = 1; // quit the game -#ifdef DEBUG - if (idebug) score(); -#endif - break; - case HELP: - helpme(); // get help - break; - } - commandhook(commands[i].name, FALSE); - for (;;) { - if (alldone) break; // Game has ended -#ifdef DEBUG - if (idebug) prout("2500"); -#endif - if (Time != 0.0) { - events(); - if (alldone) break; // Events did us in - } - if (game.state.galaxy[quadx][quady].supernova) { // Galaxy went Nova! - atover(0); - continue; - } - if (hitme && justin==0) { - attack(2); - if (alldone) break; - if (game.state.galaxy[quadx][quady].supernova) { // went NOVA! - atover(0); - hitme = TRUE; - continue; - } - } - break; - } - if (alldone) break; - } -} - - -int main(int argc, char **argv) -{ - int i, option; - - game.options = OPTION_ALL &~ (OPTION_IOMODES | OPTION_SHOWME | OPTION_PLAIN | OPTION_ALMY); - if (getenv("TERM")) - game.options |= OPTION_CURSES | OPTION_SHOWME; - else - game.options |= OPTION_TTY; - - while ((option = getopt(argc, argv, "t")) != -1) { - switch (option) { - case 't': - game.options |= OPTION_TTY; - game.options &=~ OPTION_CURSES; - break; - default: - fprintf(stderr, "usage: sst [-t] [startcommand...].\n"); - exit(0); - } - } - - randomize(); - iostart(); - - line[0] = '\0'; - for (i = optind; i < argc; i++) { - strcat(line, argv[i]); - strcat(line, " "); - } - while (TRUE) { /* Play a game */ - setwnd(fullscreen_window); -#ifdef DEBUG - prout("INITIAL OPTIONS: %0lx", game.options); -#endif /* DEBUG */ - clrscr(); - prelim(); - setup(line[0] == '\0'); - if (alldone) { - score(); - alldone = 0; - } - else makemoves(); - skip(1); - stars(); - skip(1); - - if (tourn && alldone) { - proutn("Do you want your score recorded?"); - if (ja()) { - chew2(); - freeze(FALSE); - } - } - proutn("Do you want to play again? "); - if (!ja()) break; - } - skip(1); - prout("May the Great Bird of the Galaxy roost upon your home planet."); - return 0; -} - - -void cramen(int i) -{ - /* return an enemy */ - char *s; - - switch (i) { - case IHR: s = "Romulan"; break; - case IHK: s = "Klingon"; break; - case IHC: s = "Commander"; break; - case IHS: s = "Super-commander"; break; - case IHSTAR: s = "Star"; break; - case IHP: s = "Planet"; break; - case IHB: s = "Starbase"; break; - case IHBLANK: s = "Black hole"; break; - case IHT: s = "Tholian"; break; - case IHWEB: s = "Tholian web"; break; - case IHQUEST: s = "Stranger"; break; - default: s = "Unknown??"; break; - } - proutn(s); -} - -char *cramlc(enum loctype key, int x, int y) -{ - static char buf[32]; - buf[0] = '\0'; - if (key == quadrant) strcpy(buf, "Quadrant "); - else if (key == sector) strcpy(buf, "Sector "); - sprintf(buf+strlen(buf), "%d - %d", x, y); - return buf; -} - -void crmena(int i, int enemy, int key, int x, int y) -{ - if (i == 1) proutn("***"); - cramen(enemy); - proutn(" at "); - proutn(cramlc(key, x, y)); -} - -void crmshp(void) -{ - char *s; - switch (ship) { - case IHE: s = "Enterprise"; break; - case IHF: s = "Faerie Queene"; break; - default: s = "Ship???"; break; - } - proutn(s); -} - -void stars(void) -{ - prouts("******************************************************"); - skip(1); -} - -double expran(double avrage) -{ - return -avrage*log(1e-7 + Rand()); -} - -double Rand(void) { - return rand()/(1.0 + (double)RAND_MAX); -} - -void iran(int size, int *i, int *j) -{ - *i = Rand()*(size*1.0) + 1.0; - *j = Rand()*(size*1.0) + 1.0; -} - -void chew(void) -{ - linep = line; - *linep = 0; -} - -void chew2(void) -{ - /* return IHEOL next time */ - linep = line+1; - *linep = 0; -} - -int scan(void) -{ - int i; - char *cp; - - // Init result - aaitem = 0.0; - *citem = 0; - - // Read a line if nothing here - if (*linep == 0) { - if (linep != line) { - chew(); - return IHEOL; - } - cgetline(line, sizeof(line)); - fflush(stdin); - if (curwnd==prompt_window){ - clrscr(); - setwnd(message_window); - clrscr(); - } - linep = line; - } - // Skip leading white space - while (*linep == ' ') linep++; - // Nothing left - if (*linep == 0) { - chew(); - return IHEOL; - } - if (isdigit(*linep) || *linep=='+' || *linep=='-' || *linep=='.') { - // treat as a number - i = 0; - if (sscanf(linep, "%lf%n", &aaitem, &i) < 1) { - linep = line; // Invalid numbers are ignored - *linep = 0; - return IHEOL; - } - else { - // skip to end - linep += i; - return IHREAL; - } - } - // Treat as alpha - cp = citem; - while (*linep && *linep!=' ') { - if ((cp - citem) < 9) *cp++ = tolower(*linep); - linep++; - } - *cp = 0; - return IHALPHA; -} - -int ja(void) -{ - chew(); - while (TRUE) { - scan(); - chew(); - if (*citem == 'y') return TRUE; - if (*citem == 'n') return FALSE; - proutn("Please answer with \"Y\" or \"N\": "); - } -} - -void huh(void) -{ - chew(); - skip(1); - prout("Beg your pardon, Captain?"); -} - -int isit(char *s) -{ - /* New function -- compares s to scanned citem and returns true if it - matches to the length of s */ - - return strncasecmp(s, citem, max(1, strlen(citem))) == 0; - -} - -#ifdef DEBUG -void debugme(void) -{ - proutn("Reset levels? "); - if (ja() != 0) { - if (energy < inenrg) energy = inenrg; - shield = inshld; - torps = intorps; - lsupres = inlsr; - } - proutn("Reset damage? "); - if (ja() != 0) { - int i; - for (i=0; i < NDEVICES; i++) - if (game.damage[i] > 0.0) - game.damage[i] = 0.0; - } - proutn("Toggle idebug? "); - if (ja() != 0) { - idebug = !idebug; - if (idebug) prout("Debug output ON"); - else prout("Debug output OFF"); - } - proutn("Cause selective damage? "); - if (ja() != 0) { - int i, key; - for (i=0; i < NDEVICES; i++) { - proutn("Kill "); - proutn(device[i]); - proutn("? "); - chew(); - key = scan(); - if (key == IHALPHA && isit("y")) { - game.damage[i] = 10.0; - } - } - } - proutn("Examine/change events? "); - if (ja() != 0) { - int i; - for (i = 1; i < NEVENTS; i++) { - int key; - if (game.future[i] == FOREVER) continue; - switch (i) { - case FSNOVA: proutn("Supernova "); break; - case FTBEAM: proutn("T Beam "); break; - case FSNAP: proutn("Snapshot "); break; - case FBATTAK: proutn("Base Attack "); break; - case FCDBAS: proutn("Base Destroy "); break; - case FSCMOVE: proutn("SC Move "); break; - case FSCDBAS: proutn("SC Base Destroy "); break; - } - proutn("%.2f", game.future[i]-game.state.date); - chew(); - proutn(" ?"); - key = scan(); - if (key == IHREAL) { - game.future[i] = game.state.date + aaitem; - } - } - chew(); - } - proutn("Induce supernova here? "); - if (ja() != 0) { - game.state.galaxy[quadx][quady].supernova = TRUE; - atover(1); - } -} -#endif diff --git a/sst.h b/sst.h deleted file mode 100644 index f8d65ff..0000000 --- a/sst.h +++ /dev/null @@ -1,528 +0,0 @@ -#include -#include -#include -#include -#include -#ifndef INCLUDED -#define EXTERN extern -#else -#define EXTERN -#endif - -#define min(x, y) ((x)<(y)?(x):(y)) -#define max(x, y) ((x)>(y)?(x):(y)) - -// #define DEBUG - -#define PHASEFAC (2.0) -#define PLNETMAX (10) -#define GALSIZE (8) -#define QUADSIZE (10) -#define BASEMAX (5) - -/* - * These macros hide the difference between 0-origin and 1-origin addressing. - * They're a step towards de-FORTRANizing the code. - */ -#define VALID_QUADRANT(x, y) ((x)>=1 && (x)<=GALSIZE && (y)>=1 && (y)<=GALSIZE) -#define VALID_SECTOR(x, y) ((x)>=1 && (x)<=QUADSIZE && (y)>=1 && (y)<=QUADSIZE) -#define for_quadrants(i) for (i = 1; i <= GALSIZE; i++) -#define for_sectors(i) for (i = 1; i <= QUADSIZE; i++) -#define for_commanders(i) for (i = 1; i <= game.state.remcom; i++) -#define for_local_enemies(i) for (i = 1; i <= nenhere; i++) -#define for_starbases(i) for (i = 1; i <= game.state.rembase; i++) - -typedef struct { - int x; /* Quadrant location of planet */ - int y; - enum {M=0, N=1, O=2} pclass; - int crystals; /* has crystals */ - enum {unknown, known, shuttle_down} known; -} planet; - -#define DESTROY(pl) memset(pl, '\0', sizeof(planet)) - -typedef struct { - int snap, // snapshot taken - remkl, // remaining klingons - remcom, // remaining commanders - nscrem, // remaining super commanders - rembase, // remaining bases - starkl, // destroyed stars - basekl, // destroyed bases - cx[QUADSIZE+1],cy[QUADSIZE+1], // Commander quadrant coordinates - baseqx[BASEMAX+1], // Base quadrant X - baseqy[BASEMAX+1], // Base quadrant Y - isx, isy, // Coordinate of Super Commander - nromrem, // Romulans remaining - nplankl; // destroyed planets - planet plnets[PLNETMAX]; // Planet information - double date, // stardate - remres, // remaining resources - remtime; // remaining time - struct { - int stars; - int planets; - int starbase; - int klingons; - int romulans; - int supernova; - int charted; - } galaxy[GALSIZE+1][GALSIZE+1]; // The Galaxy (subscript 0 not used) - struct { - int stars; - int starbase; - int klingons; - } chart[GALSIZE+1][GALSIZE+1]; // the starchart (subscript 0 not used) -} snapshot; // Data that is snapshot - -#define NKILLK (inkling - game.state.remkl) -#define NKILLC (incom - game.state.remcom) -#define NKILLSC (inscom - game.state.nscrem) -#define NKILLROM (inrom - game.state.nromrem) -#define KLINGREM (game.state.remkl + game.state.remcom + game.state.nscrem) -#define INKLINGTOT (inkling + incom + inscom) -#define KLINGKILLED (INKLINGTOT - KLINGREM) - -#define SKILL_NONE 0 -#define SKILL_NOVICE 1 -#define SKILL_FAIR 2 -#define SKILL_GOOD 3 -#define SKILL_EXPERT 4 -#define SKILL_EMERITUS 5 - -/* game options */ -#define OPTION_ALL 0xffffffff -#define OPTION_TTY 0x00000001 /* old interface */ -#define OPTION_CURSES 0x00000002 /* new interface */ -#define OPTION_IOMODES 0x00000003 /* cover both interfaces */ -#define OPTION_PLANETS 0x00000004 /* planets and mining */ -#define OPTION_THOLIAN 0x00000008 /* Tholians and their webs */ -#define OPTION_THINGY 0x00000010 /* Space Thingy can shoot back */ -#define OPTION_PROBE 0x00000020 /* deep-space probes */ -#define OPTION_SHOWME 0x00000040 /* bracket Enterprise in chart */ -#define OPTION_RAMMING 0x00000080 /* enemies may ram Enterprise */ -#define OPTION_MVBADDY 0x00000100 /* more enemies can move */ -#define OPTION_BLKHOLE 0x00000200 /* black hole may timewarp you */ -#define OPTION_BASE 0x00000400 /* bases have good shields */ -#define OPTION_PLAIN 0x01000000 /* user chose plain game */ -#define OPTION_ALMY 0x02000000 /* user chose Almy variant */ - -/* Define devices */ -#define DSRSENS 0 -#define DLRSENS 1 -#define DPHASER 2 -#define DPHOTON 3 -#define DLIFSUP 4 -#define DWARPEN 5 -#define DIMPULS 6 -#define DSHIELD 7 -#define DRADIO 8 -#define DSHUTTL 9 -#define DCOMPTR 10 -#define DTRANSP 11 -#define DSHCTRL 12 -#define DDRAY 13 // Added deathray -#define DDSP 14 // Added deep space probe -#define NDEVICES (15) // Number of devices - -#define FOREVER 1e30 - -/* Define future events */ -#define FSPY 0 // Spy event happens always (no future[] entry) - // can cause SC to tractor beam Enterprise -#define FSNOVA 1 // Supernova -#define FTBEAM 2 // Commander tractor beams Enterprise -#define FSNAP 3 // Snapshot for time warp -#define FBATTAK 4 // Commander attacks base -#define FCDBAS 5 // Commander destroys base -#define FSCMOVE 6 // Supercommander moves (might attack base) -#define FSCDBAS 7 // Supercommander destroys base -#define FDSPROB 8 // Move deep space probe -#define NEVENTS (9) - -// Scalar variables that are needed for freezing the game -// are placed in a structure. #defines are used to access by their -// original names. Gee, I could have done this with the d structure, -// but I just didn't think of it back when I started. - -#define SSTMAGIC "SST2.0\n" - -EXTERN WINDOW *curwnd; - -EXTERN struct { - char magic[sizeof(SSTMAGIC)]; - unsigned long options; - snapshot state; - snapshot snapsht; - char quad[QUADSIZE+1][QUADSIZE+1]; // contents of our quadrant - double kpower[(QUADSIZE+1)*(QUADSIZE+1)]; // enemy energy levels - double kdist[(QUADSIZE+1)*(QUADSIZE+1)]; // enemy distances - double kavgd[(QUADSIZE+1)*(QUADSIZE+1)]; // average distances - double damage[NDEVICES]; // damage encountered - double future[NEVENTS]; // future events - char passwd[10]; // Self Destruct password - int kx[(QUADSIZE+1)*(QUADSIZE+1)]; // enemy sector locations - int ky[(QUADSIZE+1)*(QUADSIZE+1)]; - /* members with macro definitions start here */ - int inkling, - inbase, - incom, - inscom, - inrom, - instar, - intorps, - condit, - torps, - ship, - quadx, - quady, - sectx, - secty, - length, - skill, - basex, - basey, - klhere, - comhere, - casual, - nhelp, - nkinks, - ididit, - gamewon, - alive, - justin, - alldone, - shldchg, - plnetx, - plnety, - inorbit, - landed, - iplnet, - imine, - inplan, - nenhere, - ishere, - neutz, - irhere, - icraft, - ientesc, - iscraft, - isatb, - iscate, -#ifdef DEBUG - idebug, -#endif - iattak, - icrystl, - tourn, - thawed, - batx, - baty, - ithere, - ithx, - ithy, - iseenit, - probecx, - probecy, - proben, - isarmed, - nprobes; - double inresor, - intime, - inenrg, - inshld, - inlsr, - indate, - energy, - shield, - shldup, - warpfac, - wfacsq, - lsupres, - dist, - direc, - Time, - docfac, - resting, - damfac, - lastchart, - cryprob, - probex, - probey, - probeinx, - probeiny, - height; -} game; - -#define inkling game.inkling // Initial number of klingons -#define inbase game.inbase // Initial number of bases -#define incom game.incom // Initian number of commanders -#define inscom game.inscom // Initian number of commanders -#define inrom game.inrom // Initian number of commanders -#define instar game.instar // Initial stars -#define intorps game.intorps // Initial/Max torpedoes -#define condit game.condit // Condition (red/yellow/green/docked) -#define torps game.torps // number of torpedoes -#define ship game.ship // Ship type -- 'E' is Enterprise -#define quadx game.quadx // where we are -#define quady game.quady // -#define sectx game.sectx // where we are -#define secty game.secty // -#define length game.length // length of game -#define skill game.skill // skill level -#define basex game.basex // position of base in current quad -#define basey game.basey // -#define klhere game.klhere // klingons here -#define comhere game.comhere // commanders here -#define casual game.casual // causalties -#define nhelp game.nhelp // calls for help -#define nkinks game.nkinks // -#define ididit game.ididit // Action taken -- allows enemy to attack -#define gamewon game.gamewon // Finished! -#define alive game.alive // We are alive (not killed) -#define justin game.justin // just entered quadrant -#define alldone game.alldone // game is now finished -#define shldchg game.shldchg // shield is changing (affects efficiency) -#define plnetx game.plnetx // location of planet in quadrant -#define plnety game.plnety // -#define inorbit game.inorbit // orbiting -#define landed game.landed // party on planet (1), on ship (-1) -#define iplnet game.iplnet // planet # in quadrant -#define imine game.imine // mining -#define inplan game.inplan // initial planets -#define nenhere game.nenhere // Number of enemies in quadrant -#define ishere game.ishere // Super-commander in quandrant -#define neutz game.neutz // Romulan Neutral Zone -#define irhere game.irhere // Romulans in quadrant -#define icraft game.icraft // Kirk in Galileo -#define ientesc game.ientesc // Attempted escape from supercommander -#define iscraft game.iscraft // =1 if craft on ship, -1 if removed from game -#define isatb game.isatb // =1 if SuperCommander is attacking base -#define iscate game.iscate // Super Commander is here -#ifdef DEBUG -#define idebug game.idebug // Debug mode -#endif -#define iattak game.iattak // attack recursion elimination (was cracks[4]) -#define icrystl game.icrystl // dilithium crystals aboard -#define tourn game.tourn // Tournament number -#define thawed game.thawed // Thawed game -#define batx game.batx // Base coordinates being attacked -#define baty game.baty // -#define ithere game.ithere // Tholean is here -#define ithx game.ithx // coordinates of tholean -#define ithy game.ithy -#define iseenit game.iseenit // Seen base attack report -#define inresor game.inresor // initial resources -#define intime game.intime // initial time -#define inenrg game.inenrg // Initial/Max Energy -#define inshld game.inshld // Initial/Max Shield -#define inlsr game.inlsr // initial life support resources -#define indate game.indate // Initial date -#define energy game.energy // Energy level -#define shield game.shield // Shield level -#define shldup game.shldup // Shields are up -#define warpfac game.warpfac // Warp speed -#define wfacsq game.wfacsq // squared warp factor -#define lsupres game.lsupres // life support reserves -#define dist game.dist // movement distance -#define direc game.direc // movement direction -#define Time game.Time // time taken by current operation -#define docfac game.docfac // repair factor when docking (constant?) -#define resting game.resting // rest time -#define damfac game.damfac // damage factor -#define lastchart game.lastchart // time star chart was last updated -#define cryprob game.cryprob // probability that crystal will work -#define probex game.probex // location of probe -#define probey game.probey -#define probecx game.probecx // current probe quadrant -#define probecy game.probecy -#define probeinx game.probeinx // Probe x,y increment -#define probeiny game.probeiny -#define proben game.proben // number of moves for probe -#define isarmed game.isarmed // Probe is armed -#define nprobes game.nprobes // number of probes available - -/* the following global state doesn't need to be saved */ -EXTERN char *device[NDEVICES]; -EXTERN int iscore, iskill; // Common PLAQ -EXTERN double perdate; -EXTERN double aaitem; -EXTERN char citem[10]; - -/* the Space Thingy's global state should *not* be saved! */ -EXTERN int thingx, thingy, iqhere, iqengry; - -typedef enum {FWON, FDEPLETE, FLIFESUP, FNRG, FBATTLE, - FNEG3, FNOVA, FSNOVAED, FABANDN, FDILITHIUM, - FMATERIALIZE, FPHASER, FLOST, FMINING, FDPLANET, - FPNOVA, FSSC, FSTRACTOR, FDRAY, FTRIBBLE, - FHOLE} FINTYPE ; -enum loctype {neither, quadrant, sector}; - -#ifdef INCLUDED -char *device[NDEVICES] = { - "S. R. Sensors", - "L. R. Sensors", - "Phasers", - "Photon Tubes", - "Life Support", - "Warp Engines", - "Impulse Engines", - "Shields", - "Subspace Radio", - "Shuttle Craft", - "Computer", - "Transporter", - "Shield Control", - "Death Ray", - "D. S. Probe"}; -#endif - -#ifndef TRUE -#define TRUE (1) -#define FALSE (0) -#endif - -#define IHR 'R' -#define IHK 'K' -#define IHC 'C' -#define IHS 'S' -#define IHSTAR '*' -#define IHP 'P' -#define IHB 'B' -#define IHBLANK ' ' -#define IHDOT '.' -#define IHQUEST '?' -#define IHE 'E' -#define IHF 'F' -#define IHT 'T' -#define IHWEB '#' -#define IHGREEN 'G' -#define IHYELLOW 'Y' -#define IHRED 'R' -#define IHDOCKED 'D' -#define IHDEAD 'Z' -#define IHMATER0 '-' -#define IHMATER1 'o' -#define IHMATER2 '0' - - -/* Function prototypes */ -void prelim(void); -void attack(int); -int choose(int); -void setup(int); -void score(void); -void atover(int); -int srscan(int); -void lrscan(void); -void phasers(void); -void photon(void); -void warp(int); -void doshield(int); -void dock(int); -void dreprt(void); -void chart(int); -void rechart(void); -void impuls(void); -void wait(void); -void setwrp(void); -void events(void); -void report(void); -void eta(void); -void help(void); -void abandn(void); -void finish(FINTYPE); -void dstrct(void); -void kaboom(void); -void freeze(int); -int thaw(void); -void plaque(void); -int scan(void); -#define IHEOL (0) -#define IHALPHA (1) -#define IHREAL (2) -void chew(void); -void chew2(void); -void skip(int); -void prout(char *, ...); -void proutn(char *, ...); -void stars(void); -void newqad(int); -int ja(void); -void cramen(int); -void crmshp(void); -char *cramlc(enum loctype, int, int); -double expran(double); -double Rand(void); -void iran(int, int *, int *); -#define square(i) ((i)*(i)) -void dropin(int, int*, int*); -void newcnd(void); -void sortkl(void); -void imove(void); -void ram(int, int, int, int); -void crmena(int, int, int, int, int); -void deadkl(int, int, int, int, int); -void timwrp(void); -void movcom(void); -void torpedo(double, double, int, int, double *, int, int); -void huh(void); -void pause_game(int); -void nova(int, int); -void snova(int, int); -void scom(int *); -void hittem(double *); -void prouts(char *, ...); -int isit(char *); -void preport(void); -void orbit(void); -void sensor(void); -void drawmaps(short); -void beam(void); -void mine(void); -void usecrystals(void); -void shuttle(void); -void deathray(void); -void debugme(void); -void attakreport(int); -void movetho(void); -void probe(void); -void iostart(void); -void setwnd(WINDOW *); -void warble(void); -void boom(int ii, int jj); -void tracktorpedo(int ix, int iy, int l, int i, int n, int iquad); -void cgetline(char *, int); -void waitfor(void); -void setpassword(void); -void commandhook(char *, int); -void makechart(void); -void enqueue(char *); - -/* mode arguments for srscan() */ -#define SCAN_FULL 1 -#define SCAN_REQUEST 2 -#define SCAN_STATUS 3 -#define SCAN_NO_LEFTSIDE 4 - -WINDOW *fullscreen_window; -WINDOW *srscan_window; -WINDOW *report_window; -WINDOW *lrscan_window; -WINDOW *message_window; -WINDOW *prompt_window; - -extern void clreol(void); -extern void clrscr(void); -extern void textcolor(int color); -extern void highvideo(void); - -enum COLORS { - DEFAULT, - BLACK, BLUE, GREEN, CYAN, RED, MAGENTA, BROWN, LIGHTGRAY, - DARKGRAY, LIGHTBLUE, LIGHTGREEN, LIGHTCYAN, LIGHTRED, LIGHTMAGENTA, YELLOW, WHITE -}; - -#define DAMAGED 128 /* marker for damaged ship in starmap */ diff --git a/sst.xml b/sst.xml deleted file mode 100644 index 5a56584..0000000 --- a/sst.xml +++ /dev/null @@ -1,67 +0,0 @@ - - - -sst -6 -Nov 1 2004 - - -sst -the classic Super Star Trek game - - - - -sst --t -command - - - - -DESCRIPTION - -The Organian Peace Treaty has collapsed, and the Federation is -at war with the Klingon Empire. Joining the Klingons against the -Federation are the members of the Romulan Star Empire. As commander -of the Starship U.S.S. Enterprise, your job is to wipe out the Klingon -invasion fleet and make the galaxy safe for democracy. - -This is one of the great early classic computer games from the -1970s and still has a remarkable amount of play value. Run -sst in a terminal window to start it. Typing -'comands' at the prompt will list all commands; help is available for -each one individually as well. Full documentation is browseable. On -systems where /usr/share/doc/sst/ is a legal -filename, it will probably be installed there as well. - -There is one option -t, which forces the original pure-tty mode. -Normally sst tries to come up in full-screen mode that assumes it is -running on a cursor-addressable terminal or terminal emulator. - -Input tokens for the setup prompts will be read from the -remainder of the command line before standard input. Thus, for -example, you can invoke the program as - - -sst regular medium good fancy - - -to start a regular medium game as a good player in 'fancy' -mode (all features enabled). - - -AUTHORS -Super Star Trek was designed and written by David Matuszek, Paul -Reynolds, and Don Smith in the 1970s. It was resurrected by Tom Almy. -The screen-oriented interface is by Stas Sergeev. This version has -been cleaned up and documented by Eric S. Raymond -esr@snark.thyrsus.com. There is a project -page. - - - diff --git a/sstlinux.c b/sstlinux.c deleted file mode 100644 index 90d50ad..0000000 --- a/sstlinux.c +++ /dev/null @@ -1,18 +0,0 @@ -#include -#include -#include -#include -#include "sstlinux.h" - -static int fd = 0; - -void sound(unsigned int freq) -{ - if(fd==0) fd=open("/dev/console", O_RDONLY); - if(fd>0) ioctl(fd, KDMKTONE, 1193180/freq + (0xFFFF<<16)); -} - -void nosound(void) -{ - if(fd>0) ioctl(fd, KDMKTONE, 0); -} diff --git a/sstlinux.h b/sstlinux.h deleted file mode 100644 index 1080f96..0000000 --- a/sstlinux.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef __SSTLINUX_H -#define __SSTLINUX_H - -void sound(unsigned int); -void nosound(void); - -#define delay(x) usleep(x*1000) -#define randomize() srand((unsigned)time(NULL)) - -#endif