AMIGA C
Retro bilgisayarBu ayki konumuz structures (yapılar). Daha önce de söylediğim gibi, artık daha çok örnekler üzerinde çalışacağız. Structures, C dilinde öğreneceğimiz son konu. Bu konu da bittikten sonra, daha karmaşık örneklere rahatlıkla girebiliriz. Şu ana kadar öğrendiğimiz konuların çoğu, daha çok C dilini teorik olarak kavramamızı sağladı. Öğrendiğiniz komutların çoğu, size bu konuları anlamanıza yardımcı olmak için verildi. Şimdiye kadar verdiğimiz komutlar, C dilinin temel komutlarıydı. Fakat bildiğiniz gibi biz Amiga'da C yazıyoruz. Yani Amiga'da C dilinden tam olarak yararlanabilmek için, daha Amiga hakkında öğreneceğimiz çok şey var. Diğer bir deyişle şu ana kadar öğrendiğimiz C bilgisi, bizim Amiga sistemine girmemizi sağlayacak düzeydedir. Tabii ki Amiga sistemini tanımak size düşüyor. Bu da, Amiga başında en azından bir BASIC diliyle uğraşmakla mümkün. Eğer Amiga sistem bilginiz iyi ise, beni izlemeye devam edin!
STRUCTURES (Yapılar): C dilinde çok kullanılan struct komutu, yapı anlamına geliyor. Struct, birden fazla değişkeni bir grup ismi altında toplamamıza yarıyor. Bu sayede program içerisindeki değişkenlere, kullanım yerlerini daha rahat ayırt ederek ulaşabiliyoruz. Böylece hem programımızın anlaşılırlığı artıyor, hem de planlarken değişkenleri daha yerli yerinde kullanabiliyoruz. Sonuç olarak yapılar, verilerin daha iyi organize edilmesini sağlıyor.
Yapılar, program içerisinde 'struct' kelimesi olarak geçiyor.
Struct komutunun genel kullanımı.
struct grup ismi { değişkenler } şeklindedir. Yapıda yer alan değişkenlere üye diyoruz. Herhangi bir değişken ile üye, aynı ismi taşıyabilir. Üyeler de değişkenler gibi her türden olabilir.
struct {....... } a,b,c;
Bu satırda, üyeler { } parantezleri içinde verilmiş olsun. Bu parantezlerden sonra gelen a, b ve c değişkenleri, artık bu üyeleri ihtiva etmektedir. Bu değişkenler bir veya birden fazla olabilir. Eğer bir yapı tanımlamasında bu değişkenler verilmezse, bilgisayar bu yapı tanımlaması için hafızasında yer ayırmaz. Yapıya isim verilmemişse, bu isim daha sonra değişkenlerin tarifinde kullanılabilir.
Şimdi aşağıdaki örneğimizi bir inceleyelim;
struct çanta {
int defter;
char kitap;
float kalem;
}:
Burada grup ismimiz çanta olarak verilmiş. Defter, kitap ve kalem ise üyeleri oluşturuyor. Görüldüğü gibi bu üyeler farklı türlerde. Üyelerden sonra herhangi bir değişken ismi gelmediğinden, bilgisayar bu yapı tanımlaması için hafızasında bir yer ayırmıyor. Eğer aşağıdaki gibi yazarsak.
struct çanta a;
a değişkenin çanta yapısı içinde olduğunu belirtiyoruz. Bundan sonra bilgisayar hafızasında a için bir yer ayrılıyor. Bu ilk tanımlama yapıldıktan sonra da ilk sayısal değerler (initialization);
struct çanta a={ 10.5,8.2};
şeklinde verilebilir. Programda herhangi bir üyeye ulaşmak için;
a.defter
formatı kullanılır. Burada V nokta işareti, değişken adıyla üye adını bağlayan operatör olmaktadır. Yapılarda, aşağıda olduğu gibi birden fazla struct iç içe kullanılabilir.
struct toplam {
int sıra;
int masa;
struct çanta a;
};
Burada çanta içerisindeki üyelere ulaşmak için, toplam, a.kalem yazılır. Şimdi struct işlemini daha iyi anlamak için bir örnek daha verelim.
/* Struct Deneme */
struct grup {
int a;
intb;
char string[10];
} dl;
main()
{
dl.a=10;
dl.b=12;
dl.string="0123456789";
printf("a=%d",dl.a);
printf("b=%d",dl.b);
printf("string=%s",string);
}
/* Program sonu */
STRUCTURE ve FONKSİYONLAR:
C dilinde yapıları kullanırken bazı sorunlarla karşılaşıyoruz. Başlıca sorun, structure'ların bir blok olarak başka bir yere kopyalanamaması ve bundan dolayı fonksiyonlara aktarılamamasıdır. Bunun çözümü, struct değişkenini pointer olarak belirlemektir. Pointer'larda böyle bir sınırlama yoktur. Zaten bildiğiniz gibi, pointer'lar bir adres taşımaktadır. Bizim de burada yaptığımız, yapının adresini bir pointer'a atarak kullanmak. Peki şimdi soracaksınız! Bunu pointer olarak değil de direkt olarak yapının adresini kullanarak yapamaz mıyız? Mesela; struct isim {

int boy;
int yas;
};
Func1()
{
struct isim p;
func2(&p); /* sorun yok */
}
func2(&p) /* Fakat burası fonksiyon kullanımına aykırı */
struct isim p;
{ … } Görüldüğü gibi problem açık. Çünkü fonksiyonlar tanımlanırken parametrelerde '&' operatörü kullanılamıyor. Bunun tek çözümü, pointer'lar. İşte bir örnek;
struct isim *p; *p artık isim yapısının adresini göstermektedir. Artık bu adresi istediğimiz fonksiyona yollayarak isim yapısını kullanabiliriz.
routine(p)
struct isim *p;
{
…
}
Örnekte, routine() fonksiyonuna isim yapısının adresi yollan-
mış ve bu adres yeniden tanımlanarak yapının değerleri kullanı-
labilir hale gelmiştir.
Yapılarda, pointer olarak kullanılan değişkenlerin üyelerine;
p->boy;
olarak ulaşılmaktadır. Burada '.' nokta yerine '->' operatörü kul-
lanıldığını görüyorsunuz. Aslında bu ifade şöyle de çalışabilir:
(*p).boy;
Fakat pointer yapılar C dilinde çok sık kullanıldığından, daha basit olan '->' operatörü seçilmiştir.
Şimdi sizlere, Amiga'da Workbench ekranına grafik olarak nasıl ulaşılabildiğini gösteren bir örnek vermek istiyorum. Fakat bu örneği incelerken bilmediğiniz bazı noktalar çıkacaktır. Bunları yeri geldikçe açıklayacağım.
/* WBench Ekranina Çizim */
#include <exec/types.h>
#include <graphics/gfxbase.h>
#include <intuition/intuitionbase.h>
#include <functions.h>
struct IntuitionBase *IntuitionBase;
struct GfxBase *GfxBase;
struct RastPort *rp;
struct Screen *screen;
main()
{
IntuitionBase=(struct IntuitionBase *)
OpenLibrary("intuition.library",0);
GfxBase=(struct GfxBase *)
OpenLibrary("graphics.library",0);
screen=IntuitionBase->ActiveScreen;
rp=&(screen->RastPort);
cls():
CloseLibrary( IntuitionBase);
CloseLibrary(GfxBase);
}
cls()
{
SetAPen(rp,0);
for(y=0;y<200;y++) {
Move(rp,0,y);
Draw(rp,640,y);
}
}I
/* Program sonu */
Bu program sayesinde, Workbench ekranını silebilirsiniz. Programımız Amiga sistemini kullandığımız ilk program oluyor. Bu nedenle şimdilik anlayamadığınız yerler olacaktır. Verdiğim programı yazarak deneyin ve inceleyin. Programımızın açıklamasını gelecek ay vereceğim. Unutmadan hatırlatmak istiyorum ki, bu programı Aztec-C V3.6'da derleyebilirsiniz. Herhangi bir editör programında programı yazdıktan sonra, prog.c olarak kaydedin ve compile edin. Bu compile işlemlerini daha önceki sayılarımızdan da hatırlayacaksınız. Fakat programınızın çalışması için, bu işlemleri doğru yapmalısınız.
Bu aylık da bu kadar diyorum. Gelecek ay programımızın açıklamasını ve yeni örnek programları vereceğim. C dilindeki temel konularımız burada sona erdi. Artık, daha önce de söylediğim gibi, Amiga-C örnekleri ile C yazımıza devam edeceğiz.
Bol komutlu günler dilerim.
INKONUKLAR

