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Ü.