home *** CD-ROM | disk | FTP | other *** search
/ ftp.wwiv.com / ftp.wwiv.com.zip / ftp.wwiv.com / pub / UTILITY / W2H01B3.ZIP / WWIV2HTM.CPP < prev    next >
C/C++ Source or Header  |  1999-04-18  |  7KB  |  313 lines

  1. /* 
  2.  * WWIV2HTM - WWIV *.MSG file to HTML conversion utility
  3.  * Copyright (c) 1999 Robert Clevenger
  4.  * All Rights Reserved.
  5.  *
  6.  * This utility may be used freely by WWIV Sysops.  If you make any
  7.  * changes, please e-mail them to me so that I may incorporate them 
  8.  * into my next version.
  9.  *
  10.  * email: rob@robsite.org
  11.  * FidoNet: 1:125/2112
  12.  * FILEnet: 1@561.FILENET
  13.  */
  14. #include "wwiv2htm.h"
  15.  
  16.  
  17. VOID SetDefaultColors(VOID)
  18. {
  19.   //
  20.   // Set Default Values...
  21.   //
  22.   strcpy(bgcolor,   "#000000");
  23.   strcpy(colors[0], "#bbbbbb");
  24.   strcpy(colors[1], "#88FFF7");
  25.   strcpy(colors[2], "#ffff00");
  26.   strcpy(colors[3], "#e700d0");
  27.   strcpy(colors[4], "#0000ff");
  28.   strcpy(colors[5], "#00FF00");
  29.   strcpy(colors[6], "#ff0000");
  30.   strcpy(colors[7], "#0000FF");
  31.   strcpy(colors[8], "#969900");
  32.   strcpy(colors[9], "#009991");
  33. }
  34.  
  35.  
  36. BOOL LoadConfigFile(LPCTSTR pszConfigFileName)
  37. {
  38.   FILE* hConfigFile = NULL;
  39.   char szBuffer[81];
  40.  
  41.   if ((hConfigFile = fopen(pszConfigFileName, "rt")) == NULL)
  42.   {
  43.     SetDefaultColors();
  44.   }
  45.   else
  46.   {
  47.     //
  48.     // Read config file and process values...
  49.     //
  50.     fgets(szBuffer, 81, hConfigFile);
  51.     strcpy(bgcolor, szBuffer);
  52.     for (int nLoop=0; nLoop<10; nLoop++)
  53.     {
  54.       fgets(szBuffer, 81, hConfigFile);
  55.       strcpy(colors[nLoop], szBuffer);
  56.     }
  57.     fclose(hConfigFile);
  58.   }
  59.   return TRUE;
  60. }
  61.  
  62.  
  63. VOID ShowBanner(VOID)
  64. {
  65.   COLOR(10);
  66.   cprintf("\r\n");
  67.   cprintf(TITLE);
  68.   cprintf("\r\n");
  69.   COLOR(10);
  70.   cprintf(VERSION);
  71.   cprintf("\r\n");
  72.   COLOR(13);
  73.   cprintf(COPYRIGHT);
  74.   cprintf("\r\n");
  75.   COLOR(11);
  76.   cprintf(COPYRIGHT2);
  77.   cprintf("\r\n\n");
  78. }
  79.  
  80.  
  81. VOID ShowUsage(VOID)
  82. {
  83.   COLOR(12);
  84.   cprintf("USAGE: WWIV2HTML <*.MSG file> <HTML file>\r\n\n");
  85. }
  86.  
  87.  
  88. LPSTR AddToString(LPSTR pszOrig, LPCSTR pszAdd) 
  89. {
  90.     while (*pszAdd) 
  91.     {
  92.         *pszOrig++ = *pszAdd++;
  93.     }
  94.     return pszOrig;
  95. }
  96.  
  97.  
  98. BOOL ConvertFile(LPCTSTR pszWWIVfile, LPCTSTR pszHTMLfile)
  99. {
  100.     FILE *hWWIVfile = NULL, *hHTMLfile = NULL;
  101.     char szInBuffer[1025], szOutBuffer[1025], szBuffer[81];
  102.         char *pszInTemp = NULL, *pszOutTemp = NULL;
  103.         unsigned int nTemp = 0;
  104.  
  105.     // open input and output file
  106.     if ((hWWIVfile = fopen(pszWWIVfile, "rt")) == NULL)
  107.     {
  108.         COLOR(12);
  109.         fprintf(stderr, "ERROR: Unable to open input file: %s", pszHTMLfile);
  110.         return FALSE;
  111.     }
  112.     if ((hHTMLfile = fopen(pszHTMLfile, "wt")) == NULL)
  113.     {
  114.         COLOR(12);
  115.         fprintf(stderr, "ERROR: Unable to create output file: %s", pszHTMLfile);
  116.         fclose(hWWIVfile); // don't leak handles.
  117.         return FALSE;
  118.     }
  119.     // everything should be ok now... (all file handles valid)
  120.     fputs("<HTML><HEAD><TITLE>WWIV Generated HTML File</TITLE></HEAD>\n",hHTMLfile); 
  121.  
  122.     fprintf(hHTMLfile, "<BODY BGCOLOR=\"%s\">\n",bgcolor); 
  123.     fprintf(hHTMLfile, "<CODE>\n");
  124.  
  125.     while (!feof(hWWIVfile)) 
  126.     {
  127.         szInBuffer[0] = '\0';
  128.         fgets(szInBuffer, 1024, hWWIVfile);
  129.         pszInTemp = szInBuffer;
  130.         pszOutTemp = szOutBuffer;
  131.         if (szInBuffer[0] != 0x03)
  132.         {
  133.             sprintf(szBuffer, "<FONT COLOR=\"%s\">", colors[0]);
  134.             pszOutTemp = AddToString(pszOutTemp, szBuffer);
  135.         }
  136.         while (*pszInTemp) 
  137.                 {
  138.             switch ((unsigned char)*pszInTemp) 
  139.             {
  140.             case 3:
  141.                 // WWIV colour code
  142.                 pszInTemp++;
  143.                 nTemp = (*pszInTemp-'0');
  144.                 if ((nTemp>=0) && (nTemp<=9)) {
  145.                     sprintf(szBuffer, "</FONT><FONT COLOR=\"%s\">", colors[nTemp]);
  146.                     pszOutTemp = AddToString(pszOutTemp, szBuffer);
  147.                 } // if colour ok
  148.                 break;
  149.             case 32: // space
  150.                 pszOutTemp = AddToString(pszOutTemp, " ");
  151.                 break;
  152.                         case 34: // "
  153.                                 pszOutTemp = AddToString(pszOutTemp, """);
  154.                 break;
  155.             case 38: // ampersand
  156.                 pszOutTemp = AddToString(pszOutTemp, "&");
  157.                 break;
  158.                         case 60: // <
  159.                                 pszOutTemp = AddToString(pszOutTemp, "<");
  160.                                 break;
  161.                         case 62: // >
  162.                                 pszOutTemp = AddToString(pszOutTemp, ">");
  163.                                 break;
  164.             case 169: // evaluates to a plus symbol
  165.             case 170:
  166.             case 183:
  167.             case 184:
  168.             case 187:
  169.             case 188:
  170.             case 189:
  171.             case 190:
  172.             case 191:
  173.             case 192:
  174.             case 197:
  175.             case 200:
  176.             case 201:
  177.             case 206:
  178.             case 214:
  179.             case 217:
  180.             case 218:
  181.                 pszOutTemp = AddToString(pszOutTemp, "+");
  182.                 break;
  183.             case 205:
  184.             case 207:
  185.             case 216:
  186.                 pszOutTemp = AddToString(pszOutTemp, "=");
  187.                 break;
  188.             case 193:
  189.             case 194:
  190.             case 196:
  191.             case 202:
  192.             case 203:
  193.             case 210:
  194.             case 211:
  195.             case 212:
  196.             case 213:
  197.             case 215:
  198.                 pszOutTemp = AddToString(pszOutTemp, "-");
  199.                 break;
  200.             case 179:
  201.             case 180:
  202.             case 181:
  203.             case 182:
  204.             case 185:
  205.             case 186:
  206.             case 195:
  207.             case 198:
  208.             case 199:
  209.             case 204:
  210.                 pszOutTemp = AddToString(pszOutTemp, "|");
  211.                 break;
  212.             case 173:
  213.                 pszOutTemp = AddToString(pszOutTemp, "!");
  214.                 break;
  215.                         case 174:
  216.                 pszOutTemp = AddToString(pszOutTemp, "<");
  217.                 break;
  218.             case 175:
  219.                 pszOutTemp = AddToString(pszOutTemp, ">");
  220.                 break;
  221.             case 176: // Block characters
  222.             case 177:
  223.             case 178:
  224.             case 219:            
  225.             case 220:
  226.             case 221:
  227.             case 222:
  228.             case 223:
  229.                 pszOutTemp = AddToString(pszOutTemp, "*");
  230.                 break;
  231.             case 224:
  232.             case 225:
  233.             case 226:
  234.             case 227:
  235.             case 228:
  236.             case 229:
  237.             case 230:
  238.             case 231:
  239.             case 232:
  240.             case 233:
  241.             case 234:
  242.             case 235:
  243.             case 236:
  244.             case 237:
  245.             case 238:
  246.             case 239:
  247.             case 240:
  248.             case 241:
  249.             case 242:
  250.             case 243:
  251.             case 244:
  252.             case 245:
  253.             case 246:
  254.             case 247:
  255.             case 248:
  256.             case 249:
  257.             case 250:
  258.             case 251:
  259.             case 252:
  260.             case 253:
  261.             case 254: // all others, nothing to directly map to...
  262.                 pszOutTemp = AddToString(pszOutTemp, "*");
  263.                 break;
  264.             case 255: // 255 is blank
  265.                 pszOutTemp = AddToString(pszOutTemp, " ");
  266.                 break;
  267.             default:
  268.                 // normal character
  269.                 *pszOutTemp++ = *pszInTemp;
  270.                 break;
  271.             } // switch
  272.             pszInTemp++;
  273.         }
  274.         pszOutTemp = AddToString(pszOutTemp, "</FONT> <BR>");
  275.         *pszOutTemp++ = '\0';
  276.         fprintf(hHTMLfile, "%s\n", szOutBuffer);
  277.     } // [end while loop]
  278.     fprintf(hHTMLfile, "</CODE>\n");
  279.     fputs("</BODY></HTML>",hHTMLfile); 
  280.     fputs("<!-- generated with wwiv2htm -->",hHTMLfile); 
  281.  
  282.  
  283.     // close handles
  284.     fclose(hWWIVfile);
  285.     fclose(hHTMLfile);
  286.     return TRUE;
  287. }
  288.  
  289.  
  290. int main(int argc, char* argv[])
  291. {
  292. //  UNREFERENCED_PARAMETER(argv);
  293.  
  294.   ShowBanner();
  295.  
  296.   if (argc != 3)
  297.   {
  298.     ShowUsage();
  299.     return(1);
  300.   }
  301.  
  302.   LoadConfigFile("WWIV2HTM.INI");
  303.   for (int i=0; i<10; i++)
  304.   {
  305.     printf("Color #%d = %s\n", i, colors[i]);
  306.   }
  307.  
  308.   ConvertFile(argv[1], argv[2]);
  309.   
  310.   return(0);
  311. }
  312.  
  313.