1: /* $Header: term.h,v 7.0.1.2 86/12/12 17:05:15 lwall Exp $ */
   2: 
   3: /* $Log:	term.h,v $
   4:  * Revision 7.0.1.2  86/12/12  17:05:15  lwall
   5:  * Baseline for net release.
   6:  *
   7:  * Revision 7.0.1.1  86/10/16  10:53:33  lwall
   8:  * Added Damage.  Fixed random bugs.
   9:  *
  10:  * Revision 7.0  86/10/08  15:14:07  lwall
  11:  * Split into separate files.  Added amoebas and pirates.
  12:  *
  13:  */
  14: 
  15: /* warp will still work without the following, but may get ahead at low speed */
  16: #ifdef TIOCOUTQ     /* chars left in output queue */
  17: #define output_pending() (ioctl(1, TIOCOUTQ, &iocount),iocount)
  18: #endif
  19: 
  20: /* If some of the following look something like curses calls, it is because
  21:  * warp used to use curses but doesn't now.  Warp was neither as efficient nor
  22:  * as portable with curses, and since the program had to cheat on curses all
  23:  * over the place anyway, we ripped it out.
  24:  */
  25: #define setimage(of,to) (mvaddch(of->posy+1,of->posx*2,of->image=(to)))
  26: 
  27: #define mvaddch(y,x,ch) move((y),(x),(ch))
  28: /* #define addch(ch) (tmpchr=(ch), write(1,&tmpchr,1), real_x++) */
  29: #define mvaddc(y,x,ch) move((y),(x),(ch))
  30: #define addc(ch) (write(1,&(ch),1), real_x++)
  31: #define addspace() (write(1," ",1), real_x++)
  32: #define mvaddstr(y,x,s) (move((y),(x),0), tmpstr = (s), \
  33:      tmplen = strlen(tmpstr), write(1, tmpstr, tmplen), real_x += tmplen)
  34: 
  35: EXT int tmplen;
  36: EXT char *tmpstr;
  37: /* EXT char tmpchr; */
  38: 
  39: /* The following macros are like the pseudo-curses macros above, but do
  40:  * certain amount of controlled output buffering.
  41:  *
  42:  * NOTE: a beg_qwrite()..end_qwrite() sequence must NOT contain a cursor
  43:  * movement (move), because the move() routine uses beg_qwrite()..end_qwrite()
  44:  * itself.
  45:  */
  46: 
  47: #define beg_qwrite() (maxcmstring = cmbuffer)
  48: #ifdef vax
  49: #define qwrite() asm("movc3 _gfillen,_filler,*_maxcmstring"); maxcmstring += gfillen
  50: #else
  51: #define qwrite() (movc3(gfillen,filler,maxcmstring), maxcmstring += gfillen)
  52: #endif
  53: #define qaddc(ch) (*maxcmstring++ = (ch), real_x++)
  54: #define qaddch(ch) (*maxcmstring++ = (ch), real_x++)
  55: #define qaddspace() (*maxcmstring++ = ' ', real_x++)
  56: #define end_qwrite() (write(1,cmbuffer,maxcmstring-cmbuffer))
  57: 
  58: /* setting a ??size to infinity forces cursor addressing in that direction */
  59: 
  60: EXT int CMsize;
  61: EXT int BCsize INIT(1);
  62: EXT int DOsize INIT(1000);
  63: EXT int UPsize INIT(1000);
  64: EXT int NDsize INIT(1000);
  65: 
  66: EXT int charsperhalfsec;
  67: 
  68: EXT int real_y INIT(-100);
  69: EXT int real_x INIT(-100);
  70: 
  71: #ifdef DOINIT
  72: char filler[] = {0,'\b',0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
  73: #else
  74: EXT char filler[];
  75: #endif
  76: 
  77: EXT char *bsptr INIT(filler+1);
  78: 
  79: EXT char term[12];
  80: 
  81: EXT char gfillen INIT(25);
  82: 
  83: EXT char *maxcmstring;
  84: EXT char cmbuffer[512];
  85: 
  86: #define BREAKCH '\0'
  87: 
  88: EXT char INTRCH INIT('\03');
  89: 
  90: #ifdef PUSHBACK
  91:     EXT char circlebuf[PUSHSIZE];
  92:     EXT int nextin INIT(0);
  93:     EXT int nextout INIT(0);
  94: #   ifdef PENDING
  95: #	ifdef FIONREAD
  96:         EXT long iocount INIT(0);
  97: #	    ifndef lint
  98: #		define input_pending() (nextin!=nextout || \
  99: (ioctl(0, FIONREAD, &iocount),(int)iocount))
 100: #	    else
 101: #		define input_pending() bizarre
 102: #	    endif /* lint */
 103: #	else /* FIONREAD */
 104:         int circfill();
 105: #	    ifdef RDCHK
 106: #		ifndef lint
 107: #		    define input_pending() rdchk(0)
 108: #		else /* lint */
 109: #		    define input_pending() bizarre
 110: #		endif /* lint */
 111: #	    else /* RDCHK */
 112: #		ifndef O_NDELAY  /* assert O_NDELAY */
 113:             ??? PENDING isn't defined correctly in warp.h
 114: #		endif
 115:         EXT int devtty INIT(0);
 116: #		ifndef lint
 117: #		    define input_pending() (nextin!=nextout || circfill())
 118: #		else
 119: #		    define input_pending() bizarre
 120: #		endif /* lint */
 121: #	    endif /* RDCHK */
 122: #	endif /* FIONREAD */
 123: #   else /* PENDING */
 124:     ??? warp won't work without PENDING
 125: #	ifndef lint
 126: #	    define input_pending() (nextin!=nextout)
 127: #	else
 128: #	    define input_pending() bizarre
 129: #	endif /* lint */
 130: #   endif /* PENDING */
 131: #else /* PUSHBACK */
 132: #   ifdef PENDING
 133: #	ifdef FIONREAD /* must have FIONREAD or O_NDELAY for input_pending() */
 134: #	    define read_tty(addr,size) read(0,addr,size)
 135: #	    ifndef lint
 136: #		define input_pending() (ioctl(0, FIONREAD, &iocount), \
 137: (int)iocount)
 138: #	    else
 139: #		define input_pending() bizarre
 140: #	    endif /* lint */
 141:         EXT long iocount INIT(0);
 142: #	else /* FIONREAD */
 143: #	    ifdef RDCHK       /* actually, they can have rdchk() too */
 144: #	    define read_tty(addr,size) read(0,addr,size)
 145: #		ifndef lint
 146: #		    define input_pending() rdchk(0)
 147: #		else /* lint */
 148: #		    define input_pending() bizarre
 149: #		endif /* lint */
 150: #	    else /* RDCHK */
 151: #		ifndef O_NDELAY  /* assert O_NDELAY */
 152:             ??? PENDING isn't defined correctly in warp.h
 153: #		endif
 154:         EXT int devtty INIT(0);
 155:         EXT bool is_input INIT(FALSE);
 156:         EXT char pending_ch INIT(0);
 157: #		ifndef lint
 158: #		    define input_pending() (is_input || \
 159: (is_input=read(devtty,&pending_ch,1)))
 160: #		else
 161: #		    define input_pending() bizarre
 162: #		endif /* lint */
 163: #	    endif /* RDCHK */
 164: #	endif /* FIONREAD */
 165: #   else /* PENDING */
 166:     ??? warp won't work without PENDING
 167: #	define read_tty(addr,size) read(0,addr,size)
 168: #	define input_pending() (FALSE)
 169: #   endif /* PENDING */
 170: #endif /* PUSHBACK */
 171: 
 172: /* stuff wanted by terminal mode diddling routines */
 173: 
 174: #ifdef TERMIO
 175: EXT struct termio _tty, _oldtty;
 176: #else
 177: EXT struct sgttyb _tty;
 178: EXT int _res_flg INIT(0);
 179: #endif
 180: 
 181: EXT int _tty_ch INIT(2);
 182: EXT bool bizarre INIT(FALSE);           /* do we need to restore terminal? */
 183: 
 184: /* terminal mode diddling routines */
 185: 
 186: #ifdef TERMIO
 187: 
 188: #define raw() ((bizarre=1),_tty.c_lflag &=~ISIG,_tty.c_cc[VMIN] = 1,ioctl(_tty_ch,TCSETAF,&_tty))
 189: #define noraw() ((bizarre=1),_tty.c_lflag |= ISIG,_tty.c_cc[VEOF] = CEOF,ioctl(_tty_ch,TCSETAF,&_tty))
 190: #define crmode() ((bizarre=1),_tty.c_lflag &=~ICANON,_tty.c_cc[VMIN] = 1,ioctl(_tty_ch,TCSETAF,&_tty))
 191: #define nocrmode() ((bizarre=1),_tty.c_lflag |= ICANON,_tty.c_cc[VEOF] = CEOF,ioctl(_tty_ch,TCSETAF,&_tty))
 192: #define echo()   ((bizarre=1),_tty.c_lflag |= ECHO, ioctl(_tty_ch, TCSETAW, &_tty))
 193: #define noecho() ((bizarre=1),_tty.c_lflag &=~ECHO, ioctl(_tty_ch, TCSETAW, &_tty))
 194: #define nl()     ((bizarre=1),_tty.c_iflag |= ICRNL,_tty.c_oflag |= ONLCR,ioctl(_tty_ch, TCSETAW, &_tty))
 195: #define nonl()   ((bizarre=1),_tty.c_iflag &=~ICRNL,_tty.c_oflag &=~ONLCR,ioctl(_tty_ch, TCSETAW, &_tty))
 196: #define savetty() (ioctl(_tty_ch, TCGETA, &_oldtty),ioctl(_tty_ch, TCGETA, &_tty))
 197: #define resetty() ((bizarre=0),ioctl(_tty_ch, TCSETAF, &_oldtty))
 198: #define unflush_output()
 199: 
 200: #else
 201: 
 202: #define raw()    ((bizarre=1),_tty.sg_flags|=RAW, stty(_tty_ch,&_tty))
 203: #define noraw()  ((bizarre=1),_tty.sg_flags&=~RAW,stty(_tty_ch,&_tty))
 204: #define crmode() ((bizarre=1),_tty.sg_flags |= CBREAK, stty(_tty_ch,&_tty))
 205: #define nocrmode() ((bizarre=1),_tty.sg_flags &= ~CBREAK,stty(_tty_ch,&_tty))
 206: #define echo()   ((bizarre=1),_tty.sg_flags |= ECHO, stty(_tty_ch, &_tty))
 207: #define noecho() ((bizarre=1),_tty.sg_flags &= ~ECHO, stty(_tty_ch, &_tty))
 208: #define nl()     ((bizarre=1),_tty.sg_flags |= CRMOD,stty(_tty_ch, &_tty))
 209: #define nonl()   ((bizarre=1),_tty.sg_flags &= ~CRMOD, stty(_tty_ch, &_tty))
 210: #define savetty() (gtty(_tty_ch, &_tty), _res_flg = _tty.sg_flags)
 211: #define resetty() ((bizarre=0),_tty.sg_flags = _res_flg, stty(_tty_ch, &_tty))
 212: #endif /* TERMIO */
 213: 
 214: #ifdef TIOCSTI
 215: #ifdef lint
 216: #define forceme(c) ioctl(_tty_ch,TIOCSTI,Null(long*))   /* ghad! */
 217: #else
 218: #define forceme(c) ioctl(_tty_ch,TIOCSTI,c) /* pass character in " " */
 219: #endif /* lint */
 220: #else
 221: #define forceme(c)
 222: #endif
 223: 
 224: /* termcap stuff */
 225: 
 226: /*
 227:  * NOTE: if you don't have termlib you'll have to define these strings,
 228:  *    the tputs routine, and the tgoto routine.
 229:  * The tgoto routine simply produces a cursor addressing string for a given
 230:  * x and y.  The 1st argument is a generic string to be interpreted.
 231:  * If you are hardwiring it you might just ignore the 1st argument.
 232:  * The tputs routine interprets any leading number as a padding factor, possibly
 233:  * scaled by the number of lines (2nd argument), puts out the string (1st arg)
 234:  * and the padding using the routine specified as the 3rd argument.
 235:  */
 236: 
 237: #ifdef HAVETERMLIB
 238: EXT char *BC INIT(Nullch);      /* backspace character */
 239: EXT char *UP INIT(Nullch);      /* move cursor up one line */
 240: EXT char *myUP;
 241: EXT char *ND INIT(Nullch);      /* non-destructive cursor right */
 242: EXT char *myND;
 243: EXT char *DO INIT(Nullch);      /* move cursor down one line */
 244: EXT char *myDO;
 245: EXT char *CR INIT(Nullch);      /* get to left margin, somehow */
 246: EXT char *VB INIT(Nullch);      /* visible bell */
 247: EXT char *CL INIT(Nullch);      /* home and clear screen */
 248: EXT char *CE INIT(Nullch);      /* clear to end of line */
 249: EXT char *CM INIT(Nullch);      /* cursor motion -- PWP */
 250: EXT char *HO INIT(Nullch);      /* home cursor -- PWP */
 251: EXT char *CD INIT(Nullch);      /* clear to end of display -- PWP */
 252: EXT char *SO INIT(Nullch);      /* begin standout mode */
 253: EXT char *SE INIT(Nullch);      /* end standout mode */
 254: EXT int SG INIT(0);     /* blanks left by SO and SE */
 255: EXT char *US INIT(Nullch);      /* start underline mode */
 256: EXT char *UE INIT(Nullch);      /* end underline mode */
 257: EXT char *UC INIT(Nullch);      /* underline a character, if that's how it's done */
 258: EXT int UG INIT(0);     /* blanks left by US and UE */
 259: EXT bool AM INIT(FALSE);        /* does terminal have automatic margins? */
 260: EXT bool XN INIT(FALSE);        /* does it eat 1st newline after automatic wrap? */
 261: EXT char PC INIT(0);        /* pad character for use by tputs() */
 262: EXT short ospeed INIT(0);   /* terminal output speed, for use by tputs() */
 263: EXT int LINES INIT(0), COLS INIT(0);    /* size of screen */
 264: EXT int just_a_sec INIT(960);           /* 1 sec at current baud rate */
 265:                     /* (number of nulls) */
 266: EXT char ERASECH;       /* rubout character */
 267: EXT char KILLCH;        /* line delete character */
 268: 
 269: /* define a few handy macros */
 270: 
 271: #define clear() (do_tc(CL,LINES),real_y=real_x=0)
 272: #define erase_eol() do_tc(CE,1)
 273: #define backspace() (do_tc(BC,0),real_x--)
 274: #define clear_rest() do_tc(CD,LINES)
 275: #define underline() do_tc(US,1)
 276: #define un_underline() do_tc(UE,1)
 277: #define underchar() do_tc(UC,0)
 278: #define standout() do_tc(SO,1)
 279: #define un_standout() do_tc(SE,1)
 280: #define up_line() do_tc(UP,1)
 281: #define carriage_return() do_tc(CR,1)
 282: #define dingaling() do_tc(VB,1)
 283: #else
 284:   ????????      /* up to you */
 285: #endif
 286: 
 287: void    term_init();
 288: void    term_set();
 289: #ifdef PUSHBACK
 290: void    pushchar();
 291: void    mac_init();
 292: void    mac_line();
 293: #endif
 294: void    eat_typeahead();
 295: void    settle_down();
 296: #ifndef read_tty
 297:     int     read_tty();
 298: #endif
 299: void    getcmd();
 300: 
 301: int read_nd();
 302: void page();
 303: void move();
 304: void do_tc();
 305: int comp_tc();
 306: void helper();
 307: void rewrite();
 308: char cmstore();

