]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/abaco/dat.h
awk: make empty FS unicodely-correct.
[plan9front.git] / sys / src / cmd / abaco / dat.h
1 typedef struct  Box Box;
2 typedef struct  Cimage Cimage;
3 typedef struct  Column Column;
4 typedef struct  Exec Exec;
5 typedef struct  Line Line;
6 typedef struct  Page Page;
7 typedef struct  Row Row;
8 typedef struct  Runestr Runestr;
9 typedef struct  Text    Text;
10 typedef struct  Timer Timer;
11 typedef struct  Url Url;
12 typedef struct  Window Window;
13
14 struct Runestr
15 {
16         Rune    *r;
17         int     nr;
18 };
19
20 enum
21 {
22         Rowtag,
23         Columntag,
24         Tag,
25         Urltag,
26         Statustag,
27         Entry,
28         Textarea,
29 };
30
31 struct Text
32 {
33         Frame;
34         uint            org;
35         uint            q0;
36         uint            q1;
37         int             what;
38         Window  *w;
39         Rectangle scrollr;
40         Rectangle lastsr;
41         Rectangle all;
42         Row             *row;
43         Column  *col;
44         Runestr rs;
45 };
46
47 uint            textbacknl(Text*, uint, uint);
48 int             textbswidth(Text*, Rune);
49 int             textclickmatch(Text*, int, int, int, uint*);
50 void            textclose(Text*);
51 void            textdelete(Text*, uint, uint);
52 void            textdoubleclick(Text*, uint*, uint*);
53 void            textfill(Text*);
54 void            textframescroll(Text*, int);
55 void            textinit(Text *, Image *, Rectangle, Font *, Image **);
56 void            textinsert(Text*, uint, Rune*, uint);
57 void            textredraw(Text *, Rectangle, Font *, Image *);
58 int             textresize(Text *, Image *, Rectangle);
59 void            textscrdraw(Text*);
60 void            textscroll(Text*, int);
61 void            textselect(Text*);
62 int             textselect2(Text *, uint *, uint *, Text **);
63 int             textselect3(Text *, uint *, uint *);
64 void            textset(Text *, Rune *, int);
65 void            textsetorigin(Text*, uint, int);
66 void            textsetselect(Text*, uint, uint);
67 void            textshow(Text*, uint, uint, int);
68 void            texttype(Text*, Rune);
69 void            textmouse(Text *, Point, int);
70
71 struct Line
72 {
73         Rectangle       r;
74         int             state;
75         int             hastext;
76         int             hastable;
77         Box             *boxes;
78         Box             *lastbox;
79         Line            *prev;
80         Line            *next;
81 };
82
83 struct Box
84 {
85         Item    *i;
86         Rectangle        r;
87
88         void            (*draw)(Box *, Page *, Image *);
89         void            (*mouse)(Box *, Page *, int);
90         void            (*key)(Box *, Page *, Rune);
91         Box             *prev;
92         Box             *next;
93 };
94
95 Box*            boxalloc(Line *, Item *, Rectangle);
96 void            boxinit(Box *);
97
98 struct Lay
99 {
100         Rectangle       r;
101         int             width;
102         int             xwall;
103         Line            *lines;
104         Line            *lastline;
105         Font            *font;
106         Ifloat  *floats;
107         int             laying;
108 };
109
110 void            laypage(Page *p);
111 Lay*            layitems(Item *, Rectangle, int);
112 void            laydraw(Page *, Image *, Lay *);
113 void            layfree(Lay *);
114
115 struct Cimage
116 {
117                 Ref;
118         Image   *i;
119         Memimage *mi;
120         Url             *url;
121         Cimage  *next;
122 };
123
124 struct Url
125 {
126                 Ref;                    /* urls in window.url[] are not freed */
127         int             id;
128         int             method; /* HGet or HPost */
129         Runestr src;            /* requested url */
130         Runestr act;            /* actual url (redirection) */
131         Runestr post;           /* only set if method==HPost */
132         Runestr ctype;  /* content type */
133 };
134
135 Url*            urlalloc(Runestr *, Runestr *, int);
136 void            urlfree(Url *);
137 Url*            urldup(Url *);
138 int             urlopen(Url *);
139
140 struct Page
141 {
142         Url             *url;
143         Runestr title;
144         Window  *w;
145         Image   *b;
146
147         Rectangle       r;
148         Rectangle all;
149         Rectangle       vscrollr;
150         Rectangle       hscrollr;
151         Row             *row;
152         Column  *col;
153
154         Docinfo *doc;
155         Kidinfo *kidinfo;
156         Item            *items;
157         Lay             *lay;
158         Point           pos;
159
160         int             selecting;
161         Point           top, bot;
162         Box             *topbx, *botbx;
163
164         int             aborting;
165         int             changed;
166         int             loading;
167
168         Rune            *status;
169
170         Page            *parent;
171         Page            *child;
172         Page            *next;
173
174         Cimage  **cimage;
175         int             ncimage;
176
177         struct{
178                 long    t;
179                 Runestr rs;
180         }refresh;
181 };
182
183 void            pageget(Page *, Runestr *, Runestr *, int, int);
184 void            pageload(Page *, Url *, int);
185 void            pageclose(Page *);
186 void            pageredraw(Page *);
187 void            pagerender(Page *);
188 void            pagemouse(Page *, Point, int);
189 void            pagetype(Page *, Rune, Point);
190 void            pagescrldraw(Page *);
191 void            pagescroll(Page *, int, int);
192 int             pagescrollxy(Page *, int, int);
193 int             pageabort(Page *);
194 void            pagesnarf(Page *);
195 void            pagesetrefresh(Page *);
196 int             pagerefresh(Page *);
197
198 struct Window
199 {
200                 Ref;
201                 QLock;
202         Text            tag;
203         Text            url;
204         Page            page;
205         Text            status;
206         int             owner;
207         int             inpage;
208         Rectangle       r;
209         Column  *col;
210         struct{
211                 Url     **url;
212                 int     nurl;
213                 int     cid;
214         }history;
215 };
216
217 void            wininit(Window *, Window *, Rectangle);
218 int             winclean(Window *, int);
219 void            winclose(Window *);
220 int             winresize(Window *, Rectangle, int);
221 Text*   wintext(Window *, Point);
222 void            winlock(Window *, int);
223 void            winunlock(Window *);
224 void            winaddhist(Window *, Url *);
225 void            wingohist(Window *, int);
226 void            winsettag(Window *);
227 void            winseturl(Window *);
228 void            winsetstatus(Window *w, Rune *);
229 Text*   wintype(Window *, Point, Rune);
230 Text*   winmouse(Window *, Point, int);
231 void            winmousebut(Window *);
232 void            windebug(Window *);
233
234 struct Column
235 {
236         Rectangle r;
237         Text    tag;
238         Row             *row;
239         Window  **w;
240         int             nw;
241         int             safe;
242 };
243
244 void            colinit(Column*, Rectangle);
245 Window* coladd(Column*, Window*, Window*, int);
246 void            colclose(Column*, Window*, int);
247 void            colcloseall(Column*);
248 void            colresize(Column*, Rectangle);
249 Text*   colwhich(Column*, Point, Rune, int);
250 void            coldragwin(Column*, Window*, int);
251 void            colgrow(Column*, Window*, int);
252 int             colclean(Column*);
253 void            colsort(Column*);
254 void            colmousebut(Column*);
255
256 struct Row
257 {
258         QLock;
259         Rectangle r;
260         Text    tag;
261         Column  **col;
262         int             ncol;
263
264 };
265
266 void            rowinit(Row*, Rectangle);
267 Column* rowadd(Row*, Column *c, int);
268 void            rowclose(Row*, Column*, int);
269 Text*   rowwhich(Row*, Point, Rune, int);
270 Column* rowwhichcol(Row*, Point);
271 void            rowresize(Row*, Rectangle);
272 void            rowdragcol(Row*, Column*, int but);
273
274 struct Exec
275 {
276         char            *cmd;
277         int             p[2];           /* p[1] is write to program; p[0] set to prog fd 0*/
278         int             q[2];           /* q[0] is read from program; q[1] set to prog fd 1 */
279         Channel *sync;  /* chan(ulong) */
280 };
281
282 struct Timer
283 {
284         int             dt;
285         int             cancel;
286         Channel *c;             /* chan(int) */
287         Timer   *next;
288 };
289
290 enum
291 {
292         Scrollsize      =       12,
293         Scrollgap       =       4,
294         Margin =                4,
295         Border =                2,
296         Space  =                2,
297         Tabspace =      30,
298         Boxsize =               12,
299         WFont =         FntR*NumSize+Tiny,
300
301         Panspeed =      4,
302         Maxtab =                8,
303
304         BUFSIZE =               1024*8,
305         RBUFSIZE =      BUFSIZE/sizeof(Rune),
306         STACK =         128*1024,
307 };
308
309 enum
310 {
311         FALSE,
312         TRUE,
313         XXX,
314 };
315
316 enum
317 {
318         Light = 0xEEEEEE,
319         Dark = 0x666666,
320         Red = 0xBB0000,
321         Back = 0xCCCCCC,
322 };
323
324 Mouse           *mouse;
325 Mousectl                *mousectl;
326 Keyboardctl     *keyboardctl;
327 Image           *tagcols[NCOL];
328 Image           *textcols[NCOL];
329 Image           *but2col;
330 Image           *but3col;
331 Image           *button;
332 Image           *colbutton;
333 Font                    *passfont;
334 Cursor          boxcursor;
335 Row                     row;
336 Text                    *argtext;
337 Text                    *seltext;
338 Text                    *typetext;
339 Page                    *selpage;
340 Column          *activecol;
341 char                    *webmountpt;
342 int                     plumbsendfd;
343 int                     webctlfd;
344 char                    *charset;
345 int                     procstderr;
346
347 Channel         *cplumb;                /* chan(Plumbmsg*) */
348 Channel         *cexit;         /* chan(int) */
349 Channel         *crefresh;              /* chan(page *) */