Trzecie zadanie punktowane, termin oddania 16.05.2003.

Często się zdarza, że przechowujemy zestaw wzajemnie się do siebie 
odwołujących plików. Gdy takich plików jest wiele i niekoniecznie wszystkie
znajdują się w jednym katalogu powstaje problem zlokalizowania takich 
grup plików.

Napisz program mapa, który służy do rozwiązania powyższego problemu.
Wywołanie programu powinno mieć postać:

	mapa <katalog> <rozszerzenie> <ogranicznik> <plik wynikowy>

np.

	mapa c:\strony\   htm   "  wynik.out
	
gdzie:
  <katalog> jest katalogiem startowym wyszukiwania
  <rozszerzenie> określa jakie pliki chcemy przeglądać
  <ogranicznik> jest pojedynczym znakiem, który wyznacza początek i koniec
     odnośnika w przeglądanych plikach. Odnośnik ma postać:
       <ogranicznik><plik><ogranicznik>
     gdzie <plik> jest nazwą (być może ze ścieżką) pliku.
  <plik wynikowy> nazwa (być może ze ścieżką) pliku, który ma zawierać
     wygenerowaną mapę.

Wynikiem programu ma być wypisanie do pliku wynikowego mapy powiązań
plików w postaci:

<plik1>: 
   <plik1_1> 
   <plik1_2>
   ...
   <plik1_n1>
<plik2>:
   <plik2_1> 
   <plik2_2>
   ...
   <plik2_n2>
...
<plikm>:
   <plikm_1> 
   <plikm_2>
   ...
   <plikm_nm>

gdzie <plik_indeks> oznacza pełna ścieżkę do pliku. Nazwy przed dwukropkiem są
nazwami plików do których występują odnośniki w plikach podanych
w kolejnych wierszach.

Do przechowywania informacji o wystąpieniach plików użyj drzewa BST z kluczami
będącymi pełnymi (tj. wraz ze ścieżkami) nazwami plików z odnośników, zaś
wartościami będącymi posortowanymi (wzgl. pełnych nazw) listami nazw plików
zawierających odnośniki. 

Zwróć uwagę na właściwą organizację programu (procedury i moduły). Twój program
powinien zawierać co najmniej moduły: BST, Lista, Pliki. Zadbaj o możliwie 
proste interfejsy modułów.

Uwagi:
 - program ma na początku sprawdzić poprawność parametrów (tzn. czy jest ich 4, 
   czy rozszerzenie nie ma więcej niż 3 znaki, czy ogranicznik ma jeden znak, 
   czy plik wynikowy nie istnieje); jeśli parametry sa niepoprawne, to należy 
   wypisać stosowny komunikat i zakończyć pracę,
 - oczywiście jeśli w jakimś pliku występuje kilka razy odnośnik do tego samego
   pliku, to w mapie informacja o powiązaniu pojawia się tylko raz,
 - uwaga na względne scieżki (tj. z .. lub .) w odnośnikach:
    a) trzeba je właściwie wyliczać (tj. względem katalogu, w którym jest plik
       z odnośnikiem),
    b) trzeba utożsamiać odwołania do tego samego pliku (np. ././plik i plik),
       spróbuj np. writeln(fexpand('twojplik.pas')).
 - jeśli odnośnik nie jest zakończony przed końcem wiersza, to uważamy go
   za błędny i ignorujemy,
 - jeśli plik podany w odnośniku nie istnieje, to odnośnik uważamy za błędny
   i ignorujemy,
 - jak zwykle należy wypisać stan pamięci na początku działania, po wygenerowaniu 
   struktur danych i na końcu działania programu.
 - nawet nie wypada już przypominać, że należy zwolnić pamięć, a pliki pozamykać.