(FILECREATED " 8-Feb-86 16:08:23" {DSK}<LISPFILES2>IMPROVEDDCOMS>TEXECFIXES.;1 7521
changes to: (MACROS \RAISECHAR \LINEBUFBOUT) (VARS TEXECFIXESCOMS RATOM/RSTRING.FT READ.FT
READC.FT) (FNS TEXEC.FILLBUFFER.FIX))
(* Copyright (c) 1986 by Quintus Computer Systems, Inc. All rights reserved.)
(PRETTYCOMPRINT TEXECFIXESCOMS)
(RPAQQ TEXECFIXESCOMS ((SCCS) (FNS TEXEC.FILLBUFFER.FIX) (INITRECORDS TEDITCARET) (CONSTANTS
RATOM/RSTRING.FT READ.FT READC.FT) (MACROS \RAISECHAR \LINEBUFBOUT) (P (MOVD (QUOTE
TEXEC.FILLBUFFER.FIX) (QUOTE TEXEC.FILLBUFFER)) (UNMARKASCHANGED (QUOTE TEXEC.FILLBUFFER) (QUOTE FNS))
)))
(* %%G% %%W% )
(DEFINEQ
(TEXEC.FILLBUFFER.FIX
(LAMBDA (FILLTYPE) (* edited: "17-Nov-85 16:37") (* While filling the line, the current file pointer
is the end of the line. When the line is closed, this is made the eof. - #CURRENTRDTBL# is used for
syntactic delimiters and paren counting on READ and RATOM calls but isn't referenced (or bound) for
READC) (DECLARE (USEDFREE #CURRENTRDTBL# \PRIMTERMTABLE FLG \TERM.OFD) (SPECVARS RSNX TCLASS RTBLSA
RAISEDCHAR FILLTYPE RAISEDCHAR PEEKEDECHOED C)) (\RESETLINE) (* * If ERROR or RESET, move STARTINGEOF
to end of text (TEXTLEN)) (RESETLST (RESETSAVE NIL (LIST (FUNCTION (LAMBDA NIL (COND (RESETSTATE (*
Point to end of text and clearout linebuffer on RESET or ERROR) (PROG* ((TEXOBJ (fetch (TEXTSTREAM
TEXTOBJ) of \TERM.OFD)) (SEL (fetch SEL of TEXOBJ))) (TEXTPROP TEXOBJ (QUOTE STARTINGEOF) (fetch
TEXTLEN of TEXOBJ)) (replace (STREAM REVALIDATEFLG) of \LINEBUF.OFD) (\RESETTERMINAL) (\SHOWSEL SEL) (
replace CH# of SEL with (ADD1 (fetch TEXTLEN of TEXOBJ))) (replace CHLIM of SEL with (ADD1 (fetch
TEXTLEN of TEXOBJ))) (replace POINT of SEL with (QUOTE LEFT)) (replace DCH of SEL with 0) (replace SET
of SEL with T) (\FIXSEL SEL TEXOBJ)))))))) (PROG* ((RTBLSA (AND (NEQ FILLTYPE READC.FT) (fetch READSA
of #CURRENTRDTBL#))) (CONTROLTON (fetch CONTROLFLG of \PRIMTERMTABLE)) (TEXOBJ (fetch (TEXTSTREAM
TEXTOBJ) of \TERM.OFD)) (SEL (fetch SEL of TEXOBJ)) (WINDOW (fetch \WINDOW of TEXOBJ)) (LINES (fetch
LINES of TEXOBJ)) RSNX TCLASS C RAISEDCHAR PEEKEDECHOED TTYWINDOW FN TCH INSCH# CHNO ADDEDEOL) (* *
STARTINGEOF is the beginning of the current text being entered which gets returned to READ so that
\TEXEC.TEXTBOUT knows where to output any text including ↑T) (* * TCLASS is terminal syntax class,
RSNX is read-table code) (TEXTPROP TEXOBJ (QUOTE STARTINGEOF) (fetch TEXTLEN of TEXOBJ)) (* Keep
STARTINGEOF in sync) (COND ((SETQ C (fetch (LINEBUFFER PEEKEDCHAR) of \LINEBUF.OFD)) (* Account for
peeked character) (SETQ C (IABS C)) (* The peeked char may be negative because it was BIN'ed earlier.
Make sure it is positive.) (replace (LINEBUFFER PEEKEDCHAR) of \LINEBUF.OFD with NIL) (SETQ
PEEKEDECHOED T) (SETQ RAISEDCHAR (\RAISECHAR C)) (COND ((EQ FILLTYPE READ.FT) (TEXTPROP TEXOBJ (QUOTE
STARTINGEOF) (SUB1 (TEXTPROP TEXOBJ (QUOTE STARTINGEOF)))))) (* Backup one in textstream to start the
input before the peeked and echoed character if doing a READ))) (COND ((AND CONTROLTON (EQ FILLTYPE
READC.FT)) (TEXEC.INSERTCHAR TEXOBJ C) (* Read single char and check for echoing) (GO EXIT))) (* If in
CONTROL T mode and reading a single char) (COND (C (GO NEXTTCLASS))) NEXT (SETQ C (TEXEC.GETKEY
TEXOBJ)) (* read next character from keyboard) NEXTTCLASS (SETQ TCLASS (fetch TERMCLASS of (\SYNCODE
\PRIMTERMSA (SETQ RAISEDCHAR (\RAISECHAR C))))) REDO (* (while (OR TEDIT.SELPENDING (fetch
EDITOPACTIVE of TEXOBJ)) do (* Don't do anything while he's selecting or one of the lock-out ops is
active.) (BLOCK))) (* (replace EDITOPACTIVE of TEXOBJ with T)) (TEXEC.FILLBUFFER.CHSELPENDING TEXOBJ)
(* Check for SHIFT/COPY/MOVE active) (* * Handle Terminal Class characters) (SELECTQ (
TEXEC.FILLBUFFER.TCLASS TEXOBJ SEL) (NEXT (GO NEXT)) (EXIT (GO EXIT)) NIL) (* * Here if it isn't a
terminal class.) (COND (PEEKEDECHOED (SETQ PEEKEDECHOED NIL)) (T (TEXEC.INSERTCHAR TEXOBJ C))) (AND (
EQ FILLTYPE READC.FT) (GO NEXT)) (COND ((EQ ESCAPE.RC (SETQ RSNX (\SYNCODE RTBLSA RAISEDCHAR))) (COND
((EQ CTRLV.TC (SETQ TCLASS (fetch TERMCLASS of (\SYNCODE \PRIMTERMSA (SETQ RAISEDCHAR (
TEXEC.INSERTCHAR TEXOBJ)))))) (GO REDO))) (GO NEXT))) (SELECTC FILLTYPE (RATOM/RSTRING.FT (COND ((AND
CONTROLTON (fetch STOPATOM of RSNX)) (GO EXIT)))) (READ.FT (SELECTC RSNX ((LIST RIGHTPAREN.RC
RIGHTBRACKET.RC) (TEXEC.FLASHCARET TEXOBJ (TEXEC.PARENMATCH TEXOBJ RSNX))) NIL) (COND ((AND CONTROLTON
(ZEROP (fetch (LINEBUFFER LBRKCOUNT) of \LINEBUF.OFD)) (ZEROP (fetch (LINEBUFFER LPARCOUNT) of
\LINEBUF.OFD)) (fetch STOPATOM of RSNX) (SELECTC RSNX ((LIST LEFTPAREN.RC LEFTBRACKET.RC
RIGHTBRACKET.RC RIGHTPAREN.RC) NIL) (STRINGDELIM.RC (COND ((fetch (LINEBUFFER INSTRINGP) of
\LINEBUF.OFD) (replace (LINEBUFFER INSTRINGP) of \LINEBUF.OFD with NIL) T))) (NOT (fetch (LINEBUFFER
INSTRINGP) of \LINEBUF.OFD)))) (* READ is reading an atom. Return when atom ends, but also obey
bracket/paren exception noted on page 14.33 of manual.) (GO EXIT))) (COND ((TEXEC.EOTP TEXOBJ) (COND (
(fetch (STREAM REVALIDATEFLG) of \LINEBUF.OFD) (TEXEC.PARENCOUNT TEXOBJ) (* text needs recount of
parens/brackets))) (COND ((\INCPARENCOUNT RSNX) (* Parens balance--throw the carriage if the closing
paren or bracket character was not a CR, and if FLG argument of READ is NIL. (We know we are under a
READ call because of FILLTYPE)) (* copy the chars from the textstream into the linebuffer) (
TEXEC.TEXTSTREAM.TO.LINEBUF TEXOBJ (TEXTPROP TEXOBJ (QUOTE STARTINGEOF)) \LINEBUF.OFD FILLTYPE) (AND (
EQ FILLTYPE READ.FT) (TEXEC.FIX? TEXOBJ \LINEBUF.OFD) (GO NEXT)) (* If it was a PA FIX command handle
it, and allow editing) (* now reset the new STARTINGEOF to start at the end of the text) (TEXTPROP
TEXOBJ (QUOTE STARTINGEOF) (fetch TEXTLEN of TEXOBJ)) (\CLOSELINE) (AND (NEQ RAISEDCHAR (CHARCODE EOL)
) (NOT FLG) (\OUTCHAR \TERM.OFD (CHARCODE EOL))) (* \CLOSELINE first so dribble happens before EOL) (
RETURN)) ((EQ IMMEDIATE.RMW (fetch WAKEUP of RSNX)) (* Immediate read-macro) (RETURN)))))) (SHOULDNT))
(GO NEXT) EXIT (COND ((AND (EQ FILLTYPE READ.FT) (EQ RAISEDCHAR (CHARCODE EOL)) (EQ (SUB1 (fetch
TEXTLEN of TEXOBJ)) (TEXTPROP TEXOBJ (QUOTE STARTINGEOF)))) (\LINEBUFBOUT \LINEBUF.OFD (CAR (GETSYNTAX
(QUOTE RIGHTBRACKET) #CURRENTRDTBL#))) (* If doing a READ, force a lone CR to terminate the READ by
handing back a RIGHTBRACKET into the LINEBUFFER)) (T (TEXEC.TEXTSTREAM.TO.LINEBUF TEXOBJ (TEXTPROP
TEXOBJ (QUOTE STARTINGEOF)) \LINEBUF.OFD FILLTYPE))) (TEXTPROP TEXOBJ (QUOTE STARTINGEOF) (fetch
TEXTLEN of TEXOBJ)) (AND (EQ FILLTYPE READ.FT) (TEXEC.FIX? TEXOBJ \LINEBUF.OFD) (GO NEXT)) (* If it
was a PA FIX command handle it, and allow editing) (\CLOSELINE) (AND (NEQ RAISEDCHAR (CHARCODE EOL)) (
NOT CONTROLTON) (NOT FLG) (\OUTCHAR \TERM.OFD (CHARCODE EOL)))))))
)
(DECLARE: EVAL@COMPILE
(RPAQQ RATOM/RSTRING.FT 1)
(RPAQQ READ.FT 0)
(RPAQQ READC.FT 2)
(CONSTANTS RATOM/RSTRING.FT READ.FT READC.FT)
)
(DECLARE: EVAL@COMPILE
(PUTPROPS \RAISECHAR MACRO (OPENLAMBDA (C) (COND ((AND (fetch RAISEFLG of \PRIMTERMTABLE) (IGEQ C (
CHARCODE a)) (ILEQ C (CHARCODE z))) (IDIFFERENCE C 32)) (T C))))
(PUTPROPS \LINEBUFBOUT MACRO (OPENLAMBDA (STRM CHAR) (\BOUT STRM (\CHARSET CHAR)) (\BOUT STRM (
\CHAR8CODE CHAR))))
)
(MOVD (QUOTE TEXEC.FILLBUFFER.FIX) (QUOTE TEXEC.FILLBUFFER))
(UNMARKASCHANGED (QUOTE TEXEC.FILLBUFFER) (QUOTE FNS))
(PUTPROPS TEXECFIXES COPYRIGHT ("Quintus Computer Systems, Inc" 1986))
(DECLARE: DONTCOPY
(FILEMAP (NIL (651 6853 (TEXEC.FILLBUFFER.FIX 661 . 6851)))))
STOP