/* Copyright (c) Xerox Corporation 1993. All rights reserved. */
/* tread.h -- Low-level Tioga reader routines.
   David Nichols
   December, 1990 */

struct tread←Stream {
    unsigned char *next;
    unsigned char *limit;
};

struct tread←Procs {
    int (*startNode)(/* reader, format, comment */);
    int (*endNode)(/* reader */);
    int (*addLooks)(/* reader, looks, start, len */);
    int (*insertText)(/* reader, text, len */);
    int (*handleProp)(/* reader, propName, prop, len */);
};

struct tread←Reader {
    struct tread←Procs *procs;
    char *data;			/* private data for client */
    /* Full buffer. */
    char *buf;
    long totalLen;
    /* Start and end of each region. */
    struct tread←Stream text;
    struct tread←Stream com;
    struct tread←Stream control;
    /* Generic piece of text */
    int strLen;
    unsigned char *str;
    /* Formats */
    int nFormats;		/* number in use */
    char *formats[tioga←NumFormats]; /* list of them */
    /* Look combos */
    int nLooks;			/* number in use */
    long looks[tioga←NumLooks];	/* list of them */
    /* Property names */
    int nProps;
    char *props[tioga←NumProps];
};

/* Initialize from buffer holding entire file. */
extern int tread←Init(/* struct tread←Reader *r, char *buf, long len,
			 struct tread←Procs *procs, char *data */);

/* Get next opcode from control stream. */
extern enum tioga←ControlOp tread←GetOp(/* struct tread←Reader *r */);

/* Get a byte from the control stream. */
extern int tread←GetInt(/* struct tread←Reader *r */);

/* Get an integer from the control stream. */
extern long tread←GetInt(/* struct tread←Reader *r */);

/* Get text from control stream. */
extern tread←GetStr(/* struct tread←Reader *r */);

/* Get text from a specific stream. */
extern tread←SGetRope(/* struct tread←Reader *r,
			 struct tread←Stream *s, long len */);

/* Add a new format, and return its index. */
extern int tread←AddFormat(/* struct ReaderState *r, char *format */);

/* Add a new looks vector, return its index. */
extern int tread←AddLooks(/* struct ReaderState *r, long l */);

/* Add a new property name, return its index. */
extern int tread←AddProp(/* struct ReaderState *r, char *propName */);