Dekompresja BOCIANa
CutAs to „przeglądarkowy” edytor plików binarnych kolegi Wojciecha „Bocianu” Bociańskiego. Posród wielu możliwości narzędzia takich jak cięcie i przycinanie pliku, przekształcenia bitowe, podglądy, możliwe jest poddanie danych kompresji lub dekompresji typu RLE.
Poniżej programik pomocniczy do dekompresji pliku przygotowanego edytorem CutAs w języku Action! Dane pobierane są z pliku RLE i dekompresowane w locie. W przykładzie kolory ustawiamy sami, chociaż nic nie stoi na przeszkodzie aby je również umieścić w pliku.
;dekompresor Bocianu RLE, AtariFan 220129
;z pliku na ekran
card X,Y,Z, EK=$58, ICBUFA=$364, ICBUFL=$368
byte COLPF0S=$2C4, COLPF1S=$2C5, COLPF2S=$2C6, COLBAKS=$2C8, ICCMD=$362
Proc KBGET=$F302()
Proc MAIN()
GRAPHICS(31) COLBAKS=$0 COLPF0S=$12 COLPF1S=$C COLPF2S=$E
; pobierz dane z pliku
X=2 CLOSE(X) OPEN(X,”D:BOCIAN.RLE”,4,0) ICCMD=7
;dekompresja z pliku
DO
Y=GETD(X) IF Y=0 THEN EXIT FI
Z=Y RSH 1 + 1
IF Y&1 THEN ICBUFA=EK ICBUFL=Z [$AD X $0A$0A$0A$0A$AA$20$56$E4]
ELSE Y=GETD(X) IF Y THEN SETBLOCK(EK,Z,Y) FI FI
EK==+Z
OD
CLOSE(X)
KBGET() GRAPHICS(0)
Return
Jeśli nie chcemy pobierać danych z pliku zewnętrznego to możemy bezpośrednio z pamięci. Dla przykładu dane ze skompresowanego pliku można umieścić w tablicy, np. programem BINTOACT. Teraz modyfikujemy nieco procedurkę dekompresji i pobieramy dane z utworzonej tablicy.
card EK=$58
byte Y=$CA,Z=$CB,COLPF0S=$2C4,COLPF1S=$2C5,COLPF2S=$2C6,COLBAKS=$2C8
Proc KBGET=$F302()
Proc RLE2()
GRAPHICS(31) COLBAKS=$0 COLPF0S=$12 COLPF1S=$C COLPF2S=$E
;dekompresja z tablicy BOCIAN
DO
Y=P(BOCIAN) BOCIAN==+1 IF Y=0 THEN EXIT FI
Z=Y RSH 1 + 1
IF Y&1 THEN MOVEBLOCK(EK,BOCIAN,Z) BOCIAN==+Z
ELSE Y=P(BOCIAN) BOCIAN==+1 IF Y THEN SETBLOCK(EK,Z,Y) FI FI
EK==+Z
OD
KBGET() GRAPHICS(0)
Return
Biblioteka: