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; }
static clj_Result read_discard(clj_Reader *r, wint_t initch) { clj_Result result; r->_discard++; result = read_form(r); r->_discard--; return result; }
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; }
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; }
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; }
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); } }
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; }
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); } } }
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", "e }; 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; }
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; }