Merhaba, Ziyaretçi. Lütfen giriş yapın veya üye olun.

Kullanıcı adınızı, parolanızı ve aktif kalma süresini giriniz

  Gelişmiş Arama
insanın içinde varsa, commodore.gen.tr açığa çıkarır bunu.. bir nevi retro olaylarının dolunayıyız.(Arda)
commodore.gen.trAmigaAmiga YazılımAmigaOS 1.3 Ortam Değişkenleri Problemi
Sayfa: 1 [2] 3 4 5   Aşağı git
Yazdır
Gönderen Konu: AmigaOS 1.3 Ortam Değişkenleri Problemi  (Okunma Sayısı 41199 defa)
0 Üye ve 1 Ziyaretçi konuyu incelemekte.
Simon (Özay Turay)
Yönetici
*****
Mesaj Sayısı: 7.757


Commodore Forever


Üyelik Bilgileri WWW
« Yanıtla #15 : Kasım 26, 2016, 14:32:34 ÖS »

...ya da C ile ENV:'den ilgili ortam değişkenlerini okuyup gerekli Assign'ı oluşturacak yeni bir komut geliştirip onu kullanacaksın.
Bu dediğini yaptım. Karizmatik
Ama hadi Echo satırları için de yaptık diyelim, IF EXISTS için nasıl yaparız. MyExists diye bir komut mu yazmak gerekecek. Kahkaha

Kodun değişkensiz hardcoded hali:

C:Version >NIL: exec.library 35  ;Kickstart 1.3
IF WARN
  IF EXISTS SYS:Workbench1.3
    Echo "** Preparing Workbench1.3"
    Assign >NIL: SYS: SYS:Workbench1.3
    Skip SetAssigns
  Else
    Echo "Error: SYS:Workbench1.3 Drawer Not Present"
    Echo ""
    Skip Done
  EndIF
EndIF


Değişkenli hali (temsili):

C:Version >NIL: exec.library 35  ;Kickstart 1.3
IF WARN
  IF EXISTS SYS:Workbench1.3
    MyEcho "** Preparing" KS13OSLabel
    MyAssign SYS: KS13OSDrawer
    Skip SetAssigns
  Else
    MyEcho "Error:" KS13OSDrawer "Drawer Not Present"
    Echo ""
    Skip Done
  EndIF
EndIF
Logged

https://retrodergi.com - https://e-turay.com - https://karizmawow.e-turay.com

Retro: Commodore 64, Amiga 500, Amiga 1200
Retromsu: Wii, XBox360, XBox, PS3 Slim, PS2 FAT, PS1, PS Vita, Nintendo 3DS, Nintendo 2DS
Alpyre
Uzman
*****
Mesaj Sayısı: 2.237



Üyelik Bilgileri WWW
« Yanıtla #16 : Kasım 26, 2016, 14:46:39 ÖS »

EXISTS, IF'in keyword'ü olduğu için belki halihazırda ortam değişkenlerini destekliyordur.
Logged

Alper
Simon (Özay Turay)
Yönetici
*****
Mesaj Sayısı: 7.757


Commodore Forever


Üyelik Bilgileri WWW
« Yanıtla #17 : Kasım 26, 2016, 15:42:40 ÖS »

Maalesef desteklemiyormuş. Ney

MakeDir >NIL: RAM:ENV
Assign >NIL: ENV: RAM:ENV

SetEnv OSDrive SYS
SetEnv KS13OSDrawer Workbench1.3

IF EXISTS $OSDrive:$KS13OSDrawer
  Echo "OK"
EndIF


Alıntı
Please insert volume $OSDrive in any drive
Logged

https://retrodergi.com - https://e-turay.com - https://karizmawow.e-turay.com

Retro: Commodore 64, Amiga 500, Amiga 1200
Retromsu: Wii, XBox360, XBox, PS3 Slim, PS2 FAT, PS1, PS Vita, Nintendo 3DS, Nintendo 2DS
Alpyre
Uzman
*****
Mesaj Sayısı: 2.237



Üyelik Bilgileri WWW
« Yanıtla #18 : Kasım 26, 2016, 16:35:56 ÖS »

O zaman MyExists diye bir komut yazacaksın mecbur.

Tereciye tere satmak gibi olacak ama nasıl yazacağına dair bir iki tüyo verebilirim.

MyAssign'da yaptığın gibi argc'den argümanı al ve ENV:'deki ortam değişkenlerini okuyup dosya adını oluşturmasını sağla.

dosya adı örneğin fileName olsun:
Kod:
STPTR fileName;
BPTR lock;
BOOL exists = FALSE;

Sonra Lock() ile bu dosyaya DOS kilidi almaya çalış.

Kod:
lock = Lock( fileName, ACCESS_READ );

Sonra kilit alıp alamadığını kontrol et:
Kod:
if (lock)
{
  UnLock (lock);
  exists = TRUE;
}

if (exists)
  exit (RETURN_OK);
else
  exit (RETURN_WARN);

...şeklinde programdan çıkmasını sağla (tabi allocation falan yaptıysan onları temizle ve kütüphaneleri kapat).

