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