-/* Copyright (c) 1979 Regents of the University of California */
+/* Copyright (c) 1981 Regents of the University of California */
+static char *sccsid = "@(#)ex_vput.c 7.2 %G%";
#include "ex.h"
#include "ex_tty.h"
#include "ex_vis.h"
* since we don't really know whats out there.
* Vigoto might decide (incorrectly) to do nothing.
*/
- if (DB)
- vgoto(WECHO, 0), vputp(CD ? CD : CE, 1);
- else
- vigoto(WECHO, 0), vclreol();
+ if (DB) {
+ vgoto(WECHO, 0);
+ vputp(CD ? CD : CE, 1);
+ } else {
+ if (XT) {
+ /*
+ * This code basically handles the t1061
+ * where positioning at (0, 0) won't work
+ * because the terminal won't let you put
+ * the cursor on it's magic cookie.
+ *
+ * Should probably be XS above, or even a
+ * new X? glitch, but right now t1061 is the
+ * only terminal with XT.
+ */
+ vgoto(WECHO, 0);
+ vputp(DL, 1);
+ } else {
+ vigoto(WECHO, 0);
+ vclreol();
+ }
+ }
splitw = 0;
didphys = 1;
}
*/
vgotab()
{
- register int i = (LINE(vcline) - destline) * WCOLS + destcol;
+ register int i = tabcol(destcol, value(TABSTOP)) - destcol;
do
(*Outchar)(QUOTE);
- while (++i % value(TABSTOP));
+ while (--i);
}
/*
register int i;
char temp[TUBECOLS];
- if (vtube[p] == cp)
+ if (p < 0 || vtube[p] == cp)
return;
for (i = ZERO; i <= WECHO; i++)
if (vtube[i] == cp) {
* to make life simpler.
*/
vinschar(c)
- char c;
+ int c; /* mjm: char --> int */
{
register int i;
register char *tp;
* use QUOTE here since we really need to print blanks.
* QUOTE|' ' is the representation of this.
*/
- inssiz = value(TABSTOP) - inscol % value(TABSTOP);
+ inssiz = tabcol(inscol, value(TABSTOP)) - inscol;
c = ' ' | QUOTE;
} else
inssiz = 1;
* line is now deeper. We then do the shift
* implied by the insertion.
*/
- if (inssiz >= doomed + value(TABSTOP) - tabstart % value(TABSTOP)) {
+ if (inssiz >= doomed + tabcol(tabstart, value(TABSTOP)) - tabstart) {
if (IN)
vrigid();
vneedpos(value(TABSTOP));
e = vglitchup(vcline, d);
vigoto(e, 0); vclreol();
if (dosync) {
+ int (*Ooutchar)() = Outchar;
Outchar = vputchar;
vsync(e + 1);
- Outchar = vinschar;
+ Outchar = Ooutchar;
}
} else {
vup1();
* Now do the insert of the characters (finally).
*/
viin(c)
- char c;
+ int c; /* mjm: char --> int */
{
register char *tp, *up;
register int i, j;
* CONCEPT braindamage in early models: after a wraparound
* the next newline is eaten. It's hungry so we just
* feed it now rather than worrying about it.
+ * Fixed to use return linefeed to work right
+ * on vt100/tab132 as well as concept.
*/
- if (XN && outcol % WCOLS == 0)
+ if (XN && outcol % WCOLS == 0) {
+ vputc('\r');
vputc('\n');
+ }
}
}
}
tracec(c)
- char c;
+ int c; /* mjm: char --> int */
{
if (!techoin)
trubble = 1;
if (c == ESCAPE)
fprintf(trace, "$");
+ else if (c & QUOTE) /* mjm: for 3B (no sign extension) */
+ fprintf(trace, "~%c", ctlof(c&TRIM));
else if (c < ' ' || c == DELETE)
fprintf(trace, "^%c", ctlof(c));
else