AMIGA C

C'de önemli olan diğer bir nokta da, esnek alt rutinlerin hazırlanmasıdır. Böylece her yeni bir program hazırlanışında eski rutinlerden de yararlanılır ve programın kısa sürede bitmesi sağlanır. Ayrıca sık sık karşınıza çıkan problemlerle yeniden uğraşmak zorunda kalmazsınız ve kalan zamanı yeni şeyler keşfetmek için kullanabilirsiniz. Bu olayı modüler çalışma olarak tarif etmek de mümkün. Modüler çalışma C'nin getirdiği avantajlardan en büyüğüdür. Bu ayki konumuzu da kısaca açıkladıktan sonra, ilgili örneklere geçebiliriz. İlk olarak, aşağıda hazırlamış olduğum rutinleri yazdıktan sonra bir sefer derleyin. Derleme sonucunda oluşan, uzantısı '.o' olan dosyayı disketinize saklayın. Böylece programı her seferinde derlemenize gerek kalmaz ve zamandan oldukça fazla tasarruf etmiş olursunuz. Buna benzer library'leri kendiniz de oluşturup bir diskette saklayabilirsiniz. Bu library'ler sayesinde program yazmak kolaylaşacaktır. Şimdi örneğimizi bir inceleyelim;

Pa by CENKER OZKURT */
#include <stdio.h>
#include
#include <graphics/gfxbase.h>
#include <intuition/intuitionbase.h>
#include <libraries/dos.h>
#include <jiff.h>
struct GfxBase *GfxBase;
struct DosBase *DosBase;
struct İntuitionBase *IntuitionBase;
struct ILBM info *info;
struct NewScreen scr—(0,0,0,0,0,0,1,NULL,
CUSTOMSCREEN,NULL, NULL,NULL );
/*-Screen Structures-*/
struct RastPort *scr rastport|51;
struct ViewPort *scr viewport|51;
struct Screen e
openlibrary()
ionBasezOpenl ibrary("intuition.lib-
(
printf("İntuition Error!...");
doselibrary();
|
printf('Graphics
closelibrary();
ral

&&Ğ

1
if(DosBase) |
printf("Dos Error!
/* OK! */
if(DosBase) CloseLibrary(DosBase);
CloseLibrary(Intuitioı
se);
aa
s. rastport(s)
Ss;
s viewport(s)
int s;
opensereen(s,maxx,maxy,color)
int s; /* Screen number */
int color; /* Screen color number */
int maxx,maxy; /* Screen sizes */
int plane;
switch(color) (|
case 2:
12)) ser.
2001
(
ser. ViewModı
ser
P* OK! */
closescreen(s)
ints; — /* Screen number */
!
serfront(s)
ints; — /* Screen number */
een ToFront(screen|s));
bist #6,Sbfe001
bne.s İm
add.
waitmouse()
asm
loopl:btst#6,$bfe001
bneloopl
#endasm
waitkey()
int a,b;
unsigned char *key-0xbfec0l;
a-*tkey;
while(a:
plot(s,x,y)
int s; Screen number */
intx; — /* x coordinates */
yı /* yeoordinates */
Movef(scer rastportls|,x,y):
ints; /* Screen number */
int x,y;  /* Start coordinates */
/* Stop coordinates */
Movefser. rastportls),x,y);
Bana
int Screen number */
Mil
int  /* Start coordinates */
in /* Stop coordinates */
Movefscer. rastportfs),x,y);
Drawf(ser. rastport|s),x,y1);
Draw(scr rastport, sİ.x.y):
int s;  /* Screen number */
int x,y; /* Center coordinates */
/*r*/
DrawEllipselscr.
İnt number */
int x,y; /* Center coordinates */
Şiar string(40); /* String */
Movefser rastportls).x,y);
Textlsor rastportis) siring,strlen(strine));
ink(s,color)
ints; /* Screen number */
int color; /* ink color — */
SetAPen(ser rastport|s),color);
|
paper(s,color)
int s; Screen number */
int color; /* paper color —
SetBPeniscr. rastport|s),cg
|
mouse x(s)
ints;  /* number
|
mouse, y(s)
ints; /* Screen number */
Y);
j
set palette(s,color,;r,g,b)
ints; /* Screen number */
int color; /* Palette color */
int r, /* RGB values */
SetRGB4(ser
|
LoadIFE(s,name)
ints; — /* Screen number */
namel)|; /* Picture name */
iff(name,0);
printf("9os not
Teturn(1);
|
BİtBitMapRastPort(&info-
>bitmap,0,0,scr. rastport|s),0,0,320,256,0xc0);
free planes(&info->bitmap);
put cmapis,(1<<info->bitmap.Depth));
|
cmap(s,n)
Fat 5; ha
int n;
Screen number */

