[#1] IFFChunkTool
Tytułowy program to moja kontrybucja do konkursu Amiga 40 Tools Jam 2025. Pierwsza, ale być może nie jedyna. Program powstał z potrzeby i jest małą pchełką. Mam nieco bardziej ambitny projekt na ten konkurs, ale nie wiem, czy się z nim wyrobię. A ponieważ zgodnie z zasadami konkursu można zgłosić więcej niż jedną pracę, asekuracyjnie zglaszam na razie IFFChunkTool.

Do czego to w ogóle służy? Z plikami IFF zetknął się pewnie każdy amigowiec, z tym, że części z nas mogą się kojarzyć wyłącznie z obrazkami. IFF natomiast to kontener, czyli sposób uporządkowanego przechowywania danych, w blokach zwanych chunkami. IFF może przechowywać zarówno obrazki (IFF ILBM), dźwięki (IFF 8SVX, AIFF), grafikę wektorową (IFF DR2D), teksty (IFF FTXT) i wiele innych. Na przykład pliki zawierające tłumaczenia tekstów do programów (potocznie zwane "lokalami") to również pliki IFF.

IFFChunkTool służy do manipulowania plikami IFF. Jest to polecenie AmigaDOS, czyli operujemy nim z okna poleceń CLI. Pisałem go z myślą do zautomatyzowanego użycia w różnego rodzaju skryptach, ale można też operować ręcznie, chociaż do tego są ZTCP narzędzia z GUI.

Co to potrafi, czy raczej ma potrafić, bo dostępna wersja 0.1 ograniczona jest do dwóch pierwszych z poniższych opcji:
  • Wylistowanie wszystkich chunków w pliku wraz z ich długościami.
  • Zapisanie zawartości wybranego chunka do pliku.
  • Wylistowanie zawartości chunka (tzw. hexdump) w wybranym formacie.
  • Wstawienie chunka w wybranym miejscu, przy czym dane mogą być wczytane z pliku, albo podane bezpośrednio jako argument (krótkie chunki zawierające tekst).
  • Dopisanie chunka na końcu pliku, z danymi jak wyżej.
  • Zastąpienie zawartości chunka nową, z pliku lub z argumentu.
  • Usunięcie chunka z pliku.

Być może jeszcze zdążę dorobić działanie na wielu plikach, plik źródłowy będzie mógł być wzorcem AmigaDOS. Na przykład "obrazki/#?.ilbm".

Program oczywiście będzie darmowy, z otwartymi źródłami na GitHubie. Domyślam się, że IFFChunkTool będzie miał raczej wąski krąg odbiorców, no ale mi się na pewno przyda.
14
[#2] Re: IFFChunkTool

@Krashan, post #1

Super. Brilliance zapisuje sporo ustawień chyba właśnie w osobnym chunku. Czyli będę w stanie go wyodrębnić i zamienić/dodać hurtowo w innych plikach?
1
[#3] Re: IFFChunkTool

@ppill, post #2

Dokładnie tak. Jeżeli zaimplementuję wszystko co planuję, to tak to będzie wyglądać. Przykładowo, masowa zmiana palety w wielu obrazkach na paletę z obrazka wzorcowego:
IFFChunkTool obrazek_z_nowa_paleta.ilbm EXTRACT CMAP DATAFILE paleta.bin
IFFChunkTool ObrazkiDoGry/#?.ilbm REPLACE CMAP DATAFILE paleta.bin
Można jeszcze np. dodać autora obrazków:
IFFChunkTool ObrazkiDoGry/#?.ilbm INSERT AUTH "Gall Anonim"


Ostatnia aktualizacja: 30.05.2025 13:24:42 przez Krashan
2
[#4] Re: IFFChunkTool

@Krashan, post #1

Brawo. Ja lubię format IFF. Miałem kiedyś pomysł, żeby napisać program, który łączy pliki FORM w listy LIST ze wspólnymi chunkami PROP oraz konkatenacje CAT, na potrzeby moich projektów gier.

Na przykład pliki zawierające tłumaczenia tekstów do programów (potocznie zwane "lokalami") to również pliki IFF.

Format IFF jest w Amiga OS używany praktycznie wszędzie. Również pliki preferencji to pliki IFF. Wszystkie pliki zapisywane przez Datatypes też są w formacie IFF. Wszystkie pliki schowka clipboard to też pliki IFF.

O localach to akurat nie wiedziałem.

Ostatnia aktualizacja: 30.05.2025 13:31:58 przez Hexmage960
2
[#5] Re: IFFChunkTool

@Hexmage960, post #4

Miałem kiedyś pomysł, żeby napisać program, który łączy pliki FORM w listy LIST ze wspólnymi chunkami PROP
Taki program napisałem już wcześniej, nazywa się IFFListMaker. Zastosowałem go do budowania pliku z poziomami do gry Untangle. Ten plik jest właśnie typu IFF LIST.
3
[#6] Re: IFFChunkTool

@Krashan, post #5

O, bardzo interesująca informacja. Pobrałem Twój program IFFListMaker, może być przydatny.

Akurat ja rozważałem albo polecenie CLI, bądź program z GUI gadtools, gdzie w ListView można by wyświetlać listę (drzewko) chunków.

Interfejs CLI wygląda bardzo fajnie, i może być używany w skryptach.
1
[#7] Re: IFFChunkTool

@Krashan, post #1

A tak przy okazji, na razie z czterech zgłoszonych prac, trzy są z Polski. Nasi górą! szeroki uśmiech
3
[#8] Re: IFFChunkTool

@Krashan, post #1

Ty to zawsze masz fajne pomysły. A gdy jeszcze bierzesz się za ich realizację to już jest rewelacja. OK

Gdy się przeczyta Twój opis to aż się człowiek zastanawia dlaczego coś takiego nie powstało wieki temu jako część dokumentacji IFFa. Przecież to byłaby idealna działająca "ilustracja" specyfikacji formatu, który jest całkiem fajnie zorganizowany i w swoich czasach był całkiem nowatorski. Gdy sobie porównuję IFF z różnymi formatami "z epoki" to one przy IFFie często wyglądają jakby je Mieszko I, a najwiżej Bolesław Chrobry tworzył.

Ja już niezbyt często mam styczność z IFF, ale choćby z ciekawości na pewno się pobawię programem rozbebeszając różne wersje IFFa.

O różnych IFFach zawsze się wiedziało, ale przyznam się, że o IFF FTXT nie wiedziałem. Ciekawe czy dałoby się w to wepchnąć teksty UTF-8, UTF-16.
3
[#9] Re: IFFChunkTool

@MDW, post #8

o IFF FTXT nie wiedziałem. Ciekawe czy dałoby się w to wepchnąć teksty UTF-8
Dałoby się i gdy pracujesz pod MorphOS-em, to tego używasz. Otóż IFF FTXT to format w jakim tekst przechowuje clipboard.device. W momencie gdy kopiujesz tekst między dwoma różnymi programami, w CLIPS: zapisywany jest IFF FTXT. W MorphOS-ie programy, które pracują w Unikodzie, zapisują dwa chunki. Standardowy chunk CHRS zawiera tekst w "lokalnej stronie kodowej" (zgodny z klasycznym AmigaOS), a po nim następuje chunk UTF8. W ten sposób zachowano wsteczną kompatybilność. Jeżeli program, do którego wklejasz obsługuje unikod, odczytuje chunk UTF8. Jeżeli to jakaś staroć z klasyka, czyta standardowo chunk CHRS, w którym znaki spoza lokalnej strony kodowej program zapisujący clipa zamienił na znaki zapytania. W drugą stronę, gdy kopiujesz tekst w czymś staroamigowym, a wklejasz np. do FlowStudio, to ten ostatni zauważa brak chunka UTF8, czyta CHRS, konwertuje to (przykładowo) ISO-2 na unikod i wkleja gdzie pan użytkownik kazał.

Inna ciekawostka, DigiBooster Pro 2 i DigiBooster 3 używają "prawie IFF-a", niestety nie wiem czemu autorzy dwójki zmienili nagłówek ze standardowego IFF na "swój", a ja już nie chciałem robić trzody i wprowadzać kolejnego formatu, niemalże identycznego z DBM.

Ostatnia aktualizacja: 30.05.2025 17:06:07 przez Krashan
2
[#10] Re: IFFChunkTool

@Krashan, post #1

O super, co ja się swego czasu namęczyłem z parsowaniem systemowych preferencji, które oczywiście są również w formacie IFF. Twój IFFChunkTool byłby wtedy bardzo pomocny.
I na pewno będzie przeze mnie używany OK
2
[#11] Re: IFFChunkTool

@Krashan, post #9

Ooo, fajnie to jest zorganizowane! Czasem aż przykro się robi, gdy w czasach tych multiplatformowych pseudo-standardów, zapominamy o takich fajnych amigowych rozwiązaniach.

Ciekawostka z DigiBooster 2 też dobra. Zastąpienie nagłówka w formacie DB2 było bardzo dziwne i trochę bez sensu. No ale skoro autorzy dwójki tak skwasili to faktycznie nie bardzo miałeś wybór pisząc DigiBoostera 3. Powrót do czystego IFF-a z punktu widzenia użytkownika rzeczywiście byłby problemem.
1
[#12] Re: IFFChunkTool

@Krashan, post #9

Poczytałem o budowie formatu i jest super, szczególnie że można trzymać różne dane w jednym pliku. Czy istnieje systemowa biblioteka do "parsowania" pliku która ma funkcje typu sprawdz rodzaj chunka, daj mi kolejny lub n-ty chunk.
[#13] Re: IFFChunkTool

@Sventevith, post #12

Czy istnieje systemowa biblioteka do "parsowania" pliku która ma funkcje typu sprawdz rodzaj chunka, daj mi kolejny lub n-ty chunk.
Oczywiście, że istnieje, nazywa się iffparse.library i wchodzi w skład AmigaOS chyba od wersji 2.1. IFFChunkTool również z niej korzysta.
1
[#14] Re: IFFChunkTool

@Krashan, post #13

Faktycznie lata temu coś takiego widziałem i się zastanawiałem po co to jest :) Ale ja wtedy tylko podstawy AMOSA znałem i niewiele o programowaniu systemowym wiedziałem.

Ostatnia aktualizacja: 31.05.2025 00:40:18 przez Sventevith
[#15] Re: IFFChunkTool

@Krashan, post #1

Pocisnąłem trochę z kodowaniem, czemu dałem wyraz w devlogu na itch.io. Tym, którym się nie chce czytać w języku obcym, względnie użyć translatora, streszczam, że dorobiłem działający tryb DUMP (hexdump zawartości wybranego chunka). Do tego poprzerabiałem kod w taki sposób, żeby uniknąć kilku kopii prawie tego samego w paru miejscach. Gdyż, jak wiadomo, mam hopla na punkcie rozmiaru pliku wykonywalnego. Ciekawe, czy z wszystkim zaplanowanym zmieszcze się w czterech cyfrach (czyli nie więcej niż 9999 bajtów). Na razie jest niecała połowa.

3
[#16] Re: IFFChunkTool

@Krashan, post #15

Spoko ze ci sie chce OK

Ostatnia aktualizacja: 09.07.2025 23:15:46 przez HOŁDYS
1
[#17] Re: IFFChunkTool

@Krashan, post #15

Jest wersja 0.2. To bardzo ważna wersja, bo działają wszystkie zaplanowane tryby pracy i program jest stabilny, przynajmniej w typowych sytuacjach (cięższe testy w planach, zapraszam do przyłączenia się). Oczywiście parę drobiazgów jeszcze brakuje, dlatego nie 1.0. Jest też instrukcja w AmigaGuide, dość ważny detal. Na razie tylko po angielsku niestety, ale od czegoś trzeba zacząć.
2
[#18] Re: IFFChunkTool

@HOŁDYS, post #16

Sto piętnaście funtów piechotą nie chodzi.

Żartuję. Wątpię, żeby program bez GUI, o tak wąskim zastosowaniu zebrał jakieś głosy. Po prostu mam zabawę i ćwiczę C++.

Ostatnia aktualizacja: 15.07.2025 21:31:17 przez Krashan
3
[#19] Re: IFFChunkTool

@Krashan, post #17

Dobrze idzie to jeszcze zrobiłem dwie rzeczy:
  • Jeżeli się podaje nową zawartość chunka jako tekst, to można wstawiać bajty heksadecymalnie, np. "Tekst w\0Adwóch liniach zakończony bajtem zero.\00". W ten sposób można też wprost wstawiać niezbyt długie dane binarne, żeby nie trzeba ich było czytać z oddzielnego pliku.
  • Nie trzeba podawać nazwy pliku wynikowego (w tych trybach, które go produkują). Wtedy zostanie zmodyfikowany plik źródłowy. Może być niebezpieczne przy ręcznej zabawie, ale upraszcza użycie w skryptach.
Nie ma jeszcze release, na razie te nowe rzeczy są tylko w kodzie na GitHubie. Pewnie będzie jutro albo w weekend. Jakby ktoś przypadkiem czekał.
4
[#20] Re: IFFChunkTool

@Krashan, post #19

No i jeszcze dodałem funkcję robienia "pustych" IFF-ów. Bez tego zawsze musieliśmy mieć jakiś plik do modyfikacji, nie można było zbudować IFF-a od zera. Teraz można:
IFFChunkTool <nazwa_pliku> NEW <typ>
A potem można nawrzucać chunków do niego.
3
[#21] Re: IFFChunkTool

@Krashan, post #20

Poszła wersja 1.0. Uważam projekt za sfinalizowany w tym sensie, że program ma wszystko, co zaplanowałem (od razu, albo po drodze) i nie ma znanych błędów. Oczywiście to nie zamyka drogi do kolejnych wersji będących poprawkami błędów, wzbogaconych o nowe locale, albo nowe ficzery, o ile pojawią się jakieś pomysły. Niemniej póki co IFFChunkTool wychodzi z okresu intensywnego rozwoju. Wersja 1.0 jest na itch.io, na GitHubie, a wieczorem pewnie wrzucę ją również na Aminet.

Rzecz jasna, po 11 października, gdy zostanie zakończone zbieranie zgłoszeń do Amiga 40 Tools Jam 2025 zapraszam do głosowania na mój projekt. Ale to być może nie jest jedyny mój projekt na ten konkurs... szeroki uśmiech Czas pokaże.
3
[#22] Re: IFFChunkTool

@Krashan, post #21

Czy jest sposób żeby wyświetlić chunki, jeśli w pliku jest kilka o takiej samej nazwie?

Przykład:
ENV:sys/fonts.prefs



Są 3 chunki FONTS, można podziałać z pierwszym, ale jak się dobrać do drugiego i trzeciego?
[#23] Re: IFFChunkTool

@vojo, post #22

Nie wiedziałem, że tak można, kilka takich samych bez wpakowania ich do LIST. Muszę w takim razie przemyśleć jak najsensowniej to rozwiązać z punktu widzenia argumentów. Trochę trzeba będzie nad logiką programu popracować, bo np. REMOVE usunie wszystkie trzy, podobnie jak REPLACE podmieni zawartość wszystkich...

Ostatnia aktualizacja: 19.07.2025 21:18:42 przez Krashan
[#24] Re: IFFChunkTool

@Krashan, post #23

Prefsy do WBPattern też mają kilka chunkow o tej samej nazwie.
[#25] Re: IFFChunkTool

@Krashan, post #23

Moze numerowanie hunkow np. FONT.1 czy FONT.2 byloby rozwiazaniem?
1
[#26] Re: IFFChunkTool

@docent, post #25

Tak, wczoraj to zacząłem już wdrażać. Za kilka dni pewnie będzie wersja 1.1.
2
[#27] Re: IFFChunkTool

@Krashan, post #26

Powtarzające się chunki to tzw. kolekcje, ale podejrzewam, że kolega o tym wie i używa iffparse.library do skanowania plików IFF.

Ciekawym rozwiązaniem byłby też tryb interaktywny programu, jak DIR, bądź LHA, który przed każdym wystąpieniem chunku pytałby się co z nim zrobić.

Albo nawet lepiej, gdyby wyświetlał najpierw podsumowanie informacji o kolekcjach i dopiero wtedy umożliwił podjęcie decyzji.

Ostatnia aktualizacja: 20.07.2025 16:35:54 przez Hexmage960
[#28] Re: IFFChunkTool

@Hexmage960, post #27

Powtarzające się chunki to tzw. kolekcje
Kolekcje powinny być umieszczone w strukturach 'LIST' albo 'CAT '. Na przykład zbiór poziomów do mojej gry Untangle jest plikiem IFF typu LIST. Powtórzenie chunka o tym samym ID w pliku 'FORM' nie jest kolekcją.
Ciekawym rozwiązaniem byłby też tryb interaktywny programu, jak DIR, bądź LHA, który przed każdym wystąpieniem chunku pytałby się co z nim zrobić.
Być może, ale to temat na inny program. I taki program istnieje, jest to IFFMaster16. To spory kombajn napisany pod MUI, też go można użyć do automatyzacji poprzez port ARexxa, ale przeciętnie się nadaje do używania w skryptach, czy makefiles.
[#29] Re: IFFChunkTool

@Krashan, post #28

Kolekcje powinny być umieszczone w strukturach 'LIST' albo 'CAT '. Na przykład zbiór poziomów do mojej gry Untangle jest plikiem IFF typu LIST. Powtórzenie chunka o tym samym ID w pliku 'FORM' nie jest kolekcją.

Mi wydaje się, że jednak kolekcje występują też w plikach FORM.

Poczytałem dokumentację (RKRM), żeby sprawdzić i znalazłem m.in. informację o chunku ILBM CRNG, który może występować wielokrotnie i następne instancje nie nadpisują poprzednich. Jest to wspomniane w dokumentacji do funkcji działających na kolekcjach.

P.S. Unikalną własnością LIST jest z tego co wiem przede wszystkim chunk PROP, który pozwala zdefiniować wspólne cechy FORM w liście.

Ostatnia aktualizacja: 20.07.2025 17:13:32 przez Hexmage960
[#30] Re: IFFChunkTool

@vojo, post #24

I zrobione. We wszystkich trybach, w których to ma znaczenie (czyli wszystkich oprócz APPEND i INSERT bez AFTER) są obsługiwane numery chunków o tych samych ID. Użycie ID bez numeru domyślnie oznacza numer 0, czyli pierwszy chunk o danym ID. Tak to działa w praktyce:



Release wersji 1.1 pewnie do końca tygodnia.
2
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem