📄 embeddedclient.c
字号:
#line 74 "/export/scratch0/monet/monet.GNU.64.64.d.14791/MonetDB5/src/tools/embeddedclient.mx"#include "embeddedclient.h"#include "Mapi.h"static voidMonet_init(opt *set, int setlen){ char *p; opt *n = (opt *) GDKmalloc(setlen * sizeof(opt)); int i, j, nlen = 0; char *dbname = mo_find_option(set, setlen, "gdk_dbname"); char *dbfarm = mo_find_option(set, setlen, "gdk_dbfarm"); char *alloc_map = mo_find_option(set, setlen, "gdk_alloc_map"); if (n == NULL || dbname == NULL || dbfarm == NULL || alloc_map == NULL) { if (n != NULL) GDKfree(n); return; } dbfarm = mo_substitute(set, setlen, dbfarm); /* determine Monet's kernel settings. */ if (!GDKinit(dbname, dbfarm, strcasecmp(alloc_map, "yes") == 0)) { free(dbfarm); GDKfree(n); return; } free(dbfarm); for (i = 0; i < setlen; i++) { int done = 0; for (j = 0; j < nlen; j++) { if (strcmp(n[j].name, set[i].name) == 0) { if (n[j].kind < set[i].kind) n[j] = set[i]; done = 1; break; } } if (!done) { n[nlen] = set[i]; nlen++; } } for (i = 0; i < nlen; i++) { char *value; value = mo_substitute(n, nlen, n[i].value); GDKsetenv(n[i].name, value); free(value); } GDKfree(n); if ((p = GDKgetenv("gdk_debug")) != NULL) GDKdebug = strtol(p, NULL, 10); if ((p = GDKgetenv("gdk_mem_bigsize")) != NULL) GDK_mem_bigsize = strtol(p, NULL, 10); if ((p = GDKgetenv("gdk_vm_minsize")) != NULL) GDK_vm_minsize = strtol(p, NULL, 10); if (GDKgetenv_isyes("gdk_embedded")) { GDKembedded = 1; } if (GDKgetenv_isyes("monet_daemon")) monet_daemon = 1; if (GDKgetenv_isyes("monet_embedded")) { monet_daemon = 1; GDKembedded = 1; }}static opt *embedded_set = NULL;static int embedded_len = 0;static void *start_mal_server(void *arg){ static int initialized = 0; stream *in, *out; char buf[128]; if (!initialized) {/* monet_singlethreaded = 1; */ if (embedded_set == NULL) { int len = mo_builtin_settings(&embedded_set); len = mo_add_option(&embedded_set, len, opt_config, "prefix", MONETDBPREFIX); len = mo_add_option(&embedded_set, len, opt_config, "config", MONETDBCONFIG); embedded_len = mo_system_config(&embedded_set, len); } Monet_init(embedded_set, embedded_len); /* you don;t need the commandline arguments anymore */ mo_free_options(embedded_set, embedded_len); if (mal_init()) return 0; MSinitClientPrg(mal_clients, "user","main"); initialized = 1; } in = ((stream **) arg)[0]; out = ((stream **) arg)[1]; free(arg); snprintf(buf, sizeof(buf), "in := \"" PTRFMT "\":stream;\n" "out := \"" PTRFMT "\":stream;\n" "mapi.malclient(in, out);\n", PTRFMTCAST in, PTRFMTCAST out); callString(mal_clients, buf, 0); return NULL;}Mapiembedded_mal(opt *set, int len){ Mapi mid; pthread_t malthread; stream **server; if (set) { embedded_set = set; embedded_len = len; } server = mapi_embedded_init(&mid,"mal"); pthread_create(&malthread, NULL, start_mal_server, (void *) server); mapi_start_talking(mid); return mid;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -