AUSAM/source/ded/itt.c
#include "ded.h"
#include "char.h"
/* table of characters for input (INMODE) mode */
char ictab[] {
/* 000 - 007, null - ^G */
IGN,WLEFT,WRIGHT,WERASE,WRUBOUT,HEADERASE,TAILERASE,IGN,
/* 010 - 017, ^H - ^O */
LEFT,TAB,NL,IGN,IGN,CR,IGN,IGN,
/* 020 - 027, ^P - ^W */
IGN,IGN,CERASE,IGN,IGN,RIGHT,IGN,IGN,
/* 030 - 037, ^X - ^_ */
IGN,IGN,UP,MODEitoe,CONTROL,CHMODE,SPECIAL,DOWN,
SPACE, ONE, ONE, ONE, ONE, ONE, ONE, ONE,
ONE, ONE, ONE, ONE, ONE, ONE, ONE, ONE,
ONE, ONE, ONE, ONE, ONE, ONE, ONE, ONE,
ONE, ONE, ONE, ONE, ONE, ONE, ONE, ONE,
ONE, ONE, ONE, ONE, ONE, ONE, ONE, ONE,
ONE, ONE, ONE, ONE, ONE, ONE, ONE, ONE,
ONE, ONE, ONE, ONE, ONE, ONE, ONE, ONE,
ONE, ONE, ONE, ONE, ONE, ONE, ONE, ONE,
TWO, ONE, ONE, ONE, ONE, ONE, ONE, ONE,
ONE, ONE, ONE, ONE, ONE, ONE, ONE, ONE,
ONE, ONE, ONE, ONE, ONE, ONE, ONE, ONE,
ONE, ONE, ONE, TWO, TWO, TWO, TWO, RUBOUT,
};
/* table of characters for edit (EDMODE) mode. Much the same
* as ictab, except for MODEetoi (replaces MODEitoe, naturally),
* and the absence of UP or DOWN. CR or LF are also MODEetoi.
*/
char ectab[] {
/* 000 - 007, null - ^G */
IGN,WLEFT,WRIGHT,WERASE,WRUBOUT,HEADERASE,TAILERASE,IGN,
/* 010 - 017, ^H - ^O */
LEFT, TAB, MODEetoi, IGN, IGN, MODEetoi, IGN, IGN,
/* 020 - 027, ^P - ^W */
IGN,IGN,CERASE,IGN,IGN,RIGHT,IGN,IGN,
/* 030 - 037, ^X - ^_ */
IGN,IGN,IGN,MODEetoi,CONTROL,CHMODE,SPECIAL,IGN,
SPACE, ONE, ONE, ONE, ONE, ONE, ONE, ONE,
ONE, ONE, ONE, ONE, ONE, ONE, ONE, ONE,
ONE, ONE, ONE, ONE, ONE, ONE, ONE, ONE,
ONE, ONE, ONE, ONE, ONE, ONE, ONE, ONE,
ONE, ONE, ONE, ONE, ONE, ONE, ONE, ONE,
ONE, ONE, ONE, ONE, ONE, ONE, ONE, ONE,
ONE, ONE, ONE, ONE, ONE, ONE, ONE, ONE,
ONE, ONE, ONE, ONE, ONE, ONE, ONE, ONE,
TWO, ONE, ONE, ONE, ONE, ONE, ONE, ONE,
ONE, ONE, ONE, ONE, ONE, ONE, ONE, ONE,
ONE, ONE, ONE, ONE, ONE, ONE, ONE, ONE,
ONE, ONE, ONE, TWO, TWO, TWO, TWO, RUBOUT,
};
/* convert those characters which cannot be printed or
* typed on an ITT (CURSES)
*/
set_modifier(c)
char c;
{ register char rc, rcm;
rc = c; rcm = c_MODIFY;
if (rcm != 0)
ictab[rcm] = ectab[rcm] = ONE;
if (rc == 0)
{ two_to_one(ictab); two_to_one(ectab); }
else
if (ictab[rc] == ONE && ectab[rc] == ONE)
ictab[rc] = ectab[rc] = MODIFY;
else editerror("invalid modifier character %o", c);
c_MODIFY = rc;
}
/* remove all mention of modifier character */
two_to_one(tab)
char *tab;
{ register int i;
for (i=0; i<=127; i++)
if (tab[i]==TWO) tab[i] = ONE;
}
char unmodify(ch)
char ch;
{ register char c;
c= ch;
return (c=='{'?'(':
c=='}'?')':
c=='|'?'!':
c=='~'?'^':
c=='`'?'\'':
c);
}
char modify(ch)
char ch;
{ register char c;
c=ch;
return (c=='('?'{':
c==')'?'}':
c=='!'?'|':
c=='^'?'~':
c=='\''?'`':
c);
}
/* move cursor with minimum of fuss - this procedure is
* only called from fixpos(), and then only when the cursor
* needs to be moved
*/
move(srow, scol)
int srow, scol;
{ register int n_rows, n_cols;
int ncr;
register char *rp;
n_rows = srow - real_c.row;
n_cols = scol - real_c.col;
ncr = scol+1;
if ( n_rows>=0 && ((n_cols>=0 && n_cols<=ncr) ? n_rows+n_cols<=3 :
n_rows+ncr<=3))
{ if (n_cols<0 || ncr<n_cols)
{ ttyout(c_CR); real_c.col = 0; n_cols = scol; }
rp = rowmap[real_c.row]+real_c.col;
while (n_cols-- > 0)
{ ttyout(*rp++); real_c.col++; }
while (n_rows-- > 0)
{ ttyout(c_NL); real_c.row++; }
}
else
if (ttytype == itt)
{ /* ^K, row+33, col+33 */
ttyout(c_POSITION);
ttyout( (real_c.row=srow) + 33);
ttyout( (real_c.col=scol) + 33);
}
else
if (ttytype == hazeltine)
{ /* tilde, DC1, column, row */
ttyout(c_LEADIN); ttyout(021);
ttyout( (real_c.col=scol) + (scol<=30 ? 96 : 0));
ttyout( (real_c.row=srow) + 96);
}
else
if (ttytype == VC404)
{ /* ctrl P row+32 col+32 */
ttyout('\020');
ttyout((real_c.row=srow) + 32);
ttyout((real_c.col=scol) + 32);
}
else
if (ttytype == T1061)
{ /* esc Y row+32 col+32 */
ttyout('\033');
ttyout('Y');
ttyout((real_c.row=srow) + 32);
ttyout((real_c.col=scol) + 32);
}
else editerror("tty type not set up (move)");
}
complain()
{ if (ringing) ttyout(c_BELL);
ttyflush();
}