xex2act.bash skrypt konwersji danych do tablicy Action! dla Linux
Zadaniem skryptu jest konwersja danych binarnych na blok liczb szesnastkowych w formacie Action!. Dane muszą być zapisane w jednym bloku programu relokowalnego w standardzie SpartaDOSu X (nagłówek $FFFE). Drugim blokiem jest blok aktualizacji adresów. Jest on niezbędny, jeżeli w pierwszym występują rozkazy procesora w bezwzględnym trybie adresowania z odwołaniami do lokalizacji w tymże bloku. Obsługiwane są pliki zawierające maksymalnie po jednym bloku: relokowalnym i jednym aktualizacji adresów. W innych przypadkach działanie będzie niepoprawne.
Skrypt został napisany w bashu i wykorzystuje specyficzne cechy tej powłoki oraz wymaga standardowych programów z rodzin Uniksa i GNU takich, jak: awk (mawk lub gawk), xxd czy fold, oraz programu chkxex, napisanego przez kolegę TeBe i rozwijanego przez kolegę Mono. Chkxex powinien być skompilowany przy użyciu kompilatora obsługującego dialekt Delphi, np. Free Pascal Compiler z opcją -Mdelphi.
Wywołanie bez parametrów wyświetli informację o sposobie używania. Przyjmowane parametry:
nazwa pliku z opcjonalnym przełącznikiem „–f”,
„-n” – tytuł bloku danych, umieszczany bezpośrednio nad nim (np. deklaracja procedury bądź funkcji lub komentarz),
„-l” – maksymalna długość wiersza, domyślnie 37; może być również określona zmienną środowiskową LINELEN.
Uwaga: przełącznik „-l” ma pierwszeństwo przed zmienną LINELEN, tzn. w przypadku wystąpienia obydwu tych rzeczy pod uwagę będzie brana wartość opcji „-l”.
Dane wyjściowe zapisywane są na standardowe wyjście, co pozwala na zapis do pliki, jak i dalsze przetwarzanie potokowe. Komunikaty błędów wyprowadzane są na standardowe wyjście błędów. Skrypt zwraca status wykonania:
0 – działanie zakończone bez błędów,
3 – wyświetlono sposób użycia,
4 – wskazany plik jest niedostępny, np. nie istnieje,
5 – nieprawidłowy nagłówek bloku,
6 – program chkxex uległ awarii,
7 – natrafiono na nieprawidłowe dane.
Przykłady:
Standardowe użycie:
$ xex2act.bash example.com
[$4C*+16$3D0$F08A$A904$A200$8500$86A0
$60A1$20A9$8D*+65516$3A0$B1C8$990A
*+65505$5C0$F690$AA5$2069$8D*+65506
$BA5$69$8D00*+65501$CED0]
2. Zastosowanie opcjonalnego przełącznika „-f” i deklaracja funkcji:
$ xex2act.bash -f xgetpar.obx -n 'BYTE FUNC Example(CARD int)’
BYTE FUNC Example(CARD int)
[$4C*+16$3D0$F08A$A904$A200$8500$86A0
$60A1$20A9$8D*+65516$3A0$B1C8$990A
*+65505$5C0$F690$AA5$2069$8D*+65506
$BA5$69$8D00*+65501$CED0]
3. Określenie maksymalnej długości linii i poprzedzenie bloku danych komentarzem:
$ xex2act.bash -l 60 xgetpar.obx -n ’;Komentarz’
;Komentarz
[$4C*+16$3D0$F08A$A904$A200$8500$86A0$60A1$20A9$8D*+65516
$3A0$B1C8$990A*+65505$5C0$F690$AA5$2069$8D*+65506$BA5$69
$8D00*+65501$CED0]
4. Jak powyżej, ale określenie maksymalnej linii zmienną środowiskową:
$ LINELEN=25 xex2act.bash -f xgetpar.obx -n ’;Komentarz’
;Komentarz
[$4C*+16$3D0$F08A$A904
$A200$8500$86A0$60A1$20A9
$8D*+65516$3A0$B1C8$990A
*+65505$5C0$F690$AA5$2069
$8D*+65506$BA5$69$8D00
*+65501$CED0]
Biblioteka: