<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD Simplified DocBook XML V1.1//EN"
"docbook-simple/sdocbook.dtd">
<article lang="en">
<articleinfo>
  <title>API Reference</title>
</articleinfo>
<section>
<title>Docuwala/ROBODoc</title>
<anchor id="robo0"/>
<anchor id="Docuwala2fROBODoc"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   ROBODoc is intended to be a replacement for the original AutoDocs
   program.  ROBODoc will extract the comment headers from a source
   file, and put them into a separate documentation file.
   General Flow
</para>

<literallayout class="monospaced">
      Sourcecode  ---&gt; [ROBODoc] ---&gt; <link linkend="robo6">Document</link>.
</literallayout>
<para>

   The whole ROBODoc process consists of three steps: scanning,
   analysing, generating.
</para>

<para>
   Scanning 
</para>

<para>
   ROBODoc scans the source directory tree. This collects the names of
   all the source files.
</para>

<para>
   Analysing
</para>

<para>
   ROBODOc analyses all the sourcefiles. This reads the content of all
   source files and collects all the headers.
</para>

<para>
   Generating
</para>

<para>
   In this step the headers are written to one or more documentation files.
   In addition 
</para>


<para>
   The data collected during scanning and analysing is stored in a
   number of structures.
</para>

<para>
   <link linkend="robo72">RB_Directory</link>, it stores the names of the sourcefiles and directories in
   the source direcory tree.  File names are stored in a <link linkend="robo97">RB_Filename</link>
   structure, directory names in a <link linkend="robo225">RB_Path</link> structure.  Each <link linkend="robo97">RB_Filename</link>
   contains a pointer (path) to a <link linkend="robo225">RB_Path</link> structure that tells in which
   directory a file is located.  Each <link linkend="robo225">RB_Path</link> has a pointer (parent) to
   another <link linkend="robo225">RB_Path</link> structure that tells in which directory is a directory
   located (of which directory it is a subdirectory).  The only exception
   is the root directory.
</para>
   
<para>
   Besides the name of the sourcefile, the <link linkend="robo97">RB_Filename</link> also stores the
   name of the documentation file.
</para>
   
<para>
   For each sourcefile there is an <link linkend="robo222">RB_Part</link> structure.  It contains a
   pointer (filename) to the <link linkend="robo97">RB_Filename</link> and a list (headers) of
   RB_Header structure containing the headers found in the sourcefile.
</para>
   
<para>
   Every RB_Header structure contains a pointer (owner) to the <link linkend="robo222">RB_Part</link>
   structure to which it belongs.  <link linkend="robo10">Headers</link> can form a hierarchy that is
   used to create sections and subsections in the documentation.  To
   store this hierarchy every <link linkend="robo148">RB_header</link> structure contains a pointer
   (parent) to its parent header.  For instance, given the following two
   headers, SubModule is the parent of SubSubModule.
</para>
<literallayout class="monospaced">
     ****h* TopModule/SubModule
     *
     **** 
</literallayout>
<para>
   
</para>
<literallayout class="monospaced">
     ****h* SubModule/SubSubModule
     *
     **** 
</literallayout>
<para>
   
   In the documentation this creates the sections
</para>
<literallayout class="monospaced">
      1.TopModule
      1.1 SubModule
      1.1.1 SubSubModule
</literallayout>
<para>
   
   The <link linkend="robo72">RB_Directory</link> and the linked list of <link linkend="robo222">RB_Part</link> structures are
   stored in a <link linkend="robo87">RB_Document</link> structure.
</para>
   
<para>
   During the generation of the documentation ROBODoc tries to create
   cross links between the mention of a header's name (an object) and the
   documentation generated from that header (the documentation for the
   object).
</para>
   
<para>
   To aid this proces there is an array of <link linkend="robo204">RB_link</link> structures.  This
   array is sorted for quick searching.  <link linkend="robo204">RB_link</link> structures the name
   of a header and the name of the label under which the documentation
   can be found in the documentation file.
</para>
<formalpara><title>AUTHOR</title><para></para></formalpara>
<para>
   See AUTHORS in the archive.
</para>
<formalpara><title>CREATION DATE</title><para></para></formalpara>
<para>
   20-Dec-94  Jacco van Weert.
</para>
<formalpara><title>MODIFICATION HISTORY</title><para></para></formalpara>
<para>
   See ChangeLog in the archive. Latest version can be found on:
</para>
<itemizedlist><listitem><para>   http://www.xs4all.nl/~rfsber/Robo/
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>BUGS</title><para></para></formalpara>
<para>
   Other bugs? Catch them in a jar and send them to rfsber -(at)- xs4all.nl
</para>
<section>
<title>ROBODoc/Analyser</title>
<anchor id="robo2"/>
<anchor id="ROBODoc2fAnalyser"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   Analyser -- Functions to scan source and collect headers
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   This module provides the functions to scan a sourcefile and
   collect all the headers.
</para>
<section>
<title>Analyser/Analyse_Indentation</title>
<anchor id="robo24"/>
<anchor id="Analyser2fAnalyse5fIndentation"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
  Figure out how text is indented. 
 SYNPOPSIS
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   arg_item -- the item to be analysed.
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Analyser/Analyse_Item_Format</title>
<anchor id="robo25"/>
<anchor id="Analyser2fAnalyse5fItem5fFormat"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Try to determine the formatting of an item.
   An empty line generates a new paragraph
   Things that are indented more that the rest of the text
   are preformatted.
   Things that start with a '*' or '-' create list items
   unless they are indented more that the rest of the text.
 SYNPOPSIS
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   arg_item -- the item to be analysed.
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Analyser/Analyse_List</title>
<anchor id="robo26"/>
<anchor id="Analyser2fAnalyse5fList"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Parse the item text to see if there are any lists.
   A list is either case I:
</para>
<literallayout class="monospaced">
      ITEMNAME
         o bla bla
         o bla bla
</literallayout>
<para>
   or case II:
</para>
<literallayout class="monospaced">
      some text:     &lt;-- begin of a list
      o bla bla      &lt;-- list item
        bla bla bla  &lt;-- continuation of list item.
      o bla bla      &lt;-- list item
                     &lt;-- end of a list 
      bla bla        &lt;-- this can also be the end of a list.
</literallayout>
<para>
 SYNPOPSIS
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   arg_item  -- the item to be parsed.
</para></listitem><listitem><para>   indent    -- the indent of this item.
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>OUTPUT</title><para></para></formalpara>
<itemizedlist><listitem><para>   arg_item  -- the itemlines will contain formatting information 
                  for all the lists that were found.
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Analyser/Analyse_ListBody</title>
<anchor id="robo27"/>
<anchor id="Analyser2fAnalyse5fListBody"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Analyse... (TODO) 
 SYNPOPSIS
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   arg_item    -- the item to be analysed.
</para></listitem><listitem><para>   start_index --
</para></listitem><listitem><para>   arg_index   --
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Analyser/Analyse_Paragraphs</title>
<anchor id="robo28"/>
<anchor id="Analyser2fAnalyse5fParagraphs"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Analyse paragraphs... (TODO) 
 SYNPOPSIS
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   arg_item -- the item to be analysed.
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Analyser/Analyse_Preformatted</title>
<anchor id="robo29"/>
<anchor id="Analyser2fAnalyse5fPreformatted"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Analyse preformatted text ... (TODO) 
 SYNPOPSIS
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   arg_item -- the item to be analysed.
</para></listitem><listitem><para>   indent   -- 
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Analyser/AnalyseHeaderType</title>
<anchor id="robo30"/>
<anchor id="Analyser2fAnalyseHeaderType"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Determine the type of the header.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   cur_char -- pointer to the header type character
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>OUTPUT</title><para></para></formalpara>
<itemizedlist><listitem><para>   is_internal -- indicates if it is an internal header or not.*
</para></listitem><listitem><para>   cur_char -- points to the header type character
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<itemizedlist><listitem><para>   pointer to a <link linkend="robo149">RB_HeaderType</link>
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Analyser/Find_End_Marker</title>
<anchor id="robo31"/>
<anchor id="Analyser2fFind5fEnd5fMarker"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Scan and store all lines from a source file until
   an end marker is found.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   document -- a pointer to an opened source file.
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>OUTPUT</title><para></para></formalpara>
<itemizedlist><listitem><para>   new_header -- the lines of source code will be added
                   here.
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<itemizedlist><listitem><para>   TRUE  -- an end marker was found.
</para></listitem><listitem><para>   FALSE -- no end marker was found while scanning the
              source file.
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Analyser/Function_Name</title>
<anchor id="robo32"/>
<anchor id="Analyser2fFunction5fName"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   A header name is consists of two parts. The module name and
   the function name. This returns a pointer to the function name.
   The name "function name" is a bit obsolete. It is really the name
   of any of objects that can be documented; classes, methods,
   variables, functions, projects, etc.
</para>
</section>
<section>
<title>Analyser/Get_Indent</title>
<anchor id="robo33"/>
<anchor id="Analyser2fGet5fIndent"/>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   line -- the line
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<para>
   The indentation.
</para>
</section>
<section>
<title>Analyser/Grab_Header</title>
<anchor id="robo34"/>
<anchor id="Analyser2fGrab5fHeader"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Grab a header from a source file, that is scan a source file
   until the start of a header is found.  Then search for the end
   of a header and store all the lines in between.
 SYNPOPSIS
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   sourcehandle -- an opened source file.
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>OUTPUT</title><para></para></formalpara>
<itemizedlist><listitem><para>   sourcehandle -- will point to the line following the end marker.
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<para>
   0 if no header was found, or a pointer to a new header otherwise.
</para>
</section>
<section>
<title>Analyser/Is_Empty_Line</title>
<anchor id="robo35"/>
<anchor id="Analyser2fIs5fEmpty5fLine"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Check if line is empty. This assumes that 
   Copy_Lines_To_Item has been run on the item.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   line -- the string to be analysed.
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Analyser/Is_List_Item_Continuation</title>
<anchor id="robo36"/>
<anchor id="Analyser2fIs5fList5fItem5fContinuation"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Is it like the second line in something like:
</para>
<literallayout class="monospaced">
     * this is a list item
       that continues 
</literallayout>
<para>
 SYNPOPSIS
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   arg_line  -- the current line
</para></listitem><listitem><para>   indent    -- the indent of the current item.
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<itemizedlist><listitem><para>   TRUE  -- it is.
</para></listitem><listitem><para>   FALSE -- it is not.
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Analyser/Is_ListItem_Start</title>
<anchor id="robo37"/>
<anchor id="Analyser2fIs5fListItem5fStart"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Test if a line starts with something that indicates a list item.
   List items start with '*', '-', or 'o'.
 SYNPOPSIS
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   line -- the line
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<itemizedlist><listitem><para>   TRUE  -- it did start with one of those characters
</para></listitem><listitem><para>   FALSE -- it did not.
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Analyser/Is_Pipe_Marker</title>
<anchor id="robo38"/>
<anchor id="Analyser2fIs5fPipe5fMarker"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   Is_Pipe_Marker
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Check for "pipe" markers e.g. "|html ". 
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<para>
   Pointer to the data to be piped to document or in case no pointers
   are found.
</para>
<formalpara><title>SEE ALSO</title><para></para></formalpara>
<para>
   RB_Check_Pipe
</para>
</section>
<section>
<title>Analyser/Is_Start_List</title>
<anchor id="robo39"/>
<anchor id="Analyser2fIs5fStart5fList"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Check... (TODO) 
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   arg_line --
</para></listitem><listitem><para>   indent  --
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Analyser/Is_Tool</title>
<anchor id="robo40"/>
<anchor id="Analyser2fIs5fTool"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Checks for tool start and end markers
</para>
</section>
<section>
<title>Analyser/Module_Name</title>
<anchor id="robo41"/>
<anchor id="Analyser2fModule5fName"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Get the module name from the header name.  The header name will be
   something like
</para>

<literallayout class="monospaced">
     module/functionname.
</literallayout>
<para>

 SYNPOPSIS
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   header_name -- a pointer to a nul terminated string.
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<para>
   Pointer to the modulename.  You're responsible for freeing it.
</para>
<formalpara><title>SEE ALSO</title><para></para></formalpara>
<para>
   <link linkend="robo32">Function_Name</link>()
</para>
</section>
<section>
<title>Analyser/Preformat_All</title>
<anchor id="robo42"/>
<anchor id="Analyser2fPreformat5fAll"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Process... (TODO) 
 SYNPOPSIS
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   arg_item -- the item to be pre-formatted.
</para></listitem><listitem><para>   source   -- is it a source item ?
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Analyser/RB_Analyse_Document</title>
<anchor id="robo43"/>
<anchor id="Analyser2fRB5fAnalyse5fDocument"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Scan all the sourcefiles of all parts of a document for
   headers.  Store these headers in each part (<link linkend="robo222">RB_Part</link>).
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   document -- document to be analysed.
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<para>
   Each part will contain the headers that were found in the
   sourcefile of the part.
</para>
</section>
<section>
<title>Analyser/RB_Analyse_Items</title>
<anchor id="robo44"/>
<anchor id="Analyser2fRB5fAnalyse5fItems"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Locate the items in the header and create <link linkend="robo184">RB_Item</link> structures for
   them.
 SYNPOPSIS
</para>
</section>
<section>
<title>Analyser/RB_Find_Marker</title>
<anchor id="robo45"/>
<anchor id="Analyser2fRB5fFind5fMarker"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   RB_Find_Marker -- Search for header marker in document.
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Read document file line by line, and search each line for 
   any of the headers defined in the array  <link linkend="robo146">header_markers</link> (OR
   if using the -rh switch, robo_head)
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<para>
   document - pointer to the file to be searched.
   the gobal buffer <link linkend="robo137">line_buffer</link>.
</para>
<formalpara><title>OUTPUT</title><para></para></formalpara>
<itemizedlist><listitem><para>   document will point to the line after the line with 
     the header marker.
</para></listitem><listitem><para>   is_internal will be TRUE if the header is an internal
     header.
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<itemizedlist><listitem><para>   header type
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>BUGS</title><para></para></formalpara>
<para>
   Bad <link linkend="robo285">use</link> of feof(), fgets().
</para>
<formalpara><title>SEE ALSO</title><para></para></formalpara>
<para>
   <link linkend="robo31">Find_End_Marker</link>
</para>
</section>
<section>
<title>Analyser/RB_GetCurrentFile</title>
<anchor id="robo46"/>
<anchor id="Analyser2fRB5fGetCurrentFile"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   Get a copy of the name of the current file.
   Allocates memory.
</para>
</section>
<section>
<title>Analyser/RB_Warning</title>
<anchor id="robo47"/>
<anchor id="Analyser2fRB5fWarning"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   RB_Warning
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Print warning to stdout. (stderr better?)
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   format --
</para></listitem><listitem><para>   ...    --
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Analyser/RB_Warning_Full</title>
<anchor id="robo48"/>
<anchor id="Analyser2fRB5fWarning5fFull"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   RB_Warning_Full
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Print warning to stdout.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   arg_filename    --
</para></listitem><listitem><para>   arg_line_number --
</para></listitem><listitem><para>   arg_format      --
</para></listitem><listitem><para>   ...
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Analyser/Remove_List_Char</title>
<anchor id="robo49"/>
<anchor id="Analyser2fRemove5fList5fChar"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Remove... (TODO) 
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   arg_item    -- the item to be analysed.
</para></listitem><listitem><para>   start_index -- 
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Analyser/ToBeAdded</title>
<anchor id="robo50"/>
<anchor id="Analyser2fToBeAdded"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Test whether or not a header needs to be added to the
   list of headers. This implements the options 
</para>
<literallayout class="monospaced">
      --internal 
</literallayout>
<para>
   and
</para>
<literallayout class="monospaced">
      --internalonly
</literallayout>
<para>
 SYNPOPSIS
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   document  -- a document (to determine the options)
</para></listitem><listitem><para>   header    -- a header
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<para>
   TRUE  -- Add header
   FALSE -- Don't add header
</para>
</section>
</section>
<section>
<title>ROBODoc/ASCII_Generator</title>
<anchor id="robo3"/>
<anchor id="ROBODoc2fASCII5fGenerator"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   ASCII_Generator -- <link linkend="robo8">Generator</link> for ASCII output
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Plain ascii output, no formatting.
</para>
<formalpara><title>MODIFICATION HISTORY</title><para></para></formalpara>
<para>
   2003-06-17  Frans Slothouber V1.0
</para>
<section>
<title>ASCII_Generator/RB_ASCII_Generate_Item_Line_Number</title>
<anchor id="robo51"/>
<anchor id="ASCII5fGenerator2fRB5fASCII5fGenerate5fItem5fLine5fNumber"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Generate line numbers for SOURCE like items
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   dest_doc           -- the file to write to.
</para></listitem><listitem><para>   line_number_string -- the line number as string.
</para></listitem></itemizedlist><para>
</para>
</section>
</section>
<section>
<title>ROBODoc/Configuration</title>
<anchor id="robo4"/>
<anchor id="ROBODoc2fConfiguration"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Functions to access the <link linkend="robo0">ROBODoc</link> <link linkend="robo56">configuration</link> and <link linkend="robo56">configuration</link>
   file (<link linkend="robo214">robodoc</link>.rc) or the file specified with the --rc option.
</para>

<para>
   The <link linkend="robo214">robodoc</link>.rc file consists of a number of blocks.  Each
   block starts with a line of the form
</para>

<literallayout class="monospaced">
     &lt;block name&gt;:
</literallayout>
<para>

   This is followed by a number of lines of data.  Each line starts
   with at least one space followed by the actual data.
</para>

<para>
   This module parses this data and stores it in the global
   <link linkend="robo56">configuration</link>.
</para>
<formalpara><title>NOTES</title><para></para></formalpara>
<para>
   Is missing a lot of documentation.
</para>

<para>
   You can not <link linkend="robo285">use</link> <link linkend="robo307">RB_Say</link>() in this module since the --tell flag
   won't be parsed until after this module has finished.
</para>
<section>
<title>Configuration/add_keywords_to_hash_table</title>
<anchor id="robo52"/>
<anchor id="Configuration2fadd5fkeywords5fto5fhash5ftable"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Initalize hash table and add all keywords from <link linkend="robo56">configuration</link>.keywords
   to the hash table
</para>
</section>
<section>
<title>Configuration/add_to_keywords_hash_table</title>
<anchor id="robo53"/>
<anchor id="Configuration2fadd5fto5fkeywords5fhash5ftable"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Add a keyword to the hash table
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<para>
   keyword -- The keyword string
</para>
</section>
<section>
<title>Configuration/allocate_keywords_hash_table</title>
<anchor id="robo54"/>
<anchor id="Configuration2fallocate5fkeywords5fhash5ftable"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Allocates space for the keyword hash table.
</para>

<para>
   The size of the table depends on the number of keywords rounded up to the
   next power of two.
