/* * cmp(): * File Compare... * Use the standard TFS facilities to compare two different incoming files. * Return 0 if files match, else -1. */ int cmp(char *f1, char *f2) { TFILE finfo1, *tfp1; TFILE finfo2, *tfp2; int fd1, fd2, size, ret; char *buf1, *buf2; /* Check sizes first: */ tfp1 = &finfo1; if (mon_tfsfstat(f1,tfp1) == -1) die(); tfp2 = &finfo2; if (mon_tfsfstat(f2,tfp2) == -1) die(); if (tfp1->filsize != tfp2->filsize) return(-1); /* Copy f1 to buffer: */ buf1 = mon_malloc(TFS_SIZE(tfp1)); if (!buf1) die(); fd1 = mon_tfsopen(f1,TFS_RDONLY,0); if (fd1 < 0) tfsdie(fd1); size = mon_tfsread(fd1,buf1,TFS_SIZE(tfp1)); if (size != TFS_SIZE(tfp1)) tfsdie(size); ret = mon_tfsclose(fd1,0); if (ret != TFS_OKAY) tfsdie(ret); /* Copy f2 to buffer: */ buf2 = mon_malloc(TFS_SIZE(tfp2)); if (!buf2) die(); fd2 = mon_tfsopen(f2,TFS_RDONLY,0); if (fd2 < 0) tfsdie(fd2); size = mon_tfsread(fd2,buf2,TFS_SIZE(tfp2)); if (size != TFS_SIZE(tfp2)) tfsdie(size); ret = mon_tfsclose(fd2,0); if (ret != TFS_OKAY) tfsdie(ret); /* Compare the buffers: */ if (memcmp(buf1,buf2,TFS_SIZE(tfp2))) ret = -1; else ret = 0; mon_free(buf1); mon_free(buf2); return(ret); }
static void queue_free(Queue *q) { for (List *it = q->head; it != NULL; it = list_next(it)) conn_free(it->elem); mon_free(q->mon); mem_free(q); }
static void Delete(GLFWmonitor *monitor) { mon_t *mon = mon_first(0); while(mon) { if(mon->monitor == monitor) /* already in */ { mon_free(mon); return; } mon = mon_next(mon); } }
/* * cp(): * File Copy... * Use standard TFS facilities to copy one file to another. * If successful, return the size of the copy; else die. */ int cp(char *to, char *from) { TFILE finfo, *tfp; int ffd, tfd, size, ret; char *buffer; /* Open the source file: */ ffd = mon_tfsopen(from,TFS_RDONLY,0); if (ffd < 0) tfsdie(ffd); /* Retrieve stats of the source file: */ tfp = &finfo; if (mon_tfsfstat(from,tfp) == -1) die(); /* The buffer used to open the destination file must be as large as * the source file ... */ buffer = mon_malloc(TFS_SIZE(tfp)); if (!buffer) die(); /* Open the destination file for creation with the same flags * as the source file: */ tfd = mon_tfsopen(to,TFS_CREATE | finfo.flags,buffer); if (tfd < 0) tfsdie(tfd); /* Read the entire source file into buffer, then write the entire * buffer to the destination file... */ size = mon_tfsread(ffd,buffer,TFS_SIZE(tfp)); if (size < 0) tfsdie(size); ret = mon_tfswrite(tfd,buffer,TFS_SIZE(tfp)); if (ret != TFS_OKAY) tfsdie(ret); mon_tfsclose(ffd,0); mon_tfsclose(tfd,finfo.info); mon_free(buffer); return(TFS_SIZE(tfp)); }
int main (int argc, char *argv[]) { int i; int run; char *cfg; ini_sct_t *sct; if (argc == 2) { if (str_isarg1 (argv[1], "--help")) { prt_help(); return (0); } else if (str_isarg1 (argv[1], "--version")) { prt_version(); return (0); } } cfg = NULL; run = 0; pce_log_init(); pce_log_add_fp (stderr, 0, MSG_INF); par_cfg = ini_sct_new (NULL); if (par_cfg == NULL) { return (1); } i = 1; while (i < argc) { if (str_isarg2 (argv[i], "-v", "--verbose")) { pce_log_set_level (stderr, MSG_DEB); } else if (str_isarg2 (argv[i], "-q", "--quiet")) { pce_log_set_level (stderr, MSG_ERR); } else if (str_isarg2 (argv[i], "-c", "--config")) { i += 1; if (i >= argc) { return (1); } cfg = argv[i]; } else if (str_isarg2 (argv[i], "-l", "--log")) { i += 1; if (i >= argc) { return (1); } pce_log_add_fname (argv[i], MSG_DEB); } else if (str_isarg2 (argv[i], "-r", "--run")) { run = 1; } else { printf ("%s: unknown option (%s)\n", argv[0], argv[i]); return (1); } i += 1; } pce_log (MSG_INF, "pce sim6502 version " PCE_VERSION_STR "\n" "Copyright (C) 1995-2012 Hampa Hug <*****@*****.**>\n" ); if (pce_load_config (par_cfg, cfg)) { return (1); } sct = ini_next_sct (par_cfg, NULL, "sim6502"); if (sct == NULL) { pce_log (MSG_ERR, "*** section 'sim6502' not found in config file\n"); return (1); } par_sim = s6502_new (sct); e6502_set_hook_undef_fct (par_sim->cpu, par_sim, s6502_hook_undef); signal (SIGINT, &sig_int); signal (SIGSEGV, &sig_segv); #ifdef SIGPIPE signal (SIGPIPE, SIG_IGN); #endif pce_console_init (stdin, stdout); mon_init (&par_mon); mon_set_cmd_fct (&par_mon, s6502_do_cmd, par_sim); mon_set_msg_fct (&par_mon, NULL, par_sim); mon_set_get_mem_fct (&par_mon, par_sim->mem, mem_get_uint8); mon_set_set_mem_fct (&par_mon, par_sim->mem, mem_set_uint8); mon_set_memory_mode (&par_mon, 0); cmd_init (par_sim, cmd_get_sym, cmd_set_sym); mon_cmd_add (&par_mon, par_cmd, sizeof (par_cmd) / sizeof (par_cmd[0])); mon_cmd_add_bp (&par_mon); s6502_reset (par_sim); if (run) { s6502_run (par_sim); if (par_sim->brk != PCE_BRK_ABORT) { fputs ("\n", stdout); } } else { pce_log (MSG_INF, "type 'h' for help\n"); } if (par_sim->brk != PCE_BRK_ABORT) { mon_run (&par_mon); } s6502_del (par_sim); mon_free (&par_mon); pce_console_done(); pce_log_done(); return (0); }
int main (int argc, char *argv[]) { int r; char **optarg; int run, nomon; unsigned drive; char *cfg; ini_sct_t *sct; cfg = NULL; run = 0; nomon = 0; pce_log_init(); pce_log_add_fp (stderr, 0, MSG_INF); par_cfg = ini_sct_new (NULL); if (par_cfg == NULL) { return (1); } ini_str_init (&par_ini_str); while (1) { r = pce_getopt (argc, argv, &optarg, opts); if (r == GETOPT_DONE) { break; } if (r < 0) { return (1); } switch (r) { case '?': print_help(); return (0); case 'V': print_version(); return (0); case 'b': par_disk_delay_valid |= 1; par_disk_delay[0] = (unsigned) strtoul (optarg[0], NULL, 0); break; case 'B': drive = strtoul (optarg[0], NULL, 0); if ((drive < 1) || (drive >= SONY_DRIVES)) { fprintf (stderr, "%s: bad drive number (%u)\n", argv[0], drive ); return (1); } drive -= 1; par_disk_delay_valid |= 1U << drive; par_disk_delay[drive] = (unsigned) strtoul (optarg[1], NULL, 0); break; case 'c': cfg = optarg[0]; break; case 'd': pce_path_set (optarg[0]); break; case 'i': if (ini_read_str (par_cfg, optarg[0])) { fprintf (stderr, "%s: error parsing ini string (%s)\n", argv[0], optarg[0] ); return (1); } break; case 'I': ini_str_add (&par_ini_str, optarg[0], "\n", NULL); break; case 'l': pce_log_add_fname (optarg[0], MSG_DEB); break; case 'p': ini_str_add (&par_ini_str, "cpu.model = \"", optarg[0], "\"\n" ); break; case 'q': pce_log_set_level (stderr, MSG_ERR); break; case 'r': run = 1; break; case 'R': nomon = 1; break; case 's': ini_str_add (&par_ini_str, "cpu.speed = ", optarg[0], "\n" ); break; case 't': par_terminal = optarg[0]; break; case 'v': pce_log_set_level (stderr, MSG_DEB); break; case 0: fprintf (stderr, "%s: unknown option (%s)\n", argv[0], optarg[0] ); return (1); default: return (1); } } mac_log_banner(); if (pce_load_config (par_cfg, cfg)) { return (1); } sct = ini_next_sct (par_cfg, NULL, "macplus"); if (sct == NULL) { sct = par_cfg; } if (ini_str_eval (&par_ini_str, sct, 1)) { return (1); } atexit (mac_atexit); #ifdef PCE_ENABLE_SDL SDL_Init (0); #endif pce_path_ini (sct); signal (SIGINT, &sig_int); signal (SIGSEGV, &sig_segv); signal (SIGTERM, &sig_term); pce_console_init (stdin, stdout); par_sim = mac_new (sct); mon_init (&par_mon); mon_set_cmd_fct (&par_mon, mac_cmd, par_sim); mon_set_msg_fct (&par_mon, mac_set_msg, par_sim); mon_set_get_mem_fct (&par_mon, par_sim->mem, mem_get_uint8); mon_set_set_mem_fct (&par_mon, par_sim->mem, mem_set_uint8); mon_set_memory_mode (&par_mon, 0); cmd_init (par_sim, cmd_get_sym, cmd_set_sym); mac_cmd_init (par_sim, &par_mon); mac_reset (par_sim); if (nomon) { while (par_sim->brk != PCE_BRK_ABORT) { mac_run (par_sim); } } else if (run) { mac_run (par_sim); if (par_sim->brk != PCE_BRK_ABORT) { pce_puts ("\n"); } } else { pce_puts ("type 'h' for help\n"); } if (par_sim->brk != PCE_BRK_ABORT) { mon_run (&par_mon); } mac_del (par_sim); #ifdef PCE_ENABLE_SDL SDL_Quit(); #endif mon_free (&par_mon); pce_console_done(); pce_log_done(); return (0); }