int main(int argc, char *argv[]) { char *dic_base; int c; FILE *output[3]; char path[PATH_MAX]; da_build_t *builder; cha_mmap_t *tmpfile; cha_set_progpath(argv[0]); cha_set_encode(""); while ((c = cha_getopt(argv, "i:", stderr)) != EOF) { switch (c) { case 'i': cha_set_encode(Cha_optarg); break; default: usage(); } } argv += Cha_optind; argc -= Cha_optind; if (argc < 2) usage(); dic_base = argv[0]; argv++; cha_read_grammar(stderr, 1, 2); cha_read_katuyou(stderr, 2); cha_read_table(stderr, 2); snprintf(path, PATH_MAX, "%s.da", dic_base); builder = da_build_new(path); snprintf(path, PATH_MAX, "%s.dat", dic_base); output[0] = cha_fopen(path, "wb", 1); snprintf(path, PATH_MAX, "%s.lex", dic_base); output[1] = cha_fopen(path, "wb", 1); snprintf(path, PATH_MAX, "%s.tmp", dic_base); output[2] = cha_fopen(path, "wb", 1); if (translate_files(argv, output, builder) < 0) exit(1); fclose(output[2]); tmpfile = cha_mmap_file(path); da_build_dump(builder, cha_mmap_map(tmpfile), output[1]); cha_munmap_file(tmpfile); remove(path); return EXIT_SUCCESS; }
darts_t * da_open(char *daname, char *lexname, char *datname) { darts_t *da; DoubleArrayL *darts = new DoubleArrayL; da = (darts_t*)cha_malloc(sizeof(darts_t)); da->da_mmap = cha_mmap_file(daname); darts->set_array(cha_mmap_map(da->da_mmap)); da->da = darts; da->lex_mmap = cha_mmap_file(lexname); da->dat_mmap = cha_mmap_file(datname); return da; }