</para>
</section>
<section>
<title>Configuration/c_keywords</title>
<anchor id="robo55"/>
<anchor id="Configuration2fc5fkeywords"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   The default C keywords.
</para>
</section>
<section>
<title>Configuration/configuration</title>
<anchor id="robo56"/>
<anchor id="Configuration2fconfiguration"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   This global stores all the configuration parameters specified on
   the command line and in the <link linkend="robo214">robodoc</link>.rc file.
</para>
</section>
<section>
<title>Configuration/default_item_names</title>
<anchor id="robo57"/>
<anchor id="Configuration2fdefault5fitem5fnames"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Defines the names of items that <link linkend="robo0">ROBODoc</link> recognized as
   items by default if none are specified in the
   <link linkend="robo214">robodoc</link>.rc file.
</para>
</section>
<section>
<title>Configuration/Find_Keyword</title>
<anchor id="robo58"/>
<anchor id="Configuration2fFind5fKeyword"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Find a keyword in the hash table
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   keyword -- The keyword string
</para></listitem><listitem><para>   len     -- The length of the keyword string
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>RETURN VALUE</title><para></para></formalpara>
<itemizedlist><listitem><para>   pointer to the found keyword string in hash table or
</para></listitem><listitem><para>   NULL if the keyword is not found
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Configuration/Find_Parameter_Char</title>
<anchor id="robo59"/>
<anchor id="Configuration2fFind5fParameter5fChar"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Checks for the existence of a given <link linkend="robo56">configuration</link> parameter
   (Character match)
</para>
</section>
<section>
<title>Configuration/Find_Parameter_Exact</title>
<anchor id="robo60"/>
<anchor id="Configuration2fFind5fParameter5fExact"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Checks for the existence of a given <link linkend="robo56">configuration</link> parameter
   (exact string match)
</para>
</section>
<section>
<title>Configuration/Find_Parameter_Partial</title>
<anchor id="robo61"/>
<anchor id="Configuration2fFind5fParameter5fPartial"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Checks for the existence of a given <link linkend="robo56">configuration</link> parameter
   (partial string match)
</para>
</section>
<section>
<title>Configuration/GetParameters</title>
<anchor id="robo62"/>
<anchor id="Configuration2fGetParameters"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Parse a line of text and store the individual words in
   a <link linkend="robo68">Parameters</link> structure.  Words are seperated by spaces,
   the exception are words surrounded by quotes. So:
</para>
<literallayout class="monospaced">
      aap noot mies "back to the future"
</literallayout>
<para>
   contains four words.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   line -- the line of text.
</para></listitem><listitem><para>   parameters  -- the set of parameters
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Configuration/Hash_Keyword</title>
<anchor id="robo63"/>
<anchor id="Configuration2fHash5fKeyword"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Calculate the hash value for a string
</para>

<para>
   The hash value is a 32 bit integer based on the hash function written by
   Bob Jenkins. It is then reduced by an AND operation to the actual size of
   the hash table.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   key    -- The keyword string
</para></listitem><listitem><para>   keylen -- The length of the keyword string
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>RETURN VALUE</title><para></para></formalpara>
<para>
   The hash value for the keyword.
</para>
<section>
<title>Hash_Keyword/HASH_MIX</title>
<anchor id="robo142"/>
<anchor id="Hash5fKeyword2fHASH5fMIX"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Helper macro for the function <link linkend="robo63">Hash_Keyword</link>( )
</para>
</section>
</section>
<section>
<title>Configuration/Install_C_Syntax</title>
<anchor id="robo64"/>
<anchor id="Configuration2fInstall5fC5fSyntax"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Install default C keywords and comments
</para>
</section>
<section>
<title>Configuration/keywords_hash</title>
<anchor id="robo65"/>
<anchor id="Configuration2fkeywords5fhash"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   This is the hash table for the keywords.
   See <link linkend="robo67">keywords_hash_s</link>.
</para>
</section>
<section>
<title>Configuration/keywords_hash_mask</title>
<anchor id="robo66"/>
<anchor id="Configuration2fkeywords5fhash5fmask"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Mask for keyword hash function.
   This mask reduces the hash value for the actual hash table size.
   Also the size of the hash table can be derived from this mask:
</para>
<literallayout class="monospaced">
     hash table size = keywords_hash_mask + 1
</literallayout>
<para>
</para>
</section>
<section>
<title>Configuration/keywords_hash_s</title>
<anchor id="robo67"/>
<anchor id="Configuration2fkeywords5fhash5fs"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
    Structure for a keyword hash table row.
</para>
<formalpara><title>ATTRIBUTES</title><para></para></formalpara>
<itemizedlist><listitem><para>    keyword -- pointer to the keyword
</para></listitem><listitem><para>    next    -- pointer to next entry in the row
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Configuration/Parameters</title>
<anchor id="robo68"/>
<anchor id="Configuration2fParameters"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
    Structure to store all the paramters found in a block in the
    <link linkend="robo214">robodoc</link> configuation file.
</para>
<formalpara><title>ATTRIBUTES</title><para></para></formalpara>
<itemizedlist><listitem><para>    number -- the number of parameters found.
</para></listitem><listitem><para>    size   -- the maximum size of the names array.
</para></listitem><listitem><para>    names  -- an array with the values of the parameters.
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>NOTES</title><para></para></formalpara>
<para>
    Find a better name for the attribute 'names'
</para>
</section>
<section>
<title>Configuration/RB_Configuration</title>
<anchor id="robo69"/>
<anchor id="Configuration2fRB5fConfiguration"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   All the data from the <link linkend="robo214">robodoc</link>.rc file is stored in this
   structure.
</para>
<formalpara><title>ATTRIBUTES</title><para></para></formalpara>
<itemizedlist><listitem><para>   items                 -- an array with names that <link linkend="robo214">robodoc</link> recognizes as
                              items.  Alsways includes the name "SOURCE" as
                              the first element.
</para></listitem><listitem><para>   ignore_items          -- an array with the names of items that <link linkend="robo0">ROBODoc</link>
                              should ignore.
</para></listitem><listitem><para>   source_items          -- an array with the names of items that work
                              similar to the built-in SOURCE item.
</para></listitem><listitem><para>   preformatted_items    -- item names that will be automatically
                              preformatted
</para></listitem><listitem><para>   format_items          -- item names that should be formatted by the
                              browser
</para></listitem><listitem><para>   item_order            -- an array with item names that
                              indicates which items should be displayed first.
</para></listitem><listitem><para>   options               -- Array with all options specified both on the
                              commandline as well as in the <link linkend="robo214">robodoc</link>.rc file.
</para></listitem><listitem><para>   custom_headertypes    -- list with custom header types.
</para></listitem><listitem><para>   ignore_files          -- list with wildcard expressions that specifies
                              files and directories that <link linkend="robo214">robodoc</link> should skip
                              while scanning the source tree.
</para></listitem><listitem><para>   <link linkend="robo146">header_markers</link>        -- list with markers that mark the begin of a
                              header.
</para></listitem><listitem><para>   <link linkend="robo152">remark_markers</link>        -- list with markers that mark a remark.
</para></listitem><listitem><para>   <link linkend="robo143">end_markers</link>           -- list with markers that markt the end of a
                              header.
</para></listitem><listitem><para>   remark_begin_markers  -- list of markers that mark the begin of
                              a remark.  For instance (*
</para></listitem><listitem><para>   remakr_end_markers    -- list of markers that mark the end of a
                              remark.  For instance   *)
</para></listitem><listitem><para>   keywords              -- source keywords to recognise (and colorise)
</para></listitem><listitem><para>   source_line_comments  -- comment markers that span until the end of line
</para></listitem><listitem><para>   header_ignore_chars   -- characters for beginning of header remarks
</para></listitem><listitem><para>   header_separate_chars -- characters that separates header artifacts
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Configuration/ReadConfiguration</title>
<anchor id="robo70"/>
<anchor id="Configuration2fReadConfiguration"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Read the <link linkend="robo214">robodoc</link> <link linkend="robo56">configuration</link> file, and create
   a <link linkend="robo69">RB_Configuration</link> structure.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   argc -- the arg <link linkend="robo212">count</link> as received by <link linkend="robo275">main</link>()
</para></listitem><listitem><para>   argv -- the arg valules as received by <link linkend="robo275">main</link>()
</para></listitem><listitem><para>   filename -- an optional filename.  If none is given,
               "<link linkend="robo214">robodoc</link>.rc" is used.
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<para>
   An initialized <link linkend="robo56">configuration</link> (a global).
</para>
</section>
</section>
<section>
<title>ROBODoc/Directory</title>
<anchor id="robo5"/>
<anchor id="ROBODoc2fDirectory"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   This module contains function to scan a directory tree and to
   create a <link linkend="robo72">RB_Directory</link> structure.  Most of the OS dependend parts
   of <link linkend="robo0">ROBODoc</link> can be found in this module..
</para>

<para>
   This module currently works under:
</para>
<itemizedlist><listitem><para>   Cygwin   http://cygwin.com 
</para></listitem><listitem><para>   Redhad 7.3 Linux
</para></listitem><listitem><para>   VC++ under Windows NT 
</para></listitem><listitem><para>   MINGW    http://www.mingw.org/ 
</para></listitem><listitem><para>   OS/X
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>AUTHOR</title><para></para></formalpara>
<para>
   Frans Slothouber
</para>
<section>
<title>Directory/content_buffer</title>
<anchor id="robo71"/>
<anchor id="Directory2fcontent5fbuffer"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Temporary buffer file file content and filenames.
</para>
</section>
<section>
<title>Directory/RB_Directory</title>
<anchor id="robo72"/>
<anchor id="Directory2fRB5fDirectory"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   RB_Directory -- the directory tree with the source files.
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Stores information about files in a directory tree.
   The whole structure consist of two linked lists.  One for
   directory paths, and one for filenames.
</para>
<formalpara><title>EXAMPLE</title><para></para></formalpara>
<para>
   The following show an <link linkend="robo213">example</link> structure.
</para>
<literallayout class="monospaced">
     RB_Directory             <link linkend="robo225">RB_Path</link>
     +-------+   +------+    +-------+   +-----------+
     |       +--&gt;| .    |---&gt;| ./sub |--&gt;| ./sub/sub |
     |       |   +------+    +-------+   +-----------+
     |       |      ^              ^            ^
     |       |      |              |            |
     |       |      |-----------+  +------+     +------+
     |       |      |           |         |            |
     |       |      |           |         |            |
     |       |   +------+    +------+   +------+    +-------+
     |       +--&gt;|  a.c |---&gt;| b.c  |--&gt;| sa.c  |--&gt;| ssb.c |
     +-------+   +------+    +------+   +------+    +-------+
                  <link linkend="robo97">RB_Filename</link>
</literallayout>
<para>
</para>
<formalpara><title>ATTRIBUTES</title><para></para></formalpara>
<itemizedlist><listitem><para>   first    --  first <link linkend="robo97">RB_Filename</link> in the list of files
</para></listitem><listitem><para>   current  --  the last file that was returned in
                  RB_Get_Next_Filename.
</para></listitem><listitem><para>   last     --  the last <link linkend="robo97">RB_Filename</link> in the list of files
                   used for the insert operation
</para></listitem><listitem><para>   first_path -- first <link linkend="robo225">RB_Path</link> in the list of paths.
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Directory/RB_Directory_Insert_RB_File</title>
<anchor id="robo73"/>
<anchor id="Directory2fRB5fDirectory5fInsert5fRB5fFile"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Insert an RB_File structure into a <link linkend="robo72">RB_Directory</link> structure.
   The RB_File is added at the end of the list.
</para>
</section>
<section>
<title>Directory/RB_Directory_Insert_RB_Path</title>
<anchor id="robo74"/>
<anchor id="Directory2fRB5fDirectory5fInsert5fRB5fPath"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
  Insert a <link linkend="robo225">RB_Path</link> into a <link linkend="robo72">RB_Directory</link>.
  The <link linkend="robo225">RB_Path</link> is added at the beginning of the list.
</para>
</section>
<section>
<title>Directory/RB_FileType</title>
<anchor id="robo75"/>
<anchor id="Directory2fRB5fFileType"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Determine the type of the file.  This function is used for all
   compilers except VC++.
</para>

<para>
   If _DIRENT_HAVE_D_TYPE is defined we can find the filetype
   directly in the a_direntry.  If not we have to stat the file to
   find out.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   arg_pathname -- the path leading up to this file
</para></listitem><listitem><para>   a_direntry -- a directory entry read by readdir()
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<para>
   The type of the file.
</para>
</section>
<section>
<title>Directory/RB_Fill_Directory</title>
<anchor id="robo76"/>
<anchor id="Directory2fRB5fFill5fDirectory"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   RB_Fill_Directory -- fill a <link linkend="robo72">RB_Directory</link> structure
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Walks through all the files in the directory pointed to
   by arg_path and adds all the files to arg_rb_directory.
   This is a recursive function.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   arg_rb_directory  -- the result.
</para></listitem><listitem><para>   arg_path          -- the current path that is scanned.
</para></listitem><listitem><para>   arg_doc_path      -- the path to the documentation files.
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<para>
   a <link linkend="robo72">RB_Directory</link> structure filled with all sourcefiles and 
   subdirectories in arg_path.
</para>
<formalpara><title>NOTE</title><para></para></formalpara>
<para>
   This a is a recursive function.
</para>
</section>
<section>
<title>Directory/RB_Free_RB_Directory</title>
<anchor id="robo77"/>
<anchor id="Directory2fRB5fFree5fRB5fDirectory"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Free all the memory <link linkend="robo285">use</link> by the <link linkend="robo72">RB_Directory</link> structure.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   arg_directory -- the thing to be freed.
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Directory/RB_Get_FileName</title>
<anchor id="robo78"/>
<anchor id="Directory2fRB5fGet5fFileName"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   <link linkend="robo79">RB_Get_PathName</link> -- extract the file name 
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Given a full path to a file, that is a filename, or a filename
   prefixed with a pathname, return the filename.
   So
</para>
<literallayout class="monospaced">
      "./filename"           returns "filename"
      "/home/et/filename"    returns "filename"
      "filename"             return  "filename"
</literallayout>
<para>
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<para>
   arg_fullpath -- a full path to a file, with or without a path.
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<para>
   0  -- The full path did not contain a filename
   pointer to the filename -- otherwise.
</para>
<formalpara><title>NOTES</title><para></para></formalpara>
<para>
   You are responsible for deallocating it.
</para>
</section>
<section>
<title>Directory/RB_Get_PathName</title>
<anchor id="robo79"/>
<anchor id="Directory2fRB5fGet5fPathName"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   RB_Get_PathName -- extract the path name 
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Given a full path to a file, that is a filename, or a filename
   prefixed with a pathname, return the pathname.
   So
</para>
<literallayout class="monospaced">
      "./filename"           returns "./"
      "/home/et/filename"    returns "/home/et/"
      "filename"             return  ""
</literallayout>
<para>
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<para>
   arg_fullpath -- a full path to a file, with or without a path.
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<para>
   0  -- The full path did not contain a path
   pointer to the pathname -- otherwise.
</para>
<formalpara><title>NOTES</title><para></para></formalpara>
<para>
   You are responsible for deallocating it.
</para>
</section>
<section>
<title>Directory/RB_Get_RB_Directory</title>
<anchor id="robo80"/>
<anchor id="Directory2fRB5fGet5fRB5fDirectory"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   RB_Get_RB_Directory -- get a <link linkend="robo72">RB_Directory</link> structure
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Returns a <link linkend="robo72">RB_Directory</link> structure to the give directory,
   specified by the path.
   This structure can then be uses to walk through all the
   files in the directory and it's subdirectories.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<para>
   arg_rootpath -- the name a the directory to get,
</para>
<literallayout class="monospaced">
                   a nul terminated string.
</literallayout>
<para>
   arg_docroot_name -- the name of the directory the documentation
</para>
<literallayout class="monospaced">
                       file are stored in.  This directory is
                       skipped while scanning for sourcefiles.
                       It can be NULL.
</literallayout>
<para>
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<para>
   A freshly allocated <link linkend="robo72">RB_Directory</link> filled with source files.
</para>
</section>
<section>
<title>Directory/RB_Get_RB_SingleFileDirectory</title>
<anchor id="robo81"/>
<anchor id="Directory2fRB5fGet5fRB5fSingleFileDirectory"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   RB_Get_RB_SingleFileDirectory -- get a <link linkend="robo72">RB_Directory</link> structure
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Returns a <link linkend="robo72">RB_Directory</link> structure to the give directory,
   specified by the path that contains only a single file.
   This is used for the --singlefile option.
</para>
<formalpara><title>INPUT</title><para></para></formalpara>
<itemizedlist><listitem><para>   filename -- a filename.  This may include the path.
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<para>
   a freshly allocated <link linkend="robo72">RB_Directory</link> that contains only
   a single file.
</para>
</section>
<section>
<title>Directory/RB_Is_PathCharacter</title>
<anchor id="robo82"/>
<anchor id="Directory2fRB5fIs5fPathCharacter"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Test if a character is part of the group of
   characters that you would normally find in 
   a path.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<para>
   c -- the character to be tested.
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<para>
   TRUE  -- it is a path character.
   FALSE -- it is not.
</para>
</section>
<section>
<title>Directory/RB_Is_Source_File</title>
<anchor id="robo83"/>
<anchor id="Directory2fRB5fIs5fSource5fFile"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   RB_Is_Source_File -- Is a file a sourcefile?
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   This functions examines the content of a file to
   see whether or not it is a sourcefile.
</para>

<para>
   Currently it checks if there are no nul characters
   in the first 8191 characters of the file.
</para>
</section>
<section>
<title>Directory/RB_Not_Accepted</title>
<anchor id="robo84"/>
<anchor id="Directory2fRB5fNot5fAccepted"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Test if a file should be skipped, 
   because it does not match a pattern in "accept files:"
</para>

<para>
   This <link linkend="robo216">test</link> is done based on the wildcard expressions specified
   in <link linkend="robo56">configuration</link>.accept_files.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   filename -- the name of the file
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Directory/RB_To_Be_Skipped</title>
<anchor id="robo85"/>
<anchor id="Directory2fRB5fTo5fBe5fSkipped"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Test if a file should not be included in the list of source files
   that are scanned for documentation. 
</para>

<para>
   This <link linkend="robo216">test</link> is done based on the wildcard expressions specified
   in <link linkend="robo56">configuration</link>.ignore_files.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   filename -- the name of the file
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Directory/T_RB_FileType</title>
<anchor id="robo86"/>
<anchor id="Directory2fT5fRB5fFileType"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Constants for the two different filetypes that
   <link linkend="robo0">ROBODoc</link> recognizes.
</para>
</section>
</section>
<section>
<title>ROBODoc/Document</title>
<anchor id="robo6"/>
<anchor id="ROBODoc2fDocument"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   This module contains functions to manipulate the central data
   structure (<link linkend="robo87">RB_Document</link>) that contains information about the
   source files, and documentation files, and headers.
