/*
 * $Id$
 */

/*------------------------------------------------------------------------

    Datei RTF2TEX.H zum Projekt RTF2TEX.C

    letzte "Anderung: am 4.9.1991 um 17:23

------------------------------------------------------------------------*/

/*------------------------------------------------------------------------
    Defines ....
------------------------------------------------------------------------*/

#define VERSION         "1.00"          /* Versionsnummer von RTF2TEX   */

#define STDC_HEADERS                    /* f"ur `getopt.c' includes      */

#define OKEXIT          (0)             /* Fehlerfreies Ende            */ 
#define ERROREXIT       (1)             /* Abbruch wg. Fehler           */
#define USAGEEXIT       (2)             /* Abbruch nach Hilfestellung   */

#define CMDLENGTH       (20)            /* max. L"ange RTF-Kommando      */
#define PARMLENGTH      (20)            /* max. L"ange RTF-Parameter     */

#define LINELENGTH      (60)            /* Umbruch nach .. Zeichen      */

#define LINEBREAK       (0)             /* direkter Umbruch             */
#define BREAKALLOWED    ' '             /* Umbruch, wenn lastchar==' '  */

/*----------------------------------------------------------------------*/

#ifndef FALSE                           /* Wahrheitsflags               */
#define     FALSE   (0)
#endif
#ifndef TRUE
#define     TRUE    (1)
#endif
#ifndef NULL
#define     NULL    ( ( void * ) 0 )
#endif

/*------------------------------------------------------------------------
    Liste der Tokentypen:
        NORMCMD     - \command ohne Parameter       
        PARMCMD     - \command mit Parameter        
        NORMCHAR    - normales Zeichen          
        HEXVALUE    - Hexadezimalzahl               
        GROUPBEGIN  - Gruppenanfang             
        GROUPEND    - Gruppenende                   
------------------------------------------------------------------------*/

enum {NORMCMD, PARMCMD, NORMCHAR, HEXVALUE, GROUPBEGIN, GROUPEND};

/*------------------------------------------------------------------------
    Liste der Scanner-Modi:
        SCANBEGIN   - erstes Zeichen im Scannerlauf
        SCANCMD     - Kommando einlesen
        SCANPARM    - Parameter zu Kommando einlesen
        SCANHEX     - Hexadezimalzahl einlesen
------------------------------------------------------------------------*/

enum {SCANBEGIN, SCANCMD, SCANPARM, SCANHEX};

/*------------------------------------------------------------------------
    Liste der Kommando-States:
        COMMENT     - als Kommentar ausgeben
        IGNORE      - ignorieren
        EXECUTE     - Code generieren
        WARN        - Warnen als nicht implementiert
------------------------------------------------------------------------*/

enum cmdstates{COMMENT, IGNORE, EXECUTE, WARN};

/*------------------------------------------------------------------------ 
    Liste der Text-Modi:
        PCCODE      - IBM-PC Kodierung
        MACCODE     - McIntosh Kodierung
        ANSICODE    - ASCII Kodierung
------------------------------------------------------------------------*/

enum textcodes{PCCODE, MACCODE, ANSICODE};

/*------------------------------------------------------------------------
    Default-Einstellungen f"ur RTF2TEX
------------------------------------------------------------------------*/

#define DEFAULTSTYLE    "article"           /* Standard Documentstyle   */
#define DEFAULTDOCOPT   ""                  /* Standard Documentoptions */
#define DEFAULTCODE     PCCODE              /* RTF-Textcodierung (s.o.) */

/*------------------------------------------------------------------------
    Eigene Datenstrukturen
------------------------------------------------------------------------*/

struct command
{
    char cmd[CMDLENGTH];                /* RTF-Kommando                 */
    int state;                          /* Kommando-Status              */
    int (*func)(void);                  /* Fukntion zur Codeerzeugung   */
};

struct hexvalue
{
    int value[3];                   /* f"ur PC, MAC & ANSI Codierung     */
    char *outstring[2];             /* LaTeX output english, german     */
};

struct normchar
{
    char value;                     /* Zeichen                          */
    char *outstring;                /* Latex "Ubersetzung                */
};

struct scantoken
{
    int type;
    struct              /* dadurch bleibt der Hexstring in text erhalten */
    {
        struct
        {
            char text[CMDLENGTH];
            char parm[PARMLENGTH]; 
        }cmd;
        int zeichen;
    }value;
};

/*------------------------------------------------------------------------
    Funktionsprototypen ....
------------------------------------------------------------------------*/

void        printusage(void);
void        errout(char *mesage, char *optparm, int exitflag);
void        checknewline(int lastsize, int lastchar);

int         gettoken(void);

long        hexval(char *string);

/* Prototypen f"ur Codegenerierungsroutinen */

int         gen_pc(void);
int         gen_mac(void);
int         gen_ansi(void);
int         gen_colortbl(void);
int         gen_tab(void);
int         gen_par(void);
int         gen_pard(void);
int         gen_footnote(void);
int         gen_ql(void);
int         gen_qr(void);
int         gen_qc(void);
int         gen_qj(void);
int         gen_fi(void);
int         gen_li(void);
int         gen_ri(void);
int         gen_ul(void);
int         gen_uldb(void);
int         gen_i(void);
int         gen_b(void);
int         gen_scaps(void);
int         gen_plain(void);
int         gen_up(void);
int         gen_dn(void);
int         gen_page(void);
int         gen_line(void);
int         gen_title(void);
int         gen_subject(void);
int         gen_operator(void);
int         gen_author(void);
int         gen_keywords(void);
int         gen_doccomm(void);
int         gen_version(void);
int         gen_nextfile(void);
int         gen_info(void);
int         gen_stylesheet(void);
int         gen_fonttbl(void);
int         gen_fs(void);
int         gen_v(void);
int         gen_commentdocsize(void);

/*--------------------------------E N D E-------------------------------*/