Cumartesi gününün erken saatlerinde Oğan Kandemiroğlu'nun evinde Celâl ve Oğan Kandemiroğlu kardeşlerle sohbet etmeye başladık. Şimdi dilerseniz bu minik söyleşimize biraz kulak kabartalım.
SİNAN EREL: Celâl abi, PC'ler konusunda ne düşünüyorsun? Bu azman aletler Amiga'nın pabucunu dama atmayı başarabilirler mi?
CELÂL KANDEMİROĞLU: PC'lerin Amiga'ya karşı çok büyük avantajları var. Örneğin PC'lerin gelişme kapasiteleri korkunç. Bir kart takıp 16 kanal müzik yapabiliyorsun veya başka bir kartla milyonun üstünde renk kullanarak çizim yapabiliyorsun. Bu aletlerin hızları Amiga'nın en az iki misli. Ayrıca Amiga'daki harddisk olayı bence çok kötü. Amiga'nın harddiski hem çok yavaş, hem de çok pahalı. Fakat bunun yanı sıra Amiga'nın en iyi özelliği, bu fiyata sağladığı olanaklar. Sonuçta bir PC'yi genişletirken yapacağın harcama Amiga'ya yapacağından çok daha fazla olacaktır. İşte Amiga'yı cazip kılan en önemli özellik de bu. Ödediğin fiyat karşısında aldığın, çok yönlü imkanları olan bir makine. Sonuçta bir Amiga'yla müzik, grafik ve (reklam firmaları için çok önemli olan) animasyon gibi çalışmaları yapabiliyorsun. Bunların yanında söyleyebileceğin tek kötü şey, "çeşit bol fakat, fazla detay yok" olabilir.

