diff options
Diffstat (limited to 'funtools/mkfunmainlib')
-rwxr-xr-x | funtools/mkfunmainlib | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/funtools/mkfunmainlib b/funtools/mkfunmainlib new file mode 100755 index 0000000..3cbc6bd --- /dev/null +++ b/funtools/mkfunmainlib @@ -0,0 +1,68 @@ +#!/bin/sh + +if [ x"$1" = x"-tcl" ]; then + DOTCL=1 +else + DOTCL=0 +fi + +awk ' +BEGIN{ + dotcl='$DOTCL' + if( dotcl == 0 ){ + printf("#include <mainlib.h>\n\n") + } + else{ + printf("#include <tclmainlib.h>\n\n") + } + printf("\n"); + j = 0 +} +{ + for(i=1; i<=NF; i++){ + name[j] = $i + printf("int %s_main _PRx((int argc, char **argv));\n", $i) + j++ + } +} +END{ + if( dotcl == 0 ){ + printf("\n") + printf("void *funtoolsMainLibInit(void)\n") + printf("{\n") + printf(" MainLib ml;\n") + printf(" if( !(ml=MainLibNew()) )\n"); + printf(" return NULL;\n"); + for(i=0; i<j; i++){ + printf(" if( !MainLibAdd(ml, \"funtools\", \"%s\", %s_main, MAINLIB_ARGV) )\n", name[i], name[i]) + printf(" return NULL;\n"); + } + printf(" return ml;\n"); + printf("}\n") + printf("\n") + } + else{ + printf("\n") + printf("#include <tcl.h>\n") + printf("\n") + printf("int Tclfun_Init (void *vinterp)\n") + printf("{\n") + printf(" Tcl_Interp *interp = (Tcl_Interp *)vinterp;\n") + printf("\n") + for(i=0; i<j; i++){ + printf(" Tcl_CreateObjCommand(interp, \"%s\", MainLibProcess_Tcl,\n", name[i]) + printf(" (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL);\n") + } + printf(" Tcl_CreateObjCommand(interp, \"mainlib\", MainLibProcess_Tcl,\n") + printf(" (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL);\n") + printf(" Tcl_CreateObjCommand(interp, \"mainlibcleanup\", MainLibProcessCleanup_Tcl,\n") + printf(" (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL);\n") + printf(" Tcl_CreateObjCommand(interp, \"mainlibload\", MainLibLoad_Tcl,\n") + printf(" (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL);\n") + printf(" Tcl_PkgProvide(interp, \"tclfun\", \"1.0\");\n") + printf(" return(TCL_OK);\n") + printf("}\n") + printf("\n") + } +} +' |