V9/jerq/include/pads.pub

#ifndef PADS_H
#define PADS_H

typedef unsigned short Attrib;
#ifndef PADS_TERM
int	strlen(char*),
	strcmp(char*,char*),
	read(int,char*,int),
	write(int,char*,int),
	ioctl(int,int ...);
char	*strcpy(char*,char*),
	*sbrk(int);

#define PRINTF_TYPES char * ...
#define PRINTF_ARGS char *fmt ...
#define FMT(i) ( ((int*)&fmt)[i] )
#define PRINTF_COPY\
	(fmt?fmt:""), FMT(1),FMT(2),FMT(3),FMT(4),FMT(5),FMT(6),FMT(7),FMT(8)

#ifdef TRACE
#define OK(x)		if( !ok() ) PadsError(__SRC__);
#define VOK		if( !ok() ) PadsError(__SRC__);
#define IF_LIVE(x)	{ if( x )   PadsError(__SRC__); } if(0)
#define SRCFILE(f)	static __SRC__ = f;
typedef int  (*PFI)();
PFI trace_fcn(char*,int), trace_ptr;
#define trace  (!(trace_ptr=trace_fcn(__SRC__,__LINE__))) ? 0 : (*trace_ptr)
#else
#define OK(x)		{ if( !ok() ) return x; }
#define VOK		{ if( !ok() ) return ; 	}
#define IF_LIVE(x)	  if( x )
#define SRCFILE(f)
#define trace  if( 0 )
#endif

class Index {
	char	pub_filler[2];
public:
	int	null();
};
extern Index ZIndex;
#else
typedef unsigned short Index;
#define MJR(i)	((i)>>8)
#define MNR(i)	((i)&0xFF)
typedef struct Carte Carte;
typedef enum Protocol Protocol;
struct Carte {
	unsigned char	size;		/* host.size != term.size */
	unsigned char	attrib;
	short		width;
	Index		bin[1];
};
#endif

#define	SELECTLINE	((Attrib)0x0001)
#define SORTED		((Attrib)0x0002)
#define ACCEPT_KBD	((Attrib)0x0004)
#define FOLD		((Attrib)0x0008)
#define TRUNCATE	((Attrib)0x0010)
#define USERCLOSE	((Attrib)0x0020)
#define DONT_CUT	((Attrib)0x0040)
#define FLUSHLINE	((Attrib)0x0080)	/* should not be required */
#define FAKELINE	((Attrib)0x0100)
#define USERCUT		((Attrib)0x0200)
#define DONT_CLOSE	((Attrib)0x0400)
#define NO_TILDE	((Attrib)0x0800)
#define DONT_DIRTY	((Attrib)0x1000)

#ifndef PADS_TERM
char *sf(PRINTF_TYPES);
char *PadsInit(char* = 0);
void PadsServe(long = 0);
void NewHelp();
void NewPadStats();
class PadRcv;
typedef void (PadRcv::*Action)(...);
void Pick(char*,Action,long);
long UniqueKey();
Index NumericRange(short,short);
void PadsWarn(PRINTF_TYPES);
//extern char *TapTo;

class PadRcv {	friend Remote; friend Pad;
	short	oid;
	short	magic;
	int	isvalid();
public:
		PadRcv();
		~PadRcv();
	void	invalidate();
virtual	int	disc();
virtual	char	*kbd(char*);
virtual	char	*help();
virtual	void	numeric(long);
virtual	void	userclose();
virtual	void	cycle();
virtual	void	linereq(long,Attrib=0);
virtual	int	accept(Action);
virtual	void	usercut();
};

class Pad {
	char	pub_filler[24];
public:
	int	ok();
		Pad(PadRcv *);
		~Pad();
	void	alarm(short=0);
	void	banner(PRINTF_TYPES);
	void	clear();
	void	dump();
	void	error(PRINTF_TYPES);
	void	insert(class Line&);
	void	insert(long, Attrib, PadRcv*, Index, PRINTF_TYPES);
	void	insert(long, Attrib, PadRcv*, class Menu&, PRINTF_TYPES);
	void	insert(long, Attrib, PRINTF_TYPES);
	void	insert(long, PRINTF_TYPES);
	void	lines(long);
	void	makecurrent();
	void	makegap(long,long);
	void	menu(Index);
	void	menu(class Menu&);
	void	name(PRINTF_TYPES);
	void	options(Attrib, Attrib=0);
	void	tabs(short);
	void	removeline(long);
	void	createline(long,long);
	void	createline(long);
};

class Line {
public:
	int	ok();
		Line();
	PadRcv	*object;
	char	*text;
	long	key;
	Attrib	attributes;
	Index	carte;
};
class Menu {
	char	pub_filler[8];
public:
		Menu();
		~Menu();
		Menu( char*, Action=0, long=0 );
	Index	index( char* =0, Action=0, long=0 );
	void	first( char*, Action=0, long=0 );
	void	first( Index );
	void	last( char*, Action=0, long=0 );	
	void	last( Index );	
	void	sort( char*, Action=0, long=0 );
	void	sort( Index );
};

#endif

#endif