#include <stdio.h>
#include <stdlib.h>

#define LINHA_MAX 200

char *procura(const char s1[], const char s2[])

{
    const char *p1, *p2;

    for(; *s1 != '\0'; s1++)
    {
        for(p1 = s1, p2 = s2; *p1 != '\0' && *p1 == *p2; p1++, p2++)
            ;
        if(*p2 == '\0')
            return (char *)s1;  /* s1 esta' contida em s2! */
        if(*p1 == '\0')
            return NULL;        /* o que sobra de s1 e' mais curto que s2. */
    }
    return *s2 == '\0' ? (char *)s1 : NULL;
}

int main(int argc, char *argv[])

{
    char linha[LINHA_MAX];
    FILE *entrada;

    if(argc != 3)
    {
        fprintf(stderr, "Tem de passar dois argumentos!\n");
        return EXIT_FAILURE;
    }
    if((entrada = fopen(argv[2], "r")) == 0)
    {
        fprintf(stderr, "Erro abrindo o ficheiro \"%s\".\n", argv[2]);
        return EXIT_FAILURE;
    }

    while(fgets(linha, LINHA_MAX, entrada) != NULL)
        if(procura(linha, argv[1]) != 0)
            fputs(linha, stdout);

    fclose(entrada);

    return EXIT_SUCCESS;
}