2d3446c
#include <stdio.h>
2d3446c
#include <SWI-Prolog.h>
2d3446c
2d3446c
#define MAXLINE 1024
2d3446c
2d3446c
int
2d3446c
main(int argc, char **argv)
2d3446c
{ char expression[MAXLINE];
2d3446c
  char *e = expression;
2d3446c
  char *program = argv[0];
2d3446c
  char *plav[2];
2d3446c
  int n;
2d3446c
2d3446c
  /* combine all the arguments in a single string */
2d3446c
2d3446c
  for(n=1; n
2d3446c
  { if ( n != 1 )
2d3446c
      *e++ = ' ';
2d3446c
    strcpy(e, argv[n]);
2d3446c
    e += strlen(e);
2d3446c
  }
2d3446c
2d3446c
  /* make the argument vector for Prolog */
2d3446c
2d3446c
  plav[0] = program;
2d3446c
  plav[1] = NULL;
2d3446c
2d3446c
  /* initialise Prolog */
2d3446c
2d3446c
  if ( !PL_initialise(1, plav) )
2d3446c
    PL_halt(1);
2d3446c
2d3446c
  /* Lookup calc/1 and make the arguments and call */
2d3446c
2d3446c
  { predicate_t pred = PL_predicate("calc", 1, "user");
2d3446c
    term_t h0 = PL_new_term_refs(1);
2d3446c
    int rval;
2d3446c
2d3446c
    PL_put_atom_chars(h0, expression);
2d3446c
    rval = PL_call_predicate(NULL, PL_Q_NORMAL, pred, h0);
2d3446c
2d3446c
    PL_halt(rval ? 0 : 1);
2d3446c
  }
2d3446c
2d3446c
  return 0;
2d3446c
}