Informatyka I rok
Laboratorium Metod Programowania
2000/2001

Zadanie z dnia: 12.03.01
Termin odbioru: 26.03.01

Zad. 1  

Należy napisać program porzadek. Użytkownik tego programu,
pracuje nad projektem (np. programistycznym), w ramach 
którego ma wygenerować zestaw plików tekstowych (np. modułów). 
Ów użytkownik co pewien czas zapisuje (za każdym razem w innym
podkatalogu katalogu projektu) wszystkie wygenerowane przez
siebie pliki. Nazwy podkatalogów są generowane w kolejności 
leksykograficznej (np. daty wg PN: rok, miesiąc, dzień).
Ponieważ kopie robione są dość często, większość kopii różni
się od poprzednich wersji tylko niewielką liczbą plików.
Porządkowanie polega na przejrzeniu podkatalogów wskazanego katalogu
i usunięciu nadmiarowych kopii (tzn. tych plików które są 
identyczne z plikami z poprzedniego leksykograficznie katalogu).

Napisz program porzadek, który można wywoływać w następujące sposoby:
 porzadek -u <nazwa katalogu> (np. porzadek -u c:\projekt)
   porządkuje wszystkie podkatalogi wskazanego jako parametr katalogu.
 porzadek -t <nazwa katalogu> (np. porzadek -t c:\projekt)
   j.w. tyle że nie usuwa żadnych plików, a tylko wypisuje nazwy plików
   które powinny być usunięte.
Uwaga, program ma dać się stosować przyrostowo, tzn. jeśli użytkownik
wywoła go raz w danym projekcie, potem dopisze kilka nowych
podkatalogów i znów wywoła ten program, to wynik powinien być taki,
jaki byłby wtedy, gdyby użytkownik wywołał ten program tylko 
za drugim razem.
Jeśli wywołanie będzie miało złą liczbę parametrów lub parametry
będą niepoprawne, to program powinien poinformować o tym użytkownika
i zakończyć działanie.
Na koniec działania program powinien wypisać informację o liczbie
usuniętych (wypisanych) plików.
Dodatkowo powinien wypisac informację o zajetości pamięci na początku
działania i na końcu (oczywiście te liczby powinny byc równe).

Dodatkowe uwagi:
 - podkatalogi projektu zawierają tylko pliki (a nie kolejne katalogi),
 - w trakcie prac nad projektem mogą się pojawiać nowe pliki,
   nigdy natomiast nie nikną już istniejące,
 - program nie uwzględnia zmian nazw plików składowych projektu,
   tzn. jesli taka zmiana nastąpi, to program ma traktować plik
   ze zmienioną nazwą jako nowy plik w projekcie, zaś plik
   ze starą nazwą jako nadal istniejący w projekcie (tyle że już
   nie modyfikowany),
 - przez identyczne pliki rozumiemy pliki o takiej samej zawartości
   i nazwie, nie bierzemy pod uwagę daty ostatniej modyfikacji pliku,
 - porównując dwa pliki należy oczywiście zakończyć porównywanie 
   po napotkaniu pierwszej różnicy i w ogóle nie należy go zaczynać,
   gdy długości plików sa różne.

Informacje o BP:
 - do wyszukwiania plików i katalogów należy użyć procedur FindFirst
   i FindNext podając atrybut AnyFile lub Directory (ale uwaga,
   wyszukiwanie z atrybutem Direcory wyszukuje także pliki, należy
   więc sprawdzić po wyszukaniu w zmiennej typu SearchRec pole Attr
   co zostało znalezione. Uwaga na katalogi . i ..! Należy też
   zwrócić uwagę na to, że wyszukiwanie nie wyszukuje w kolejności
   rosnącej wg nazw (ani czegokolwiek innego),
 - do usuwania plików służy procedura Erase.

Możliwe rozszerzenia programu (nie wymagane do zdobycia maksymalnej 
liczby punktów):
 porzadek -g <nazwa katalogu> (np. porzadek -g c:\projekt)
   porządkuje wszystkie podkatalogi wskazanego jako parametr katalogu
   i w ostatnim z nich generuje pełną wersję projektu.
 porzadek -z <opc> <nazwa katalogu> <nazwa podkatalogu> <nazwa podkatalogu>
   (np. porzadek -z -g c:\projekt 00-03-25 01-01-31)
   gdzie <opc> to jedna z podanych wcześniej opcji), działa jak 
   opisano poprzednio, tyle że zaczyna od podkatalogu o pierwszej 
   z podanych nazw i kończy na podkatalogu o ostatniej z podanych nazw.
 

Miejsce skąd można pobierać treści zadań zaliczeniowych: 
   www.mimuw.edu.pl/~janusz (i potem dość oczywiste dowiązania)