|  | #ifndef _FRAME_H_ | 
|  | #define _FRAME_H_ 1 | 
|  | #if defined(__cplusplus) | 
|  | extern "C" { | 
|  | #endif | 
|  |  | 
|  | AUTOLIB(frame) | 
|  |  | 
|  | typedef struct Frbox Frbox; | 
|  | typedef struct Frame Frame; | 
|  |  | 
|  | enum{ | 
|  | BACK, | 
|  | HIGH, | 
|  | BORD, | 
|  | TEXT, | 
|  | HTEXT, | 
|  | NCOL | 
|  | }; | 
|  |  | 
|  | #define	FRTICKW	3 | 
|  |  | 
|  | struct Frbox | 
|  | { | 
|  | long		wid;		/* in pixels */ | 
|  | long		nrune;		/* <0 ==> negate and treat as break char */ | 
|  | uchar	*ptr; | 
|  | short	bc;	/* break char */ | 
|  | short	minwid; | 
|  | }; | 
|  |  | 
|  | struct Frame | 
|  | { | 
|  | Font		*font;		/* of chars in the frame */ | 
|  | Display		*display;	/* on which frame appears */ | 
|  | Image		*b;		/* on which frame appears */ | 
|  | Image		*cols[NCOL];	/* text and background colors */ | 
|  | Rectangle	r;		/* in which text appears */ | 
|  | Rectangle	entire;		/* of full frame */ | 
|  | void			(*scroll)(Frame*, int);	/* scroll function provided by application */ | 
|  | Frbox		*box; | 
|  | ulong		p0, p1;		/* selection */ | 
|  | ushort		nbox, nalloc; | 
|  | ushort		maxtab;		/* max size of tab, in pixels */ | 
|  | ushort		nchars;		/* # runes in frame */ | 
|  | ushort		nlines;		/* # lines with text */ | 
|  | ushort		maxlines;	/* total # lines in frame */ | 
|  | ushort		lastlinefull;	/* last line fills frame */ | 
|  | ushort		modified;	/* changed since frselect() */ | 
|  | Image		*tick;	/* typing tick */ | 
|  | Image		*tickback;	/* saved image under tick */ | 
|  | int			ticked;	/* flag: is tick onscreen? */ | 
|  | int			noredraw;	/* don't draw on the screen */ | 
|  | }; | 
|  |  | 
|  | ulong	frcharofpt(Frame*, Point); | 
|  | Point	frptofchar(Frame*, ulong); | 
|  | int	frdelete(Frame*, ulong, ulong); | 
|  | void	frinsert(Frame*, Rune*, Rune*, ulong); | 
|  | void	frselect(Frame*, Mousectl*); | 
|  | void	frselectpaint(Frame*, Point, Point, Image*); | 
|  | void	frdrawsel(Frame*, Point, ulong, ulong, int); | 
|  | Point	frdrawsel0(Frame*, Point, ulong, ulong, Image*, Image*); | 
|  | void	frinit(Frame*, Rectangle, Font*, Image*, Image**); | 
|  | void	frsetrects(Frame*, Rectangle, Image*); | 
|  | void	frclear(Frame*, int); | 
|  | void	frredraw(Frame*); | 
|  |  | 
|  | uchar	*_frallocstr(Frame*, unsigned); | 
|  | void	_frinsure(Frame*, int, unsigned); | 
|  | Point	_frdraw(Frame*, Point); | 
|  | void	_frgrowbox(Frame*, int); | 
|  | void	_frfreebox(Frame*, int, int); | 
|  | void	_frmergebox(Frame*, int); | 
|  | void	_frdelbox(Frame*, int, int); | 
|  | void	_frsplitbox(Frame*, int, int); | 
|  | int	_frfindbox(Frame*, int, ulong, ulong); | 
|  | void	_frclosebox(Frame*, int, int); | 
|  | int	_frcanfit(Frame*, Point, Frbox*); | 
|  | void	_frcklinewrap(Frame*, Point*, Frbox*); | 
|  | void	_frcklinewrap0(Frame*, Point*, Frbox*); | 
|  | void	_fradvance(Frame*, Point*, Frbox*); | 
|  | int	_frnewwid(Frame*, Point, Frbox*); | 
|  | int	_frnewwid0(Frame*, Point, Frbox*); | 
|  | void	_frclean(Frame*, Point, int, int); | 
|  | void	_frdrawtext(Frame*, Point, Image*, Image*); | 
|  | void	_fraddbox(Frame*, int, int); | 
|  | Point	_frptofcharptb(Frame*, ulong, Point, int); | 
|  | Point	_frptofcharnb(Frame*, ulong, int); | 
|  | int	_frstrlen(Frame*, int); | 
|  | void	frtick(Frame*, Point, int); | 
|  | void	frinittick(Frame*); | 
|  |  | 
|  | #define	NRUNE(b)	((b)->nrune<0? 1 : (b)->nrune) | 
|  | #define	NBYTE(b)	strlen((char*)(b)->ptr) | 
|  | #if defined(__cplusplus) | 
|  | } | 
|  | #endif | 
|  | #endif |