]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/mothra/libpanel/mem.c
exec(2): fix prototypes
[plan9front.git] / sys / src / cmd / mothra / libpanel / mem.c
1 #include <u.h>
2 #include <libc.h>
3 #include <draw.h>
4 #include <event.h>
5 #include <panel.h>
6 #include "pldefs.h"
7 void *pl_emalloc(int n){
8         void *v;
9         v=mallocz(n, 1);
10         if(v==0){
11                 fprint(2, "Can't malloc!\n");
12                 exits("no mem");
13         }
14         setmalloctag(v, getcallerpc(&n));
15         return v;
16 }
17 void *pl_erealloc(void *v, int n)
18 {
19         v=realloc(v, n);
20         if(v==0){
21                 fprint(2, "Can't realloc!\n");
22                 exits("no mem");
23         }
24         setrealloctag(v, getcallerpc(&v));
25         return v;
26 }
27 void pl_unexpected(Panel *g, char *rou){
28         fprint(2, "%s called unexpectedly (%s %#p)\n", rou, g->kind, g);
29         abort();
30 }
31 void pl_drawerror(Panel *g){
32         pl_unexpected(g, "draw");
33 }
34 int pl_hiterror(Panel *g, Mouse *m){
35         USED(m);
36         pl_unexpected(g, "hit");
37         return 0;
38 }
39 void pl_typeerror(Panel *g, Rune c){
40         USED(c);
41         pl_unexpected(g, "type");
42 }
43 Point pl_getsizeerror(Panel *g, Point childsize){
44         pl_unexpected(g, "getsize");
45         return childsize;
46 }
47 void pl_childspaceerror(Panel *g, Point *ul, Point *size){
48         USED(ul, size);
49         pl_unexpected(g, "childspace");
50 }
51 void pl_scrollerror(Panel *g, int dir, int button, int num, int den){
52         USED(dir, button, num, den);
53         pl_unexpected(g, "scroll");
54 }
55 void pl_setscrollbarerror(Panel *g, int top, int bot, int den){
56         USED(top, bot, den);
57         pl_unexpected(g, "setscrollbar");
58 }
59 int pl_prinormal(Panel *, Point){
60         return PRI_NORMAL;
61 }
62 Panel *pl_newpanel(Panel *parent, int ndata){
63         Panel *v;
64         if(parent && parent->flags&LEAF){
65                 fprint(2, "newpanel: can't create child of %s %#p\n", parent->kind, parent);
66                 exits("bad newpanel");
67         }
68         v=pl_emalloc(sizeof(Panel));
69         v->r=Rect(0,0,0,0);
70         v->flags=0;
71         v->ipad=Pt(0,0);
72         v->pad=Pt(0,0);
73         v->size=Pt(0,0);
74         v->sizereq=Pt(0,0);
75         v->lastmouse=0;
76         v->next=0;
77         v->child=0;
78         v->echild=0;
79         v->b=0;
80         v->pri=pl_prinormal;
81         v->scrollee=0;
82         v->xscroller=0;
83         v->yscroller=0;
84         v->parent=parent;
85         v->scr.pos=Pt(0,0);
86         v->scr.size=Pt(0,0);
87         if(parent){
88                 if(parent->child==0)
89                         parent->child=v;
90                 else
91                         parent->echild->next=v;
92                 parent->echild=v;
93         }
94         v->draw=pl_drawerror;
95         v->hit=pl_hiterror;
96         v->type=pl_typeerror;
97         v->getsize=pl_getsizeerror;
98         v->childspace=pl_childspaceerror;
99         v->scroll=pl_scrollerror;
100         v->setscrollbar=pl_setscrollbarerror;
101         v->free=0;
102         v->snarf=0;
103         v->paste=0;
104         if(ndata)
105                 v->data=pl_emalloc(ndata);
106         else
107                 v->data=0;
108         return v;
109 }
110 void plfree(Panel *p){
111         Panel *cp, *ncp;
112         if(p==0)
113                 return;
114         if(p==plkbfocus)
115                 plkbfocus=0;
116         for(cp=p->child;cp;cp=ncp){
117                 ncp=cp->next;
118                 plfree(cp);
119         }
120         if(p->free) p->free(p);
121         if(p->data) free(p->data);
122         free(p);
123 }