/*
	program extrahuj v1.0
*/

#include <stdio.h>

int strPos(char *radek, char *retezec) {
/* zjisti zda retezec 'radek' obsahuje podretezec 'retezec' */
  int i, j;

  for (i = 0; radek[i]; i ++)				// projdi cely radek, az narazis na nulu
    for (j = 0; radek[i+j] == retezec[j]; j ++) {	// prochazej soubezne retezec i radek, dokud se znaky rovnaji
      if (!radek[i+j+1]) break;			   	// neni dalsi znak jiz konec retezce 'radek'?
      if (!retezec[j+1]) return 1;			// dalsi znak konec retezce 'retezec' znaci, ze byl nalezen podretezec => vrat true
    }

  return 0;						// hledani se nezdarilo => vrat false
}

int main(int argv, char *argc[]) {
  FILE *in, *out;
  char *retezec,	// retezec zadany v parametrech
	radek[256];	// radek nacteny ze souboru 'out'
  int c, i;

  if (argv != 4) {	// jsou zadany parametry?
    printf("Chybne parametry. Zadej:\n\textrahuj [zdroj] [cil] retezec\n");
    return 0;
  }

  if (!(in = fopen(argc[1], "rt"))) {   	// existuje vstupni soubor?
    printf("Chybne zadany vstupni soubor\n");
    return 0;
  }

  if (!(out = fopen(argc[2], "wt"))) {		// podarilo se vytvorit vystupni soubor?
    printf("Chybne zadany vystupni soubor\n");
    return 0;
  }

  if (!argc[3][0]) {				// prvni znak retezce nesmi byt nula => prazdny retezec
    printf("Nesmite zadat prazdny retezec\n");
    return 0;
  }

  retezec = argc[3];
  i = 0;
  while ((c = fgetc(in)) != EOF) {			// nacitej po jednom znaku ze souboru az do konce souboru
    if ((i < 256) && (c != '\n')) radek[i] = c;		// kdyz nacteny znak neni konec radky a nahodou neni radka delsi nez 256 znak, pak znak uloz do pole
    else {         					// nastal konec radky
      radek[i] = 0;					// posledni znak radky ukoncuje retezec
      if (strPos(radek, retezec)) fprintf(out, "%s\n", radek);	// zkontroluj zda nacteny radek obsahuje hledany retezec - pokud ano, pak vypis radek do souboru 'out'
      i = -1;						// nastav citac
    }
    i ++;
  }

  fclose(in);
  fclose(out);

  return 1;
}