/** * Pede uma palavra e pega a man_pages_positions(palavra) a lista de * de índices que possuem a palavra pesquisada. * Traduz os índices para o nome das manpages acessando "manpages.dat" e * pegando o nome dos registros de índice respectivos. */ void search_by_one_word(){ //Pede a palavra a ser pesquisada char palavra[100]; scanf("%s",palavra); //Pega a lista de índices que possuem a palavra ListaDupla<int> indices = man_pages_positions(palavra); FILE* manPagesDat; manPagesDat = fopen("..\\manpages.dat", "rb"); printf("\n\n"); //Pega o nome dos registros a partir dos índices while (!indices.listaVazia()) { fseek(manPagesDat, indices.primeiro()*(size_max_command+size_max_content), SEEK_SET); char comando[100]; fgets(comando, 100, manPagesDat); printf("%d - %s\n",indices.primeiro(), comando); indices.retiraDoInicioDuplo(); } fclose(manPagesDat); }
/** * Pede as duas palavras, e obtem os indices de modo semelhante a * search_by_one_word, realiza as intersecção entre as listas de índices * Traduz os índices para o nome das manpages consultando "manpages.dat" */ void search_by_two_words() { //Pede a primeira palavra char palavra1[100]; scanf("%s", palavra1); //Pega a lista de índices que possuem a primeira palavra ListaDupla<int> indices1 = man_pages_positions(palavra1); //Pede a segunda palavra char palavra2[100]; scanf("%s", palavra2); //Pega índices da segunda palavra ListaDupla<int> indices2 = man_pages_positions(palavra2); //Intersecção de indices1 e indices2 ListaDupla<int> indices; while (!indices2.listaVazia()) { int atual = indices2.primeiro(); bool achou = false; for(int i = 0; i < indices1.verUltimo() && !achou; i++) { if(indices1.mostra(i) == atual) achou = true; } if(achou) indices.adicionaDuplo(atual); indices2.retiraDoInicioDuplo(); } FILE* manPagesDat; manPagesDat = fopen("..\\manpages.dat", "rb"); printf("\n\n"); while (!indices.listaVazia()) { fseek(manPagesDat, indices.primeiro()*(size_max_command+size_max_content), SEEK_SET); char comando[100]; fgets(comando, 100, manPagesDat); printf("%d - %s\n", indices.primeiro(), comando); indices.retiraDoInicioDuplo(); } fclose(manPagesDat); }