SİNAN EREL: Artık bilgisayar dükkanlarında Amiga ve C64'ün yanında bir PC belirmeye başladı. Kimisi renkli ekranlı ve iyi bir grafik kartıyla donatılmış, kimisi de monochrome ekranlı ve vasat bir grafik kartına sahip. Ama bu makineler birer ikişer bilgisayar firmalarında Amiga'nın yanında yer almaya başladılar. Bu konuda neler düşünüyorsun Celâl abi? Sence Türkiye'de PC'ler Amiga'yı gözden düşürecek mi?
CELÂL KANDEMİROĞLU: Oyun, markası veya lakabı ne olursa olsun, bütün bilgisayarlarda çok önemli bir olay. Sonuçta eğer oyunlar olmasaydı biz, ne C64'ü, ne de Amiga'yı tanıyabilirdik. Zaten bizim bilgisayar olayına girmemiz de oyunlar sayesinde oldu. Oysa şimdi senin de söylediğin gibi PC'lere yapılan oyunların da çeşit ve miktarı artmaya başladı. PC'ler zaten yurtdışında yeterince yaygın. Fakat Türkiye'de evine zevk için PC alan kişiler pek o kadar fazla değil. Fakat evine Amiga alan kişilerin sayısı oldukça fazla. Bu yüzden Amiga'nın en azından 3-5 sene daha canlılığını koruyacağına eminim. Fakat bunun PC'lerin evlere yayılmasını engelleyeceğini de sanmıyorum.
SİNAN EREL: Peki şu anda Amiga için yeni oyun hazırlıkları var mı? Eğer varsa bu konuda bilgi verir misin? CELÂL KANDEMİROĞLU: Şu anda ZERO adlı bir oyunun grafiklerini hazırlıyorum. Bildiğin gibi ZERO, şu pırpırlı Japon savaş uçaklarının adı. Oyunda dört tane değişik uçağımız var. Bunlardan birincisi oyuna da adını veren Japon uçağı. Bu uçak, ileriki kademelerde modernleşiyor ve ışık bariyerlerinden geçtikçe enerji alıyor. Daha sonra ise, yarı uçak yarı robot oluyor; böylece zemine temas ettiği anda yürüyebiliyor. Son olarak da robota dönüşerek yürüyebiliyor. Oyun, herbiri 160 screen'lik sekiz level'dan oluşuyor. Otuzbeş değişik alien ve her ana level'ın sonunda büyük bir monster var. Ayrıca bütün bunlar 48 renklik grafiklerden oluşuyor, 32 renk background için, 16 renkte alttaki status için. Aynı X-OUT'taki gibi, 50 mghz, titremiyecek.
CELÂL VE OĞAN
SİNAN EREL: Zaten X-OUT, shoot 'em up'çıların çok hoşuna gitmişti. Gerçi crack versiyonunda 5-6 level eksikti ama, yine de oyun o haliyle bile çok güzeldi. Onun ardından çıkanlarsa pek o kadar iyi değildi.
CELÂL KANDEMİROĞLU: Artık espriyi öldürdüler, mesela Z-OUT'u biliyorsun. Aslında başta X-OUT'tan sonraki Z-OUT olarak düşünülmedi. Rainbow Arts firması öyle bir shoot'em up oyununu biraz ucuza kapattı. Sonra da nasıl yapalım bunu derken, X-OUT'un ikincisine çevirdiler. Zaten uçaklar da benim uçaklara ondan sonra benzetildi. Yani ikincisi diyerek satıldı, ama birinciyle ilgisi yok. Fakat cidden güzel olan birşey var, Turrican olayı. Hele ikincisi cidden çok güzel.


