PUBLIC int main(int argc, char *argv[]) { if (argc < 2) { fprintf(stderr, "Usage: move [-t] <dbfilename> [<move-source-code-file> ...]\n" "\t-t\tInhibits loading threads which were active when the DB was saved\n"); exit(MOVE_EXIT_ERROR); } signal(SIGINT, siginthandler); /* %%% This can be made to emergency-flush the database to disk, later on %%% */ write_pid(); init_gc(); init_object(); init_prim(); init_vm_global(); init_thread(); checkpoint_filename = "move.checkpoint"; install_primitives(); { int load_threads = 1; if (!strcmp(argv[1], "-t")) { load_threads = 0; argv++; argc--; } import_db(argv[1], load_threads); } bind_primitives_to_symbols(); import_cmdline_files(argc - 2, argv + 2); run_main_loop(); done_gc(); return MOVE_EXIT_OK; }
void init_ground_env(void) { init_prim(L"+", prim_plus); init_prim(L"*", prim_times); init_prim(L"-", prim_minus); init_prim(L"/", prim_divided); init_prim(L"$\\", prim_lambda); init_prim(L"$lambda", prim_lambda); init_prim(L"$quote", prim_quote); init_prim(L"eval", prim_eval); init_prim(L"apply", prim_apply); init_prim(L"$define!", prim_define); init_prim(L"$set!", prim_set); init_prim(L"$if", prim_if); init_prim(L"=?", prim_equals); init_prim(L">?", prim_greater); init_prim(L">=?", prim_greater_eq); init_prim(L"<?", prim_lesser); init_prim(L"<=?", prim_lesser_eq); init_prim(L"=", prim_equals); init_prim(L">", prim_greater); init_prim(L">=", prim_greater_eq); init_prim(L"<", prim_lesser); init_prim(L"<=", prim_lesser_eq); init_prim(L"and?", prim_and); init_prim(L"$and?", prim_s_and); init_prim(L"or?", prim_or); init_prim(L"$or?", prim_s_or); init_prim(L"car", prim_car); init_prim(L"cdr", prim_cdr); init_prim(L"set-car!", prim_set_car); init_prim(L"set-cdr!", prim_set_cdr); init_prim(L"cons", prim_cons); init_prim(L"$sequence", prim_sequence); init_prim(L"$seq", prim_sequence); init_prim(L"null?", prim_null); init_prim(L"pair?", prim_p_pair); init_prim(L"symbol?", prim_p_symbol); init_prim(L"number?", prim_p_number); init_prim(L"primitive?", prim_p_primitive); init_prim(L"end-object?", prim_p_end_obj); init_prim(L"boolean?", prim_p_boolean); init_prim(L"environment?", prim_p_environment); init_prim(L"procedure?", prim_p_procedure); init_prim(L"ignore?", prim_p_ignore); init_prim(L"eq?", prim_eq); init_prim(L"make-end-object", prim_make_end_obj); init_prim(L"list", prim_list); init_prim(L"character?", prim_p_character); init_prim(L"array?", prim_p_array); init_prim(L"string?", prim_p_array); init_prim(L"array-ref", prim_array_ref); init_prim(L"array-set!", prim_array_set); init_prim(L"array-length", prim_array_length); init_prim(L"make-array", prim_make_array); init_prim(L"make-empty-environment", prim_make_empty_environment); init_prim(L"$get-current-environment", prim_get_current_environment); init_prim(L"port?", prim_p_port); init_prim(L"read", prim_read); init_prim(L"write", prim_write); init_prim(L"open-file", prim_open_file); init_prim(L"close-port", prim_close_port); init_prim(L"not", prim_not); init_prim(L"$parent-environment", prim_parent_environment); init_prim(L"$make-child-environment", prim_make_child_environment); init_prim(L"$load", prim_load); init_prim(L"$environment-symbols", prim_environment_symbols); init_prim(L"$load-foreign-library", prim_load_foreign_library); init_prim(L"foreign-object?", prim_p_foreign_object); init_prim(L"make-socket", prim_make_socket); }
main() { DB db[2]; /* packet double buffer */ DB *cdb; /* current db */ MATRIX rottrans; /* rot-trans matrix */ int i; /* work */ int dmy, flg; /* dummy */ CVECTOR col[12]; /* cube color */ u_long cnt; etc.near_clip=500; etc.far_clip=5000; etc.clip_off=0; PadInit(0); /* initialize PAD */ ResetGraph(0); /* reset graphic subsystem (0:cold,1:warm) */ SetGraphDebug(0); /* set debug mode (0:off, 1:monitor, 2:dump) */ InitGeom(); /* initialize geometry subsystem */ SetGeomOffset(320, 240); /* set geometry origin as (160, 120) */ SetGeomScreen(SCR_Z); /* distance to viewing-screen */ SetLightMatrix(&LLM); SetColorMatrix(&LCM); SetBackColor(BK.vx,BK.vy,BK.vz); SetFarColor(FC.vx,FC.vy,FC.vz); SetFogNear(1*SCR_Z,SCR_Z); /* initialize environment for double buffer (interlace) * buffer ID VRAM address *------------------------------------------------------- * buffer #0 (0, 0)-(640,480) * buffer #1 (0, 0)-(640,480) */ SetDefDrawEnv(&db[0].draw, 0, 0, 640, 480); SetDefDrawEnv(&db[1].draw, 0, 0, 640, 480); SetDefDispEnv(&db[0].disp, 0, 0, 640, 480); SetDefDispEnv(&db[1].disp, 0, 0, 640, 480); FntLoad(960,256); SetDumpFnt(FntOpen(64,64,256,200,0,512)); SetRCnt(RCntCNT2,0xffff,RCntMdNOINTR|RCntMdFR); StartRCnt(RCntCNT2); /* set surface colors */ for (i = 0; i < 12; i+=2) { col[i].r = col[i+1].r = 0xff/*rand()*/; /* R */ col[i].g = col[i+1].g = 0xff/*rand()*/; /* G */ col[i].b = col[i+1].b = 0xff/*rand()*/; /* B */ col[i].cd = col[i+1].cd = CODE_G3; /* cd */ } init_prim(&db[0]); /* set primitive parameters on buffer #0 */ init_prim(&db[1]); /* set primitive parameters on buffer #1 */ SetDispMask(1); /* enable to display (0:inhibit, 1:enable) */ while (pad_read(&rottrans) == 0) { cdb = (cdb==db)? db+1: db; /* swap double buffer ID */ ClearOTagR(cdb->ot, OTSIZE); /* clear ordering table */ /* add cube */ ResetRCnt(RCntCNT2); add_cube(cdb->ot, cdb->s, v, n, col); cnt= GetRCnt(RCntCNT2); FntPrint("cnt=%d\n",cnt); /* swap buffer */ DrawSync(0); /* wait for end of drawing */ VSync(0); /* wait for the next V-BLNK */ PutDrawEnv(&cdb->draw); /* update drawing environment */ PutDispEnv(&cdb->disp); /* update display environment */ DrawOTag(cdb->ot+OTSIZE-1); /* draw */ FntFlush(-1); } PadStop(); exit(); }