</para>

<para>
   The name is a bit confusing because it sort of implies that
   it contains the documentation extracted from the sourcefiles.
</para>

<para>
   For each run a <link linkend="robo87">RB_Document</link> structure is created, it is filled
   by the analyser and directory module and then used by the
   generator module to create the documentation.
</para>
<formalpara><title>MODIFICATION HISTORY</title><para></para></formalpara>
<itemizedlist><listitem><para>   ????-??-??   Frans Slothouber  V1.0
</para></listitem><listitem><para>   2003-02-03   Frans Slothouber  Refactoring
</para></listitem><listitem><para>   2003-10-30   David White       Removed unistd.h for Borland
</para></listitem></itemizedlist><para>
</para>
<section>
<title>Document/RB_Document</title>
<anchor id="robo87"/>
<anchor id="Document2fRB5fDocument"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   RB_Document -- Information store.
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   A document is a collection of source files and documentation
   files.  Depending on the mode that is used there is either a
   single documentation file or there is one documentation file for
   each source file.  This mapping is stored in RB_Document.  For
   each source file there is an <link linkend="robo222">RB_Part</link>. It points to the source
   file, the documentation file, and contains all the headers that
   were found in the source file.
</para>
<formalpara><title>ATTRIBUTES</title><para></para></formalpara>
<itemizedlist><listitem><para>   links    -- linked list of all links.
</para></listitem><listitem><para>   parts    -- linked list of all parts.
</para></listitem><listitem><para>   no_headers -- total number of headers
</para></listitem><listitem><para>   headers  -- array of pointers to all the headers.
</para></listitem><listitem><para>   srctree  -- the list of all sourcefiles in the srcroot.
</para></listitem><listitem><para>   doctype  -- the kind of documentation to be generated.
</para></listitem><listitem><para>   actions  -- what to de while analysing en generating.
</para></listitem><listitem><para>   srcroot  -- root dir for the sourcecode.
</para></listitem><listitem><para>   docroot  -- root dir for the documentation.
</para></listitem><listitem><para>   charset  -- the character set used for HTML and XML
               documentation.
</para></listitem><listitem><para>   first_section_level -- level of the first section, 
                            Defaults to 1 so the first section will
                            be 1.
                            If set to 2 the first section will be 1.1
</para></listitem><listitem><para>   extension -- the extension used for the documentation
                files.
</para></listitem><listitem><para>   css      -- the cascading style sheet to be used.
</para></listitem><listitem><para>   cur_part -- unused   TODO remove.
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Document/RB_Document_Add_Part</title>
<anchor id="robo88"/>
<anchor id="Document2fRB5fDocument5fAdd5fPart"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Add a new part to the document.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   document  -- the document the part is to be added to.
</para></listitem><listitem><para>   part      -- the part to be added
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Document/RB_Document_Collect_Headers</title>
<anchor id="robo89"/>
<anchor id="Document2fRB5fDocument5fCollect5fHeaders"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Create a table of pointers to all headers.  This is done to
   have easy access to all heades without having to scan all
   RB_Parts.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   document -- the document for which the table is created.
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>OUTPUT</title><para></para></formalpara>
<itemizedlist><listitem><para>   document-&gt;headers
</para></listitem><listitem><para>   document-&gt;no_headers
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Document/RB_Document_Create_DocFilePaths</title>
<anchor id="robo90"/>
<anchor id="Document2fRB5fDocument5fCreate5fDocFilePaths"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   This function creates the whole document directory
   tree.  It tests if the directories exist and if they
   do not the directory is created.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   document -- the document for which the tree is created.
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Document/RB_Document_Create_Parts</title>
<anchor id="robo91"/>
<anchor id="Document2fRB5fDocument5fCreate5fParts"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Create all the parts of a document based on the sourcefiles in
   the source tree.  This creates a new <link linkend="robo222">RB_Part</link> for each file in
   the source tree.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>    document -- the document for which the parts are generated.
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Document/RB_Document_Determine_DocFilePaths</title>
<anchor id="robo92"/>
<anchor id="Document2fRB5fDocument5fDetermine5fDocFilePaths"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Determine the path of each of the documentation files based on
   the path of the source file and the documentation root path and
   the source root path.
</para>
<formalpara><title>EXAMPLE</title><para></para></formalpara>
<para>
   srcpath = ./<link linkend="robo216">test</link>/mysrc/sub1/sub2
   srcroot = ./<link linkend="robo216">test</link>/mysrc/
   docroot = ./<link linkend="robo216">test</link>/mydoc/
</para>
<literallayout class="monospaced">
     ==&gt;
</literallayout>
<para>
   docpath = ./<link linkend="robo216">test</link>/mydoc/sub1/sub2
</para>
</section>
<section>
<title>Document/RB_Fill_Header_Filename</title>
<anchor id="robo93"/>
<anchor id="Document2fRB5fFill5fHeader5fFilename"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Fill the file_name attribute of all headers based either on the
   part or the singledoc name.   The file_name tells in which file
   the documentation for the header is to be stored.
</para>
</section>
<section>
<title>Document/RB_Get_RB_Document</title>
<anchor id="robo94"/>
<anchor id="Document2fRB5fGet5fRB5fDocument"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Allocate and initialize an <link linkend="robo87">RB_Document</link> structure.
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<para>
   An initialized document structure.
</para>
</section>
<section>
<title>Document/RB_Open_SingleDocumentation</title>
<anchor id="robo95"/>
<anchor id="Document2fRB5fOpen5fSingleDocumentation"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Open the file that will contain the documentation in
   case we create a single document.
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<para>
   An opened file.
</para>
</section>
</section>
<section>
<title>ROBODoc/Filename</title>
<anchor id="robo7"/>
<anchor id="ROBODoc2fFilename"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   Functions to deal with keeping track
   of filenames and directory names.
</para>
<section>
<title>Filename/Get_Fullname</title>
<anchor id="robo96"/>
<anchor id="Filename2fGet5fFullname"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   Get_Fullname --
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Give the full name of the file, that is the name of
   the file including the extension and the path.
   The path can be relative or absolute.
</para>
<formalpara><title>NOTE</title><para></para></formalpara>
<para>
   The string returned is owned by this function
   so don't change it.
</para>
</section>
<section>
<title>Filename/RB_Filename</title>
<anchor id="robo97"/>
<anchor id="Filename2fRB5fFilename"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   RB_Filename --
</para>
<formalpara><title>ATTRIBUTES</title><para></para></formalpara>
<itemizedlist><listitem><para>   next   pointer to the next RB_File.
</para></listitem><listitem><para>   name   null terminated string with the name of the file,
            (Without the path, but including the extension).
</para></listitem><listitem><para>   fullname 
</para></listitem><listitem><para>   path   pointer to a <link linkend="robo225">RB_Path</link> structure that holds
            the path for this file.
</para></listitem><listitem><para>   link   The link used to represent this file while in multidoc
            mode.
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Filename/RB_Get_Extension</title>
<anchor id="robo98"/>
<anchor id="Filename2fRB5fGet5fExtension"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   RB_Get_Extension --
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Give the extension of this file. That is the part after
   the last '.' if there is any.
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<para>
   pointer to the extension
   pointer to a '\0' if no extension was found.
</para>
<formalpara><title>NOTE</title><para></para></formalpara>
<para>
   The string returned is owned by this function
   so don't change it.
</para>
</section>
<section>
<title>Filename/RB_Get_Filename</title>
<anchor id="robo99"/>
<anchor id="Filename2fRB5fGet5fFilename"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   RB_Get_Filename --
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Give the name of this file. That is the name
   of the file without its path but with the
   extension.
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<para>
   pointer to the extension
   pointer to a '\0' if no extension was found.
</para>
<formalpara><title>NOTE</title><para></para></formalpara>
<para>
   The string returned is owned by this function
   so don't change it.
</para>
</section>
<section>
<title>Filename/RB_Get_Path</title>
<anchor id="robo100"/>
<anchor id="Filename2fRB5fGet5fPath"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Give the path for this file.
</para>
<formalpara><title>NOTE</title><para></para></formalpara>
<para>
   The string returned is owned by this function
   so don't change it.
</para>
</section>
<section>
<title>Filename/RB_Get_RB_Filename</title>
<anchor id="robo101"/>
<anchor id="Filename2fRB5fGet5fRB5fFilename"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   RB_Get_RB_Filename
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   arg_rb_filename --
</para></listitem><listitem><para>   arg_rb_path --
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Create a new <link linkend="robo97">RB_Filename</link> structure based on arg_filename and
   arg_rb_path.
</para>
</section>
</section>
<section>
<title>ROBODoc/Generator</title>
<anchor id="robo8"/>
<anchor id="ROBODoc2fGenerator"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   This contains routines to generate the documentation from the
   headers collected from the source code.   It contains
   functionality common for all document types (HTML, RTF etc).
   The specifics are handled in the modules for each of the several
   document types.
</para>

<para>
   The behaviour of many of the functions in this module are
   modified by the global <link linkend="robo140">output_mode</link>.
</para>

<para>
   The general call sequence is as follows:
</para>
<literallayout class="monospaced">
     <link linkend="robo113">RB_Generate_Documentation</link>
     +&gt; <link linkend="robo126">RB_Generate_SingleDoc</link>
        +&gt; <link linkend="robo123">RB_Generate_Part</link>
           +&gt; <link linkend="robo103">Generate_Header</link>
                 +&gt; Generate_Item_Line
                    +&gt; <link linkend="robo102">Generate_Char</link>
</literallayout>
<para>
</para>
<formalpara><title>BUGS</title><para></para></formalpara>
<itemizedlist><listitem><para>   Confusing <link linkend="robo285">use</link> of doctype and output mode.
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>NOTES</title><para></para></formalpara>
<para>
   Might be a good idea to replace all the switch statements with
   function pointers.
   So instead of:
</para>
<literallayout class="monospaced">
     switch (<link linkend="robo140">output_mode</link>)
     {
         case HTML:
             <link linkend="robo168">RB_HTML_Generate_Doc_Start</link>(dest_doc, src_name, name, toc);
             break;
         case LATEX:
             <link linkend="robo188">RB_LaTeX_Generate_Doc_Start</link>(dest_doc, src_name, name, toc);
             break;
         case RTF:
             RB_RTF_Generate_Doc_Start(dest_doc, src_name, name, toc);
             break;
         case ASCII:
             RB_ASCII_Generate_Doc_Start(dest_doc, src_name, name, toc);
             break;
         case TROFF:
             RB_TROFF_Generate_Doc_Start(dest_doc, src_name, name, toc);
             break;
         default:
             break;
     }
</literallayout>
<para>
   we will have
</para>
<literallayout class="monospaced">
     (*rb_generate_doc_start)(dest_doc, src_name, name, toc);
</literallayout>
<para>

   were the function pointers are initialized at program start based
   on the output mode.
</para>
<section>
<title>Generator/Generate_Char</title>
<anchor id="robo102"/>
<anchor id="Generator2fGenerate5fChar"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Generate a single character in the current output mode.
   The individual generators will make sure that special
   characters are escaped.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   dest_doc -- destination file.
</para></listitem><listitem><para>   cur_char -- character to be generated.
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Generator/Generate_Header</title>
<anchor id="robo103"/>
<anchor id="Generator2fGenerate5fHeader"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Generate the documentation for all the items found in
   a header except for any items specified in
   <link linkend="robo56">configuration</link>.ignore_items.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   f -- destination file
</para></listitem><listitem><para>   header -- header to be searched.
</para></listitem><listitem><para>   srcname -- name of the source file the header was found in.
</para></listitem><listitem><para>   docname -- name of the documentation file.
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>BUGS</title><para></para></formalpara>
<para>
   This skips the first item body if the first item name was
   not correctly spelled.
</para>
</section>
<section>
<title>Generator/Generate_Index</title>
<anchor id="robo104"/>
<anchor id="Generator2fGenerate5fIndex"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   Generate_Index -- generate index file based on xref files.
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Create a master index file. It contains pointers to the
   documentation generated for each source file, as well as all
   "objects" found in the source files.
</para>
</section>
<section>
<title>Generator/Generate_Item</title>
<anchor id="robo105"/>
<anchor id="Generator2fGenerate5fItem"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Generate the documentation for a single item.
</para>
<formalpara><title>NOTE</title><para></para></formalpara>
<para>
   This function is way too long...
</para>
</section>
<section>
<title>Generator/Generate_Item_Name</title>
<anchor id="robo106"/>
<anchor id="Generator2fGenerate5fItem5fName"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   Generate_Item_Name -- fast&amp;easy
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   write the item's name to the doc
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   FILE* dest_doc      -- destination file
</para></listitem><listitem><para>   int item_type       -- the type of item
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>AUTHOR</title><para></para></formalpara>
<para>
   Koessi
</para>
<formalpara><title>NOTES</title><para></para></formalpara>
<para>
   uses globals: <link linkend="robo140">output_mode</link>
</para>
</section>
<section>
<title>Generator/Generate_Label</title>
<anchor id="robo107"/>
<anchor id="Generator2fGenerate5fLabel"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Generate a label that can be used for a link.
   For instance in HTML this is &lt;a name="label"&gt;
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   dest_doc -- file to be written to
</para></listitem><listitem><para>   name -- the label's name.
</para></listitem><listitem><para>   <link linkend="robo140">output_mode</link> -- global with the current output mode
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Generator/Generate_Link</title>
<anchor id="robo108"/>
<anchor id="Generator2fGenerate5fLink"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Generate a link to another headers documentation.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   dest_doc      -- the output file
</para></listitem><listitem><para>   docname       -- the name of the output file
</para></listitem><listitem><para>   file_name     -- the name of the file that contains the link's body
</para></listitem><listitem><para>   label_name    -- the label for the link
</para></listitem><listitem><para>   function_name -- the name that is shown for the link in the
                      documentation
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Generator/RB_Add_Extension</title>
<anchor id="robo109"/>
<anchor id="Generator2fRB5fAdd5fExtension"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Add an extension to the filename base based on on the current
   output mode.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   doctype -- output mode
</para></listitem><listitem><para>   name    -- the name of the file without extension and with
              enough room left to add the extension.
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>OUTPUT</title><para></para></formalpara>
<para>
   name    -- the name of the file including the extension.
</para>
</section>
<section>
<title>Generator/RB_Generate_BeginSection</title>
<anchor id="robo110"/>
<anchor id="Generator2fRB5fGenerate5fBeginSection"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Generate a section of level depth in the current output mode.
   This is used for the --sections option.  Where each header is
   placed in a section based on the header hierarchy.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   dest_doc    -- the destination file.
</para></listitem><listitem><para>   doctype     -- document type
</para></listitem><listitem><para>   depth       -- the level of the section
</para></listitem><listitem><para>   name        -- the name of the section
</para></listitem><listitem><para>   header      -- pointer to the header structure
</para></listitem><listitem><para>   <link linkend="robo140">output_mode</link> -- global with the current output mode.
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Generator/RB_Generate_Doc_End</title>
<anchor id="robo111"/>
<anchor id="Generator2fRB5fGenerate5fDoc5fEnd"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   RB_Generate_Doc_End -- generate document trailer.
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Generates for depending on the <link linkend="robo140">output_mode</link> the text that
   will be at the end of a document.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   dest_doc - pointer to the file to which the output will
                be written.
</para></listitem><listitem><para>   name     - the name of this file.
</para></listitem><listitem><para>   <link linkend="robo140">output_mode</link> - global variable that indicates the output
                   mode.
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>NOTES</title><para></para></formalpara>
<para>
   Doesn't do anything with its arguments, but that might
   change in the future.
</para>
<formalpara><title>BUGS</title><para></para></formalpara>
</section>
<section>
<title>Generator/RB_Generate_Doc_Start</title>
<anchor id="robo112"/>
<anchor id="Generator2fRB5fGenerate5fDoc5fStart"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   RB_Generate_Doc_Start -- Generate document header.
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Generates for depending on the <link linkend="robo140">output_mode</link> the text that
   will be at the start of a document.
   Including the table of contents.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   dest_doc - pointer to the file to which the output will
                be written.
</para></listitem><listitem><para>   src_name - the name of the source file or directory.
</para></listitem><listitem><para>   name     - the name of this file.
</para></listitem><listitem><para>   <link linkend="robo140">output_mode</link> - global variable that indicates the output
                   mode.
</para></listitem><listitem><para>   toc      - generate table of contens
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>SEE ALSO</title><para></para></formalpara>
<para>
   <link linkend="robo111">RB_Generate_Doc_End</link>
</para>
</section>
<section>
<title>Generator/RB_Generate_Documentation</title>
<anchor id="robo113"/>
<anchor id="Generator2fRB5fGenerate5fDocumentation"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Generate the documentation for all the information contained in a
   <link linkend="robo87">RB_Document</link> structure.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<para>
   document -- pointer to the <link linkend="robo87">RB_Document</link> structure.
</para>
</section>
<section>
<title>Generator/RB_Generate_DOT_Image_Link</title>
<anchor id="robo114"/>
<anchor id="Generator2fRB5fGenerate5fDOT5fImage5fLink"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Generates the image link for the created dot graphics
</para>
</section>
<section>
<title>Generator/RB_Generate_EndSection</title>
<anchor id="robo115"/>
<anchor id="Generator2fRB5fGenerate5fEndSection"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Generate the end of a section base on the current output mode.
   The functions is used for the --section option.
   It closes a section in the current output mode.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   dest_doc -- the destination file.
</para></listitem><listitem><para>   doctype  --
</para></listitem><listitem><para>   depth    -- the level of the section
</para></listitem><listitem><para>   name     -- the name of the section
</para></listitem><listitem><para>   <link linkend="robo140">output_mode</link> -- global with the current output mode.
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Generator/RB_Generate_Header_End</title>
<anchor id="robo116"/>
<anchor id="Generator2fRB5fGenerate5fHeader5fEnd"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   RB_Generate_Header_End
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Generates for depending on the <link linkend="robo140">output_mode</link> the text that
   will be at the end of a header.
   This function is used if the option --section is _not_
   used.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   dest_doc - pointer to the file to which the output will
              be written.
</para></listitem><listitem><para>   cur_header - pointer to a <link linkend="robo148">RB_header</link> structure.
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>SEE ALSO</title><para></para></formalpara>
<para>
   <link linkend="robo117">RB_Generate_Header_Start</link>, <link linkend="robo115">RB_Generate_EndSection</link>,
   <link linkend="robo110">RB_Generate_BeginSection</link>
</para>
</section>
<section>
<title>Generator/RB_Generate_Header_Start</title>
<anchor id="robo117"/>
<anchor id="Generator2fRB5fGenerate5fHeader5fStart"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   RB_Generate_Header_Start -- generate header start text.
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Generates depending on the <link linkend="robo140">output_mode</link> the text that
   will be at the end of each header.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   dest_doc - pointer to the file to which the output will
                be written.
