Wine-20041201 vendor drop
Added: vendor/wine/dlls/richedit/
Added: vendor/wine/dlls/richedit/current/
Added: vendor/wine/dlls/richedit/current/Makefile.in
Added: vendor/wine/dlls/richedit/current/ansi_gen.h
Added: vendor/wine/dlls/richedit/current/ansi_sym.h
Added: vendor/wine/dlls/richedit/current/reader.c
Added: vendor/wine/dlls/richedit/current/riched32.h
Added: vendor/wine/dlls/richedit/current/riched32.spec
Added: vendor/wine/dlls/richedit/current/richedit.c
Added: vendor/wine/dlls/richedit/current/rtf.h
Added: vendor/wine/dlls/richedit/current/rtf2text.h
Added: vendor/wine/dlls/richedit/current/stdcharnames.h
Added: vendor/wine/dlls/richedit/current/text-writer.c
Added: vendor/wine/dlls/richedit/current/text_map.h
  _____
Added: vendor/wine/dlls/richedit/current/Makefile.in
--- vendor/wine/dlls/richedit/current/Makefile.in       2004-12-31
15:41:00 UTC (rev 12587)
+++ vendor/wine/dlls/richedit/current/Makefile.in       2004-12-31
15:42:33 UTC (rev 12588)
@@ -0,0 +1,15 @@
+TOPSRCDIR = @top_srcdir@
+TOPOBJDIR = ../..
+SRCDIR    = @srcdir@
+VPATH     = @srcdir@
+MODULE    = riched32.dll
+IMPORTS   = user32 kernel32
+
+C_SRCS = \
+       reader.c \
+       text-writer.c \
+       richedit.c
+
+@MAKE_DLL_RULES@
+
+### Dependencies:
  _____
