Encyklopedia w Markpol

Reklama:

Edytor binarny Binedit

Poniż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żytkownika

Program umożliwia:
  • Edycję plików binarnych dowolnej wielkości w formatach :
  • ASCII (jako ciąg znaków)
  • Dwójkowym
  • Ósemkowym
  • Dziesiętnym
  • Szesnastkowym Każdy z nich poza ASCII może ponadto występować w dwóch wersjach :
  • Z liczbami traktowanymi jako dodatnie 8-bitowe
  • Z liczbami traktowanymi jako zapisane w kodzie U2
  • Zmianę wartości komórek w każdym z powyższych trybów
  • Dodanie do pliku na końcu dowolnych bajtów
  • Ucięcie pliku od ustalonego wcześniej miejsca do jego końca
  • Znalezienie dowolnego ciągu bajtów w pliku, także zawierającego bajty o wartości dowolnej.
  • Pracę w każdym trybie tekstowym, posiadającym 80 znaków w wierszu (i dowolną liczbę wierszy). Program dostosowuje się do rozmiarów ekranu w chwili jego uruchomienia. Ekran w programie podzielony jest na cztery pola (kolumny):
  • Indeks (pozycja w pliku) szesnastkowo
  • Indeks dziesiętnie
  • Pole danych (standardowo szesnastkowe)
  • Pole danych (standardowo ASCII) Każdy z indeksów można usunąć z ekranu, zwiększając w ten sposób powierzchnię dla danych. Każde z pól danych można przełączyć na inny system liczbowy lub ASCII. Można również rozszerzyć jedno z pól danych kosztem drugiego. Wszelkie zmiany w pliku włącznie z jego obcięciem zostają zapisane na dysk dopiero po wciśnięciu F2 lub wyjściu z programu z poleceniem zapisu. Wcześniej każdą z nich można anulować. Okno ze spisem przycisków można w każdej chwili wywołać w programie przyciskiem F1. Kolory liczb na ekranie pozwalają zorientować się, które z nich zostały zmienione i które przeznaczone są do usunięcia. Wszelkie błędy sygnalizowane są w linii statusu.

    Uruchomienie i opuszczenie programu

    Przy 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:
  • Opuszczenie z zapisem
  • Opuszczenie bez zapisu
  • Powrót do edycji

    Przesuwanie kursora

    Kursor 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 danych

    Aby 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:
  • A dla ASCII
  • B dla systemu binarnego
  • O dla ósemkowego
  • D dla dziesiętnego
  • H dla szesnastkowego Ponadto następujące przyciski wciśnięte wraz z odpowiednim dla danej kolumny Alt lub Ctrl powodują
  • Z -Przełączenie kolumny między trybem liczb bez znaku i w kodzie U2
  • U -Usunięcie kolumny i odpowiednie rozszerzenie drugiej
  • R -Rozszerzenie kolumny i usunięcie drugiej Wciśnięcie Alt+S lub Ctrl+S spowoduje przełączenie całego ekranu pomiędzy trybami :
  • Wypełniania liczb z lewej strony zerami (standardowo), np. 00010111
  • Wypełniania liczb spacjami, np. 10111 Wciśnięcie Ctrl+I dla lewego indeksu (szesnastkowego) lub Alt+I dla prawego (dziesiętnego) usuwa lub przywraca kursor na ekran.

    Zmiana ilości bajtów w wierszu

    Standardowo 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:
  • Szary minus -Zmniejsza o jeden liczbę bajtów w wierszu i wyłącza automatyczne dobieranie.
  • Szary plus -Zwiększa o jeden liczbę bajtów.
  • Szara gwiazdka -Przywraca tryb maksymalnej liczby bajtów.

    Dokonywanie poprawek w pliku

    Wartość 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:
  • Normalnym -Wpisywanie znaków przesuwa dalsze znaki w prawo.
  • Nadpisywania (overwrite) -Nowe znaki kasują stare w tym samym miejscu. Przejście pomiędzy trybami odbywa się przy pomocy przycisku Insert. W trybie nadpisywania kursor zmienia się na blokowy. W obydwu trybach można kasować znaki z lewej strony kursora przy pomocy  i z prawej przez Delete. Liczby muszą być wpisywane w systemie obowiązującym w danej kolumnie. We wszystkich trybach poza ASCII (nawet wśród liczb bez znaku) można liczby ujemne wpisywać na dwa sposoby:
  • Jako liczbę dodatnią, np. 200
  • Jako liczbę ze znakiem, np. -56 W przypadku błędu składniowego lub podania liczby mniejszej od -128 lub większej od 255 przywracana jest poprzednia wartość. Składnia jest kontrolowana po przejściu kursora do innego bajtu. Każdą poprawkę można anulować wprowadzając starą wartość danego bajtu lub wciskając Ctrl+F8. Poprawki są wyróżnione na ekranie (na kolorowym monitorze kolorem białym cyfr). Na dysk są one wprowadzane dopiero po zapisaniu pliku.

    Zmiana długości pliku

    Plik 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ów

    Program 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:
  • liczby binarne kończymy przez b lub B, np. 11011101b
  • liczby ósemkowe kończymy przez o lub O, np. 335o
  • liczb dziesiętnych nie zakańczamy literą, np. 222
  • liczby szesnastkowe kończymy przez h lub H,np. DDh Ciągi znaków ASCII ograniczamy apostrofami lub znakami cudzysłowu. Znak kończący ciąg znaków musi być identyczny z rozpoczynającym. W ciągu ograniczonym apostrofami można umieszczać cudzysłowy i vice versa. Litery małe i duże w tekście do znalezienia są odróżniane. Cyfry szesnastkowe większe od 9 w całym programie można wpisywać zarówno małymi jak i dużymi literami. W ciągu bajtów można również umieścić bajt o wartości nieokreślonej przez wpisanie znaku zapytania. Znalezione będzie najbliższe wystąpienie danego ciągu z dowolnymi wartościami w miejscu znaków zapytania. Poszukiwania jest prowadzone od pozycji kursora. Wciskając Shift+F7 lub Ctrl+L znajdujemy następne wystąpienie ciągu. Program przeszukuje wówczas plik od pozycji za kursorem. Kursor jest automatycznie przemieszczany do pierwszego bajtu znalezionego ciągu. Przykład ciągu do znalezienia:
    ?,123,-45o,D6h,?,?,”Tekst: 'Ala'",11010101b,'ma "kota"'

    Opis techniczny

    Program 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:
  • Stałe i zmienne globalne
  • Makrodefinicje ogólnego użytku i procedury komunikacji z BIOS-em i DOS-em
  • Procedury używane do inicjowania programu po uruchomieniu
  • Obsługa cache-u
  • Procedury ustawiające i dające informacje o położeniu w pliku, trybach itp.
  • Procedury obsługi okien
  • Przesuwanie kursora
  • Zmiany sposobu prezentacji danych
  • Zmiany zawartości pola na ekranie
  • Pozostałe funkcje wywoływane przyciskami
  • Konwertery pomiędzy liczbami a różnymi systemami liczbowymi
  • Odczytywanie liczb z ekranu
  • Prezentacja wyników na ekranie
  • Obsługa listy zmian
  • Poszukiwanie ciągu bajtów w pliku
  • Główne procedury programu Argumenty procedur przekazywane są zawsze poprzez rejestry procesora. Również ewentualne wyniki funkcji przekazywane są poprzez rejestry. Procedury są opisane w programie, niektóre bloki jednak wymagają dodatkowego opisu ogólnego sposobu działania.

    Grupy stałych

    W programie wykorzystywanych jest kilka grup stałych. Każda grupa identyfikowana jest dwoma pierwszymi znakami nazwy stałej :
  • KL -kody przycisków z klawiatury
  • TR -tryby pracy pól wprowadzania danych na ekranie (np. TR_ZNAK+TR_DEC)
  • TP -typ bajtu w cache-u (opisany w następnym punkcie)
  • TE -typ ekranu (kolorowy, mono lub czarno-biały)

    Cache

    Ponieważ 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:
  • TP_NIEUCIETY+TP_STARY=0 - normalna wartość
  • TP_NIEUCIETY+TP_NOWY=1 - bajt zmieniony
  • TP_UCIETY+TP_STARY=2 - bajt nie zmieniony, przeznaczony do usunięcia
  • TP_UCIETY+TP_NOWY=3 - bajt zmieniony, przeznaczony do usunięcia.

    Procedury obsługi okien

    W 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 ekranu

    Wszelkie 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 zmian

    Wprowadzone 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 programu

    Począ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ów

    Program 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:
  • Informacja o składni wywołania programu Wypisywana w przypadku podania nieodpowiednich parametrów.
  • Błąd „Plik nie znaleziony i nie daje się utworzyć” Błędy, powstałe później nie powodują wyjścia do systemu, a jedynie wpisanie odpowiedniego komunikatu w ostatniej linii ekranu. Są to:
  • „Plik nie odnaleziony” W przypadku nie odnalezienia pliku przy zapisie
  • „Ścieżka do pliku nie odnaleziona” Analogicznie
  • „Błąd podczas pracy z dyskiem” Inne błędy DOS-u.
  • „Zbyt duża liczba zmian (więcej niż 1000). Zapisz najpierw plik przez F2” Lista zmian ma tylko tysiąc pozycji. Dalsze zmiany nie mogą być wprowadzone, dopóki nie zostaną zapisane obecne.
  • „Zła składnia liczby”. Wpisano tekst, który nie może być zinterpretowany jako liczba, np. -+12. W polach zawartości pliku nie dają się wprowadzić inne znaki niż spacja, plus, minus i cyfry obowiązujące w danym systemie, jednak w oknie ciągu bajtów do znalezienia można popełnić inne błedy, które spowodują ten komunikat.
  • „Apostrof lub cudzysłów bez pary” W oknie ciągu bajtów rozpoczęto ciąg znaków którego nie zakończono dotychczas.
  • „Liczba nie mieści się w przedziale od -128 do 255 włącznie” Nie można takiej liczby wpisać do pliku ani znależć w nim.
  • „W ciągu występują wyłącznie bajty o nieokreślonej wartości” Ciąg do odszukania musi zawierać jakieś konkretne wartości, nie może składać się z samych znaków zapytenia.
  • „Ciąg nie występuje od pozycji kursora do końca pliku” Komunikat wyświetlany kiedy procedura przeszukująca plik dotrze do jego końca.

    Chcesz wypromować swoją stronę w internecie?? - nie zwlekaj pozycjonowanie w Luman.biz to rozsądny wybór
    2005 Encyklopedia
    These materials are based onWikipedia and licensed under the GNU FDL
    Credit|Mortgage Calculator|Loans|Mobile Phone|Debt Consolidation