Exemple #1
0
int
bbsparm_main()
{	////modify by mintbaggio 20040829 for new www
	int i, perm = 1, type;
	html_header(1);
	check_msg();
	type = atoi(getparm("type"));
	printf("<body><center><div class=rhead>%s -- 修改个人参数 [使用者: <span class=h11>%s</span>]</div><hr>\n", BBSNAME,
	       currentuser.userid);
	if (!loginok || isguest)
		http_fatal("匆匆过客不能设定参数");
	changemode(USERDEF);
	if (type)
		return read_form();
	printf("<form action=bbsparm?type=1 method=post>\n");
	printf("<table>\n");
	for (i = 0; defines[i]; i++) {
		char *ptr = "";
		if (i % 2 == 0)
			printf("<tr>\n");
		if (currentuser.userdefine & perm)
			ptr = " checked";
		printf
		    ("<td><input type=checkbox name=perm%d%s></td><td>%s</td>",
		     i, ptr, defines[i]);
		perm = perm * 2;
	}
	printf("</table>");
	printf
	    ("<input type=submit value=确定修改></form><br>以上参数大多仅在telnet方式下才有作用\n");
	printf("</body>");
	http_quit();
	return 0;
}
Exemple #2
0
static clj_Result read_discard(clj_Reader *r, wint_t initch) {
  clj_Result result;
  r->_discard++;
  result = read_form(r);
  r->_discard--;
  return result;
}
Exemple #3
0
int main() {

  init_env(); // Poorly named. Has nothing to do with env alist.
  init_mem();

  uptr_t *env = refer(NIL);
  init_syms(env);

  uptr_t *form_p = refer(NIL);
  while(1) {
    print_env(env);
    print_mem();

    printf_P(PSTR("> "));
    *form_p = read_form(stdin);
    while(getc(stdin) != '\r');
    print_form(eval(env, *form_p));
    printf_P(PSTR("\n"));

    //    print_mem();
    __GC__();
  }

  release(2); // Just a formality really...

  return 0;
}
Exemple #4
0
MalVal *read_list(Reader *reader, MalType type, char start, char end) {
    MalVal *ast, *form;
    char *token = reader_next(reader);
    //g_print("read_list start token: %s\n", token);
    if (token[0] != start) { abort("expected '(' or '['"); }

    ast = malval_new_list(type, g_array_new(TRUE, TRUE, sizeof(MalVal*)));

    while ((token = reader_peek(reader)) &&
           token[0] != end) {
        //g_print("read_list internal token %s\n", token);
        form = read_form(reader);
        if (!form) {
            if (!mal_error) { abort("unknown read_list failure"); }
            g_array_free(ast->val.array, TRUE);
            malval_free(ast);
            return NULL;
        }
        g_array_append_val(ast->val.array, form);
    }
    if (!token) { abort("expected ')' or ']', got EOF"); }
    reader_next(reader);
    //g_print("read_list end token: %s\n", token);
    return ast;
}
Exemple #5
0
static clj_Result read_wrapped(clj_Reader *r, const wint_t *sym) {
  clj_Result result;
  emit(r, CLJ_LIST, L"(");
  emit(r, CLJ_SYMBOL, sym);
  result = read_form(r);
  emit(r, CLJ_LIST | CLJ_END, L")");
  return result;
}
Exemple #6
0
clj_Result clj_read(clj_Reader *r) {
  clj_Result error;
  r->line = 1;
  r->column = 0;
  r->depth = 0;
  r->_discard = 0;
  r->_readback = 0;
  if ((error = setjmp(r->_fail))) {
    return error;
  } else {
    return read_form(r);
  }
}
Exemple #7
0
MalVal *read_str (char *str) {
    Reader *reader;
    char *token;
    MalVal *ast = NULL;

    reader = tokenize(str);
    if (reader) {
        ast = read_form(reader);
        reader_free(reader);
    }

    return ast;
}
Exemple #8
0
static clj_Result read_delimited(clj_Type type, clj_Reader *r,
                                 const wchar_t *begin, wint_t terminator) {
  wint_t c;
  const wchar_t end[] = {terminator, L'\0'};
  form_reader macro_reader;
  emit(r, type, begin);
  r->depth++;
  while (1) {
    c = skip_whitespace(r);
    if (c == terminator) {
      r->depth--;
      emit(r, type | CLJ_END, end);
      return CLJ_MORE;
    } else if ((macro_reader = get_macro_reader(c))) {
      macro_reader(r, c);
    } else if (c == WEOF) {
      reader_error(r, CLJ_UNEXPECTED_EOF);
    } else {
      push_char(r, c);
      read_form(r);
    }
  }
}
Exemple #9
0
int main(int argc, char *argv[]) {

#ifdef ARDUINO
  ARDUINO_INIT_IO(9600);
#endif

  /* populate env with special forms */
  void *env = empty();
  Special Car = { SPECIAL, "car", &car };
  Special Cdr = { SPECIAL, "cdr", &cdr };
  Special Quote = { SPECIAL, "quote", &quote };
  Special Eq = { SPECIAL, "eq", &eq };
  Special Eval = { SPECIAL, "eval", &eval };
  assoc(&env, sym("car"), (void*)&Car);
  assoc(&env, sym("cdr"), (void*)&Cdr);
  assoc(&env, sym("quote"), (void*)&Quote);
  assoc(&env, sym("eq"), (void*)&Eq);
  assoc(&env, sym("eval"), (void*)&Eval);

  print_form(cons(sym("eq"), cons(integer(1), integer(2))));
  printf("\n");
  print_form(eval(&env, cons(sym("eq"), cons(integer(2), integer(3)))));
  printf("\n");

  printf("\n");
  print_form(eval(&env, cons(sym("eq"), cons(integer(1), cons(integer(2), integer(3))))));
  printf("\n");

  while(1) {
    printf("=> ");
    print_form(read_form(stdin));
    printf("\n");
  }

  return 0;
}
Exemple #10
0
MalVal *read_form(Reader *reader) {
    char *token;
    MalVal *form = NULL, *tmp;

//    while(token = reader_next(reader)) {
//        printf("token: %s\n", token);
//    }
//    return NULL;

    token = reader_peek(reader);

    if (!token) { return NULL; }
    //g_print("read_form token: %s\n", token);

    switch (token[0]) {
    case ';':
        abort("comments not yet implemented");
        break;
    case '\'':
        reader_next(reader);
        form = _listX(2, malval_new_symbol("quote"),
                         read_form(reader));
        break;
    case '`':
        reader_next(reader);
        form = _listX(2, malval_new_symbol("quasiquote"),
                         read_form(reader));
        break;
    case '~':
        reader_next(reader);
        if (token[1] == '@') {
            form = _listX(2, malval_new_symbol("splice-unquote"),
                             read_form(reader));
        } else {
            form = _listX(2, malval_new_symbol("unquote"),
                             read_form(reader));
        };
        break;
    case '^':
        reader_next(reader);
        MalVal *meta = read_form(reader);
        form = _listX(3, malval_new_symbol("with-meta"),
                         read_form(reader), meta);
        break;
    case '@':
        reader_next(reader);
        form = _listX(2, malval_new_symbol("deref"),
                         read_form(reader));
        break;


    // list
    case ')':
        abort("unexpected ')'");
        break;
    case '(':
        form = read_list(reader, MAL_LIST, '(', ')');
        break;

    // vector
    case ']':
        abort("unexpected ']'");
        break;
    case '[':
        form = read_list(reader, MAL_VECTOR, '[', ']');
        break;

    // hash-map
    case '}':
        abort("unexpected '}'");
        break;
    case '{':
        form = read_hash_map(reader);
        break;

    default:
        form = read_atom(reader);
        break;
    }
    return form;

}