summaryrefslogtreecommitdiff
path: root/web/funnelAC/sources/help.c
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /web/funnelAC/sources/help.c
Initial commit
Diffstat (limited to 'web/funnelAC/sources/help.c')
-rw-r--r--web/funnelAC/sources/help.c605
1 files changed, 605 insertions, 0 deletions
diff --git a/web/funnelAC/sources/help.c b/web/funnelAC/sources/help.c
new file mode 100644
index 0000000000..83911b3a07
--- /dev/null
+++ b/web/funnelAC/sources/help.c
@@ -0,0 +1,605 @@
+/*##############################################################################
+
+FUNNNELWEB COPYRIGHT
+====================
+FunnelWeb is a literate-programming macro preprocessor.
+
+Copyright (C) 1992 Ross N. Williams.
+
+ Ross N. Williams
+ ross@spam.adelaide.edu.au
+ 16 Lerwick Avenue, Hazelwood Park 5066, Australia.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of Version 2 of the GNU General Public License as
+published by the Free Software Foundation.
+
+This program is distributed WITHOUT ANY WARRANTY; without even the implied
+warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+See Version 2 of the GNU General Public License for more details.
+
+You should have received a copy of Version 2 of the GNU General Public
+License along with this program. If not, you can FTP the license from
+prep.ai.mit.edu/pub/gnu/COPYING-2 or write to the Free Software
+Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+Section 2a of the license requires that all changes to this file be
+recorded prominently in this file. Please record all changes here.
+
+Programmers:
+ RNW Ross N. Williams ross@spam.adelaide.edu.au
+
+Changes:
+ 07-May-1992 RNW Program prepared for release under GNU GPL V2.
+
+##############################################################################*/
+
+
+/******************************************************************************/
+/* HELP.C */
+/******************************************************************************/
+/* */
+/* REPRESENTING MESSAGES AS C CODE */
+/* =============================== */
+/* Experience has shown that it is much more reliable to code text messages */
+/* into a program than to expect the program to track down text files */
+/* containing the messages at run time. Worthwhile for smallish files (such */
+/* as these help messages) at least. For this reason, most the messages in */
+/* this module are represented by code (e.g. as in printf statements). */
+/* */
+/* The only exception is the 18K Gnu license message which is a bit too big */
+/* to be done by hand. It has been moved to the help_gnu module. */
+/* */
+/******************************************************************************/
+
+#include <ctype.h>
+#include "style.h"
+
+#include "as.h"
+#include "help.h"
+#include "help_gnu.h"
+#include "misc.h"
+#include "option.h"
+
+/******************************************************************************/
+
+/* This module contains many many output statements that call an output */
+/* function. To neaten up all these calls, we define a global variable to */
+/* hold a pointer to the function and simple macro to write output using */
+/* the function. */
+LOCVAR void (*pf) P_((char *));
+
+#define WX(STR) (*pf)(STR)
+
+/******************************************************************************/
+
+LOCAL void hel_men P_((void));
+LOCAL void hel_men ()
+{
+ WX("\n");
+ WX("FunnelWeb Help Messages\n");
+ WX("-----------------------\n");
+ WX("Introduction - Introduction to FunnelWeb.\n");
+ WX("DOcumentation - How to obtain FunnelWeb documentation.\n");
+ WX("Options - Command line options.\n");
+ WX("DEfoptions - Default command line options.\n");
+ WX("COMmands - Interactive commands.\n");
+ WX("Registration - How to register as an \"official\" FunnelWeb user.\n");
+ WX("Support - How you can help support FunnelWeb development.\n");
+ WX("COPyright - Copyright notice.\n");
+ WX("License - The license under which this software is distributed (long).\n");
+ WX("Nowarranty - Extract from the GNU license concerning lack of warranty.\n");
+ WX("DIstribution - Extract from the GNU license concerning distribution.\n");
+ WX("MOdification - Read this message if you intend to modify FunnelWeb.\n");
+ WX("Versions - A list of existing versions of FunnelWeb.\n");
+ WX("Acknowledge - Thanks to people who helped with FunnelWeb development.\n");
+ WX("MEnu - The message you are reading (the default help message).\n");
+ WX("\n");
+ WX("To display a message, give its (optionally abbreviated) name in a help command.\n");
+ WX("To capture a message to a file, add +J<filename> to the fw command. Examples:\n");
+ WX("\n");
+ WX(" fw +Hintroduction +Jintro.txt -- From the operating system level.\n");
+ WX(" help introduction -- From FunnelWeb interactive mode.\n");
+}
+
+/******************************************************************************/
+
+LOCAL void hel_int P_((void));
+LOCAL void hel_int ()
+{
+ WX("\n");
+ WX("FunnelWeb Introduction\n");
+ WX("----------------------\n");
+ WX("Welcome to FunnelWeb, a literate-programming macro preprocessor.\n");
+ WX("\n");
+ WX("Traditional computer programs are primarily written for computers and consist\n");
+ WX("of code laced with comments. In contrast, literate programs are primarily\n");
+ WX("written for humans and consist of comments laced with code. While simple, the\n");
+ WX("effect of this inversion can be so profound as to change one's whole approach\n");
+ WX("to programming. The literate programmer focuses on conveying meaning to other\n");
+ WX("intelligent beings rather than merely convincing the computer to behave in a\n");
+ WX("particular way. It is the difference between performing and exposing a magic\n");
+ WX("trick.\n");
+ WX("\n");
+ WX("FunnelWeb is a production-quality literate-programming tool that emphasises\n");
+ WX("simplicity and reliability. It provides a macro facility, and assists in the\n");
+ WX("production of typeset documentation. FunnelWeb runs on most popular machines\n");
+ WX("(Sun, VAX, Mac, PC) and its highly portable source code in C is freely\n");
+ WX("available under a GNU license.\n");
+ WX("\n");
+ WX("To get started with FunnelWeb, obtain a printed copy of the \"FunnelWeb User's\n");
+ WX("Manual\" (see the \"DOCUMENTATION\" help message). Read the introduction and work\n");
+ WX("through the tutorial. The manual contains an overview of FunnelWeb, an\n");
+ WX("introductory tutorial, and a comprehensive reference manual. Try it!\n");
+}
+
+/******************************************************************************/
+
+LOCAL void hel_opt P_((void));
+LOCAL void hel_opt ()
+{
+ WX("\n");
+ WX("FunnelWeb Command Line Options\n");
+ WX("------------------------------\n");
+ WX("Options are of the form (\"+\" | \"=\" | \"-\") <letter> [<string>].\n");
+ WX("+ turns on an option. - turns it off. = doesn't affect it's onoffedness.\n");
+ WX("The case (e.g. upper or lower) of <letter> does not matter.\n");
+ WX("<string> is usually a filename or directory, but sometimes a number.\n");
+ WX("Convention: f=filename, n=decimal number, h=help message name.\n");
+ WX("\n");
+ WX("Example: fw sloth +L +Jaardvark.xxx +W80 -Q =Twalrus.tex\n");
+ WX("\n");
+ WX("Action options: (choose at least one when you invoke FunnelWeb from the OS).\n");
+ WX("If you choose more than one, they will be executed in the order given here.\n");
+ WX(" +Xf Execute specified Funnelweb script.\n");
+ WX(" +Ff Process specified input file.\n");
+ WX(" +Hh Display specified help message.\n");
+ WX(" +K Invoke FunnelWeb's interative mode.\n");
+ WX("\n");
+ WX("Other options:\n");
+ WX(" +B1 Diagnostic: Dump image of input file to listing file.\n");
+ WX(" +B2 Diagnostic: Dump scanner's line list to listing file.\n");
+ WX(" +B3 Diagnostic: Dump scanner's token list to listing file.\n");
+ WX(" +B4 Diagnostic: Dump parser's macro table to listing file.\n");
+ WX(" +B5 Diagnostic: Dump parser's document list to listing file.\n");
+ WX(" +B6 Diagnostic: Dump time breakdown report to listing file.\n");
+ WX(" +B7 Diagnostic: Suppress non-deterministic output.\n");
+ WX(" +Cn Number of lines of context around diagnostics in listing file.\n");
+ WX(" +D Delete each output file identical to its previous version.\n");
+ WX(" +If Default file specification for include files.\n");
+ WX(" +Jf Generate journal file. Default file specification.\n");
+ WX(" +Lf Generate listing file. Default file specification.\n");
+ WX(" +Of Generate product files. Default file specification.\n");
+ WX(" +Q Quiet mode. Only really important messages displayed on console.\n");
+ WX(" +Tf Generate typesetter file. Default file specification.\n");
+ WX(" +Sn Send errors to console with specified number of lines of context.\n");
+ WX(" +Wn Set maximum length of lines in product files.\n");
+ WX("\n");
+ WX("If an option appears more than once, the rightmost one dominates.\n");
+ WX("For more detailed information, refer to the FunnelWeb User's Manual.\n");
+ WX("For default values refer to the \"DEFOPTIONS\" help message.\n");
+}
+
+/******************************************************************************/
+
+LOCAL void hel_dop P_((void));
+LOCAL void hel_dop ()
+{
+ op_t defop;
+
+ WX("\n");
+ WX("FunnelWeb Default Option Settings\n");
+ WX("---------------------------------\n");
+ WX("These are the settings FunnelWeb STARTS UP with.\n");
+ op_ini(&defop);
+ WX("\n");
+ op_wri(&defop,pf);
+ WX("\n");
+ WX("See the OPTIONS help message for a brief description of these options.\n");
+ WX("For more detailed information, refer to the FunnelWeb User's Manual.\n");
+}
+
+/******************************************************************************/
+
+LOCAL void hel_com P_((void));
+LOCAL void hel_com ()
+{
+ WX("\n");
+ WX("FunnelWeb Interactive Commands\n");
+ WX("------------------------------\n");
+ WX(" ! - Comment. Ignores the whole line. \n");
+ WX(" ABSENT fn - Aborts if specified file exists. \n");
+ WX(" CODIFY ftext fC - Convert text file into C code to write text. \n");
+ WX(" COMPARE f1 f2 - Aborts if two files are different. \n");
+ WX(" DEFINE n \"text\" - Defines $n to translate to text. \n");
+ WX(" DIFF f1 f2 logf [ABORT] - Writes differences between f1 and f2 to logf.\n");
+ WX(" - Severe if different and ABORT is present. \n");
+ WX(" DIFFSUMMARY - Summary of differences done since DIFFZERO. \n");
+ WX(" DIFFZERO - Zeros differences counters. \n");
+ WX(" ENEO fn - Establish Non Existence Of file. \n");
+ WX(" EXECUTE fn - Execute commands in specified file. \n");
+ WX(" EXISTS fn - Aborts if file does not exist. \n");
+ WX(" FIXEOLS fn [outf] - Fixes up EOL markers in specified file. \n");
+ WX(" FW options - Invoke FunnelWeb-proper once. \n");
+ WX(" HELP [name] - Displays specified help message. \n");
+ WX(" HERE - Terminates effect of SKIPTO command. \n");
+ WX(" QUIT - Quits FunnelWeb. \n");
+ WX(" SET options - Sets options. \n");
+ WX(" SHOW - Displays currently active options. \n");
+ WX(" SKIPTO - Ignore commands until HERE command. \n");
+ WX(" STATUS - Write out status and diagnostic counts. \n");
+ WX(" STATUS [Sn] [En] [Wn] - Aborts if status is not as specified. \n");
+ WX(" TOLERATE - Don't abort script if next commmand gens err.\n");
+ WX(" TRACE ON | OFF - Turns command tracing ON or OFF. \n");
+ WX(" WRITE \"text\" - Writes specified text to screen and journal. \n");
+ WX(" WRITEU \"text\" - Same as WRITE but underlines text. \n");
+ WX("\n");
+ WX("More detailed information can be found in the FunnelWeb User's Manual.\n");
+ WX("\n");
+ WX("Most of these commands were created to support regression testing and\n");
+ WX("can be ignored by most users. In fact most users will never need to invoke\n");
+ WX("FunnelWeb's interactive mode at all. If you are just getting started\n");
+ WX("with FunnelWeb, it's probably best to run FunnelWeb directly from your\n");
+ WX("command interface and ignore the +K command line option for now.\n");
+}
+
+/******************************************************************************/
+
+LOCAL void hel_doc P_((void));
+LOCAL void hel_doc ()
+{
+ WX("\n");
+ WX("FunnelWeb Documentation\n");
+ WX("-----------------------\n");
+ WX("The following FunnelWeb documentation is available:\n");
+ WX("\n");
+ WX(" \"FunnelWeb User's Manual\": Tutorial, Hints, Reference Manual.\n");
+ WX(" \"FunnelWeb Hacker's Manual\": Notes on Design and Implementation.\n");
+ WX("\n");
+ WX("Everyone involved with FunnelWeb should read the User's Manual.\n");
+ WX("It contains everything you need to learn how to use FunnelWeb.\n");
+ WX("\n");
+ WX("The Hacker's Manual is for those who want to install, modify, fix,\n");
+ WX("fiddle with, and generally hack the FunnelWeb C source code.\n");
+ WX("\n");
+ WX("Both of these manuals are shipped with the FunnelWeb distribution\n");
+ WX("kit, and should be available on your machine in the form of LaTeX text\n");
+ WX("files. If you cannot find them, you can obtain them by FTP from:\n");
+ WX("\n");
+ WX(" Machine : sirius.itd.adelaide.edu.au [IP=129.127.40.3].\n");
+ WX(" Directory: ~pub/funnelweb/ (or a directory of similar name).\n");
+ WX("\n");
+}
+
+/******************************************************************************/
+
+LOCAL void hel_reg P_((void));
+LOCAL void hel_reg ()
+{
+ WX("FunnelWeb Registration\n");
+ WX("----------------------\n");
+ WX("If you install or use FunnelWeb, please fill in and return this form:\n");
+ WX("\n");
+ WX(" +----------------------FunnelWeb Registration Form----------------------+\n");
+ WX(" | 1. Date: |\n");
+ WX(" | 2. Title and name: |\n");
+ WX(" | 3. Internet email address: |\n");
+ WX(" | 4. Snail mail address: |\n");
+ WX(" | 5. Work phone number (country,area,number): |\n");
+ WX(" | 6. Which category of FunnelWeb user best describes you? |\n");
+ WX(" | Latent - Installed FunnelWeb, but don't intend to use it. |\n");
+ WX(" | Beginner - Haven't used FunnelWeb much yet; have an open mind. |\n");
+ WX(" | Casual - Use FunnelWeb occasionally. |\n");
+ WX(" | Convert - Use FunnelWeb to do most programming. |\n");
+ WX(" | Fanatic - FunnelWeb has become a way of life. |\n");
+ WX(" | 7. What changes or new features would you like to see in FunnelWeb? |\n");
+ WX(" | 8. Do you want to be kept informed of new FunnelWeb developments? |\n");
+ WX(" | 9. Email this form to \"ross@spam.adelaide.edu.au\", OR snail mail to |\n");
+ WX(" | Ross Williams, 16 Lerwick Avenue, Hazelwood Park 5066, Australia. |\n");
+ WX(" +-----------------------------------------------------------------------+\n");
+ WX("To write this form to a file, use \"fw +hreg +jregform.txt\".\n");
+ WX("You may wish to make a contribution when you register. See SUPPORT.\n");
+}
+
+/******************************************************************************/
+
+LOCAL void hel_cop P_((void));
+LOCAL void hel_cop ()
+{
+ WX("\n");
+ WX("FunnelWeb Copyright\n");
+ WX("-------------------\n");
+ WX("Copyright (C) 1992 Ross Williams.\n");
+ WX("\n");
+ WX("However, FunnelWeb has been released by the author and copyright owner Ross\n");
+ WX("Williams (ross@spam.adelaide.edu.au) under Version 2 of the GNU General Public\n");
+ WX("License published by the Free Software Foundation. This means that you can\n");
+ WX("redistribute FunnelWeb and/or modify it under the terms of the license.\n");
+ WX("\n");
+ WX("Note: This program is distributed WITHOUT ANY WARRANTY; without even the\n");
+ WX("implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n");
+ WX("\n");
+ WX("The following help messages provide further information:\n");
+ WX("\n");
+ WX(" License - The license under which this software is distributed (long).\n");
+ WX(" DIstribution - Extract from the GNU license concerning distribution.\n");
+ WX(" Nowarranty - Extract from the GNU license concerning lack of warranty.\n");
+ WX(" MOdification - Read this message if you intend to modify FunnelWeb.\n");
+ WX(" Registration - How to register as an \"official\" FunnelWeb user.\n");
+ WX("\n");
+}
+
+/******************************************************************************/
+
+LOCAL void hel_now P_((void));
+LOCAL void hel_now ()
+{
+ WX("\n");
+ WX("FunnelWeb Comes With No Warranty\n");
+ WX("--------------------------------\n");
+ WX("Here is an extract from the GNU General Public License Version 2, under which\n");
+ WX("FunnelWeb is distributed. See help message \"LICENSE\" for the full license.\n");
+ WX("\n");
+ WX(" 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\n");
+ WX(" FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN\n");
+ WX(" OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES\n");
+ WX(" PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED\n");
+ WX(" OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n");
+ WX(" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS\n");
+ WX(" TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE\n");
+ WX(" PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\n");
+ WX(" REPAIR OR CORRECTION.\n");
+ WX("\n");
+ WX(" 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\n");
+ WX(" WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR\n");
+ WX(" REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\n");
+ WX(" INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\n");
+ WX(" OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\n");
+ WX(" TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\n");
+ WX(" YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\n");
+ WX(" PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\n");
+ WX(" POSSIBILITY OF SUCH DAMAGES.\n");
+}
+
+/******************************************************************************/
+
+LOCAL void hel_dis P_((void));
+LOCAL void hel_dis ()
+{
+ WX("\n");
+ WX("FunnelWeb Distribution\n");
+ WX("----------------------\n");
+ WX("The following is an extract from the GNU General Public License Version 2,\n");
+ WX("under which FunnelWeb is distributed.\n");
+ WX("\n");
+ WX(" 1. You may copy and distribute verbatim copies of the Program's\n");
+ WX(" source code as you receive it, in any medium, provided that you\n");
+ WX(" conspicuously and appropriately publish on each copy an appropriate\n");
+ WX(" copyright notice and disclaimer of warranty; keep intact all the\n");
+ WX(" notices that refer to this License and to the absence of any warranty;\n");
+ WX(" and give any other recipients of the Program a copy of this License\n");
+ WX(" along with the Program.\n");
+ WX("\n");
+ WX(" You may charge a fee for the physical act of transferring a copy, and\n");
+ WX(" you may at your option offer warranty protection in exchange for a fee.\n");
+ WX("\n");
+ WX("The license also allows you other freedoms. For more information refer\n");
+ WX("to the full text of the license in the help message \"LICENSE\".\n");
+}
+
+/******************************************************************************/
+
+LOCAL void hel_ack P_((void));
+LOCAL void hel_ack ()
+{
+ WX("\n");
+ WX("FunnelWeb Acknowledgements\n");
+ WX("--------------------------\n");
+ WX("The following people assisted with the preparation of FunnelWeb V3.0.\n");
+ WX("\n");
+ WX("Many thanks go to DAVID HULSE (dave@cs.adelaide.edu.au) who translated the 1986\n");
+ WX("version of FunnelWeb (V1) written in Ada into a public domain C version (V2).\n");
+ WX("The C code written by David formed the basis of V3 of FunnelWeb, but was\n");
+ WX("entirely rewritten during the intensive refinement and feature-injection\n");
+ WX("period leading up to this release (V3 is about 3 times the size of V2).\n");
+ WX("\n");
+ WX("Thanks go to SIMON HACKETT (simon@internode.com.au) of Internode Systems\n");
+ WX("Pty Ltd for the use of his Sun, Mac, and PC, for assistance in porting\n");
+ WX("FunnelWeb to the Sun and PC, and for helpful discussions.\n");
+ WX("\n");
+ WX("Thanks go to JEREMY BEGG (jeremy@vsm.com.au) of VSM Software Services\n");
+ WX("for the use of his VAX, and for assistance with the VMS-specific code.\n");
+ WX("\n");
+ WX("Ross Williams (ross@spam.adelaide.edu.au), 12 May 1992.\n");
+}
+
+/******************************************************************************/
+
+LOCAL void hel_ver P_((void));
+LOCAL void hel_ver ()
+{
+ WX("\n");
+ WX("FunnelWeb Versions\n");
+ WX("------------------\n");
+ WX("FunnelWeb was created in 1986 and was used extensively by Ross Williams\n");
+ WX("(ross@spam.adelaide.edu.au) for three years. However, Version 1.0 was written\n");
+ WX("in Ada and was not very portable (it was fairly VAX/VMS specific). David Hulse\n");
+ WX("(dave@cs.adelaide.edu.au) took the first step towards a release by translating\n");
+ WX("the Ada code into C. Ross Williams then extensively reworked the C code, making\n");
+ WX("it robust and portable, adding new features, and polishing it to its current\n");
+ WX("form.\n");
+ WX("\n");
+ WX("Vers Lang Created Released Author Copyright Licensing \n");
+ WX("---- ---- ------- -------- -------------- ------------- --------- \n");
+ WX("V1.0 Ada 1986 Never Ross Williams Ross Williams \n");
+ WX("V2.0 C 1989 Never David Hulse Public domain No restriction.\n");
+ WX("V3.0 C 1992 May-1992 Ross Williams Ross Williams GNU release. \n");
+ WX("\n");
+ WX("This is FunnelWeb Version 3.0. Unless otherwise specified, all references\n");
+ WX("in this release to \"FunnelWeb\" refer either to the abstract identity\n");
+ WX("of FunnelWeb, or to this version, FunnelWeb Version 3.0.\n");
+}
+
+/******************************************************************************/
+
+LOCAL void hel_sup P_((void));
+LOCAL void hel_sup ()
+{
+ WX("\n");
+ WX("FunnelWeb Support\n");
+ WX("-----------------\n");
+ WX("FunnelWeb is released \"as is\" under a GNU license, and no formal support\n");
+ WX("is available. You have the right to make changes to FunnelWeb and to use\n");
+ WX("the modified versions created by random programmers. However, this is\n");
+ WX("discouraged (see the MODIFICATION help message).\n");
+ WX("\n");
+ WX("In fact the support that is most needed is your financial support for the\n");
+ WX("FunnelWeb developers! It has taken MONTHS of full-time UNPAID work to bring\n");
+ WX("FunnelWeb to you in its current form. I don't want to inconvenience users\n");
+ WX("who install FunnelWeb, play with it, and then hardly ever use it. If you are\n");
+ WX("in this category, please register, but don't bother contributing. However,\n");
+ WX("if you find that FunnelWeb has become a useful programming tool, a contribution\n");
+ WX("of some positive multiple of US$50 would be appreciated.\n");
+ WX("\n");
+ WX("To make a contribution, send payment with a completed registration form\n");
+ WX("(see the REGISTRATION help message) to:\n");
+ WX("\n");
+ WX(" Renaissance Software Pty Ltd\n");
+ WX(" Email: ross@spam.adelaide.edu.au\n");
+ WX(" Snail: 16 Lerwick Avenue, Hazelwood Park 5066, Australia.\n");
+ WX("\n");
+ WX("Payment can be by personal or bank cheque to any bank in the world or by\n");
+ WX("Visa or Mastercard. Please give the card name, number, expiry date, and\n");
+ WX("the amount to be paid in US dollars. All contributions will be appreciated\n");
+ WX("and will encourage further FunnelWeb development. However, no undertaking\n");
+ WX("is made whatsoever about how the money will be used.\n");
+ WX("\n");
+ WX("Ross Williams (ross@spam.adelaide.edu.au), 12 May 1992.\n");
+}
+
+/******************************************************************************/
+
+LOCAL void hel_mod P_((void));
+LOCAL void hel_mod ()
+{
+ WX("\n");
+ WX("FunnelWeb Modifications\n");
+ WX("-----------------------\n");
+ WX("FunnelWeb is distributed under a GNU license, and you are free to modify the\n");
+ WX("source code and distribute modified copies (see the help message LICENSE).\n");
+ WX("However, there are good reasons why you should avoid doing this.\n");
+ WX("\n");
+ WX(" 1) If you distribute modified versions of FunnelWeb, you run the risk of\n");
+ WX(" creating a version that will diverge from the \"official\" version of\n");
+ WX(" FunnelWeb which I intend to maintain.\n");
+ WX("\n");
+ WX(" 2) If you release a version of FunnelWeb with a changed input language,\n");
+ WX(" users of your modified version will create source files that will no\n");
+ WX(" longer work on other versions of FunnelWeb. The result will be chaos.\n");
+ WX("\n");
+ WX("For these reasons I request that you do not distribute modified versions of\n");
+ WX("FunnelWeb, particularly versions with a modified language. However, if you must\n");
+ WX("distribute a version with a modified language, PLEASE CHANGE ITS NAME (i.e.\n");
+ WX("from \"FunnelWeb\" to something else). Please also allocate a new file extension\n");
+ WX("to replace \".fw\" as the extension for source files written in the modified\n");
+ WX("language. For more information, refer to the FunnelWeb Hacker's Manual.\n");
+ WX("\n");
+ WX("Ross Williams (ross@spam.adelaide.edu.au), 12 May 1992.\n");
+}
+
+/******************************************************************************/
+
+LOCAL bool prefeq P_((char *,char *));
+LOCAL bool prefeq (p_pref,p_target)
+/* Returns TRUE iff string p_pref is a case insensitive prefix of p_target. */
+char *p_pref;
+char *p_target;
+{
+ char *p,*q;
+
+ if (strlen(p_pref) > strlen(p_target))
+ return FALSE;
+
+ p=p_pref;
+ q=p_target;
+ while (*p != EOS)
+ {
+ if (toupper(*p) != toupper(*q)) return FALSE;
+ p++;
+ q++;
+ }
+ return TRUE;
+}
+
+/******************************************************************************/
+
+EXPORT uword hel_num (p_name)
+char *p_name;
+{
+ uword matches = 0;
+ uword messnum;
+
+ /* We want to be fairly lenient on the user here as the user is trying to */
+ /* obtain help and will probably get annoyed and give up if it doesn't work, */
+ /* so we perform case insensitive prefix matching. However, we don't want */
+ /* to match if the user inputs a prefix that matches two message names. This */
+ /* means we can't just return when we find a match; we have to see if there */
+ /* are any others as well. */
+
+ if (prefeq(p_name,"MENU" )) {messnum=HL_MEN; matches++;}
+ if (prefeq(p_name,"INTRODUCTION" )) {messnum=HL_INT; matches++;}
+ if (prefeq(p_name,"OPTIONS" )) {messnum=HL_OPT; matches++;}
+ if (prefeq(p_name,"DEFOPTIONS" )) {messnum=HL_DOP; matches++;}
+ if (prefeq(p_name,"COMMANDS" )) {messnum=HL_COM; matches++;}
+ if (prefeq(p_name,"DOCUMENTATION")) {messnum=HL_DOC; matches++;}
+ if (prefeq(p_name,"REGISTRATION" )) {messnum=HL_REG; matches++;}
+ if (prefeq(p_name,"LICENSE" )) {messnum=HL_GNU; matches++;}
+ if (prefeq(p_name,"COPYRIGHT" )) {messnum=HL_COP; matches++;}
+ if (prefeq(p_name,"NOWARRANTY" )) {messnum=HL_NOW; matches++;}
+ if (prefeq(p_name,"DISTRIBUTION" )) {messnum=HL_DIS; matches++;}
+ if (prefeq(p_name,"ACKNOWLEDGE" )) {messnum=HL_ACK; matches++;}
+ if (prefeq(p_name,"VERSIONS" )) {messnum=HL_VER; matches++;}
+ if (prefeq(p_name,"SUPPORT" )) {messnum=HL_SUP; matches++;}
+ if (prefeq(p_name,"MODIFICATION" )) {messnum=HL_MOD; matches++;}
+
+ if (matches != 1) return HL_ERR;
+
+ return messnum;
+}
+
+/******************************************************************************/
+
+EXPORT void hel_wri (p_outf,messno)
+void (*p_outf) P_((char *));
+uword messno;
+{
+ as_cold( 1 <= messno, "hel_wri: Message number is zero.");
+ as_cold(messno <= HL_MAX, "hel_wri: Message number is greater than HL_MAX.");
+
+ /* Set the global output function pointer. */
+ pf=p_outf;
+
+ switch(messno)
+ {
+ case HL_MEN: hel_men(); break;
+ case HL_INT: hel_int(); break;
+ case HL_OPT: hel_opt(); break;
+ case HL_DOP: hel_dop(); break;
+ case HL_COM: hel_com(); break;
+ case HL_DOC: hel_doc(); break;
+ case HL_REG: hel_reg(); break;
+ case HL_GNU: hel_gnu(p_outf); break; /* Calling another module. */
+ case HL_COP: hel_cop(); break;
+ case HL_NOW: hel_now(); break;
+ case HL_DIS: hel_dis(); break;
+ case HL_ACK: hel_ack(); break;
+ case HL_VER: hel_ver(); break;
+ case HL_SUP: hel_sup(); break;
+ case HL_MOD: hel_mod(); break;
+ default : as_bomb("hel_wri: switch defaulted.");
+ }
+}
+
+/******************************************************************************/
+/* End of HELP.C */
+/******************************************************************************/