Encyklopedia w MarkpolReklama:Edytor binarny BineditPoniżej zamieszczona jest dokumentacja stosunkowo dużego programu w asemblerze x86. Kod znajduje się [http://pl.wikipedia.org/upload/6/66/Binedit.asm pod tym linkiem]. Należy go zapisać na dysku opcją "Zapisz element docelowy jako...", skompilować Turbo Assemblerem i zlinkować.Interface użytkownikaProgram umożliwia:Uruchomienie i opuszczenie programuPrzy uruchomieniu programu należy po jego nazwie podać nazwę pliku do edycji. Można podać całą ścieżkę. Jeśli plik ten nie istnieje, zostanie stworzony nowy-pusty. Jeśli plik nowo stworzony nie zostanie zapisany na dysku, przy wyjściu zostanie skasowany. Plik nie powinien mieć atrybutu Read Only, na sieci użytkownik powinien mieć prawa także do jego zapisu, w przeciwnym wypadku program nie zdoła go otworzyć. Zabezpiecza to użytkownika przed sytuacją, kiedy szeregu wprowadzonych poprawek nie da się zapisać na dysku, która często powstaje na przykład w edytorze Norton Commandera. Program opuszczamy przez wciśnięcie Alt+X lub F10. Przycisk Esc nie powoduje opuszczenia programu, aby nie spowodować przypadkowego wyjścia przy wychodzeniu z okienka w programie. Jeśli przy wychodzeniu z programu nie pozostały nie zapisane zmiany lub bajty zaznaczone do usunięcia, program da użytkownikowi trzy możliwości:Przesuwanie kursoraKursor można przesuwać o jeden znak w dowolną stronę przy pomocy przycisków kursora. Ponieważ każdy bajt z reguły zajmuje więcej niż jeden znak na ekranie, wprowadzono dodatkową kombinację przycisków: Ctrl+Lewo lub Ctrl+Prawo. Przesuwa ona kursor o jeden bajt w pliku. Do przesuwania kursora o stronę w dół lub górę służą przyciski Page Up lub Page Down. Na początek pliku skaczemy kombinacją Ctrl+Page Up. Na koniec pliku skaczemy kombinacją Ctrl+Page Down. Home przesuwa kursor do pierwszego znaku liczby na której znajduje się kursor, End do ostatniego znaku. Tab przesuwa kursor do tego samego bajtu w drugiej kolumnie.Zmiana sposobu prezentowania danychAby zmienić system liczbowy obowiązujący w danej kolumnie, należy wcisnąć Ctrl dla lewej kolumny lub Alt dla prawej wraz z przyciskiem określającym system:Zmiana ilości bajtów w wierszuStandardowo program dobiera maksymalną możliwą liczbę bajtów w wierszu. Czasem jednak celowe jest jej ograniczenie, np. kiedy przeglądamy plik zawierający rekordy o ustalonej długości. Można to zrobić następującymi przyciskami:Dokonywanie poprawek w plikuWartość dowolnego bajtu można zmienić, po prostu przesuwając na niego kursor i wpisując nową wartość lub modyfikując starą. Edycję można przeprowadzać w dwóch trybach:Zmiana długości plikuPlik rozszerzamy przechodząc do bajtu znajdującego się za ostatnim jego bajtem (np. przez Ctrl+Page Down) a następnie wprowadzając jego wartość. W ten sposób można wprowadzić dowolną liczbę bajtów rozszerzających plik. Plik można również uciąć począwszy od bajtu zawierającego kursor włącznie wciskając F8. Dopóki nie zapiszemy pliku na dysku obcięcie można odwołać przez Alt+F8 lub przesunąć. Bajty przeznaczone do usunięcia oznaczane są na kolorowym ekranie czarnym tłem a na monochromatycznym inwersją.Znajdowanie ciągu bajtówProgram umożliwia znalezienie w pliku dowolnego ciągu bajtów. Należy w tym celu wcisnąć F7 lub Ctrl+F. Pojawia się okno krótką instrukcją i linią do wpisania wzorca. Ciąg do znalezienia wpisujemy oddzielając poszczególne bajty przecinkiem. Każdy bajt można przedstawić w dowolnym systemie używając ewentualnie znaku minus. Aby program mógł odróżnić liczbę w danym systemie należy ją zakończyć literą określającą system:Opis technicznyProgram składa się z kilkunastu bloków funkcjonalnych, wywołujących się nawzajem. Każdy z nich został odpowiednio oznaczony w kodzie źródłowym. Są to:Grupy stałychW programie wykorzystywanych jest kilka grup stałych. Każda grupa identyfikowana jest dwoma pierwszymi znakami nazwy stałej :CachePonieważ plik może być dłuższy niż 64 KB, a nawet dłuższy niż cała dostępna pamięć komputera, zachodzi konieczność jego buforowania. W programie istnieje bufor (cache) długości 20000 bajtów. Kiedy kursor zbliża się na mniej niż 4000 bajtów do jego brzegów, cache jest przesuwany tak, aby jego środek znalazł się na pozycji kursora. Oczywiście w przypadku, gdyby cache wysunął się poza plik (z lewej lub prawej strony), nie zostaje on przesunięty. Przesunięcie cache-a pociąga za sobą wprowadzenie z listy zmian wszystkich zmian wykonanych na komórkach z tego obszaru. Dzięki temu zmiany mogą być odwzorowane na ekranie bez potrzeby ciągłego przeszukiwania listy dokonanych zmian a procedury znajdowania ciągu znaków uwzględniają wprowadzone poprawki. Z buforem związana jest tablica nazwana âtyp_bajtuâ. Zawiera ona dane określające atrybut bajtu na ekranie:Procedury obsługi okienW programie istnieją dwa okna: z listą przycisków oraz do wprowadzania ciągu znaków. W bloku znajdują się procedury pozwalające na ich rysowanie na ekranie. Usuwanie okien przeprowadzane przez narysowanie od początku całego programu.Odczytywanie liczb z ekranuWszelkie poprawki w pliku są wprowadzane początkowo jedynie na ekran. Za każdym razem kiedy kursor opuszcza pole danego bajtu pliku, z ekranu odczytywana jest wartość zapisana w opuszczonym polu i porównywana z dotychczasową. W przypadku zaistnienia zmiany wywoływana jest procedura wprowadzająca ją na listę zmian.Obsługa listy zmianWprowadzone zmiany nie są od razu zapisywane w pliku, muszą zatem zostać tymczasowo zapamiętane. Służy do tego obszar pamięci nazwany listą zmian. Jest to tablica tysiąca struktur typu ZMIANA. Zawierają one adres zmienionego bajtu, jego starą wartość i wprowadzoną nową. Procedury obsługujące listę umożliwiają dokonanie zmiany w danym bajcie pliku w wyniku czego zostaje stworzona nowa pozycja na liście, albo zmieniona czy usunięta już istniejąca. Koniec listy jest oznaczony pozycją w której adresem jest FFFFFFFFh.Działanie programuPoczątkowo wywoływana jest procedura âprogramâ (blok âGłówne procedury programuâ). Procedura ta sprawdza parametr dla programu, wywołuje procedurę âinicjujâ (âProcedury używane do inicjacjiâ) oraz skacze do procedury âpetla_klawiaturyâ (âGłówne procedury programuâ). W przypadku, gdy nie został podany żaden parametr więcej niż 1, albo został podany parametr ? -? lub /? na ekran wypisywana jest krótka instrukcja. Procedura âpetla_klawiaturyâ odczytuje przycisk z klawiatury, sprawdza czy odpowiada on jakiejś funkcji programu oraz wywołuje procedurę odpowiadającą temu przyciskowi. Jeśli zostanie ustawiona na wartość różną od zera zmienna âodswiez_ekranâ, wywoływana następnie procedura ârysuj_ekranâ (blok âprezentacja wyników na ekranieâ) odświeży jego zawartość. Oprócz tego pętla klawiatury wywołuje procedurę rysuj_status, która odświeża ostatnią linię ekranu po ewentualnym komunikacie błędu, który jest wyświetlany w tej linii. Pętla klawiatury nigdy się nie kończy. Wyjście z programu realizuje procedura odpowiedzialna za obsługę przycisków F10 i Alt+X. Pętla klawiatury przekazuje sterowanie procedurom obsługującym poszczególne przyciski. Te dopiero odpowiadają za właściwe działanie programu. Procedury te dopiero wywołują inne z bardziej âusługowychâ bloków funkcjonalnych, np. z cache-a. W komórkach od etykiety âpoczątek_przyciskówâ do etykiety âkoniec_przyciskówâ zapisane są struktury typu KLAWISZ wiążące kod przycisku z adresem funkcji obsługującej go. Etykieta âkoniec_przycisków_oknaâ ogranicza zbiór przycisków, które mogą odnieść skutek w oknie wprowadzania ciągu znaków.Obsługa błędówProgram jest zabezpieczony przed nieprzewidzianymi wypadkami w rodzaju błąd zapisu na dysku. Wszelkie błędy, które zdażyły się na samym początku programu, przed wyświetleniem jego ekranu, powodują wyjście do DOS-u z odpowiednim komunikatem. Są to:Chcesz wypromować swoją stronę w internecie?? - nie zwlekaj pozycjonowanie w Luman.biz to rozsądny wybór |
|