int main(int argc, char** args) { pthread_t thread1; pthread_t thread2; pthread_attr_t attr; char* job1 = "job1.axy"; char* job2 = "job2.axy"; fits_use_error_system(); log_init(LOG_VERB); log_set_thread_specific(); logverb("Hello world!\n"); be = engine_new(); engine_parse_config_file(be, "astrometry.cfg"); pthread_mutex_init(&read_job_mutex, NULL); pthread_attr_init(&attr); pthread_create(&thread1, &attr, threadfunc, job1); pthread_create(&thread2, &attr, threadfunc, job2); pthread_join(thread1, NULL); pthread_join(thread2, NULL); pthread_mutex_destroy(&read_job_mutex); engine_free(be); return 0; }
/******************************* * Engine test functions *******************************/ void test_engine(void) { GraphicControls* controls = NULL; const char* modDir = NULL; const char* const* names = NULL; unsigned int namesNum = 0; size_t i = 0; Engine* engine = NULL; const char* configPath = NULL; const char* setupPath = NULL; const char* modulesPath = NULL; const char* config = "test.cfg"; const char* setup = "test.cfg"; modDir = "."; /* initialize an empty graphic controls structure */ controls = g_new0(GraphicControls, 1); controls->mainControl = NULL; controls->configControl = NULL; controls->setupControl = NULL; controls->testControl = NULL; /* initialization without debug and demo flags */ g_print("Initialize the engine...\n\r"); engine = engine_new(controls, NORMAL_MODE, "config", "setup", modDir); g_print("The number of loaded modules is %i\n\r", engine_get_modules_num(engine)); names = engine_get_modules_names(engine, &namesNum); for (i = 0; i < namesNum; i++) { g_print("Loaded module: '%s'\n\r", names[i]); } /* check mode */ engine_set_config_path(engine, config); engine_set_setup_path(engine, setup); engine_set_modules_dir(engine, modDir); configPath = engine_get_config_path(engine); setupPath = engine_get_setup_path(engine); modulesPath = engine_get_modules_dir(engine); g_print("The paths are the following ones:\n\r"); g_print("config = %s, setup = %s, modules = %s\n\r", configPath, setupPath, modulesPath); /* close the engine */ g_print("Release engine resources..\n\r"); engine_free(engine); }
/* ======================================= 获取引擎插件接口 ======================================= */ CR_API sENGINE* engine_fmodex (void_t) { sENGINE* engine; engine = engine_init(NULL, NULL, NULL, NULL); if (engine == NULL) return (NULL); if (!fmodex_init()) { engine_free(engine); return (NULL); } engine->fmtz_load = engine_fmodex_load; engine->engine_free = engine_fmodex_free; engine->info = "FMODEx FMTz Engine (Done by CrHackOS)"; return (engine); }
int main(int argc, char** args) { char* default_configfn = "astrometry.cfg"; char* default_config_path = "../etc"; int c; char* configfn = NULL; int i; engine_t* engine; char* mydir = NULL; char* basedir = NULL; char* me; anbool help = FALSE; sl* strings = sl_new(4); char* cancelfn = NULL; char* solvedfn = NULL; int loglvl = LOG_MSG; anbool tostderr = FALSE; char* infn = NULL; FILE* fin = NULL; anbool fromstdin = FALSE; bl* opts = opts_from_array(myopts, sizeof(myopts)/sizeof(an_option_t), NULL); sl* inds = sl_new(4); char* datalog = NULL; engine = engine_new(); while (1) { c = opts_getopt(opts, argc, args); if (c == -1) break; switch (c) { case 'D': datalog = optarg; break; case 'p': engine->inparallel = TRUE; break; case 'i': sl_append(inds, optarg); break; case 'd': basedir = optarg; break; case 'f': infn = optarg; fromstdin = streq(infn, "-"); break; case 'E': tostderr = TRUE; break; case 'h': help = TRUE; break; case 'v': loglvl++; break; case 's': solvedfn = optarg; case 'C': cancelfn = optarg; break; case 'c': configfn = strdup(optarg); break; case '?': break; default: printf("Unknown flag %c\n", c); exit( -1); } } if (optind == argc && !infn) { // Need extra args: filename printf("You must specify at least one input file!\n\n"); help = TRUE; } if (help) { print_help(args[0], opts); exit(0); } bl_free(opts); gslutils_use_error_system(); log_init(loglvl); if (tostderr) log_to(stderr); if (datalog) { datalogfid = fopen(datalog, "wb"); if (!datalogfid) { SYSERROR("Failed to open data log file \"%s\" for writing", datalog); return -1; } atexit(close_datalogfid); data_log_init(100); data_log_enable_all(); data_log_to(datalogfid); data_log_start(); } if (infn) { logverb("Reading input filenames from %s\n", (fromstdin ? "stdin" : infn)); if (!fromstdin) { fin = fopen(infn, "rb"); if (!fin) { ERROR("Failed to open file %s for reading input filenames", infn); exit(-1); } } else fin = stdin; } // directory containing the 'engine' executable: me = find_executable(args[0], NULL); if (!me) me = strdup(args[0]); mydir = sl_append(strings, dirname(me)); free(me); // Read config file if (!configfn) { int i; sl* trycf = sl_new(4); sl_appendf(trycf, "%s/%s/%s", mydir, default_config_path, default_configfn); // if I'm in /usr/bin, look for config file in /etc if (streq(mydir, "/usr/bin")) { sl_appendf(trycf, "/etc/%s", default_configfn); } sl_appendf(trycf, "%s/%s", mydir, default_configfn); sl_appendf(trycf, "./%s", default_configfn); sl_appendf(trycf, "./%s/%s", default_config_path, default_configfn); for (i=0; i<sl_size(trycf); i++) { char* cf = sl_get(trycf, i); if (file_exists(cf)) { configfn = strdup(cf); logverb("Using config file \"%s\"\n", cf); break; } else { logverb("Config file \"%s\" doesn't exist.\n", cf); } } if (!configfn) { char* cflist = sl_join(trycf, "\n "); logerr("Couldn't find config file: tried:\n %s\n", cflist); free(cflist); } sl_free2(trycf); } if (!streq(configfn, "none")) { if (engine_parse_config_file(engine, configfn)) { logerr("Failed to parse (or encountered an error while interpreting) config file \"%s\"\n", configfn); exit( -1); } } if (sl_size(inds)) { // Expand globs. for (i=0; i<sl_size(inds); i++) { char* s = sl_get(inds, i); glob_t myglob; int flags = GLOB_TILDE | GLOB_BRACE; if (glob(s, flags, NULL, &myglob)) { SYSERROR("Failed to expand wildcards in index-file path \"%s\"", s); exit(-1); } for (c=0; c<myglob.gl_pathc; c++) { if (engine_add_index(engine, myglob.gl_pathv[c])) { ERROR("Failed to add index \"%s\"", myglob.gl_pathv[c]); exit(-1); } } globfree(&myglob); } } if (!pl_size(engine->indexes)) { logerr("\n\n" "---------------------------------------------------------------------\n" "You must list at least one index in the config file (%s)\n\n" "See http://astrometry.net/use.html about how to get some index files.\n" "---------------------------------------------------------------------\n" "\n", configfn); exit(-1); } if (engine->minwidth <= 0.0 || engine->maxwidth <= 0.0) { logerr("\"minwidth\" and \"maxwidth\" in the config file %s must be positive!\n", configfn); exit(-1); } free(configfn); if (!il_size(engine->default_depths)) { parse_depth_string(engine->default_depths, "10 20 30 40 50 60 70 80 90 100 " "110 120 130 140 150 160 170 180 190 200"); } engine->cancelfn = cancelfn; engine->solvedfn = solvedfn; i = optind; while (1) { char* jobfn; job_t* job; struct timeval tv1, tv2; if (infn) { // Read name of next input file to be read. logverb("\nWaiting for next input filename...\n"); jobfn = read_string_terminated(fin, "\n\r\0", 3, FALSE); if (strlen(jobfn) == 0) break; } else { if (i == argc) break; jobfn = args[i]; i++; } gettimeofday(&tv1, NULL); logmsg("Reading file \"%s\"...\n", jobfn); job = engine_read_job_file(engine, jobfn); if (!job) { ERROR("Failed to read job file \"%s\"", jobfn); exit(-1); } if (basedir) { logverb("Setting job's output base directory to %s\n", basedir); job_set_output_base_dir(job, basedir); } if (engine_run_job(engine, job)) logerr("Failed to run_job()\n"); job_free(job); gettimeofday(&tv2, NULL); logverb("Spent %g seconds on this field.\n", millis_between(&tv1, &tv2)/1000.0); } engine_free(engine); sl_free2(strings); sl_free2(inds); if (fin && !fromstdin) fclose(fin); return 0; }
int main(int argc, char *argv[]) { char input = 0; char save_name[50]; //Prepare engine Engine *engine = prepare_game(save_name); GoF_Screen *screen = screen_create(0, 0, 30, 30, 20); Graphics g; graphics_init(&g, 800, 900, "The Game of Life!"); input = 0; while(input != 'k') { screen_draw(screen, &g, engine); input = graphics_event(&g); if(input == 1) engine_add_entity(engine, entity_create(g.last_x/screen->entity_length, g.last_y/screen->entity_length)); else if(input == 3) engine_remove_entity(engine, g.last_x/screen->entity_length, g.last_y/screen->entity_length); } //Input input = 0; int sens = 5; //Main game loop while(input != 'q') { //Draw on screen screen_draw(screen, &g, engine); //Update Engine engine_update(engine); //Process input while(graphics_check_event(&g)) { input = graphics_event(&g); switch(input) { case 'p': engine->ups++; break; case 'm': if(engine->ups > 1) engine->ups--; break; case '.': sens++; break; case ',': if(sens > 1) sens--; break; case UP_ARROW: screen->y -= sens; break; case DOWN_ARROW: screen->y += sens; break; case LEFT_ARROW: screen->x -= sens; break; case RIGHT_ARROW: screen->x += sens; break; } } //Sleep usleep((1000/engine->ups) * 1000); } //Close graphics graphics_close(&g); //Save game printf("Saving game...\n"); engine_save(engine, save_name); //Free mem engine_free(engine); screen_free(screen); return 0; }