9 typedef struct Cache Cache;
18 static struct Cache imagecache = {"image"};
19 static struct Cache fontcache = {"font"};
22 getcacheitem(Cache *c, char *name)
26 for(i=0; i<c->ncache; i++)
27 if(c->cache[i]!=nil && strcmp(c->cache[i]->name, name)==0){
35 namecacheitem(Cache *c, void *image, char *name)
41 for(i=0; i<c->ncache; i++){
42 if(c->cache[i] == nil){
46 if(strcmp(c->cache[i]->name, name) == 0){
47 werrstr("%s name %q already in use", c->name, name);
51 cc = ctlmalloc(sizeof(CCache));
53 cc->name = ctlstrdup(name);
58 cc->index = c->ncache;
59 c->cache = ctlrealloc(c->cache, (c->ncache+1)*sizeof(CCache*));
60 c->cache[c->ncache++] = cc;
67 freecacheitem(Cache *c, char *name)
71 cc = getcacheitem(c, name);
73 werrstr("%s name %q not in use", c->name, name);
76 cc->ref--; /* getcacheitem increments ref */
78 /* client must free object itself */
80 c->cache[cc->index] = nil;
87 putcacheitem(CCache *cc)
95 setcacheitemptr(Cache *c, Control *ctl, CCache **cp, char *s)
99 ci = getcacheitem(c, s);
101 ctlerror("%q: %s name %q not defined", ctl->name, c->name, s);
109 _getctlimage(char *name)
111 return getcacheitem(&imagecache, name);
115 _putctlimage(CImage *c)
121 namectlimage(Image *image, char *name)
123 return namecacheitem(&imagecache, image, name);
127 freectlimage(char *name)
129 return freecacheitem(&imagecache, name);
133 _setctlimage(Control *c, CImage **cp, char *s)
135 setcacheitemptr(&imagecache, c, cp, s);
141 _getctlfont(char *name)
143 return getcacheitem(&fontcache, name);
147 _putctlfont(CFont *c)
153 namectlfont(Font *font, char *name)
155 return namecacheitem(&fontcache, font, name);
159 freectlfont(char *name)
161 return freecacheitem(&fontcache, name);
165 _setctlfont(Control *c, CFont **cp, char *s)
167 setcacheitemptr(&fontcache, c, cp, s);