GOSUB / RETURN

GOSUB / RETURN

Bir programda, programın ayrı yerlerinde aynı işlemi kullandığımızda bu işlemi her defasında programa eklemektense yapılan işlemi bir kere yazıp, programı istenildiğinde oraya yönlendirip işlem bittiğinde tekrar kaldığı yerden devam etmesi için bu komutu kullanırız. Tabi bu açıklama biraz, hatta biraz değil oldukça karmaşık oldu. Bu yüzden bu olayı örnekle açıklayalım. Diyelim ki bir satış ve stok programı yapıyoruz. Ve bu program da tabi ki menülerden oluşuyor. Bu menüleri yaparken ekranda bir çerçeve içerisinde görünmesini istiyoruz. Ana menümüz ve alt menüler şöyle olsun:

ANA MENÜ

1. STOK MENÜSÜ

2. SATIŞ MENÜSÜ

3. ÇIKIŞ

STOK MENÜSÜ

1. BİLGİ GİRİŞİ

2. DÜZELTME

3. SİLME

4. EKRAN LİSTE

5. YAZICI LİSTE

6. ANA MENÜ

SATIŞ MENÜSÜ

1. BİLGİ GİRİŞİ

2. DÜZELTME

3. SİLME

4. EKRAN LİSTE

5. YAZICI LİSTE

6. ANA MENÜ

Şimdi bu üç menünün de aynı ebatlarda bir çerçeve içinde görünmesini istiyoruz. Normalde her menüyü yaparken güzel görünmesi için önce ekrana bir çerçeve çizdiririz. Ama her üç menüde de aynı ebat ve özelliklerde çerçeve çizileceği, yani aynı işlem tekrarlanacağı için biz bu bölümü ayrı bir yerde bir defa hazırlıyoruz ve her menü için çerçeve çizileceğinde programı bu çerçeve çizdiren bölüme yollayıp işlem bittiğinde tekrar kaldığı yerden devam ettiriyoruz. Şimdi basit olarak yukarıdaki örneği görelim.

CLS

20 GOSUB 500

30 LOCATE 9,30:PRINT "A N A M E N Ü"

40 LOCATE 11,28:PRINT "1. STOK MENÜSÜ"

50 LOCATE 12,28:PRINT "2. SATIŞ MENÜSÜ"

60 LOCATE 13,28:PRINT "3. ÇIKIŞ"

70 LOCATE 15,28:LINE INPUT "Seçiminiz .......:";X$

80 IF X$="1" THEN 150

90 IF X$="2" THEN 300

100 IF X$="3" THEN END

110 GOTO 70

150 CLS

160 GOSUB 500

170 LOCATE 7,34:PRINT "STOK MENÜSÜ"

180 LOCATE 9,28:PRINT "1. BİLGİ GİRİŞİ"

190 LOCATE 10,28:PRINT "2. DÜZELTME"

200 LOCATE 11,28:PRINT "3. SİLME"

210 LOCATE 12,28:PRINT "4. EKRAN LİSTE"

220 LOCATE 13,28:PRINT "5. YAZICI LİSTE"

230 LOCATE 14,28:PRINT "6. ANA MENÜ"

240 LOCATE 15,28:LINE INPUT "Seçiminiz ........:";X$

245 IF X$="1" THEN 1000

250 IF X$="2" THEN 1100

255 IF X$="3" THEN 1200

260 IF X$="4" THEN 1300

265 IF X$="5" THEN 1400

270 IF X$="6" THEN 10

275 GOTO 240

300 CLS

310 GOSUB 500

320 LOCATE 7,34:PRINT "SATIŞ MENÜSÜ"

330 LOCATE 9,28:PRINT "1. BİLGİ GİRİŞİ"

340 LOCATE 10,28:PRINT "2. DÜZELTME"

350 LOCATE 11,28:PRINT "3. SİLME"

360 LOCATE 12,28:PRINT "4. EKRAN LİSTE"

370 LOCATE 13,28:PRINT "5. YAZICI LİSTE"

380 LOCATE 14,28:PRINT "6. ANA MENÜ"

390 LOCATE 15,28:LINE INPUT "Seçiminiz ........:";X$

400 IF X$="1" THEN 2000

410 IF X$="2" THEN 2100

420 IF X$="3" THEN 2200

430 IF X$="4" THEN 2300

440 IF X$="5" THEN 2400

450 IF X$="6" THEN 10

460 GOTO 390

500 CLS