</para></listitem><listitem><para>   cur_header - pointer to a <link linkend="robo148">RB_header</link> structure.
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>SEE ALSO</title><para></para></formalpara>
<para>
   <link linkend="robo116">RB_Generate_Header_End</link>
</para>
</section>
<section>
<title>Generator/RB_Generate_Index_Entry</title>
<anchor id="robo118"/>
<anchor id="Generator2fRB5fGenerate5fIndex5fEntry"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Generate an entry for an auto generated index.  This works only
   for output modes that support this, LaTeX for instance.   This
   has nothting to do with the master index.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   dest_doc -- the destination file.
</para></listitem><listitem><para>   header   -- pointer to the header the index entry is for.
</para></listitem><listitem><para>   <link linkend="robo140">output_mode</link> -- global with the current output mode.
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Generator/RB_Generate_Item_Begin</title>
<anchor id="robo119"/>
<anchor id="Generator2fRB5fGenerate5fItem5fBegin"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Generate the begin of an item.  This should switch to some
   preformatted output mode, similar to HTML's &lt;PRE&gt;.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<para>
   dest_doc -- file to be written to
   <link linkend="robo140">output_mode</link> -- global with the current output mode
</para>
</section>
<section>
<title>Generator/RB_Generate_Item_End</title>
<anchor id="robo120"/>
<anchor id="Generator2fRB5fGenerate5fItem5fEnd"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Generate the end of an item.  This should switch back from the
   preformatted mode.  So in HTML it generates the &lt;/PRE&gt; of a &lt;PRE&gt;
   &lt;/PRE&gt; pair.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   dest_doc -- file to be written to
</para></listitem><listitem><para>   <link linkend="robo140">output_mode</link> -- global with the current output mode
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Generator/RB_Generate_Item_Line_Number</title>
<anchor id="robo121"/>
<anchor id="Generator2fRB5fGenerate5fItem5fLine5fNumber"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Generate line numbers for SOURCE like items
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   dest_doc    -- the file to write to.
</para></listitem><listitem><para>   <link linkend="robo138">line_number</link> -- the actual line number.
</para></listitem><listitem><para>   max_lines   -- the maximal line number in this item.
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Generator/RB_Generate_MultiDoc</title>
<anchor id="robo122"/>
<anchor id="Generator2fRB5fGenerate5fMultiDoc"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Create documentation by creating a file for each
   individual source file that was scanned.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<para>
   document -- pointer to the <link linkend="robo87">RB_Document</link> structure.
</para>
</section>
<section>
<title>Generator/RB_Generate_Part</title>
<anchor id="robo123"/>
<anchor id="Generator2fRB5fGenerate5fPart"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Generate the documention for all the headers found in a single
   source file.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   document_file -- The file were it stored.
</para></listitem><listitem><para>   document      -- All the documentation.
</para></listitem><listitem><para>   part          -- pointer to a <link linkend="robo222">RB_Part</link> that contains all the headers found
                    in a single source file.
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Generator/RB_Generate_Section</title>
<anchor id="robo124"/>
<anchor id="Generator2fRB5fGenerate5fSection"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Generate the documentation for a header and all
   its childern.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   document_file -- destination file
</para></listitem><listitem><para>   parent -- the parent of the header for which the documentation
               is to be generated.
</para></listitem><listitem><para>   document -- pointer to the <link linkend="robo87">RB_Document</link> structure.
</para></listitem><listitem><para>   depth -- level of sectioning ( 1  1.1  1.1.1  etc)
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>NOTE</title><para></para></formalpara>
<para>
   This is a recursive function.
</para>
<formalpara><title>SEE ALSO</title><para></para></formalpara>
<para>
    <link linkend="robo125">RB_Generate_Sections</link>
</para>
</section>
<section>
<title>Generator/RB_Generate_Sections</title>
<anchor id="robo125"/>
<anchor id="Generator2fRB5fGenerate5fSections"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Creates the documentation for all headers found in all source
   files.  The order in which they are generated depends on the
   header hierarchy.  First the top level header's documentation
   is generated then, the documentation for all it's childern, then
   the next top level header's documentation is generated.
   This is a recursive proces.
   The idea is to create something like:
</para>
<literallayout class="monospaced">
     1. Parentheader1
     1.1 Child1
     1.2 Child2
     1.2.1 Child's child1
     2. Parentheader2
</literallayout>
<para>
   etc
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   document_file -- destination file.
</para></listitem><listitem><para>   document -- pointer to the <link linkend="robo87">RB_Document</link> structure.
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Generator/RB_Generate_SingleDoc</title>
<anchor id="robo126"/>
<anchor id="Generator2fRB5fGenerate5fSingleDoc"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Create documentation by creating a single file for all individual
   source file that were scanned.
</para>

<para>
   This function is called when the option --singledoc is used.
   Based on whether the option --sections is used this function then
   calls <link linkend="robo125">RB_Generate_Sections</link> or <link linkend="robo123">RB_Generate_Part</link>
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<para>
   document -- pointer to the <link linkend="robo87">RB_Document</link> structure.
</para>
</section>
<section>
<title>Generator/RB_Generate_TOC_2</title>
<anchor id="robo127"/>
<anchor id="Generator2fRB5fGenerate5fTOC5f2"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Create a Table of Contents based on the headers found in
   _all_ source files.   There is also a function to create
   a table of contents based on the headers found in a single
   source file RB_Generate_TOC_1
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   dest_doc -- the destination file.
</para></listitem><listitem><para>   headers  -- an array of pointers to all the headers.
</para></listitem><listitem><para>   <link linkend="robo212">count</link>    -- the number of pointers in the array.
</para></listitem><listitem><para>   <link linkend="robo140">output_mode</link> -- global with the current output mode.
</para></listitem><listitem><para>   owner    -- The owner of the TOC. Only the headers that are owned
               by this owner are included in the TOC.  Can be NULL,
               in which case all headers are included.
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Generator/RB_Get_DOT_Type</title>
<anchor id="robo128"/>
<anchor id="Generator2fRB5fGet5fDOT5fType"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Returns the type of the DOT file for the given output mode
</para>
</section>
<section>
<title>Generator/RB_Get_SubIndex_FileName</title>
<anchor id="robo129"/>
<anchor id="Generator2fRB5fGet5fSubIndex5fFileName"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Get the name of the master index file for a specific
   header_type.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   docroot      -- the path to the documentation directory.
</para></listitem><listitem><para>   extension    -- the extension for the file
</para></listitem><listitem><para>   header_type  -- the header type
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<para>
   a pointer to a freshly allocated string.
</para>
<formalpara><title>NOTES</title><para></para></formalpara>
<para>
   Has too many parameters.
</para>
</section>
<section>
<title>Generator/RB_Name_Headers</title>
<anchor id="robo130"/>
<anchor id="Generator2fRB5fName5fHeaders"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Give all headers a unique name. This makes sure that if
   two headers have the same name linking to one of the headers
   still works.
</para>
</section>
<section>
<title>Generator/RB_Sort_Items</title>
<anchor id="robo131"/>
<anchor id="Generator2fRB5fSort5fItems"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Sort the items in all the headers according to the order
   specified in the 'item order' block in the <link linkend="robo214">robodoc</link>.rc
   file.
</para>
</section>
<section>
<title>Generator/RB_TEST_Generate_Char</title>
<anchor id="robo132"/>
<anchor id="Generator2fRB5fTEST5fGenerate5fChar"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   RB_TEST_Generate_Char
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Switchboard to RB_TEST_Generate_Char
</para>
</section>
<section>
<title>Generator/T_RB_DocType</title>
<anchor id="robo133"/>
<anchor id="Generator2fT5fRB5fDocType"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Enumeration for the various output formats that are
   supported by <link linkend="robo0">ROBODoc</link>.
</para>
<formalpara><title>NOTES</title><para></para></formalpara>
<para>
   These should be prefixed with RB_ 
</para>
</section>
</section>
<section>
<title>ROBODoc/Globals</title>
<anchor id="robo9"/>
<anchor id="ROBODoc2fGlobals"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   A number of global variables.
</para>
<formalpara><title>TODO</title><para></para></formalpara>
<para>
   Documentation.
</para>
<section>
<title>Globals/course_of_action</title>
<anchor id="robo134"/>
<anchor id="Globals2fcourse5fof5faction"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   course_of_action
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Global Variable that defines the course of action.
</para>
</section>
<section>
<title>Globals/debugmode</title>
<anchor id="robo135"/>
<anchor id="Globals2fdebugmode"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   debugmode
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   A bitfield determining the output levels
</para>
</section>
<section>
<title>Globals/document_title</title>
<anchor id="robo136"/>
<anchor id="Globals2fdocument5ftitle"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   documentat_title -- title for the documentation.
</para>
<formalpara><title>PURPOSE</title><para></para></formalpara>
<para>
   Used as the title for master index files or for latex documentation.
</para>
</section>
<section>
<title>Globals/line_buffer</title>
<anchor id="robo137"/>
<anchor id="Globals2fline5fbuffer"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   line_buffer -- global line buffer
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Temporary storage area for lines
   that are read from an input file.
</para>
</section>
<section>
<title>Globals/line_number</title>
<anchor id="robo138"/>
<anchor id="Globals2fline5fnumber"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   line_number -- global line counter
</para>
<formalpara><title>PURPOSE</title><para></para></formalpara>
<para>
   Keeps track of the number of lines that are read from the source file.
</para>
<formalpara><title>AUTHOR</title><para></para></formalpara>
<para>
   Koessi
</para>
</section>
<section>
<title>Globals/myLine</title>
<anchor id="robo139"/>
<anchor id="Globals2fmyLine"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   myLine -- dynamic buffer for current line
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Temporary storage area for lines
   that are read from an input file.
</para>
</section>
<section>
<title>Globals/output_mode</title>
<anchor id="robo140"/>
<anchor id="Globals2foutput5fmode"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   output_mode -- the mode of output
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Controls which type of output will be generated.
</para>
</section>
<section>
<title>Globals/readChars</title>
<anchor id="robo141"/>
<anchor id="Globals2freadChars"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   readChars -- number of characters in the currently bufferd line
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Temporary storage area for lines
   that are read from an input file.
</para>
</section>
</section>
<section>
<title>ROBODoc/Headers</title>
<anchor id="robo10"/>
<anchor id="ROBODoc2fHeaders"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   This module contains a set of variables that define how headers
   start and how they end in various programming languages.
