home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
OS/2 Shareware BBS: 3 Comm
/
03-Comm.zip
/
mincom15.zip
/
window.h
< prev
next >
Wrap
C/C++ Source or Header
|
1993-10-14
|
5KB
|
228 lines
/*
* This file is part of the Minicom Communications Program,
* written by Miquel van Smoorenburg 1991/1992/1993.
*
* Window Header File.
*
* 1991/10/09 Miquel van Smoorenburg.
*/
/*
* One character is contained in a "ELM"
*/
typedef struct _elm {
char value;
char attr;
char color;
} ELM;
/*
* Control struct of a window
*/
typedef struct _win {
int x1, y1, x2, y2; /* Coordinates */
int sy1, sy2; /* Scrolling region */
int xs, ys; /* x and y size */
char border; /* type of border */
char cursor; /* Does it have a cursor */
char attr; /* Current attribute of window */
char color; /* Current color of window */
char autocr; /* With '\n', do an automatic '\r' */
char doscroll; /* Automatically scroll up */
char wrap; /* Wrap around edge */
char direct; /* Direct write to screen ? */
short curx, cury; /* current x and y */
char o_cursor;
short o_curx;
short o_cury;
char o_attr;
char o_color; /* Position & attributes before window was opened */
ELM *map; /* Map of contents */
ELM *histbuf; /* History buffer. */
int histlines; /* How many lines we keep in the history buffer */
int histline; /* Current line in the history buffer. */
} WIN;
/*
* Stdwin is the whole screen
*/
extern WIN *stdwin; /* Whole screen */
extern int LINES, COLS; /* Size of sreen */
extern int usecolor; /* Use ansi color escape sequences */
extern int useattr; /* Use attributes (reverse, bold etc. ) */
extern int dirflush; /* Direct flush after write */
extern int literal; /* Literal pass-through of all characters? */
extern int w_init; /* Already initialized? */
/*
* Possible attributes.
*/
#define A_NORMAL 0
#define A_BLINK 1
#define A_BOLD 2
#define A_REVERSE 4
#define A_STANDOUT 8
#define A_UNDERLINE 16
#define A_ALTCHARSET 32
#define A_BLANK 64
/*
* Possible colors
*/
#define BLACK 0
#define RED 1
#define GREEN 2
#define YELLOW 3
#define BLUE 4
#define MAGENTA 5
#define CYAN 6
#define WHITE 7
#define COLATTR(fg, bg) (((fg) << 4) + (bg))
#define COLFG(ca) ((ca) >> 4)
#define COLBG(ca) ((ca) % 16)
/*
* Possible borders.
*/
#define BNONE 0
#define BSINGLE 1
#define BDOUBLE 2
/*
* Scrolling directions.
*/
#define S_UP 1
#define S_DOWN 2
/*
* Cursor types.
*/
#define CNONE 0
#define CNORMAL 1
/*
* Title Positions
*/
#define TLEFT 0
#define TMID 1
#define TRIGHT 2
/*
* For wselect.
*/
#define NIL_FUNLIST ((void (**)()) 0)
#define NIL_FUN ((void (*)()) 0)
#define MENU_END ((char *) 0)
#define CNULL ((char *)0)
#define NIL_WIN (WIN *) 0
/*
* Function prototypes.
*/
#ifndef _PROTO
# if __STDC__
# define _PROTO(fun, args) fun args
# else
# define _PROTO(fun, args) fun()
# endif
#endif
_PROTO( int getch, ( void ));
_PROTO(void wflush, ( void ));
_PROTO(WIN *wopen, ( int x1 , int y1 , int x2 , int y2 , int border ,
int attr , int fg , int bg , int direct , int hl , int rel ));
_PROTO(void wclose, ( WIN *win , int replace ));
_PROTO(void wleave, ( void ));
_PROTO(void wreturn, ( void ));
_PROTO(void wresize, (WIN *w, int x, int y ));
_PROTO(void wredraw, ( WIN *w , int newdirect ));
_PROTO(void wscroll, ( WIN *win , int dir ));
_PROTO(void wlocate, ( WIN *win , int x , int y ));
_PROTO(void wputc, ( WIN *win , int c ));
_PROTO(void wdrawelm, ( WIN *win, int y, ELM *e ));
_PROTO(void wputs, ( WIN *win , char *s ));
/* Should use stdarg et al. */
int wprintf();
_PROTO(void wbell, ( void ));
_PROTO(void wcursor, ( WIN *win , int type ));
_PROTO(void wtitle, ( WIN *w , int pos , char *s ));
_PROTO(void wcurbar, ( WIN *w , int y , int attr ));
_PROTO(int wselect, ( int x , int y , char **choices , void (**funlist)() ,
char *title , int attr , int fg , int bg ));
_PROTO(void wclrel, ( WIN *w ));
_PROTO(void wclreol, ( WIN *w ));
_PROTO(void wclrbol, ( WIN *w ));
_PROTO(void wclreos, ( WIN *w ));
_PROTO(void wclrbos, ( WIN *w ));
_PROTO(void winclr, ( WIN *w ));
_PROTO(void winsline, ( WIN *w ));
_PROTO(void wdelline, ( WIN *w ));
_PROTO(void winschar, ( WIN *w ));
_PROTO(void wdelchar, ( WIN *w ));
_PROTO(int wgets, ( WIN *win , char *s , int linemax, int totmax ));
_PROTO(void win_end, ( void ));
#ifdef BBS
_PROTO(int win_init, ( char *term, int lines ));
#else
_PROTO(int win_init, ( int fg , int bg , int attr ));
#endif
/*
* Some macro's that can be used as functions.
*/
#define wsetregion(w, z1, z2) (((w)->sy1=(w)->y1+(z1)),((w)->sy2=(w)->y1+(z2)))
#define wresetregion(w) ( (w)->sy1 = (w)->y1, (w)->sy2 = (w)->y2 )
#define wgetattr(w) ( (w)->attr )
#define wsetattr(w, a) ( (w)->attr = (a) )
#define wsetfgcol(w, fg) ( (w)->color = ((w)->color & 15) + ((fg) << 4))
#define wsetbgcol(w, bg) ( (w)->color = ((w)->color & 240) + (bg) )
#define wsetam(w) ( (w)->wrap = 1 )
#define wresetam(w) ( (w)->wrap = 0 )
/*
* Allright, now the macro's for our keyboard routines.
*/
#define K_BS 8
#define K_ESC 27
#define K_STOP 256
#define K_F1 257
#define K_F2 258
#define K_F3 259
#define K_F4 260
#define K_F5 261
#define K_F6 262
#define K_F7 263
#define K_F8 264
#define K_F9 265
#define K_F10 266
#define K_HOME 267
#define K_PGUP 268
#define K_UP 269
#define K_LT 270
#define K_RT 271
#define K_DN 272
#define K_END 273
#define K_PGDN 274
#define K_INS 275
#define K_DEL 276
#define NUM_KEYS 21
#define KEY_OFFS 256
#ifndef EOF
# define EOF ((int) -1)
#endif
#define K_ERA '\b'
#define K_KILL ((int) -2)
/* Internal structure. */
struct key {
char *cap;
char len;
};