Defined variables

BC defined in line 238; used 8 times
BCsize defined in line 61; used 5 times
CD defined in line 251; used 2 times
CE defined in line 248; used 2 times
CL defined in line 247; used 2 times
CM defined in line 249; used 4 times
CMsize defined in line 60; used 2 times
COLS defined in line 263; used 4 times
CR defined in line 245; used 6 times
DO defined in line 243; used 6 times
DOsize defined in line 62; used 7 times
ERASECH defined in line 266; used 2 times
HO defined in line 250; used 1 times
KILLCH defined in line 267; used 2 times
LINES defined in line 263; used 6 times
ND defined in line 241; used 3 times
NDsize defined in line 64; used 7 times
PC defined in line 261; used 3 times
SE defined in line 253; used 3 times
SG defined in line 254; used 3 times
SO defined in line 252; used 3 times
UC defined in line 257; used 4 times
UE defined in line 256; used 3 times
UG defined in line 258; used 3 times
UP defined in line 239; used 7 times
UPsize defined in line 63; used 7 times
US defined in line 255; used 5 times
VB defined in line 246; used 4 times
_oldtty defined in line 175; used 2 times
_res_flg defined in line 178; used 2 times
_tty defined in line 177; used 50 times
_tty_ch defined in line 181; used 24 times
bsptr defined in line 77; used 2 times
charsperhalfsec defined in line 66; used 3 times
circlebuf defined in line 91; used 6 times
cmbuffer defined in line 84; used 13 times
devtty defined in line 154; used 5 times
filler defined in line 74; used 27 times
gfillen defined in line 81; used 4 times
iocount defined in line 141; used 6 times
just_a_sec defined in line 264; used 16 times
maxcmstring defined in line 83; used 12 times
myDO defined in line 244; used 5 times
myND defined in line 242; used 4 times
myUP defined in line 240; used 4 times
nextin defined in line 92; used 16 times
nextout defined in line 93; used 14 times
ospeed defined in line 262; used 13 times
pending_ch defined in line 156; used 3 times
real_x defined in line 69; used 11 times
real_y defined in line 68; used 4 times
term defined in line 79; used 4 times
tmplen defined in line 35; used 3 times
  • in line 33(3)
