LZWKompresorPierwsze cztery elementy tablicy zawierają symbole podstawowe, którym przydzielono kody od 0 do 3. Następne dwa kody (4 i 5) oznaczają odpowiednio zerowanie tablicy i koniec danych. Pierwszym wolnym elementem tablicy jest więc 6, od niego też zaczniemy. Za każdym razem, gdy znajdziemy nową grupę, wyślemy jej przedrostek do ciągu wyjściowego. A B A B A B A B B B A B A B A A C D A \/\/---/-----/\/---/-------/\/ \/ \ /\/ 6 7 8 9 10 11 12 13 14 15 16 Kod 6 8 10 8 PrzedrostekTablica jest budowana z danych wejściowych tak, że każdy element rozpoczyna się od przyrostka ostatniego kodu. Symbol Kod Przedr. Przyr. Ciąg Wyjście A 0 - B l - C 2 - D 3 - Zeruj 4 - Koniec 5 - A \ A A B / \ 6 A B AB A A | / 7 B A BA B B | A / | 8 6 A ABA 6 B | A | B \ / 9 8 B ABAB 8 B / | 10 B B BB B B | A | / 11 10 A BBA 10 B | A | B | A / \ 12 9 A ABABA 9 A \ / 13 A A AA A C / \ 14 A C AC A D \ / 15 C D CD C A / | 16 D A DA DOtrzymujemy więc ciąg: A B 6 8 B 10 9 A A C D ...Kompresor rozpoczyna pracę z długością kodu 2+1=3 bitów dla czterech elementów, więc kiedy kod osiągnie 8, długość musi się zwiększyć do 4 bitów. Podobnie, kiedy kod osiągnie 16, należy zwiększyć długość do 5 bitów. Po osiągnięciu długości 13 bitów wysyłany jest kod zerowania tablicy i wszystko zaczyna się od początku. DekompresorA B 6 8 B 10 9 A A C D ...Dane z tego ciągu są pobierane parami, a każdej z nich przypisujemy nowy kod. Przedrostek jest lewym elementem pary, przyrostek jest symbolem, który otrzymujemy dzięki tablicy dekompresji. Aby tego dokonać, należy odczytać przyrostek kodu, a następnie użyć przedrostka jako nowego kodu. Proces powtarza się do momentu, gdy przedrostek zostanie pojedynczym symbolem. Pierwszą parą jest (A,B), więc przedrostkiem kodu 6 jest A, zaś przyrostkiem B. Symbol 6 reprezentuje ciąg AB, dekodowany jest symbol A. Druga para to (B,6), więc przedrostkiem kodu 7 jest B, zaś przyrostkiem jest ostatni symbol kodu 6. Kod 6 to AB, więc kod 7 to BA z przyrostkiem A. Dekodujemy symbol B. Cały proces powtarzamy aż do odczytania wszystkich danych. Na podstawie pliku tekstowego autorstwa B. Montgomery (hed)
Od redakcji: zdajemy sobie sprawę, że powyższy tekst jest trudny. Tym, którzy nie potrafią wykorzystać teorii LZW we własnych programach polecamy gotowy kompresor, który drukujemy na następnych stronach. LZWarchJak zacząć?
Encode - archiwizacja danych.1. W nowo otworzonym oknie na ekranie widnieje cyfra oznaczająca ilość bitów wejściowych. Można ją zmieniać klawiszami + i * w zakresie od 2 do 8. Potwierdzenia wybory dokonuje się klawiszem RETURN. Najkorzystniejsze rezultaty archiwizacji uzyskuje się przy: 2 - dla długich obrazków oraz niektórych fontów w grafice 4 trybu ANTIC-a, 4 - dla fontów, 8 - dla tekstów i programów. Pozostałe możliwości są bardzo rzadko wykorzystywane.2. Nazwa pliku do zapisu. 3. Nazwa pliku do archiwizacji. W przypadku podania w nazwie znaku gwiazdki, ATARI po odnalezieniu pliku zapyta o nazwę, pod jaką plik będzie rozarchiwizowany w przyszłości (Name to archive). W przypadku opuszczenia okna klawiszem ESC przyjęta zostanie nazwa niezmieniona. 4. Po prawej stronie ekranu możemy śledzić orientacyjnie wyniki pakowania. Licznik aktualizowany jest po odnalezieniu powtarzającego się ciągu, nie należy więc zwracać uwagi na różnice kilku bajtów w stosunku do rzeczywistej długości pliku. 5. Zakończenie procesu sygnalizowane jest przez pojawienie się okna z punktu 3. Naciśnięcie klawisza ESC zamyka plik i kończy archiwizację. Wpisanie nowej nazwy powoduje archiwizację nowego pliku. Decode - rozarchiwizowywanie danych.1. Nazwa pliku do odczytu (rozpakowywania).2. Zostaną rozpakowane kolejne zbiory, przy czyni przed rozpoczęciem zapisu ATARI zapyta o nazwę, pod jaką ma zostać zapisany zbiór. W przypadku niedokonywania zmian w nazwie, wybór należy potwierdzić klawiszem RETURN. ESC kończy rozpakowywanie. Quit - opuszczenie programu.Normalne zakończenie pracy i powrót do programu nadrzędnego (DOS lub COS). Program można uruchomić powtórnie przy pomocy komendy RUN.Uwagi.1. Program wykorzystuje metodę LZW kompresji danych.2. Do poprawnej pracy programu należy dysponować urządzeniami zewnętrznymi, które mogą otworzyć dwa zbiory jednocześnie, np. RAMdysk założony pod ROM-em oraz magnetofon. 1000 REM *--------------------------* 1002 REM : LZW arch 3.0 : 1004 REM : autor: MATHNOID'93 : 1006 REM : (c) 1993 Tajemnice ATARI : 1008 REM *--------------------------* 1010 DATA ffff00806680a420b91a038d5c 1020 DATA 2fa5211869308d5d2fa93a8d5e 1030 DATA 2fa99b8d5f2fa99b20b0f22033 1040 DATA 80a20da92d9d4780ca10faade8 1050 DATA 02c924b007a247a0804c42c6a2 1060 DATA 56a0802042c6a2ff9a6c0a004c 1070 DATA 5a57206172636820762e332e30 1080 DATA 9b536f727279206e6f20726f6f 1090 DATA 6d2021fd9be202e30200800024 1100 DATA fb2ea203bd5c2f9d802f9d702f 1110 DATA ca10f4a9008d723020502da2fe 1120 DATA 9a20262d20fdf288d0fac92bd0 1130 DATA 034c4a24c92ad0034c5524c91b 1140 DATA d0034cbd2bc99bd0e1ad7230d0 1150 DATA 034c1026c901d0ed4c6224ad72 1160 DATA 30f0cdce72304c1624ad7230c9 1170 DATA 02f0c0ee72304c162420cb2b18 1180 DATA 20a12a90034c1624a90420502d 1190 DATA 20b32ba210a90420542b20742a 1200 DATA 48290f8d84308d8230684a4a4a 1210 DATA 4a8d85308d813020f42ba002b9 1220 DATA 702fc93af0108810f6a202bd5c 1230 DATA 2f9d702fca10f7a002c88cbd24 1240 DATA 20742aae87303065a2009d702f 1250 DATA eebd24c99bd0ec3820a12a900b 1260 DATA a90420af2d20b32b4c1624a220 1270 DATA a90820542b203c2a206429203c 1280 DATA 2aac87303033cd7d30d00eec7e 1290 DATA 30d009ee843020f42b4ce624cd 1300 DATA 7930d026ec7a30d021204c29ad 1310 DATA 6529d0f8201928a22020e82c20 1320 DATA cb2b4c972420b32ba90420af2d 1330 DATA 4c1624cd7b30d022ec7c30d01d 1340 DATA 204c29ad6529d0f8207327ad82 1350 DATA 308d8430ad81308d853020f42b 1360 DATA 4ce024ad9630cd7b30ad9730ed 1370 DATA 7c30907dad963038ed77308d8e 1380 DATA 30ad9730ed78308d8f30209e29 1390 DATA a5d185d7a5d285d8ee8e30d003 1400 DATA ee8f30ad8e30cd8c30d013ad8f 1410 DATA 30cd8d30d00ba5cb85d9a5cc85 1420 DATA da4cad25209e29a5d185d9a5d2 1430 DATA 85daa000b1d720f125204c29ad 1440 DATA 6529c901d0f6ce6529a000b1d7 1450 DATA 206429e6d7d002e6d8a5d7c5d9 1460 DATA a5d8e5da90eb2019284ce624ad 1470 DATA 963020f125204c29ad6529c901 1480 DATA d0f64ce624206429207829a900 1490 DATA 8dfd25a200bd9e60206d29eefd 1500 DATA 25adfd25cd6529d0ed60a90120 1510 DATA 502da9088d8430ad8430186910 1520 DATA 8d1dbd20fdf288d0fac92bd003 1530 DATA 4c0028c92ad0034c0d28c91bd0 1540 DATA 08a90120af2d4c1624c99bd0dc 1550 DATA a90120af2dae84308e8230e002 1560 DATA d001e8e88e85308e8130206e2c 1570 DATA 3820a12a90034c1624a9042050 1580 DATA 2d20b32ba220a90820542b20cb 1590 DATA 2bad84300a0a0a0a0d8530201f 1600 DATA 2a20cb2b2019281820a12a900b 1610 DATA a90420af2d20b32b4c1624a210 1620 DATA 20e82ca90420542ba200bd802f 1630 DATA 3021c92ad018a90220502da20e 1640 DATA bd292e9dc4bcca10f7206e2790 1650 DATA e04cd226e8e00ed0daa200a002 1660 DATA b9802fc93af0058810f6300398 1670 DATA aae88ee926a200bd802f48201f 1680 DATA 2a68eee926c99bd0ef20cb2b20 1690 DATA 3c2aae873010034c9f28206429 1700 DATA ad8d30c918f006a5ccc9bbd031 1710 DATA ad6529f008204c29ad6529d0f8 1720 DATA ad7b308d9830ad7c308d993020 1730 DATA cf29207327ad81308d8530ad82 1740 DATA 308d8430206e2c4cfc26ad8c30 1750 DATA cd7530ad8d30ed76309028ad7d 1760 DATA 308d9830ad7e308d993020cf29 1770 DATA ee8530206e2c4c0a2718084cd8 1780 DATA 2aa9008d8c308d8d304ceb2b20 1790 DATA 3c2aae873010034c9f28206429 1800 DATA 1820ce28b01e207829a200bd9e 1810 DATA 60206d29e8ec6529d0f4204c29 1820 DATA ad6529c902b0f64c0a27203c2a 1830 DATA ae873010034c9f282064293820 1840 DATA ce28b0ec207829a200bd9e6020 1850 DATA 6d29e8ec6529d0f4ad9830186d 1860 DATA 77308d9830ad99306d78308d99 1870 DATA 3020cf29ae6529cabd9e608d9e 1880 DATA 60a9018d65292019284c0a27ad 1890 DATA 8430c902f003ce84304c1a26ad 1900 DATA 8430c908f0f6ee8430d0f1a9d3 1910 DATA 85d3a9bc85d4a000ad8830ae89 1920 DATA 30203728a006ad8a30ae8b304c 1930 DATA 37288e93308d9230a910a22720 1940 DATA 5f28a9e8a203205f28a964a200 1950 DATA 205f28a90aa200205f28ae9230 1960 DATA 4c95288d94308e9530a2ffe8ad 1970 DATA 923038ed94308d9230ad9330ed 1980 DATA 95308d9330ad9330c9c090e5ad 1990 DATA 9230186d94308d9230ad93306d 2000 DATA 95308d93308a186910098091d3 2010 DATA c860204c29ad6529d0f8ad7930 2020 DATA 8d9830ad7a308d993020cf29ad 2030 DATA 102ac908f00b3820092aad102a 2040 DATA c908d0f52019284c8f2608ad8d 2050 DATA 300d8c30d00328186028b064a9 2060 DATA 008d8e308d8f30ee8e30d003ee 2070 DATA 8f30ad8e30cd8c30ad8f30ed8d 2080 DATA 30b0dd209e29a5d18d9030a5d2 2090 DATA 8d9130ad8e3038e9018d8e30b0 2100 DATA 03ce8f30209e29ad903038e5d1 2110 DATA cd6529d01da000b1d1d99e60d0 2120 DATA 14c8cc6529d0f3ad8e308d9830 2130 DATA ad8f308d99303860ee8e30d003 2140 DATA ee8f304ce528ad9e6020c729ce 2150 DATA 6529a000b99f60999e60c8cc65 2160 DATA 29d0f460a2009d9e60ee652960 2170 DATA a00091cbe6cbd002e6cc60ad8c 2180 DATA 308d8e30ad8d308d8f30209029 2190 DATA ee8c30d003ee8d3060209e29a0 2200 DATA 00a5cb91cda5cc91cf60ad8e30 2210 DATA 18699c85cdad8f30693085cead 2220 DATA 8e3018699d85cfad8f30694885 2230 DATA d0a000b1cd85d1b1cf85d2608d 2240 DATA 9830a2008e993020ec29ad7f30 2250 DATA 8dd929a900d001602e9a302e9b 2260 DATA 3020092aced9294cd829ad9830 2270 DATA 8d9a30ad99308d9b30a91038ed 2280 DATA 7f30a82e9a302e9b3088d0f760 2290 DATA 2e152ace102aa908f00160a900 2300 DATA 201f2aa9088d102a6048a220a9 2310 DATA 0b9d4203a9009d48039d490368 2320 DATA 20662bee8a30d003ee8b3060a9 2330 DATA 008d96308d9730ad80308d8330 2340 DATA a900d00b20742a8d8630a9088d 2350 DATA 4b2a2e86302e96302e9730ce4b 2360 DATA 2ace8330f0034c4a2aad9630ae 2370 DATA 973060a210a9079d4203a9009d 2380 DATA 48039d49032056e4ee8830d003 2390 DATA ee893020692bc088f00160ad87 2400 DATA 3009808d8730a9006008a90220 2410 DATA 502da2032808b017bd382e9da7 2420 DATA bcca10f7a20fbd802f9d602fca 2430 DATA 10f74cd82abd3c2e9da7bcca10 2440 DATA f7a20fbd702f9d602fca10f720 2450 DATA ff2c20fdf288d0fa48a200a99b 2460 DATA dd602ff005e8e00fd0f668c91b 2470 DATA d020a90220af2da20f28b00bbd 2480 DATA 602f9d802fca10f73860bd602f 2490 DATA 9d702fca10f73860c97ed00aca 2500 DATA 30bfa99b9d602fd0b5c99bd008 2510 DATA a90220af2d4c392be00ff0a89d 2520 DATA 602fe8d0e3a20f28b00bbd602f 2530 DATA 9d802fca10f71860bd602f9d70 2540 DATA 2fca10f718609d4a03a9039d42 2550 DATA 03a9609d4403a92f9d45032056 2560 DATA e4c080b00160c088d001608c92 2570 DATA 30a9008d9330a90420af2da903 2580 DATA 20502da20fbd192e9d96bca900 2590 DATA 9dbebcca10f2a085a94085d3a9 2600 DATA bc85d4204b2820fdf288d0faa9 2610 DATA 0320af2d20b32b4c1624a21020 2620 DATA e82ca2204ce82c20b32ba90020 2630 DATA af2da2ff9a6c0a00a9008d8730 2640 DATA a2019d88309d8a309d8c30ca10 2650 DATA f4a9088d102aa9008d4b2a8d65 2660 DATA 29a91e85cba96285cc60a9008d 2670 DATA 7c30ac85308c7f30382a88d0fb 2680 DATA 1869018d7b309003ee7c30ad7b 2690 DATA 301869018d7d30ad7c3069008d 2700 DATA 7e30ad7d301869018d7930ad7e 2710 DATA 3069008d7a30ad79301869018d 2720 DATA 7730ad7a3069008d7830a9008d 2730 DATA 75308d7630ac84308c8030382e 2740 DATA 75302e763088d0f6ad753038ed 2750 DATA 77308d7530ad7630ed78308d76 2760 DATA 3060a9008d7c30ac84308c8030 2770 DATA 382a88d0fb1869018d7b309003 2780 DATA ee7c30ad7b301869018d7d30ad 2790 DATA 7c3069008d7e30ad7d30186901 2800 DATA 8d7930ad7e3069008d7a30ad79 2810 DATA 301869018d7730ad7a3069008d 2820 DATA 7830a9008d75308d7630ac8530 2830 DATA 8c7f30382e75302e763088d0f6 2840 DATA ad753038ed77308d7530ad7630 2850 DATA ed78308d763060a90c9d42034c 2860 DATA 56e40a08c9c0b006e93fb00269 2870 DATA c0286a60a200bd602fc99bf00b 2880 DATA 20f02c9decbce8e00fd0eea980 2890 DATA 9decbca900e00fd00160e89dec 2900 DATA bc4c1a2da013b9a2bc297f99a2 2910 DATA bc8810f5ae7230bd4a2da8b9a2 2920 DATA bc098099a2bcc898dd4d2dd0f1 2930 DATA 6000070e080f140aaabd5e2e8d 2940 DATA 7430bd5f2e8d7330bd542e85cd 2950 DATA bd552e85cebd4a2e85cf85d1bd 2960 DATA 4b2e85d085d2bd402e85d3bd41 2970 DATA 2e85d4a200a000b1cf91cdc8cc 2980 DATA 7430d0f620e92de8ec7330d0eb 2990 DATA a200a000b1d391d1c8cc7430d0 3000 DATA f620012ee8ec7330d0eb600aaa 3010 DATA bd5e2e8d7430bd5f2e8d7330bd 3020 DATA 542e85cdbd552e85cebd4a2e85 3030 DATA cfbd4b2e85d0a200a000b1cd91 3040 DATA cfc8cc7430d0f620e92de8ec73 3050 DATA 30d0eb60a5cf18692885cf9002 3060 DATA e6d0a5cd186d743085cd9002e6 3070 DATA ce60a5d118692885d19002e6d2 3080 DATA a5d3186d743085d39002e6d460 3090 DATA 00000000290f2f006572726f72 3100 DATA 0000002e616d6500746f006172 3110 DATA 6368697665ecefe1e4f3e1f6e5 3120 DATA 682ec02ed42ed42e202f51bccb 3130 DATA bc9abc6dbc81bc902fe92fe92f 3140 DATA e92f353016040504130413040f 3150 DATA 04495555555555555555555555 3160 DATA 5555555555555555554fd9002c 3170 DATA 3a370061726368006279002d34 3180 DATA 280719130059d900256e636f64 3190 DATA 65002465636f64650031756974 3200 DATA 00594bd5d5d5d5d5d5d5d5d5d5 3210 DATA d5d5d5d5d5d5d5d5d5d54c4955 3220 DATA 55554fd9e2e9f459d900000059 3230 DATA 4bd5d5d54c4955555555555555 3240 DATA 555555555555555555554fd900 3250 DATA 33701a26696c656e616d650e25 3260 DATA 78740059d9000b2f5b2f00594b 3270 DATA d5d5d5d5d5d5d5d5d5d5d5d5d5 3280 DATA d5d5d5d54c4955555555555555 3290 DATA 5555555555554fd980e9ee80f0 3300 DATA f2efe7f2e5f3f38059d9808080 3310 DATA 808080df808080808080594bd5 3320 DATA d5d5d5d5d5d5d5d5d5d5d5d54c 3330 DATA e002e1020024 MATHNOID'93
|