Quick Basic

Geçen aylar 12-01

Merhaba arkadaşlar bu ilk sayımda Microskop amcaların yazdığı Qbasic hakkında temel bilgiler vereceğim. Daha sonra sürekli olarak programlama ve örnekler üzeklerinde durup açıklamalar yapacağım. Şayet gelirse sorularınıza burada örnek vererek cevap bulmaya çalışacağım.

Her ne kadar Qbasic daha doğrusu Dos eskisede yeni başlayan arkadaşlar halen ilgilenirler. Önceleri Windows Dos'a muhtaçtı. Şimdi ise Dos'u kaldırıp attılar. Artık Me veya XP de göremez olduk. Açılışta kara ekranlı eski Dos'tumuz yok. Ama halen Qbasic ile yazılan programlar iş görüyor. Çok zeki olmasada aptal bir virüs bile yazılabilir Qb ile. Qb yi kullanmak bilgisayar ile konuşarak program yazmak gibi bir şeydir. Oldukça basit kullanışlı her telden biraz çalar yani. Pascal da yazılamaya programları Qb de yazdığım günleri hatırlıyorum. Neyse bu kadar övgü yeter. Biraz da programımızı inceleyelim.

Qb si olmayan yoktur heralde. Ama yinede olmayanlar buraya tıklayarak indirebilirler. İçinde kütüphane, derleyiciler, yardım dosyası ve tabiki Qb.exe dosyası yer alıyor. Qb bunlardan ibaret. Qb çalışır normal olarak eski EDIT programının görümüşüne benzer. Sadece yukarıdaki menüler biraz fazladır. O menülerde zaten pek fazla bir işe yaramaz.

Programda kullanılan tüm komutları burada anlatmayacağım. Sadece gelen soruları ve bazı uygulamaları göstereceğim. Bunlar intterrup kullanımı, dosya kayıt, data olayları, I/O port kullanımı, ekran bufferi.... falan işte. Eğer ekrana Ciwata yazıpta bunu nasıl kaydırırım gibi şeyler bekliyorsanız onlar burada yok.. Basit bir while whend - for next - do loop dögüsünden haberi olmayan arkadaşlar öncelikle onları Qb nin help dosyasından öğrensinler sonra bu satırlara gelsinler.

Evet arkadaşlar bu bölümde Qb içinde mouse kullanımını ele alalım. Mouse icat edildi klavye çöpe.. Artık bilgisayarı mouse ile açıp kapatıp, yazılar, çizgiler, oyunlar vs.vs. herşey onunla olup bitiyor. Bu kadar yeter konumuza dönelim. Qb içinden mouse kullanacağız. Mouse kullanmak için bazı şeyleri bilmek gerekli.

Mouse arkadaşın Dos altında tüm işlerinin yönetildiği merkez olan int 33h kesmesi. Bu kesme sadece mouse ile ilgili işleri yapar. Bu ne diyenler olabilir. Arkadaşlar bu biraz assembly oluyor. Yani Qb içinde assemly rutinleri kullanıp işimizi öyle halledeceğiz. Malesef Qb interpreter düzeyinde işlem yaptğı için direk olarak bellek bölgeleri ile oynayıp, kesmelere müdahale edecek komutlar içermiyor. Bunun için inline komutlar kullanacağız.

Bugüne kadar Qb ile program yazıp type kullanan oldumu bilmem aslında ben hiç kullanmadım. Let gibi çok gereksiz bir komut. Bazen işe yarıyor. Qb içinden kesme kullanmak için bazı tanımlamaları yapmamız gerekiyor. Biz bu tanımları hazır olarak QB.BI dosyasından alacağız. Tabiki bu parametreleri kullana bilmek için Qb yi çalıştırırken QB.EXE /L parametresi ile kütüphane desteği ile çalıştıracağız. Bu dosya içinde tüm tanımlar var. Bunu include edip derlenirken onunla birlikte derlenmek istediğimiz belirteceğiz. Efet açın Qb yi başlayın.

Ha bu arada int 33h hakkında bira bilgi vereyim.
Bu kesmeyi Ax registerine 0 verip çağırdığımızda dönüşte eğer ax=0 ise bilgisayarda mouse diye bir şey yok yada install edilmedi demektir.
Şayet farklı bir değer gelirse mouse var demektir.
İşte o zaman hemen bx registerine bakıyoruz burada mouse un kaç tane tuşu olduğu yazıyor. 2 tuşlu yada 3 tuşlu diye bi şey..