SİNAN EREL: Turrican II ileriki kademelerde shoot 'em up'a dönüşüyor.
CELÂL KANDEMİROĞLU: Ben hala geçemedim oralara, daha birinci level'da çıkışı bulamadım. Senin çocuklarla da görüşemedim.
SİNAN EREL: Benim hayret ettiğim bir şey var. Amiga'da ilk kez çıkan bazı oyunlar, şu anda çıkan bir çok oyunla boy ölçüşecek kalitede. Örneğin, Defender of the Crown kalitesinde grafikleri olan bir oyun çıkmadı veya o kaliteye yakın grafikli oyunların sayısı çok az. Tabii bu örnekleri arttırmak mümkün, fakat fazla detaya girmek istemiyorum. Yeni oyun grafikerleri yeterince iyi değil, tabii bu benim fikrim sen ne dersin Celâl abi?
CELÂL KANDEMİROĞLU: Doğru bir gözlem. Şimdiki grafikerler ışık gölge olayını bilmiyorlar. Oysa en önemlisi ışık, gölge ve leke olayı. Mesela koyunun üstünde açık, açığın üstünde koyu; ışık yukardan geliyorsa ışık alacak, gölge oluşacak. Bunlar tamamıyla desen usulü çalışıyorlar. Mesela adamlar, bir kol veya silindir çizerken ışığın bir yerden geleceğini hesaplamıyorlar, soldan ya da sağdan veya yukarıdan. Flaşla fotoğraf çeker gibi ışık ortadan geliyor. Silindirin ortası parlak, sağ ve sol tarafları da koyu oluyor. Hep aynı formda çalışıyorlar, böylece estetikliği de yitirmiş oluyorlar.
OĞAN KANDEMİROĞLU: Yani resime hayat veremiyorlar. Gerçek ressamların "yaşayan resim" dedikleri bir form vardır. Oysa bunların çizdiği resim, kelimenin tam manasıyla yaşamıyor.
KANDEMİROĞLU
CELAL KANDEMİROĞLU: Böyle olunca da 3 boyutu yakalamakta oldukça zorlanıyorlar.
A SİNAN EREL: Peki ZERO dışında bir çalışma var mı? CELÂL KANDEMİROĞLU: Rainbow Arts'ın anlaşma yaptığı SSI ve TSR firması yeni bir Dungeons & Dragons (AD&D) oyunu yapıyor. Bunun grafiklerinin bir kısmını da ben yapmaya başladım. Oyun bir aksilik olmazsa eylül ayında Amerika'da ilk defa PC'de çıkacak. Y I
SİNAN EREL: Ben geçen sene Crown'ın demo grafiklerini görmüştüm, fakat oyun demodaki kadar güzel değildi, neden böyle oldu acaba?
CELÂL KANDEMİROĞLU: Programcının programlamayı aceleye getirmesi yüzünden ve grafiklerin en azından 5'te 4'ünün kullanılmaması yüzünden oyun istediğimiz gibi olmadı. Ayrıca demoda gösterilen en basit olaylar bile oyunda yoktu. Mesela demonun girişindeki introda bulunan scrolling bile kaldırılmış, onun yerine tek tek, kare kare resim konulmuş. Tabii bu arada 32 renk diye bir şey yok. Oysa mühim olan 32 renkti. Programcı bunları istese çok rahat yapabilirdi, ama yapmadı. N
SİNAN EREL: 16 renklik grafikler Atari için yapılmıştı sanırım. CELÂL KANDEMİROĞLU: Önce Amiga'da oyunun

