Bu sayfadaki yazılar
Sayfanın metni
Sayfa 17
Amiga'da, C ve grafik iyi bir ikili oluşturuyor. İsterseniz bunu bir inceleyelim ve gerçekleştirelim. Bu ayki konumuz bu olsun ne dersiniz?
Programımız, vermiş olduğumuz bir yazı dizisini, ekranın belirli bir satırında, pixel pixel scroll yaparak kaydırmak olsun. Her programcının ilk demosu aşağı yukarı böyle başlar. İçinizde bunu denemek isteyenlerin olduğunu tahmin ediyorum. Ayrıca bu program, sizler için iyi bir grafik alıştırması olacak. Daha önce görmüş olduğunuz ve zevkle seyrettiğiniz intro ve demolardaki kayan yazıların basit bir örneği olan programımızı şöyle bir gözden geçirelim:
/* Amiga Dunyasi */ /* Program : Cenker Ozkurt */
#include <stdio.h> #ınclude <exec/types.h> #include <graphics/gfxbase.h> #include <intuition/intuitionbase.h>
struct NewScreen ns={ 0,0,320,256,5,0,1,0,CUSTOMSCREEN,0,0,0,0 };
struct RastPort *rp; struct Screen *scr; struct GfxBase *GfxBase; struct IntuitionBase *IntuitionBase;
int f,s; UBYTE*m=0xbfe001; char *string="Amiga Dunyasi'dan. Yazan: Cenker Ozkurt. ";
main()
{ IntuitionBase=(struct IntuitionBase *) OpenLibrary( "intuition.library",0); if(IntuitionBase==NULL) {
printf("intuition library error!\n"); return(0);- } GfxBase=(struct GfxBase *)OpenLibrary("graphics.library",0); if(GfxBase==NULL) {
printf("graphics library error!\n"); CloseLibrary( IntuitionBase); return(0);
} scr=(struct Screen *)OpenScreen(&ns); if(scr==NULL) {
printf( "screen error!\n"); CloseLibrary(GfxBase); CloseLibrary( IntuitionBase); return(0); } rp=&scr->RastPort; /* Screen rastport */
SetAPen(rp,1L); /* Kalem rengi */ while( 1) { /* Sonsuz dongu */
for(f=0;f<strlen(string);f++) { /* Yazi dizisi kadar */
Move(rp,310L, 100); /* Yazi koordinati */ Text(rp,string+f, 1L); /* Bir harf yaziliyor */ for(s=0;s<9;s++) j /* 8 pixel sola kaydirma */ WaitTOF(); /* Ekran taramasini bekle */ /* 1 pixel sola kaydır */ ScrollRaster(rp, 1,0,0,90,320,110); WaitTOF(); /* Yazi satirini kopyala */ ClipBlit(rp,0,90,rp,0,150,320,20,0xc0); /* Sol mouse tusu kontrolü */ if(*m==188) goto quit; } }
A} quit: CloseScreen(scr); CloseLibrary(GfxBase); CloseLibrary(Intuitionfiase); return( I); } Evet şimdi programımızı compile edelim. İlk satırlardaki #include komutları;
#include <stdio.h> #include <exec/types.h> #include <graphics/gfxbase.h> #include <intuition/intuitionbase.h> standart input/output, veri tipleri, grafik ve intuition macrolarını tanımlıyorlar.
struct NewScreen ns={ 0,0,320,256,5,0,1,0,CUSTOMSCREEN,0,0,0,0 }; komutlarıyla, ekran yapı değişkenine, bizim ekranımızın özelliklerini veriyoruz. 320x256 ekran boyu, 5 bitplane sayısı, CUSTOMSCREEN Workbench ekranına bağımsız olduğumuzu belirtiyor.
struct RastPort *rp; struct Screen *scr; struct GfxBase *GfxBase; struct IntuitionBase *IntuitionBase; RastPort, ekran özelliklerini taşıyan önemli bir yapı değişkenimiz. Bu değişken vasıtasıyla, diğer grafik komutları, çalışacakları ekranı tanıyorlar.
Screen, ekranımızın bütün özelliklerini taşıyan yapı değişken adresi.
GfxBase ve IntuitionBase, grafik ve intuition library adresinin saklandığı değişkenleri oluşturuyor.
Daha sonra programda kullanacağımız diğer değişkenler tanımlanıyor. Burada string değişkeni, bizim yazı dizimizin saklandığı değişken oluyor.
main() ana fonksiyonu içerisinde library'ler açılıyor ve kontrol ediliyorlar. Eğer açılamazlarsa, hata mesajı ile programdan geri çıkılıyor.
Sonraki satırlarda ana programa giriyoruz. Burada iç içe üç tane döngü bulunuyor. Birinci while döngüsü, sonsuz döngüyü oluşturuyor. Sol mouse tuşunu kontrol ederek bu döngüden çıkıyoruz. İkinci döngü, yazılacak olan yazı dizisi kadar devam ediyor. Bu arada,
Move(rp, 310L, 100); /* Yazi koordinati */ Text(rp, string+i, 1L); /* Bir harf yaziliyor */ ile, ekranda vermiş olduğumuz pozisyona yazı karakterimizi yazıyoruz. Daha sonra üçüncü döngüde, sekiz pixel kadar sola kaydırma yapılıyor. Burada ise, WaitTOF();
ScrollRaster(rp, 1, 0, 0, 90, 320, 110); WaitTOF(); ClipBlit(rp, 0, 90, rp, 0, 150, 320, 20, 0xc0); satırları bulunuyor. Amiga'da, ekran satır taramasının tamamlanıp tamamlanmadığını kontrol eden bir komut mevcut, WaitTOF(). Bu komut, daha çok Blitter kullanan komut işlemlerinde gerekiyor. Aksi takdirde, mesela bizim programımızda scroll sırasında bir titreme oluşuyor. Çünkü tarama tamamlanmadan yapılan bir kaydırma işlemi, senkron bozukluğuna sebep olabiliyor. Bu nedenle bu tür komutların özellikle başına WaitTOF komutunu yerleştirmek bozuklukları engelleyebiliyor.
Klavyeyle gezinmek için ← ve → tuşları.
Sayfa 16
Piano: İmlecin bulunduğu yere nüans işaretlerinden Piano sembolünü basar.
Mezzo: İmlecin bulunduğu yere nüans işaretlerinden Mezzo sembolünü basar. Ledger Line: Örneğin portenin yukarısında veya aşağısında kalan notalarda kullanılan küçük hiza çizgilerini imlecin bulunduğu yere basmak için bu komutu kullanmanız gerekir. Symbols 2:
Treble Clef: İmlecin bulunduğu yere bir Sol anahtarı yerleştirir.
Bass Clef: İmlecin bulunduğu yere bir Fa anahtarı yerleştirir. Alto Clef: İmlecin bulunduğu yere bir Do anahtarı yerleştirir.
Common Time: İmlecin bulunduğu yere 4/4'lük ölçüyle aynı anlamı taşıyan bir sembol basar.
Cut Time: İmlecin bulunduğu yere 2/2'lik ölçüyle aynı anlamı taşıyan bir sembol basar. Fermata: İmlecin bulunduğu yere Fermata sembolünü basar. Coda: İmlecin bulunduğu yere Coda sembolünü basar. Turn: İmlecin bulunduğu yere geriye dönüş işaretini basar. Mordent: İmlecin bulunduğu yere Mordent sembolü basar. Segno: İmlecin bulunduğu yere Segno işareti basar. Accent: İmlecin bulunduğu yere vurgu anlamını taşıyan bir sembol basar.
Small Circle: İmlecin bulunduğu yere harmonik sesler için kullanılan içi boş küçük bir daire yerleştirir. Symbols 3: Whole Rest: İmlecin bulunduğu yere 4 vuruşluk bir sus işareti basar.
Half Rest: İmlecin bulunduğu yere 2 vuruşluk bir sus işareti basar.
Quarter Rest: İmlecin bulunduğu yere 1 vuruşluk bir sus işareti basar. Eighth Rest: İmlecin bulunduğu yere 1/2 vuruşluk bir sus işareti basar.
Sixteenth Rest: İmlecin bulunduğu yere 1/4 vuruşluk bir sus işareti basar.
Thirty-second Rest: İmlecin bulunduğu yere 1/8 vuruşluk bir sus işareti basar.
Sixty-fourth Rest: İmlecin bulunduğu yere 1/16 vuruşluk bir sus işareti basar.
Guitar Tablature: Eğer parçada kullanılan akorları gitardaki kullanılışlarıyla belirtmek istiyorsanız bu komutu kullanmalısınız. Bu komut işleme girdikten sonra imlecin bulunduğu yere Gitar Klavyesi'nin sembolü basılır.
Closed String: Guitar Tablature komutunu kullandığınızda boş bir gitar klavyesi karşınıza çıkar. Bu durumda hangi perdelerin kullanıldığını (Tabii her akorun yapısına göre açık veya kapalı perdeler değişik olmaktadır.) perdelerin üzerine imleci getirip ufak noktacıklar basmanız gerekmektedir. İşte bu komut o işi yapar.
Open String: Bu komut ise Guitar Tablature üzerinde kullanımda olan boş telleri belli etmek için kullanılır.
Print Menüsü: Bu menüde bulunan üç ayrı komut yardımıyla dokümanların, herhangi bir yazıcıdan çıktısını alabilirsiniz. Yalnız bu komutları kullanmadan önce Preferences'e girip gerekli yazıcı tanımlamalarını yapmanız gerekiyor.
Current Screen: Bu komut işleme girdiğinde o sırada ekranda görülen kısmı yazıcıya gönderir.
Current Page: Bu komut işleme girdiğinde o sırada üzerinde bulunduğumuz sayfanın tamamını yazıcıya gönderir. Current File: Bu komut işleme girdiğinde o sırada üzerinde çalıştığımız dosyanın tamamı yazıcıya gönderilir. Import Menüsü: Bu menüdeki komutlar sayesinde diğer MIDI Sequencer programlarında yapılmış müzik bilgileri taşıyan dosyalarını Copyist programına transfer edebilirsiniz. Bu transfer işlemlerini ileride daha detaylı olarak inceleyeceğiz.
KCS All File ...: Bu komut yardımıyla "Dr.T's KCS MIDI Sequencer" programında yapılmış '.ALL' ekini taşıyan dosyaları "STREAM" dosyasına çevirebilirsiniz.
MIDI File ...: Bu komut vasıtasıyla herhangi bir MIDI programında yapılmış standart MIDI dosyalarını "STREAM" dosyasına dönüştürebilirsiniz.
SMUS File ...: Bu komut yardımıyla "Deluxe Music Construction" ve diğer birkaç programın kullanmış olduğu "SMUS" dosyalarını "STREAM" dosyalarına dönüştürebilirsiniz.
Read Stream File ...: Bu komut ise "STREAM" dosyalarını okuyarak ekranda nota olarak görmemizi sağlar.
Evet bu aylık buraya kadar !!! Gelecek ay, Copyist programında en çok kullanacağımız editör işlemlerini örnekler yardımıyla inceleyeceğiz. Ayrıca tüm komutlara ait tuş ve tuş kombinasyonlarının da bir listesini sizlere sunacağım. Yine de programı şöyle bir kurcalamanızda yarar görüyorum. Bir başka yazıda görüşmek üzere, HOŞÇAKALIN!!!!