1*219b2ee8SDavid du Colombier #pragma src "/sys/src/libframe" 23e12c5d1SDavid du Colombier #pragma lib "libframe.a" 33e12c5d1SDavid du Colombier 43e12c5d1SDavid du Colombier typedef struct Frbox Frbox; 53e12c5d1SDavid du Colombier typedef struct Frame Frame; 63e12c5d1SDavid du Colombier 73e12c5d1SDavid du Colombier struct Frbox 83e12c5d1SDavid du Colombier { 93e12c5d1SDavid du Colombier long wid; /* in pixels */ 103e12c5d1SDavid du Colombier long nrune; /* <0 ==> negate and treat as break char */ 113e12c5d1SDavid du Colombier union{ 123e12c5d1SDavid du Colombier uchar *ptr; 133e12c5d1SDavid du Colombier struct{ 143e12c5d1SDavid du Colombier short bc; /* break char */ 153e12c5d1SDavid du Colombier short minwid; 163e12c5d1SDavid du Colombier }; 173e12c5d1SDavid du Colombier }; 183e12c5d1SDavid du Colombier }; 193e12c5d1SDavid du Colombier 203e12c5d1SDavid du Colombier struct Frame 213e12c5d1SDavid du Colombier { 223e12c5d1SDavid du Colombier Font *font; /* of chars in the frame */ 233e12c5d1SDavid du Colombier Bitmap *b; /* on which frame appears */ 243e12c5d1SDavid du Colombier Rectangle r; /* in which text appears */ 253e12c5d1SDavid du Colombier Rectangle entire; /* of full frame */ 263e12c5d1SDavid du Colombier Frbox *box; 273e12c5d1SDavid du Colombier ulong p0, p1; /* selection */ 283e12c5d1SDavid du Colombier short left; /* left edge of text */ 293e12c5d1SDavid du Colombier ushort nbox, nalloc; 303e12c5d1SDavid du Colombier ushort maxtab; /* max size of tab, in pixels */ 313e12c5d1SDavid du Colombier ushort nchars; /* # runes in frame */ 323e12c5d1SDavid du Colombier ushort nlines; /* # lines with text */ 333e12c5d1SDavid du Colombier ushort maxlines; /* total # lines in frame */ 343e12c5d1SDavid du Colombier ushort lastlinefull; /* last line fills frame */ 353e12c5d1SDavid du Colombier ushort modified; /* changed since frselect() */ 363e12c5d1SDavid du Colombier }; 373e12c5d1SDavid du Colombier 383e12c5d1SDavid du Colombier ulong frcharofpt(Frame*, Point); 393e12c5d1SDavid du Colombier Point frptofchar(Frame*, ulong); 403e12c5d1SDavid du Colombier int frdelete(Frame*, ulong, ulong); 413e12c5d1SDavid du Colombier void frinsert(Frame*, Rune*, Rune*, ulong); 423e12c5d1SDavid du Colombier void frselect(Frame*, Mouse*); 433e12c5d1SDavid du Colombier void frselectp(Frame*, Fcode); 443e12c5d1SDavid du Colombier void frselectf(Frame*, Point, Point, Fcode); 453e12c5d1SDavid du Colombier void frinit(Frame*, Rectangle, Font*, Bitmap*); 463e12c5d1SDavid du Colombier void frsetrects(Frame*, Rectangle, Bitmap*); 473e12c5d1SDavid du Colombier void frclear(Frame*); 483e12c5d1SDavid du Colombier void frgetmouse(void); 493e12c5d1SDavid du Colombier 503e12c5d1SDavid du Colombier uchar *_frallocstr(unsigned); 513e12c5d1SDavid du Colombier void _frinsure(Frame*, int, unsigned); 523e12c5d1SDavid du Colombier Point _frdraw(Frame*, Point); 533e12c5d1SDavid du Colombier void _frgrowbox(Frame*, int); 543e12c5d1SDavid du Colombier void _frfreebox(Frame*, int, int); 553e12c5d1SDavid du Colombier void _frmergebox(Frame*, int); 563e12c5d1SDavid du Colombier void _frdelbox(Frame*, int, int); 573e12c5d1SDavid du Colombier void _frsplitbox(Frame*, int, int); 583e12c5d1SDavid du Colombier int _frfindbox(Frame*, int, ulong, ulong); 593e12c5d1SDavid du Colombier void _frclosebox(Frame*, int, int); 603e12c5d1SDavid du Colombier int _frcanfit(Frame*, Point, Frbox*); 613e12c5d1SDavid du Colombier void _frcklinewrap(Frame*, Point*, Frbox*); 623e12c5d1SDavid du Colombier void _frcklinewrap0(Frame*, Point*, Frbox*); 633e12c5d1SDavid du Colombier void _fradvance(Frame*, Point*, Frbox*); 643e12c5d1SDavid du Colombier int _frnewwid(Frame*, Point, Frbox*); 653e12c5d1SDavid du Colombier void _frclean(Frame*, Point, int, int); 663e12c5d1SDavid du Colombier void _frredraw(Frame*, Point); 673e12c5d1SDavid du Colombier void _fraddbox(Frame*, int, int); 683e12c5d1SDavid du Colombier Point _frptofcharptb(Frame*, ulong, Point, int); 693e12c5d1SDavid du Colombier Point _frptofcharnb(Frame*, ulong, int); 703e12c5d1SDavid du Colombier int _frstrlen(Frame*, int); 713e12c5d1SDavid du Colombier 723e12c5d1SDavid du Colombier #define NRUNE(b) ((b)->nrune<0? 1 : (b)->nrune) 733e12c5d1SDavid du Colombier #define NBYTE(b) strlen((char*)(b)->ptr) 74