1 #include "lib9.h" 2 #include "draw.h" 3 #include "tk.h" 4 5 #define O(t, e) ((long)(&((t*)0)->e)) 6 7 TkStab tkorient[] = 8 { 9 "vertical", Tkvertical, 10 "horizontal", Tkhorizontal, 11 nil 12 }; 13 14 #define RGB(r,g,b) ((r<<24)|(g<<16)|(b<<8)|0xff) 15 16 TkStab tkcolortab[] = 17 { 18 "black", RGB(0,0,0), 19 "blue", RGB(0,0,204), 20 "darkblue", RGB(93,0,187), 21 "red", RGB(255,0,0), 22 "yellow", RGB(255,255,0), 23 "green", RGB(0,128,0), 24 "white", RGB(255,255,255), 25 "orange", RGB(255,170,0), 26 "aqua", RGB(0,255,255), 27 "fuchsia", RGB(255,0,255), 28 "gray", RGB(128,128,128), 29 "grey", RGB(128,128,128), 30 "lime", RGB(0,255,0), 31 "maroon", RGB(128,0,0), 32 "navy", RGB(0,0,128), 33 "olive", RGB(128,128,0), 34 "purple", RGB(128,0,128), 35 "silver", RGB(192,192,192), 36 "teal", RGB(0,128,128), 37 "transparent", DTransparent, 38 nil 39 }; 40 41 TkStab tkrelief[] = 42 { 43 "raised", TKraised, 44 "sunken", TKsunken, 45 "flat", TKflat, 46 "groove", TKgroove, 47 "ridge", TKridge, 48 nil 49 }; 50 51 TkStab tkbool[] = 52 { 53 "0", BoolF, 54 "no", BoolF, 55 "off", BoolF, 56 "false", BoolF, 57 "1", BoolT, 58 "yes", BoolT, 59 "on", BoolT, 60 "true", BoolT, 61 nil 62 }; 63 64 TkStab tkanchor[] = 65 { 66 "center", Tkcenter, 67 "c", Tkcenter, 68 "n", Tknorth, 69 "ne", Tknorth|Tkeast, 70 "e", Tkeast, 71 "se", Tksouth|Tkeast, 72 "s", Tksouth, 73 "sw", Tksouth|Tkwest, 74 "w", Tkwest, 75 "nw", Tknorth|Tkwest, 76 nil 77 }; 78 79 static 80 TkStab tkstate[] = 81 { 82 "normal", 0, 83 "active", Tkactive, 84 "disabled", Tkdisabled, 85 nil 86 }; 87 88 static 89 TkStab tktakefocus[] = 90 { 91 "0", 0, 92 "1", Tktakefocus, 93 nil 94 }; 95 96 TkStab tktabjust[] = 97 { 98 "left", Tkleft, 99 "right", Tkright, 100 "center", Tkcenter, 101 "numeric", Tknumeric, 102 nil 103 }; 104 105 TkStab tkwrap[] = 106 { 107 "none", Tkwrapnone, 108 "word", Tkwrapword, 109 "char", Tkwrapchar, 110 nil 111 }; 112 113 TkStab tkjustify[] = 114 { 115 "left", Tkleft, 116 "right", Tkright, 117 "center", Tkcenter, 118 nil 119 }; 120 121 TkOption tkgeneric[] = 122 { 123 "actx", OPTact, 0, IAUX(0), 124 "acty", OPTact, 0, IAUX(1), 125 "actwidth", OPTdist, O(Tk, act.width), IAUX(O(Tk, env)), 126 "actheight", OPTdist, O(Tk, act.height), IAUX(O(Tk, env)), 127 "bd", OPTnndist, O(Tk, borderwidth), nil, 128 "borderwidth", OPTnndist, O(Tk, borderwidth), nil, 129 "highlightthickness", OPTnndist, O(Tk, highlightwidth), nil, 130 "height", OPTsize, 0, IAUX(O(Tk, env)), 131 "width", OPTsize, 0, IAUX(O(Tk, env)), 132 "relief", OPTstab, O(Tk, relief), tkrelief, 133 "state", OPTflag, O(Tk, flag), tkstate, 134 "font", OPTfont, O(Tk, env), nil, 135 "foreground", OPTcolr, O(Tk, env), IAUX(TkCforegnd), 136 "background", OPTcolr, O(Tk, env), IAUX(TkCbackgnd), 137 "fg", OPTcolr, O(Tk, env), IAUX(TkCforegnd), 138 "bg", OPTcolr, O(Tk, env), IAUX(TkCbackgnd), 139 "selectcolor", OPTcolr, O(Tk, env), IAUX(TkCselect), 140 "selectforeground", OPTcolr, O(Tk, env), IAUX(TkCselectfgnd), 141 "selectbackground", OPTcolr, O(Tk, env), IAUX(TkCselectbgnd), 142 "activeforeground", OPTcolr, O(Tk, env), IAUX(TkCactivefgnd), 143 "activebackground", OPTcolr, O(Tk, env), IAUX(TkCactivebgnd), 144 "highlightcolor", OPTcolr, O(Tk, env), IAUX(TkChighlightfgnd), 145 "disabledcolor", OPTcolr, O(Tk, env), IAUX(TkCdisablefgnd), 146 "padx", OPTnndist, O(Tk, pad.x), nil, 147 "pady", OPTnndist, O(Tk, pad.y), nil, 148 "takefocus", OPTflag, O(Tk, flag), tktakefocus, 149 nil 150 }; 151 152 TkOption tktop[] = 153 { 154 "x", OPTdist, O(TkWin, req.x), nil, 155 "y", OPTdist, O(TkWin, req.y), nil, 156 nil 157 }; 158 159 TkOption tktopdbg[] = 160 { 161 "debug", OPTbool, O(TkTop, debug), nil, 162 nil 163 }; 164 165 TkMethod *tkmethod[] = 166 { 167 &framemethod, /* TKframe */ 168 &labelmethod, /* TKlabel */ 169 &checkbuttonmethod, /* TKcheckbutton */ 170 &buttonmethod, /* TKbutton */ 171 &menubuttonmethod, /* TKmenubutton */ 172 &menumethod, /* TKmenu */ 173 &separatormethod, /* TKseparator */ 174 &cascademethod, /* TKcascade */ 175 &listboxmethod, /* TKlistbox */ 176 &scrollbarmethod, /* TKscrollbar */ 177 &textmethod, /* TKtext */ 178 &canvasmethod, /* TKcanvas */ 179 &entrymethod, /* TKentry */ 180 &radiobuttonmethod, /* TKradiobutton */ 181 &scalemethod, /* TKscale */ 182 &panelmethod, /* TKpanel */ 183 &choicebuttonmethod, /*TKchoicebutton */ 184 }; 185 186 char TkNomem[] = "!out of memory"; 187 char TkBadop[] = "!bad option"; 188 char TkOparg[] = "!arg requires option"; 189 char TkBadvl[] = "!bad value"; 190 char TkBadwp[] = "!bad window path"; 191 char TkWpack[] = "!window is already packed"; 192 char TkNotop[] = "!no toplevel"; 193 char TkDupli[] = "!window path already exists"; 194 char TkNotpk[] = "!window not packed"; 195 char TkBadcm[] = "!bad command"; 196 char TkIstop[] = "!can't pack top level"; 197 char TkBadbm[] = "!failed to load bitmap"; 198 char TkBadft[] = "!failed to open font"; 199 char TkBadit[] = "!bad item type"; 200 char TkBadtg[] = "!bad/no matching tag"; 201 char TkFewpt[] = "!wrong number of points"; 202 char TkBadsq[] = "!bad event sequence"; 203 char TkBadix[] = "!bad index"; 204 char TkNotwm[] = "!not a window"; 205 char TkBadvr[] = "!variable does not exist"; 206 char TkNotvt[] = "!variable is wrong type"; 207 char TkMovfw[] = "!too many events buffered"; 208 char TkBadsl[] = "!selection already exists"; 209 char TkSyntx[] = "!bad [] or {} syntax"; 210 char TkRecur[] = "!cannot pack recursively"; 211 char TkDepth[] = "!execution stack too big"; 212 char TkNomaster[] = "!no master given"; 213 char TkNotgrid[] = "!not a grid"; 214 char TkIsgrid[] = "!cannot use pack inside a grid"; 215 char TkBadgridcell[] = "!grid cell in use"; 216 char TkBadspan[] = "!bad grid span"; 217 char TkBadcursor[] = "!bad cursor image"; 218