Şimdide ax registerine 1 değerini verip çağırıyoruz int 33h kesmesini. Tabiki yukarıda kontrol yapacağız mouse varmı yokmu diye sonra bu satıra sıra gelecek. Yoksa saçma sapan değerler programınızı ve kafanızı karıştırır.
Efet çağırdık ve mouse kürsörümüz ekranda görünür bir duruma geldi. (Bu fonksiyonun dönüşü önemli diil sadece ekranda aktif yapıyo kürsorü..)

Şimdi Ax registerine 3 değerini verip çağrı yapıyoruz ve dönüşte cx registerinde mouse un sütün bilgisi, dx 'te satır bilgisi, bx 'te ise hangi tuşa basıldığına dair bilgi geliyor. (1 sol tuş, 2 sağ tuş, 3 çift)

Bu kadarlık ön bilgi yazacağımız programcık için yeterli. Sıvayın parmakları başlayalım işe.

'$INCLUDE: 'QB.BI'

İster bu dosyayı açın (qb.bi) içindekileri aynen yazın yada sadece yukarıda satırı yazın ikiside aynı şey.

DIM SHARED in AS RegType, ou AS RegType

Efeet burada arkadaşlar kullanacağımız değişkenleri tanımlıyoruz. Neden tanımlıyoruz ? Çünkü hem içerde (qb) hemde dışarıda (dos) kullanılacak burada tanımlanacak olan değişkenler. Değişkenlerimiz (in) procedure girerken verilen değeri götürecek, (ou) procedure dönüşünde bize sonucu getirecek.

in.ax = &H0

Değişkenin sonuna nokta(.) koyup registeride belirtiyoruzki o registerin değeri o olsun. Burada Hex olark 0 değerini verdik ax registerine.

CALL INTERRUPT(&H33, in, ou)

İşte mouse kesmesini çağırıyoruz. Call çalıştır ve geri gel anlamında bir komut, İnterrupt kesme çağrısında bulunacağımızı belirtiyor, &H33 kesme numarası, in verilen parametre bilgileri, ou ise gelecek olan değerleri verecek bize.

IF ou.ax = &H0 THEN BEEP: PRINT "MOUSE YOK..!": END

Burada çağrı sonrası bize dönüş değerlerini getiren (ou) değişkenini sorguya çekiyoruz. Kardeş Ax registeri ne durum da ? Eğer 0 ise mouse yok mesajını yazıp programı orada bitiriyoruz.

IF ou.ax = &HFFFF THEN PRINT ou.bx; "TUSLU MOUSE"

Eğer ax &hffff ise demekki mouse var ve çalışıyor demektir. Hemen ekrana mouse un tuş sayısını ve çalıştığını yazıyoruz.

SLEEP 1

1 saniye bekliyoruz ki watandaş ekrandaki mesajı görsün..

SCREEN 12

daha sonra ekran monu grafiğe çeviriyoruz.(640X480) Grafik ekranda kürsör ok şeklinde görünür, text ekranda ise kutu şeklinde..

in.ax = &H1: CALL INTERRUPT(&H33, in, ou)

kürsörü aktif ediyoruz.

DO
in.ax = &H3
CALL INTERRUPT(&H33, In, ou)

burada döngü içine girip sürekli olarak konum ve tuş bilgisi alacağız.

LOCATE 1, 1
PRINT "SATIR="; ou.dx,"SUTUN="; ou.cx, "TUS="; ou.bx

bu satırda bize çağrı sonrası gelen konum ve tuş bilgilerini ekrana yazıyoruz.

IF ou.bx = 3 THEN PRINT "Coded by Ciwata": END

ekrana bilgileri yazdıktan sonra basılan tuşu kontrol ediyoruz. Şayet watandaş 2 tuşa birlikte basmışsa programı bitiriyoruz. Yani programdan çıkışımız. Yok basmadıysa dön baba dönelim..

LOOP

Buda do nun kardeşi loop. Yani bu satıra geldiysen yürü bakalım yukarıdakı do döngüsüne demek
Evet arkadaşlar saat epey geç oldu. Aralıksız sürekli olarak yazıyorum şaftım kaydı. Bu aylık bu kadar. Sorularınız yada eleştirileriniz varsa mail olarak bildirirseniz sewinirim. Yukarıdaki programı geliştirip koordinatları sınırlandırarak mouse u aktif olarak kullanabileceğiniz programlar yazabilirsiniz. Sonraki yazımda data olarak direk hexagonal kodları bellek bölgesinde çağırarak hdd nin özel bölmelerine ulaşacağız.

Arkadaşlar bu yazının telif ve yayın hakları Ciwata.net e aittir. İzinsiz olarak çoğaltılıp yayınlanamaz.

Bye by Ciwata°

1