Ready/Run
Takie sobie archiwum listingów ze starych magazynów komputerowych
-
Katalog Dyskowy
W ostatnim numerze z 1987 roku przedstawiliśmy Wam program umożliwiający korzystanie ze spisu zawartości kasety magnetofonowej wewnątrz programu w BASIC-u. Teraz kolei na dyskietkę.
Zamieszczony poniżej listing należy uważnie wpisać do komputera i na wszelki wypadek zapamiętać na dyskietce. Rozkazem RUN uruchamiany program i odczekujemy kilkanaście sekund, aż pojawi się znany dobrze komunikat „Ready”. Jeśli otrzymamy wcześniej komunikat "Błąd w DATA!!!", to znaczy, że popełniliśmy błąd przy przepisywaniu i daną linię należy poprawić. Komunikaty Basica (np. "Syntax error" ) mogą również świadczyć o błędzie przy kopiowaniu listingu.
Dodatkową pomocą przy przepisywaniu są sumy kontrolne umieszczone w nawiasach kwadratowych na prawo od każdej linii programu. Jeżeli przed rozpoczęciem wpisywania uruchomiliśmy program „Weryfikator” z nr 1/1988, to po każdym naciśnięciu ENTER ukaże się liczba, która musi być równa sumie kontrolnej. Nierówność oznacza pomyłkę w ostatnio wprowadzonej linii.
Po pojawieniu się komunikatu „Ready” możemy skasować program komendą NEW, gdyż spełnił on swoje zadanie: procedura w języku maszynowym została załadowana do pamięci począwszy od adresu &9D00. Ponieważ ładowanie programu do pamięci z linii DATA trwa aż 15 sekund, to opłaca się zapamiętać teraz fragment pamięci rozkazem:
SAVE "DCAT.BIN",b,&9D00,&410 aby ładować go potem trzema rozkazami:
MEMORY &9CFF:LOAD "DCAT.BIN", &9D00:CALL &9D00
zamiast za każdym razem od nowa uruchamiać program w Basicu.
Procedura dodaje do Basica dwie nowe komendy RSX: |DCAT i |INFO.
Rozkaz DCAT służy do wpisania katalogu dyskietki dc tablicy stringów. Jego wywołanie wygląda następująco:
|DCAT,@a$(0),dr
Parametr dr jest wyrażeniem całkowitym dającym wartość 0 lub 1 i oznacza stację dysków, na której przeglądany ma być katalog (0 = A, 1 = B). Opuszczenie parametru dr powoduje wybranie stacji domyślnej (ustawionej przez :A,:B lub :DRIVE).
Tablica stringowa a$ (można oczywiście użyć innej nazwy) musi posiadać co najmniej tyle elementów (stringów) o długości większej od 17 ile jest zbiorów na dyskietce. Jeśli będzie ich mniej to komputer wypisze komunikat „Table too small”. Zawartość stringów jest przy tym nieistotna. Komenda zamieni miejscami elementy tablicy tak, aby właściwe elementy znalazły się na początku i wpisze do nich nazwy zbiorów z dyskietki w następującym formacie
"00:NAZWA_»TYP*#z"
- 00 — numer użytkownika (USER); może przyjmować wartości od 00 do 15
- NAZWA — ośmioznakowa nazwa pliku (ewentualnie dopełniona spacjami) np, CIOCPM3
- TYP — trzyznakowe rozszerzenie nazwy (ew. dopełnione spacjami: np. EMS, BAS, BIN, COM)
- * — oznacza plik zabezpieczony przed zapisem (R/O); spacja zamiast gwiazdki oznacza zwykły plik
- # — oznacza plik systemowy (nie pokazywany przez CAT i DIR — nasza komenda pokazuje takie pliki); dla plików zwykłych w tym miejscu jest spacja
- z — jest pojedynczym znakiem, którego kod mówi o wielkości pliku tzn. jeśli ASC(z) = 15to plik zajmuje 15 kB;
Stringi zawierające nazwy zbiorów są przez DCAT sortowane alfabetycznie (tak jak przez CAT), przy czym brany jest pod uwagę również numer użytkownika, to znaczy string „00:ZZZZ...” jest przed stringiem „01 :AAAA...”. Ponieważ znak z (wielkości pliku) ma najczęściej kod mniejszy od 32, czyli jest znakiem sterującym, to nie należy wyświetlać elementów tablicy w całości, lecz następująco:
PRINT (LEFT$(a$(i),17),ASC(MID$ (a$(i),18,1))
Otrzymany w ten sposób napis od 00 do # i obok wielkość pliku w kilobajtach, „i” jest numerem elementu tablicy.
Jeżeli string, do którego wpisano informację o zbiorze ma długość większą od 18, to znaki od 19 do ostatniego pozostają niezmienione.
Ze względu na specyfikę obsługi stringów w Amstradzie nie wolno w programie inicjalizować tablicy przez przypisanie pojedynczego stringu np a$(i) = „01234567890123456789”. Należy posłużyć się przypisaniem dowolnego wyrażenia stringowego np.
a$(i)=„0” +„1234567890123456789” lub krócej: a$(i) = SPACE$(18)
Jeżeli tę samą tablicę używamy do wczytania katalogu z kilku dyskietek, to należy ją za każdym razem inicjalizować, by móc stwierdzić, ile zbiorów jest na kolejnej dyskietce (jeśli będzie mniej, to w nie zainicjalizowanej tablicy pozostaną stringi z informacją o zbiorach poprzedniego katalogu).
Drugą komendą, którą daje nam program jest INFO. Wywołuje się ją następująco: |INFO,@nazwa$,@a% ,@b% ,@c%, @d%,@e%
nazwa$ — jest zmienną stringowa zawierającą nazwę zbioru, o którym informację chcemy uzyskać; nazwa nie może zawierać oznaczenia stacji („a:”) ani numeru użytkownika („0:”); wszystkie spacje są ignorowane; użytkownicy CPC 664 i 6128 mogą zamiast @nazwa$ podać nazwał lub bezpośrednio string a%,b%,c%,d%,e% są zmiennymi całkowitymi o dowolnej, ale określonej wartości. Po wykonaniu komendy zostaną w nich umieszczone następujące informacje:
- a% — typ zbioru:
- 0 — Basic
- 1 — Basic zabezpieczony (SAVE,p)
- 2 — program w języku maszynowym 22 — zbiór ASCII lub program COM
- b% — adres ładowania programu maszynowego; dla Basica zawsze 368; dla ASCII nieokreślone
- c% — długość zbioru; dla ASCII nieokreślone
- d% — jeżeli wielkość zbioru przekracza 64 kB tutaj umieszczany jest najbardziej znaczący bajt długości zbioru (prawie zawsze 0; dla ASCII nieokreślony)
- e% — adres autostartu dla programów maszynowych uruchamianych komendą RUN; dla Basica — 0; dla ASCII nieokreślone
Nazwy zmiennych mogą być oczywiście różne od tych, podanych w przykładzie.
Zbiór szukany jest zawsze na domyślnej stacji dysków i domyślnym obszarze użytkownika (które można ustawić komendami :A, :B, :DRIVE i :USER). Jeżeli nie zostanie znaleziony, to komputer wypisze: „File not found”, lecz nie przerwie programu.
Przedstawiony w numerze 12/1987 katalog kasetowy można załadować do pamięci razem z katalogiem dyskowym, co umożliwia na przykład pisanie programów automatycznego kopiowania dyskietek na kasety i odwrotnie. Najpierw należy załadować poprzedni program a dopiero potem przedstawiony powyżej..
Autor listingu: Sergiusz Wolicki
Listing nadesłał: Faust
Język programu: Basic
Stan listingu:
4Listing gotowy - uruchamia się na emulatorze lub realnej maszynie zgodny z listingiem zamieszczonym w periodyku
Ten numer został zreduksowany - "Bajtek Redux 5/1988"
- „Na początku była liczba” Jan Rurański
- „Zostań Nieśmiertelnym!” Tomasz Wiśniewsk, Wojciech Zientara
- „Kasowanie Linii” Marcin Bochenek
- „Klany i Plany”
- „Gazetowy Konkurs "BAJTKA"”
- „Piętno Osobowości” Franciszek Penczek
- „Edytory tesktowe” Marcin Przasnyski
- „Programy graficzne” (mp)
- „CEBIT'88 - Wycieczka w przyszłość” Grzegorz Onichimowski, Roman Poznański
- „Rewolucja przy Fleet Street” Wojciech Markiewicz