Şimdi script'tinde IF WARN (veya IF NOT WARN) kullanarak dosyanın varlığını sorgulayabilirsin. Haydi kolay gelsin.
« Son Düzenleme: Kasım 26, 2016, 16:47:43 ÖS Gönderen: Alpyre » Logged

Alper
Simon (Özay Turay)
Yönetici
*****
Mesaj Sayısı: 7.757


Commodore Forever


Üyelik Bilgileri WWW
« Yanıtla #19 : Kasım 28, 2016, 00:50:21 ÖÖ »

Hepsini yaptım. myAssign, myEcho ve myExists komutlarını içeren MultiBoot isminde bir program yazdım. Şöyle kullanılıyor:

SetEnv KS13OSDrawer DH0:Workbench1.3
SetEnv KS13OSLabel "Workbench 1.3"

C:Version >NIL: exec.library 35  ;Kickstart 1.3
IF WARN
  MultiBoot Exists KS13OSDrawer
  IF NOT WARN
    MultiBoot Echo "** Preparing" KS13OSLabel ""
    MultiBoot Assign SYS: KS13OSDrawer
    Skip SetAssigns
  Else
    MultiBoot Echo "Error: " KS13OSDrawer "Drawer Not Present"
    Echo ""
    Skip Done
  EndIF
EndIF


Lakin ufak bir sorun var. Program Kickstart 1.3 ile çalışmıyor. Kahkaha

Hata mesajı: "Need version 37 of dos.library" halbuki:

Kod:
int main(int argc, char* argv[])
{
  int returnCode = RETURN_OK;
  struct Library *DOSBase = NULL;
  if (DOSBase = OpenLibrary(DOSNAME, 33))
  {
   
    // Program Kodları Burada
   
    CloseLibrary(DOSBase);
  }
  else
  {
    printf("Unable to open dos.library\n");
    returnCode = RETURN_ERROR;
  }
  exit(returnCode);
}

şeklinde dos.library 33 ve yukarısında çalışması gerektiğini tanımlamışım. 33 yerine 0 da denedim o da olmuyor.

MultiBoot 2.05, 3.0, 3.1 kickstartlarda sorunsuz çalışıyor. Bir el atıverin şuna da hatayı bulalım. Masum

ADE ile derledim. Kaynak kodu ve derlenmiş hali: MultiBootSource.zip
Logged

https://retrodergi.com - https://e-turay.com - https://karizmawow.e-turay.com

Retro: Commodore 64, Amiga 500, Amiga 1200
Retromsu: Wii, XBox360, XBox, PS3 Slim, PS2 FAT, PS1, PS Vita, Nintendo 3DS, Nintendo 2DS
Alpyre
Uzman
*****
Mesaj Sayısı: 2.237



Üyelik Bilgileri WWW
« Yanıtla #20 : Kasım 28, 2016, 05:54:00 ÖÖ »

Tahminimce -noixemul ile derliyorsun. Bu kodunu libnix ile linkleyerek derler. ADE'deki libnix de muhtemelen kendi ihtiyacı olan dos.library'yi açmak istiyordur.

Bu uygulamayı sadece shell'den çalıştıracağını hesaba katarsak -nostdlib ile derleyerek bu sorunu çözebileceğini düşünüyorum (tabi kodunda standart kütüphaneden hiçbir fonksiyon kullanmamış olman gerekiyor - mobil'deyim koda bakamıyorum).

Ya da OS1.3'e uygun legacy bir derleyici bulup onunla derlemek de çözüm olabilir.
Logged

Alper
Simon (Özay Turay)
Yönetici
*****
Mesaj Sayısı: 7.757


Commodore Forever


Üyelik Bilgileri WWW
« Yanıtla #21 : Kasım 28, 2016, 14:30:07 ÖS »

Akşam bir de Linux'ta derleyeyim bakalım ne olacak.
Logged

https://retrodergi.com - https://e-turay.com - https://karizmawow.e-turay.com

Retro: Commodore 64, Amiga 500, Amiga 1200
Retromsu: Wii, XBox360, XBox, PS3 Slim, PS2 FAT, PS1, PS Vita, Nintendo 3DS, Nintendo 2DS
Alpyre
Uzman
*****
Mesaj Sayısı: 2.237



Üyelik Bilgileri WWW
« Yanıtla #22 : Kasım 28, 2016, 14:52:31 ÖS »

Hastaneden şimdi eve gelebildim sonunda.
Kodunu inceledim biraz. Hep standart kütüphaneden yardırmışsın... Kahkaha

Neyse... Kodunda bir kaç ufak değişiklik yaptım. SAS/C ile ve Amiga.lib ile linkleyerek derledim.

OS1.3'de denedim çalıştı. Hem de dosya daha küçük oldu.

NOT: Çalışan executable dosyan bin/sas-c-classic çekmecesinin içinde.
NOT2: Kodunda debug amaçlı yazdığını tahmin ettiğim bazı printf()'leri devre dışı bıraktım.
NOT3: Dosya aslında LHA dosyası. Foruma LHA yüklenmediği için uzantısını ZIP yaptım. Buna rağmen WinRAR ve Amiga'daki UnArc çok akıllı olduğu için adını değiştirmeden de sorunsuz açılabiliyor.... fakat neden biz foruma LHA yükleyemiyoruz? Buna bir el atın yönetici olarak lütfen. Amiga'cılar olarak çok hoşnutsuzuz bu durumdan.

