Ready/Run

Takie sobie archiwum listingów ze starych magazynów komputerowych


Catalog
  • Język programu: Locomotive Basic
  • Platforma: Amstrad
  • Kod zamieszczono w Bajtek 12/1987
  • Autor listingu: Sergiusz Wolicki
  • Listing nadesłał: Faust

Stan listingu:

2
Listing skorygowany - zawiera błędy, uruchamia się na emulatorze lub realnej maszynie, jednak z organiczoną funkcjonalnością

Z pewnością często mieliście ochotę zrobić porządek na swoich kasetach z programami i równie często rezygnowaliście z tego mając w perspektywie pracowite spisywanie z ekranu danych uzyskanych przez komendę CAT. Jak dobrze byłoby zwalić te robotę na komputer. Mógłby on wtedy sam przejrzeć kasetę, sprawdzić, czy jakieś zbiory nie powtarzają się, wydrukować spis na drukarce. Niestety, CAT wysyła wyniki tylko na ekran i odzyskanie ich stamtąd wymaga wiele wysiłku. Komendy tej nie można również przerwać programowo a jedynie klawiszem ESC.

 
Równie często ambitniejsi użytkownicy Amstradów i Schneiderów usiłują uzyskać dane o długości programu, miejscu jego ładowania, czy adresie autostartu. Dane te są niezbędne na przykład do przenoszenia programów maszynowych z kasety na dyskietkę. I tutaj komenda CAT nie zdaje się na nic.
Zamieszczony obok listing programu w BASIC-u umożliwia dodanie do systemu nowej komendy RSX o nazwie CATALOG, która rozwiązuje nasze problemy.
Po uruchomieniu programu, jeżeli nie pojawi się na ekranie żaden komunikat o błędzie w linii DATA (spowodowanym błędnym przepisaniem) w obszar pamięci od adresu &A400 zostanie załadowany i zainicjowany program maszynowy komendy CATALOG. Program w BASIC-u można teraz skasować (przez NEW).
Wywołanie komendy ma następującą postać:
I CATALOG, @a$, @a1%, @a2%, @a3%, @4%, @a5%, @a6%, @a7% gdzie zmienne a$, a1%, a2%... a7% muszą mieć uprzednio nadane wartości (w przeciwnym przypadku pojawi się komunikat „Improper argument”). Ich nazwy nie muszą być oczywiście takie jak wyżej. Ważne są jednak typy: pierwsza musi być łańcuchowa — pozostałe całkowite. Symbol „@” oznacza, że do komendy przekazywany jest adres zmiennej, a nie jej wartość. Wartości nadane zmiennym całkowitym przed wywołaniem są obojętne. Natomiast a$ powinien być przypisany łańcuch zawierający dowolne znaki, lecz o długości co najmniej 16. Komenda CATALOG uruchamia silnik magnetofonu i wczytuje nagłówek najbliższego bloku (trzeba więc pamiętać o wciśnięciu klawisza PLAY przed wywołaniem). Dane o bloku kopiowane są do parametrów w następujący sposób: 
 
a$    — zawiera nazwę zbioru, do którego należy blok: jeżeli wartość a$ przed wywołaniem była łańcuchem krótszym niż długość nazwy, to nadmiarowe znaki zostaną obcięte; jeżeli łańcuch był dłuższy niż nazwa, to pozostałe miejsca zostaną zapełnione spacjami a1% — zawiera numer bloku 
a2% — zawiera typ zbioru: 0 — BASIC, 1 — BASIC chroniony (SAVE „nazwa”, P), 2 — program w języku maszynowym, 22 — zbiór ASCII
a3% — adres ładowania bloku; adres ładowania pierwszego bloku w zbiorze jest zarazem adresem ładowania całego zbioru (dla ASCII = 0, dla Basica = 368)
a4% — długość bloku; dla wszystkich bloków z wyjątkiem ostatniego prawie zawsze 2048 = 2 KB 
a5% — długość całego zbioru, do którego należy blok 
a6% — adres autostartu; od tego adresu rozpocznie się wykonywanie programu maszynowego załadowanego komendą RUN „nazwa” 
a7% — znaczniki bloku: a7% zawiera wartość całkowitą dwubąjtową: starszy bajt różny od zera oznacza pierwszy blok zbioru, młodszy bajt różny od zera — ostatni blok; wartość tę najlepiej obserwować jako HEX$ (a7%,4) dwie pierwsze cyfry to starszy bajt, dwie pozostałe — młodszy (cyfry hex)