Amiga Dünyası sayı 29, sayfa 22

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 22

AMIĞA

CENKER ÖZKURT Amiga C'de örnek programlarımız devam ediyor. Bu ay iki yeni örneğimiz var. İlk örnek program, disketinizin herhangi bir track ve sector'ündeki bilgileri, bir sector uzunluğunda (512:

byte) okumanızı sağlıyor. Elinizdeki birçok disket utility programlarında olduğu gibi. Tabii ki bizim örneğimiz bu olayı daha basite indirerek anlamanızı kolaylaştırıyor. İkinci örneğimiz ise, bir hafıza bölgesini görüntülememizi sağlayan kısa bir program. Bu program ile yumuşak hardware scroll'lar ile daha büyük ekranlar üzerinde gezebiliriz. Sanıyorum, şu ana kadar vermiş olduğum kısa veya uzun örnek programları, yazarak veya üzerinde oynayarak deneyim kazanmışsınızdır. Bu ayki örneğimiz de aynı amacı taşıyor. Bundan sonra ise C'de yeni bir konu üzerinde düracağız! Konumuzu kısaca açıklayayım; Bildiğiniz gibi Amiga'nın işletim sistemi oldukça gelişmiş (PC'lere göre!). Açılan screen'ler, window'lar ve gadget'ler bu sistemin bir parçası. Böylece bir mouse aracılığı ile bile program kullanmak oldukça kolaylaşıyor. Bu sistemin tamamı, “intuition.library' içerisindeki program parçaları ile yönetiliyor. İşte bu sistemi tanımak ve benzeri programları yazabilmek için, “intuition.library” içerisine gireceğiz. Bu konuyu kısaca "intuition" olarak tanımlayabiliriz. Buradan da anlaşılıyor ki, gelecek ayki ve sonraki aylardaki konumuz, "intuition". Bu konuyu iyi kavradığınızda artık birşeyleri aşmış sayılırız! Evet, bu ayki ilk örneğimize geçebiliriz. Önceden de belirttiğim gibi, ilk örnek ile disketteki herhangi bir track ve sector'deki bilgileri, bir sector uzunluğunca (512 byte'lık) okuyabiliyoruz. Program çalıştırıldığında bizden bir track, sector ve kafa (head) numarası istiyor. Burada track O ile 79 arasında, sector O ile 11, kafa ise O ya da 1 olabiliyor. Daha sonra program, disketinizin vermiş olduğunuz bölgesindeki 512 byte'lik kısmı hem ASCII hem de HEX olarak, hafızasına yükleyerek ekrana yansıtıyor. Bu sayede o bölgeyi incelememiz mümkün olabiliyor. Şimdi aşağıdaki programımızı bir deneyin!.

/* (c) ShowDisk by Cenker Ozkurt */ #include "exec/types.h" #include "exec/devices.h" #include "devices/trackdisk.h"

ra

#define TD READCMD READ #define BLOCKSIZE TD SECTOR #define NUMHEADS 2

struct MsgPort *diskport; struct IOExtTD *diskreg;

BYTE BYTE *diskdata; ULONG diskChangeCount;

main(argc,argv) int arge; char *argv(1;

int ij; printf("ShowDisk by Cenker Ozkurün"); if(arge!—4) | printf("Usage : ShowDisk (Cylinder) (Sector) (Headn"); return(0);

| TnitDisk(); diskdata — &diskbuffer|0); ReadC FreeDisk(; for(i-0;i<512;i4-8) | : " i); for(j-0;j<8;j44) | printf("9002x ",(UBYTE) *(diskdata*i4j));

printf(" | if(*(diskdata*i4j)>32) | printf("9oc",*(diskdata*i4j));

) else print£(".");

diskreg->iotd Reg.io Length > BLOCKSIZE; diskreg->iotd Reg.io Data — (APTR)diskdata; diskreg->iotd Reg.io Command - TD READ; diskreg->iotd Count — diskChangeCount; offset TD SECTOR * (sec * NUMSECS * hd * NUMS ECS * NUMHEADS * eyl); diskreg->iotd Reg.io Offset — offset; return(DolO(diskreg));

| sec, hd) SHORT eyl, sec, hd;

LONG offset;

MotorOn()

diskreg->iotd Reg.io Length - diskreg->iotd Reg.io Command - TD MOTOR; return(0);

MotorOffO

diskreg->iotd Reg.io Length — 0; diskreg->iotd Reg.io Command - TD MOTOR; DolOldiskreg); return(0);

TnitDisk() ( diskport — CreatePort(0,0);

if(diskpol 0) exit(100); j i ruct IOExtTD *)CreateExtlO(diskport,sizeof(str-

uct if(diskreg —— 0) ( DeletePort(diskport); exit(200); )

Klavyeyle gezinmek için ← ve → tuşları.