tmpstr defined in line 36; used 3 times

Defined macros

BREAKCH defined in line 86; used 6 times
addc defined in line 30; never used
addspace defined in line 31; used 1 times
backspace defined in line 273; never used
carriage_return defined in line 281; never used
clear_rest defined in line 274; never used
dingaling defined in line 282; used 1 times
echo defined in line 206; never used
erase_eol defined in line 272; used 1 times
forceme defined in line 221; never used
input_pending defined in line 168; used 3 times
mvaddc defined in line 29; used 5 times
mvaddstr defined in line 32; used 88 times
nl defined in line 208; never used
nocrmode defined in line 205; never used
nonl defined in line 209; used 4 times
noraw defined in line 203; never used
output_pending defined in line 17; used 2 times
qaddc defined in line 53; used 9 times
qaddch defined in line 54; used 6 times
qaddspace defined in line 55; used 4 times
qwrite defined in line 51; used 23 times
raw defined in line 202; used 4 times
read_tty defined in line 167; used 5 times
savetty defined in line 210; used 2 times
standout defined in line 278; never used
un_standout defined in line 279; never used
un_underline defined in line 276; never used
underchar defined in line 277; never used
underline defined in line 275; never used
unflush_output defined in line 198; never used
up_line defined in line 280; never used

Usage of this include

Last modified: 1987-06-19
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 4135
Valid CSS Valid XHTML 1.0 Strict