char *staticwrap(struct ctlpos *cp, HWND hwnd, char *text, int *lines)
{
HDC hdc = GetDC(hwnd);
- int lpx = GetDeviceCaps(hdc, LOGPIXELSX);
int width, nlines, j;
INT *pwidths, nfit;
SIZE size;
if (lines) *lines = nlines;
+ sfree(pwidths);
+
return ret;
}
winctrl_add_shortcuts(dp, c);
if (actual_base_id == base_id)
base_id += num_ids;
- }
+ } else {
+ sfree(data);
+ }
if (colstart >= 0) {
/*
MessageBeep(0);
}
-void dlg_error_msg(void *dlg, char *msg)
+void dlg_error_msg(void *dlg, const char *msg)
{
struct dlgparam *dp = (struct dlgparam *)dlg;
MessageBox(dp->hwnd, msg,
dp->fixed_pitch_fonts = flag;
}
-struct perctrl_privdata {
- union control *ctrl;
- void *data;
- int needs_free;
-};
-
-static int perctrl_privdata_cmp(void *av, void *bv)
-{
- struct perctrl_privdata *a = (struct perctrl_privdata *)av;
- struct perctrl_privdata *b = (struct perctrl_privdata *)bv;
- if (a->ctrl < b->ctrl)
- return -1;
- else if (a->ctrl > b->ctrl)
- return +1;
- return 0;
-}
-
void dp_init(struct dlgparam *dp)
{
dp->nctrltrees = 0;
memset(dp->shortcuts, 0, sizeof(dp->shortcuts));
dp->hwnd = NULL;
dp->wintitle = dp->errtitle = NULL;
- dp->privdata = newtree234(perctrl_privdata_cmp);
dp->fixed_pitch_fonts = TRUE;
}
void dp_cleanup(struct dlgparam *dp)
{
- struct perctrl_privdata *p;
-
- if (dp->privdata) {
- while ( (p = index234(dp->privdata, 0)) != NULL ) {
- del234(dp->privdata, p);
- if (p->needs_free)
- sfree(p->data);
- sfree(p);
- }
- freetree234(dp->privdata);
- dp->privdata = NULL;
- }
sfree(dp->wintitle);
sfree(dp->errtitle);
}
-
-void *dlg_get_privdata(union control *ctrl, void *dlg)
-{
- struct dlgparam *dp = (struct dlgparam *)dlg;
- struct perctrl_privdata tmp, *p;
- tmp.ctrl = ctrl;
- p = find234(dp->privdata, &tmp, NULL);
- if (p)
- return p->data;
- else
- return NULL;
-}
-
-void dlg_set_privdata(union control *ctrl, void *dlg, void *ptr)
-{
- struct dlgparam *dp = (struct dlgparam *)dlg;
- struct perctrl_privdata tmp, *p;
- tmp.ctrl = ctrl;
- p = find234(dp->privdata, &tmp, NULL);
- if (!p) {
- p = snew(struct perctrl_privdata);
- p->ctrl = ctrl;
- p->needs_free = FALSE;
- add234(dp->privdata, p);
- }
- p->data = ptr;
-}
-
-void *dlg_alloc_privdata(union control *ctrl, void *dlg, size_t size)
-{
- struct dlgparam *dp = (struct dlgparam *)dlg;
- struct perctrl_privdata tmp, *p;
- tmp.ctrl = ctrl;
- p = find234(dp->privdata, &tmp, NULL);
- if (!p) {
- p = snew(struct perctrl_privdata);
- p->ctrl = ctrl;
- p->needs_free = FALSE;
- add234(dp->privdata, p);
- }
- assert(!p->needs_free);
- p->needs_free = TRUE;
- /*
- * This is an internal allocation routine, so it's allowed to
- * use smalloc directly.
- */
- p->data = smalloc(size);
- return p->data;
-}