#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MEMORY 2048
int main(int argc, char *argv[]){
    int i;              /* 何番目(ループ変数) */
    int line;           /* 何行目 */
    int find;           /* 一件でも見つかった時1になる */
    int loop;           /* 複数の語句で検索する場合のループ */
    int flg;            /* 一行に語句が見つかった場合1が立つ */
    int count;          /* 見つかった件数(一行につき一件) */
    int check;          /* 検索語句に同じものがあるか調べるループ変数 */
    int break_flg;      /* 検索語句が被ったら被った語句の検索中止フラグ */
    char szbuf[MEMORY]; /* ファイルの一行をダンプ */
    char s[MEMORY];     /* ファイルの何列目から検索語句単語文字数分ダンプ */
    FILE *f;            /* ファイルポインタ */
    
    /* 初期化 */
    i = 0;
    line = 0;
    find = 0;
    loop = 0;
    flg = 0;
    count = 0;
    check = 0;
    break_flg = 0;
    memset(szbuf, NULL, MEMORY);
    memset(s, NULL, MEMORY);
    f = NULL;
    
    if(argc == 1){
        printf("使い方:実行ファイル 読み込むファイル 検索したい文字 検索したい文字 ...\n");
        return -1;
    }
    
    f = fopen(argv[1],"r");
    if(f == NULL){
        printf("%s:そんなファイルありません\n",argv[1]);
        return -2;
    }
    if(argc == 2){
        printf("検索する語句を入力して下さい。\n");
        fclose(f);
        return -3;
    }
    
    /* ファイルが終わるまで */
    while(fgets(szbuf, MEMORY, f) != NULL){
        line++;
        flg = 0;
        /* 検索語句が終わるまで */
        for(loop = 0; loop < argc-2; loop++){
            /* 一行見終わるまで */
            for(i = 0; szbuf[i] != '\0'; i++){
                break_flg = 0;
                /* 検索語句が被ってるか調べる */
                for(check = 0; check < loop; check++){
                    /* 検索語句が被ってたら中断フラグをたてる */
                    if(strcmp(argv[2+loop], argv[2+check]) == 0){
                        break_flg = 1;
                    }
                }
                /* 中断フラグが立ったら(検索語句が被ったら)その語句の検索中断 */
                if(break_flg == 1){
                    break;
                }
                memset(s, NULL, MEMORY);
                strncpy(s, szbuf+i, strlen(argv[2+loop]) );
                /* 検索語句と一致したら */
                if(strcmp(s, argv[2+loop]) == 0){
                    printf("%s:%d行目:%d列目:%s:発見しました\n",argv[1], line, i+1, argv[2+loop]);
                    /* 語句が見つかったら一行につき一件増やす */
                    if(flg == 0){
                        count++;
                        flg = 1;
                    }
                    /* 見つかったというフラグを立てる */
                    if(find != 1){
                        find = 1;
                    }
                }
            }
        }
    }
    /* 見つからなかった場合 */
    if(find != 1){
        /* 検索単語をすべて表示する */
        for(loop = 0; loop < argc-2; loop++){
            printf("%s:",argv[2+loop]);
        }
        printf("見つかりませんでした。\n");
        fclose(f);
        return -4;
    }
    else{
        printf("%d件見つかりました。\n",count);
    }
    fclose(f);
    return 0;
}
