137da2899SCharles.Forsyth typedef struct TkText TkText; 237da2899SCharles.Forsyth typedef struct TkTitem TkTitem; 337da2899SCharles.Forsyth typedef struct TkTline TkTline; 437da2899SCharles.Forsyth typedef struct TkTindex TkTindex; 537da2899SCharles.Forsyth typedef struct TkTmarkinfo TkTmarkinfo; 637da2899SCharles.Forsyth typedef struct TkTtaginfo TkTtaginfo; 737da2899SCharles.Forsyth typedef struct TkTwind TkTwind; 837da2899SCharles.Forsyth 937da2899SCharles.Forsyth enum 1037da2899SCharles.Forsyth { 1137da2899SCharles.Forsyth /* text item types */ 1237da2899SCharles.Forsyth TkTascii, /* contiguous string of ascii chars, all with same tags */ 1337da2899SCharles.Forsyth TkTrune, /* printable utf (one printing position) */ 1437da2899SCharles.Forsyth TkTtab, 1537da2899SCharles.Forsyth TkTnewline, /* line field contains pointer to containing line */ 1637da2899SCharles.Forsyth TkTcontline, /* end of non-newline line; line field as with TkTnewline */ 1737da2899SCharles.Forsyth TkTwin, 1837da2899SCharles.Forsyth TkTmark, 1937da2899SCharles.Forsyth 2037da2899SCharles.Forsyth TkTbyitem = 0, /* adjustment units */ 2137da2899SCharles.Forsyth TkTbyitemback, 2237da2899SCharles.Forsyth TkTbytline, 2337da2899SCharles.Forsyth TkTbytlineback, 2437da2899SCharles.Forsyth TkTbychar, 2537da2899SCharles.Forsyth TkTbycharback, 2637da2899SCharles.Forsyth TkTbycharstart, 2737da2899SCharles.Forsyth TkTbyline, 2837da2899SCharles.Forsyth TkTbylineback, 2937da2899SCharles.Forsyth TkTbylinestart, 3037da2899SCharles.Forsyth TkTbylineend, 3137da2899SCharles.Forsyth TkTbywordstart, 3237da2899SCharles.Forsyth TkTbywordend, 3337da2899SCharles.Forsyth TkTbywrapstart, 3437da2899SCharles.Forsyth TkTbywrapend, 3537da2899SCharles.Forsyth 3637da2899SCharles.Forsyth TkTselid = 0, /* id of sel tag */ 3737da2899SCharles.Forsyth TkTmaxtag = 32, 3837da2899SCharles.Forsyth Textwidth = 40, /* default width, in chars */ 3937da2899SCharles.Forsyth Textheight = 10, /* default height, in chars */ 4037da2899SCharles.Forsyth 4137da2899SCharles.Forsyth TkTfirst = (1<<0), /* first line in buffer, or after a TkTlast */ 4237da2899SCharles.Forsyth TkTlast = (1<<1), /* TkTnewline at end of line */ 4337da2899SCharles.Forsyth TkTdrawn = (1<<2), /* screen cache copy is ok */ 4437da2899SCharles.Forsyth TkTdlocked = (1<<3), /* display already locked */ 4537da2899SCharles.Forsyth TkTjustfoc = (1<<4), /* got focus on last B1 press */ 4637da2899SCharles.Forsyth TkTnodrag = (1<<5), /* ignore B1 drag until B1 up */ 4737da2899SCharles.Forsyth TkTunset = (1<<31), /* marks int tag options "unspecified" */ 4837da2899SCharles.Forsyth 4937da2899SCharles.Forsyth TkTborderwidth = 0, 5037da2899SCharles.Forsyth TkTjustify, 5137da2899SCharles.Forsyth TkTlmargin1, 5237da2899SCharles.Forsyth TkTlmargin2, 5337da2899SCharles.Forsyth TkTlmargin3, 5437da2899SCharles.Forsyth TkTrmargin, 5537da2899SCharles.Forsyth TkTspacing1, 5637da2899SCharles.Forsyth TkTspacing2, 5737da2899SCharles.Forsyth TkTspacing3, 5837da2899SCharles.Forsyth TkToffset, 5937da2899SCharles.Forsyth TkTunderline, 6037da2899SCharles.Forsyth TkToverstrike, 6137da2899SCharles.Forsyth TkTrelief, 6237da2899SCharles.Forsyth TkTwrap, 6337da2899SCharles.Forsyth TkTlineheight, 6437da2899SCharles.Forsyth 6537da2899SCharles.Forsyth TkTnumopts 6637da2899SCharles.Forsyth }; 6737da2899SCharles.Forsyth 6837da2899SCharles.Forsyth struct TkTline 6937da2899SCharles.Forsyth { 7037da2899SCharles.Forsyth Point orig; /* where to put first item of line */ 7137da2899SCharles.Forsyth int width; 7237da2899SCharles.Forsyth int height; 7337da2899SCharles.Forsyth int ascent; 7437da2899SCharles.Forsyth int flags; 7537da2899SCharles.Forsyth TkTitem* items; 7637da2899SCharles.Forsyth TkTline* next; 7737da2899SCharles.Forsyth TkTline* prev; 7837da2899SCharles.Forsyth }; 7937da2899SCharles.Forsyth 8037da2899SCharles.Forsyth struct TkText 8137da2899SCharles.Forsyth { 8237da2899SCharles.Forsyth TkTline start; /* fake before-the-first line */ 8337da2899SCharles.Forsyth TkTline end; /* fake after-the-last line */ 8437da2899SCharles.Forsyth Tk* tagshare; 8537da2899SCharles.Forsyth TkTtabstop* tabs; 8637da2899SCharles.Forsyth TkTtaginfo* tags; 8737da2899SCharles.Forsyth TkTmarkinfo* marks; 8837da2899SCharles.Forsyth char* xscroll; 8937da2899SCharles.Forsyth char* yscroll; 9037da2899SCharles.Forsyth uchar selunit; /* select adjustment unit */ 9137da2899SCharles.Forsyth uchar tflag; /* various text-specific flags */ 9237da2899SCharles.Forsyth int nlines; /* number of nl items in widget */ 9337da2899SCharles.Forsyth TkTitem* selfirst; /* first item marked with sel tag */ 9437da2899SCharles.Forsyth TkTitem* sellast; /* item after last marked with sel tag */ 9537da2899SCharles.Forsyth Point deltatv; /* vector from text-space to view-space */ 9637da2899SCharles.Forsyth Point deltaiv; /* vector from image-space to view-space */ 9737da2899SCharles.Forsyth Point current; /* last known mouse pos */ 9837da2899SCharles.Forsyth Point track; /* for use when B1 or B2 is down */ 9937da2899SCharles.Forsyth int nexttag; /* next usable tag index */ 10037da2899SCharles.Forsyth TkTitem* mouse; /* mouse focus */ 10137da2899SCharles.Forsyth int inswidth; /* width of insertion cursor */ 10237da2899SCharles.Forsyth int sborderwidth; 10337da2899SCharles.Forsyth int opts[TkTnumopts]; 10437da2899SCharles.Forsyth int propagate; 10537da2899SCharles.Forsyth int scrolltop[2]; 10637da2899SCharles.Forsyth int scrollbot[2]; 10737da2899SCharles.Forsyth Image* image; 10837da2899SCharles.Forsyth uchar cur_flag; /* text cursor to be shown up? */ 10937da2899SCharles.Forsyth Rectangle cur_rec; /* last text cursor rectangle */ 11037da2899SCharles.Forsyth }; 11137da2899SCharles.Forsyth 11237da2899SCharles.Forsyth struct TkTwind 11337da2899SCharles.Forsyth { 11437da2899SCharles.Forsyth Tk* sub; /* Subwindow of canvas */ 1155849851aSforsyth Tk* focus; /* Current Mouse focus */ 1165849851aSforsyth int width; /* current internal width */ 1175849851aSforsyth int height; /* current internal height */ 1185849851aSforsyth int owned; /* true if window is destroyed on item deletion */ 11937da2899SCharles.Forsyth int align; /* how to align within line */ 12037da2899SCharles.Forsyth char* create; /* creation script */ 12137da2899SCharles.Forsyth int padx; /* extra space on each side */ 12237da2899SCharles.Forsyth int pady; /* extra space on top and bot */ 12337da2899SCharles.Forsyth int ascent; /* distance from top of widget to baseline */ 12437da2899SCharles.Forsyth int stretch; /* true if need to stretch height */ 12537da2899SCharles.Forsyth }; 12637da2899SCharles.Forsyth 12737da2899SCharles.Forsyth struct TkTitem 12837da2899SCharles.Forsyth { 12937da2899SCharles.Forsyth uchar kind; /* e.g. TkTascii, etc */ 13037da2899SCharles.Forsyth uchar tagextra; 13137da2899SCharles.Forsyth short width; 13237da2899SCharles.Forsyth TkTitem *next; 13337da2899SCharles.Forsyth union { 13437da2899SCharles.Forsyth char* string; 13537da2899SCharles.Forsyth TkTwind* win; 13637da2899SCharles.Forsyth TkTmarkinfo* mark; 13737da2899SCharles.Forsyth TkTline* line; 13837da2899SCharles.Forsyth } u; 13937da2899SCharles.Forsyth ulong tags[1]; 14037da2899SCharles.Forsyth /* TkTitem length extends tagextra ulongs beyond */ 14137da2899SCharles.Forsyth }; 14237da2899SCharles.Forsyth 14337da2899SCharles.Forsyth struct TkTmarkinfo 14437da2899SCharles.Forsyth { 14537da2899SCharles.Forsyth char* name; 14637da2899SCharles.Forsyth int gravity; 14737da2899SCharles.Forsyth TkTitem* cur; 14837da2899SCharles.Forsyth TkTmarkinfo* next; 14937da2899SCharles.Forsyth }; 15037da2899SCharles.Forsyth 15137da2899SCharles.Forsyth struct TkTtaginfo 15237da2899SCharles.Forsyth { 15337da2899SCharles.Forsyth int id; 15437da2899SCharles.Forsyth char* name; 15537da2899SCharles.Forsyth TkEnv* env; 15637da2899SCharles.Forsyth TkTtabstop* tabs; 15737da2899SCharles.Forsyth TkTtaginfo* next; 15837da2899SCharles.Forsyth TkAction* binds; /* Binding of current events */ 15937da2899SCharles.Forsyth int opts[TkTnumopts]; 16037da2899SCharles.Forsyth }; 16137da2899SCharles.Forsyth 16237da2899SCharles.Forsyth struct TkTindex 16337da2899SCharles.Forsyth { 16437da2899SCharles.Forsyth TkTitem* item; 16537da2899SCharles.Forsyth TkTline* line; 16637da2899SCharles.Forsyth int pos; /* index within multichar item */ 16737da2899SCharles.Forsyth }; 16837da2899SCharles.Forsyth 16937da2899SCharles.Forsyth extern TkCmdtab tkttagcmd[]; 17037da2899SCharles.Forsyth extern TkCmdtab tktmarkcmd[]; 17137da2899SCharles.Forsyth extern TkCmdtab tktwincmd[]; 17237da2899SCharles.Forsyth 17337da2899SCharles.Forsyth extern void tkfreetext(Tk*); 17437da2899SCharles.Forsyth extern char* tktaddmarkinfo(TkText*, char*, TkTmarkinfo**); 17537da2899SCharles.Forsyth extern char* tktaddtaginfo(Tk*, char*, TkTtaginfo**); 17637da2899SCharles.Forsyth extern int tktadjustind(TkText*, int, TkTindex*); 17737da2899SCharles.Forsyth extern int tktanytags(TkTitem*); 17837da2899SCharles.Forsyth extern Rectangle tktbbox(Tk*, TkTindex*); 17937da2899SCharles.Forsyth extern void tktdirty(Tk*); 18037da2899SCharles.Forsyth extern int tktdispwidth(Tk*, TkTtabstop *tabs, TkTitem*, Font*, int, int, int); 18137da2899SCharles.Forsyth extern void tktendind(TkText*, TkTindex*); 18237da2899SCharles.Forsyth extern char* tktextcursor(Tk*, char*, char **); 18337da2899SCharles.Forsyth extern Tk* tktextevent(Tk*, int, void*); 18437da2899SCharles.Forsyth extern Tk* tktinwindow(Tk*, Point*); 18537da2899SCharles.Forsyth extern char* tktextselection(Tk*, char*, char**); 18637da2899SCharles.Forsyth extern void tktextsize(Tk*, int); 18737da2899SCharles.Forsyth extern TkTmarkinfo* tktfindmark(TkTmarkinfo*, char*); 18837da2899SCharles.Forsyth extern int tktfindsubitem(Tk*, TkTindex*); 18937da2899SCharles.Forsyth extern TkTtaginfo* tktfindtag(TkTtaginfo*, char*); 19037da2899SCharles.Forsyth extern char* tktfixgeom(Tk*, TkTline*, TkTline*, int); 19137da2899SCharles.Forsyth extern void tktfreeitems(TkText*, TkTitem*, int); 19237da2899SCharles.Forsyth extern void tktfreelines(TkText*, TkTline*, int); 19337da2899SCharles.Forsyth extern void tktfreemarks(TkTmarkinfo*); 19437da2899SCharles.Forsyth extern void tktfreetabs(TkTtabstop*); 19537da2899SCharles.Forsyth extern void tktfreetags(TkTtaginfo*); 19637da2899SCharles.Forsyth extern int tktindcompare(TkText*, TkTindex*, int, TkTindex*); 19737da2899SCharles.Forsyth extern int tktindbefore(TkTindex*, TkTindex*); 19837da2899SCharles.Forsyth extern int tktindrune(TkTindex*); 19937da2899SCharles.Forsyth extern char* tktinsert(Tk*, TkTindex*, char*, TkTitem*); 20037da2899SCharles.Forsyth extern int tktisbreak(int); 20137da2899SCharles.Forsyth extern void tktitemind(TkTitem*, TkTindex*); 20237da2899SCharles.Forsyth extern char* tktiteminsert(TkText*, TkTindex*, TkTitem*); 20337da2899SCharles.Forsyth extern TkTline* tktitemline(TkTitem*); 20437da2899SCharles.Forsyth extern char* tktindparse(Tk*, char**, TkTindex*); 20537da2899SCharles.Forsyth extern TkTitem* tktlastitem(TkTitem*); 20637da2899SCharles.Forsyth extern int tktlinenum(TkText*, TkTindex*); 20737da2899SCharles.Forsyth extern int tktlinepos(TkText*, TkTindex*); 20837da2899SCharles.Forsyth extern int tktmarkind(Tk*, char*, TkTindex*); 20937da2899SCharles.Forsyth extern char* tktmarkmove(Tk*, TkTmarkinfo*, TkTindex*); 21037da2899SCharles.Forsyth extern char* tktmarkparse(Tk*, char**, TkTmarkinfo**); 21137da2899SCharles.Forsyth extern int tktmaxwid(TkTline*); 21237da2899SCharles.Forsyth extern char* tktnewitem(int, int, TkTitem**); 21337da2899SCharles.Forsyth extern char* tktnewline(int, TkTitem*, TkTline*, TkTline*, TkTline**); 21437da2899SCharles.Forsyth extern int tktposcount(TkTitem*); 21537da2899SCharles.Forsyth extern TkTline* tktprevwrapline(Tk*, TkTline*); 21637da2899SCharles.Forsyth extern void tktremitem(TkText*, TkTindex*); 21737da2899SCharles.Forsyth extern int tktsametags(TkTitem*, TkTitem*); 21837da2899SCharles.Forsyth extern char* tktsplititem(TkTindex*); 21937da2899SCharles.Forsyth extern void tktstartind(TkText*, TkTindex*); 22037da2899SCharles.Forsyth extern char* tkttagchange(Tk*, int, TkTindex*, TkTindex*, int); 22137da2899SCharles.Forsyth extern int tkttagbit(TkTitem*, int, int); 22237da2899SCharles.Forsyth extern void tkttagcomb(TkTitem*, TkTitem*, int); 22337da2899SCharles.Forsyth extern int tkttagind(Tk*, char*, int, TkTindex*); 22437da2899SCharles.Forsyth extern char* tkttagname(TkText*, int); 22537da2899SCharles.Forsyth extern int tkttagnrange(TkText*, int, TkTindex*, TkTindex*, TkTindex*, TkTindex*); 22637da2899SCharles.Forsyth extern void tkttagopts(Tk*, TkTitem*, int*, TkEnv*, TkTtabstop **, int); 22737da2899SCharles.Forsyth extern char* tkttagparse(Tk*, char**, TkTtaginfo**); 22837da2899SCharles.Forsyth extern int tkttagset(TkTitem*, int); 22937da2899SCharles.Forsyth extern int tktxyind(Tk*, int, int, TkTindex*); 230*c9c0d12eSforsyth extern void tktxtforgetsub(Tk*, Tk*); 231