home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / txict100.zip / texicvt1.00 / source / mainhtml.cc < prev    next >
C/C++ Source or Header  |  1997-03-31  |  6KB  |  231 lines

  1. /*
  2. ================================================================================
  3.                         Texinfo converting Tools
  4.                          Release 1.00 28.03.97
  5.                        (c) 1996 by Andreas Kaiser
  6.                     (c) 1997 by Karl Heinz Marbaise
  7. ================================================================================
  8.  
  9. Discription:
  10.     main Programm for converting Texinfo to HTML
  11.  
  12. Authors:
  13.    Andreas Kaiser
  14.    Karl Heinz Marbaise
  15.  
  16. e-mail:
  17.    Internet: KHMarbaise@p69.ks.fido.de
  18.    Fido-net: 2:2452/117.69
  19.  
  20. Bugs, question:
  21.    to above e-mail adress.
  22.  
  23. Register:
  24.    Please send a e-mail to above adress to register.
  25.    (include the release you want to register)
  26.    This registration should be done to let me
  27.    know how many people using these tools and
  28.    if it is worth to invest more time in continuing
  29.    development these tools or let the first release
  30.    of them be the last.
  31.    That is the only reason to make a registration.
  32.    I think a e-mail is not to much, isn't it?
  33.  
  34. License:
  35.    The "Texinfo converting tools" are free software;
  36.    you can redistribute it and/or modify it under the terms of
  37.    the GNU General Public License as published by the Free
  38.    Software Foundation; either version 2, or (at your option)
  39.    any later version.
  40.  
  41.    The "Texinfo converting tools" are distributed in the hope that
  42.    they will be useful, but WITHOUT ANY WARRANTY; without even the
  43.    implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
  44.    PURPOSE.  See the GNU General Public License for more details.
  45.  
  46.    You should have received a copy of the GNU General Public License
  47.    along with the "Texinfo converting tools" ; see the file COPYING.
  48.    If not, write to the:
  49.    Free Software Foundation,
  50.    59 Temple Place - Suite 330,
  51.    Boston, MA 02111-1307, USA.
  52.  
  53.    See \texicvt1.00\COPYING for details.
  54.  
  55. ================================================================================
  56. */
  57.  
  58.  
  59. /*
  60. ------------------------------------------------------------------------------
  61.                       (R)evision (C)ontrol (S)ystem
  62. ------------------------------------------------------------------------------
  63. */
  64.  
  65. #ifdef __RCS__
  66. static const char *mainhtml_cc = "$Id: MAINHTML.CC 1.7 1997/03/30 15:08:19 KHM Exp $";
  67. #endif
  68.  
  69. /*--------------------------------------------------------------------------*/
  70. /*                             Include Files                                */
  71. /*--------------------------------------------------------------------------*/
  72.  
  73. #define EXTERN
  74. #define INIT(x) = x
  75. #include "info.h"
  76. #include <fstream.h>
  77. #include <stdio.h>
  78. #include <ctype.h>
  79. #if defined (__EMX__)
  80. #include <getopt.h>
  81. #else
  82. #include <GetOpt.h>
  83. #endif
  84.  
  85. #include "version.h"
  86.  
  87. void
  88. usage()
  89. {
  90.     cout <<"txi2html [options {in [out]]" << endl
  91.          <<" -Dflag    set Texinfo flag" << endl
  92.          <<" -Uflag    clear Texinfo flag" << endl
  93.          <<" -i    create IPF index" << endl
  94.          <<" -n    use @node to split into panels, not @chapter" << endl
  95.          <<" -d    debugging aid" << endl
  96.          <<" -f    flex scanner trace" << endl
  97.          <<" -v    print out version, copyright and" << endl
  98.              <<"        copying conditions." << endl
  99.          <<" in    texinfo file, default=stdin" << endl
  100.          <<" out    inf file (*.inf) or ipf source (else)" << endl;
  101. }
  102.  
  103. main(int argc, char **argv)
  104. {
  105.         int c;
  106.     int compile = 0;
  107.         int direct = 0;
  108.         char *fn = (char *)NULL;
  109. #if defined (__EMX__)
  110.         char s[_MAX_PATH];
  111.         char drive[_MAX_DRIVE];
  112.         char dir[_MAX_DIR];
  113.         char file[_MAX_FNAME];
  114.         char ext[_MAX_EXT];
  115. #endif
  116.     ofstream *outf = 0;
  117.  
  118.     extern int yy_flex_debug;
  119.     yy_flex_debug = 0;
  120.  
  121.         f_node = 0; /* use chapter */
  122.         f_index = 0; /* don't create index */
  123.  
  124.         IncludeFile = 0;
  125. #if defined (__EMX__)
  126.         GetOpt getopt(argc, argv, "?hdD:finU:ov");
  127. #else
  128.         GetOpt getopt(argc, argv, "?hdD:finU:v");
  129. #endif
  130.     for (c = 0; (c = getopt()) != EOF; )
  131.         switch (c) {
  132.                 case 'o':
  133.                         direct = 1;
  134.                         break;
  135.         case 'd':
  136.             ++debug;
  137.             break;
  138.         case 'D':
  139.             flags[(String &)getopt.optarg] = 1;
  140.             break;
  141.         case 'f':
  142.             ++yy_flex_debug;
  143.             break;
  144.         case 'i':
  145.             ++f_index;
  146.             break;
  147.         case 'n':
  148.             ++f_node;
  149.             break;
  150.         case 'U':
  151.             flags[(String &)getopt.optarg] = (const char *)0;
  152.             break;
  153.                 case 'v':
  154.                         PrintCopyright ();
  155.                 case '?':
  156.                 case 'h':
  157.         default:
  158.             usage();
  159.             exit(2);
  160.         }
  161.     if (getopt.optind < argc) {
  162.                 fn = argv[getopt.optind];
  163.         if (freopen(fn, "r", stdin) == NULL) {
  164.             perror(fn);
  165.             exit(1);
  166.         }
  167.     }
  168.     String ipfname, basename;
  169.  
  170. #if defined (__EMX__)
  171.         if (direct)
  172.         {
  173.             sprintf (s, fn);
  174.             _splitpath(s,drive,dir,file,ext);
  175.             _makepath (s,drive,dir,file,".html");
  176.             fprintf (stderr, "converting %s to %s\n", fn, s);
  177.         out = outf = new ofstream(s);
  178.         if (!outf->good()) {
  179.             perror(s);
  180.             exit(1);
  181.         }
  182.         }
  183. #endif
  184.     if (++getopt.optind < argc) {
  185.         ipfname = argv[getopt.optind];
  186.         int ext = ipfname.index('.', -1);
  187.         if (ext >= 0) {
  188.             basename = ipfname.before(ext);
  189.             if (fcompare(ipfname.from(ext), ".inf") == 0) {
  190.                 compile = 1;
  191.                 ipfname.from(ext) = ".ipf";
  192.             }
  193.         }
  194.         out = outf = new ofstream(ipfname);
  195.         if (!outf->good()) {
  196.             perror(ipfname);
  197.             exit(1);
  198.         }
  199.     }
  200.  
  201.         *out << "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 3.0//EN\">" << endl;
  202.         *out << "<HTML>" << endl;
  203.         *out << "<!--  " << RELEASENAME << " -->" << endl;
  204.         *out << "<!--  " << COPYRIGHT << " -->" << endl;
  205.         *out << "<HEAD>" << endl;
  206.  
  207.     while ((c = yylex()) > 0)
  208.         {
  209.         if (c == '\n')
  210.                     /* *out << endl; */ /* << "<BR>";*/ /* this looks well but is
  211.                                              * not allowed in all
  212.                                              * circumstances
  213.                                              */
  214.  
  215.                     newline (); /**out << endl;*/
  216.                 else
  217.                     PUTS ((char)c); /* *out << (char)c; */
  218.         }
  219.  
  220.     *out << "</BODY>" << endl;
  221.     *out << "</HTML>" << endl;
  222.  
  223.         if (outf)
  224.             outf->close();
  225.  
  226.         if (IncludeFile)
  227.             cerr << endl;
  228.  
  229.     return c ? 1 : 0;
  230. }
  231.