From 44bc5a27d53124ba82becd4181fc381053c56fdb Mon Sep 17 00:00:00 2001 From: "Kjetil S. Matheussen" Date: Thu, 8 Jan 2004 14:55:24 +0000 Subject: First commit of k_vst~, k_guile and k_cext svn path=/trunk/externals/k_cext/; revision=1253 --- k_cext_unix.c | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 k_cext_unix.c (limited to 'k_cext_unix.c') diff --git a/k_cext_unix.c b/k_cext_unix.c new file mode 100644 index 0000000..ee9c252 --- /dev/null +++ b/k_cext_unix.c @@ -0,0 +1,77 @@ +/* k_cext_unix.c. unix part of k_cext. Made by Kjetil Matheussen. Never tested. */ +// +/* This program is free software; you can redistribute it and/or */ +/* modify it under the terms of the GNU General Public License */ +/* as published by the Free Software Foundation; either version 2 */ +/* of the License, or (at your option) any later version. */ +/* */ +/* This program is distributed in the hope that it will be useful, */ +/* but WITHOUT ANY WARRANTY; without even the implied warranty of */ +/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */ +/* GNU General Public License for more details. */ +/* */ +/* You should have received a copy of the GNU General Public License */ +/* along with this program; if not, write to the Free Software */ +/* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +/* */ +/* ---------------------------------------------------------------------------- */ + +#include +#include "k_cext.h" +#include + +#include +#include + + +int k_sys_getprocessfunction(t_k_cext *x,char *funcname,char *name){ + + x->handle=dlopen(name,RTLD_NOW|RTLD_GLOBAL); + + if(x->handle!=NULL){ + x->k_cext_process=(void (*)(struct k_cext *))dlsym(x->handle,funcname); + return 1; + } + return 0; +} + +void k_sys_freehandle(t_k_cext *x){ + char temp[500]; + dlclose(x->handle); + + sprintf(temp,"%s.c.o",x->filename); + unlink(temp); +} + +void k_sys_mktempfilename(char *to){ + sprintf(to,"/tmp/pd-k_cext-XXXXXX"); + mktemp(to); +} + +void k_sys_writeincludes(FILE *file){ + fprintf(file,"#include \"" INCLUDEPATH "/" LINUXINCLUDE "/m_pd.h\"\n"); + fprintf(file,"#include \"" INCLUDEPATH "/k_cext.h\"\n"); +} + +void k_sys_makecompilestring(char *to,char *name,char *funcname){ + sprintf(to,"gcc -Wall -O2 %s -o %s.o -shared",name,name); +} + +void k_sys_deletefile(char *name){ + unlink(name); +} + +static void k_sys_cleanup(void){ + system("rm -fr /tmp/pd-k_cext-*"); +} + +static void finish(int sig){ + k_sys_cleanup(); + exit(0); +} + + +void k_sys_init(void){ + atexit(k_sys_cleanup); + signal(SIGINT,finish); +} -- cgit v1.2.1