Programda sık sık kullanacağımız alt rutinleri görüyorsunuz. Bu sayede bazı işlemleri yapmak oldukça kolaylaşacaktır. Şimdi programımızın içerisinde bulunan örneklerle inceleyelim.

main()
openlibrary();
opensereen(0,320,256,32);
print(0,50,50,"Amiga C");
Waitkey();

Programımız dikkat ettiyseniz oldukça kısa. Çünkü işin zor kısımları ilk vermiş olduğumuz rutinlerde mevcut. Bize kalan bu rutinleri dikkatlice kullanmak. Programı çalıştırmak için ilk olarak; compile: cc -s module.c -> Rutinlerin bulunduğu program. Bu programı bir sefer compile etmeniz yeterli olacaktır. compile; cc -s c.c -> kısa program. Yalnızca bu programı yapmış olduğunuz her değişiklikten sonra compile edin. link: ln c.o module.o jiff.o -lc32 -> Link sırasında jiff.o objesini de eklemeyi unutmayın, Çünkü rutinler içerisinde IFF yükleme rutinleri mevcut. openlibrary(); bu alt rutinle, isminden de anlaşılacağı gibi, kullanılacak olan library'leri açıyoruz. Her programımızın başına bu rutini koymak zorundayız. openscreen(); ekran açmak için kullanıyoruz. İçerisindeki parametreler sırasıyla; ekran numarası, x genişliği, y genişliği, ve renk sayısı. Ekran numarasını, birden fazla ekran kullanabilmek için kullanıyoruz. En fazla 5 adet ekran için:

Evet, ekran açmak, artık bu kadar kolay hale geldi. Sizce de öyle değil mi? print(); ile ekranımızın herhangi bir köşesine yazımızı yazıyoruz. Buradaki parametreler; ekran numarası, x noktası, y noktası ve yazı dizimiz. waitkey(); ile bir tuşa basılıncaya kadar bekliyoruz. Ve daha sonra closelibrary(); ile bütün library'leri kapayarak programdan çıkıyoruz. Program bu kadar: Sıra geldi yeni bir örneğe;

/* Programming by Cenker Ozkurt */
#include <stdio.h>
main()
openscreen(0,320,256,32);
LoadIFF(0, "df0:picture");
waitmouse();
palet
closescreen(0);
eloselibrary0:
alet ofE()
set LAR
|
|

Resim yüklemek artık bu kadar kolay. Buradaki farklı rutin LoadIFF(); rutini. İlk parametre resmin yükleneceği ekran numarası, ikinci parametre ise doğal olarak resmimizin yeri ve ismi. Program içerisindeki paletoff(); rutini ise mouse tuşuna basıldıktan sonra parlama efekti vermemizi sağlıyor. Kullanmak zorunda değiliz. Aşağıdaki örnek ise kısa bir resim şovu!

/* Programming by Cenker Ozkurt */
main()
openscreen(0,320,256,32);
openscreen( 1,320,256,32):
serfront(0);
LoadIFE(O,"di
LoadIFE(1,"di
waitmouse();
serfront(1);
waitmouse();
closescreen(0);

İki ekran kullanıyoruz. scrfront(ekranı) rutinini de kullanmak mümkün. Programda kullanabileceğimiz diğer alt rutinlerin kullanımı da aşağıda olduğu gibi istediğimiz ön plana alıyor. scrback(); in.

main()
openlibrat
ink(0,2); — /* Kalem rengimizi değiştiriyor */
print(0,50,50, "Amiga &
/* mouse x() ve mouse y() ile mouse koor-
dinatlarini okuyoruz */
sprintf(s,'x mouses 9d y mouse 9bd
x(0),mouse y(0));
while(Tleftmouse()) |
inti
box(0,0,0,319,255); /* Ekrana bir kutu çizi-
yoruz */ :
PİKO LI. /* Nokta koymak için */
ine(0,0,0,319,255); /* Çizgi rutini */
set palette(0,0,15,15,15); /* Zeminin paleti-
"e aate" a sene u bekliye i
(0,5);
int(0,
closescreen(0);

closelibrary(); Kullanabileceğimiz rutinler bunlar. Bu programa başka rutinler ekleyerek istediğinizi ya-

Pabilirsiniz. Şimdilik bu kadar. Gelecek ay buluşmak üzere Hepinize yapısal günler!...