int main(int argc, char *argv[]) { int rc; int return_size = 15; char *return_string; return_string = malloc(return_size); int myargc = 1; char *myargv[1]; myargv[0] = strip_names_from_path(xsb_executable_full_path(argv[0]),3); if (xsb_init(myargc,myargv)) { fprintf(stderr,"%s initializing XSB: %s\n",xsb_get_init_error_type(), xsb_get_init_error_message()); exit(XSB_ERROR); } #ifdef MULTI_THREAD th_context *th = xsb_get_main_thread(); #define xsb_get_main_thread_macro() xsb_get_main_thread() #else #define xsb_get_main_thread_macro() #endif c2p_functor(CTXTc "consult",1,reg_term(CTXTc 1)); c2p_string(CTXTc "edb.P",p2p_arg(reg_term(CTXTc 1),1)); /* Create command to consult a file: edb.P, and send it. */ if (xsb_command(CTXT) == XSB_ERROR) fprintf(stderr,"++Error consulting edb.P: %s/%s\n", xsb_get_error_type(xsb_get_main_thread_macro()), xsb_get_error_message(xsb_get_main_thread_macro())); c2p_functor(CTXTc "pregs",3,reg_term(CTXTc 1)); rc = xsb_query(CTXT); while (rc == XSB_SUCCESS) { printf("Answer: pregs(%s,%s,%s)\n", xsb_var_string(1),xsb_var_string(2),xsb_var_string(2)); rc = xsb_next(CTXT); } if (rc == XSB_ERROR) fprintf(stderr,"++Query Error: %s/%s\n", xsb_get_error_type(xsb_get_main_thread_macro()), xsb_get_error_message(xsb_get_main_thread_macro())); xsb_close(CTXT); return(0); }
int main(int argc, char *argv[]) { int anslen,rc; int return_size = 15; char *return_string = malloc(return_size); int myargc = 1; char *myargv[1]; myargv[0] = argv[1]; if (xsb_init(myargc,myargv)) { fprintf(stderr,"%s initializing XSB: %s\n",xsb_get_init_error_type(), xsb_get_init_error_message()); exit(XSB_ERROR); } #ifdef MULTI_THREAD th_context *th = xsb_get_main_thread(); #define xsb_get_main_thread_macro() xsb_get_main_thread() #else #define xsb_get_main_thread_macro() #endif /* Create command to consult a file: edb.P, and send it. */ if (xsb_command_string(CTXTc "consult('edb.P').") == XSB_ERROR) fprintf(stderr,"++Error consulting edb.P: %s/%s\n", xsb_get_error_type(xsb_get_main_thread_macro()), xsb_get_error_message(xsb_get_main_thread_macro())); rc = xsb_query_string_string_b(CTXTc "p(X,Y,Z).",return_string,return_size,&anslen,"|"); while (rc == XSB_SUCCESS || rc == XSB_OVERFLOW) { if (rc == XSB_OVERFLOW) { printf("reallocating (%d)\n",anslen); return_string = (char *) realloc(return_string,anslen); return_size = anslen; rc = xsb_get_last_answer_string(CTXTc return_string,return_size,&anslen); } printf("Return %s %d %d\n",return_string,return_size,anslen); rc = xsb_next_string_b(CTXTc return_string,return_size,&anslen,"|"); } if (rc == XSB_ERROR) fprintf(stderr,"++Query Error: %s/%s\n",xsb_get_error_type(xsb_get_main_thread_macro()), xsb_get_error_message(xsb_get_main_thread_macro())); xsb_close(CTXT); return(0); }
int main(int argc, char *argv[]) { int rc; /* xsb_init_string relies on the calling program to pass the absolute or relative path name of the XSB installation directory. We assume that the current program is sitting in the directory ../examples/c_calling_xsb/ To get installation directory, we strip 3 file names from the path. */ int myargc = 1; char *myargv[1]; #ifdef WIN_NT VarString return_string, *rs; XSB_StrCreate(&rs); XSB_StrInit(rs); return_string = *rs; #else XSB_StrDefine(return_string); #endif myargv[0] = argv[1]; if (xsb_init(myargc,myargv)) { fprintf(stderr,"%s initializing XSB: %s\n",xsb_get_init_error_type(),xsb_get_init_error_message()); exit(XSB_ERROR); } #ifdef MULTI_THREAD th_context *th = xsb_get_main_thread(); #endif /* Create command to consult a file: edb.P, and send it. */ if (xsb_command_string(CTXTc "consult('edb.P').") == XSB_ERROR) fprintf(stderr,"++Error consulting edb.P: %s/%s\n",xsb_get_error_type(CTXT), xsb_get_error_message(CTXT)); rc = xsb_query_string_string(CTXTc "p(X,Y,Z).",&return_string,"|"); while (rc == XSB_SUCCESS) { printf("cvsreturn %s\n",(return_string.string)); rc = xsb_next_string(CTXTc &return_string,"|"); } if (rc == XSB_ERROR) fprintf(stderr,"++Query Error: %s/%s\n",xsb_get_error_type(CTXT),xsb_get_error_message(CTXT)); xsb_close(CTXT); /* Close connection */ return(0); }
/* Windows main routine */ int PASCAL WinMain(HANDLE hInstance, HANDLE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow) { MSG msg; WNDCLASS wndclass; FARPROC pfnDdeCallback; UINT ddeerror; int argc = 3; char *argv[] = {"xsb","-i","-n"}; if (hPrevInstance) return FALSE; wndclass.style = 0; wndclass.lpfnWndProc = xsbProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hInstance = hInstance; wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION); wndclass.hCursor = LoadCursor(NULL,IDC_ARROW); wndclass.hbrBackground = GetStockObject(WHITE_BRUSH); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = szAppName; RegisterClass(&wndclass); hwnd = CreateWindow(szAppName,"XSB DDE Server",WS_OVERLAPPEDWINDOW, CW_USEDEFAULT,CW_USEDEFAULT, // x,y position CW_USEDEFAULT,CW_USEDEFAULT, // 200,100, // x,y size NULL,NULL,hInstance,NULL); ShowWindow(hwnd,nCmdShow); // nCmdShow UpdateWindow(hwnd); /* Initialize for DDE */ pfnDdeCallback = MakeProcInstance((FARPROC)DdeCallback,hInstance); idInst = 0; ddeerror = DdeInitialize(&idInst, (PFNCALLBACK)pfnDdeCallback, CBF_SKIP_REGISTRATIONS | CBF_SKIP_UNREGISTRATIONS, 0L); if (ddeerror) { sprintf(tempstring,"Could not initialize server!\n rc=%x, idInst=%x",ddeerror,idInst); MessageBox(hwnd,tempstring,szAppName, MB_ICONEXCLAMATION|MB_OK); DestroyWindow(hwnd); return FALSE; } freopen("xsblog","w",stdout); freopen("xsblog","a",stderr); /* Initialize xsb */ xsb_init(argc,argv); /* This seems necessary??? huh??? rcode = xsb_query_string("true."); while (!rcode) {rcode = xsb_next();} */ hszService = DdeCreateStringHandle(idInst,szAppName,0); DdeNameService(idInst,hszService,NULL,DNS_REGISTER); /* sprintf(tempstring,"XSB INITIALIZED!\n rc=%x, idInst=%x",ddeerror,idInst); MessageBox(hwnd,tempstring,szAppName, MB_ICONEXCLAMATION|MB_OK); */ while (GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } /* Close XSB connection */ xsb_close(); /* terminate DDE */ (void) DdeFreeStringHandle(idInst,hszService); FreeProcInstance(pfnDdeCallback); DdeUninitialize(idInst); return msg.wParam; }
int main(int argc, char *argv[]) { int rcode; int myargc = 3; char *myargv[3]; /* xsb_init relies on the calling program to pass the absolute or relative path name of the XSB installation directory. We assume that the current program is sitting in the directory .../examples/c_calling_xsb/ To get installation directory, we strip 3 file names from the path. */ myargv[0] = strip_names_from_path(xsb_executable_full_path(argv[0]), 3); myargv[1] = "-n"; myargv[2] = "-e writeln(hello). writeln(kkk)."; /* Initialize xsb */ xsb_init(myargc,myargv); /* depend on user to put in right options (-n) */ /* Create command to consult a file: ctest.P, and send it. */ c2p_functor("consult",1,reg_term(1)); c2p_string("ctest",p2p_arg(reg_term(1),1)); if (xsb_command()) { printf("Error consulting ctest.P.\n"); fflush(stdout); } if (xsb_command_string("consult(basics).")) { printf("Error (string) consulting basics.\n"); fflush(stdout); } /* Create the query p(300,X,Y) and send it. */ c2p_functor("p",3,reg_term(1)); c2p_int(300,p2p_arg(reg_term(1),1)); rcode = xsb_query(); /* Print out answer and retrieve next one. */ while (!rcode) { if (!(is_string(p2p_arg(reg_term(2),1)) & is_string(p2p_arg(reg_term(2),2)))) printf("2nd and 3rd subfields must be atoms\n"); else printf("Answer: %d, %s(%s), %s(%s)\n", p2c_int(p2p_arg(reg_term(1),1)), p2c_string(p2p_arg(reg_term(1),2)), xsb_var_string(1), p2c_string(p2p_arg(reg_term(1),3)), xsb_var_string(2) ); fflush(stdout); rcode = xsb_next(); } /* Create the string query p(300,X,Y) and send it, use higher-level routines. */ xsb_make_vars(3); xsb_set_var_int(300,1); rcode = xsb_query_string("p(X,Y,Z)."); /* Print out answer and retrieve next one. */ while (!rcode) { if (!(is_string(p2p_arg(reg_term(2),2)) & is_string(p2p_arg(reg_term(2),3)))) printf("2nd and 3rd subfields must be atoms\n"); else printf("Answer: %d, %s, %s\n", xsb_var_int(1), xsb_var_string(2), xsb_var_string(3) ); fflush(stdout); rcode = xsb_next(); } /* Close connection */ xsb_close(); printf("cmain exit\n"); return(0); }