home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
GEMini Atari
/
GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso
/
zip
/
mint
/
atarimgr.lzh
/
LIB
/
TERM.H
< prev
next >
Wrap
C/C++ Source or Header
|
1990-10-20
|
16KB
|
553 lines
/* Copyright (c) 1987 Bellcore
* All Rights Reserved
* Permission is granted to copy or use this program, EXCEPT that it
* may not be sold for profit, the copyright notice must be reproduced
* on copies, and credit should be given to Bellcore where it is due.
* BELLCORE MAKES NO WARRANTY AND ACCEPTS NO LIABILITY FOR THIS PROGRAM.
*/
/* $Header: term.h,v 4.6 88/08/18 10:17:05 sau Exp $
$Source: /tmp/mgrsrc/lib/RCS/term.h,v $
*/
static char h_term_[] = "$Source: /tmp/mgrsrc/lib/RCS/term.h,v $$Revision: 4.6 $";
/* macros for writing to mgr terminal emulator */
#ifndef _TERM_INCL
#define _TERM_INCL
#include "window.h"
#ifndef stderr
#include <stdio.h>
#endif
#ifndef ECHO
#include <sgtty.h>
#endif
#define TTYMAX 10 /* stack size for ttyset() */
#define M_FLUSH 0x1 /* autoflush output after each write */
#define M_DEBUG 0x2 /* use stderr instead of /dev/tty mgr i/o */
#define M_MODEOK 0x4 /* assume tty modes are always ok */
#ifndef M_DEVICEIN
#define M_DEVICEIN "/dev/tty"
#endif
#ifndef M_DEVICEOUT
#define M_DEVICEOUT "/dev/tty"
#endif
#define m_flush() fflush(m_termout)
#define BTWN(a,x,b) \
((x)<(a)?a:(x)>(b)?b:x)
#define LIMIT(x) BTWN(0,x,1152)
#ifndef M_NOFLUSH
#define _m_flsh ,(m_flags&M_FLUSH?m_flush():m_flags)
#else
#define _m_flsh
#endif
/* vi-like stuff */
#define m_addline() \
(fprintf(m_termout,"%c%c",m_escchar,E_ADDLINE)_m_flsh)
#define m_addlines(n) \
(fprintf(m_termout,"%c%d%c",m_escchar,n,E_ADDLINE)_m_flsh)
#define m_addchar() \
(fprintf(m_termout,"%c%c",m_escchar,E_ADDCHAR)_m_flsh)
#define m_addchars(n) \
(fprintf(m_termout,"%c%d%c",m_escchar,n,E_ADDCHAR)_m_flsh)
#define m_deleteline() \
(fprintf(m_termout,"%c%c",m_escchar,E_DELETELINE)_m_flsh)
#define m_deletelines(n) \
(fprintf(m_termout,"%c%d%c",m_escchar,n,E_DELETELINE)_m_flsh)
#define m_deletechar() \
(fprintf(m_termout,"%c%c",m_escchar,E_DELETECHAR)_m_flsh)
#define m_deletechars(n) \
(fprintf(m_termout,"%c%d%c",m_escchar,n,E_DELETECHAR)_m_flsh)
#define m_standend() \
(fprintf(m_termout,"%c%c",m_escchar,E_STANDEND)_m_flsh)
#define m_standout() \
(fprintf(m_termout,"%c%c",m_escchar,E_STANDOUT)_m_flsh)
#define m_bell() \
(fprintf(m_termout,"\007")_m_flsh)
#define m_setcursor(n) \
(fprintf(m_termout,"%c%d%c",m_escchar,n,E_SETCURSOR)_m_flsh)
/* lines */
/*
#define m_line(x0,y0,x1,y1) \
(fprintf(m_termout,"%c%d,%d,%d,%d%c",m_escchar, \
LIMIT(x0),LIMIT(y0),LIMIT(x1),LIMIT(y1),E_LINE)_m_flsh)
*/
#define m_line(x0,y0,x1,y1) \
(fprintf(m_termout,"%c%d,%d,%d,%d%c",m_escchar, \
x0,y0,x1,y1,E_LINE)_m_flsh)
#define m_lineto(to,x0,y0,x1,y1) \
(fprintf(m_termout,"%c%d,%d,%d,%d,%d%c",m_escchar, \
x0,y0,x1,y1,to,E_LINE)_m_flsh)
#define m_draw(x,y) \
(fprintf(m_termout,"%c%d,%d%c",m_escchar, \
LIMIT(x),LIMIT(y),E_LINE)_m_flsh)
#define m_fastdraw(x,y,count,buff) \
(fprintf(m_termout,"%c%d,%d,%d%c",m_escchar, \
LIMIT(x),LIMIT(y),count,E_GRUNCH), \
fwrite(buff,1,count,m_termout)_m_flsh)
#define m_rfastdraw(count,buff) \
(fprintf(m_termout,"%c%d%c",m_escchar, \
count,E_GRUNCH), \
fwrite(buff,1,count,m_termout)_m_flsh)
#define m_aligntext() \
(fprintf(m_termout,"%c%c",m_escchar, \
E_LINE)_m_flsh)
#define m_gotext() \
(fprintf(m_termout,"%c%c",m_escchar, \
E_GO)_m_flsh)
#define m_go(x,y) \
(fprintf(m_termout,"%c%d,%d%c",m_escchar, \
LIMIT(x),LIMIT(y),E_GO)_m_flsh)
/* bitblits */
#define m_clear() \
(fprintf(m_termout,"%c",C_FF)_m_flsh)
#define m_func(func)\
(fprintf(m_termout,"%c%d%c",m_escchar,func,E_BITBLT)_m_flsh)
#define m_bitwrite(x,y,w,h) \
(fprintf(m_termout,"%c%d,%d,%d,%d%c",m_escchar,x,y,w,h,E_BITBLT)_m_flsh)
#define m_bitwriteto(x,y,w,h,to) \
(fprintf(m_termout,"%c%d,%d,%d,%d,%d%c", \
m_escchar,x,y,w,h,to,E_BITBLT)_m_flsh)
#define m_bitcopy(xd,yd,w,h,xs,ys) \
(fprintf(m_termout,"%c%d,%d,%d,%d,%d,%d%c", \
m_escchar,xd,yd,w,h,xs,ys,E_BITBLT)_m_flsh)
#define m_bitcopyto(xd,yd,w,h,xs,ys,to,from) \
(fprintf(m_termout,"%c%d,%d,%d,%d,%d,%d,%d,%d%c", \
m_escchar,xd,yd,w,h,xs,ys,to,from,E_BITBLT)_m_flsh)
#define m_bitld(w,h,x,y,size) \
(fprintf(m_termout,"%c%d,%d,%d,%d,%d%c",\
m_escchar,w,h,x,y,size,E_BITLOAD),m_flush())
#define m_bitldto(w,h,x,y,to,size) \
(fprintf(m_termout,"%c%d,%d,%d,%d,%d,%d%c",\
m_escchar,w,h,x,y,to,size,E_BITLOAD),m_flush())
#define m_bitdestroy(n) \
(fprintf(m_termout,"%c%d%c",\
m_escchar,n,E_BITCRT),m_flush())
#define m_bitcreate(n,w,h) \
(fprintf(m_termout,"%c%d,%d,%d%c",\
m_escchar,n,w,h,E_BITCRT),m_flush())
#define m_bitget(from,size,offset) \
(fprintf(m_termout,"%c%d,%d,%d%c",\
m_escchar,from,size,offset,E_BITGET),m_flush())
#define m_othersave(id,sub,name) \
(fprintf(m_termout,"%c%d,%d,%d%c%s",\
m_escchar,id,sub,strlen(name),E_SMAP,name)_m_flsh)
#define m_windowsave(name) \
(fprintf(m_termout,"%c%d%c%s",\
m_escchar,strlen(name),E_SMAP,name)_m_flsh)
#define m_bitsave(from,name) \
(fprintf(m_termout,"%c%d,%d%c%s",\
m_escchar,from,strlen(name),E_SMAP,name)_m_flsh)
#define m_bitfromfile(to,name) \
(fprintf(m_termout,"%c%d,%d%c%s",\
m_escchar,to,strlen(name),E_GMAP,name)_m_flsh)
#define m_highlight(x,y,w,h) \
(fprintf(m_termout,"%c%d,%d,%d,%d%c",\
m_escchar,x,y,w,h,E_BLEEP),m_flush())
#define m_stringto(to,x,y,text) \
(fprintf(m_termout,"%c%d,%d,%d,%d%c%s",\
m_escchar,to,x,y,strlen(text),E_STRING,text)_m_flsh)
/* other graphic functions */
#define m_circle(x,y,r) \
(fprintf(m_termout,"%c%d,%d,%d%c",m_escchar, \
LIMIT(x),LIMIT(y),LIMIT(r),E_CIRCLE)_m_flsh)
#define m_ellipse(x,y,r1,r2) \
(fprintf(m_termout,"%c%d,%d,%d,%d%c",m_escchar, \
LIMIT(x),LIMIT(y),LIMIT(r1),LIMIT(r2),E_CIRCLE)_m_flsh)
#define m_arc(x,y,x1,y1,x2,y2) \
(fprintf(m_termout,"%c%d,%d,%d,%d,%d,%d%c",m_escchar, \
LIMIT(x),LIMIT(y),LIMIT(x1),LIMIT(y1),LIMIT(x2),LIMIT(y2), \
E_CIRCLE)_m_flsh)
#define m_ellipseto(to,x,y,r1,r2) \
(fprintf(m_termout,"%c%d,%d,%d,%d,%d%c",m_escchar, \
LIMIT(x),LIMIT(y),LIMIT(r1),LIMIT(r2),to,E_CIRCLE)_m_flsh)
#define m_rcircle(r) \
(fprintf(m_termout,"%c%d%c",m_escchar, \
LIMIT(r),E_CIRCLE)_m_flsh)
#define m_rellipse(r1,r2) \
(fprintf(m_termout,"%c%d,%d%c",m_escchar, \
LIMIT(r1),LIMIT(r2),E_CIRCLE)_m_flsh)
#define m_movemouse(x,y) \
(fprintf(m_termout,"%c%d,%d%c",m_escchar,x,y,E_MOUSE)_m_flsh)
#define m_movecursor(x,y) \
(fprintf(m_termout,"%c%d,%d%c",m_escchar,x,y,E_MOVE)_m_flsh)
#define m_move(col,row) \
(fprintf(m_termout,"%c%d,%d%c",m_escchar,col,row,E_CUP)_m_flsh)
#define m_moveprint(x,y,str) \
(fprintf(m_termout,"%c%d,%d%c%s",m_escchar,x,y,E_MOVE,str)_m_flsh)
#define m_incr(x) \
(fprintf(m_termout,"%c%d%c",m_escchar,x,E_MOVE)_m_flsh)
#define m_cleareol() \
(fprintf(m_termout,"%c%c",m_escchar,E_CLEAREOL)_m_flsh)
#define m_cleareos() \
(fprintf(m_termout,"%c%c",m_escchar,E_CLEAREOS)_m_flsh)
/* window manipulation */
#define m_movewindow(x,y) \
(fprintf(m_termout,"%c%d,%d%c",m_escchar,x,y,E_SHAPE)_m_flsh)
#define m_shapewindow(x,y,dx,dy) \
(fprintf(m_termout,"%c%d,%d,%d,%d%c",m_escchar,x,y,dx,dy,E_SHAPE)_m_flsh)
#define m_font(x) \
(fprintf(m_termout,"%c%d%c",m_escchar,x,E_FONT)_m_flsh)
#define m_loadfont(n,name) \
(fprintf(m_termout,"%c%d,%d%c%s", \
m_escchar,n,strlen(name),E_FONT,name)_m_flsh)
#define m_size(cols,rows) \
(fprintf(m_termout,"%c%d,%d%c",m_escchar,cols,rows,E_SIZE)_m_flsh)
#define m_sizeall(x,y,cols,rows) \
(fprintf(m_termout,"%c%d,%d,%d,%d%c", \
m_escchar,x,y,cols,rows,E_SIZE)_m_flsh)
#define m_scrollregion(first,last) \
(fprintf(m_termout,"%c%d,%d%c", \
m_escchar,first,last,E_TEXTREGION)_m_flsh)
#define m_textregion(x,y,wide,high) \
(fprintf(m_termout,"%c%d,%d,%d,%d%c", \
m_escchar,x,y,wide,high,E_TEXTREGION)_m_flsh)
#define m_textreset() \
(fprintf(m_termout,"%c%c",m_escchar,E_TEXTREGION)_m_flsh)
/* window creation/ destruction */
#define m_newwin(x,y,w,h) \
(fprintf(m_termout,"%c%d,%d,%d,%d%c",m_escchar,x,y,w,h,E_MAKEWIN)_m_flsh)
#define m_destroywin(n) \
(fprintf(m_termout,"%c%d,0%c",m_escchar,n,E_MAKEWIN)_m_flsh)
#define m_selectwin(n) \
(fprintf(m_termout,"%c%d%c",m_escchar,n,E_MAKEWIN)_m_flsh)
/* events */
#define m_setevent(event,x) \
(fprintf(m_termout,"%c%d,%d%c%s", \
m_escchar,_mapevent(event),strlen(x),E_EVENT,x)_m_flsh)
#define m_clearevent(event) \
(fprintf(m_termout,"%c%d%c", \
m_escchar,_mapevent(event),E_EVENT)_m_flsh)
/* message passing */
#define m_sendme(str) \
(fprintf(m_termout,"%c%d%c%s", \
m_escchar,strlen(str),E_GIMME,str)_m_flsh)
#define m_sendto(pid,str) \
(fprintf(m_termout,"%c%d,%d%c%s", \
m_escchar,pid,strlen(str),E_SEND,str)_m_flsh)
#define m_broadcast(str) \
(fprintf(m_termout,"%c%d%c%s", \
m_escchar,strlen(str),E_SEND,str)_m_flsh)
#define m_snarf(str) \
(fprintf(m_termout,"%c%d%c%s", \
m_escchar,strlen(str),E_SNARF,str)_m_flsh)
#define m_put() \
(fprintf(m_termout,"%c%c", \
m_escchar,E_PUTSNARF)_m_flsh)
/* environment stacking */
#define m_push(mode) \
(m_envcount++, \
fprintf(m_termout,"%c%d%c",m_escchar,(mode)|P_CLEAR,E_PUSH) \
_m_flsh)
#define m_pushsave(mode) \
(m_envcount++, \
fprintf(m_termout,"%c%d%c",m_escchar,(mode),E_PUSH)_m_flsh)
#define m_pop() \
(m_envcount?m_envcount--:0, \
fprintf(m_termout,"%c%c",m_escchar,E_POP)_m_flsh)
#define m_popall() \
while(m_envcount--) \
(fprintf(m_termout,"%c%c",m_escchar,E_POP)_m_flsh)
/* tty mode settings */
#define m_setraw() \
m_setflags(RAW)
#define m_setnoraw() \
m_resetflags(RAW)
#define m_unsetraw m_setnoraw /* obsolete */
#define m_setecho() \
m_setflags(ECHO)
#define m_setnoecho() \
m_resetflags(ECHO)
/* other stuff */
#define m_setmode(mode) \
(fprintf(m_termout,"%c%d%c",m_escchar,mode,E_SETMODE)_m_flsh)
#define m_dupkey(key) \
(fprintf(m_termout,"%c%d,%d%c",m_escchar,M_DUPKEY,key,E_SETMODE)_m_flsh)
#define m_clearmode(mode) \
(fprintf(m_termout,"%c%d%c",m_escchar,mode,E_CLEARMODE)_m_flsh)
#define m_getinfo(x) \
(fprintf(m_termout,"%c%d%c",m_escchar,x,E_GETINFO),m_flush())
#define m_whatsat(x,y) \
(fprintf(m_termout,"%c%d,%d%c",m_escchar,x,y,E_GETINFO),m_flush())
#define m_get()\
(m_flush(),fgets(m_linebuf,sizeof(m_linebuf),m_termin))
#define m_getchar()\
(getc(m_termin))
#define m_gets(buff)\
(m_flush(),fgets(buff,sizeof(buff),m_termin))
#define m_putchar(c) \
(putc(c,m_termout)_m_flsh)
#define m_printstr(str) \
(fprintf(m_termout,"%s",str)_m_flsh)
#define m_setesc(x) \
(m_escchar = (x))
#define m_resetesc() \
(m_escchar = ESC)
#define m_sleep() \
(fprintf(m_termout,"%c%c",m_escchar,E_NULL)_m_flsh)
/* menu stuff */
#ifndef M_DELIM
#define M_DELIM '\005' /* menu delimiter character */
#endif
#define m_selectmenu(n) \
(fprintf(m_termout,"%c%d%c",m_escchar,n,E_MENU)_m_flsh)
#define m_selectmenu2(n) \
(fprintf(m_termout,"%c-%d%c",m_escchar,n,E_MENU)_m_flsh)
#define m_nomenu() \
(fprintf(m_termout,"%c%d%c",m_escchar,999,E_MENU)_m_flsh)
#define m_nomenu2() \
(fprintf(m_termout,"%c-%d%c",m_escchar,999,E_MENU)_m_flsh)
#define m_loadmenu(n,str) \
(fprintf(m_termout,"%c%d,%d%c%s",m_escchar,n,strlen(str),E_MENU,str)_m_flsh)
#define m_clearmenu(n) \
(fprintf(m_termout,"%c%d,0%c",m_escchar,n,E_MENU)_m_flsh)
#define m_linkmenu(parent,item,child,flags) \
(fprintf(m_termout,"%c%d,%d,%d,%d%c", \
m_escchar,parent,item,child,flags,E_MENU)_m_flsh)
#define m_unlinkmenu(parent,item) \
(fprintf(m_termout,"%c%d,%d,%d,%c", \
m_escchar,parent,item,-1,E_MENU)_m_flsh)
#define m_pagemenu(parent,child) \
(fprintf(m_termout,"%c%d,%d,%d,%c", \
m_escchar,parent,-1,child,E_MENU)_m_flsh)
#define m_unpagemenu(parent) \
(fprintf(m_termout,"%c%d,%d,%d,%c", \
m_escchar,parent,-1,-1,E_MENU)_m_flsh)
/* temporary menu stuff */
#define m_menuitem(menu,item) \
(fprintf(m_termout,"%c%d,%d%c",m_escchar,menu,item,E_FOO)_m_flsh)
#define m_menuerase(menu) \
(fprintf(m_termout,"%c%d%c",m_escchar,menu,E_FOO)_m_flsh)
#define m_menushow(x,y,menu) \
(fprintf(m_termout,"%c%d,%d,%d%c",m_escchar,x,y,menu,E_FOO)_m_flsh)
#define m_menubar(x,y,menu,item) \
(fprintf(m_termout,"%c%d,%d,%d,%d%c",m_escchar,x,y,menu,item,E_FOO)_m_flsh)
/* temporary relative character motion */
#define m_right(tenths) \
(fprintf(m_termout,"%c%d,%d%c",m_escchar,tenths,10,E_RIGHT)_m_flsh)
#define m_left(tenths) \
(fprintf(m_termout,"%c%d,%d%c",m_escchar,tenths,-10,E_RIGHT)_m_flsh)
#define m_up(tenths) \
(fprintf(m_termout,"%c%d,%d%c",m_escchar,tenths,10,E_UP)_m_flsh)
#define m_down(tenths) \
(fprintf(m_termout,"%c%d,%d%c",m_escchar,tenths,10,E_DOWN)_m_flsh)
/* color stuff */
#define m_fcolor(color) \
(fprintf(m_termout,"%c%d%c",m_escchar,color,E_FCOLOR)_m_flsh)
#define m_bcolor(color) \
(fprintf(m_termout,"%c%d%c",m_escchar,color,E_BCOLOR)_m_flsh)
#define m_linecolor(op,color) \
(fprintf(m_termout,"%c%d,%d%c",m_escchar,op,color,E_BITBLT)_m_flsh)
#define _mapevent(z) ((z)==3||(z)==4?2-(z):z)
/* events */
#define BUTTON_1 1 /* end button depressed */
#define BUTTON_2 2 /* middle button depressed */
#define BUTTON_1U 3 /* end button released */
#define BUTTON_2U 4 /* middle button released */
#define RESHAPE 5 /* window was reshaped */
#define RESHAPED 5 /* window was reshaped */
#define REDRAW 6 /* screen was redrawn */
#define REDRAWN 6 /* screen was redrawn */
#define ACTIVATE 7 /* window was activated */
#define ACTIVATED 7 /* window was activated */
#define DEACTIVATE 8 /* window was deactivated */
#define DEACTIVATED 8 /* window was deactivated */
#define COVERED 9 /* window was covered */
#define UNCOVERED 10 /* window was uncovered */
#define MOVE 11 /* window was moved */
#define MOVED 11 /* window was moved */
#define DESTROY 12 /* window was destroyed */
#define ACCEPT 13 /* accept messages */
#define NOTIFY 14 /* set notification */
#define SNARFED 16 /* text was just snarfed */
#define PASTE 17 /* text was just pasted */
/* stuff for setting terminal modes */
#define _m_ttyset() (m_flags&M_MODEOK?m_flags:m_ttyset())
#define _m_ttyreset() (m_flags&M_MODEOK?m_flags:m_ttyreset())
/* global variables */
#define MAXLINE 256 /* maximum line size from mgr */
extern FILE *m_termin; /* output to window */
extern FILE *m_termout; /* input from mgr */
extern int m_flags; /* setup flags */
extern int m_envcount; /* # of stacked environments */
extern int m_saveenvcount; /* ??? */
extern char m_escchar; /* \033, change only for debugging */
extern char m_menuchar; /* menu field seperator char (\005) */
extern char m_linebuf[MAXLINE];
extern int get_info(), get_size(), parse(), get_font(), is_active(), menu_load();
extern char *m_lastline(), *get_termcap();
/* structure definitions */
#define MENU_SIZE(x) (sizeof(x)/sizeof(struct menu_entry))
struct menu_entry {
char *value; /* this appears in the menu */
char *action; /* this gets sent by mgr upon selection */
};
struct window_data {
int x,y; /* origin */
int w,h; /* width, height */
char tty[3]; /* name of controlling tty */
char status; /* activation status */
int num; /* window number (>0 for client) */
int setid; /* window set ID */
};
struct icon {
char *name; /* name of icon */
int type; /* always 1 */
int w; /* bitmap width */
int h; /* bitmap height */
unsigned char *data; /* data goes here */
};
#endif _TERM_INCL