static void *value_new(t_symbol *s) { t_value *x = (t_value *)pd_new(value_class); x->x_sym = s; x->x_floatstar = value_get(s); outlet_new(&x->x_obj, &s_float); return (x); }
static int config_file_load(struct st_config *c) { char *buf; int size = 0; c->reader = NULL; buf = buf_load_full("unagi.cfg", &size); if(buf == NULL){ printf("%s config file open error\n", PREFIX_CONFIG_ERROR); return NG; } char **text; text = Malloc(sizeof(char*) * TEXT_MAXLINE); const int text_num = text_load(buf, size, text); if(text_num == 0){ printf("%s script line too much\n", PREFIX_CONFIG_ERROR); Free(buf); Free(text); return NG; } int i; for(i=0; i<text_num; i++){ char *word[TEXT_MAXWORD]; word_load(text[i], word); if(word[0][0] == '#'){ continue; } if(strcmp("DRIVER", word[0]) == 0){ c->reader = reader_driver_get(word[1]); }else if(strcmp("HONGKONG_FLASH", word[0]) == 0){ hongkong_flash_patch = 0; if(strcmp("0.5.3", word[1]) == 0){ hongkong_flash_patch = 1; } }else if((DEBUG == 1) && (strcmp("WRITE_WAIT", word[0]) == 0)){ if(value_get(word[1], &(c->write_wait)) == NG){ printf("%s write_wait parameter is illigal", PREFIX_CONFIG_ERROR); Free(buf); Free(text); return NG; } }else if(strcmp("TEST_DEVICE", word[0]) == 0){ if(DEBUG == 1){ strncpy(c->flash_test_device, word[1], CONFIG_STR_LENGTH); } }else if(strcmp("TEST_MAPPER", word[0]) == 0){ if(DEBUG == 1){ strncpy(c->flash_test_mapper, word[1], CONFIG_STR_LENGTH); } }else{ printf("%s unknown config title %s", PREFIX_CONFIG_ERROR, word[1]); Free(buf); Free(text); return NG; } } Free(text); if(c->reader == NULL){ printf("%s hardware not selected or not found\n", PREFIX_CONFIG_ERROR); Free(buf); return NG; } Free(buf); return OK; }
static int config_init(const int argc, const char **argv, struct st_config *c) { c->script = argv[ARGC_SCRIPTFILE]; c->romimage = NULL; c->ramimage = NULL; c->mapper = CONFIG_OVERRIDE_UNDEF; c->mirror = CONFIG_OVERRIDE_UNDEF; c->backupram = CONFIG_OVERRIDE_UNDEF; c->mapper = CONFIG_OVERRIDE_UNDEF; c->syntaxtest = 0; c->cpu_flash_driver = &FLASH_DRIVER_UNDEF; c->ppu_flash_driver = &FLASH_DRIVER_UNDEF; c->write_wait = 0; //mode 別 target file 初期化 switch(argv[ARGC_MODE][0]){ case 'd': c->mode = MODE_ROM_DUMP; c->romimage = argv[ARGC_DUMP_OUT_NESFILE]; break; case 'r': c->mode = MODE_RAM_READ; c->ramimage = argv[ARGC_READ_OUT_RAMFILE]; break; case 'w': c->mode = MODE_RAM_WRITE; c->ramimage = argv[ARGC_WRITE_IN_RAMFILE]; break; case 'f': c->mode = MODE_ROM_PROGRAM; c->romimage = argv[ARGC_PROGRAM_IN_NESFILE]; //容量が少ない ROM の詰め方のカスタマイズ switch(argv[ARGC_MODE][1]){ case '\0': c->transtype_cpu = VALUE_TRANSTYPE_TOP; c->transtype_ppu = VALUE_TRANSTYPE_TOP; break; case 't': c->transtype_cpu = VALUE_TRANSTYPE_TOP; break; case 'b': c->transtype_cpu = VALUE_TRANSTYPE_BOTTOM; break; default: printf("%s unkown flash trans mode cpu %c\n", PREFIX_CONFIG_ERROR, argv[ARGC_MODE][1]); return NG; } if(argv[ARGC_MODE][1] == '\0'){ break; } switch(argv[ARGC_MODE][2]){ case '\0': case 't': c->transtype_ppu = VALUE_TRANSTYPE_TOP; break; case 'b': c->transtype_ppu = VALUE_TRANSTYPE_BOTTOM; break; default: printf("%s unkown flash trans mode ppu %c\n", PREFIX_CONFIG_ERROR, argv[ARGC_MODE][2]); return NG; } break; case 't': if(DEBUG == 1){ c->mode = MODE_TEST; break; } //下へ default: printf("%s unkown mode %s\n", PREFIX_CONFIG_ERROR, argv[ARGC_MODE]); return NG; }; if(config_file_load(c) == NG){ return NG; } /*mode 別 argc check. DEBUG==0 argc: 4,5,6 DEBUG==1 argc: 3,4,5,6 */ switch(c->mode){ case MODE_ROM_DUMP:{ int flag_error = OK, mapper_error = OK; switch(argc){ case 3: return NG; case 5: flag_error = flag_get(argv[ARGC_DUMP_FLAG], c); break; case 6: flag_error = flag_get(argv[ARGC_DUMP_FLAG], c); mapper_error = value_get(argv[ARGC_DUMP_MAPPER], &c->mapper); break; } if(flag_error != OK){ printf("%s unknown flag %s\n", PREFIX_CONFIG_ERROR, argv[ARGC_DUMP_FLAG]); return NG; } if(mapper_error != OK){ printf("%s unknown mapper %s\n", PREFIX_CONFIG_ERROR, argv[ARGC_DUMP_MAPPER]); return NG; } }break; case MODE_RAM_READ: case MODE_RAM_WRITE: if(argc != ARGC_RW_NUM){ printf("%s too many argument\n", PREFIX_CONFIG_ERROR); return NG; } break; case MODE_ROM_PROGRAM: if(c->reader->flash_support == false){ puts("this reader is not supported flash memory programming mode"); return NG; } switch(argc){ case 3: case 4: printf("%s few argument\n", PREFIX_CONFIG_ERROR); return NG; case 5: if(flash_pointer_init(argv[ARGC_PROGRAM_CPU_DEVICE], &(c->cpu_flash_driver)) == NG){ return NG; } break; case 6: if(flash_pointer_init(argv[ARGC_PROGRAM_CPU_DEVICE], &(c->cpu_flash_driver)) == NG){ return NG; } if(flash_pointer_init(argv[ARGC_PROGRAM_PPU_DEVICE], &(c->ppu_flash_driver)) == NG){ return NG; } break; } break; } return OK; }