+++ /dev/null
-/****h* Autodoc/ROBODoc [3.2]
- * NAME
- * ROBODoc -- AutoDoc formatter
- * COPYRIGHT
- * Copyright (C) 1994-2000 Frans Slothouber and Jacco van Weert.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * FUNCTION
- * ROBODoc is intended to be a replacement for the original AutoDocs
- * program. ROBODoc will extract the procedure comment headers
- * from a source file, and put them into a separate documentation file.
- * There are five different file output formats:
- * ASCII
- * HTML (HyperText Markup Langauge) -- mainly used on the Internet;
- * thus the files can be viewed with a normal HTML viewer/browser
- * AmigaGuide -- this format can be viewed by AmigaGuide (Amiga only)
- * LaTeX - as input to LaTeX to produce .dvi files
- * RTF (Rich Text Format) -- as input to the Help compiler (Windows only)
- * For further information read the documentation in the archive.
- * AUTHOR
- * Frans Slothouber: <fslothouber@acm.org>.
- * Source code and additional extensions from version 2.0 and up.
- *
- * Petteri Kettunen: <petterik@iki.fi>
- * Bug fixes, FOLD, C features.
- *
- * Jacco van Weert: <weertj@xs4all.nl>
- * Original idea and program.
- *
- * Bernd Koesling: <KOESSI@CHESSY.aworld.de>
- * Bug fixes, functional improvements, code cleanup.
- *
- * Anthon Pang: <apang@mindlink.net>
- * RTF support, Bug fixes.
- *
- * Thomas Aglassinger: <agi@sbox.tu-graz.ac.at>
- * Fixes and cleanup of HTML-output
- *
- * CREATION DATE
- * 20-Dec-94
- * MODIFICATION HISTORY
- * Modifications by Jacco van Weert.
- * 19-Jan-95 - v0.8: First test beta-version
- * 26-Jan-95 - v0.92: 2nd test beta-version
- * 2-Feb-95 - v0.93: Mungwall hit, solved.
- * When item headers, are also available
- * in body then parts are duplicated solved.
- * Mar-95 - v1.0a: Final version
- * 2-Apr-95 - v1.0b: Bug fixes
- * Procedure header search bug solved.
- * Print 'created procedure' text
- * 20-Apr-95 - v1.1a: INTERNALONLY option added.
- * Sort problem solved.
- * Modifications by FNC Slothouber.
- * 10-May-1995 - v2.0a * Program completely rewritten
- * * added SOURCE item and LaTeX output.
- * * added TAB converter.
- * 11-May-1995 - v2.0b * Accepts headers that start with
- * any sequence of non-spaces.
- * RoboDoc should work with any
- * type of programming language now.
- * 12-May-1995 - v2.0c * Bug fixes.
- * 15-May-1995 - v2.0d * New Defaults file.
- * * Added Verbose option.
- * 24-May-1995 - v2.0e * Fixed a bug that cause the
- * CleanUp Routine to lock up.
- * * Improved the HTML output,
- * should work faster now.
- * Modifications by Koessi
- * 01-Aug-1995 - v2.0? * more robust parsing, less enforcer-hits
- * * removed self-referencing links !
- * * remarked most changes with *koessi*
- * * added GoldEd-foldmarks
- * * compiled successfully with SAS-C 6.3
- * 07-Aug-1995 - * automated foldmarks "\***"
- * ! GoldEd's foldmarks == RoboDoc marker !
- * * quoted source parsing enhanced
- * 08-Aug-1995 - * a lot of while instead of for
- * * a lot of switch() instead of ifelse
- * * version defined
- * * RB_Say, RB_Panic now useable like printf()
- * new formats for nearly all output-strings
- * * char *whoami is global copy of argv[0]
- * * BOLD <- MAKE_LARGE && AMIGAGUIDE
- * * succesfully compiled&tested on HPUX
- * (HP9000/800)
- * * optimized listfunctions
- * * encapsulated header- and link-
- * allocating and freeing
- * * RB_Find_Function_Name() replaced
- * with RB_FilePart()
- * Modifications by FNC Slothouber.
- * 18-Aug-1995 - v3.0
- * o New scanner that searches for a set default markers
- * that define what is a comment or what is not and that
- * define what or what is not a header/end marker.
- * o Added Beast Support
- * 27-Aug-1995 - v3.0b
- * o Fixed a bug with the defaults file
- * o Improved search algorithm RoboDoc is now 5.8 times faster.
- * 06-Sep-1995 - v3.0c
- * o Bug fixes
- * 08-Oct-1995 - v3.0d
- * o Bug fixes
- * 04-Feb-1996 - v3.0e
- * o fixed the problem with the TOC that included links to headers that
- * were not selected. (i.e internal)
- * Modifications by apang
- * 08-Mar-1996 - v3.0f
- * o Cleaner build for Borland C++ 4.52
- * o Added more markers (C++, Pascal, Modula-2, COBOL)
- * o Added more item types/names
- * o Added #defines for the preamble (COMMENT_ROBODOC and
- * COMMENT_COPYRIGHT)
- * o BLANK_HEADER for detection of asterisk'd lines
- * o RB_Say() the GENERIC header warning instead of using printf()
- * o Indents SOURCE body in output
- * o ASCII respects the TOC flag; removed extraneous newline after
- * formfeed (so it's more like AutoDoc)
- * o HTML output fixed to handle '<', '>', and '&'
- * o LaTeX attributes and '%' handling added; fancied up the output a bit
- * o RTF support added
- * o Changed some fprintf()'s to fputc()'s for potentially lower overhead
- * o Fixed line eater bug
- * o More general fix to the TOC problem of including internal links
- * when it wasn't selected
- * Modifications by FNC Slothouber.
- * 01-April-1996 - v3.0h
- * o Added ';' to > and < so lynx also recognizes them.
- * o Fancied up the HTML output.
- * 10-July-1996 - v3.0i
- * o Bug Fix, Both the options INTERNAL and INTERNALONLY did not
- * work correctly.
- * Modifications by agi
- * 15-Dec-1997 - v3.0j
- * o cleaned the HTML-output, so it now conforms to the DTD for HTML-3.2
- * o TOC now is an ordered list (<OL> and <LI>)
- * o added "<!DOCTYPE..>"
- * o added quotes to values of some HTML-attributes
- * o more compatible implementation of the SGML-comment containing
- * copyright-info replaced all occurrences of <B><PRE>.. by <PRE><B>
- * o replaced <H2/3> by <H1/2>
- * o fixed two minor warnings reported by gcc -Wall
- * Modifications by FNC Slothouber.
- * 14-Aug-1998 - v3.0k * Tcl/Tk '#' handling added;
- * Feb-1999 - v3.0l * Added function to reverse the header list.
- * Modifications by Petteri Kettunen
- * Feb 1999 - v3.0m
- * o Changed background color to white
- * o Changed size of Table of Contents title. (H3 instead of H1)
- * o The reverse function also reversed the sorted header list,
- * fixed this.
- * Modifications by Petteri Kettunen
- * August 1999 - v3.0m+
- * o Support for folding in SOURCE items, HTML only.
- * o indent -kr
- * o Added options FOLD and C
- * Modifications by FNC Slothouber.
- * August 1999 - v3.1
- * o More documentation and a more informative usage() function.
- * o GPL-ed.
- * o robodoc -c prints licence
- * o removed a number of Source items from the documentation to reduce
- * the size of the robodoc.c.html file... no fun for people
- * to download a >100k file.
- * o removed the warning about not using a robodoc default file.
- * o indent -orig -i2 -nbc -ncdb -bad -bap
- * o Fixed the warnings.
- * o Fixed some occurrences of (evil cast)malloc (thou shalt not
- * cast malloc :)
- * o ROBODoc now returns EXIT_FAILURE or EXIT_SUCCESS, as defined
- * in <stdlib.h>
- * o Fixed a memory leak in RB_Analyse_Document()
- * Oct 1999 - v3.1b
- * o <A NAME="source code file name"> is generated at the beginning of
- * each document. A mention of the source code name in another
- * document creates a link to this name (provided you use xrefs).
- * o Moved most #defines and enums to robodoc.h
- * o Made ROBODoc more forgiving in reading the xrefs file. Empty
- * lines are allowed and also spaces at the end of a file name.
- * Nov 1999 - v3.1c -- From patches that I received from Stefan Kost
- * o renamed BEAST METHODS -> METHODS
- * o renamed BEAST ATTRIBUTES -> ATTRIBUTES
- * o added new items useful for object oriented programming; some of
- * these items are already used in os3.1 autodocs
- * TAGS, COMMANDS, DERIVED FROM, DERIVED BY, USES,
- * CHILDREN, USED BY, PARENTS, USAGE, PURPOSE
- * o commented the item names
- * o changed item-type enums to end all with _ITEM
- * o changed RB_Find_Link to accept names ending with '...'
- * o changed copyright comment to be a style-guide conform version string.
- * o changed RB_VER[] to be a style-guide conform version string
- * o changed AMIGA into _AMIGA, because the first one does not exists,
- * when compiling with NOANSI on SAS C/C++
- * Dec 1999 - v3.1d
- * o added new header types for, classes, methods, variables,
- * functions, strutures and constants. (Idea of Stefan Kost)
- * o added a command to create a master index file that contains
- * sorted pointers to all classes, methods, variables,
- * functions, strutures and constants.
- * Dec 1999 - v3.1e
- * o added markers for HTML.
- * o modified the RB_Find_Link() function to also words that include
- * "::". This is used for C++ methods.
- * o added a RB_Function_Name() function that correctly extracts the
- * function name (or the name of any other object that is documented)
- * from the header name. The old code used RB_FilePart which failed
- * on C++ method names.
- * o Fixed a core-dumping bug in RB_Set_Doc_Base()
- * Dec 1999 - v3.1f
- * o added RB_TimeStamp() to include time stamps in the documentation.
- * o Documentation is now generated in LaTeX2e format.
- * o added '|****' as begin marker, '|' as remark marker and '|***' as
- * end marker for GNU assembler support.
- * o ran ident on all source. Using the GNU standard now.
- * o Added new fold markers provided by Petteri
- * May 2000 - v3.2
- * o Using automake and autoconf.
- * o Added fixes to folding code Petteri.
- * o Added markers for FORTAN 90
- * June 2000 - V3.2.1
- * o Added patch from Simo Muinonen: This solved the following
- * problem:
- * When e.g. a field of a structured C variable (with an
- * underscore in its name) is referred to using the
- * point notation (e.g. "g_Status.tpstat"), the variable
- * name is not recognized as a separate keyword. This
- * can also happen when a keyword is in a comment at the
- * end of a sentence with an immediately following ".".
- * o Fixed the "stuctures" type in the master index file.
- * o Added mailto: support provided by Guillaume Etorre.
- * July 2000 - V3.2.2
- * o Added option SINGLEDOC
- * For LaTeX output this generates documentation without
- * the start and end headers. This way the generated file
- * can be included in a master file.
- * o Added master index file for LaTeX output. The documentation
- * gathered from several source files can now be included into
- * one big file.
- * o Added the option NOSOURCE. With this option the SOURCE item
- * is not included in the documentation.
- * o Added the TITLE option. This allows to set the title for
- * the master index file.
- * o Made the search for headermarkers case insensitve.
- * REM == Rem == rem
- * July 2000 - V3.2.3
- * o Fixed a bug that caused links of the type
- * "someword/anotherword," to be ignored, while
- * "someword/anotherword" was recognized.
- * Sep 2000
- * o Labels with identical names are now numbered.
- * Apr 2001
- * o The source file is opened "rb" this I hope will
- * make it possible to use Robodoc under windows.
- * (Thanks to Carlo Caminati)
- *
- * NOTES
- * Has been succesfully compiled:
- * On an Amiga with SAS/C, DICE C and gcc (Amiga 1200)
- * On a Sun Sparc Station with gcc (under SunOS 4.1)
- * On a Dec Alpha Station
- * Under HP/UX on a HP9000/800
- * Under IRIX
- * On a Linux box with gcc, Slackware, Redhat, and Debian 2.1.
- * BUGS
- * - HTML output is not Lynx friendly -- attributes are applied
- * to leading white space =P ... solution: fix Lynx >=)
- * - Can't get the escape character for @ to work in
- * AmigaGuide format.
- * - Horrible use of feof() and fgets()
- * Other bugs?
- * Catch them in a jar and send them to fslothouber@acm.org
- * Latest version can be found on
- * http://robodoc.sourceforge.net
- * http://www.xs4all.nl/~rfsber/Robo/
- * http://freshmeat.net/
- *
- ****/
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include "robodoc.h"
-#include "folds.h"
-#include "headers.h"
-#include "items.h"
-#include "util.h"
-#include "links.h"
-#include "analyser.h"
-#include "generator.h"
-
-#ifdef _AMIGA
-char RB_VER[] = "\0$VER: robodoc " VERSION " " __AMIGADATE__ " (c) by Maverick Software Development 1994-2001";
-#else
-char RB_VER[] = "$VER: robodoc " VERSION " (" __DATE__ ") (c) by Maverick Software Development 1994-2001";
-#endif
-
-
-/****v* ROBODoc/source
- * NAME
- * source -- source code file.
- * PURPOSE
- * Pointer to the file with source code.
- * NOTES
- * This is a global. It is however only used by main() and
- * RB_Close_The_Shop(). All other functions are passed a copy.
- *
- * It is a global so that the file can be closed by
- * RB_Close_The_Shop() when the program exits (normally or
- * abnormaly).
- *****
- */
-
-FILE *source = NULL;
-
-/****v* ROBODoc/documentation
- * NAME
- * documentation -- documentation file.
- * PURPOSE
- * Pointer to the file that will contain the documentation extracted
- * from the source code.
- * NOTES
- * This is a global. It is however only used by main() and
- * RB_Close_The_Shop(). All other functions are passed a copy.
- *
- * It is a global so that the file can be closed by
- * RB_Close_The_Shop() when the program exits (normally or
- * abnormaly).
- *****
- */
-
-FILE *documentation = NULL;
-
-
-/****v* ROBODoc/document_title
- * NAME
- * documentat_title -- title for the documentation.
- * PURPOSE
- * Used as the title for master index files or for latex documentation.
- *****
- */
-
-char *document_title = NULL;
-
-/****v* ROBODoc/output_mode [2.0]
- * NAME
- * output_mode -- the mode of output
- * FUNCTION
- * Controls which type of output will be generated.
- * SOURCE
- */
-
-int output_mode = ASCII;
-
-/*******/
-
-
-/****v* ROBODoc/course_of_action [2.0]
- * NAME
- * course_of_action
- * FUNCTION
- * Global Variable that defines the course of action.
- * SOURCE
- */
-
-int course_of_action = DO_MAKE_DOCUMENT;
-
-/*******/
-
-
-/****v* ROBODoc/line_buffer [2.0]
- * NAME
- * line_buffer -- global line buffer
- * FUNCTION
- * Temporary storage area for lines
- * that are read from an input file.
- * SOURCE
- */
-
-char line_buffer[MAX_LINE_LEN];
-
-/*******/
-
-
-/****v* ROBODoc/line_number [2.0]
- * NAME
- * line_number -- global line counter
- * PURPOSE
- * Keeps track of the number of lines that are read from the source file.
- * AUTHOR
- * Koessi
- * SOURCE
- */
-
-int line_number = 0;
-
-/*******/
-
-
-/****v* ROBODoc/use [3.0h]
- * NAME
- * use -- usage string
- * FUNCTION
- * Inform the user how to use ROBODoc.
- * AUTHOR
- * Koessi
- * SOURCE
- */
-
-char use[] =
-"ROBODoc Version " VERSION ", autodocs formatter ($Revision$)\n"
-"(c) 1994-2001 Frans Slothouber and Jacco van Weert\n"
-"robodoc comes with ABSOLUTELY NO WARRANTY.\n"
-"This is free software, and you are welcome to redistribute it\n"
-"under certain conditions; type `robodoc -c' for details.\n"
-"\n"
-"Usage:\n"
-" robodoc <source file> <documentation file> [options]\n"
-" or\n"
-" robodoc <xrefs file> <master index file> INDEX [options]\n"
-"\n"
-"You can use one or more of the following options:\n"
-" GENXREF <xref file> - to generate an xref file.\n"
-" XREF <xrefs file> - if you want to use xref files to create\n"
-" cross links.\n"
-" INDEX - create a master index file.\n"
-" TABSIZE <nr_sp> - convert each TAB to nr_sp of spaces.\n"
-" TOC - a table of contents will be generated.\n"
-" SORT - the headers will be sorted.\n"
-" -v - tell robodoc to tell you all about it.\n"
-" INTERNAL - headers marked internal will also be included.\n"
-" INTERNALONLY - only headers marked internal will be included.\n"
-" FOLD - enable folding if HTML output is selected.\n"
-" C - Use ANSI C grammar in source items (test, HTML only).\n"
-"The type of output is selected with one of the following switches:\n"
-" ASCII, GUIDE, HTML, LATEX, or RTF\n"
-"If no type is specified ASCII is used.\n"
-"The following abbreviations are also allowed:\n"
-" TOC = -t XREF = -x SORT = -s INTERNAL = -i \n"
-" GENXREF = -g INTERNALONLY = -io TABSIZE = -ts\n"
-"Example:\n"
-" robodoc simulator.c simulator.html HTML -v TOC SORT\n"
-"Authors/Contributors: Frans Slothouber <fslothouber@acm.org>,"
-" Jacco van Weert,\n"
-" Petteri Kettunen, Bernd Koesling, Thomas Aglassinger, Anthon Pang, and\n"
-" Stefan Kost\n"
-"For more information, and the lastest version:\n"
-" http://www.xs4all.nl/~rfsber/Robo/index.html\n"
-" Send bug reports to <fslothouber@acm.org>.\n";
-
-/********/
-
-
-/****v* ROBODoc/copying [3.1]
- * NAME
- * copying -- licence information
- * FUNCTION
- * inform the user how to copy me
- * AUTHOR
- * Frans
- *******
- */
-
-char copying[] =
-"\n"
-" Distributed under the GNU GENERAL PUBLIC LICENSE\n"
-" TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n"
-" See the source archive for a copy of the complete licence\n"
-" If you do not have it you can get it from\n"
-" http://freshmeat.net/appindex/1999/08/30/936003795.html\n";
-
-
-/* Global variables */
-
-char *whoami = NULL; /* me,myself&i */
-int tab_size = 8;
-char doc_base[1024]; /* PetteriK */
-
-
-/****f* ROBODoc/RB_Set_Doc_Base
- * NAME
- * RB_Set_Doc_Base -- get file name without extension.
- ******
- */
-
-void
-RB_Set_Doc_Base (char *path)
-{
- int ptr = 0, n = -1;
-
- while (path[ptr] != '\0')
- {
- if (path[ptr] == '.')
- {
- n = ptr;
- }
- ptr++;
- }
- if (n != -1)
- {
- strncpy (doc_base, path, n);
- }
- else
- {
- strcpy (doc_base, path);
- }
- RB_Say ("doc_base is \"%s\"\n", doc_base);
-}
-
-
-
-
-/****f* ROBODoc/main [2.0d]
- * NAME
- * main -- Entry point of ROBODoc
- * SYNOPSIS
- * main (int argc, char **argv)
- * FUNCTION
- * Get and parse the arguments.
- * Analyse document and generate the documentation.
- * SOURCE
- */
-
-int
-main (int argc, char **argv)
-{
- char *file_with_xrefs, *output_file_for_xrefs;
-
- whoami = argv[0]; /* global me,myself&i */
- if (argc < 2)
- {
- printf ("%s", use);
- }
- else if (argc < 3)
- {
- if (strcmp (argv[1], "-c") == 0)
- {
- printf ("%s", copying);
- }
- else
- {
- printf ("%s", use);
- }
- }
- else
- {
- RB_Analyse_Arguments (argc, argv, &file_with_xrefs,
- &output_file_for_xrefs);
-
- RB_Say ("Analysing Defaults File\n");
- RB_Analyse_Defaults_File ();
-
- RB_Say ("trying to open source file \"%s\"\n", argv[1]);
- if ((source = fopen (argv[1], "rb")) != NULL)
- {
- if (!(course_of_action & DO_INDEX))
- {
- RB_Say ("analysing source file \"%s\"\n", argv[1]);
- RB_Analyse_Document (source);
- RB_Number_Duplicate_Headers();
-
- if (course_of_action & DO_SORT)
- {
- RB_Say ("sorting headers\n");
- RB_Slow_Sort ();
- }
- else
- {
- RB_Reverse_List ();
- }
- if ((course_of_action & DO_USE_XREFS) && file_with_xrefs)
- {
- if ((xreffiles_file = fopen (file_with_xrefs, "r")) != NULL)
- {
- RB_Analyse_Xrefs (xreffiles_file);
- }
- else
- {
- RB_Panic ("can't open file with xref files \"%s\"\n",
- file_with_xrefs);
- }
- }
- }
- else
- { /* INDEX */
- if ((xreffiles_file = fopen (argv[1], "r")) != NULL)
- {
- RB_Analyse_Xrefs (xreffiles_file);
- }
- else
- {
- RB_Panic ("can't open file with xref files \"%s\"\n",
- argv[1]);
- }
- }
- if (course_of_action & DO_MAKE_DOCUMENT)
- {
- RB_Say ("trying to open destination file \"%s\"\n", argv[2]);
- if ((documentation = fopen (argv[2], "w")) != NULL)
- {
- RB_Say ("generating documentation\n");
- RB_Set_Doc_Base (argv[2]);
- RB_Generate_Documentation (documentation,
- RB_FilePart (argv[1]),
- RB_FilePart (argv[2]));
- fclose (documentation);
- documentation = NULL;
- }
- else
- RB_Panic ("can't open destination file \"%s\"\n", argv[2]);
- }
- else if ((course_of_action & DO_MAKE_XREFS)
- && output_file_for_xrefs)
- {
- RB_Say ("trying to open xref destination file \"%s\"\n",
- output_file_for_xrefs);
- if ((documentation = fopen (output_file_for_xrefs, "w")) != NULL)
- {
- RB_Say ("generating xref destination file \"%s\"\n",
- output_file_for_xrefs);
- RB_Generate_xrefs (documentation, argv[1], argv[2]);
- fclose (documentation);
- documentation = NULL;
- }
- else
- RB_Panic ("can't open xref destination file \"%s\"\n",
- output_file_for_xrefs);
- }
- else if (course_of_action & DO_INDEX)
- {
- if ((documentation = fopen (argv[2], "w")) != NULL)
- {
- RB_Generate_Index (documentation, argv[1]);
- fclose (documentation);
- documentation = NULL;
- }
- else
- {
- RB_Panic ("can't open destination file \"%s\"\n", argv[2]);
- }
- }
- }
- else
- RB_Panic ("can't open source file \"%s\"\n", argv[1]);
- }
- RB_Say ("Ready\n");
- RB_Close_The_Shop ();
- return EXIT_SUCCESS;
-}
-
-/*****/
-
-
-
-
-/****f* ROBODoc/RB_Analyse_Arguments [3.0h]
- * NAME
- * RB_Analyse_Arguments
- * SYNOPSIS
- * RB_Analyse_Arguments (argc, argv, file_with_xrefs,
- * output_file_for_xrefs)
- * RB_Analyse_Arguments (int, char **, char **, char **)
- * FUNCTION
- * Get and parse the arguments. This is a quite complex function.
- * It assumes that the first and second parameter are the
- * name of the source file and name of the documentation file
- * respectively. They are therefore skipped.
- * May modifie: output_mode, course_of_action, file_with_xrefs,
- * output_file_for_xrefs, document_title.
- * SOURCE
- */
-
-void
-RB_Analyse_Arguments (int argc, char **argv,
- char **file_with_xrefs,
- char **output_file_for_xrefs)
-{
- char **parameter;
- int parameter_nr;
-
- for (parameter_nr = argc - 3, parameter = argv + 3;
- parameter_nr > 0;
- parameter++, parameter_nr--)
- {
-
- if (!RB_Str_Case_Cmp (*parameter, "HTML"))
- output_mode = HTML;
- else if (!RB_Str_Case_Cmp (*parameter, "GUIDE"))
- output_mode = AMIGAGUIDE;
- else if (!RB_Str_Case_Cmp (*parameter, "LATEX"))
- output_mode = LATEX;
- else if (!RB_Str_Case_Cmp (*parameter, "ASCII"))
- output_mode = ASCII;
- else if (!RB_Str_Case_Cmp (*parameter, "RTF"))
- output_mode = RTF;
- else if (!RB_Str_Case_Cmp (*parameter, "FOLD"))
- extra_flags |= FOLD; /* PetteriK */
- else if (!RB_Str_Case_Cmp (*parameter, "C"))
- extra_flags |= C_MODE; /* PetteriK */
- else if (!RB_Str_Case_Cmp (*parameter, "SORT") ||
- !RB_Str_Case_Cmp (*parameter, "-S"))
- course_of_action |= DO_SORT;
- else if (!RB_Str_Case_Cmp (*parameter, "INDEX"))
- {
- course_of_action |= DO_INDEX;
- course_of_action &= ~DO_MAKE_DOCUMENT;
- }
- else if (!RB_Str_Case_Cmp (*parameter, "INTERNAL") ||
- !RB_Str_Case_Cmp (*parameter, "-I"))
- course_of_action |= DO_INCLUDE_INTERNAL;
- else if (!RB_Str_Case_Cmp (*parameter, "SINGLEDOC"))
- course_of_action |= DO_SINGLEDOC;
- else if (!RB_Str_Case_Cmp (*parameter, "NOSOURCE"))
- course_of_action |= DO_NOSOURCE;
- else if (!RB_Str_Case_Cmp (*parameter, "INTERNALONLY") ||
- !RB_Str_Case_Cmp (*parameter, "-IO"))
- course_of_action |= DO_INTERNAL_ONLY;
- else if (!RB_Str_Case_Cmp (*parameter, "TOC") ||
- !RB_Str_Case_Cmp (*parameter, "-T"))
- course_of_action |= DO_TOC;
- else if (!RB_Str_Case_Cmp (*parameter, "-V"))
- course_of_action |= DO_TELL;
- else if (!RB_Str_Case_Cmp (*parameter, "TITLE"))
- {
- if (--parameter_nr)
- {
- parameter++;
- document_title = *parameter;
- RB_Say ("TITLE=\"%s\"\n", *document_title);
- }
- else
- RB_Panic ("you must specify a title with the TITLE option\n");
- }
- else if (!RB_Str_Case_Cmp (*parameter, "XREF") ||
- !RB_Str_Case_Cmp (*parameter, "-X"))
- {
- if (--parameter_nr)
- {
- parameter++;
- *file_with_xrefs = *parameter;
- RB_Say ("XREF=\"%s\"\n", *file_with_xrefs);
- course_of_action |= DO_USE_XREFS;
- }
- else
- RB_Panic ("you must specify a xref file with the XREF option\n");
- }
- else if (!RB_Str_Case_Cmp (*parameter, "TABSIZE") ||
- !RB_Str_Case_Cmp (*parameter, "-TS"))
- {
- if (--parameter_nr)
- {
- parameter++;
- tab_size = atoi (*parameter);
- }
- else
- {
- RB_Panic ("you must specify the number of spaces with the"
- " TABSIZE option\n");
- }
- }
- else if (!RB_Str_Case_Cmp (*parameter, "GENXREF") ||
- !RB_Str_Case_Cmp (*parameter, "-G"))
- {
- if (--parameter_nr)
- {
- ++parameter;
- *output_file_for_xrefs = *parameter;
- RB_Say ("GENXREF=\"%s\"\n", *output_file_for_xrefs);
- course_of_action |= DO_MAKE_XREFS;
- course_of_action &= ~DO_MAKE_DOCUMENT;
- }
- else
- RB_Panic ("you must specify a xref file with the GENXREF option\n");
- }
- else
- {
- RB_Panic ("unknown option %s\n", *parameter);
- }
- }
- if ((course_of_action & DO_USE_XREFS) &&
- (output_mode == ASCII) &&
- !(course_of_action & DO_INDEX))
- {
- printf ("%s: WARNING, you can not use xrefs when you generate\n"
- "\t\tdocumentation in ASCII [discarding switch]\n",
- argv[0]);
- course_of_action &= ~DO_USE_XREFS;
- }
- if (course_of_action & DO_INDEX)
- {
- if ((output_mode != LATEX) && (output_mode != HTML)) {
- RB_Panic ("you can only use the INDEX option in combination with LATEX or HTML\n");
- }
- }
-}
-
-/******/
-
-
-
-/****i* ROBODoc/RB_Close_The_Shop [3.0b]
- * NAME
- * RB_Close_The_Shop -- free resources.
- * SYNOPSIS
- * void RB_Close_The_Shop ()
- * FUNCTION
- * Frees all resources used by robodoc.
- * SEE ALSO
- * RB_Free_Header(), RB_Free_Link()
- * SOURCE
- */
-
-void
-RB_Close_The_Shop (void)
-{
- struct RB_header *cur_header, *tmp_header;
- struct RB_link *cur_link, *tmp_link;
-
- if (source)
- fclose (source);
- if (documentation)
- fclose (documentation);
- if (xreffiles_file)
- fclose (xreffiles_file);
- if (xref_file)
- fclose (xref_file);
-
- for (cur_header = first_header; cur_header;)
- {
- tmp_header = cur_header->next_header;
- RB_Free_Header (cur_header);
- cur_header = tmp_header;
- }
-
- for (cur_link = first_link; cur_link;)
- {
- tmp_link = cur_link->next_link;
- RB_Free_Link (cur_link);
- cur_link = tmp_link;
- }
-
- if (header_index)
- free (header_index);
- if (link_index)
- free (link_index);
-}
-
-/******/