/** * 入力を読み込む関数 * @return char * 読み込んだ文字列 */ char *read_input(void) { int c; char *input; // 入力された文字列 int len = 0; // バッファの現在の文字数 int len_max = BUFFER_SIZE_UNIT; // バッファの文字数の初期単位 // ある程度の大きさで確保 input = (char *)calloc(len_max, sizeof(char)); // 終わりまで1文字ずつ取得 while (1) { c = getc(stdin); // 文字の取得 // 改行文字か判別 if (c == '\n' || c == '\r' || c == EOF) { // NULL文字を追加しておく set_character(&input, '\0', &len, &len_max); break; // 繰り返しを抜ける } // 空白文字でない場合 else { // 文字の保存 set_character(&input, tolower(c), &len, &len_max); } } return input; // 取得文字列を返す }
int init_SDL(t_graph *graph) { graph->pos = (HEIGHT / 2) - (HEIGHT / 4); graph->poscurs = 0; set_null(graph); SDL_WM_SetCaption(NAME, NULL); graph->charac_num = 0; if (TTF_Init() == -1) return (-1); init_font(graph); if (SDL_Init(SDL_INIT_EVERYTHING) == -1) return (-1); graph->screen = SDL_SetVideoMode(WIDTH, HEIGHT, BPP, SDL_SWSURFACE | SDL_FULLSCREEN); if (graph->screen == NULL) return (-1); graph->quit = 0; set_character(graph); init_spaceship(graph); graph->background = load_image("img/space.bmp"); graph->spacefactor = 1; init_joystick(graph); intro_music(graph); return (0); }
/** * ファイルを読み込んでドキュメントと転置索引を作る関数 * @param char *file_name 開くファイル名 */ void read_file(char *file_name) { FILE *fp; int c; int pre_word_id = -1, cur_word_id; // 単語のID char *word; // 現在の単語 char *line; // 現在の行 int word_len = 0; // 単語の現在の文字数 int line_len = 0; // 行の現在の文字数 int word_len_max = WORD_LENGTH_UNIT; // 単語の文字数の初期単位 int line_len_max = LINE_LENGTH_UNIT; // 行の文字数の初期単位 STATE state = S_SPACE; // 状態 if ((fp = fopen(file_name, "r")) == NULL) { fprintf(stderr, "File Open Error: %s\n", file_name); exit(1); } // ある程度の大きさで確保 word = (char *)malloc(sizeof(char) * word_len_max); line = (char *)malloc(sizeof(char) * line_len_max); if (word == NULL || line == NULL) { printf("Memory Allocation Error\n"); exit(1); } // 終わりまで1文字ずつ取得 while (1) { c = getc(fp); // 文字の取得 // 空白文字か判別 if (isspace(c) || c == EOF) { if (state == S_WORD) // 文字が入力されていたなら { // 単語にNULL文字を追加 set_character(&word, '\0', &word_len, &word_len_max); cur_word_id = add_array(word, n_docs); // 配列に追加 if (pre_word_id != -1) // 前回の単語がある場合 associate_words(pre_word_id, cur_word_id, n_docs); // 関連付け word_len = 0; // 単語の文字数の初期化 pre_word_id = cur_word_id; // 前回の単語のIDを保存 } if (c == '\n' || c == '\r' || c == EOF) // 改行かファイルの終わりなら { // 行にNULL文字を追加 set_character(&line, '\0', &line_len, &line_len_max); // 行をドキュメントとして保存 if (strlen(line) > 0) insert_document(line); // 配列に追加 line_len = 0; // 行の文字数の初期化 pre_word_id = -1; // 前回の単語はない } else { // 行の場合は空白も入れる set_character(&line, c, &line_len, &line_len_max); } if (c == EOF) // 繰り返しを抜ける break; state = S_SPACE; // 状態の変更 } // 空白文字でない場合(単語の場合) else { // 文字の保存 set_character(&word, tolower(c), &word_len, &word_len_max); // 小文字で保存 set_character(&line, c, &line_len, &line_len_max); state = S_WORD; // 状態の変更 } } // 解放 fclose(fp); free(word); free(line); }