Arexx

3. Bölüm

B. bölümde program akışını kontrol eden emirleri göreceğiz. Ama önce geçen sayıda eksik çıkan ARexx operatörleri (işlem işaretleri) listesini tamamlamak istiyorum. Bu listede bazı karşılaştırma operatörlerinin başında yer alan ve operatörün anlamının tersine çevrileceğini gösteren “ -” (tik de) işareti (klavyenin solunda, TAB tuşunun üstündeki tuşa SHİFT ile beraber basarak elde edebileceğiniz) ve küçükişaretleri bir basım hatası sonucu çıkmamış. Bu listeyi (Bu kez eksiksiz basılaca:- ğını umarak) tekrar veriyorum:

İşlem Öncelik Tür Anlam 8

Üst alma çıkarma eşit eşit değil küçük büyük

Bu listede kısaltmalar şu an: lamlara A: Aritmetik işlem M: Mantıksal işlem K: Karşılaştırma işlemi Şimdi bu seferki yazımızın asıl konusuna geçelim: emirlerin yapısı ve program akışı

Mantıksal ters Aritmetik eksi kontrol emirleri. Burada sık sık tırnak işaretleri gerekecek. ARexx bu konuda gayet esnektir. Tırnak içine alınması geteken herhangi bir string, hem normal (çift) tırnak, hem de apostrpphe da denen tek tırnak içine alınabilir.

ADDRESS ve SHELL

İlk emirlerimiz olan bu ikisi aynı amaç ve biçimde kullanılirlar. ARexx yorumcusunun tanımadığı emirlerin yollanacağı host (ev sahibi) programı- MESAJ Port ismini saptamaya yararlar. ARexwx'in aslında

Çarpma (kayar nokta) Bölme (kayar nokta) Bölme (tamsayı) Tamsayı bölmenin kalanı (mod)

tamamen eşit (küçük büyük harf olarak da) tamamen eşit değil büyük veya eşit büyük veya eşit küçük veya eşit küçük veya eşit

Mantıksal ve (and) veya (or) Mantıksal eksik veya (xor) Mantıksal eksik veya (xor)

başka programlar bir makro programlama dili olarak düinü daha önce söy- İşte © sırada çalışmakta olan ARexx programının hangi programa emirler yollayacağını bu emirlerle tiyoruz. Örneğin:

S öpen dersek ARexx'in tanımadığı emirler (burada “open') Cygnus Ed adlı editöre (eğer hafızada ise) gidecektir. Burada Cygnus Ed'e 's:startup-seadlı dosyayı yüklemesini söylüyoruz. Gördüğünüz gibi burada iki ayrı türde tırnak işaretini rastgele kullandik. Yukarıda da söylediğim gibi ARexx bu konuda gayet esnek davranıyor. Yazı boyun: ca ARexx ile Cygnus Ed'i kontrol etmenin yollarını sık sık Örnekler arasında göstereceğim. Cygnus Ed'in tanıdığı komutların bir listesini ise daha sonra vereceğim. Eğer sadece

ADDRESS dersek, son adress komutundan önce geçerli olan host tekrar geçerli olacaktır. yanında

Bunun

'e bir dosyayı yükleme emri verirken, o sıtada kararlaştırılmış olan genel host'u değiştirmez, sadece bir tek emri o host'a gönderir.

ADDRESS COMMAND list

Diyerek de bir emrin Amiga- DOS'a gönderilmesini sağlayabiliriz. Burada 'list' e gaDOS'a gönderiyor. den “rx program' diyerek ğırırsanız, normal komutunun sonucu ile karşılaşırsınız. Bir host'a emir yollarken dikkat edilmesi gereken önemli bir husus vardır. Eğer aynı adlı bir ARexx emri varsa, verdiğiniz emir ARexx tarafından işlenecektir. host ise bu emirden haberdar olmayacaktır. Verdiğiniz emirlerin doğrudan doğruya host'a gitmesini yorsanız, bunları tırnak içine almalışınız. Örneğin

ESS rexx-ced'

derseniz, Oygnus Ed'in hafızadan çıkmasını sağlayabilir siniz. Ancak bunun yerine

ADDRESS 'rexxc-ced'
quit

Derseniz, Cygnus Ed yine hafizada kalmaya devam edecektir, çünkü 'auit' aynı zamanda bir ARexx komutudur. ve işlemekte olan program: dan çıkışı sağlamaktadır.

PULL

