CatFood+
Pierwowzór – program CatFood autorstwa RiP został opublikowany na łamach czasopisma Tajemnice Atari nr 6-7/93. Jest to handler urządzenia F:, instalujący w systemie kompresor/dekompresor. Co istotne proces kompresji/dekompresji odbywa się w locie, w czasie przesyłania danych do/z urządzenia docelowego i oparty jest o jedną z najbardziej znanych metod kompresji RLE. Słuszne skojarzenie ze współczesnym szeroko rozumianym „streaming-iem” jest jak najbardziej na miejscu. Idea piękna, gorzej z wykonaniem – program niestety nie działa. A precyzyjniej nie do końca działa prawidłowo. Pewne sekwencje bajtów, które mogą pojawić się w danych spowodują nieprawidłowe działanie kompresora – błąd znajduje się w procedurach kompresji/dekompresji.
Ciekawym jest, że nie zostało to wcześniej wykryte, w każdym razie mogło się zdarzyć, że użytkownik zraził się do korzystania z handlera w związku z nieokreślonymi skutkami działania jego własnego programu, nie podejrzewając błędu samego handlera. Bo trzeba też dodać, że nigdy na łamach TA nie pojawiło się żadne sprostowanie. Błędy ujawniły się w trakcie intensywnej pracy nad pewną grą, w której postanowiłem skorzystać z CatFood-a.
Nieoceniona pomoc kolegi Jerzego „Mono” Kuta doprowadziła do powstania pozbawionego błędu handlera CatFood+ współpracującego także z systemem Sparta Dos X. Dodatkową zmianą jest sposób obsługi nazwy pliku.
Sterownik CatFood+ instaluje jak poprzednio w systemie nakładkę z handlerem urządzenia F:
W przypadku SDX wywołujemy:
CFP.COM lub CFP
Instalację nakładki ogłosi światu komunikat:
CatFood 3.6+ by RiP & Mono
Użytkowo obsługa handlera jest banalnie prosta i sprowadza się do poprzedzenia nazwy pliku poddawanego kompresji/dekopresji symbolem F , np.:
„FD:FILENAME.EXT”
Przykładem niech będzie program w Turbo Basic XL zapisujący na dysku zawartość ekranu trybu graficznego 8:
10 GRAPHICS 8+16
11 OPEN #1,8,0,”FD:EKRAN.GR8″
12 BPUT #1,DPEEK(88),7680:CLOSE #1
Utworzony na dysku D: plik EKRAN.GR8 zamiast spodziewanej długości 7680 bajtów został skompresowany do rozmiaru 93 bajtów.
W obliczu potrzeby sprawdzenia czy handler F: istnieje możemy skorzystać z funkcji STATUS, 1 zwrócone w zmiennej F oznajmia istnienie tegoż:
XIO 13,#1,4,0,”F”:STATUS #1,F:?F
Dodatkowo sterownik zgłasza kilka typów błędów:
- $82 (130) – urządzenie nie istnieje
- $FE (252) – otwarcie do odczytu i zapisu
- $FD (253) – nieprawidłowy numer kanału IOCB
- $FC (254) – wskazano urządzenie docelowe F:
- $FC (255) – urządzenie jest w użyciu
Jak widać kompresja i dekompresja odbywa się „w locie” i jest szybkim remedium np. na deficyt miejsca na dyskietce. Użyty w CFP algorytm traktuje specjalnie niektóre bajty – np. kod SPACJI, przeto świetnie nadaje się do kompresji tekstu. Doświadczenia z kompresją plików graficznych zwierających nieskomplikowaną grafikę wykazały poziom kompresji ze 100% nawet do kilku.
Poniżej link z obrazem dyskietki zawierający handler CatFood+ wraz z informacjami od autora.