Gdzieś tam jest i czai się Error 61, to tylko kwestia czasu kiedy zaatakuje :).
Postanowiłem sprawdzić, czy podzielenie programu w Action na mniejsze kawałki to duży problem. Okazuje się, że nie.
Ale najpierw dwa słowa o listowaniu tablicy symboli Action! Jest sobie program Symbol Table Lister. Kilka razy do niego już podchodziłem bez pozytywnych rezultatów, ale ostatecznie udało się. Wygląda na to, że instrukcja w powyższym linku jest błędna.
W pierwszym kroku, zmieniłem linię:
Close(5) Open(5, „P:”, 8) na
Close(5) Open(5, „H1:LISTING.TXT”, 8)
Dzięki temu wynik działania listera zapisany zostanie do pliku.
Następnie trzeba było:
- załadować interesujący nas program do edytora
- w Monitorze, Ctrl+Shift+M uruchomić lister za pomocą R „H1:STL.ACT”
- skompilować interesujący nas program za pomocą C
W pliku LISTING.TXT zapisywany jest ładnie sformatowany listing z adresami funkcji, procedur i zmiennych programu z edytora.
Teraz prosty test. W pliku LIB.ACT, mamy dwie proste funkcje:
MODULE ; LIB.ACT set 14=$8000 set $491=$8000 proc test1() byte bkg=710 bkg=0 return proc test2() byte bkg=710 bkg=52 return
Za pomocą
set 14=$8000
set $491=$8000
ustawiamy aby kod umieszczony został pod adresem $8000.
Główny program wrzucamy dalej, od $8013:
include "H1:INCL.ACT" set 14=$8013 set $491=$8013 proc delay() int i for i=0 to 10000 do od return proc main() do test1() delay() test2() delay() od
Plik INCL.ACT definiujący adresy procedur:
proc test1=$8000() proc test2=$8009()
Po kompilacji MAIN.ACT i LIB.ACT „linkujemy” powstałe pliki binarne za pomocą cat lub type pod Windows:
type LIB.OBX MAIN.OBX > FINAL.XEX
I otrzymujemy plik wykonywalny.
Przykładowe wyjście z Symbol Table Lister wygląda tak:
Symbol Table for H1:LIB.ACT
Local declarations for test1:
bkg………… $02C6 BYTE
Local declarations for test2:
bkg………… $02C6 BYTE
Global declarations:
test1………. $8000 PROC()
test2………. $8009 PROC()
Code base = $8000, code size = 19
Prawda że przydatne? Przygotowanie w ten sposób nieco okrojonego RUNTIME oddala problem braku miejsca w tablicy symboli. Big Symbol Table jakoś dziwnie działa. Pozostaje sprawdzenie ładowania plików binarnych. Podzielenie dużego programu na mniejsze doczytywane kawałki wydaje się najbardziej sensowne.
Pingback: Action! Jedno RUNTIME wiele modułów. | greblus:~$ cat /dev/random > /dev/null 2>&1