Annotation of 43BSDReno/games/warp/term.h, revision 1.1.1.1

1.1       root        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();
                    309: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.