Daha önce görmüş olduğumuz SAY emri, ekrana (Daha doğrusu Shell penceresine) bir yazı yazmayı sağlıyordu. PULL emir de kullanıcıdan bir yazı almayı sağlıyor. (BASIC'teki İNPUT gibi). Örneğin:

SAY “Adınız ne?”
PULL isim
SAY “Adınız” * “isim” * imiş.”

derseniz, program yazıp EN-TER'e basarak verdiğiniz ismi, doğru anladığını kanıtlamak için tekrar yazacaktır. Örneğin isim olarak Berktan yazdığınız: da programın cevabı

Adınız 'Berktan' imiş olacaktır. Burada tek ve çift tırnakların kullanılışına dikkat edin. SAY emrinden sonra çitf tırnak ile başladığımız için, aradaki tek tırnak işareti ekra: na yazılacak yazının bir parçası olarak algılanmıştır.

CALL

Bir ARexx alt programını veya bir emri bir fonksiyon olarak çağırmaya yarar. Fonksiyon çağırmak iki türlü yapılabilir:

CALL test p1,p2,
sonuç result
veya
sonuç — test (p1,p2....)

Tek fark, ikinci yazım türünde eğer fonksiyon geriye bir değer vermezse, ARexx “Function did not return value” diye hata verir ve programın işleyişi durur. Halbuki ilk yöntemde eğer fonksiyon bir değer vermezse, demekle sonuç adlı değişkene değeri verilecektir. Yani değer verilmemiş değişkenlere yapıldığı gibi yazılan string sabitin harfe çevrilip kullanılacaktır.

olarak

DO ve END

Bu emir, bir ya da daha fazla emirden oluşacak bir emir grubunun başlangıç ve bitişini belirtirler. Pascal'daki BEGIN ve END ve C'de kullanılan küme parantezleri { } gibi kullanılırlar. Bir IF karşılaştırmasından sonra veya bir tekrarlama, döngü yazarken kullanılırlar. Kullanımlarını örneklerle anlatmak daha iyi olur: Diğer dillerdeki FOR döngüsünü sağlamak için

DOiz1 TO 10
SAY i
END

diyebiliriz. Eğer i değişkeninin birer birer değil de farklı bir hızda değişmesini istersek, bunu ardından BY diyerek belirtebiliriz. Örneğin büyük bir sayıdan küçük bir sayıya doğru sayarken bu gereklidir, yoksa tekrarlama yapılmaz.

DO iz20 TO 10 BY-2
SAY “altı kez yazılacak”
END

Eğer indeks değişkenine (yukarıdaki i gibi) ihtiyacınız yoksa, sadece,

DO FOR 10
SAY “on kez yazılacak”
END

diyebilirsiniz. FOR belirtecini diğer belirteçlerle kullanmak mümkün.

DO FOR 5 UNTİL cevap-”N”
SAY “devam etmek istiyor mu-
sunuz (YAN)?”
PULL cevap
END

Bu emir bloğu en fazla toplam 5 defa soru sorulacaktır. Ama verilen cevap (NO anlamında) 'n' veya 'N' olursa beş defa tekrarlamayı beklemeden döngüden çıkacaktır (Hatırlayın, sadece tek eşittir işareti büyük-küçük harf ayrımı gözetmeden karşılaştırma yapıyordu!). Eğer bir program kısmının tekrarlama emrine belli bir şart yazmak istemiyorsanız, FOREVER (daima) belirtecini kullanabilirsiniz. Bu durumda döngüden çıkmak için BREAK veya LEAVE emirlerini kullanmanız gerekir, yoksa programınız (CTRL-C tuşları ile durdurulana kadar) sonsuz döngüye girer. Yukarıdaki örneği bu kez FOREVER ile yazalım.

tekrar-0
DO FOREVER
teki 1
SAY “devam etmek istiyor mu-
sunuz (YAN)?”
PULL cevap
THEN
BREAK
END

Başka bir imkan da şudur. Burada döngü, WHILE'ın arkasından verilen koşul doğru olduğu sürece tekrarlanır:

1* Bir sayı kaç defa ikiye bölü-
nebilir? */
PULL sayı
DO iz0 WHİLE sayı 0.4
END
SAY “sayınız “i” defa ikiye bö-
lündü.”

Bunun tersi de UNTIL'dir. Bu kez döngü, UNTIL'in arkasından verilen koşul yanlış olduğu sürece tekrarlanır. Bunların dışında DO ve END, örneğin bir IF karşılaştırmasından sonra uygulanması gereken emirleri bir arada tutmak için de kullanılır:

IF cevap: * THEN DO
SAY olduğu için”
SAY “bu emirler uygulanacak”
END
ELSE DO
SAY Y olmadığı için”
SAY “bu emirler uygulanacak”
END

(Tekrarla) Bir döngüde, döngünün sonuna gelmeden tekrarlama sağlamak için kullanılır:

DO TO 10
IF i= THEN INTERATE
SAY i
END

Burada -10'dan 10'a kadar sayılar ekrana yazılırken, program 0 sayısını atlayacak ve yazmayacaktır.