Aşağıda 510 nolu satırdan 610 nolu satıra kadar olan satırlarda PRINT komutundan sonra tırnak içinde yazılan bölüme oradaki yazıları yazmayacaksınız. Onlar açıklama. Burada yapacağınız işlem şu. Tırnak işaretini açtıktan sonra bir parmağınızla klavyedeki Alt tuşunu basılı tutarken diğer elinizle klavyenin numerik bölümünden 201 (veya orada hangi numarayı demişsek) yazıp Alt tuşunu bırakacaksınız. Bıraktığınız anda (201 için) çerçevenin sol üst köşesi (╔) çizilecektir. Aynı şekilde Alt tuşu basılı iken 205 yazıp Alt tuşunu bıraktığınız zaman yatay çift çizgi ( ═ ) çizilir. Alt tuşu ile beraber 187 yazarsanız bu da çerçevenin sağ üst köşesidir ( ╗ ). Alt+186 dikey çift çizgidir ( ║ ). Alt+200 sol alt köşedir ( ╚ ). Alt+188 ise sağ alt köşedir ( ╝ ).

510 LOCATE 6,25:PRINT "alt+201 yazın, sonra (mesela) 30 adet alt+205 yazın, sonra da alt+187 yazın."

520 LOCATE 7,25:PRINT "alt+186 30 adet BOŞLUK ve alt+186"

530 LOCATE 8,25:PRINT "alt+186 30 adet BOŞLUK ve alt+186"

540 LOCATE 9,25:PRINT "alt+186 30 adet BOŞLUK ve alt+186"

550 LOCATE 10,25:PRINT "alt+186 30 adet BOŞLUK ve alt+186"

560 LOCATE 11,25:PRINT "alt+186 30 adet BOŞLUK ve alt+186"

570 LOCATE 12,25:PRINT "alt+186 30 adet BOŞLUK ve alt+186"

580 LOCATE 13,25:PRINT "alt+186 30 adet BOŞLUK ve alt+186"

590 LOCATE 14,25:PRINT "alt+186 30 adet BOŞLUK ve alt+186"

600 LOCATE 15,25:PRINT "alt+186 30 adet BOŞLUK ve alt+186"

610 LOCATE 16,25:PRINT "alt+200 30 adet alt+205 ve alt+188"

620 RETURN

Yukarıdaki kod satırlarında herhangi bir şekili (çizgiyi), mesela alt+205 ile oluşturduğumuz yatay çift çizgiyi (═) 30 kez yazmak yerine daha evvelki sayfalarda öğrendiğiniz STRING$ komutunu kullanarak tek bir komutla bir seferde 30 kez yazılmasını sağlayarak çizgi çizebilirsiniz. Ayrıca, (alt tuşunu basılı tutarak)PRINT komutunun önüne yazacağımız 201 rakamı ile elde edebileceğimiz ╔ (sol köşe çift çizgi) karakterini veya diğer karakterleri elde etmek için illa da bu yöntemi, yani Alt tuşu ile numara (201) yazma yöntemini kullanmak zorunda değiliz. PRINT komutunun önüne yazacağımız CHR$(201) cümlesi de aynı görevi görür. Dolayısıyla, verdiğim bu bilgilere göre 510 no lu satırı şöyle de yazabiliriz:

510 LOCATE 6,25:PRINT CHR$(201);:PRINT STRING$(30,205);:PRINT CHR$(187)

Şimdi yukarıdaki programa bakarsak (tabi bu bir programın sadece menü kısmı) 10 nolu satırda ekran siliniyor. 20 nolu satırda ise bir GOSUB 500 komutu var ki bunun anlamı şudur. 500 no 'lu satıra git ve oradaki işlemleri yap. Ne zamana kadar; Ta ki RETURN komutunu görünceye kadar. Bu RETURN komutunun anlamı ise NEREDEN GELDİYSEN ORAYA DÖN VE BİR ALT SATIRDAN DEVAM ET. Demek ki program 20 no lu satırdan 500 no lu satıra geldiğine göre 620 no lu satırda RETURN komutunu görünce 20 no lu satıra geri dönerek bir alt satırdan yani 30 no lu satırdan çalışmaya devam edecek. Eğer 160 no lu GOSUB 500 komutu ile 500 no lu satıra gitmiş ise 620 no lu satıra gelip RETURN komutunu görünce bu defa 160 no lu satıra geri dönüp bir alt satırdan yani 170 no lu satırdan çalışmaya devam edecektir.


24. Sayfa           26. Sayfa

INDEX