FORTH - część 516 36 INDEX RETURN Spowoduje wyświetlenie nazw ekranów od 16 do 36. Na dyskietce zawierającej język FORTH ekrany z programami źródłowymi zaczynają się od numeru 17, a kończą na 88. Aby przejrzeć zawartość ekranu np. numer 30, piszemy: 30 LIST RETURN Kompilacja danego ekranu nastąpi po użyciu sekwencji: 30 LOAD RETURN 30 - to oczywiście w dalszym ciągu numer ekranu. Uwaga: należy uważać, aby rozpoczynać kompilację od pierwszego ekranu mającego taką samą nazwę, jak następne. Dotyczy to bloku ekranów o tej samej nazwie. Implementację Extended fig-FORTH można oczywiście przenieść z dysku na taśmę. W tym celu wczytujemy FORTHa z dysku, kompilujemy dowolne ekrany słowem LOAD, a następnie tak rozbudowany język zapisujemy na kasecie słowem CSAVE. Należy jednak pamiętać, że ciągle nie będziemy posiadali możliwości zapisu wersji źródłowej na kasetę. Wielu czytelników pyta, gdzie można kupić nieokrojoną wersję języka FORTH na kasecie lub dysku. Mam nadzieję, że uda się doprowadzić do rozpowszechniania w Polsce implementacji Extended Fig-FORTH w sposób legalny. W przypadku zgody producenta tej implementacji, firma AVALON podjęłaby się tego zadania. Byłoby to najlepsze wyjście z sytuacji, przy rosnącym zainteresowaniu tym językiem. Gdy będę wiedział coś więcej na ten temat, poinformuję czytelników "Tajemnic Atari" w jednym z kolejnych odcinków tego cyklu. ODGAŁĘZIENIA WARUNKOWEf IF ... ENDIF Struktura ta wykonuje słowa zawarte między IF a ENDIF tylko wtedy, gdy znacznik logiczny f znajdujący się na szczycie stosu ma wartość prawdy, czyli jest różny od zera. Uwaga: powyższa struktura musi mieć swój początek (IF) oraz koniec (ENDIF) wewnątrz tego samego słowa. Zamiast ENDIF można użyć słowa THEN. Inną, bardziej rozbudowaną odmianą odgałęzienia warunkowego jest ciąg słów: f IF ... ELSE ... ENDIF Także teraz słowa między IF a ELSE będą wykonywane, gdy znacznik logiczny jest równy prawdzie. W przeciwnym wypadku będą wykonywane słowa zawarte między ELSE a ENDIF. WYPROWADZANIE ZNAKÓW65 EMIT RETURN Na ekranie pojawiła się litera o kodzie 65, czyli A. Słowo EMIT umożliwia także wykorzystanie znaków specjalnych sterujących kursorem lub całym ekranem np. 125 EMIT RETURN Spowoduje wyczyszczenie ekranu. Aby wyświetlić dłuższy ciąg znaków musimy poznać mnę słowa. Podczas programowania często zachodzi potrzeba wpisania ciągu znaków wewnątrz kompilowanego słowa. Funkcję tę spełnia następująca para słów: ." oraz " . Najlepiej poznamy ich działanie na przykładzie: : PISZ ." ALA MA KOTA" ; RETURN Sprawdźmy teraz działanie nowo zadeklarowanego słowa. PISZ RETURN Na ekranie pojawił się napis, który został umieszczony między ." a ". Należy pamiętać, aby zawsze zostawiać przynajmniej jedną spację po słowie ." - nie będzie ona wyświetlana, jest jednak niezbędna do oddzielenia tego słowa od tekstu. Powyższa struktura może istnieć tylko wewnątrz zadeklarowanego słowa. Standardowy zestaw słów języka FORTH posiada także słowa ułatwiające formatowanie wydruku. Często używanym słowem tego typu jest CR - przenosi ono kursor do początku następnej linii. Istnieją także dwa słowa zostawiające w odpowiednich miejscach spacje. Są to: SPACE i SPACES. Jak łatwo się domyśleć, pierwsze z nich zostawia jedną spację, natomiast w drugim przypadku ilość spacji jest równa liczbie znajdującej się na szczycie stosu. Przykład: : PISZ2 CR ." ALA" 10 SPACES ." OLA" ; RETURN i wykonujemy: PISZ2 RETURN W języku Atari BASIC istnieje bardzo pożyteczna instrukcja POSITION, nie istnieje niestety jej odpowiednik w języku FORTH. Nie ma jednak z tym żadnych problemów, gdyż, jak wykazałem już nie raz, wszystkie niezbędne słowa może dorobić użytkownik. Piszemy: : X! 85 ! ; RETURN : Y! 84 C! ; RETURN : POS Y! X! ; RETURN Stworzyliśmy nowe słowo o nazwie POS , będące wiernym odpowiednikiem instrukcji POSITON z języka BASIC. Nie zadeklarowaliśmy tego słowa od razu, lecz tworząc najpierw oddzielne słowa X! i Y! . Słowa te można wykorzystać do wpisywania pozycji x i y kursora w sposób niezależny. Przykład: : SUN 125 EMIT 4 10 POS 30 4 DO I X! ." ALA" LOOP ; RETURN Słowo to wykona następujące czynności: 125 EMIT - czyści ekran 4 10 POS - ustawi kursor na pozycji x=4 y=10 Słowa zawarte między DO a LOOP będą przesuwały napis ALA w prawo aż do pozycji x=29 y=10. Uwaga: między .", a ciągiem znaków ALA występują dwie spacje. Jeżeli chcemy zmniejszyć tempo przesuwania należy wykorzystać słowo PAUSE, znane nam z poprzedniego odcinka tego cyklu. Do wyprowadzania ciągu znaków na ekran służy także słowo TYPE. Z jego pomocą można wyświetlić napis znajdujący się w dowolnym miejscu pamięci. Aby tego dokonać, należy wprowadzić na stos adres początku, a następnie liczbę określającą ilość wyświetlanych znaków. Przykład: 7889 15 TYPE RETURN Po wykonaniu tej sekwencji pojawi się nagłówek, który ukazuje się zawsze po wczytaniu języka do komputera. Nastąpi to oczywiście tylko w przypadku gdy posiadamy wersję Extended fig-FORTH, gdyż tylko ta implementacja posiada nagłówek pod adresem 7889. Możemy więc użyć tego zapisu do określenia posiadanej wersji. WPROWADZANIE DANYCH: KLA KEY DUP EMIT SPACE . ; RETURN Po wywołaniu słowa KLA komputer będzie czekał na podanie znaku z klawiatury; gdy to nastąpi, wyświetli podany znak oraz jego kod. FORTH oferuje bardzo ciekawe słowo WORD - pełni ono bardzo ważną funkcję w tym języku. Może być także wykorzystane przez użytkownika do różnych celów. Aby zrozumieć jego działanie posłużmy się przykładem, piszemy: 32 WORD ATARI RETURN Zauważmy, że w słowniku języka FORTH nie istnieje słowo ATARI, a jednak cała sekwencja została przyjęta bez zarzutu, gdyż pojawił się napis OK. Co się stało ? Słowo WORD powoduje przestawienie interpretacji w taki sposób, że ciąg znaków występujących za tym słowem nie jest uznawany za słowo FORTHa. Nazwa ta jest jednak zapamiętywana i przenoszona do pamięci ustalonej przez zmienną DP. Liczba występująca przed WORD to kod znaku, który jest traktowany jako znacznik kończący nazwę. W naszym przypadku jest nim liczba 32, czyli kod spacji. Istnieje w języku FORTH słowo HERE, które daje wartość zmiennej DP na stos. HERE COUNT TYPE RETURN Po wykonaniu tej sekwencji słów na ekranie została wyświetlona nazwa TYPE. Mimo, że nie użyliśmy słowa WORD w sposób jawny, FORTH wykorzystał go do wprowadzenia poszczególnych nazw pod HERE, aby je wykonać. Jako ostatnia została wprowadzona nazwa TYPE, a następnie wyświetlona przez słowo TYPE. Wyjaśnienia wymaga nieznane nam słowo COUNT. Jego zadanie polega na przygotowaniu danych dla TYPE. Nie wspomniałem jeszcze o tym, że słowo WORD zapamiętuje podany ciąg znaków w specyficzny sposób: przed nazwą zapisany zostaje jeden bajt określający jej długość. Aby otrzymać dane dla TYPE nie musimy się troszczyć o podawanie długości. Słowo COUNT zamienia podany przed nim adres na adres pierwszego znaku ciągu i jego długość. Zamiast tego słowa można by napisać następującą sekwencję: DUP 1 + SWAP C@ Należy pamiętać, że słowo WORD czyta ciąg znaków w momencie, gdy jest wykonywane. Czytanie zaczyna się od miejsca, w którym znajduje się w danym momencie kursor czytający. Spróbujmy zadeklarować nowe słowo zawierające WORD. : PI 32 WORD HERE COUNT CR TYPE CR ; RETURN Widzimy że podczas deklaracji nie występuje za słowem WORD żadna nowa nazwa. Wykonajmy: PI ATARI RETURN Tym razem słowo PI przeczytało napis ATARI i wyświetliło go na ekranie. Stało się tak dlatego, że po odczycie nazwy słowa PI interpreter języka FORTH umieścił swój kursor czytający za tym słowem. Od tego też miejsca rozpoczęło czytanie słowo WORD, umieszczone wewnątrz PI. Roland Pantoła
|