home *** CD-ROM | disk | FTP | other *** search
/ Borland Programmer's Resource / Borland_Programmers_Resource_CD_1995.iso / utils / rtfprsr / rtfdiag.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-05-19  |  2.5 KB  |  145 lines

  1. /*
  2.     rtfdiag - read rtf input, write diagnostic stuff.  Useful for
  3.         testing reader to see if it's finding and classifying
  4.         tokens properly, reading destinations, reprocessing
  5.         styles, etc.
  6.  
  7.     Options:
  8.  
  9.     -e    echo tokens as they are read
  10.  
  11.     03 Feb 91    Paul DuBois    dubois@primate.wisc.edu
  12.  
  13.     03 Feb 91 V1.0. Created.
  14.     27 Feb 91 V1.01. Updated for distribution 1.05.
  15. */
  16.  
  17. # include    <stdio.h>
  18. # include    "rtf.h"
  19.  
  20.  
  21. static void    Diag ();
  22. static void    TokenEcho ();
  23. static void    PrintTables ();
  24.  
  25.  
  26. static int    echo = 0;
  27. static char    *usage = "rtfdiag [-e] [file]";
  28.  
  29.  
  30. int main (argc, argv)
  31. int    argc;
  32. char    **argv;
  33. {
  34. int    i;
  35.  
  36.     --argc;
  37.     ++argv;
  38.  
  39.     while (argc > 0 && **argv == '-')
  40.     {
  41.         while (*++*argv != '\0')
  42.         {
  43.             switch (**argv)
  44.             {
  45.             case 'e':
  46.                 echo = 1;
  47.                 break;
  48.             default:
  49.                 fprintf (stderr, "Unknown option: -%c\n",
  50.                             **argv);
  51.                 fprintf (stderr, "%s\n", usage);
  52.                 exit (1);
  53.             }
  54.         }
  55.         --argc;
  56.         ++argv;
  57.     }
  58.  
  59.     if (argc == 0)
  60.         Diag ();
  61.     else for (i = 0; i < argc; i++)
  62.     {
  63.         if (freopen (argv[i], "r", stdin) == NULL)
  64.         {
  65.             fprintf (stderr, "Can't open \"%s\"\n",
  66.                             argv[i]);
  67.             continue;
  68.         }
  69.         if (argc > 1)
  70.         {
  71.         int    j, len = strlen (argv[i]);
  72.  
  73.             for (j = 0; j < len; j++)
  74.                 putchar (':');
  75.             putchar ('\n');
  76.             printf ("%s\n", argv[i]);
  77.             for (j = 0; j < len; j++)
  78.                 putchar (':');
  79.             putchar ('\n');
  80.         }
  81.         Diag ();
  82.     }
  83.  
  84.     exit (0);
  85. }
  86.  
  87.  
  88. static void Diag ()
  89. {
  90.     RTFInit ();
  91.     if (echo)
  92.         RTFSetReadHook (TokenEcho);
  93.     RTFRead ();
  94.     PrintTables ();
  95. }
  96.  
  97.  
  98. static void TokenEcho ()
  99. {
  100.     printf ("%d\t%d\t%d\t%d\t\"%s\"\n",
  101.             rtfClass, rtfMajor, rtfMinor, rtfParam, rtfTextBuf);
  102. }
  103.  
  104.  
  105. static void PrintTables ()
  106. {
  107. RTFColor    *cp;
  108. RTFFont        *fp;
  109. RTFStyle    *sp;
  110. RTFStyleElt    *sep;
  111. int    count;
  112.  
  113.     printf ("Font table:\n");
  114.     count = 0;
  115.     for (fp = RTFGetFont (-1); fp != NULL; fp = fp->rtfNextFont)
  116.     {
  117.         ++count;
  118.         printf ("%2d:\t%s\t%d\n", fp->rtfFNum, fp->rtfFName,
  119.             fp->rtfFFamily);
  120.     }
  121.     printf ("Font table entries:\t%d\n\n", count);
  122.  
  123.     printf ("Color table:\n\tred\tgreen\tblue\n");
  124.     count = 0;
  125.     for (cp = RTFGetColor (-1); cp != NULL; cp = cp->rtfNextColor)
  126.     {
  127.         ++count;
  128.         printf ("%2d:\t%d\t%d\t%d\n", cp->rtfCNum, cp->rtfCRed,
  129.             cp->rtfCGreen, cp->rtfCBlue);
  130.     }
  131.     printf ("Color table entries:\t%d\n\n", count);
  132.  
  133.     printf ("Stylesheet:\n");
  134.     count = 0;
  135.     for (sp = RTFGetStyle (-1); sp != NULL; sp = sp->rtfNextStyle)
  136.     {
  137.         ++count;
  138.         printf ("%2d:\t%s\t%d\t%d\n", sp->rtfSNum, sp->rtfSName,
  139.                 sp->rtfSBasedOn, sp->rtfSNextPar);
  140.         for (sep = sp->rtfSSEList; sep != NULL; sep = sep->rtfNextSE)
  141.             printf ("\t%s\n", sep->rtfSEText);
  142.     }
  143.     printf ("Style table entries:\t%d\n\n", count);
  144. }
  145.