</para>
<formalpara><title>NOTES</title><para></para></formalpara>
<para>
   Added C++/ACM header option (David White)
   Enables documentation only comments (//!) to be extracted from C++ 
   and ACM files, rather than all comments.
</para>
<section>
<title>Headers/end_markers</title>
<anchor id="robo143"/>
<anchor id="Headers2fend5fmarkers"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   end_markers -- strings that mark the end of a header.
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   These specify what <link linkend="robo214">robodoc</link> recognizes as the end of a 
   documentation header. In most cases this will be
   "***" or " ***". If the header contains a SOURCE item
   then the end of the source has to be marked, which
   is when the other strings in this array are used.
</para>
<formalpara><title>NOTE</title><para></para></formalpara>
<para>
   The numbers at the beginning of the lines make it easier
   to find a special index-number.
</para>
</section>
<section>
<title>Headers/end_remark_constants</title>
<anchor id="robo144"/>
<anchor id="Headers2fend5fremark5fconstants"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   end_remark_constants -- numerals for <link linkend="robo143">end_markers</link>
</para>
<formalpara><title>NOTE</title><para></para></formalpara>
<para>
   Most of them seem to be unused at the moment.  But it's better to
   keep it up to date for the eventuality of a later <link linkend="robo285">use</link> by
   <link linkend="robo215">robohdrs</link>.
</para>
</section>
<section>
<title>Headers/end_remark_markers</title>
<anchor id="robo145"/>
<anchor id="Headers2fend5fremark5fmarkers"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   end_remark_markers -- strings that mark the end of a comment.
</para>
<formalpara><title>NOTE</title><para></para></formalpara>
<para>
   The numbers at the beginning of the lines make it easier
   to keep them in sync with the <link linkend="robo144">end_remark_constants</link>
</para>
</section>
<section>
<title>Headers/header_markers</title>
<anchor id="robo146"/>
<anchor id="Headers2fheader5fmarkers"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   header_markers -- strings that mark the begin of a header.
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   These specify what <link linkend="robo214">robodoc</link> recognizes as the beginning
</para>
<formalpara><title>NOTE</title><para></para></formalpara>
<para>
   The numbers at the beginning of the lines make it easier
   to keep them in sync with the <link linkend="robo155">src_constants</link>
   of a header.
</para>
</section>
<section>
<title>Headers/RB_Has_Remark_Marker</title>
<anchor id="robo147"/>
<anchor id="Headers2fRB5fHas5fRemark5fMarker"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Check if a line starts with a remark marker.  This function
   assumes that the remark marker starts on the first character of
   the line.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   lline_buffer -- the line of text.
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<itemizedlist><listitem><para>   TRUE -- it starts with a remark marker
</para></listitem><listitem><para>   FALSE -- it does not.
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Headers/RB_header</title>
<anchor id="robo148"/>
<anchor id="Headers2fRB5fheader"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
    This structure is used to store the headers that are extracted
    from the source files.
</para>
<formalpara><title>MODIFICATION HISTORY</title><para></para></formalpara>
<itemizedlist><listitem><para>    8. August 1995: Koessi changed int version to char *version
</para></listitem><listitem><para>    5. December 2007: Budai changed the type of lines from char to
      struct RB_header_lines
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>ATTRIBUTES</title><para></para></formalpara>
<itemizedlist><listitem><para>    next          -- used to store RB_headers in a <link linkend="robo222">RB_Part</link> as
                       a linked list.
</para></listitem><listitem><para>    parent        -- the parent of this header
</para></listitem><listitem><para>    name          -- the full name of the header
                       modulename/functionname [versioninfo]
</para></listitem><listitem><para>    owner         -- the <link linkend="robo18">Part</link> that owns this header.
</para></listitem><listitem><para>    htype         -- the type of this header.
</para></listitem><listitem><para>    items         -- pointers to the items in this header.
</para></listitem><listitem><para>    version       -- unused
</para></listitem><listitem><para>    function_name -- the functionname ( a better name would
                       be objectname or  thingy name,
                       it is the name of the thing that is
                       being documented ).
</para></listitem><listitem><para>    module_name   -- the modulename
</para></listitem><listitem><para>    unique_name   -- unique name used for labels.
</para></listitem><listitem><para>    file_name     -- documentation file of this header.
</para></listitem><listitem><para>    lines         -- content of the header with line numbers
</para></listitem><listitem><para>    no_lines      -- number of lines in the content.
</para></listitem><listitem><para>    <link linkend="robo138">line_number</link>   -- the line number at which the header was
                       found in the source file.
</para></listitem></itemizedlist><para>
</para>
<section>
<title>RB_header/RB_header_line</title>
<anchor id="robo223"/>
<anchor id="RB5fheader2fRB5fheader5fline"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
    This structure holds the content of one header line and the original
    source line number of it.
</para>
<formalpara><title>ATTRIBUTES</title><para></para></formalpara>
<itemizedlist><listitem><para>    <link linkend="robo138">line_number</link> -- The original source file line number for this line
</para></listitem><listitem><para>    line        -- The content of the source file line
</para></listitem></itemizedlist><para>
</para>
</section>
</section>
<section>
<title>Headers/RB_HeaderType</title>
<anchor id="robo149"/>
<anchor id="Headers2fRB5fHeaderType"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   RB_HeaderType -- Information about a header type
</para>
<formalpara><title>ATTRIBUTES</title><para></para></formalpara>
<itemizedlist><listitem><para>   typeCharacter -- The character used to indicate it 
</para></listitem><listitem><para>   indexName     -- The name used for the master index 
</para></listitem><listitem><para>   fileName      -- The name of the file <link linkend="robo285">use</link> to store 
                      the master index for this type of headers.
</para></listitem><listitem><para>   priority      -- The sorting priority of this header.
                      Higher priorities appear first
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Headers/RB_Is_End_Marker</title>
<anchor id="robo150"/>
<anchor id="Headers2fRB5fIs5fEnd5fMarker"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Scan a line and see if any of the end of a header markers 
   defined in <link linkend="robo146">header_markers</link> can be found.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<para>
   cur_line -- line to be searched.
</para>
<formalpara><title>OUTPUT</title><para></para></formalpara>
<para>
   none
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<para>
   TRUE  -- an end header was found
   FALSE -- none was found.
</para>
</section>
<section>
<title>Headers/RB_Skip_Remark_Marker</title>
<anchor id="robo151"/>
<anchor id="Headers2fRB5fSkip5fRemark5fMarker"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
    RB_Skip_Remark_Marker
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
    Scan and search for a recognized remark marker; skip past the
    marker to the body of the text
</para>
</section>
<section>
<title>Headers/remark_markers</title>
<anchor id="robo152"/>
<anchor id="Headers2fremark5fmarkers"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   remark_markers
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   These specify what <link linkend="robo214">robodoc</link> recognizes as a comment marker.
</para>
<formalpara><title>TODO</title><para></para></formalpara>
<para>
   (1) All the markers that start with one or more spaces are
   never recognized, and should be removed.
   (2) The numbers at the beginning of the lines make it easier
   to keep them in sync with the <link linkend="robo156">src_remark_constants</link>
</para>
</section>
<section>
<title>Headers/robo_end</title>
<anchor id="robo153"/>
<anchor id="Headers2frobo5fend"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   robo_end[] -- the distinct <link linkend="robo214">robodoc</link> end marker - 
</para>
<literallayout class="monospaced">
                 alternative to using <link linkend="robo143">end_markers</link>
</literallayout>
<para>
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   This is an alternative to using <link linkend="robo143">end_markers</link> - sometimes ROBODOC
   confuses asterisks commonly used in comments as an end marker. To
   <link linkend="robo285">use</link> this footer instead of <link linkend="robo143">end_markers</link> <link linkend="robo285">use</link> the -rh switch.
</para>
<formalpara><title>NOTE</title><para></para></formalpara>
<para>
   Added by David Druffner.
</para>
</section>
<section>
<title>Headers/robo_header</title>
<anchor id="robo154"/>
<anchor id="Headers2frobo5fheader"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   robo_header -- the distinct <link linkend="robo214">robodoc</link> header - 
</para>
<literallayout class="monospaced">
                  alternative to using <link linkend="robo146">header_markers</link>
</literallayout>
<para>
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   This is an alternative to using <link linkend="robo146">header_markers</link> - sometimes
   ROBODOC confuses asterisks commonly used in comments as a header.
   To <link linkend="robo285">use</link> this header instead of <link linkend="robo146">header_markers</link> <link linkend="robo285">use</link> the -rh switch.
</para>
<formalpara><title>NOTE</title><para></para></formalpara>
<para>
   Added by David Druffner.   OBSOLETE
</para>
</section>
<section>
<title>Headers/src_constants</title>
<anchor id="robo155"/>
<anchor id="Headers2fsrc5fconstants"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   src_constants -- numerals for <link linkend="robo146">header_markers</link>
</para>
<formalpara><title>NOTE</title><para></para></formalpara>
<para>
   Most of them seem to be unused at the moment.
   But it's better to keep it up to date for the
   eventuality of a later <link linkend="robo285">use</link> by <link linkend="robo215">robohdrs</link>.
</para>
</section>
<section>
<title>Headers/src_remark_constants</title>
<anchor id="robo156"/>
<anchor id="Headers2fsrc5fremark5fconstants"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   src_remark_constants -- numerals for <link linkend="robo152">remark_markers</link>
</para>
<formalpara><title>NOTE</title><para></para></formalpara>
<para>
   Most of them seem to be unused at the moment.
   But it's better to keep it up to date for the
   eventuality of a later <link linkend="robo285">use</link> by <link linkend="robo215">robohdrs</link>.
</para>
</section>
</section>
<section>
<title>ROBODoc/HeaderTypes</title>
<anchor id="robo11"/>
<anchor id="ROBODoc2fHeaderTypes"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
    <link linkend="robo10">Headers</link> come in different types.  This module defines what kind
    of headertypes <link linkend="robo0">ROBODoc</link> recognizes, and contains functions to add
    new headertypes and to compare headertypes.  All the headertypes
    are stored in an array, <link linkend="robo157">header_type_lookup_table</link>.
</para>
<section>
<title>HeaderTypes/header_type_lookup_table</title>
<anchor id="robo157"/>
<anchor id="HeaderTypes2fheader5ftype5flookup5ftable"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   A lookup table for all the header types that <link linkend="robo0">ROBODoc</link> recognizes.
   At the moment is has about 127 entries.  About as many as there
   are characters in the standard ASCII set.  The first 32 entries
   can be used for special purposes.
</para>

<para>
   Two of them are <link linkend="robo285">use</link>:
</para>
<literallayout class="monospaced">
     HT_MASTERINDEXTYPE
</literallayout>
<para>
   and
</para>
<literallayout class="monospaced">
     HT_SOURCEHEADERTYPE
</literallayout>
<para>

   HT_MASTERINDEXTYPE is a wildcard type. All headertypes match this
   type.  This is used to collect all the headers for the
   masterindex.
</para>

<para>
   HT_SOURCEHEADERTYPE is used to pretend that the name of
   a sourcefile is a kind of header.  This makes it possible to
   include the names of the source files in the master index.
</para>
</section>
<section>
<title>HeaderTypes/Is_Format_Item</title>
<anchor id="robo158"/>
<anchor id="HeaderTypes2fIs5fFormat5fItem"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Tells wether this item should be formatted by the browser
 SYNPOPSIS
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<para>
   item_type -- Type of item (also the index to the item name)
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<para>
   TRUE  -- Item should be formatted by the browser
   FALSE -- Item should be left alone
</para>
</section>
<section>
<title>HeaderTypes/Is_Preformatted_Item</title>
<anchor id="robo159"/>
<anchor id="HeaderTypes2fIs5fPreformatted5fItem"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Tells wether this item should be automatically preformatted in the
   output.
 SYNPOPSIS
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<para>
   item_type -- Type of item (also the index to the item name)
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<para>
   TRUE  -- Item should be automatically preformatted
   FALSE -- Item should NOT be automatically preformatted
</para>
</section>
<section>
<title>HeaderTypes/RB_AddHeaderType</title>
<anchor id="robo160"/>
<anchor id="HeaderTypes2fRB5fAddHeaderType"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Add a new headertype to the list of header type
   that <link linkend="robo214">robodoc</link> recognizes.
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<itemizedlist><listitem><para>   FALSE -- it is a new header type.
</para></listitem><listitem><para>   TRUE  -- header type already existed.
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>HeaderTypes/RB_CompareHeaderTypes</title>
<anchor id="robo161"/>
<anchor id="HeaderTypes2fRB5fCompareHeaderTypes"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Compare two header types and check if they are equal.  If one of
   the header types is a HT_MASTERINDEXTYPE the comparison is always
   TRUE.  (This to make sure that all headers appear in the Index.)
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>    ht1 and ht2 -- the header types to compare.
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<itemizedlist><listitem><para>    0     -- header types are not equal
</para></listitem><listitem><para>    != 0  -- header type are equal
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>HeaderTypes/RB_FindHeaderType</title>
<anchor id="robo162"/>
<anchor id="HeaderTypes2fRB5fFindHeaderType"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Return the header type that corresponds to the type character.
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<itemizedlist><listitem><para>   0  -- there is no such header type
</para></listitem><listitem><para>   pointer to the header type otherwise.
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>HeaderTypes/RB_IsInternalHeader</title>
<anchor id="robo163"/>
<anchor id="HeaderTypes2fRB5fIsInternalHeader"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Given the typeCharacter is this an internal header?
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<itemizedlist><listitem><para>   TRUE  -- yes it is
</para></listitem><listitem><para>   FALSE -- no it is not
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>HeaderTypes/Works_Like_SourceItem</title>
<anchor id="robo164"/>
<anchor id="HeaderTypes2fWorks5fLike5fSourceItem"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Tells wether this item works similar to the
   source item, that is weather it copies it's
   content verbatim to the output document.
 SYNPOPSIS
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<para>
   item_type -- Type of item (also the index to the item name)
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<para>
   TRUE  -- Item works like a SOURCE item
   FALSE -- Item does NOT work like a SOURCE item
</para>
</section>
</section>
<section>
<title>ROBODoc/HTML_Generator</title>
<anchor id="robo12"/>
<anchor id="ROBODoc2fHTML5fGenerator"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   The generator for HTML output.
</para>

<para>
   The generator supports sections upto 7 levels deep.  It supports
   a Table of Contents based on all headers.  A masterindex for
   all headertypes and seperate masterindexes for each headertype.
</para>
<formalpara><title>MODIFICATION HISTORY</title><para></para></formalpara>
<para>
   2003-02-03   Frans Slothouber  Refactoring
   ????-??-??   Frans Slothouber  V1.0
</para>
<section>
<title>HTML_Generator/RB_Create_CSS</title>
<anchor id="robo165"/>
<anchor id="HTML5fGenerator2fRB5fCreate5fCSS"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Create the .css file.  Unless the user specified it's own css
   file <link linkend="robo214">robodoc</link> creates a default one.
</para>

<para>
   For multidoc mode the name of the .css file is
</para>
<literallayout class="monospaced">
      <link linkend="robo214">robodoc</link>.css
</literallayout>
<para>
   For singledoc mode the name of the .css file is equal
   to the name of the documentation file.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   document -- the document for which to create the file.
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>HTML_Generator/RB_HTML_Color_String</title>
<anchor id="robo166"/>
<anchor id="HTML5fGenerator2fRB5fHTML5fColor5fString"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Generates various colored strings
</para>
</section>
<section>
<title>HTML_Generator/RB_HTML_Generate_Char</title>
<anchor id="robo167"/>
<anchor id="HTML5fGenerator2fRB5fHTML5fGenerate5fChar"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   RB_HTML_Generate_Char -- generate a single character for an item.
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   This function is called for every character that goes
   into an item's body.  This escapes all the reserved
   HTML characters such as '&amp;', '&lt;', '&gt;', '"'.
</para>
</section>
<section>
<title>HTML_Generator/RB_HTML_Generate_Doc_Start</title>
<anchor id="robo168"/>
<anchor id="HTML5fGenerator2fRB5fHTML5fGenerate5fDoc5fStart"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   RB_HTML_Generate_Doc_Start --
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Generate the first part of a HTML document.
   As far as <link linkend="robo0">ROBODoc</link> is concerned a HTML document
   consists of three parts:
</para>
<itemizedlist><listitem><para>   The start of a document
</para></listitem><listitem><para>   The body of a document
</para></listitem><listitem><para>   The end of a document
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   dest_doc  --  the output file.
</para></listitem><listitem><para>   src_name  --  The file or directoryname from which 
                   this document is generated.
</para></listitem><listitem><para>   name      --  The title for this document
</para></listitem><listitem><para>   dest_name --  the name of the output file.
</para></listitem><listitem><para>   charset   --  the charset to be used for the file.
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>HTML_Generator/RB_HTML_Generate_Extra</title>
<anchor id="robo169"/>
<anchor id="HTML5fGenerator2fRB5fHTML5fGenerate5fExtra"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Do some additional processing to detect HTML extra's like
   file references and other kind of links for the documentation
   body of an item.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   dest_doc  -- the file to write to.
</para></listitem><listitem><para>   item_type -- the kind of item the body belongs to.
</para></listitem><listitem><para>   cur_char  -- pointer to a substring of the item's body
</para></listitem><listitem><para>   prev_char -- the character just before cur char (zero if none)
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>RESULTS</title><para></para></formalpara>
<para>
   Number of characters produced.
</para>
</section>
<section>
<title>HTML_Generator/RB_HTML_Generate_Index_Page</title>
<anchor id="robo170"/>
<anchor id="HTML5fGenerator2fRB5fHTML5fGenerate5fIndex5fPage"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Generate a single file with a index table for headers
   of one specific type of headers
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   document    -- the document
</para></listitem><listitem><para>   header_type -- the type for which the table is to
                    be generated.
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>HTML_Generator/RB_HTML_Generate_IndexMenu</title>
<anchor id="robo171"/>
<anchor id="HTML5fGenerator2fRB5fHTML5fGenerate5fIndexMenu"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Generates a menu to jump to the various master index files for
   the various header types.  The menu is generated for each of the
   master index files.  The current header type is highlighted.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   dest_doc       -- the output file.
</para></listitem><listitem><para>   filename       -- the name of the output file
</para></listitem><listitem><para>   document       -- the gathered documention.
</para></listitem><listitem><para>   cur_headertype -- the header type that is to be highlighted.
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>HTML_Generator/RB_HTML_Generate_Item_Line_Number</title>
<anchor id="robo172"/>
<anchor id="HTML5fGenerator2fRB5fHTML5fGenerate5fItem5fLine5fNumber"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Generate line numbers for SOURCE like items
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   dest_doc           -- the file to write to.
</para></listitem><listitem><para>   line_number_string -- the line number as string.
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>HTML_Generator/RB_HTML_Generate_Label</title>
<anchor id="robo173"/>
<anchor id="HTML5fGenerator2fRB5fHTML5fGenerate5fLabel"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Generate a label (name) that can be refered too.
   A label should consist of only alphanumeric characters so
   all 'odd' characters are replaced with their ASCII code in
   hex format.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   dest_doc -- the file to write it to.
</para></listitem><listitem><para>   name     -- the name of the label.
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>HTML_Generator/RB_HTML_Generate_Line_Comment_End</title>
<anchor id="robo174"/>
<anchor id="HTML5fGenerator2fRB5fHTML5fGenerate5fLine5fComment5fEnd"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Check if a line comment is active and generate ending sequence for it.
   Should be called at the end of each SOURCE line.
</para>
</section>
<section>
<title>HTML_Generator/RB_HTML_Generate_Link</title>
<anchor id="robo175"/>
<anchor id="HTML5fGenerator2fRB5fHTML5fGenerate5fLink"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   RB_HTML_Generate_Link --
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<para>
   cur_doc  --  the file to which the text is written
   cur_name --  the name of the destination file
</para>
<literallayout class="monospaced">
                (the file from which we link)
</literallayout>
<para>
   filename --  the name of the file that contains the link
</para>
<literallayout class="monospaced">
                (the file we link to)
</literallayout>
<para>
   labelname--  the name of the unique label of the link.
   linkname --  the name of the link as shown to the user.
</para>
</section>
<section>
<title>HTML_Generator/RB_HTML_Generate_TOC_Section</title>
<anchor id="robo176"/>
<anchor id="HTML5fGenerator2fRB5fHTML5fGenerate5fTOC5fSection"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Create a table of contents based on the hierarchy of
   the headers starting for a particular point in this
   hierarchy (the parent).
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   dest_doc  -- the file to write to.
</para></listitem><listitem><para>   dest_name -- the name of this file.
</para></listitem><listitem><para>   parent    -- the parent of the headers for which the the
                  current level(depth) of TOC is created.
</para></listitem><listitem><para>   headers   -- an array of headers for which the TOC is created
</para></listitem><listitem><para>   <link linkend="robo212">count</link>     -- the number of headers in this array
</para></listitem><listitem><para>   depth     -- the current depth of the TOC
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>NOTES</title><para></para></formalpara>
<para>
   This is a recursive function and tricky stuff.
</para>
</section>
<section>
<title>HTML_Generator/RB_HTML_RelativeAddress</title>
<anchor id="robo177"/>
<anchor id="HTML5fGenerator2fRB5fHTML5fRelativeAddress"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Link to 'that' from 'this' computing the relative path.  Here
   'this' and 'that' are both paths.  This function is used to
   create links from one document to another document that might be
   in a completely different directory.
</para>
<formalpara><title>EXAMPLE</title><para></para></formalpara>
<para>
   The following two
</para>
<literallayout class="monospaced">
     this /sub1/sub2/sub3/f.html
     that /sub1/sub2/g.html
</literallayout>
<para>
   result in 
</para>
<literallayout class="monospaced">
     ../g.html
</literallayout>
<para>

</para>
<literallayout class="monospaced">
     this /sub1/f.html
     that /sub1/sub2/g.html
     ==
     ./sub2/g.html
</literallayout>
<para>

</para>
<literallayout class="monospaced">
     this /sub1/f.html
     that /sub1/g.html
     ==
     ./g.html
</literallayout>
<para>

</para>
<literallayout class="monospaced">
     this /sub1/doc3/doc1/tt.html
     that /sub1/doc5/doc2/qq.html
     ==
     ../../doc5/doc2/qq.html
</literallayout>
<para>
</para>
<formalpara><title>NOTES</title><para></para></formalpara>
<para>
   Notice the execelent docmentation.
</para>
</section>
</section>
<section>
<title>ROBODoc/Items</title>
<anchor id="robo13"/>
<anchor id="ROBODoc2fItems"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   This module contains functions that deal with items.  The
   documentation consists of headers, and headers contains one of
   more items.  Each item has a name and a body.  All possible items
   are listed in <link linkend="robo56">configuration</link>.items.  A uses can specify that
   certain items are not to be added to the documentation.  These
   items are listed in <link linkend="robo56">configuration</link>.ignore_items.
</para>
<formalpara><title>AUTHOR</title><para></para></formalpara>
<para>
   Frans Slothouber
</para>
<section>
<title>Items/item_name_buffer</title>
<anchor id="robo178"/>
<anchor id="Items2fitem5fname5fbuffer"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Stores the name of the last item that was found.
</para>
</section>
<section>
<title>Items/ItemLineKind</title>
<anchor id="robo179"/>
<anchor id="Items2fItemLineKind"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Holds the type of an item line
</para>
</section>
<section>
<title>Items/ItemTypes</title>
<anchor id="robo180"/>
<anchor id="Items2fItemTypes"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   ItemTypes -- enumeration of item types
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Defines a number of item types. There are two kind of items:
</para>
<itemizedlist><listitem><para>   the SOURCE item which is always available,
</para></listitem><listitem><para>   and items defined by the user (or through the default items).
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>NOTES</title><para></para></formalpara>
<para>
   Never check an item type against SOURCECODE_ITEM directily!
   Use <link linkend="robo164">Works_Like_SourceItem</link>() function instead.
</para>
</section>
<section>
<title>Items/RB_Create_Item</title>
<anchor id="robo181"/>
<anchor id="Items2fRB5fCreate5fItem"/>
</section>
<section>
<title>Items/RB_Get_Item_Type</title>
<anchor id="robo182"/>
<anchor id="Items2fRB5fGet5fItem5fType"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   return the item_type represented by the given string.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<para>
   char *cmp_name -- item_name to evaluate
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<para>
   int            -- the right item_type or NO_ITEM
</para>
</section>
<section>
<title>Items/RB_Is_ItemName</title>
<anchor id="robo183"/>
<anchor id="Items2fRB5fIs5fItemName"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Is there an itemname in the line.  Ignores leading spaces and
   remark markers.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<para>
   line -- line to be searched.
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<para>
   The kind of item that was found or NO_ITEM if no item could be found.
   The name of the item will be stored in <link linkend="robo178">item_name_buffer</link>.
</para>
<formalpara><title>NOTES</title><para></para></formalpara>
<para>
   We used to check for misspelled items names by testing if
   the item name buffer consists of only upper case characters.
   However checking for a misspelled item name this way results in
   many false positives. For instance many warnings are given for
   FORTRAN code as all the keywords are in uppercase.  We need to
   find a better method for this.
</para>
</section>
<section>
<title>Items/RB_Item</title>
<anchor id="robo184"/>
<anchor id="Items2fRB5fItem"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Keeps track of where items start end end in the header.
   The index numbers point to the lines array in
   <link linkend="robo148">RB_header</link>.
</para>
</section>
<section>
<title>Items/RB_Item_Line</title>
<anchor id="robo185"/>
<anchor id="Items2fRB5fItem5fLine"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Holds the attributes and the content of an item line
</para>
<formalpara><title>ATTRIBUTES</title><para></para></formalpara>
<itemizedlist><listitem><para>    line        -- The contents of the item line
</para></listitem><listitem><para>    kind        -- The type of the line (see: <link linkend="robo179">ItemLineKind</link>)
</para></listitem><listitem><para>    format      -- Formatting attributes for the line
</para></listitem><listitem><para>    pipe_mode   -- The output mode
</para></listitem><listitem><para>    <link linkend="robo138">line_number</link> -- The original source line number of the line
</para></listitem></itemizedlist><para>
</para>
</section>
</section>
<section>
<title>ROBODoc/LaTeX_Generator</title>
<anchor id="robo14"/>
<anchor id="ROBODoc2fLaTeX5fGenerator"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   <link linkend="robo8">Generator</link> for LaTeX output.  Supports singledoc mode.
</para>
<section>
<title>LaTeX_Generator/RB_LaTeX_Generate_Char</title>
<anchor id="robo186"/>
<anchor id="LaTeX5fGenerator2fRB5fLaTeX5fGenerate5fChar"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Generate a single character.  These characters are generated
   within a begin{verbatim} end{verbatim} block So no escaping is
   necessary.
</para>
</section>
<section>
<title>LaTeX_Generator/RB_LaTeX_Generate_Doc_End</title>
<anchor id="robo187"/>
<anchor id="LaTeX5fGenerator2fRB5fLaTeX5fGenerate5fDoc5fEnd"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   RB_LaTeX_Generate_Doc_End --
</para>
</section>
<section>
<title>LaTeX_Generator/RB_LaTeX_Generate_Doc_Start</title>
<anchor id="robo188"/>
<anchor id="LaTeX5fGenerator2fRB5fLaTeX5fGenerate5fDoc5fStart"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   RB_LaTeX_Generate_Doc_Start --
</para>
</section>
<section>
<title>LaTeX_Generator/RB_LaTeX_Generate_Empty_Item</title>
<anchor id="robo189"/>
<anchor id="LaTeX5fGenerator2fRB5fLaTeX5fGenerate5fEmpty5fItem"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   RB_LaTeX_Generate_Empty_Item --
</para>
</section>
<section>
<title>LaTeX_Generator/RB_LaTeX_Generate_EscapedChar</title>
<anchor id="robo190"/>
<anchor id="LaTeX5fGenerator2fRB5fLaTeX5fGenerate5fEscapedChar"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Generate a single character.  These characters are outside
   a begin{verbatim} end{verbatim} block. So we need to escape is
   special characters.
</para>
<formalpara><title>SEE ALSO</title><para></para></formalpara>
<para>
   <link linkend="robo186">RB_LaTeX_Generate_Char</link>()
</para>
</section>
<section>
<title>LaTeX_Generator/RB_LaTeX_Generate_Header_End</title>
<anchor id="robo191"/>
<anchor id="LaTeX5fGenerator2fRB5fLaTeX5fGenerate5fHeader5fEnd"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   RB_LaTeX_Generate_Header_End --
</para>
</section>
<section>
<title>LaTeX_Generator/RB_LaTeX_Generate_Header_Start</title>
<anchor id="robo192"/>
<anchor id="LaTeX5fGenerator2fRB5fLaTeX5fGenerate5fHeader5fStart"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   RB_LaTeX_Generate_Header_Start --
</para>
</section>
<section>
<title>LaTeX_Generator/RB_LaTeX_Generate_Index_Entry</title>
<anchor id="robo193"/>
<anchor id="LaTeX5fGenerator2fRB5fLaTeX5fGenerate5fIndex5fEntry"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Creates a entry for the index.
</para>
</section>
<section>
<title>LaTeX_Generator/RB_LaTeX_Generate_Index_Table</title>
<anchor id="robo194"/>
<anchor id="LaTeX5fGenerator2fRB5fLaTeX5fGenerate5fIndex5fTable"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   RB_LaTeX_Generate_Index_Table --
</para>
</section>
<section>
<title>LaTeX_Generator/RB_LaTeX_Generate_Item_Line_Number</title>
<anchor id="robo195"/>
<anchor id="LaTeX5fGenerator2fRB5fLaTeX5fGenerate5fItem5fLine5fNumber"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Generate line numbers for SOURCE like items
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   dest_doc           -- the file to write to.
</para></listitem><listitem><para>   line_number_string -- the line number as string.
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>LaTeX_Generator/RB_LaTeX_Generate_Label</title>
<anchor id="robo196"/>
<anchor id="LaTeX5fGenerator2fRB5fLaTeX5fGenerate5fLabel"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   RB_LaTeX_Generate_Label --
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<para>
   dest_doc  --  the file to which the text is written
   name --  the unique name of the label to create
</para>
</section>
<section>
<title>LaTeX_Generator/RB_LaTeX_Generate_Link</title>
<anchor id="robo197"/>
<anchor id="LaTeX5fGenerator2fRB5fLaTeX5fGenerate5fLink"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   RB_LaTeX_Generate_Link --
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<para>
   cur_doc  --  the file to which the text is written
   cur_name --  the name of the destination file (unused)
</para>
<literallayout class="monospaced">
                (the file from which we link)
</literallayout>
<para>
   filename --  the name of the file that contains the link
</para>
<literallayout class="monospaced">
                (the file we link to) (unused)
</literallayout>
<para>
   labelname--  the name of the unique label of the link.
   linkname --  the name of the link as shown to the user (unused).
</para>
</section>
<section>
<title>LaTeX_Generator/RB_LaTeX_Generate_String</title>
<anchor id="robo198"/>
<anchor id="LaTeX5fGenerator2fRB5fLaTeX5fGenerate5fString"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Write a string to the destination document, escaping
   characters where necessary.
</para>
</section>
</section>
<section>
<title>ROBODoc/Links</title>
<anchor id="robo15"/>
<anchor id="ROBODoc2fLinks"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   This module contains functions to manipulate links.
   Links are derived from headers.  They are used to create
   links in the documentation between a word and the part of
   the documentation that explains something about that word.
   (For instance a function name or variable name).
   In addition to the links derived from the headers links are
   also derived from the names of all the sourcefiles.
</para>
<formalpara><title>MODIFICATION HISTORY</title><para></para></formalpara>
<para>
   ????-??-??   Frans Slothouber  V1.0 
   2003-02-03   Frans Slothouber  Refactoring
</para>
<section>
<title>Links/Find_Link</title>
<anchor id="robo199"/>
<anchor id="Links2fFind5fLink"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   Find_Link -- try to match word with a link
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Searches for the given word in the list of links and
   headers.  There are three passes (or four, when the C option
   is selected). Each pass uses a different definition of "word":
</para>
<itemizedlist><listitem><para>   In the first pass it is any thing that ends with a 'space', a '.' 
     or a ','.
</para></listitem><listitem><para>   In the second pass it is any string that consists of alpha
     numerics, '_', ':', '.', or '-'.  
</para></listitem><listitem><para>   In the third pass (for C) it is any string that consists 
     of alpha numerics or '_'.
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   word_begin  - pointer to a word (a string).
</para></listitem><listitem><para>   object_name  - pointer to a pointer to a string
</para></listitem><listitem><para>   file_name   - pointer to a pointer to a string
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>SIDE EFFECTS</title><para></para></formalpara>
<para>
   label_name &amp; file_name are modified
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<itemizedlist><listitem><para>   object_name   -- points to the object if a match was found,
                      NULL otherwise.
</para></listitem><listitem><para>   file_name     -- points to the file name if a match was found,
                      NULL otherwise.
</para></listitem><listitem><para>   label_name    -- points to the labelname if a match was found,
</para></listitem><listitem><para>   TRUE          -- a match was found.
</para></listitem><listitem><para>   FALSE         -- no match was found.
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>NOTES</title><para></para></formalpara>
<para>
   This is a rather sensitive algorithm. Don't mess with it
   too much.
</para>
</section>
<section>
<title>Links/RB_Alloc_Link</title>
<anchor id="robo200"/>
<anchor id="Links2fRB5fAlloc5fLink"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   RB_Alloc_Link              -- oop
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   allocate struct + strings
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<para>
   char *label_name -- strings to copy into the link
   char *file_name
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<para>
   struct <link linkend="robo204">RB_link</link> *  -- ready-to-<link linkend="robo285">use</link>
</para>
<formalpara><title>AUTHOR</title><para></para></formalpara>
<para>
   Koessi
</para>
<formalpara><title>SEE ALSO</title><para></para></formalpara>
<para>
   RB_StrDup(), <link linkend="robo202">RB_Free_Link</link>()
</para>
</section>
<section>
<title>Links/RB_CollectLinks</title>
<anchor id="robo201"/>
<anchor id="Links2fRB5fCollectLinks"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Convert header information into link information.
</para>
<literallayout class="monospaced">
      <link linkend="robo148">RB_header</link> -&gt; <link linkend="robo204">RB_link</link> conversion
</literallayout>
<para>
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   document -- 
</para></listitem><listitem><para>   headers  -- the array with headers.
</para></listitem><listitem><para>   <link linkend="robo212">count</link>    -- number of headers in the array
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>OUTPUT</title><para></para></formalpara>
<itemizedlist><listitem><para>   link_index -- an array with links
</para></listitem><listitem><para>   link_index_size -- the number of links in the array.
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Links/RB_Free_Link</title>
<anchor id="robo202"/>
<anchor id="Links2fRB5fFree5fLink"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   RB_Free_Link               -- oop
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   free struct + strings
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<para>
   struct <link linkend="robo204">RB_link</link> *link
</para>
<formalpara><title>AUTHOR</title><para></para></formalpara>
<para>
   Koessi
</para>
<formalpara><title>SEE ALSO</title><para></para></formalpara>
<para>
   <link linkend="robo200">RB_Alloc_Link</link>(), RB_Close_The_Shop()
</para>
</section>
<section>
<title>Links/RB_Free_Links</title>
<anchor id="robo203"/>
<anchor id="Links2fRB5fFree5fLinks"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Deallocate all the memory used to store the links.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   link_index_size
</para></listitem><listitem><para>   link_index[]
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>BUGS</title><para></para></formalpara>
<para>
   Should <link linkend="robo285">use</link> <link linkend="robo202">RB_Free_Link</link> instead of doing
   everything by it self.
</para>
</section>
<section>
<title>Links/RB_link</title>
<anchor id="robo204"/>
<anchor id="Links2fRB5flink"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
    RB_link -- link data structure
</para>
<formalpara><title>PURPOSE</title><para></para></formalpara>
<para>
    Structure to store links to the documentation of an component.
</para>
<formalpara><title>ATTRIBUTES</title><para></para></formalpara>
<itemizedlist><listitem><para>    label_name  -- the label under which the component can be found.
                     this should be a unique name.
</para></listitem><listitem><para>    object_name -- the proper name of the object
</para></listitem><listitem><para>    file_name   -- the file the component can be found in.
</para></listitem><listitem><para>    type        -- the type of component (the header type).
</para></listitem><listitem><para>    is_internal -- is the header an internal header?
</para></listitem></itemizedlist><para>
</para>
</section>
</section>
<section>
<title>ROBODoc/makefile.mingw-cygwin</title>
<anchor id="robo16"/>
<anchor id="ROBODoc2fmakefile2emingw2dcygwin"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   makefile.mingw-cygwin -- Plain makefile that does not need autoconf 
</para>
<formalpara><title>PURPOSE</title><para></para></formalpara>
<para>
   The makefile for MingW Minimalist GNU for Windows under the Cygwin
   environment, See:
</para>
<itemizedlist><listitem><para>   http://www.mingw.org,
</para></listitem><listitem><para>   http://www.cygwin.com
</para></listitem></itemizedlist><para>

   You can <link linkend="robo285">use</link> it if you are on a win32 system.
</para>

<para>
   The following targets are the most useful for the user:
</para>
<itemizedlist><listitem><para>   <link linkend="robo214">robodoc</link> -  makes the <link linkend="robo214">robodoc</link> executable.
</para></listitem></itemizedlist><para>

   Developers might try:
</para>
<itemizedlist><listitem><para>   <link linkend="robo216">test</link>  - run system tests
</para></listitem><listitem><para>   <link linkend="robo206">clean</link> - <link linkend="robo206">clean</link> all results.
</para></listitem></itemizedlist><para>

 EXAMPLES
   make -f makefile.mingw-cygwin <link linkend="robo214">robodoc</link>
   make -f makefile.mingw-cygwin <link linkend="robo216">test</link>
   make -f makefile.mingw-cygwin <link linkend="robo206">clean</link>
</para>
<section>
<title>makefile.mingw-cygwin/CFLAGS</title>
<anchor id="robo205"/>
<anchor id="makefile2emingw2dcygwin2fCFLAGS"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Defined the flags used for the C compiler:
</para>
<itemizedlist><listitem><para>    -W, -Wall and -std=gnu99 --
      This turns on all warnings based on the C99 standard.
      Making the source warning free for an earlier standard is
      not necessary as this code is compiled on Unix, Windows, and
      Mac systems that all have C99 compliant C compilers.
      It also allows some gnu extensions.
      Using -std=c99 gives some spurious warnings about popen()
</para></listitem><listitem><para>   -O3 -- optimize, turning optimization on finds more errors and 
      warnings.
</para></listitem><listitem><para>   -mno-cygwin -- Tells gcc not to link with cygwin1.dll but <link linkend="robo285">use</link> the
      windows standard C library. (make mingw windows native executable
      under cygwin)
</para></listitem><listitem><para>   -s -- Strip debug info out from objects, making the executable smaller
</para></listitem><listitem><para>   -g -- Include all debugger info for GDB
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>makefile.mingw-cygwin/clean</title>
<anchor id="robo206"/>
<anchor id="makefile2emingw2dcygwin2fclean"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   clean -- Clean up the mess we made.
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Cleans up the mess we made.
</para>
</section>
<section>
<title>makefile.mingw-cygwin/robodoc</title>
<anchor id="robo207"/>
<anchor id="makefile2emingw2dcygwin2frobodoc"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   robodoc --
</para>
<formalpara><title>NOTE</title><para></para></formalpara>
<para>
   This assumes that your version of make knows how to make an .o file
   out of an .c file.
</para>
</section>
<section>
<title>makefile.mingw-cygwin/robohdrs</title>
<anchor id="robo208"/>
<anchor id="makefile2emingw2dcygwin2frobohdrs"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   robohdrs --
</para>
</section>
<section>
<title>makefile.mingw-cygwin/SOURCES</title>
<anchor id="robo209"/>
<anchor id="makefile2emingw2dcygwin2fSOURCES"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   All source files needed to compile <link linkend="robo0">ROBODoc</link>
</para>
</section>
<section>
<title>makefile.mingw-cygwin/test</title>
<anchor id="robo210"/>
<anchor id="makefile2emingw2dcygwin2ftest"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   test -- run some tests
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Runs <link linkend="robo214">robodoc</link> on file with a number of different headers.
</para>
</section>
</section>
<section>
<title>ROBODoc/Makefile.plain</title>
<anchor id="robo17"/>
<anchor id="ROBODoc2fMakefile2eplain"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   Makefile.plain -- Plain makefile that does not need autoconf 
</para>
<formalpara><title>PURPOSE</title><para></para></formalpara>
<para>
   The makefile GCC.
   You can <link linkend="robo285">use</link> it if you are on a non Unix system or a system
   that does not support autoconfiguration.
</para>

<para>
   The following targets are the most useful for the user:
</para>
<itemizedlist><listitem><para>   <link linkend="robo214">robodoc</link> -  makes the robodc executable.
</para></listitem><listitem><para>   <link linkend="robo213">example</link> -  makes <link linkend="robo214">robodoc</link> and shows you the autodocs
                generated from the <link linkend="robo0">ROBODoc</link> source code
                using browser.
</para></listitem><listitem><para>   html    -  makes autodocs for <link linkend="robo214">robodoc</link> in html format.
</para></listitem></itemizedlist><para>

   To build <link linkend="robo214">robodoc</link> <link linkend="robo285">use</link>:
</para>
<itemizedlist><listitem><para>   make -f makefile.plain <link linkend="robo214">robodoc</link>
</para></listitem></itemizedlist><para>

   Developers might try:
</para>
<itemizedlist><listitem><para>   depend  - create dependencies
</para></listitem><listitem><para>   <link linkend="robo216">test</link>    -
</para></listitem><listitem><para>   <link linkend="robo212">count</link>   -
</para></listitem><listitem><para>   <link linkend="robo206">clean</link>   -
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>NOTES</title><para></para></formalpara>
<para>
   This documentation is not complete. It is just a <link linkend="robo216">test</link> to see
   how to best <link linkend="robo285">use</link> <link linkend="robo0">ROBODoc</link> with makefiles.
</para>
<section>
<title>Makefile.plain/clean</title>
<anchor id="robo211"/>
<anchor id="Makefile2eplain2fclean"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   clean -- Clean up the mess we made.
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Cleans up the mess we made.
</para>
</section>
<section>
<title>Makefile.plain/count</title>
<anchor id="robo212"/>
<anchor id="Makefile2eplain2fcount"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   count -- count the number of lines of the <link linkend="robo0">ROBODoc</link> source.
</para>
</section>
<section>
<title>Makefile.plain/example</title>
<anchor id="robo213"/>
<anchor id="Makefile2eplain2fexample"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   example -- create and show autodocs extracted from <link linkend="robo0">ROBODoc</link> source.
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
</section>
<section>
<title>Makefile.plain/robodoc</title>
<anchor id="robo214"/>
<anchor id="Makefile2eplain2frobodoc"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   robodoc --
</para>
<formalpara><title>NOTE</title><para></para></formalpara>
<para>
   This assumes that you version of make knows how to make an .o file
   out of an .c file.
</para>
</section>
<section>
<title>Makefile.plain/robohdrs</title>
<anchor id="robo215"/>
<anchor id="Makefile2eplain2frobohdrs"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   robohdrs --
</para>
</section>
<section>
<title>Makefile.plain/test</title>
<anchor id="robo216"/>
<anchor id="Makefile2eplain2ftest"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   test -- run some tests
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Runs <link linkend="robo214">robodoc</link> on file with a number of different headers.
</para>
</section>
<section>
<title>Makefile.plain/xcompile</title>
<anchor id="robo217"/>
<anchor id="Makefile2eplain2fxcompile"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   xcompile
</para>
<formalpara><title>NOTE</title><para></para></formalpara>
<para>
   Cross-compile Wintel binary.
   Consider `apt-get install mingw32' before running this.
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<para>
   Excutable `<link linkend="robo214">robodoc</link>.exe' is created.
</para>
</section>
<section>
<title>Makefile.plain/xcompiler-test</title>
<anchor id="robo218"/>
<anchor id="Makefile2eplain2fxcompiler2dtest"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   xcompiler-test
</para>
<formalpara><title>NOTE</title><para></para></formalpara>
<para>
   Used by do.sh.  
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<para>
   Exit status 0 if cross-compiler is found.
</para>
</section>
</section>
<section>
<title>ROBODoc/Part</title>
<anchor id="robo18"/>
<anchor id="ROBODoc2fPart"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Structures and functions that deal with documentation parts.  A
   part links a sourcefile to the documentation file and contains
   all the headers found in a sourcefile.  Parts (in the form of
   struct <link linkend="robo222">RB_Part</link>) are stored in a <link linkend="robo87">RB_Document</link> structure.
</para>
<section>
<title>Part/RB_Free_RB_Part</title>
<anchor id="robo219"/>
<anchor id="Part2fRB5fFree5fRB5fPart"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Free the memory used by an <link linkend="robo222">RB_Part</link>.  Most of this is handled in
   other functions.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   part  -- the part to be freed.
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Part/RB_Get_RB_Part</title>
<anchor id="robo220"/>
<anchor id="Part2fRB5fGet5fRB5fPart"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Create a new <link linkend="robo222">RB_Part</link> and initialize it.
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<para>
   A freshly allocated and initializedand <link linkend="robo222">RB_Part</link>.
</para>
</section>
<section>
<title>Part/RB_Open_Source</title>
<anchor id="robo221"/>
<anchor id="Part2fRB5fOpen5fSource"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Open the sourcefile of this part.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   part -- the part for which the file is opened.
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Part/RB_Part</title>
<anchor id="robo222"/>
<anchor id="Part2fRB5fPart"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   RB_Part -- a part of the total documentation
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   RB_Parts are stored in <link linkend="robo87">RB_Document</link>.  For each source file there
   is an RB_Part. It points to the source file, the documentation
   file, and contains all the headers that were found in the source
   file.
</para>
<formalpara><title>ATTRIBUTES</title><para></para></formalpara>
<itemizedlist><listitem><para>   next                   -- pointer to the next part
                             (to form a linked list).
</para></listitem><listitem><para>   filename               -- Information over the path to the
                             sourcefile and the correcsponding 
                             documentation file.
</para></listitem><listitem><para>   headers                -- All the headers that were
                             found in the sourcefile.
</para></listitem><listitem><para>   last_header            -- pointer to the last element in the
                             list of headers.
                             This is used to make it possible
                             to add the the heades in the 
                             same order as they were found in
                             the source file.
</para></listitem></itemizedlist><para>
</para>
</section>
</section>
<section>
<title>ROBODoc/RTF_Generator</title>
<anchor id="robo19"/>
<anchor id="ROBODoc2fRTF5fGenerator"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   A collection of functions to generate output in RTF format.
   Supports sections upto 7 levels deep.
</para>
<formalpara><title>TODO</title><para></para></formalpara>
<para>
   Documentation
</para>
<formalpara><title>MODIFICATION HISTORY</title><para></para></formalpara>
<para>
   ????-??-??   Anthon Pang       V1.0
   2003-02-03   Frans Slothouber  Refactoring
   Anthon Pang
</para>
<section>
<title>RTF_Generator/RB_RTF_Generate_Item_Line_Number</title>
<anchor id="robo255"/>
<anchor id="RTF5fGenerator2fRB5fRTF5fGenerate5fItem5fLine5fNumber"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Generate line numbers for SOURCE like items
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   dest_doc           -- the file to write to.
</para></listitem><listitem><para>   line_number_string -- the line number as string.
</para></listitem></itemizedlist><para>
</para>
</section>
</section>
<section>
<title>ROBODoc/Test_Generator</title>
<anchor id="robo20"/>
<anchor id="ROBODoc2fTest5fGenerator"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   The generator for <link linkend="robo216">test</link> output.
</para>

<para>
   The purpose of this generator is to create output that is easily
   scanable by the system <link linkend="robo216">test</link> scripts.  This to make it easier to
   write tests for <link linkend="robo0">ROBODoc</link>.
</para>

<para>
   This generator produces output in utf-8 encoding.
</para>

<para>
   This generator is experimental.
</para>
</section>
<section>
<title>ROBODoc/TROFF_Generator</title>
<anchor id="robo21"/>
<anchor id="ROBODoc2fTROFF5fGenerator"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   <link linkend="robo8">Generator</link> for TROFF output.
</para>
<formalpara><title>NOTE</title><para></para></formalpara>
<para>
   Almost finished.
</para>
<section>
<title>TROFF_Generator/RB_TROFF_Generate_Doc_End</title>
<anchor id="robo256"/>
<anchor id="TROFF5fGenerator2fRB5fTROFF5fGenerate5fDoc5fEnd"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   RB_TROFF_Generate_Doc_End --
</para>
</section>
<section>
<title>TROFF_Generator/RB_TROFF_Generate_Header_End</title>
<anchor id="robo257"/>
<anchor id="TROFF5fGenerator2fRB5fTROFF5fGenerate5fHeader5fEnd"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   RB_TROFF_Generate_Header_End --
</para>
</section>
<section>
<title>TROFF_Generator/RB_TROFF_Generate_Header_Start</title>
<anchor id="robo258"/>
<anchor id="TROFF5fGenerator2fRB5fTROFF5fGenerate5fHeader5fStart"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   RB_TROFF_Generate_Header_Start
</para>
</section>
<section>
<title>TROFF_Generator/RB_TROFF_Generate_Item_Line_Number</title>
<anchor id="robo259"/>
<anchor id="TROFF5fGenerator2fRB5fTROFF5fGenerate5fItem5fLine5fNumber"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Generate line numbers for SOURCE like items
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   dest_doc           -- the file to write to.
</para></listitem><listitem><para>   line_number_string -- the line number as string.
</para></listitem></itemizedlist><para>
</para>
</section>
</section>
<section>
<title>ROBODoc/UserInterface</title>
<anchor id="robo22"/>
<anchor id="ROBODoc2fUserInterface"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   This module contains functions to parse the
   command line and inform the user about any errors.
</para>
<section>
<title>UserInterface/Add_Option_Name</title>
<anchor id="robo260"/>
<anchor id="UserInterface2fAdd5fOption5fName"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Add the name of an option to the group of option names an option
   <link linkend="robo216">test</link> applies to.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<para>
   option_test -- the option <link linkend="robo216">test</link>
   name -- the name of the option
</para>
</section>
<section>
<title>UserInterface/Add_Option_Test</title>
<anchor id="robo261"/>
<anchor id="UserInterface2fAdd5fOption5fTest"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Add a <link linkend="robo216">test</link> to the linked list of options tests.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<para>
   option_test -- the <link linkend="robo216">test</link> to be added.
</para>
</section>
<section>
<title>UserInterface/Check_Item_Options</title>
<anchor id="robo262"/>
<anchor id="UserInterface2fCheck5fItem5fOptions"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Check the validity of the item options.  Users can specify their
   own items, item order, and items that ar to be ignored.  This all
   should be consistent.
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<itemizedlist><listitem><para>   EXIT_SUCCESS -- all options are correct.
</para></listitem><listitem><para>   EXIT_FAILURE -- one of more options incorrect.
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>UserInterface/Check_Option_Spelling</title>
<anchor id="robo263"/>
<anchor id="UserInterface2fCheck5fOption5fSpelling"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Check for misspelled options specified by the user.
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<itemizedlist><listitem><para>   EXIT_SUCCESS -- all options are correctly spelled.
</para></listitem><listitem><para>   EXIT_FAILURE -- one of more options are misspelled.
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>UserInterface/Check_Options</title>
<anchor id="robo264"/>
<anchor id="UserInterface2fCheck5fOptions"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Check the validity of all the options in <link linkend="robo56">configuration</link>.options[].
   This runs a number of checks.
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<itemizedlist><listitem><para>   EXIT_SUCCESS -- all options are correct.
</para></listitem><listitem><para>   EXIT_FAILURE -- one of more options incorrect.
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>UserInterface/copying</title>
<anchor id="robo265"/>
<anchor id="UserInterface2fcopying"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Information about the <link linkend="robo0">ROBODoc</link> licence.
</para>
<formalpara><title>AUTHOR</title><para></para></formalpara>
<para>
   Frans
</para>
</section>
<section>
<title>UserInterface/Create_New_Option_Test</title>
<anchor id="robo266"/>
<anchor id="UserInterface2fCreate5fNew5fOption5fTest"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Allocate and initialize a new option <link linkend="robo216">test</link>.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<para>
   kind -- the kind of <link linkend="robo216">test</link> that has to be created.
</para>
</section>
<section>
<title>UserInterface/Create_Test_Data</title>
<anchor id="robo267"/>
<anchor id="UserInterface2fCreate5fTest5fData"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Create a linked list of tests.
</para>
<formalpara><title>TODO</title><para></para></formalpara>
<para>
   Generate this code automatically from a set
   of high-level specifications.
</para>
</section>
<section>
<title>UserInterface/Do_Mutual_Exlcude_Test</title>
<anchor id="robo268"/>
<anchor id="UserInterface2fDo5fMutual5fExlcude5fTest"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Check all the options to see if combinations of options
   are used that mutually exclude each other, such as
   --singledoc and --multidoc.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   cur_option_test -- the <link linkend="robo216">test</link> to be carried out.
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>UserInterface/Do_Option_Tests</title>
<anchor id="robo269"/>
<anchor id="UserInterface2fDo5fOption5fTests"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Run a series of tests on the options that the user
   specified.  These tests are specified in 
   <link linkend="robo278">option_tests</link>.
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<itemizedlist><listitem><para>   EXIT_FAILURE -- one of the tests failed.
</para></listitem><listitem><para>   EXIT_SUCCESS -- all <link linkend="robo216">test</link> completed successfully
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>UserInterface/Find_And_Fix_Path</title>
<anchor id="robo270"/>
<anchor id="UserInterface2fFind5fAnd5fFix5fPath"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Searches through the options to find a path.
   This path is converted to a propper path
   if it contains errors such as the <link linkend="robo285">use</link> of
   '\' or when it does not start with ./ or a
   drive name.
   The option must exist.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   option_name -- the option name for the path
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<itemizedlist><listitem><para>   path -- the path.
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>UserInterface/Find_Option</title>
<anchor id="robo271"/>
<anchor id="UserInterface2fFind5fOption"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Search <link linkend="robo56">configuration</link>.options for a specific option.
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<itemizedlist><listitem><para>   TRUE  -- option does exist
</para></listitem><listitem><para>   FALSE -- option does not exist
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>UserInterface/Find_Parameterized_Option</title>
<anchor id="robo272"/>
<anchor id="UserInterface2fFind5fParameterized5fOption"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Search for an option of the form
</para>
<literallayout class="monospaced">
     --a_option_name a_value
</literallayout>
<para>
   in <link linkend="robo56">configuration</link>.options.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<para>
   optionname -- the name of the option to search for.
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<para>
   NULL if the option is not found, a pointer to the value
   otherwise.
</para>
<formalpara><title>NOTES</title><para></para></formalpara>
<para>
   Results in a Panic if the option is found but
   no value is specified.
</para>
</section>
<section>
<title>UserInterface/Fix_Path</title>
<anchor id="robo273"/>
<anchor id="UserInterface2fFix5fPath"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Add a "./" to a path if it does not start with a "./" or does not
   contain a ":".  If the path was "." just add a "/".  Adding a
   "./" simplifies the creating of relative links during the
   generation process.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   path -- the path to be fixed.
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<para>
   A pointer to a newly allocated string containing the path.
</para>
</section>
<section>
<title>UserInterface/General_Find_Parameterized_Option</title>
<anchor id="robo274"/>
<anchor id="UserInterface2fGeneral5fFind5fParameterized5fOption"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Search for an option of the form
</para>
<literallayout class="monospaced">
     --a_option_name a_value
</literallayout>
<para>
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   n -- the number of options in the options array.
</para></listitem><listitem><para>   options -- the options array
</para></listitem><listitem><para>   optionname -- the name of the option to search for.
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<para>
   NULL if the option is not found, a pointer to the value
   otherwise.
</para>
<formalpara><title>NOTES</title><para></para></formalpara>
<para>
   Results in a Panic if the option is found but
   no value is specified.
</para>
</section>
<section>
<title>UserInterface/main</title>
<anchor id="robo275"/>
<anchor id="UserInterface2fmain"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Get and parse the arguments.  Analyse document and generate the
   documentation. Everything starts from here.
</para>
</section>
<section>
<title>UserInterface/ok_options</title>
<anchor id="robo276"/>
<anchor id="UserInterface2fok5foptions"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   An list of all allowed command-line options.  If you add any
   options add its name here too.  This list is used to verify
   the options specified by the user.
</para>
</section>
<section>
<title>UserInterface/Option_Test_Kind</title>
<anchor id="robo277"/>
<anchor id="UserInterface2fOption5fTest5fKind"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Enumeration for the kind of tests that are carried out on the 
   options that the user specifies.
</para>
</section>
<section>
<title>UserInterface/option_tests</title>
<anchor id="robo278"/>
<anchor id="UserInterface2foption5ftests"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   A linked lists of tests that check the options specified
   by the user.
</para>
</section>
<section>
<title>UserInterface/Path_Check</title>
<anchor id="robo279"/>
<anchor id="UserInterface2fPath5fCheck"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Test the validity of the doc and source path. The doc path should
   not be a sub directory of the source path otherwise the generated
   documentation will be part of the generated documentation if
   <link linkend="robo214">robodoc</link> is run more than once.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   sourcepath -- the path to the source files.
</para></listitem><listitem><para>   docpath    -- the path to the documentation files.
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>OUTPUT</title><para></para></formalpara>
<itemizedlist><listitem><para>   error messages
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>UserInterface/Path_Convert_Win32_to_Unix</title>
<anchor id="robo280"/>
<anchor id="UserInterface2fPath5fConvert5fWin325fto5fUnix"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Although people are supposed to specify all paths
   with a '/' as seperator, sometimes people on Win32
   <link linkend="robo285">use</link> '\', this causes problems later on in some
   other function of <link linkend="robo214">robodoc</link> that expect a '/'.
   So to prevent this we replace all the '\' in a path
   with '/'
</para>
<literallayout class="monospaced">
    
</literallayout>
<para>
   In addition people sometimes add a '/' at the
   end of the path. We remove it.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   path -- the path.
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<itemizedlist><listitem><para>   path -- the converted path (in a newly allocated
             block of memory).
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>UserInterface/PathBegin_Check</title>
<anchor id="robo281"/>
<anchor id="UserInterface2fPathBegin5fCheck"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Checks the validity of a path.
   A path should start with
</para>
<literallayout class="monospaced">
     ./
</literallayout>
<para>
   or
</para>
<literallayout class="monospaced">
     /
</literallayout>
<para>
   or
</para>
<literallayout class="monospaced">
     have a ':' some where
</literallayout>
<para>
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   path -- the path to be cheked.
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<itemizedlist><listitem><para>   FALSE -- path is not OK.
</para></listitem><listitem><para>   TRUE  -- path is OK.
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>UserInterface/RB_Find_In_Argv_Parameterized_Option</title>
<anchor id="robo282"/>
<anchor id="UserInterface2fRB5fFind5fIn5fArgv5fParameterized5fOption"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Search for an option of the form
</para>
<literallayout class="monospaced">
     --a_option_name a_value
</literallayout>
<para>
   in argv.   The function is used to look for the
</para>
<literallayout class="monospaced">
     --rc  
</literallayout>
<para>
   option that can be used to specify an 
   alternate <link linkend="robo214">robodoc</link> <link linkend="robo56">configuration</link> file.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   argc -- the argument <link linkend="robo212">count</link> as received by <link linkend="robo275">main</link>().
</para></listitem><listitem><para>   argv -- the array of argument values as received by <link linkend="robo275">main</link>()
</para></listitem><listitem><para>   optionname -- the name of the option to search for.
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<para>
   NULL if the option is not found, a pointer to the value
   otherwise.
</para>
<formalpara><title>NOTES</title><para></para></formalpara>
<para>
   Results in a Panic if the option is found but
   no value is specified.
</para>
</section>
<section>
<title>UserInterface/RB_Option_Name</title>
<anchor id="robo283"/>
<anchor id="UserInterface2fRB5fOption5fName"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Element in a list of option names.
   Used in a <link linkend="robo284">RB_Option_Test</link> to specify to what
   options a <link linkend="robo216">test</link> applies.
</para>
</section>
<section>
<title>UserInterface/RB_Option_Test</title>
<anchor id="robo284"/>
<anchor id="UserInterface2fRB5fOption5fTest"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   A <link linkend="robo216">test</link> specification for options. This
   stores information about the kind of <link linkend="robo216">test</link> and
   the options it applies to, and the message that
   is given to the user.
</para>
</section>
<section>
<title>UserInterface/use</title>
<anchor id="robo285"/>
<anchor id="UserInterface2fuse"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   use -- <link linkend="robo253">usage</link> string
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Inform the user how to use <link linkend="robo0">ROBODoc</link>.
</para>
<formalpara><title>AUTHOR</title><para></para></formalpara>
<para>
   Koessi
</para>
</section>
</section>
<section>
<title>ROBODoc/Utilities</title>
<anchor id="robo23"/>
<anchor id="ROBODoc2fUtilities"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Set of general purpose utility functions that are used
   in more than one module.
</para>
<section>
<title>Utilities/CR_LF_Conversion</title>
<anchor id="robo286"/>
<anchor id="Utilities2fCR5fLF5fConversion"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Fix CR/LF problems.
</para>

<para>
   If <link linkend="robo0">ROBODoc</link> reads a text file that was created on another OS
   line-endings might not be what <link linkend="robo0">ROBODoc</link> expects of the current OS.
   This function tries to detect and fix this.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   line -- a line of text
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>RETURN VALUE</title><para></para></formalpara>
<itemizedlist><listitem><para>   number of characters that were removed.
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Utilities/cwd</title>
<anchor id="robo287"/>
<anchor id="Utilities2fcwd"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Holds current working directory
</para>
</section>
<section>
<title>Utilities/ExpandTab</title>
<anchor id="robo288"/>
<anchor id="Utilities2fExpandTab"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Expand the tabs in a line of text.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<para>
   line -- the line to be expanded
   tab_size    -- global.
 RETURN
   pointer to the expanded line.
</para>
<formalpara><title>NOTE</title><para></para></formalpara>
<para>
   This function is not reentrant.
</para>
</section>
<section>
<title>Utilities/RB_Alloc_Header</title>
<anchor id="robo289"/>
<anchor id="Utilities2fRB5fAlloc5fHeader"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   allocate the struct <link linkend="robo148">RB_header</link>
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<para>
   struct <link linkend="robo148">RB_header</link> *      -- all attributes/pointers set to zero
</para>
<formalpara><title>AUTHOR</title><para></para></formalpara>
<para>
   Koessi
</para>
<formalpara><title>SEE ALSO</title><para></para></formalpara>
<para>
   <link linkend="robo297">RB_Free_Header</link>()
</para>
</section>
<section>
<title>Utilities/RB_Change_Back_To_CWD</title>
<anchor id="robo290"/>
<anchor id="Utilities2fRB5fChange5fBack5fTo5fCWD"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Changes back to saved working directory and frees <link linkend="robo287">cwd</link> string
</para>
</section>
<section>
<title>Utilities/RB_Change_To_Docdir</title>
<anchor id="robo291"/>
<anchor id="Utilities2fRB5fChange5fTo5fDocdir"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Saves current working directory and then changes to document dir
</para>
</section>
<section>
<title>Utilities/RB_Close_File</title>
<anchor id="robo292"/>
<anchor id="Utilities2fRB5fClose5fFile"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Closes a given file
</para>
</section>
<section>
<title>Utilities/RB_Close_Pipe</title>
<anchor id="robo293"/>
<anchor id="Utilities2fRB5fClose5fPipe"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Closes a given pipe
</para>
</section>
<section>
<title>Utilities/RB_ContainsNL</title>
<anchor id="robo294"/>
<anchor id="Utilities2fRB5fContainsNL"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Check whether the provided line buffer contains
   a new line (NL) character.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   line -- line string to process
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>RETURN VALUE</title><para></para></formalpara>
<itemizedlist><listitem><para>   TRUE  -- the line contains a NL character
</para></listitem><listitem><para>   FALSE -- the line does not contain a NL character
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Utilities/RB_CopyFile</title>
<anchor id="robo295"/>
<anchor id="Utilities2fRB5fCopyFile"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   RB_CopyFile -- copy a file to another file
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<para>
   Program Exit if one of the specified files did not open.
</para>
</section>
<section>
<title>Utilities/RB_FputcLatin1ToUtf8</title>
<anchor id="robo296"/>
<anchor id="Utilities2fRB5fFputcLatin1ToUtf8"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   RB_FputcLatin1ToUtf8
</para>
<formalpara><title>BUGS</title><para></para></formalpara>
<para>
   This wrongly assumes that input is always Latin-1.
</para>
</section>
<section>
<title>Utilities/RB_Free_Header</title>
<anchor id="robo297"/>
<anchor id="Utilities2fRB5fFree5fHeader"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   RB_Free_Header             -- oop
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   free struct <link linkend="robo148">RB_header</link> and associated strings
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<para>
   struct <link linkend="robo148">RB_header</link> *header -- this one
</para>
<formalpara><title>AUTHOR</title><para></para></formalpara>
<para>
   Koessi
</para>
<formalpara><title>SEE ALSO</title><para></para></formalpara>
<para>
   <link linkend="robo289">RB_Alloc_Header</link>(), RB_Close_The_Shop()
</para>
</section>
<section>
<title>Utilities/RB_FreeLineBuffer</title>
<anchor id="robo298"/>
<anchor id="Utilities2fRB5fFreeLineBuffer"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Free the dynamically allocated line-buffer
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   works on the globals <link linkend="robo137">line_buffer</link>, <link linkend="robo141">readChars</link>, <link linkend="robo139">myLine</link>
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Utilities/RB_malloc</title>
<anchor id="robo299"/>
<anchor id="Utilities2fRB5fmalloc"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   like malloc, but exit if malloc failed
</para>
<formalpara><title>RETURN VALUE</title><para></para></formalpara>
<para>
   See malloc
</para>
</section>
<section>
<title>Utilities/RB_Match</title>
<anchor id="robo300"/>
<anchor id="Utilities2fRB5fMatch"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   See if a wildcard expression matches a target string.  The wildcard
   expression can consists of any literal character and the two
   wildcards characters '*' and '?'.  '*' matches the longest string
   of zero or more characters that fit.  '?' matches any single
   character.
</para>

<para>
   Examples:
</para>
<literallayout class="monospaced">
      "*aap"   matches "aapaapaapaap"
      "?inux"  matches "linux"
      "lin*ux" matches "linux"
      "linux*" matches "linux"
</literallayout>
<para>
</para>
<formalpara><title>NOTES</title><para></para></formalpara>
<para>
   This is a recursive function.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   target -- the string to be matched agains the
               wildcard_expression.
</para></listitem><listitem><para>   wildcard_expression -- the wildcard expression
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>RETURN VALUE</title><para></para></formalpara>
<para>
   TRUE  -- the target matches the wildcard expression
   FALSE -- it does not match.
</para>
</section>
<section>
<title>Utilities/RB_Mem_Check</title>
<anchor id="robo301"/>
<anchor id="Utilities2fRB5fMem5fCheck"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Check for memory allocation failures.
</para>
</section>
<section>
<title>Utilities/RB_Open_File</title>
<anchor id="robo302"/>
<anchor id="Utilities2fRB5fOpen5fFile"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Opens a file and returns its handler
</para>
</section>
<section>
<title>Utilities/RB_Open_Pipe</title>
<anchor id="robo303"/>
<anchor id="Utilities2fRB5fOpen5fPipe"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Opens a pipe and returns its handler
</para>
</section>
<section>
<title>Utilities/RB_Panic</title>
<anchor id="robo304"/>
<anchor id="Utilities2fRB5fPanic"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   RB_Panic -- free resources and shut down
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Print error message.  Frees all resources used by <link linkend="robo214">robodoc</link>.
   Terminates program.  Output goes to stderr
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<para>
   char *format            -- formatstring
   ...                     -- parameters
</para>
<formalpara><title>AUTHOR</title><para></para></formalpara>
<para>
   Koessi
</para>
</section>
<section>
<title>Utilities/RB_QuickSort</title>
<anchor id="robo305"/>
<anchor id="Utilities2fRB5fQuickSort"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Sort an array of pointers according to the lexical order
   of the elements the pointers point to.
   This is based on the quicksort routine in
   "The C programming language" by B Kerninghan en D Ritchie.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   array -- the array of pointers.
</para></listitem><listitem><para>   left  -- the most left element in the array.
</para></listitem><listitem><para>   right -- the most right element in the array.
</para></listitem><listitem><para>   f     -- pointer to a function that can compare
              the objects two elements of the array
              point to.
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<para>
   array -- A sorted array of pointers.
</para>
<formalpara><title>EXAMPLE</title><para></para></formalpara>
<para>
   The following is an <link linkend="robo213">example</link> program that shows
   the <link linkend="robo285">use</link>
</para>
<literallayout class="monospaced">
    #define TEST_SIZE 10
</literallayout>
<para>

</para>
<literallayout class="monospaced">
    char* <link linkend="robo216">test</link>[ TEST_SIZE ] = { "ape", "zebra",
       "duck", "goofbal", "dodo", "rabit",
       "crow", "cow", "pig", "goat" };
</literallayout>
<para>

</para>
<literallayout class="monospaced">
    int string_compare( void* p1, void* p2 )
    {
       char *cp1 = p1;
       char *cp2 = p2;
       return strcmp( cp1, cp2 );
    }
</literallayout>
<para>

</para>
<literallayout class="monospaced">
    RB_QuickSort( <link linkend="robo216">test</link>, 0, TEST_SIZE - 1, string_compare );
</literallayout>
<para>
</para>
</section>
<section>
<title>Utilities/RB_ReadWholeLine</title>
<anchor id="robo306"/>
<anchor id="Utilities2fRB5fReadWholeLine"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Read a line from the file using the provided buffer.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   file -- file to read from
</para></listitem><listitem><para>   buf -- buffer of length MAX_LINE_LEN to read chunks of the line to
</para></listitem><listitem><para>   arg_readChars -- reference to the variable to store the read characters in
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>RETURN VALUE</title><para></para></formalpara>
<itemizedlist><listitem><para>   returns a dynamically allocated buffer containing the complete line
     read
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>NOTES</title><para></para></formalpara>
<para>
   If the line did not end in a new line (NL) character one is added.
</para>
</section>
<section>
<title>Utilities/RB_Say</title>
<anchor id="robo307"/>
<anchor id="Utilities2fRB5fSay"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   RB_Say                     -- varargs
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Say what's going on.  Goes to stdout.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   char *format    -- formatstring
</para></listitem><listitem><para>   long mode       -- SAY_INFO | SAY_DEBUG
</para></listitem><listitem><para>   ...             -- parameters
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>AUTHOR</title><para></para></formalpara>
<para>
   Koessi
</para>
</section>
<section>
<title>Utilities/RB_Skip_Whitespace</title>
<anchor id="robo308"/>
<anchor id="Utilities2fRB5fSkip5fWhitespace"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Skip space and tab chars from the start *buf. This is needed when
   searching for indented headers and items.
</para>
<formalpara><title>NOTES</title><para></para></formalpara>
<para>
   We should extract some info about indentation level and save it to
   global variable in order to write out source items (that originate from
   indented headers) neatly.
</para>
<formalpara><title>SEE ALSO</title><para></para></formalpara>
<para>
   <link linkend="robo45">RB_Find_Marker</link>, RB_Find_End_Marker, RB_Find_Item, RB_Generate_Item_Body
</para>
</section>
<section>
<title>Utilities/RB_Str_Case_Cmp</title>
<anchor id="robo309"/>
<anchor id="Utilities2fRB5fStr5fCase5fCmp"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Compare two strings, regardless of the case of the characters.
</para>
<formalpara><title>RESULT</title><para></para></formalpara>
<para>
    0  s == t
   -1  s &lt; t
    1  s &gt; t
</para>
</section>
<section>
<title>Utilities/RB_StripCR</title>
<anchor id="robo310"/>
<anchor id="Utilities2fRB5fStripCR"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Strip carriage return (CR) from line.
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   line -- line string to process
</para></listitem></itemizedlist><para>
</para>
</section>
<section>
<title>Utilities/RB_Swap</title>
<anchor id="robo311"/>
<anchor id="Utilities2fRB5fSwap"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Swap two elements in a array of pointers.  This function is used
   by <link linkend="robo305">RB_QuickSort</link>().
</para>
</section>
<section>
<title>Utilities/RB_TimeStamp</title>
<anchor id="robo312"/>
<anchor id="Utilities2fRB5fTimeStamp"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   RB_TimeStamp -- print a time stamp
</para>
</section>
<section>
<title>Utilities/snprintf</title>
<anchor id="robo313"/>
<anchor id="Utilities2fsnprintf"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Mimic the library function snprintf using sprintf if it is absent.
</para>
</section>
<section>
<title>Utilities/Stat_Path</title>
<anchor id="robo314"/>
<anchor id="Utilities2fStat5fPath"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Check the given path against required type.
   d -- directory, f -- file, e -- exists
</para>
<formalpara><title>RETURN VALUE</title><para></para></formalpara>
<para>
   TRUE if path is of the given type, otherwise FALSE.
</para>
<formalpara><title>BUGS</title><para></para></formalpara>
<para>
   Should check if symbolic link points to a directory or to a file.
</para>
</section>
</section>
<section>
<title>ROBODoc/Lua_Generator</title>
<anchor id="robo224"/>
<anchor id="ROBODoc2fLua5fGenerator"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Shell generator that actually gives data to a Lua script.
   Supports singledoc mode.
</para>
<formalpara><title>AUTHOR</title><para></para></formalpara>
<para>
   Jeremy Cowgar &lt;jc@cowgar.com&gt;
</para>
<formalpara><title>NOTES</title><para></para></formalpara>
<para>
   No code defined yet. This is just a shell.
</para>
</section>
<section>
<title>ROBODoc/RB_Path</title>
<anchor id="robo225"/>
<anchor id="ROBODoc2fRB5fPath"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   RB_Path -- Path to a file
</para>
<formalpara><title>ATTRIBUTES</title><para></para></formalpara>
<itemizedlist><listitem><para>   next  -- pointer to the next RB_Path structure.
</para></listitem><listitem><para>   parent -- the parent path (one directory up).
</para></listitem><listitem><para>   name  -- null terminated string with the name of the path.
               (Path names can be relative)
</para></listitem><listitem><para>   docname -- the corresponding docpath.
</para></listitem></itemizedlist><para>
</para>
</section>
</section>
<section>
<title>Docuwala/ROBOhdrs</title>
<anchor id="robo1"/>
<anchor id="Docuwala2fROBOhdrs"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
    <link linkend="robo215">robohdrs</link>
</para>
<formalpara><title>DESCRIPTION</title><para></para></formalpara>
<para>
    Standalone program to insert <link linkend="robo0">ROBODoc</link> headers to source code files.
    This program processes one source file at the time. Existing 
    <link linkend="robo0">ROBODoc</link> headers, if any, are not checked for. Beware since this 
    may result in double headers. Current working directory should 
    be the same as where the source file is located.
</para>
<formalpara><title>USES</title><para></para></formalpara>
<para>
    Exuberant Ctags 5.3.1 or newer required
</para>
<formalpara><title>USAGE</title><para></para></formalpara>
<para>
    <link linkend="robo215">robohdrs</link> [options] &lt;source file&gt;
</para>
<formalpara><title>EXAMPLE</title><para></para></formalpara>
<para>
    <link linkend="robo215">robohdrs</link> -p myproj test1.c
    <link linkend="robo215">robohdrs</link> -s -p myproj -i "MODIFICATION HISTORY" -i IDEAS test2.c
</para>

<para>
    Type `<link linkend="robo215">robohdrs</link> -h' to see all command line options.
</para>
<formalpara><title>TODO</title><para></para></formalpara>
<itemizedlist><listitem><para>    garbage collection
</para></listitem><listitem><para>    support for other languages which <link linkend="robo230">ctags</link> program supports
</para></listitem></itemizedlist><para>
</para>
<formalpara><title>SEE ALSO</title><para></para></formalpara>
<para>
    <link linkend="robo0">ROBODoc</link>         https://sourceforge.net/projects/<link linkend="robo214">robodoc</link>/
    Exuberant Ctags http://<link linkend="robo230">ctags</link>.sourceforge.net/
</para>
<formalpara><title>COPYRIGHT</title><para></para></formalpara>
<para>
    (c) 2003 Frans Slothouber and Petteri Kettunen
    Copying policy: GPL
</para>
<section>
<title>ROBOhdrs/addList</title>
<anchor id="robo226"/>
<anchor id="ROBOhdrs2faddList"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
    addList
</para>
</section>
<section>
<title>ROBOhdrs/arrangeCtags</title>
<anchor id="robo227"/>
<anchor id="ROBOhdrs2farrangeCtags"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
    arrangeCtags
</para>
</section>
<section>
<title>ROBOhdrs/cleanUp</title>
<anchor id="robo228"/>
<anchor id="ROBOhdrs2fcleanUp"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
    cleanUp
</para>
</section>
<section>
<title>ROBOhdrs/cmdLine</title>
<anchor id="robo229"/>
<anchor id="ROBOhdrs2fcmdLine"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
    cmdLine
</para>
</section>
<section>
<title>ROBOhdrs/ctags</title>
<anchor id="robo230"/>
<anchor id="ROBOhdrs2fctags"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
    ctags
</para>
</section>
<section>
<title>ROBOhdrs/ctagsBin</title>
<anchor id="robo231"/>
<anchor id="ROBOhdrs2fctagsBin"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
    ctagsBin
</para>
</section>
<section>
<title>ROBOhdrs/custhdrs</title>
<anchor id="robo232"/>
<anchor id="ROBOhdrs2fcusthdrs"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
    custhdrs
</para>
</section>
<section>
<title>ROBOhdrs/doCtagsExec</title>
<anchor id="robo233"/>
<anchor id="ROBOhdrs2fdoCtagsExec"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
    doCtagsExec
</para>
</section>
<section>
<title>ROBOhdrs/doFile</title>
<anchor id="robo234"/>
<anchor id="ROBOhdrs2fdoFile"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
    doFile
</para>
</section>
<section>
<title>ROBOhdrs/incSrc</title>
<anchor id="robo235"/>
<anchor id="ROBOhdrs2fincSrc"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
    incSrc
</para>
</section>
<section>
<title>ROBOhdrs/initMe</title>
<anchor id="robo236"/>
<anchor id="ROBOhdrs2finitMe"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
    initMe
</para>
</section>
<section>
<title>ROBOhdrs/insertHeaders</title>
<anchor id="robo237"/>
<anchor id="ROBOhdrs2finsertHeaders"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
    insertHeaders
</para>
</section>
<section>
<title>ROBOhdrs/insertSrcEnd</title>
<anchor id="robo238"/>
<anchor id="ROBOhdrs2finsertSrcEnd"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
    insertSrcEnd
</para>
</section>
<section>
<title>ROBOhdrs/linenumCompare</title>
<anchor id="robo239"/>
<anchor id="ROBOhdrs2flinenumCompare"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
    linenumCompare
</para>
</section>
<section>
<title>ROBOhdrs/main</title>
<anchor id="robo240"/>
<anchor id="ROBOhdrs2fmain"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
    main
</para>
</section>
<section>
<title>ROBOhdrs/MAXLINE</title>
<anchor id="robo241"/>
<anchor id="ROBOhdrs2fMAXLINE"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
    MAXLINE
</para>
</section>
<section>
<title>ROBOhdrs/MAXNAME</title>
<anchor id="robo242"/>
<anchor id="ROBOhdrs2fMAXNAME"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
    MAXNAME
</para>
</section>
<section>
<title>ROBOhdrs/myctags</title>
<anchor id="robo243"/>
<anchor id="ROBOhdrs2fmyctags"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
    myctags
</para>
</section>
<section>
<title>ROBOhdrs/parseCtagsX</title>
<anchor id="robo244"/>
<anchor id="ROBOhdrs2fparseCtagsX"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
    parseCtagsX
</para>
</section>
<section>
<title>ROBOhdrs/parseCtagsXLine</title>
<anchor id="robo245"/>
<anchor id="ROBOhdrs2fparseCtagsXLine"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
    parseCtagsXLine
</para>
</section>
<section>
<title>ROBOhdrs/PROGNAME</title>
<anchor id="robo246"/>
<anchor id="ROBOhdrs2fPROGNAME"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
    PROGNAME
</para>
</section>
<section>
<title>ROBOhdrs/PROGVERSION</title>
<anchor id="robo247"/>
<anchor id="ROBOhdrs2fPROGVERSION"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
    PROGVERSION
</para>
</section>
<section>
<title>ROBOhdrs/projName</title>
<anchor id="robo248"/>
<anchor id="ROBOhdrs2fprojName"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
    projName
</para>
</section>
<section>
<title>ROBOhdrs/roboFileHeader</title>
<anchor id="robo249"/>
<anchor id="ROBOhdrs2froboFileHeader"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
    roboFileHeader
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
    Insert source file header.
</para>
</section>
<section>
<title>ROBOhdrs/roboHeader</title>
<anchor id="robo250"/>
<anchor id="ROBOhdrs2froboHeader"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
    roboHeader
</para>
</section>
<section>
<title>ROBOhdrs/srcSta</title>
<anchor id="robo251"/>
<anchor id="ROBOhdrs2fsrcSta"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
    srcSta
</para>
<formalpara><title>SEE ALSO</title><para></para></formalpara>
<para>
    <link linkend="robo155">src_constants</link>
</para>
</section>
<section>
<title>ROBOhdrs/typeOk</title>
<anchor id="robo252"/>
<anchor id="ROBOhdrs2ftypeOk"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
    typeOk
</para>
</section>
<section>
<title>ROBOhdrs/usage</title>
<anchor id="robo253"/>
<anchor id="ROBOhdrs2fusage"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
    usage
</para>
</section>
<section>
<title>ROBOhdrs/vcTag</title>
<anchor id="robo254"/>
<anchor id="ROBOhdrs2fvcTag"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
    vcTag
</para>
<formalpara><title>DESCRIPTION</title><para></para></formalpara>
<para>
    Version control tag string. This is always specified by the user.
</para>
</section>
</section>
<section>
<title>XMLDB_Generator/RB_XMLDB_Generate_Char</title>
<anchor id="robo315"/>
<anchor id="XMLDB5fGenerator2fRB5fXMLDB5fGenerate5fChar"/>
<formalpara><title>NAME</title><para></para></formalpara>
<para>
   RB_XMLDB_Generate_Char
</para>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Switchboard to RB_XMLDB_Generate_Char
</para>
</section>
<section>
<title>XMLDB_Generator/RB_XMLDB_Generate_Item_Line_Number</title>
<anchor id="robo316"/>
<anchor id="XMLDB5fGenerator2fRB5fXMLDB5fGenerate5fItem5fLine5fNumber"/>
<formalpara><title>FUNCTION</title><para></para></formalpara>
<para>
   Generate line numbers for SOURCE like items
</para>
<formalpara><title>INPUTS</title><para></para></formalpara>
<itemizedlist><listitem><para>   dest_doc           -- the file to write to.
</para></listitem><listitem><para>   line_number_string -- the line number as string.
</para></listitem></itemizedlist><para>
</para>
</section>
</article>