Added: vendor/wine/dlls/richedit/current/ansi_gen.h
--- vendor/wine/dlls/richedit/current/ansi_gen.h        2004-12-31
15:41:00 UTC (rev 12587)
+++ vendor/wine/dlls/richedit/current/ansi_gen.h        2004-12-31
15:42:33 UTC (rev 12588)
@@ -0,0 +1,211 @@
+/*
+ RTF ANSI character set (\ansi) general map
+ These are taken from the ISO-Latin-1 (ISO-8859-1) encodings, with
+ a few additions
+
+ Field 1 is the standard character name which the character value in
+ field 2 maps onto.  (It doesn't mean "to produce the character in
field 1,
+ use the value in field 2.)
+
+ The character value may be given either as a single character (which
will be
+ converted to the ASCII value of the character), or in numeric format,
either
+ in decimal or 0xyy as hex yy.  Single or double quotes may be used to
quote
+ characters.*/
+
+int ansi_gen[] =
+{
+  rtfSC_formula         ,0x06,
+  rtfSC_nobrkhyphen     ,0x1e,
+  rtfSC_opthyphen       ,0x1f,
+  rtfSC_space           ,' ',
+  rtfSC_exclam          ,'!',
+  rtfSC_quotedbl        ,'"',
+  rtfSC_numbersign      ,'#',
+  rtfSC_dollar          ,'$',
+  rtfSC_percent         ,'%',
+  rtfSC_ampersand       ,'&',
+  rtfSC_quoteright      ,'\\',
+  rtfSC_parenleft       ,'(',
+  rtfSC_parenright      ,')',
+  rtfSC_asterisk        ,'*',
+  rtfSC_plus            ,'+',
+  rtfSC_comma           ,',',
+  rtfSC_hyphen          ,'-',
+  rtfSC_period          ,'.',
+  rtfSC_slash           ,'/',
+  rtfSC_zero            ,'0',
+  rtfSC_one             ,'1',
+  rtfSC_two             ,'2',
+  rtfSC_three           ,'3',
+  rtfSC_four            ,'4',
+  rtfSC_five            ,'5',
+  rtfSC_six             ,'6',
+  rtfSC_seven           ,'7',
+  rtfSC_eight           ,'8',
+  rtfSC_nine            ,'9',
+  rtfSC_colon           ,':',
+  rtfSC_semicolon       ,';',
+  rtfSC_less            ,'<',
+  rtfSC_equal           ,'=',
+  rtfSC_greater         ,'>',
+  rtfSC_question        ,'?',
+  rtfSC_at              ,'@',
+  rtfSC_A               ,'A',
+  rtfSC_B               ,'B',
+  rtfSC_C               ,'C',
+  rtfSC_D               ,'D',
+  rtfSC_E               ,'E',
+  rtfSC_F               ,'F',
+  rtfSC_G               ,'G',
+  rtfSC_H               ,'H',
+  rtfSC_I               ,'I',
+  rtfSC_J               ,'J',
+  rtfSC_K               ,'K',
+  rtfSC_L               ,'L',
+  rtfSC_M               ,'M',
+  rtfSC_N               ,'N',
+  rtfSC_O               ,'O',
+  rtfSC_P               ,'P',
+  rtfSC_Q               ,'Q',
+  rtfSC_R               ,'R',
+  rtfSC_S               ,'S',
+  rtfSC_T               ,'T',
+  rtfSC_U               ,'U',
+  rtfSC_V               ,'V',
+  rtfSC_W               ,'W',
+  rtfSC_X               ,'X',
+  rtfSC_Y               ,'Y',
+  rtfSC_Z               ,'Z',
+  rtfSC_bracketleft     ,'[',
+  rtfSC_backslash       ,'\\',
+  rtfSC_bracketright    ,']',
+  rtfSC_asciicircum     ,'^',
+  rtfSC_underscore      ,'_',
+  rtfSC_quoteleft       ,'`',
+  rtfSC_a               ,'a',
+  rtfSC_b               ,'b',
+  rtfSC_c               ,'c',
+  rtfSC_d               ,'d',
+  rtfSC_e               ,'e',
+  rtfSC_f               ,'f',
+  rtfSC_g               ,'g',
+  rtfSC_h               ,'h',
+  rtfSC_i               ,'i',
+  rtfSC_j               ,'j',
+  rtfSC_k               ,'k',
+  rtfSC_l               ,'l',
+  rtfSC_m               ,'m',
+  rtfSC_n               ,'n',
+  rtfSC_o               ,'o',
+  rtfSC_p               ,'p',
+  rtfSC_q               ,'q',
+  rtfSC_r               ,'r',
+  rtfSC_s               ,'s',
+  rtfSC_t               ,'t',
+  rtfSC_u               ,'u',
+  rtfSC_v               ,'v',
+  rtfSC_w               ,'w',
+  rtfSC_x               ,'x',
+  rtfSC_y               ,'y',
+  rtfSC_z               ,'z',
+  rtfSC_braceleft       ,'{',
+  rtfSC_bar             ,'|',
+  rtfSC_braceright      ,'}',
+  rtfSC_asciitilde      ,'~',
+  rtfSC_nobrkspace      ,0xa0,
+  rtfSC_exclamdown      ,0xa1,
+  rtfSC_cent            ,0xa2,
+  rtfSC_sterling        ,0xa3,
+  rtfSC_currency        ,0xa4,
+  rtfSC_yen             ,0xa5,
+  rtfSC_brokenbar       ,0xa6,
+  rtfSC_section         ,0xa7,
+  rtfSC_dieresis        ,0xa8,
+  rtfSC_copyright       ,0xa9,
+  rtfSC_ordfeminine     ,0xaa,
+  rtfSC_guillemotleft   ,0xab,
+  rtfSC_logicalnot      ,0xac,
+  rtfSC_opthyphen       ,0xad,
+  rtfSC_registered      ,0xae,
+  rtfSC_macron          ,0xaf,
+  rtfSC_degree          ,0xb0,
+  rtfSC_plusminus       ,0xb1,
+  rtfSC_twosuperior     ,0xb2,
+  rtfSC_threesuperior   ,0xb3,
+  rtfSC_acute           ,0xb4,
+  rtfSC_mu              ,0xb5,
+  rtfSC_paragraph       ,0xb6,
+  rtfSC_periodcentered   ,0xb7,
+  rtfSC_cedilla         ,0xb8,
+  rtfSC_onesuperior     ,0xb9,
+  rtfSC_ordmasculine    ,0xba,
+  rtfSC_guillemotright   ,0xbb,
+  rtfSC_onequarter      ,0xbc,
+  rtfSC_onehalf         ,0xbd,
+  rtfSC_threequarters   ,0xbe,
+  rtfSC_questiondown    ,0xbf,
+  rtfSC_Agrave          ,0xc0,
+  rtfSC_Aacute          ,0xc1,
+  rtfSC_Acircumflex     ,0xc2,
+  rtfSC_Atilde          ,0xc3,
+  rtfSC_Adieresis       ,0xc4,
+  rtfSC_Aring           ,0xc5,
+  rtfSC_AE              ,0xc6,
+  rtfSC_Ccedilla        ,0xc7,
+  rtfSC_Egrave          ,0xc8,
+  rtfSC_Eacute          ,0xc9,
+  rtfSC_Ecircumflex     ,0xca,
+  rtfSC_Edieresis       ,0xcb,
+  rtfSC_Igrave          ,0xcc,
+  rtfSC_Iacute          ,0xcd,
+  rtfSC_Icircumflex     ,0xce,
+  rtfSC_Idieresis       ,0xcf,
+  rtfSC_Eth             ,0xd0,
+  rtfSC_Ntilde          ,0xd1,
+  rtfSC_Ograve          ,0xd2,
+  rtfSC_Oacute          ,0xd3,
+  rtfSC_Ocircumflex     ,0xd4,
+  rtfSC_Otilde          ,0xd5,
+  rtfSC_Odieresis       ,0xd6,
+  rtfSC_multiply        ,0xd7,
+  rtfSC_Oslash          ,0xd8,
+  rtfSC_Ugrave          ,0xd9,
+  rtfSC_Uacute          ,0xda,
+  rtfSC_Ucircumflex     ,0xdb,
+  rtfSC_Udieresis       ,0xdc,
+  rtfSC_Yacute          ,0xdd,
+  rtfSC_Thorn           ,0xde,
+  rtfSC_germandbls      ,0xdf,
+  rtfSC_agrave          ,0xe0,
+  rtfSC_aacute          ,0xe1,
+  rtfSC_acircumflex     ,0xe2,
+  rtfSC_atilde          ,0xe3,
+  rtfSC_adieresis       ,0xe4,
+  rtfSC_aring           ,0xe5,
+  rtfSC_ae              ,0xe6,
+  rtfSC_ccedilla        ,0xe7,
+  rtfSC_egrave          ,0xe8,
+  rtfSC_eacute          ,0xe9,
+  rtfSC_ecircumflex     ,0xea,
+  rtfSC_edieresis       ,0xeb,
+  rtfSC_igrave          ,0xec,
+  rtfSC_iacute          ,0xed,
+  rtfSC_icircumflex     ,0xee,
+  rtfSC_idieresis       ,0xef,
+  rtfSC_eth             ,0xf0,
+  rtfSC_ntilde          ,0xf1,
+  rtfSC_ograve          ,0xf2,
+  rtfSC_oacute          ,0xf3,
+  rtfSC_ocircumflex     ,0xf4,
+  rtfSC_otilde          ,0xf5,
+  rtfSC_odieresis       ,0xf6,
+  rtfSC_divide          ,0xf7,
+  rtfSC_oslash          ,0xf8,
+  rtfSC_ugrave          ,0xf9,
+  rtfSC_uacute          ,0xfa,
+  rtfSC_ucircumflex     ,0xfb,
+  rtfSC_udieresis       ,0xfc,
+  rtfSC_yacute          ,0xfd,
+  rtfSC_thorn           ,0xfe,
+  rtfSC_ydieresis       ,0xff
+};
  _____
