// @BAKE gcc $@ -o $*.out $(pkg-config --cflags --libs tcl tk) #include <stdio.h> #include <stdlib.h> #include <pthread.h> #include <tcl.h> #include <tk.h> // our button callback static int Tcl_baah(ClientData clientData, Tcl_Interp * interp, int argc, const char * * argv) { puts("BAAAAAAAH"); return TCL_OK; } static void tcl_run(void) { Tcl_Interp * interp = Tcl_CreateInterp(); Tcl_Init(interp); Tk_Init(interp); Tcl_CreateCommand(interp, "baah", Tcl_baah, (ClientData)NULL, (void (*)())NULL); /* if only it were past 2023 we could have #embed! * oh wait... */ int result = Tcl_EvalFile(interp, "button_help.tcl"); if (result == TCL_ERROR) { fprintf(stderr, "Tcl script execution failed: %s\n", Tcl_GetStringResult(interp)); exit(1); } Tk_MainLoop(); } signed main() { pthread_t tcl_thread; pthread_create(&tcl_thread, NULL, (void *(*)(void*))tcl_run, (void*)NULL); // whatever you want while (1) { ; } }