Kuba Husak na Atarionline.pl (i nie tylko tam) intensywnie przekonywał do Action! Pomyślałem więc, że skoro taki atarowy guru z jego znajomością asm namawia do języka wysokiego poziomu, musi coś w tym być.
Pobrałem obraz cartridge’a stąd i okazało się, że w Altirze wystarczy zdefiniować w opcji System – > Host device (H:) katalog dla dysku (w Atari800 F1 -> Emulator Configuration -> H1) i można otwierać i zapisywać pliki przez Ctrl + Shift + r (w).
Problemem pozostawała kwestia równoległej edycji na PC-cie, a dokładniej konwersji znaków końca linii. Pod Linuksem nie ma problemu, można załatwić sprawę jednolinijkowcem w awku lub sedzie, ale to nie zadziała pod Windows bez Cygwina, a tego nie lubię… Napisałem prosty skrypt w Pythonie:
import sys if len(sys.argv) != 3: print("Usage: %s %s") % (sys.argv[0], "--2unix||--2atascii <filename.act>") exit(0) def overwrite(): f = open(sys.argv[2], 'wb') f.writelines(lines) f.close() f = open(sys.argv[2], 'rb') lines = f.readlines() f.close() if sys.argv[1] == '--2unix': lines = [line.replace(b'\x9b', b'\n') for line in lines] overwrite() if sys.argv[1] == '--2atascii': lines = [line.replace(b'\n', b'\x9b') for line in lines] overwrite()
Działa też w Pythonie3, a przy okazji dowiedziałem się czegoś nowego: Python3 wymusza kodowanie plików tekstowych i na siłę próbuje konwertować do utf-8. Jeśli tekst zawiera znaki spoza unikodu, albo spoza wszelkich znanych nam kodowań, które moglibyśmy wykryć i podać do funkcji open() (np. ATASCII) trzeba otworzyć plik w trybie binarnym, no i jak widać, we wszystkich funkcjach operujących na napisach używać typu bytes.
Planuje rozbudowę skryptu, tak żeby konwersja na ATASCII zamieniała coś więcej niż tylko znaki końca linii. Był do tego fajny moduł w bibliotece standardowej Pythona…
Update: Tu jest nowy skrypt na podstawie tabeli konwersji od Mono oraz iconv z kodowaniami atarowymi w wersji dla Linuksa i Windows.
Skrypt podmapowałem w vimie pod F2 i F3 w ten sposób:
map <F2> :w!<CR>: !python3 ~/bin/aconv.py –2atascii %<CR><CR>
map <F3> :w!<CR>: !python3 ~/bin/aconv.py –2unix %<CR>:e!<CR><CR>
Pod Windows:
map <F2> :w<CR>:silent !d:\python33\python.exe d:\aconv.py –2atascii %<CR><CR>
map <F3> :w<CR>:silent !d:\python33\python.exe d:\aconv.py –2unix %<CR>:e!<CR><CR>
Dzięki temu F2 zamienia znaki końca linii w aktualnie edytowanym pliku, ale jego wersja „unixowa” pozostaje nadal na ekranie i można sobie dalej ją edytować, natomiast F3 na pliku ATASCII powoduje przeładowanie pliku po zamienieniu znaków końca linii na \n.
Po F2, w Action ładujemy taki plik Shift+Ctrl+r, wskazujemy H1:PLIK.ACT, przechodzimy do monitora za pomocą Shift+Ctrl+M, kompilujemy C, zapisujemy binarkę W „H1:PLIK.BIN”.
Aby taki skompilowany plik binarny nie wymagał obecności cartridge’a, trzeba zaincludować tzw. runtime library. Znalazłem dwie: Jeffa Reistera tutaj i alternatywną i lepiej wg mnie działającą wersję tutaj. Nie wiem jak to się ma do oryginału sprzed lat (Update: tutaj jest też oryginalny runtime, który po kompilacji daje dużo, bo ponad 1KB mniejsza binarkę), ale faktycznie działa. Podoba mi się ten toolchain: pliki edytuję pod linuksem, kompiluję oryginalnym cartridge Action! z emulatora. Szykuje się niezła zabawa, a sądząc po tym wątku na Atarionline, jest szansa na Action! w U1MB.
Konwersję znaków końca lini b. łatwo przeprowadzić w Notepadzie++.
1. Otwierasz plik z kodem actiona.
2. Bierzesz szukaj->zamień
3. Klikasz Rozszerzony w oknie tryb szukania
4. W pierwsze pole wpisujesz znak › który jest reprezentacją atarowskiego EOLa w ASCII
5. W drugim wpisujesz \n
6. Klikasz Zamień wszystko.
Jak chcesz zamienić z powrotem na atarowski znaczek końca linii, to po prostu w pierwsze pole wbijasz \n a w drugie › i jedziesz.
Ale ja vima bardzo lubię i używam od kilkunastu lat gdzie się da :), a podmapowanie skryptu pod klawisze F2/F3 jest wygodniejsze. Poza tym ATASCII to nie tylko znak końca linii. Cały czas mam na końcu TODO list rozbudowanie tego pythonowego skryptu, ale jakoś póki co brak motywacji.