Esempio n. 1
0
/*
 * get_qstring: removes the quotes from a quoted string, allocates
 * space for the resulting string.
 *
 * Returns:
 * 	a pointer to the new string
 */
static char *get_qstring(char *qstring, int len)
{
   /* replace ending quote with \0 */
   qstring[len - 1] = '\0';

   /* copy everything following beginning quote */
   return mk_string(qstring + 1, len - 2);
}
Esempio n. 2
0
    format * mk_unsigned(ast_manager & m, unsigned u) {
        static char buffer[128];
#ifdef _WINDOWS
        sprintf_s(buffer, ARRAYSIZE(buffer), "%u", u);
#else
        sprintf(buffer, "%u", u);
#endif
        return mk_string(m, buffer);
    }
Esempio n. 3
0
    format * mk_int(ast_manager & m, int i) {
        static char buffer[128];
#ifdef _WINDOWS
        sprintf_s(buffer, ARRAYSIZE(buffer), "%d", i);
#else
        sprintf(buffer, "%d", i);
#endif
        return mk_string(m, buffer);
    }
Esempio n. 4
0
bool Theme::load(const char *f) {
	E_RETURN_VAL_IF_FAIL(f != NULL, false);
	/* do not allow loading if clear() wasn't called before */
	E_RETURN_VAL_IF_FAIL(priv->sc == NULL, false);
	priv->is_loaded = false;

	init_interpreter();
	scheme *ss = priv->sc;

	/* 
	 * Determine from which directory we loads file, and set that file as base directory
	 * where '(include)' statement can search additional files. Include uses 'private::theme.search-path'.
	 */
	char *path = edelib_strndup(f, PATH_MAX);
	if(!path)
		E_FATAL(E_STRLOC ": No memory\n");

	char *dir = local_dirname(path);

	/* If returned name is the same as file, dirname wasn't found directory name in given path. */
	if(strcmp(dir, f) != 0) {
		pointer sym = mk_symbol(ss, "private:theme.search-path");
		edelib_scheme_define(ss, ss->global_env, sym, mk_string(ss, dir));
		ss->vptr->setimmutable(sym);
	}

	/* scheme copies path, so we do not need it any more */
	free(path);

	FILE *fd = fopen(f, "r");
	if(!fd) {
		edelib_scheme_deinit(ss);
		free(ss);
		priv->sc = 0;
		return false;
	}

	edelib_scheme_load_named_file(ss, fd, f);
	fclose(fd);

	if(ss->no_memory) {
		E_WARNING(E_STRLOC ": No memory to load theme source in interpreter\n");
		return false;
	}
		
	if(ss->retcode != 0)
		return false;

	/* fetch common variables */
	priv->name   = get_string_var(ss, "private:theme.name");
	priv->author = get_string_var(ss, "private:theme.author");
	priv->sample = get_string_var(ss, "private:theme.sample");

	priv->is_loaded = true;
	return true;
}
Esempio n. 5
0
/*
 * (getenv <what>) => <string>
 * returns environment value for <what>; if <what> is not given, returns a list of all environment key/value pairs
 */
static pointer s_getenv(scheme* sc, pointer arg) {
	if(arg == sc->NIL) {
		char** env = environ;
		pointer lst = sc->NIL;

		while(*env) {
			lst = cons(sc, mk_string(sc, *env), lst);
			env++;
		}

		return scheme_reverse(sc, lst);
	}
	
	pointer a = sc->vptr->pair_car(arg);
	if(a != sc->NIL && sc->vptr->is_string(a)) {
		const char* val;
		if((val = getenv(sc->vptr->string_value(a))) != NULL)
			return mk_string(sc, val);
	}

	return sc->F;
}
Esempio n. 6
0
int main(int argc, char *argv[])
{
  region_t r;
  cap_t fs_server;

  if(argc != 2 && argc != 4) {
    printf(_("Usage: %s /x=shell_options [OPTION_NAME on/off]\n"), argv[0]);
    return 1;
  }

  if(get_process_caps("fs_op", &fs_server, NULL) < 0)
    return 1;

  {
    cap_t opts;
    struct cap_args result;

    r = region_make();
    cap_call(fs_server, r,
	     cap_args_make(cat2(r, mk_int(r, METHOD_FSOP_GET_OBJ),
				mk_string(r, argv[1])),
			   caps_empty, fds_empty),
	     &result);
    filesys_obj_free(fs_server);
    if(expect_cap1(result, &opts) < 0) {
      fprintf(stderr, _("%s: couldn't get options object\n"), argv[0]);
      return 1;
    }

    if(argc == 2) {
      print_option(r, opts, "log_summary");
      print_option(r, opts, "log_into_xterm");
      print_option(r, opts, "print_fs_tree");
      print_option(r, opts, "enable_x11");
    }
    else if(argc == 4) {
      int x;
      if(!strcmp(argv[3], "on")) x = 1;
      else if(!strcmp(argv[3], "off")) x = 0;
      else {
	fprintf(stderr, _("value `%s' not recognised\n"), argv[3]);
	return 1;
      }
      set_option(r, opts, argv[2], x);
    }
    else assert(0);
  }
  return 0;
}
Esempio n. 7
0
int main()
{
  char *double_array[2];
  double_array[0] = (char *)malloc(1);
  double_array[0][0] = 0;
  double_array[1] = NULL;
  caml_startup(double_array);

  std::string s= mk_string(1);
  char* p;
  c_echo (s.c_str(), &p);

  free(p);

  return 0;
}
Esempio n. 8
0
static enum TOK_T get_next_token(port *in, pointer *token)
{
        char ch, *t;

        skip_white_spc(in);
        switch (ch = get_next_char(in)) {
        case EOF:
                return FILE_END;
        case '(':
                return LIST_START;
        case ')':
                return LIST_END;
        case '"':
                *token = mk_string(read_string(in));
                return STRING;
        case '\'':
                return QUOTE;
        case '`':
                return BACKQUOTE;
        case ',':
                if ((ch = get_next_char(in)) == '@')
                        return SPLICE;
                else {
                        push_back_char(in, ch);
                        return UNQUOTE;
                }
        case '.':
                return DOT;
        default:
                push_back_char(in, ch);
                t = get_char_until_delim(in);
                if (test_number(t)) {
                        *token = mk_number(atoi(t));
                        return NUMBER;
                } else {
                        *token = mk_symbol(t);
                        return SYMBOL;
                }
        }
}
Esempio n. 9
0
static int get_id(char *s)
{
  static char string[MAXSTRINGLEN];
  int len;

  if ((len = lower(string, s, MAXSTRINGLEN)) == MAXSTRINGLEN)
    return NOTOKEN;
  if (!strcmp(string, "select"))
    return yylval.ival = RW_SELECT;
  if (!strcmp(string, "insert"))
    return yylval.ival = RW_INSERT;
  if (!strcmp(string, "delete"))
    return yylval.ival = RW_DELETE;
  if (!strcmp(string, "update"))
    return yylval.ival = RW_UPDATE;
  if (!strcmp(string, "create"))
    return yylval.ival = RW_CREATE;
  if (!strcmp(string, "destroy"))
    return yylval.ival = RW_DESTROY;
  if (!strcmp(string, "buildindex"))
    return yylval.ival = RW_BUILD;
  if (!strcmp(string, "rebuildindex"))
    return yylval.ival = RW_REBUILD;
  if (!strcmp(string, "dropindex"))
    return yylval.ival = RW_DROP;
  if (!strcmp(string, "load"))
    return yylval.ival = RW_LOAD;
  if (!strcmp(string, "print"))
    return yylval.ival = RW_PRINT;
  if (!strcmp(string, "help"))
    return yylval.ival = RW_HELP;
  if (!strcmp(string, "quit"))
    return yylval.ival = RW_QUIT;
  if (!strcmp(string, "into"))
    return yylval.ival = RW_INTO;
  if (!strcmp(string, "where"))
    return yylval.ival = RW_WHERE;
  if (!strcmp(string, "primary"))
    return yylval.ival = RW_PRIMARY;
  if (!strcmp(string, "numbuckets"))
    return yylval.ival = RW_NUMBUCKETS;
  if (!strcmp(string, "all"))
    return yylval.ival = RW_ALL;
  if (!strcmp(string, "from"))
    return yylval.ival = RW_FROM;
  if (!strcmp(string, "set"))
    return yylval.ival = RW_SET;
  if (!strcmp(string, "as"))
    return yylval.ival = RW_AS;
  if (!strcmp(string, "table"))
    return yylval.ival = RW_TABLE;
  if (!strcmp(string, "and"))
    return yylval.ival = RW_AND;
  if (!strcmp(string, "or"))
    return yylval.ival = RW_OR;
  if (!strcmp(string, "not"))
    return yylval.ival = RW_NOT;
  if (!strcmp(string, "values"))
    return yylval.ival = RW_VALUES;
  if (!strcmp(string, "int"))
    return yylval.ival = INT_TYPE;
  if (!strcmp(string, "real"))
    return yylval.ival = REAL_TYPE;
  if (!strcmp(string, "char"))
    return yylval.ival = CHAR_TYPE;
  yylval.sval = mk_string(s, len);
  return T_STRING;
}
Esempio n. 10
0
/*
 * get_id: determines whether s is a reserved word, and returns the
 * appropriate token value if it is.  Otherwise, it returns the token
 * value corresponding to a string.  If s is longer than the maximum token
 * length (MAXSTRINGLEN) then it returns NOTOKEN, so that the parser will
 * flag an error (this is a stupid kludge).
 */
