Return-Path: <ysato@etl.go.jp>
Received: from thumper.bellcore.com by greenbush.bellcore.com (4.1/4.7)
	id <AA08508> for nsb; Thu, 18 Jun 92 07:05:20 EDT
Received: from etlpost.etl.go.jp ([192.31.197.33]) by thumper.bellcore.com (4.1/4.7)
	id <AA27316> for nsb@greenbush; Thu, 18 Jun 92 07:04:45 EDT
Received: from etlpom.etl.go.jp by etlpost.etl.go.jp (5.67+1.6W/2.7W)
	id AA29286; Thu, 18 Jun 92 20:04:04 JST
Received: by etlpom.etl.go.jp (4.1/6.4J.6-ETLpom.MASTER)
	id AA17361; Thu, 18 Jun 92 20:03:55 JST
Received: by etlibs.etl.go.jp (4.1/6.4J.6-ETL.SLAVE)
	id AA29968; Thu, 18 Jun 92 20:03:47 JST
Date: Thu, 18 Jun 92 20:03:47 JST
Return-Path: <ysato@etl.go.jp>
Mime-Version: 1.0
Content-Type: multipart/mixed; boundary="=="
To: nsb@thumper.bellcore.com
Cc: rhys@cs.uq.oz.au
Subject: Re: multi-bytes richtext
From: ysato@etl.go.jp (Yutaka Sato =?ISO-2022-JP?B?GyRAOjRGI0stGyhK?=)
Organization: Electrotechnical Laboratory, Tsukuba Science City
Message-Id: <gFrys.ysato@etl.go.jp>
References: <gAe+o.ysato@etl.go.jp> <gAfnd.ysato@etl.go.jp> 
	<1451@~/Mail/drafts> <gFqTf.ysato@etl.go.jp> 
	<ceDpgPa0M2Yt8Gvww6@thumper.bellcore.com>

--==

I'm sending a copy of this message to the author of richlex.c,
wishing my small change to richlex.c may be adopted. 