Added: vendor/wine/dlls/richedit/current/ansi_sym.h
--- vendor/wine/dlls/richedit/current/ansi_sym.h        2004-12-31
15:41:00 UTC (rev 12587)
+++ vendor/wine/dlls/richedit/current/ansi_sym.h        2004-12-31
15:42:33 UTC (rev 12588)
@@ -0,0 +1,112 @@
+/*
+ * RTF ANSI character set (\ansi) Symbol font map
+ *
+ * Field 1 is the standard character name which the character value in
+ * field 2 maps onto.  (It doesn't mean "to produce the character in
field 1,
+ * use the value in field 2.)
+ *
+ * The character value may be given either as a single character (which
will be
+ * converted to the ASCII value of the character), or in numeric
format, either
+ * in decimal or 0xyy as hex yy.  Single or double quotes may be used
to quote
+ * characters.
+ *
+ */
+
+int ansi_sym[] =
+{
+  rtfSC_formula        ,0x06,
+  rtfSC_nobrkhyphen    ,0x1e,
+  rtfSC_opthyphen      ,0x1f,
+  rtfSC_space         ,' ',
+  rtfSC_exclam         ,'!',
+  rtfSC_universal      ,'"',
+  rtfSC_mathnumbersign ,'#',
+  rtfSC_existential    ,'$',
+  rtfSC_percent        ,'%',
+  rtfSC_ampersand      ,'&',
+  rtfSC_suchthat       ,'\\',
+  rtfSC_parenleft      ,'(',
+  rtfSC_parenright     ,')',
+  rtfSC_mathasterisk   ,'*',
+  rtfSC_mathplus       ,'+',
+  rtfSC_comma         ,',',
+  rtfSC_mathminus      ,'-',
+  rtfSC_period         ,'.',
+  rtfSC_slash         ,'/',
+  rtfSC_zero          ,'0',
+  rtfSC_one           ,'1',
+  rtfSC_two           ,'2',
+  rtfSC_three         ,'3',
+  rtfSC_four          ,'4',
+  rtfSC_five          ,'5',
+  rtfSC_six           ,'6',
+  rtfSC_seven         ,'7',
+  rtfSC_eight         ,'8',
+  rtfSC_nine          ,'9',
+  rtfSC_colon         ,':',
+  rtfSC_semicolon      ,';',
+  rtfSC_less          ,'<',
+  rtfSC_mathequal      ,'=',
+  rtfSC_greater        ,'>',
+  rtfSC_question       ,'?',
+  rtfSC_congruent      ,'@',
+  rtfSC_Alpha         ,'A',
+  rtfSC_Beta          ,'B',
+  rtfSC_Chi           ,'C',
+  rtfSC_Delta         ,'D',
+  rtfSC_Epsilon        ,'E',
+  rtfSC_Phi           ,'F',
+  rtfSC_Gamma         ,'G',
+  rtfSC_Eta           ,'H',
+  rtfSC_Iota          ,'I',
+  rtfSC_Kappa         ,'K',
+  rtfSC_Lambda         ,'L',
+  rtfSC_Mu            ,'M',
+  rtfSC_Nu            ,'N',
+  rtfSC_Omicron        ,'O',
+  rtfSC_Pi            ,'P',
+  rtfSC_Theta         ,'Q',
+  rtfSC_Rho           ,'R',
+  rtfSC_Sigma         ,'S',
+  rtfSC_Tau           ,'T',
+  rtfSC_Upsilon        ,'U',
+  rtfSC_varsigma       ,'V',
+  rtfSC_Omega         ,'W',
+  rtfSC_Xi            ,'X',
+  rtfSC_Psi           ,'Y',
+  rtfSC_Zeta          ,'Z',
+  rtfSC_bracketleft    ,'[',
+  rtfSC_backslash      ,'\\',
+  rtfSC_bracketright   ,']',
+  rtfSC_asciicircum    ,'^',
+  rtfSC_underscore     ,'_',
+  rtfSC_quoteleft      ,'`',
+  rtfSC_alpha         ,'a',
+  rtfSC_beta          ,'b',
+  rtfSC_chi           ,'c',
+  rtfSC_delta         ,'d',
+  rtfSC_epsilon        ,'e',
+  rtfSC_phi           ,'f',
+  rtfSC_gamma         ,'g',
+  rtfSC_eta           ,'h',
+  rtfSC_iota          ,'i',
+  rtfSC_kappa         ,'k',
+  rtfSC_lambda         ,'l',
+  rtfSC_mu            ,'m',
+  rtfSC_nu            ,'n',
+  rtfSC_omicron        ,'o',
+  rtfSC_pi            ,'p',
+  rtfSC_theta         ,'q',
+  rtfSC_rho           ,'r',
+  rtfSC_sigma         ,'s',
+  rtfSC_tau           ,'t',
+  rtfSC_upsilon        ,'u',
+  rtfSC_omega         ,'w',
+  rtfSC_xi            ,'x',
+  rtfSC_psi           ,'y',
+  rtfSC_zeta          ,'z',
+  rtfSC_braceleft      ,'{',
+  rtfSC_bar           ,'|',
+  rtfSC_braceright     ,'}',
+  rtfSC_mathtilde      ,'~'
+};
  _____