KONUK
grafik çalışmaları gösteriliyor. Çünkü Amiga'da daha fazla renk olduğu için, prezentasyon daha güzel oluyor. Bunun içinde önce Amiga'da gösteriliyor. Gerekli ilgiyi sağladıktan sonra da Atari'de gösteriliyor. Yani her şeyin önce güzeli gösteriliyor, ondan sonra da review'ler, preview'ler yapılıyor. Ardından Atari'de çıktığı zaman da, işte Atari'si de çıktı deniyor. Zaten Almanya'da Atari ölmüş durumda. Hatta belki seneye yapacağım oyunlarda Atari hiç olmayacak. Bu arada Crown'a gelelim. Heiko Schröder'ın, yani programcının, X- A
OUT gibi bir programı çok iyi yaptıktan sonra (şu anda Amerika için Dungeons & Dragons'u yapıyor) Crown'ı bu kadar kötü yapması düşündürücü. Bunun sebebi ise, Rainbow Arts'ın işlerini bitirmek için Starbyte'ın işini çabuk ve baştan sağma yapması. Çünkü program Starbyte'a satılmıştı. R
Böylece ortaya kötü bir sonuç çıktı.
SİNAN EREL: Yani program Rainbow Arts'a satılmış olsaydı uğraşacak mıydı?
CELÂL KANDEMİROĞLU: Tabii uğraşacaktı ama uğraşmadı. Hatta introya kendi adını bile yazmadı.
SİNAN EREL: Peki programlamanın kötülüğüne rağmen grafik veya müzikleri de kötü olarak mı kabul ettiler?
CELÂL KANDEMİROĞLU: Almanya'da grafik ve AMIGA DÜNYASI 53

AYIN KONUKLARI

müzikler çok beğenildi. Hatta müzikler için, Tunç'un da dergilerde 'Tunç Şatıroğlu' olarak ismi geçti.
SİNAN EREL: Yani sonuç olarak Crown, bir programcı tarafından harcandı diyebilir miyiz?
CELÂL KANDEMİROĞLU: Evet. Hatta dergilerde, 'Şimdi size süper grafikli ve süper müzikli bir oyunun nasıl FLOP olabileceğinin izahatını yapacağız.' gibi kritikler çıktı. Böylesine acı kritikler aldık. Çok güzel bir grafik Oğan'ın yaptığı, çok güzel de bir müzik Tunç'un hazırladığı, fakat oyun flop. Yalnız bazı dergiler, mesela ASM (Actual Software Market) dergisi 'fena değil' şeklinde yorum yaptı. Power Play dergisi de aynı şekilde yorum yaptı. Fakat Amiga Joker dergisi, satın almayın gibi bir yorum yaptı.
SİNAN EREL: Peki Celâl abi, Almanya'daki dergilerin durumu nasıl? Senin onlarla bir çalışman var mı?
CELÂL KANDEMİROĞLU: İstatistikleri çok iyi, mesela Amiga Joker'in Almanya'daki satışı 50.000'in üstünde. ASM'in aşağı yukarı 150.000. Amiga Joker'in bütün kapaklarını ben yapıyordum, fakat şimdi onlara kapak çizmeye vaktim olmadığı için eski çalışmalarımı veriyorum. Şu anda bilgisayar çalışmaları daha ağırlıklı gidiyor.
SİNAN EREL: Peki Celâl abi, şu ara Türkiye'ye yeni yeni girmeye başlayan SEGA gibi kartlı oyun konsolları hakkında ne düşünüyorsun?

CELÂL KANDEMİROĞLU: Oyun konsolları Amerika'da en çok satan olay. Ayrıca yeni çıkan GAME-BOY'lar da oldukça iyi satıyor. İşte bunlar gerek Avrupa'da, gerek Amerika'da Amiga ve Atari'yi yavaş yavaş gözden düşürüyor. Örneğin Almanya'da bir aile çocuğuna bir hediye alacağı zaman, 800 DM verip bir Amiga almak yerine, 150-200 DM verip bir konsol veya GAME-BOY almayı tercih ediyor. Sonuçta bunlar Almanya'da leblebi çekirdek gibi satıyor.
SİNAN EREL: Oğan, sen Amiga hakkında ne düşünüyorsun?
OĞAN KANDEMİROĞLU: Bence Amiga harika bir olay, fakat çok büyük de bir baş belası. Yani alete ısındığın zaman kurtulma imkanın olmuyor. Bir hastalık, bir sigara tiryakiliği gibi bir şey. Belki sigarayı bırakabilirsin ama, bilgisayarı bırakabileceğini pek sanmıyorum. Sigara için sağlığa zararlıdır derler, bilgisayar sağlığa zararlı değil, olsa olsa cebe zararlı olur. Şöyle ki, her gün yeni bir şey çıkıyor. Biz ilk kez Spectrum'la başlamıştık, sonra C64'e, daha sonra C128'e, 128'den Amiga'ya, Amiga'dan da PC'ye geçtik. Ama bilgisayarlar hâlâ gelişmeye devam ediyor, artık haddi hesabı olmayan bilgisayarların miktarı her gün biraz daha artıyor. Teknoloji gün geçtikçe daha da ilerliyor, belki ileride daha farklı, üç boyutlu bilgisayarlar kullanacağız. İlk kez Spectrum'la evlere giren bilgisayarlar, evin içindeki bir haşarat gibi, hızla çoğalıp geliştiler ve ben evime bilgisayar almam diyen kişileri, böcek ilacına bağışıklık kazanan birer zararlı gibi aşarak, hemen her eve yayıldılar. Bütün bunlar 10 yıl gibi kısa bir süre içinde oldu ve hâlâ da olmakta. Belki de çocuklarımız bugün hayranlık duyduğumuz bilgisayarlara bakıp 'bunlar da bilgisayar mı yani' diyerek gülecekler. Nasıl Spectrum şimdi bize komik geliyorsa, bizim çocuklarımıza da Amiga'lar komik gelecektir sanırım.

SİNAN EREL: Peki, Japonya'nın bilgisayar konusundaki durumuna ne dersin?
OĞAN KANDEMİROĞLU: Japonya bu konuda çok ileri. Bir kere oralarda Amiga yok, kimse Amiga'yı bilmiyor. Adamların en kötü oyunları 64 ve 250 renk arasında değişiyor. Sanki ayrı bir boyut gibi. Mesela Amerika, şu anda bizim gördüklerimizi görüyor, belki biraz daha fazlasını, ama Japonya başka bir diyar, çok ileriler.
SİNAN EREL: Sonuç olarak bilgisayar gerek Türkiye'de, gerekse dünyada hızla gelişen bir sektör. Biz de Türkiye olarak bu sektörü günü gününe takip etmeye çalışıyoruz. Gerçekten çok güzel bir sohbetti. İkinize de çok teşekkür ederim...