static int get_id(char *s)
{
   static char string[MAXSTRINGLEN];
   int len;

   if((len = lower(string, s, MAXSTRINGLEN)) == MAXSTRINGLEN)
      return NOTOKEN;

   /*  SM layer lexemes */

   if(!strcmp(string, "create"))
      return yylval.ival = RW_CREATE;
   if(!strcmp(string, "drop"))
      return yylval.ival = RW_DROP;
   if(!strcmp(string, "table"))
      return yylval.ival = RW_TABLE;
   if(!strcmp(string, "index"))
      return yylval.ival = RW_INDEX;
   if(!strcmp(string, "load"))
      return yylval.ival = RW_LOAD;
   if(!strcmp(string, "help"))
      return yylval.ival = RW_HELP;
   if(!strcmp(string, "exit"))
      return yylval.ival = RW_EXIT;
   if(!strcmp(string, "print"))
      return yylval.ival = RW_PRINT;
   if(!strcmp(string, "set"))
      return yylval.ival = RW_SET;

   if(!strcmp(string, "and"))
      return yylval.ival = RW_AND;

   if(!strcmp(string, "into"))
      return yylval.ival = RW_INTO;
   if(!strcmp(string, "values"))
      return yylval.ival = RW_VALUES;


   /*  QL layer lexemes */
   if(!strcmp(string, "select"))
      return yylval.ival = RW_SELECT;
   if(!strcmp(string, "from"))
      return yylval.ival = RW_FROM;
   if(!strcmp(string, "where"))
      return yylval.ival = RW_WHERE;
   if(!strcmp(string, "insert"))
      return yylval.ival = RW_INSERT;
   if(!strcmp(string, "delete"))
      return yylval.ival = RW_DELETE;
   if(!strcmp(string, "update"))
      return yylval.ival = RW_UPDATE;
   
   /* IO Statistics lexemes */
   if(!strcmp(string, "reset"))
      return yylval.ival = RW_RESET;
   if(!strcmp(string, "io"))
      return yylval.ival = RW_IO;

   if(!strcmp(string, "resize"))
      return yylval.ival = RW_RESIZE;
   if(!strcmp(string, "buffer"))
      return yylval.ival = RW_BUFFER;

   if(!strcmp(string, "queryplans"))
      return yylval.ival = RW_QUERY_PLAN;
   if(!strcmp(string, "on"))
      return yylval.ival = RW_ON;
   if(!strcmp(string, "off"))
      return yylval.ival = RW_OFF;

   /*  unresolved lexemes are strings */

   yylval.sval = mk_string(s, len);
   return T_STRING;
}
Esempio n. 11
0
int main(int argc, char **argv) {
	FILE       *fin  = NULL;
	const char *expr = NULL;
	scheme      sc;

	if(argc > 1) { 
		if(argv[1][0] == '-') {
			if((strcmp(argv[1], "--help") == 0) || (strcmp(argv[1], "-h") == 0)) {
				help();
				return 0;
			} else if((strcmp(argv[1], "--expression") == 0) || (strcmp(argv[1], "-e") == 0)) {
				if(!argv[2]) {
					printf("This option requires a parameter\n");
					return 1;
				}
				expr = argv[2];
			} else {
				printf("Unrecognized option. Use 'ede-scriptbus --help' for options\n");
				return 1;
			}
		}

		if(!expr) {
			fin = fopen(argv[1], "r");
			if(!fin) {
				fprintf(stderr, "Unable to load '%s' file!\n", argv[1]);
				return 1;
			}
		}
	}

	if(!scheme_init(&sc)) {
		fprintf(stderr, "Fatal: Unable to initialize interpreter!\n");
		return 1;
	}

	scheme_set_input_port_file(&sc, stdin);
	scheme_set_output_port_file(&sc, stdout);

	/* load basic stuff */
	scheme_load_string(&sc, init_scm_content);

	/* register additional functions */
	register_sys_functions(&sc);
	register_communication_functions(&sc);
	register_string_functions(&sc);
	register_wm_functions(&sc);

	/* construct *args* */
	pointer args = sc.NIL;
	for(int i = 0; i < argc; i++) {
		pointer value = mk_string(&sc, argv[i]);
		args = cons(&sc, value, args);
	}

	args = scheme_reverse(&sc, args);
	scheme_define(&sc, sc.global_env, mk_symbol(&sc, "*args*"), args);

	if(!expr) {
		/* load file or go into console */
		if(!fin) {
			fin = stdin;
			printf("Type '(quit)' or press Ctrl-D to quit");
		}

		scheme_load_file(&sc, fin);
	} else {
		/* or execute expression */
		scheme_load_string(&sc, expr);
		if(sc.retcode != 0)
			printf("Bad expression: '%s'\n", expr);
	}

	scheme_deinit(&sc);
	return 0;
}
Esempio n. 12
0
pointer mk_symbol(char *string)
{
        pointer x= cons(mk_string(string), NULL);
        type(x) = T_SYMBOL;
        return x;
}
Esempio n. 13
0
File: eval.cpp Progetto: tov/ipd
value_ptr String_literal::eval(const Environment&) const
{
    return mk_string(val_);
}
Esempio n. 14
0
int main(int argc, char **argv) 
{
     scheme sc;
     FILE *fin;
     char *file_name = INITFILE;
     int isfile = 1;
     
     if (argc == 1) {
          printf(BANNER);
     }

     if (argc == 2 && strcmp(argv[1], "-?") == 0) {
          usage();

          return 1;
     }

     if (!scheme_init(&sc)) {
          fprintf(stderr, "Could not initialize!\n");

          return 2;
     }

     scheme_set_input_port_file(&sc, stdin);
     scheme_set_output_port_file(&sc, stdout);

#if USE_DL
     scheme_define(&sc, sc.global_env, 
                   mk_symbol(&sc, "load-extension"), 
                   mk_foreign_func(&sc, scm_load_ext));
#endif

     argv++;

     if (access(file_name, 0) != 0) {
          char *p = getenv("TINYSCHEMEINIT");

          if (p != 0) {
               file_name = p;
          }
     }

     do {
          if (strcmp(file_name, "-") == 0) {
               fin = stdin;
          } else if (strcmp(file_name, "-1") == 0 || 
                     strcmp(file_name, "-c") == 0) {
               pointer args = sc.NIL;

               isfile = file_name[1] == '1';
               file_name = *argv++;

               if (strcmp(file_name, "-") == 0) {
                    fin = stdin;
               } else if (isfile) {
                    fin = fopen(file_name, "r");
               }

               for (; *argv; argv++) {
                    pointer value = mk_string(&sc, *argv);

                    args = cons(&sc, value, args);
               }

               args = reverse_in_place(&sc, sc.NIL, args);
               scheme_define(&sc, sc.global_env, 
                             mk_symbol(&sc, "*args*"), args);
               
          } else {
               fin = fopen(file_name, "r");
          }

          if (isfile && fin == 0) {
               fprintf(stderr, "Could not open file %s\n", file_name);
          } else {
               if (isfile) {
                    scheme_load_named_file(&sc, fin, file_name);
               } else {
                    scheme_load_string(&sc, file_name);
               }

               if (!isfile || fin != stdin) {
                    if (sc.retcode != 0) {
                         fprintf(stderr, "Errors encountered reading %s\n", file_name);
                    }

                    if (isfile) {
                         fclose(fin);
                    }
               }
          }

          file_name = *argv++;

     } while (file_name != 0);

     if (argc == 1) {
          scheme_load_named_file(&sc, stdin, 0);
     }

     scheme_deinit(&sc);
     
     return sc.retcode;
}