Added: vendor/wine/dlls/richedit/current/reader.c
--- vendor/wine/dlls/richedit/current/reader.c  2004-12-31 15:41:00 UTC
(rev 12587)
+++ vendor/wine/dlls/richedit/current/reader.c  2004-12-31 15:42:33 UTC
(rev 12588)
@@ -0,0 +1,2726 @@
+/*
+ * WINE RTF file reader
+ *
+ * Portions Copyright 2004 Mike McCormack for CodeWeavers
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307
USA
+ */
+
+/*
+ * - Need to document error code meanings.
+ * - Need to do something with \* on destinations.
+ * - Make the parameter a long?
+ *
+ * reader.c - RTF file reader.  Release 1.10.
+ *
+ * ASCII 10 (\n) and 13 (\r) are ignored and silently discarded.
+ * Nulls are also discarded.
+ * (although the read hook will still get a look at them.)
+ *
+ * "\:" is not a ":", it's a control symbol.  But some versions
of
+ * Word seem to write "\:" for ":".  This reader treats
"\:" as a
+ * plain text ":"
+ *
+ * 19 Mar 93
+ * - Add hack to skip "{\*\keycode ... }" group in stylesheet.
+ * This is probably the wrong thing to do, but it's simple.
+ * 13 Jul 93
+ * - Add THINK C awareness to malloc() declaration.  Necessary so
+ * compiler knows the malloc argument is 4 bytes.  Ugh.
+ * 07 Sep 93
+ * - Text characters are mapped onto standard codes, which are placed
+ * in rtfMinor.
+ * - Eliminated use of index() function.
+ * 05 Mar 94
+ * - Added zillions of new symbols (those defined in RTF spec 1.2).
+ * 14 Mar 94
+ * - Public functions RTFMsg() and RTFPanic() now take variable
arguments.
+ * This means RTFPanic() now is used in place of what was formerly the
+ * internal function Error().
+ * - 8-bit characters are now legal, so they're not converted to \'xx
+ * hex char representation now.
+ * 01 Apr 94
+ * - Added public variables rtfLineNum and rtfLinePos.
+ * - #include string.h or strings.h, avoiding strncmp() problem where
+ * last argument is treated as zero when prototype isn't available.
+ * 04 Apr 94
+ * - Treat style numbers 222 and 0 properly as "no style" and
"normal".
+ *
+ * Author: Paul DuBois dubois(a)primate.wisc.edu
+ *
+ * This software may be redistributed without restriction and used for
+ * any purpose whatsoever.
+ */
+
+# include      <stdio.h>
+# include      <ctype.h>
+# include      <string.h>
+# include      <stdarg.h>
+
+#include "rtf.h"
+/*
+ *  include hard coded charsets
+ */
+
+#include "ansi_gen.h"
+#include "ansi_sym.h"
+#include "text_map.h"
+
+#include <stdlib.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(richedit);
+
+extern HANDLE RICHED32_hHeap;
+
+static int      _RTFGetChar(RTF_Info *);
+static void    _RTFGetToken (RTF_Info *);
+static void    _RTFGetToken2 (RTF_Info *);
+static int     GetChar (RTF_Info *);
+static void    ReadFontTbl (RTF_Info *);
+static void    ReadColorTbl (RTF_Info *);
+static void    ReadStyleSheet (RTF_Info *);
+static void    ReadInfoGroup (RTF_Info *);
+static void    ReadPictGroup (RTF_Info *);
+static void    ReadObjGroup (RTF_Info *);
+static void    LookupInit ();
+static void    Lookup (RTF_Info *, char *);
+static int     Hash ();
+
+static void    CharSetInit (RTF_Info *);
+static void    ReadCharSetMaps (RTF_Info *);
+
+
+/*
+ * This array is used to map standard character names onto their
numeric codes.
+ * The position of the name within the array is the code.
+ * stdcharnames.h is generated in the ../h directory.
+ */
+
+#include "stdcharnames.h"
+
+int _RTFGetChar(RTF_Info *info)
+{
+    int ch;
+
+    TRACE("\n");
+
+    if( info->dwInputSize <= info->dwInputUsed )
+    {
+        long count = 0;
+        info->editstream.pfnCallback(info->editstream.dwCookie,
+                   info->InputBuffer, sizeof(info->InputBuffer),
&count);
+        if(count == 0)
+            return EOF;
+        info->dwInputSize = count;
+        info->dwInputUsed = 0;
+    }
+    ch = info->InputBuffer[info->dwInputUsed++];
+    if( !ch ) return EOF;
+    return ch;
+}
+
+void RTFSetEditStream(RTF_Info *info, EDITSTREAM *es)
+{
+    TRACE("\n");
+
+    info->editstream.dwCookie = es->dwCookie;
+    info->editstream.dwError  = es->dwError;
+    info->editstream.pfnCallback = es->pfnCallback;
+}
+
+/*
+ * Initialize the reader.  This may be called multiple times,
+ * to read multiple files.  The only thing not reset is the input
+ * stream; that must be done with RTFSetStream().
+ */
+
+void RTFInit(RTF_Info *info)
+{
+int    i;
+RTFColor       *cp;
+RTFFont                *fp;
+RTFStyle       *sp;
+RTFStyleElt    *eltList, *ep;
+
+    TRACE("\n");
+
+       if (info->rtfTextBuf == (char *) NULL)       /* initialize the text
buffers */
+       {
+               info->rtfTextBuf = RTFAlloc (rtfBufSiz);
+               info->pushedTextBuf = RTFAlloc (rtfBufSiz);
+               if (info->rtfTextBuf == (char *) NULL
+                       || info->pushedTextBuf == (char *) NULL)
+                       RTFPanic (info,"Cannot allocate text buffers.");
+               info->rtfTextBuf[0] = info->pushedTextBuf[0] = '\0';
+       }
+
+       RTFFree (info->inputName);
+       RTFFree (info->outputName);
+       info->inputName = info->outputName = (char *) NULL;
+
+       /* initialize lookup table */
+       LookupInit ();
+
+       for (i = 0; i < rtfMaxClass; i++)
+               RTFSetClassCallback (info, i, (RTFFuncPtr) NULL);
+       for (i = 0; i < rtfMaxDestination; i++)
+               RTFSetDestinationCallback (info, i, (RTFFuncPtr) NULL);
+
+       /* install built-in destination readers */
+       RTFSetDestinationCallback (info, rtfFontTbl, ReadFontTbl);
+       RTFSetDestinationCallback (info, rtfColorTbl, ReadColorTbl);
+       RTFSetDestinationCallback (info, rtfStyleSheet, ReadStyleSheet);
+       RTFSetDestinationCallback (info, rtfInfo, ReadInfoGroup);
+       RTFSetDestinationCallback (info, rtfPict, ReadPictGroup);
+       RTFSetDestinationCallback (info, rtfObject, ReadObjGroup);
+
+
+       RTFSetReadHook (info, (RTFFuncPtr) NULL);
+
+       /* dump old lists if necessary */
+
+       while (info->fontList != (RTFFont *) NULL)
+       {
+               fp = info->fontList->rtfNextFont;
+               RTFFree (info->fontList->rtfFName);
+               RTFFree ((char *) info->fontList);
+               info->fontList = fp;
+       }
+       while (info->colorList != (RTFColor *) NULL)
+       {
+               cp = info->colorList->rtfNextColor;
+               RTFFree ((char *) info->colorList);
+               info->colorList = cp;
+       }
+       while (info->styleList != (RTFStyle *) NULL)
+       {
+               sp = info->styleList->rtfNextStyle;
+               eltList = info->styleList->rtfSSEList;
+               while (eltList != (RTFStyleElt *) NULL)
+               {
+                       ep = eltList->rtfNextSE;
+                       RTFFree (eltList->rtfSEText);
+                       RTFFree ((char *) eltList);
+                       eltList = ep;
+               }
+               RTFFree (info->styleList->rtfSName);
+               RTFFree ((char *) info->styleList);
+               info->styleList = sp;
+       }
+
+       info->rtfClass = -1;
+       info->pushedClass = -1;
+       info->pushedChar = EOF;
+
+       info->rtfLineNum = 0;
+       info->rtfLinePos = 0;
+       info->prevChar = EOF;
+       info->bumpLine = 0;
+
+       CharSetInit (info);
+       info->csTop = 0;
+}
+
+/*
+ * Set or get the input or output file name.  These are never
guaranteed
+ * to be accurate, only insofar as the calling program makes them so.
+ */
+
+void RTFSetInputName(RTF_Info *info, char *name)
+{
+    TRACE("\n");
+
+       if ((info->inputName = RTFStrSave (name)) == (char *) NULL)
+               RTFPanic (info,"RTFSetInputName: out of memory");
+}
+
+
+char *RTFGetInputName(RTF_Info *info)
+{
+       return (info->inputName);
+}
+
+
+void RTFSetOutputName(RTF_Info *info, char *name)
+{
+    TRACE("\n");
+
+       if ((info->outputName = RTFStrSave (name)) == (char *) NULL)
+               RTFPanic (info, "RTFSetOutputName: out of memory");
+}
+
+
+char *RTFGetOutputName(RTF_Info *info)
+{
+       return (info->outputName);
+}
+
+
+
+/*
----------------------------------------------------------------------
*/
+
+/*
+ * Callback table manipulation routines
+ */
+
+
+/*
+ * Install or return a writer callback for a token class
+ */
+
+void RTFSetClassCallback(RTF_Info *info, int class, RTFFuncPtr
callback)
+{
+       if (class >= 0 && class < rtfMaxClass)
+               info->ccb[class] = callback;
+}
+
+
+RTFFuncPtr RTFGetClassCallback(RTF_Info *info, int class)
+{
+       if (class >= 0 && class < rtfMaxClass)
+               return (info->ccb[class]);
+       return ((RTFFuncPtr) NULL);
+}
+
+
+/*
+ * Install or return a writer callback for a destination type
+ */
+
+void RTFSetDestinationCallback(RTF_Info *info, int dest, RTFFuncPtr
callback)
+{
+       if (dest >= 0 && dest < rtfMaxDestination)
+               info->dcb[dest] = callback;
+}
+
+
+RTFFuncPtr RTFGetDestinationCallback(RTF_Info *info, int dest)
+{
+       if (dest >= 0 && dest < rtfMaxDestination)
+               return (info->dcb[dest]);
+       return ((RTFFuncPtr) NULL);
+}
+
+
+/*
----------------------------------------------------------------------
*/
+
+/*
+ * Token reading routines
+ */
+
+
+/*
+ * Read the input stream, invoking the writer's callbacks
+ * where appropriate.
+ */
+
+void RTFRead(RTF_Info *info)
+{
+       while (RTFGetToken (info) != rtfEOF)
+               RTFRouteToken (info);
+}
+
+
+/*
+ * Route a token.  If it's a destination for which a reader is
+ * installed, process the destination internally, otherwise
+ * pass the token to the writer's class callback.
+ */
+
+void RTFRouteToken(RTF_Info *info)
+{
+RTFFuncPtr     p;
+
+    TRACE("\n");
+
+       if (info->rtfClass < 0 || info->rtfClass >= rtfMaxClass)
/* watchdog */
+       {
+               RTFPanic (info,"Unknown class %d: %s (reader
malfunction)",
+                                                       info->rtfClass,
info->rtfTextBuf);
+       }
+       if (RTFCheckCM (info, rtfControl, rtfDestination))
+       {
+               /* invoke destination-specific callback if there is one
*/
+               if ((p = RTFGetDestinationCallback (info,
info->rtfMinor))
+                                                       != (RTFFuncPtr)
NULL)
+               {
+                       (*p) (info);
+                       return;
+               }
+       }
+       /* invoke class callback if there is one */
+       if ((p = RTFGetClassCallback (info, info->rtfClass)) !=
(RTFFuncPtr) NULL)
+               (*p) (info);
+}
+
+
+/*
+ * Skip to the end of the current group.  When this returns,
+ * writers that maintain a state stack may want to call their
+ * state unstacker; global vars will still be set to the group's
+ * closing brace.
+ */
+
+void RTFSkipGroup(RTF_Info *info)
+{
+int    level = 1;
+    TRACE("\n");
+
+       while (RTFGetToken (info) != rtfEOF)
+       {
+               if (info->rtfClass == rtfGroup)
+               {
+                       if (info->rtfMajor == rtfBeginGroup)
+                               ++level;
+                       else if (info->rtfMajor == rtfEndGroup)
+                       {
+                               if (--level < 1)
+                                       break;  /* end of initial group
*/
+                       }
+               }
+       }
+}
+
+
+/*
+ * Read one token.  Call the read hook if there is one.  The
+ * token class is the return value.  Returns rtfEOF when there
+ * are no more tokens.
+ */
+
+int RTFGetToken(RTF_Info *info)
+{
+RTFFuncPtr     p;
+    TRACE("\n");
+
+       for (;;)
+       {
+               _RTFGetToken (info);
+               if ((p = RTFGetReadHook (info)) != (RTFFuncPtr) NULL)
+                       (*p) (info);    /* give read hook a look at
token */
+
+               /* Silently discard newlines, carriage returns, nulls.
*/
+               if (!(info->rtfClass == rtfText && info->rtfFormat !=
SF_TEXT
+                       && (info->rtfMajor == '\r' || info->rtfMajor
==
'\n' || info->rtfMajor == '\0')))
+                       break;
+       }
+       return (info->rtfClass);
+}
+
+
+/*
+ * Install or return a token reader hook.
+ */
+
+void RTFSetReadHook(RTF_Info *info, RTFFuncPtr f)
+{
+       info->readHook = f;
+}
+
+
+RTFFuncPtr RTFGetReadHook(RTF_Info *info)
+{
+       return (info->readHook);
+}
+
+
+void RTFUngetToken(RTF_Info *info)
+{
+    TRACE("\n");
+
+       if (info->pushedClass >= 0)       /* there's already an ungotten
token */
+               RTFPanic (info,"cannot unget two tokens");
+       if (info->rtfClass < 0)
+               RTFPanic (info,"no token to unget");
+       info->pushedClass = info->rtfClass;
+       info->pushedMajor = info->rtfMajor;
+       info->pushedMinor = info->rtfMinor;
+       info->pushedParam = info->rtfParam;
+       (void) strcpy (info->pushedTextBuf, info->rtfTextBuf);
+}
+
+
+int RTFPeekToken(RTF_Info *info)
+{
+       _RTFGetToken (info);
+       RTFUngetToken (info);
+       return (info->rtfClass);
+}
+
+
+static void _RTFGetToken(RTF_Info *info)
+{
+RTFFont        *fp;
+
+    TRACE("\n");
+
+        if (info->rtfFormat == SF_TEXT) {
+            info->rtfMajor = GetChar (info);
+            info->rtfMinor = rtfSC_nothing;
+            info->rtfParam = rtfNoParam;
+            info->rtfTextBuf[info->rtfTextLen = 0] = '\0';
+            if (info->rtfMajor == EOF)
+                info->rtfClass = rtfEOF;
+            else
+               info->rtfClass = rtfText;
+           return;
+       }
+
+       /* first check for pushed token from RTFUngetToken() */
+
+       if (info->pushedClass >= 0)
+       {
+               info->rtfClass = info->pushedClass;
+               info->rtfMajor = info->pushedMajor;
+               info->rtfMinor = info->pushedMinor;
+               info->rtfParam = info->pushedParam;
+               (void) strcpy (info->rtfTextBuf, info->pushedTextBuf);
+               info->rtfTextLen = strlen (info->rtfTextBuf);
+               info->pushedClass = -1;
+               return;
+       }
+
+       /*
+        * Beyond this point, no token is ever seen twice, which is
+        * important, e.g., for making sure no "}" pops the font stack
twice.
+        */
+
+       _RTFGetToken2 (info);
+       if (info->rtfClass == rtfText)       /* map RTF char to standard code
*/
+               info->rtfMinor = RTFMapChar (info, info->rtfMajor);
+
+       /*
+        * If auto-charset stuff is activated, see if anything needs
doing,
+        * like reading the charset maps or switching between them.
+        */
+
+       if (info->autoCharSetFlags == 0)
+               return;
+
+       if ((info->autoCharSetFlags & rtfReadCharSet)
+               && RTFCheckCM (info, rtfControl, rtfCharSet))
+       {
+               ReadCharSetMaps (info);
+       }
+       else if ((info->autoCharSetFlags & rtfSwitchCharSet)
+               && RTFCheckCMM (info, rtfControl, rtfCharAttr,
rtfFontNum))
+       {
+               if ((fp = RTFGetFont (info, info->rtfParam)) != (RTFFont
*) NULL)
+               {
+                       if (strncmp (fp->rtfFName, "Symbol", 6) == 0)
+                               info->curCharSet = rtfCSSymbol;
+                       else
+                               info->curCharSet = rtfCSGeneral;
+                       RTFSetCharSet (info, info->curCharSet);
+               }
+       }
+       else if ((info->autoCharSetFlags & rtfSwitchCharSet) &&
info->rtfClass == rtfGroup)
+       {
+               switch (info->rtfMajor)
+               {
+               case rtfBeginGroup:
+                       if (info->csTop >= maxCSStack)
+                               RTFPanic (info, "_RTFGetToken: stack
overflow");
+                       info->csStack[info->csTop++] = info->curCharSet;
+                       break;
+               case rtfEndGroup:
+                       /*
+                        * If stack top is 1 at this point, we are
ending the
+                        * group started by the initial {, which ends
the
+                        * RTF stream
+                        */
+                       if (info->csTop <= 0)
+                               RTFPanic (info,"_RTFGetToken: stack
underflow");
+                       else if (info->csTop == 1)
+                               info->rtfClass = rtfEOF;
+                       else
+                       {
+                               info->curCharSet =
info->csStack[--info->csTop];
+                               RTFSetCharSet (info, info->curCharSet);
+                       }
+                       break;
+               }
+       }
+}
+
+
+/* this shouldn't be called anywhere but from _RTFGetToken() */
+
+static void _RTFGetToken2(RTF_Info *info)
+{
+int    sign;
+int    c;
+
+    TRACE("\n");
+
+       /* initialize token vars */
+
+       info->rtfClass = rtfUnknown;
+       info->rtfParam = rtfNoParam;
+       info->rtfTextBuf[info->rtfTextLen = 0] = '\0';
+
+       /* get first character, which may be a pushback from previous
token */
+
+       if (info->pushedChar != EOF)
+       {
+               c = info->pushedChar;
+               info->rtfTextBuf[info->rtfTextLen++] = c;
+               info->rtfTextBuf[info->rtfTextLen] = '\0';
+               info->pushedChar = EOF;
+       }
+       else if ((c = GetChar (info)) == EOF)
+       {
+               info->rtfClass = rtfEOF;
+               return;
+       }
+
+       if (c == '{')
+       {
+               info->rtfClass = rtfGroup;
+               info->rtfMajor = rtfBeginGroup;
+               return;
+       }
+       if (c == '}')
+       {
+               info->rtfClass = rtfGroup;
+               info->rtfMajor = rtfEndGroup;
+               return;
+       }
+       if (c != '\\')
+       {
+               /*
+                * Two possibilities here:
+                * 1) ASCII 9, effectively like \tab control symbol
+                * 2) literal text char
+                */
+               if (c == '\t')                  /* ASCII 9 */
+               {
+                       info->rtfClass = rtfControl;
+                       info->rtfMajor = rtfSpecialChar;
+                       info->rtfMinor = rtfTab;
+               }
+               else
+               {
+                       info->rtfClass = rtfText;
+                       info->rtfMajor = c;
+               }
+               return;
+       }
+       if ((c = GetChar (info)) == EOF)
+       {
+               /* early eof, whoops (class is rtfUnknown) */
+               return;
+       }
+       if (!isalpha (c))
+       {
+               /*
+                * Three possibilities here:
+                * 1) hex encoded text char, e.g., \'d5, \'d3
+                * 2) special escaped text char, e.g., \{, \}
+                * 3) control symbol, e.g., \_, \-, \|, \<10>
+                */
+               if (c == '\'')                              /* hex char */
+               {
+               int     c2;
+
+                       if ((c = GetChar (info)) != EOF && (c2 = GetChar
(info)) != EOF)
[truncated at 1000 lines; 5385 more skipped]