In message <ceDpgPa0M2Yt8Gvww6@thumper.bellcore.com> on 06/18/92(00:32:43)
you Nathaniel Borenstein <nsb@thumper.bellcore.com> wrote:
 |Can you
 |possibly send me an example of multibyte richtext that works with your
 |modified code (as well as one that doesn't) so that I can try it out and
 |see?   

Ok, I enclosed a picture which shows how the old and new version of 
richtext process a sample data in Japanese (JIS).

--==
Content-Type: image/gif
Content-Transfer-Encoding: base64
Content-Description: richtext for multibyte charset text

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
--==

 |In particular, I notice that you call "extended_command" only in the
 |"default" case of a switch statement that sorts on first letters, so I
 |can tell that it only happens for keywords that start with other
 |letters, but I can't tell which keywords -- in other words, at a quick
 |glance it isn't obvious what your code expects in  its datastream.  I'd
 |be very interested in seeing that!

My code expects the input is a stream of multi national character
set switched by ISO-2022, that is "ESC $ X" for switch to two byte
characterset and "ESC $ X" for switch to one byte character set.

 |Note that MIME defines things like
 |<iso-8859-1> some text </iso-8859-1> 
 |but doesn't say anything similar about non-8859 character sets.  In
 |particular, people were worried about the implications of multibyte
 |character sets 

Even if multibyte character sets are ignored by them, column calculation
which is able to cope with propotional fonts could be necessary.
If richtext cope with propotional fonts, it makes easier to handle
multibyte character sets...

 |-- what if one of the octets corresponds to the ascii
 |"<"?  I'd like to know how you handle this!  -- Nathaniel

ISO-2022-JP is a implication of US-ASCII and JISx208, so "<"s is
passed to richtext as is when the context is US-ASCII, but
translated to "<lt>" when the context is JISx208.  This switching
is found in ISO2022Getc().

As I found some problems in richtext.c I send yesterday, I enclose a
refined richtext.c.  Also I inserted a hook into RICHLEX.c to 
treat extended SINGLETONs.


In message <gFqTf.ysato@etl.go.jp> on 06/18/92(00:13:50) I wrote:
 |In message <gAe+o.ysato@etl.go.jp> on 06/02/92(06:33:20) I wrote:
 | |That is I want to use your richtext.c for the ISO-2022-JP.
 | |I need several extensions for richtext.c to do this.
 | |
 | |First, I need a way to extended command. For example, by defininng
 | |a variable like int (*RichtextCommand)();
 | |
 | |Second, I need a way to avoid two-bytes codes (like ISO-2022-JP)
 | |to be splitted at a odd position on the end of line.
 | |
 | |Lastly, I wish to catch all of output characters from richtext.c
 | |by hooking a single function, for example by defining a variable
 | |like int (*RichtextPutc)();
 | |
 | |With this functions, I can smoothly make richtext for ISO-2022.
 | |I will be very happy if you would think about my above requirements.
 |
 |I did this extension tonight.  Outline of changes are:
 |
 | - extended the element of OutputBuf from CHAR to INT.
 | - inserted hooks into richtext.c at initialization, getc, command, and putc
 | - outputc() assembles a multi-bytes character and puts it to realoutputc()
 | - multi-bytes character is treated in realoutputc()

and today,
   - inserted a hook into richtext.c to find a extra folding point
   - inserted a hook into richtext.c to calculate line position
   - inserted a hook into richlex.c at SINGLETON checking.

 |Based on these extention, I wrote a richtext driver for ISO-2022-JP.
 |It seems work well on the whole, except in some special caces.
 |The problem seems originated from a strange behavior of richtext
 |which will try strange justification on some input patterns.

This is caused because FlushOut() function does not try to find
alternative folding point when it cannot find any space character.
Since languages like Japanese does not explicitly separate words
with space character, such a situation is very ordinary.
A sentence can folded at any places, except that some characters
(like phrase or sentence delimiter) should not be at the top of line.
I inserted a hook at FlushOut() to find user defined extra folding point.

--
Yutaka Sato <ysato@etl.go.jp>
Information Base Section
ELECTROTECHNICAL LABORATORY
1-1-4 Umezono, Tsukuba, Ibaraki, 305 Japan

--==
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Description: experimental richtext.c with multibyte extension

/*
Copyright (c) 1991 Bell Communications Research, Inc. (Bellcore)

Permission to use, copy, modify, and distribute this material =

for any purpose and without fee is hereby granted, provided =

that the above copyright notice and this permission notice =

appear in all copies, and that the name of Bellcore not be =

used in advertising or publicity pertaining to this =

material without the specific, prior written permission =

of an authorized representative of Bellcore.  BELLCORE =

MAKES NO REPRESENTATIONS ABOUT THE ACCURACY OR SUITABILITY =

OF THIS MATERIAL FOR ANY PURPOSE.  IT IS PROVIDED "AS IS", =

WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES.
*/

#include <stdio.h>
#include <ctype.h>
#include <signal.h>
#include "richlex.h"

extern char *getenv();
#ifdef AMIGA
extern char *strchr();
#endif

int (*RichtextGetc)();
int (*RichtextPutc)();
int (*RichtextCommand)();
int (*RichtextInitialize)();
int (*RichtextLineposition)();
int (*RichtextFoldingpoint)();

int linepos =3D 0, inspace =3D 0, leftmargin =3D 0, rightmargin, biggerte=
xt=3D0;
int workingleft =3D 0, workingright, inexcerpt =3D 0, insignature =3D 0;
int termcolumns=3D80, termrows=3D23;
int controlputc();

/* A common problem, in justifying text, is figuring out how to format a =

   line when part of it wants to be left-justified, part right-justified,=
 =

   and part centered, or some combination thereof.  There is no perfect =

   solution to this problem, so this program takes an incredibly cheesy =

   but simple way out:  voting.  For each character on the line, a point
   is added to the "center" score if it is supposed to be centered, and =

   so on.  If it is inside TWO "center" environments, two points are adde=
d.
   This may be the world's first implementation of justification by votin=
g...
*/

int centerenv=3D0, leftjustenv=3D0, rightjustenv=3D0;
int centerct=3D0, leftjustct=3D0, rightjustct=3D0;
int UsePager =3D 0;
int linesused =3D 0;
int JustSawCmd=3D0;
int JustCorrect =3D 0;		/* Non-zero to just correct and not format */
static char MoveRight[10];
static char standoutbuf[50], standendbuf[50], StartUnderline[50], StopUnd=
erline[50];
static char KS[50], KE[50], BoldOn[50], BoldOff[50];

#ifndef AMIGA
#ifndef __MSDOS__
#define TPUTS_OK
#endif
#endif
#ifndef TPUTS_OK
tputs(char *s, int n, int ((*func)(char)));
#endif

void
cleanup(signum)
int signum;
{
    FinalizeTerminal();
#if defined(AMIGA) || defined(__MSDOS__)
    exit(signum);
#else
    signal(signum, SIG_DFL);
    kill(getpid(), signum);
#endif
}

InitSignals() {
    signal(SIGINT, cleanup);
#if !defined(AMIGA)
#if !defined(__MSDOS__)
    signal(SIGILL, cleanup);
    signal(SIGTRAP, cleanup);
    signal(SIGIOT, cleanup);
    signal(SIGEMT, cleanup);
    signal(SIGFPE, cleanup);
    signal(SIGBUS, cleanup);
    signal(SIGSEGV, cleanup);
    signal(SIGTERM, cleanup);
#ifdef SIGXCPU
    signal(SIGXCPU, cleanup);
#endif
#endif
#endif
}

nomemabort() {
    fprintf(stderr, "richtext: Out of memory\n");
    FinalizeTerminal();
#ifdef AMIGA
    exit(20);
#else
    exit(-1);
#endif
}

main(argc, argv)
int argc;
char **argv;
{
    int c, i, standout=3D0, underline=3D0, bold=3D0, atstart, negated,
    ForceTermcap=3D0, ForcePlain=3D0, NotTtyEnv =3D 0, FakeTerminal;
    char token[MAX_TOKEN_SIZE], *tok, *nottty;
    char tbuf[1024], *term, *dum;
    FILE *InputFP =3D stdin, *tmpfp;
#ifdef __MSDOS__
    int ansi =3D 0;
#endif

    if( RichtextInitialize )
	(*RichtextInitialize)();
    InitSignals();
    dum =3D (char *) getenv("MM_USEPAGER");
    if (dum && atoi(dum)) ++UsePager;
    for (i=3D1; i< argc; ++i) {
        if (!strcmp(argv[i], "-p")) {
            ++UsePager;
        } else if (!strcmp(argv[i],"-c")) {
            /* Only perform correction: don't format */
            JustCorrect =3D 1;
        } else if (!strcmp(argv[i], "-f")) {
            /* Force termcap usage */
            ForceTermcap =3D 1;
        } else if (!strcmp(argv[i], "-t")) {
            /* Force plain text */
            ForcePlain =3D 1;
        } else if (!strcmp(argv[i],"-n")) {
            /* Disable the richtext correction routines */
            CorrectionEnabled =3D 0;
#ifdef __MSDOS__
        } else if (!strcmp(argv[i], "-a")) {
            ansi =3D !ansi;
#endif
        } else {
            /* open for input */
            tmpfp =3D fopen(argv[i], "r");
            if (tmpfp) InputFP =3D tmpfp;
        }
    }
#ifdef AMIGA
    /* THIS IS THE AMIGA TERMINAL INITIALIZATION CODE */
    nottty =3D (char *) getenv("MM_NOTTTY");
    if (nottty) NotTtyEnv =3D atoi(nottty);
    if (!isatty(0) || !isatty(1) || NotTtyEnv) {
        UsePager =3D 0;   /* Disable pager if I/O has been redirected or =
we're under a window-oriented mail reader */
    }
    KS[0] =3D 0;
    KE[0] =3D 0;
    if ((!ForcePlain && isatty(1)) || ForceTermcap) {
        FakeTerminal =3D 0;
        strcpy(standoutbuf, "\x9b\x37m");   /* Enter standout (highlighte=
d) mode */
        strcpy(standendbuf, "\x9b\x30m");   /* Exit standout mode */
        strcpy(BoldOn,      "\x9b\x31m");   /* Enter bold mode */
        strcpy(BoldOff,     "\x9b\x30m");   /* Exit bold mode */
        strcpy(StartUnderline,"\x9b\x34m"); /* Enter underline mode */
        strcpy(StopUnderline,"\x9b\x30m");  /* Exit underline mode */
        strcpy(MoveRight, " ");
    } else {
        FakeTerminal =3D 1;
        strcpy(BoldOn, "*");
        strcpy(BoldOff, "*");
        strcpy(standoutbuf, "_");
        strcpy(standendbuf, "_");
        strcpy(StartUnderline, "_");
        strcpy(StopUnderline, "_");
        strcpy(MoveRight, " ");
    }
#else
#ifdef __MSDOS__
    /* THIS IS THE DOS TERMINAL INITIALIZATION CODE */
    FakeTerminal =3D 1;
    termcolumns =3D 80;
    termrows =3D 23;
    strcpy(MoveRight, " ");
    if (!ansi) {
        KS[0] =3D NULL;
        KE[0] =3D NULL;
        strcpy(BoldOn, "*");
        strcpy(BoldOff, "*");
        strcpy(standoutbuf, "_");
        strcpy(standendbuf, "_");
        strcpy(StartUnderline, "_");
        strcpy(StopUnderline, "_");
    } else {
        strcpy(KS, "\x01B[37m");  /* White text (reset) */
        strcpy(KE, "\x01B[37m");  /* White text (reset) */
        strcpy(BoldOn, "\x01B[1m");   /* Bold text */
        strcpy(BoldOff, "\x01B[0m");   /* End bold text (normal) */
        strcpy(StartUnderline, "\x01B[31m");  /* Underline (red text) */
        strcpy(StopUnderline, "\x01B[37m");   /* Underline end (white) */=

        /* The following should probably be something else, for italic */=

        strcpy(standoutbuf, "\x01B[31m"); =

        strcpy(standendbuf, "\x01B[37m"); =

    }
#else
    /* THIS IS THE UNIX TERMINAL INITIALIZATION CODE */
    nottty =3D (char *) getenv("MM_NOTTTY");
    if (nottty) NotTtyEnv =3D atoi(nottty);
    if (!isatty(0) || !isatty(1) || NotTtyEnv) {
        UsePager =3D 0;   /* Disable pager if I/O has been redirected or =
we're under a window-oriented mail reader */
    }
    if ((!ForcePlain && (isatty(1) || isatty(0))) || ForceTermcap) {
        term =3D (char *) getenv("TERM");
    } else {
        term =3D NULL;
    }
    if (term && tgetent(tbuf, term) !=3D 1) {
        term =3D NULL;
    }
    if (term) {
        dum =3D KS;
        if (tgetstr("ks", &dum)) *dum =3D NULL; else KS[0] =3D '\0';
        dum =3D KE;
        if (tgetstr("ke", &dum)) *dum =3D NULL; else KE[0] =3D '\0';
        dum =3D standoutbuf;
        if (tgetstr("so", &dum)) *dum =3D NULL; else standoutbuf[0] =3D '=
\0';
        dum =3D standendbuf;
        if (tgetstr("se", &dum)) *dum =3D NULL; else standendbuf[0] =3D '=
\0';
        dum =3D BoldOn;
        if (tgetstr("md", &dum)) *dum =3D NULL; else strcpy(BoldOn, stand=
outbuf);
        dum =3D BoldOff;
        if (tgetstr("me", &dum)) *dum =3D NULL; else strcpy(BoldOff, stan=
dendbuf);
        dum =3D StartUnderline;
        if (tgetstr("us", &dum)) *dum =3D NULL; else StartUnderline[0] =3D=
 '\0';
        dum =3D StopUnderline;
        if (tgetstr("ue", &dum)) *dum =3D NULL; else StopUnderline[0] =3D=
 '\0';
        dum =3D MoveRight;
        if (tgetstr("nd", &dum)) *dum =3D NULL; else {
            MoveRight[0] =3D ' ';
            MoveRight[1] =3D '\0';
        }
        /* Some TERMCAP entries have REALLY screwed up "nd" fields, sigh.=
=2E. */
        if (!strcmp(MoveRight, "\014")) strcpy(MoveRight, " ");
        termcolumns =3D tgetnum("co");
        if (termcolumns <=3D 0) termcolumns =3D 80;
        termrows =3D tgetnum("li");
        if (termrows <=3D 0) termrows =3D 23;
        FakeTerminal=3D0;
    } else {
        KS[0] =3D NULL;
        KE[0] =3D NULL;
        FakeTerminal =3D 1;
        strcpy(BoldOn, "*");
        strcpy(BoldOff, "*");
        strcpy(standoutbuf, "_");
        strcpy(standendbuf, "_");
        strcpy(StartUnderline, "_");
        strcpy(StopUnderline, "_");
        strcpy(MoveRight, " ");
        termcolumns =3D 80;
        termrows =3D 23;
    }
#endif
#endif
    /* Check for the LINES & COLUMNS hack */
    dum =3D getenv("LINES");
    if (dum && ((i=3Datoi(dum)) > 0)) termrows =3D i;
    dum =3D getenv("COLUMNS");
    if (dum && ((i=3Datoi(dum)) > 0)) termcolumns =3D i;
    richtextreset();
    if (JustCorrect) {
        richtextcorrect(InputFP,stdout);
        exit(0);
    }
    FPUTS(KS, stdout);
    rightmargin =3D workingright =3D termcolumns - 1;
    while((c =3D richtextlex(InputFP,token)) !=3D EOF) {
        if (c =3D=3D RICHTEXT_COMMAND || c =3D=3D RICHTEXT_NEG_COMMAND) {=
 =

            negated =3D (c =3D=3D RICHTEXT_NEG_COMMAND);
            tok =3D token;
            switch(tok[0]) {
                case 'b':
                    if (!strcmp(tok, "bold")) {
                        if (negated) {
                            --bold;
                            if (bold <=3D 0) controloutput(BoldOff, 0);
                        } else {
                            ++bold;
                        }
                        ResetTerminalCodes(FakeTerminal, standout, underl=
ine,
                                            bold, standoutbuf, standendbu=
f, 0,
                                            StartUnderline, StopUnderline=
, 0, BoldOn,
                                            BoldOff, 1);
                    } else if (!strcmp(tok, "bigger")) {
                        if (negated) --biggertext; else ++biggertext;
                    }
                    break;
                case 'c':
                    if (!strcmp(tok, "center")) {
                        if (negated) --centerenv; else ++centerenv;
                    } else if (!strcmp(tok, "comment")) {
                        int commct=3D1;
                        while (commct > 0) {
                            while ((c =3D getc(InputFP)) !=3D '<' =

                                    && c !=3D EOF) ;
                            if (c =3D=3D EOF) break;
                            for (i=3D0; (c =3D getc(InputFP)) !=3D '>' =

                              && c !=3D EOF; ++i) {
                                token[i] =3D isupper(c) ? =

                                  tolower(c) : c;
                            }
                            if (c=3D=3D EOF) break;
                            token[i] =3D 0;
                            if (!strcmp(token, "/comment")) --commct;
                            if (!strcmp(token, "comment")) ++commct;
                        }
                    }
                    break;
                case 'e':
                    if (!strcmp(tok, "excerpt")) {
                        atstart =3D !(linepos > workingleft);
                        if (negated) {
                            leftmargin -=3D 4;
                            rightmargin +=3D 4;
                            --inexcerpt;
                        } else {
                            leftmargin +=3D 4;
                            rightmargin -=3D 4;
                            ++inexcerpt;
                        }
                        MakeWorkingMargins();
                        if (!atstart) outputc('\n');
                    }
                    break;
                case 'f':
                    if (!strcmp(tok, "flushleft")) {
                        if (negated) --leftjustenv; else ++leftjustenv;
                    } else if (!strcmp(tok, "flushright")) {
                        if (negated) --rightjustenv; else ++rightjustenv;=

                    }
                    break;
                case 'i':
                    if (!strcmp(tok, "italic")) {
                        if (negated) {
                            --standout;
                            if (standout <=3D 0) controloutput(standendbu=
f, 0);
                        } else {
                            ++standout;
                        }
                        ResetTerminalCodes(FakeTerminal, standout, underl=
ine, bold,
                                            standoutbuf, standendbuf, 1, =
StartUnderline,
                                            StopUnderline, 0, BoldOn, Bol=
dOff, 0);
                    } else if (!strcmp(tok, "indent")) {
                        if (negated) {
                            leftmargin -=3D 4;
                        } else {
                            leftmargin +=3D 4;
                        }
                    } else if (!strcmp(tok, "indentright")) {
                        if (negated) {
                            rightmargin +=3D 4;
                        } else {
                            rightmargin -=3D 4;
                        }
                    }
                    MakeWorkingMargins();
                    break;
                case 'l':
                    if (!strcmp(tok, "lt")) {
                        outputc('<');
                    }
                    break;
                case 'n':
                    if (!strcmp(tok, "nl")) {
                        outputc('\n');
                    } else if (!strcmp(tok, "np")) {
                        outputc('\n');
                        outputc('\014');
                    }
                    break;
                case 'u':
                    if (!strcmp(tok, "underline")) {
                        if (negated) {
                            --underline;
                            if (underline <=3D 0) controloutput(StopUnder=
line,0);
                        } else {
                            ++underline;
                        }
                        ResetTerminalCodes(FakeTerminal, standout, underl=
ine, bold,
                                            standoutbuf, standendbuf, 0, =
StartUnderline,
                                            StopUnderline, 1, BoldOn, Bol=
dOff, 0);
                    }
                    break;
                case 'o':
                    if (!strcmp(tok, "outdent")) {
                        if (negated) {
                            leftmargin +=3D 4;
                        } else {
                            leftmargin -=3D 4;
                        }
                    } else if (!strcmp(tok, "outdentright")) {
                        if (negated) {
                            rightmargin -=3D 4;
                        } else {
                            rightmargin +=3D 4;
                        }
                    }
                    MakeWorkingMargins();
                    break;                    =

                case 'p':
                    if (!strcmp(tok, "paragraph")) {
                        if (negated) outputc('\n');
                        outputc('\n');
                    }
                    break;
                case 's':
                    if (!strcmp(tok, "signature")) {
                        atstart =3D !(linepos > workingleft);
                        if (negated) {
                            leftmargin -=3D 4;
                            rightmargin +=3D 4;
                            --insignature;
                        } else {
                            leftmargin +=3D 4;
                            rightmargin -=3D 4;
                            ++insignature;
                        }
                        MakeWorkingMargins();
                        if (!atstart) outputc('\n');
                    }
                    break;
                default:
		    extended_command(tok,negated);
                    break;
            }
            JustSawCmd =3D 1;
        } else if (c =3D=3D '\n') {
            if (linepos > 0 && !inspace) {
                outputc(' ');
            }
            JustSawCmd =3D 0;
        } else {
            outputc(c);
            JustSawCmd =3D 0;
        }
    }
    if (term) { /* cleanup a bit for insurance */
        controloutput(standendbuf, 0);
        controloutput(StopUnderline, 0);
    }
    outputc('\n'); /* for good measure */
    FPUTS(KE, stdout);
    fflush(stdout);
    if (UsePager) {
        Pause();
    }
    exit(0);
}

static int OutputBuf[1000] =3D {0};
static int PendingOutput =3D 0, PendingControls =3D 0;
static int IsControlOutput[1000];

controlputc(c)
char c;
{
    IsControlOutput[PendingOutput] =3D 1;
    OutputBuf[PendingOutput++] =3D c;
    ++PendingControls;
}

immediate_controlputc(c)
char c;
{
    (*RichtextPutc)(c, stdout);
}

controloutput(s, immediate)
char *s;
int immediate;
{
    tputs(s, 1, immediate ? immediate_controlputc : controlputc);
}

FlushOut() {
    int i, j, x;
    int NewOutputBuf[1000], *s;
    int NewPendingControls=3D0, *NewIsControlOutput, NewPendingOutput =3D=
 0;

    NewIsControlOutput =3D (int *)malloc(1000*sizeof(int));
    if (!NewIsControlOutput) nomemabort();
    OutputBuf[PendingOutput] =3D 0;
    if (linepos >=3D workingright) {
        for (i=3D0, j=3D0; j<workingright && i < PendingOutput; ++i) {
            if (!IsControlOutput[i]) ++j;
        }
        if ((workingleft+4) < (x=3Dfolding_point(OutputBuf,IsControlOutpu=
t,i)))
            i =3D x;
        else
            while (i > workingleft + 4) {
                if (!IsControlOutput[i]
                     && isspace((unsigned char) OutputBuf[i])) {
                    break;
                }
                --i;
            }
        for (j=3D0; i<PendingOutput; ++j, ++i) {
            NewOutputBuf[j] =3D OutputBuf[i];
            NewIsControlOutput[j] =3D IsControlOutput[i];
            ++NewPendingOutput;
            if (NewIsControlOutput[j]) ++NewPendingControls;
        }
        PendingOutput -=3D NewPendingOutput;
        PendingControls -=3D NewPendingControls;
        OutputBuf[PendingOutput++] =3D '\n';
        OutputBuf[PendingOutput] =3D 0;
    }
    if ((rightjustct > leftjustct)
         && (rightjustct > centerct)
         && (rightjustct > 0)) {
        /* right justified */
        i =3D termcolumns - calc_column(OutputBuf,PendingOutput) - 1
            + PendingControls;
        for (j=3D0; j<i; ++j)  {
            controloutput(MoveRight, 1);
        }
        fputsmovingright(OutputBuf, stdout);
        ++linesused;
    } else if ((leftjustct > centerct)
                && (leftjustct > 0)) {
        /* left justified */
        for (s=3DOutputBuf; *s && isspace((unsigned char) *s); ++s) {;}
        fputsmovingright(s, stdout);
        ++linesused;
    } else if (centerct > 0) {
        /* centered */
        i =3D (termcolumns - calc_column(OutputBuf,PendingOutput) - 1
	     + PendingControls) / 2;
        for (j=3D0; j<i; ++j) {
            controloutput(MoveRight, 1);
        }
        fputsmovingright(OutputBuf, stdout);
        ++linesused;
    } else {
        /* Leave indentation (margins) as-is */
        fputsmovingright(OutputBuf, stdout);
        ++linesused;
    }
    if (linesused >=3D termrows && UsePager) Pause();
    rightjustct =3D leftjustct =3D centerct =3D 0; /* not quite right for=
 wrapping, sigh... */
    PendingOutput =3D PendingControls =3D linepos =3D 0;
    inspace =3D 1;
    j =3D (isspace((unsigned char) NewOutputBuf[0])) ? 1 : 0;
    for ( ; j<NewPendingOutput; ++j) {
        if (NewIsControlOutput[j]) {
            IsControlOutput[PendingOutput] =3D 1;
            OutputBuf[PendingOutput++] =3D NewOutputBuf[j];
            ++PendingControls;
        } else {
            realoutputc(NewOutputBuf[j], 1);
        }
    }
    free((char *)NewIsControlOutput);
}

int RichtextCharcodeLength =3D 1;
outputc(c)
char c;
{
    if( RichtextCharcodeLength =3D=3D 1 )
         realoutputc(c, 0);
    else multibyte_realoutputc(c);
}

realoutputc(c, alreadyformatted)
int c;
int alreadyformatted;
{
    int i, newinspace;

    if (c =3D=3D '\n') {
        IsControlOutput[PendingOutput] =3D 0;
        OutputBuf[PendingOutput++] =3D '\n';
        FlushOut();
    } else if (c =3D=3D '\t') {
        int tabpos =3D (linepos + 8) / 8;
        if (tabpos >=3D workingright) {
            IsControlOutput[PendingOutput] =3D 0;
            OutputBuf[PendingOutput++] =3D '\n';
            FlushOut();
        } else {
            int spaces =3D (8*tabpos) - linepos;
            while (spaces-->0) {
                IsControlOutput[PendingOutput] =3D 0;
                OutputBuf[PendingOutput++] =3D ' ';
                ++linepos;
            }
        }
    } else {
        newinspace =3D isspace((unsigned char) c);
        if (!inspace || !newinspace || !JustSawCmd) {
            if (linepos =3D=3D 0) {
                int i =3D workingleft;
                if (inexcerpt) {
                    IsControlOutput[PendingOutput] =3D 0;
                    OutputBuf[PendingOutput++] =3D '>';
                    --i;
                }
                if (insignature) {
                    IsControlOutput[PendingOutput] =3D 0;
                    OutputBuf[PendingOutput++] =3D '+';
                    --i;
                }
                while (i-->0) {
                    IsControlOutput[PendingOutput] =3D 0;
                    OutputBuf[PendingOutput++] =3D ' ';
                }
                linepos =3D workingleft;
            }
            if (!alreadyformatted && biggertext && !(inspace && newinspac=
e)) {
                IsControlOutput[PendingOutput] =3D 0;
                OutputBuf[PendingOutput++] =3D '_';
                ++linepos;
            }
            inspace =3D newinspace;
	    linepos +=3D charlen(c);
            IsControlOutput[PendingOutput] =3D 0;
            OutputBuf[PendingOutput++] =3D c;
            leftjustct +=3D leftjustenv;
            rightjustct +=3D rightjustenv;
            centerct +=3D centerenv;
            if (c =3D=3D '\014') inspace =3D 1;
            if (linepos >=3D workingright) FlushOut();
        }
    }
}

MakeWorkingMargins() {
    int oldworkingleft=3Dworkingleft, i;

    workingleft =3D leftmargin;
    workingright =3D rightmargin;
    if (workingleft < 0) workingleft =3D 0;
    if (workingright < 0) workingright =3D 0;
    if (workingright > (termcolumns - 1)) workingright =3D (termcolumns -=
 1);
    if (workingleft > (workingright - 8)) workingleft =3D workingright -8=
;
    if (linepos =3D=3D oldworkingleft) {
        for (i=3Dworkingleft-oldworkingleft; i > 0; --i) outputc(' ');
    }
}

Pause()
{
    int	c;

    (void) fputs("Press RETURN to continue (or 'q' to quit): ", stdout);
    c =3D getc(stdin);
    if (c =3D=3D 'q' || c =3D=3D 'Q') exit();
    linesused =3D 0;
}

/* Leading spaces should be output as MoveRight, to avoid =

   having margins that are underlined or reverse video */

fputsmovingright(s, fp)
int *s;
FILE *fp;
{
    int inmargin=3D1;
    if (!s) return;
    while (*s) {
        if (inmargin && *s =3D=3D ' ') {
            controloutput(MoveRight, 1);
        } else {
	    if (inmargin) inmargin =3D 0;
	    (*RichtextPutc)(*s,fp);
	}
        ++s;
    }
}

ResetTerminalCodes(FakeTerminal, standout, underline, bold, standoutbuf, =
standendbuf,
                    modifiedstandout, StartUnderline, StopUnderline, modi=
fiedunderline,
                    BoldOn, BoldOff, modifiedbold)
char *standoutbuf, *standendbuf, *StartUnderline, *StopUnderline,
    *BoldOn, *BoldOff;
{
    /* We always turn back on the appropriate terminal modes, because
      on some terminals one thing turns off all of them */
    if (standout >=3D 1) {
        if (FakeTerminal) {
            if (modifiedstandout && standout =3D=3D 1) outputstr(standout=
buf);
        } else controloutput(standoutbuf, 0);
    }
    if (bold >=3D 1) {
        if (FakeTerminal) {
            if (modifiedbold && bold =3D=3D 1) outputstr(BoldOn);
        } else controloutput(BoldOn, 0);
    }
    if (underline >=3D 1) {
        if (FakeTerminal) {
            if (modifiedunderline && underline =3D=3D 1) outputstr(StartU=
nderline);
        } else controloutput(StartUnderline, 0);
    }
}

FinalizeTerminal() {
    tputs(standendbuf, 1, immediate_controlputc);
    tputs(BoldOff, 1, immediate_controlputc);
    tputs(StopUnderline, 1, immediate_controlputc);
    fputs(KE, stdout);
}

outputstr(s)
char *s;
{
    while (*s) outputc(*s++);
}

#ifndef TPUTS_OK
tputs(s, n, func)
char *s;
int n;
int (*func)();
{
    if (s) {
        while (*s) {
            func(*s);
            ++s;
        }
    }
    return (0);
}
#endif

/*#######################################################################=
####
 *	Experimental extention to handle multibyte character sets.
 *		92-06-18	Yutaka Sato <ysato@etl.go.jp>
 */

static extended_command(tok,negated)
char *tok;
int negated;
{
    if( RichtextCommand )
	(*RichtextCommand)(tok,negated);
}

static folding_point(line,ctls,i)
int *line,*ctls,i;
{
    if( RichtextFoldingpoint )
	return (*RichtextFoldingpoint)(line,ctls,i);
    return 0;
}

static charlen(ch)
int ch;
{
    if(ch & 0xFF000000)	return 4;
    if(ch & 0xFF0000)	return 3;
    if(ch & 0xFF00  )	return 2;
    else		return 1;
}
        =

static int PendingCharacter =3D 0;
static int PendingLength =3D 0;
static multibyte_realoutputc(c)
{
    PendingCharacter =3D (PendingCharacter << 8) | c;
    if( ++PendingLength =3D=3D RichtextCharcodeLength ){
    	realoutputc(PendingCharacter, 0);
        PendingCharacter =3D 0;
	PendingLength =3D 0;
    }
}

static calc_column(buf,pos)
int *buf,pos;
{   int *s,col;

    if( RichtextLineposition )
	return (*RichtextLineposition)(buf,pos);
    return pos;
}

static FPUTS(s,fp)
unsigned char *s;
FILE *fp;
{
    while(*s) (*RichtextPutc)(*s++,fp);
}

/*#######################################################################=
####
 *
 *	Richtext driver for ISO-2022
 *		92-06-18	Yutaka Sato <ysato@etl.go.jp>
 *
 *	This is lodging in richtext.c for easy experiment.
 */

extern int (*RichtextInitialize)();
extern int (*RichtextGetc)();
extern int (*RichtextSingleton)();
extern int (*RichtextCommand)();
extern int (*RichtextLineposition)();
extern int (*RichtextFoldingpoint)();
extern int (*RichtextPutc)();

extern int ISO2022Getc();
extern int ISO2022Singleton();
extern int ISO2022Command();
extern int ISO2022Lineposition();
extern int ISO2022Foldingpoint();
extern int ISO2022Putc();

static int OutCharlen =3D 1;
static int OutPrevChar;
static int DoLiteralize =3D 0;
static char pushback_buff[20];
static int swto1B =3D 'B';
static int swto2B =3D 'B';

static ISO2022Initialize(){
	RichtextGetc	     =3D ISO2022Getc;
	RichtextSingleton    =3D ISO2022Singleton;
	RichtextCommand      =3D ISO2022Command;
	RichtextLineposition =3D ISO2022Lineposition;
	RichtextFoldingpoint =3D ISO2022Foldingpoint;
	RichtextPutc	     =3D ISO2022Putc;
	DoLiteralize =3D 0;
}
int (*RichtextInitialize)() =3D ISO2022Initialize;

static char xcharsw_prefix[] =3D "xiso2022-";
static int  xcharsw_leng =3D sizeof(xcharsw_prefix) - 1;

static ISO2022Command(token,negated)
	char *token;
{	int len,swchar;

	if( strncmp(token,xcharsw_prefix,xcharsw_leng) =3D=3D 0 ){
	    if( token[xcharsw_leng] && token[xcharsw_leng+1]=3D=3D'-' ){
		sscanf(token+xcharsw_leng+2,"%x",&swchar);
		if( swchar <=3D ' ' || 0x7F <=3Dswchar )
			return;
		switch( token[xcharsw_leng] ){
			case '2':
				controloutput("\033$",0);
				controlputc(swchar);
				swto2B =3D swchar;
				RichtextCharcodeLength =3D 2;
				break;
			case '1':
				RichtextCharcodeLength =3D 1;
				controloutput("\033(",0);
				controlputc(swchar);
				swto1B =3D swchar;
				break;
		}
	    }
	}
}

ISO2022Singleton(token)
	char *token;
{
	return !strncmp(token,xcharsw_prefix,xcharsw_leng);
}
ISO2022Getc(in)
	FILE *in;
{	int ch,nch;

GETCH:
	if( ch =3D *pushback_buff )
		strcpy(pushback_buff,pushback_buff+1);
	else{
		ch =3D fgetc(in);
		if(ch =3D=3D '<' && DoLiteralize )
			strcat(pushback_buff,"lt>");
		else
		if(ch =3D=3D 033){
			ch =3D fgetc(in);
			if(ch =3D=3D '$' || ch =3D=3D '('){
				nch =3D fgetc(in);
				if( ch =3D=3D '$' ){
					sprintf(pushback_buff,"<%s2-%x>",
						xcharsw_prefix,nch);
					DoLiteralize =3D 1;
				}else{
					sprintf(pushback_buff,"<%s1-%x>",
						xcharsw_prefix,nch);
					DoLiteralize =3D 0;
				}
				goto GETCH;
			}else{
				ungetc(ch,in);
				ch =3D 033;
			}
		}
	}
	return ch;
}

ISO2022Putc( ch, fp )
	int ch;
	FILE *fp;
{
	if( ch & 0xFF00 ){
		putc(ch  >>  8, fp);
		putc(ch & 0xFF, fp);
	}else{
		if( OutPrevChar =3D=3D 033 ){
			if( ch =3D=3D '$' ) OutCharlen =3D 2; else
			if( ch =3D=3D '(' ) OutCharlen =3D 1;
		}
		if( ch =3D=3D '\n' && OutCharlen =3D=3D 2 )
			fprintf(fp,"\033(%c\n\033$%c",swto1B,swto2B);
		else	putc(ch, fp);
	}
	OutPrevChar =3D ch;
}

ISO2022Foldingpoint(line,ctls,pos)
	int *line,*ctls,pos;
{	int i;

	for( i =3D pos; 0 < i; i-- )
		if( ctls[i] =3D=3D 0 )
			if( line[i] & 0xFF00 )
				return i;
	return 0;
}

ISO2022Lineposition(line,pos)
	int *line,pos;
{	int *s,col;

	col =3D 0;
	for(s =3D line; *s; s++)
		col +=3D *s & 0xFF00 ? 2 : 1;
	return col;
}
--==
Content-Type: application/octet-stream
Content-Description: richlex.c with a hook to extended SINGLETONs

*** richlex.c.orig	Thu Jun 18 17:32:24 1992
--- richlex.c	Thu Jun 18 17:33:30 1992
***************
*** 46,51 ****
--- 46,52 ----
  
  int (*RichtextGetc) () = fgetc;	/* Function to call to get characters */
  int (*RichtextPutc) () = fputc; /* Function to call to put characters */
+ int (*RichtextSingleton)()=0;	/* Function to check extended singletons */
  
  #define	RGET(f)		((*RichtextGetc)(f))
  #define	RPUT(c,f)	((*RichtextPutc)(c,f))
***************
*** 92,97 ****
--- 93,101 ----
   */
  static richtextsingle()
  {
+     if( RichtextSingleton && (*RichtextSingleton)(NextToken) )
+ 	return 1;
+ 
      return (!strcmp(NextToken,"nl") ||
  	    !strcmp(NextToken,"lt") ||
  	    !strcmp(NextToken,"np"));

--==
Content-Type: application/octet-stream; charset=ISO-2022-JP
Content-Description: sample data for multibyte richtext

The followings is a sentence written in Roman characters in <bold>JIS-X0208
</bold> which could not be properly processed with original richtext.
<nl>
<nl>
<center>$@#T#h#i#s!!#i#s!!#a!!#s#e#n#t#e#n#c#e!!#w#r#i#t#t#e#n!!#i#n(J<nl>
$@#R#o#m#a#n!!#c#h#a#r#a#c#t#e#r#s(J $@#i#n!!(J<underline>$@#J#I#S!]#X#2#0#2(J</underline>$@!%(J
</center><nl>

$@#O#r#i#g#i#n#a#l!!#v#e#r#s#i#o#n!!#o#f!!#r#i#c#h#t#e#x#t!!#d#e#s#t#r#o#y(J
 the $@#s#e#n#t#e#n#c#e!%$3$NJ8>O$O#J#I#S%3!<%ICf$N%m!<%^;z5-9f$G=q$+(J
$@$l$F$$$^$9!#8E$$(Jrichtext$@$G$O$3$l$r@5$7$/=hM}$G$-$^$;$s!#(JEven in  ASCII
sentences, a long word will cause a strange folding like this.
This-is-an-example-which-causes-a-strange-folding-in-richtext.=================================
<nl><nl>
<center>
This is an example of <bold>bold</bold> and <underline>underline
</underline> represented in the<nl>
<bold>richtext</bold> format of <italic><bold>MIME</bold></italic>.
<nl><nl>
$@$3$l$O!"(J<bold><italic>$@#M#I#M#E(J</italic></bold>$@$N(J<bold>richtext</bold>
$@7A<0$r;H$C$F!"(J<nl>
<underline>$@$3$N$h$&$J2<@~(J</underline>$@$d(J<bold>$@B@;z(J</bold>$@$rI=8=$7$?Nc$G$9!#(J
<nl><nl>
</center>
--Yutaka
--==--

