3 * Window Maker window manager
5 * Copyright (c) hmmm... Should I put everybody's name here?
6 * Where's my lawyer?? -- ]d :D
8 * This program is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
24 * Do you think I should move this code into another file? -- ]d
32 #ifdef DRAWSTRING_PLUGIN
49 wPluginPackData(int members
, ...)
54 p
= wmalloc(sizeof(void *) * (members
+ 1));
55 memset(p
, 0, sizeof(void *) * (members
+ 1));
56 va_start(vp
, members
);
57 for(i
=0;i
<members
;i
++) {
58 p
[i
] = va_arg(vp
, void *);
65 wPluginCreateFunction(int type
, char *library_name
,
66 char *init_proc_name
, char *proc_name
, char *free_data_proc_name
,
67 proplist_t pl_arg
, void *init_data
)
70 _DL_InitDataProc
*initProc
;
72 function
= wmalloc(sizeof(WFunction
));
73 memset(function
, 0, sizeof(WFunction
));
75 function
->handle
= dlopen(library_name
, RTLD_LAZY
);
76 if (!function
->handle
) {
77 wwarning(_("library \"%s\" cound not be opened."), library_name
);
82 function
->proc
.any
= dlsym(function
->handle
, proc_name
);
83 if (!function
->proc
.any
) {
84 wwarning(_("function \"%s\" not found in library \"%s\""), proc_name
, library_name
);
85 dlclose(function
->handle
);
90 if (free_data_proc_name
) {
91 function
->freeData
= dlsym(function
->handle
, free_data_proc_name
);
92 if (!function
->freeData
) {
93 wwarning(_("function \"%s\" not found in library \"%s\""), free_data_proc_name
, library_name
);
95 dlclose(function->handle);
102 if (pl_arg
) function
->arg
= PLDeepCopy(pl_arg
);
103 function
->data
= init_data
;
104 printf("init data %x\n", function
->data
);
105 if (init_proc_name
) {
106 initProc
= dlsym(function
->handle
, init_proc_name
);
108 initProc(function
->arg
, function
->data
);
110 /* Where's my english teacher? -- ]d
111 wwarning(_("ignore?"),?);
116 function
->type
= type
;
121 wPluginDestroyFunction(WFunction
*function
)
126 if (function
->data
) {
127 if (function
->freeData
)
128 function
->freeData(function
->arg
, &function
->data
);
129 wfree(function
->data
);
131 if (function
->arg
) PLRelease(function
->arg
);