* MultiBoot.zip (11.84 KB - Yükleme: 564 kez.)
Logged

Alper
Simon (Özay Turay)
Yönetici
*****
Mesaj Sayısı: 7.757


Commodore Forever


Üyelik Bilgileri WWW
« Yanıtla #23 : Kasım 28, 2016, 15:17:26 ÖS »

Eline sağlık. Akşam deniyorum hemen. Kaynak kodunu da ekleseydin de biz de birşeyler öğrenseydik inceleyerek. Kahkaha

@LW3D: lha dosyaları konusunda top sende.
« Son Düzenleme: Kasım 28, 2016, 15:21:03 ÖS Gönderen: Simon (Özay Turay) » Logged

https://retrodergi.com - https://e-turay.com - https://karizmawow.e-turay.com

Retro: Commodore 64, Amiga 500, Amiga 1200
Retromsu: Wii, XBox360, XBox, PS3 Slim, PS2 FAT, PS1, PS Vita, Nintendo 3DS, Nintendo 2DS
Alpyre
Uzman
*****
Mesaj Sayısı: 2.237



Üyelik Bilgileri WWW
« Yanıtla #24 : Kasım 28, 2016, 15:41:48 ÖS »

...Kaynak kodunu da ekleseydin de biz de birşeyler öğrenseydik inceleyerek. Kahkaha
Kaynak kodu da içinde...
Logged

Alper
LW3D
Yönetici
*****
Mesaj Sayısı: 11.417


Günü Kurtaran Avam Hiooargggh :)


Üyelik Bilgileri WWW
« Yanıtla #25 : Kasım 28, 2016, 15:52:35 ÖS »

.lha desteklenmez olur mu hiç...Lütfen  Masum

* MultiBoot.lha (11.84 KB - Yükleme: 313 kez.)
Logged

Simon (Özay Turay)
Yönetici
*****
Mesaj Sayısı: 7.757


Commodore Forever


Üyelik Bilgileri WWW
« Yanıtla #26 : Kasım 28, 2016, 16:01:32 ÖS »

...Kaynak kodunu da ekleseydin de biz de birşeyler öğrenseydik inceleyerek. Kahkaha
Kaynak kodu da içinde...
Ha ha ha, ben alt klasörlere odaklanmışım koskoca main.c dosyasını görmemişim. Kahkaha
Logged

https://retrodergi.com - https://e-turay.com - https://karizmawow.e-turay.com

Retro: Commodore 64, Amiga 500, Amiga 1200
Retromsu: Wii, XBox360, XBox, PS3 Slim, PS2 FAT, PS1, PS Vita, Nintendo 3DS, Nintendo 2DS
Alpyre
Uzman
*****
Mesaj Sayısı: 2.237



Üyelik Bilgileri WWW
« Yanıtla #27 : Kasım 28, 2016, 16:10:54 ÖS »

.lha desteklenmez olur mu hiç...Lütfen  Masum
Wouuw! Ne çabuk? Kahkaha
Logged

Alper
Simon (Özay Turay)
Yönetici
*****
Mesaj Sayısı: 7.757


Commodore Forever


Üyelik Bilgileri WWW
« Yanıtla #28 : Kasım 28, 2016, 19:26:38 ÖS »

OS1.3'de denedim çalıştı.

Şimdi denedim ve dediğin gibi çalışıyor. Bir tek Assign komutunu debug amaçlı Echo Assign yapmıştım onu düzeltmek için yeniden derlemem lazım. SAS/C'yi buradan indirsek işimizi görür mü?

Edit: Şimdi farkettim MultiBoot Assign SYS: KS13OSDrawer komutu 1.3 ROM'da ekrana Assign SYS: DH0:Workbench1.3 (Assign yerine Echo Assign yüzünden) yazdırması gerekirken hiçbir şey yazdırmıyor. Diğer ROM'lar ile beklendiği gibi çalışıyor.
« Son Düzenleme: Kasım 28, 2016, 19:33:56 ÖS Gönderen: Simon (Özay Turay) » Logged

https://retrodergi.com - https://e-turay.com - https://karizmawow.e-turay.com

Retro: Commodore 64, Amiga 500, Amiga 1200
Retromsu: Wii, XBox360, XBox, PS3 Slim, PS2 FAT, PS1, PS Vita, Nintendo 3DS, Nintendo 2DS
witchdoktor
Uzman
*****
Mesaj Sayısı: 6.238



Üyelik Bilgileri
« Yanıtla #29 : Kasım 28, 2016, 19:57:32 ÖS »

Ben tuttum bu ikiliyi! Başka konularda da açılımlar, zihin jimnastiği uygulamaları bekliyoruz
Logged
Sayfa: 1 [2] 3 4 5   Yukarı git
Yazdır
Gitmek istediğiniz yer: