Maciej Paczkowski 96963 27 stycznia 2006r.
Marcin Ruszczyk 88889
AiR
PROJEKT
OPROGRAMOWANIE MIKROKOMPUTERÓW
Ćwiczenie nr 9
Zaprojektować menedżera plików i katalogów. Programo powinien pozwalać użytkownikowi na proste operacje jak ukrywanie/odkrywanie plików i katalogów oraz szyfrowanie i odszyfrowywanie plików.
W skład projektu wchodzi 8 plików:
MENADZER.C - główny program
SZUK1.ASM - funkcja szukaj_plik()
SZUK2.ASM - funkcja szukaj_nastepny_plik()
SZYFRUJ.ASM - funkcja szyfruj_plik()
UKRYJ.ASM - funkcja ukryj()
UKRYTY.ASM - funkcja czy_ukryty()
ZM_ROBO.ASM - funkcja zmien_roboczy()
ROBO.ASM - funkcja podaj_roboczy()
Opis poszczególnych funkcji:
extern int szukaj_plik(char t[], char dta[], char nazwa[], unsigned int atrybut);
Funkcja napisana w asemblerze służy do znalezienia nazwy pierwszego pliku pasującego do zdanych kryteriów. W nazwa[] podajemy zmienną gdzie ma się przez referencję wpisać nazwa pliku. Natomiast int atrybut oznacza atrybut z jakimi ma szukać danych plików.
Użyte są następujące funkcje DOSowe przerwania INT 21h:
1ah - deklarowanie nowego adresu bloku DTA
4eh - znalezienie pierwszego lepszego pliku, gdzie nazwa znajduje się na 30-tej pozycji bloku DTA
extern int szukaj_nastepny_plik(char t[], char dta[], char nazwa[], unsigned int atrybut);
Funkcja działa jak poprzednia i służy do znalezienia następnego pasującego pliku na podstawie poprzedniego szukania zapisanego w bloku DTA.
Użyte są następujące funkcje DOSowe przerwania INT 21h:
1ah - deklarowanie nowego adresu bloku DTA
4eh - znalezienie pierwszego lepszego pliku, gdzie nazwa znajduje się na 30-tej pozycji bloku DTA
extern int szyfruj_plik(char nazwa[], char klucz[], char buforek[], int id_pliku);
Funkcja szyfruje/odszyfrowuje dany plik (pierwsze 256bajtów) funkcją XOR wg sześciobajtowego podanego przez użytkownika klucza w char klucz[]. W zmiennej char nazwa[] wpisujemy nazwę pliku do zaszyfrowani/odszyfrowania.
Użyte są następujące funkcje DOSowe przerwania INT 21h:
3D02h - otwarcie pliku
4202h - sprawdzenie rozmiaru pliku
4201h - sprawdzenie aktualnej pozycji
4200h - ustaw poczatek wskaźnika pliku na zero
3Fh - odczyt z pliku
40h - zapis do pliku
3Eh - zamkniecie pliku
extern unsigned int czy_ukryty(char nazwa[]);
Funkcja sprawdza i zwraca atrybut jako wartość funkcji. Wynikiem może być 0,2,16 oraz 18.
0 - oznacza normalny plik
2 - oznacza ukryty plik
16 - oznacza katalog
18 - oznacza ukryty katalog
W zmiennej char nazwa[] podajemy nazwę pliku do sprawdzenia.
Użyta jest jedynie jedna funkcja przerwania IT 21h:
4300h - odczytanie atrybutów w CX
extern int ukryj(char nazwa[]);
Funkcja odczytuje atrybut skrytości a następnie zmienia go na przeciwny. W funkcji nazwa[] dajemy nazwę pliku do ukrycia.
Użyte są następujące funkcje DOSowe przerwania INT 21h:
4300h - odczytanie atrybutów do CX
4301h - zmiana atrybutów
extern int zmien_roboczy(char nazwa[]);
Funkcja zmienia katalog roboczy na inny podany w nazwie char nazwa[].
Użyta funkcja DOSowa:
3B00h - zmiana katalogu roboczego
extern int podaj_roboczy(char sciezka[]);
Funkcja zwraca nazwę katalogu roboczego do łańcucha sciezka[].
Użyta funkcja DOSu:
4700h - podaj katalog roboczy
Dodatkowo w programie znajdują się trzy funkcje napisane w C:
void daj_nazwe(int numer, char nazwa_pliku[]);
Funkcja podaje nazwę pliku o danym numerze w katalogu, jeśli nie ma takiego numeru pliku to zwraca nazwę ostatniego pliku jaki wystąpił.
int ile_plikow(void);
Funkcja zwraca ilość plików w katalogu (korzysta z poprzedniej funkcji)
void rysuj(void);
Funkcja rysuje ramkę.
Obsługa programu:
Do obsługi programu służą przyciski:
↑ - przesuwa o jedną pozycję do góry
↓ - przesuwa o jedną pozycję w dół
F1 - ukrywa/odkrywa dany plik/katalog
F2 - szyfruje/odszyfrowuje dany plik wg podanego klucza. Po podaniu klucza program pyta się o zatwierdzenie (N/T)
ESC - wyjście z programi
ENTER - po naciśnięciu można „wejść” do danego katalogu