int main(int argc, char *argv[]) { int i, chg, rev, np; progname = argv[0]; if (argc != 2) { fprintf(stderr, "Usage: %s dict\n", progname); exit(1); } tracef("Started"); readdict(argv[1]); tracef("Dictionary read"); rdict = (Word **)xmalloc(nword*sizeof(Word *)); memcpy(rdict, dict, nword*sizeof(Word *)); qsort(dict, nword, sizeof(Word *), wordcmp); /* sort forwards */ tracef("Sorted fwd"); qsort(rdict, nword, sizeof(Word *), rwordcmp); /* sort backwards */ tracef("Sorted bwd"); for (i=0; i<nword; i++) { dict[i]->map = (1<<(dict[i]->len+1))-1; } tracef("Set map"); rev = FALSE; do { chg = FALSE; for (i=0; i<nword; i++) { if ((rev? check_rword: check_word)(dict[i])) chg = TRUE; } if ((np = purge()) != 0) chg = TRUE; tracef("%d words purged", np); rev = !rev; } while (chg); printdict(dict); return 0; }
int read_file (struct wnn_file *wf) { FILE *fp; struct wnn_file_head fh; if (wf->localf == REMOTE) { if (fopen_read_cur (wf->name) == 0) { wnn_errorno = WNN_FILE_READ_ERROR; log_err ("read_file:could not open file %s.", wf->name); return (-1); } fp = NULL; } else { #ifdef WRITE_CHECK check_backup (wf->name); #endif if ((fp = fopen (wf->name, "r")) == NULL) { wnn_errorno = WNN_FILE_READ_ERROR; log_err("read_file:could not open file %s.", wf->name); return (-1); } } if (input_file_header (fp, &fh) == -1) { wnn_errorno = WNN_NOT_A_FILE; goto ERROR_RET; } bcopy ((char *) &(fh.file_uniq), (char *) &(wf->f_uniq), WNN_F_UNIQ_LEN); bcopy ((char *) &(fh.file_uniq_org), (char *) &(wf->f_uniq_org), WNN_F_UNIQ_LEN); strncpy (wf->passwd, fh.file_passwd, WNN_PASSWD_LEN); wf->file_type = fh.file_type; wf->ref_count = 0; switch (fh.file_type) { case WNN_FT_DICT_FILE: wf->area = (char *) readdict (fp); if (wf->area == NULL) goto ERROR_RET; break; case WNN_FT_HINDO_FILE: wf->area = (char *) readhindo (fp); if (wf->area == NULL) goto ERROR_RET; break; case WNN_FT_FUZOKUGO_FILE: wf->area = (char *) fzk_read (fp); if (wf->area == NULL) goto ERROR_RET; break; } vclose (fp); return (0); ERROR_RET: vclose (fp); return (-1); }