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ı 41184 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 #45 : Kasım 29, 2016, 12:18:12 ÖS »

ADE'de kullandığın makefile'ı kullanırsan öyle olur tabi.
Gönderdiğim arşivde SAS/C için uygun makefile vardı oysa ki.
yok senin makefile'ı kullandım ama alt klasör mantığını anlamadığımdan dolayı öyle derleyemedim.

Multiboot/makefiles/sas-c-classic çekmecesinden smake komutu verdiğimde main.c bulunamıyor
Multiboot çekmecesinden smake komutu verdiğimde de makefile bulunamıyor

Ben de makefile'ı main.c yanına taşıyarak denedim o da lnk dosyasıyla ilgili bir hata verdi. makefile içeriğini biraz düzenleyerek derlemeyi başardım ama bu sefer de EXE değişkeninin içeriğini umursamıyor ve main isminde executable oluşturuyor

Son hali aklımda yanlış kalmadıysa şöyle birşey:

Kod:
EXE    = MultiBoot

CC = sc:c/sc
LD = sc:c/sc

all : $(EXE)

main.o : main.c
$(CC) nolink main.c

OBJS = main.o

$(EXE) : $(OBJS)
$(LD) link $(OBJS)

clean:
-delete $(EXE)
-delete $(EXE).lnk
-delete $(EXE).info
-delete $(OBJS)
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 #46 : Kasım 29, 2016, 12:35:29 ÖS »

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.
Bu konuda yorum alabilir miyim? Execute komutunda sorun yok çünkü
Kod:
MultiBoot Echo "** Preparing" KS13OSLabel ""
sorunsuz çalışıyor. En sonunda hardcoded scripte döneceğim galiba.

Kodunun detaylarını incelememiştim ama şimdi bakıyorum da senin myAssign() fonksiyonun bana doğru gelmedi:
Kod:
char* assignCommand = "Echo Assign"; 

Bu satırdaki "Echo Assign" bence doğru değil. Orada sadece "Assign" yazması gerekiyor bence. Tahminimce ilgili Assign da oluşmuyordur.

Ekrana "Assign SYS: DH0:Workbench1.3" şeklinde bilgilendirme yapmak istiyorsan:
Kod:
Execute("Echo Assign SYS: DH0:Workbench1.3");
...satırı eklemelisin.

EDIT: Hayır hayır. Tekrar düşündüm de... koduna bilgilendirme satırı eklememelisin.
İstediğin bilgilendirmeyi Script'te Multiboot Echo ile yapmalısın.
« Son Düzenleme: Kasım 29, 2016, 12:39:29 ÖS Gönderen: Alpyre » Logged

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


Commodore Forever


Üyelik Bilgileri WWW
« Yanıtla #47 : Kasım 29, 2016, 14:33:32 ÖS »

Echo Assign debug amaçlı yazmıştım unutmuştum farkındayım ama 1.3 ile Echo komutu da işe yaramıyor, diğer KS versiyonlarında ekrana geliyor Echo'dan sonrası. Yani Assign'a çevirince de çalışmıyor haliyle.
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 #48 : Kasım 29, 2016, 15:37:36 ÖS »

Kodun son halini görmediğim için sorun tam olarak nerede bilemiyorum ancak bendeki printf()'li hali gayet iyi çalışıyor:


* SS1.gif (4.89 KB, 640x409 - Görüntüleme: 1745 kez.)

* SS2.gif (7.81 KB, 640x409 - Görüntüleme: 1799 kez.)
Logged

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


Commodore Forever


Üyelik Bilgileri WWW
« Yanıtla #49 : Kasım 29, 2016, 16:38:41 ÖS »

Kodun senin düzenlediğin halinde Echo Assign ifadesini sadece Assign yapıp derlermisin sana zahmet.
Kod:
SetEnv KS13OSDrawer DH0:Workbench1.3
MultiBoot Assign SYS: KS13OSDrawer

şeklinde test ettiğinde assign atanıyor mu 1.3'te?
« Son Düzenleme: Kasım 29, 2016, 16:40:29 Ö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 #50 : Kasım 29, 2016, 16:45:07 ÖS »

Kodun senin düzenlediğin halinde Echo Assign ifadesini sadece Assign yapıp derlermisin sana zahmet.

Ekran görüntüsündeki örneği o şekilde derledim zaten. Yoksa Assign atamazdı zaten, ekrana "Assing bla bla" yazardı.

Kod:
SetEnv KS13OSDrawer DH0:Workbench1.3
MultiBoot Assign SYS: KS13OSDrawer
şeklinde test ettiğinde assign atanıyor mu 1.3'te?

Teorik olarak ataması lazım. Şu an işyerine geçtim deneyemiyorum. Eve dönünce onu da denerim, ancak %99 eminim ki atayacaktır.
Logged

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


Commodore Forever


Üyelik Bilgileri WWW
« Yanıtla #51 : Kasım 29, 2016, 19:46:47 ÖS »

Evet sorunun benim sistemi full 1.3 disketinden değil de minimal komut ve dosya içeren bir ortamdan başlatmam olduğunu farketmiş bulunuyorum. 1.3'de Assign komutu Run komutu olmayınca (en azından benim MultiBoot komutu içinden çağrılınca) düzgün çalışmıyor, bunu da öğrenmiş olduk. Minimal C: çekmeceme Run komutunu da koyunca düzeldi. Tümden gelim tek tek dosyaları bir alt çekmeceye taşıyarak sorunu buldum. 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 #52 : Kasım 29, 2016, 20:31:45 ÖS »

E gözün aydın o zaman. Sevindim.

Yabancı forumlarda böyle durumlarda, konu başlığının sonuna [SOLVED] ekliyorlar.
Logged

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


Commodore Forever


Üyelik Bilgileri WWW
« Yanıtla #53 : Aralık 02, 2016, 20:58:35 ÖS »

Son durum: printf'lerden kurtulduğum yenine myEcho() fonksiyonunda harici Echo komutunu çağırdığım kod da çalışıyor fakat * işaretini bastıramıyorum bir türlü MultiBoot Echo ile.

Bu durumda ya printf'lere geri döneceğim ya da birileri Amiga stili ekrana birşeyler hangi fonksiyonla yazdırılır onu öğretecek. Kahkaha

makefile
Kod:
EXE = MultiBoot

CC = SC
LD = SC

all : $(EXE)

MultiBoot.o : MultiBoot.c
   $(CC) nolink MultiBoot.c

OBJS = MultiBoot.o

$(EXE) : $(OBJS)
   $(LD) link $(OBJS)

clean:
   -delete $(EXE)
   -delete $(EXE).info
   -delete $(EXE).lnk
   -delete $(OBJS)

MultiBoot.c
Kod:
#include <exec/memory.h>
#include <proto/exec.h>
#include <proto/dos.h>
#include <string.h>

#define BUFSIZE 108  // AmigaDOS Maximum Path Length + 1

const char __ver[40] = "$VER: MultiBoot 1.0 (27.11.2016)";

extern void exit(int);

void removeSpecial(char* outStr, char* inStr)
{
  int count = 0;
  while (inStr[count] != 0)
  {
    if ((inStr[count] >= 32) && (inStr[count] <= 127)) outStr[count] = inStr[count];
    count++;
  }
  outStr[count] = 0;
}

void getEnvVar(char *envVar, char* fileName)
{
  char buffer[BUFSIZE] = {0};
  BPTR envFile = Open(fileName, MODE_OLDFILE);
  if (envFile)
  {
    Read(envFile, buffer, BUFSIZE);
    Close(envFile);
    removeSpecial(envVar, buffer);
  }
}

void myEcho(char* echoText1, char* echoText2, char* echoText3)
{
  char* echoCommand = "Echo";
  char* commandLine = (char*) AllocMem(strlen(echoCommand) + strlen(echoText1) + strlen(echoText2) + strlen(echoText3) + 6, MEMF_PUBLIC | MEMF_CLEAR);
  strcat(commandLine, echoCommand);
  strcat(commandLine, " \"");
  strcat(commandLine, echoText1);
  strcat(commandLine, " ");
  strcat(commandLine, echoText2);
  strcat(commandLine, " ");
  strcat(commandLine, echoText3);
  strcat(commandLine, "\"");
  Execute(commandLine, NULL, NULL);
  FreeMem(commandLine, strlen(commandLine));
}

void myAssign(char* assignName, char* assignDrawer)
{
  char* assignCommand = "Assign";
  char* commandLine = (char*) AllocMem(strlen(assignCommand) + strlen(assignName) + strlen(assignDrawer) + 5, MEMF_PUBLIC | MEMF_CLEAR);
  strcat(commandLine, assignCommand);
  strcat(commandLine, " ");
  strcat(commandLine, assignName);
  strcat(commandLine, " \"");
  strcat(commandLine, assignDrawer);
  strcat(commandLine, "\"");
  Execute(commandLine, NULL, NULL);
  FreeMem(commandLine, strlen(commandLine));
}

int myExists(char* existsDrawer)
{
  BPTR lock = Lock(existsDrawer, ACCESS_READ);
  if (lock)
  {
    UnLock (lock);
    return(RETURN_OK);
  }
  return(RETURN_WARN);
}

int main(int argc, char* argv[])
{
  int returnCode = RETURN_OK;
  struct Library *DOSBase = NULL;
  if (DOSBase = OpenLibrary(DOSNAME, 33))
  {
    if (argc > 1)
    {
      if (stricmp(argv[1], "Assign") == 0)
      {
        if (argc > 3)
        {
          char assignDrawer[BUFSIZE];
          char* envPrefix = "ENV:";
          char* envFile = (char*) AllocMem(strlen(envPrefix) + strlen(argv[3]) + 1, MEMF_PUBLIC | MEMF_CLEAR);
          strcat(envFile, envPrefix);
          strcat(envFile, argv[3]);
          getEnvVar(assignDrawer, envFile);
          FreeMem(envFile, strlen(envFile));
          if (strlen(assignDrawer) > 0) myAssign(argv[2], assignDrawer);
        }
        else
        {
          myEcho("Usage:", argv[0], "Assign Name Drawer");
        }
      }
      else if (stricmp(argv[1], "Echo") == 0)
      {
        if (argc > 4)
        {
          char echoText[BUFSIZE];
          char* envPrefix = "ENV:";
          char* envFile = (char*) AllocMem(strlen(envPrefix) + strlen(argv[3]) + 1, MEMF_PUBLIC | MEMF_CLEAR);
          strcat(envFile, envPrefix);
          strcat(envFile, argv[3]);
          getEnvVar(echoText, envFile);
          FreeMem(envFile, strlen(envFile));
          if (strlen(echoText) > 0) myEcho(argv[2], echoText, argv[4]);
        }
        else
        {
          myEcho("Usage:", argv[0], "Echo Text1 Text2 Text3");
        }
      }
      else if (stricmp(argv[1], "Exists") == 0)
      {
        if (argc > 2)
        {
          char existsDrawer[BUFSIZE];
          char* envPrefix = "ENV:";
          char* envFile = (char*) AllocMem(strlen(envPrefix) + strlen(argv[2]) + 1, MEMF_PUBLIC | MEMF_CLEAR);
          strcat(envFile, envPrefix);
          strcat(envFile, argv[2]);
          getEnvVar(existsDrawer, envFile);
          FreeMem(envFile, strlen(envFile));
          if (strlen(existsDrawer) > 0) returnCode = myExists(existsDrawer);
        }
        else
        {
          myEcho("Usage:", argv[0], "Exists DrawerName");
        }
      }
      else
      {
        myEcho("Usage:", argv[0], "[Assign/Echo/Exists] Parameters");
      }
    }
    else
    {
      myEcho("Usage:", argv[0], "[Assign/Echo/Exists] Parameters");
    }
    CloseLibrary(DOSBase);
  }
  else
  {
    // myEcho("Unable to open dos.library", "", "");
    returnCode = RETURN_ERROR;
  }
  exit(returnCode);
}
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 #54 : Aralık 02, 2016, 21:13:13 ÖS »

printf()'lere dönmende bir sakınca görmüyorum. Lakin SAS/C ile derlerken kodun kendi printf() implementasyonunu içeren amiga.lib ile linkleniyor ki standart kütüphaneden bir sembol kullanmana rağmen standart kütüphane kullanılmamış oluyor.

Hatta kodunun printf()'li hali, Execute("Echo ...")'lu haline göre çok daha optimize çalışacaktır diye düşünüyorum.
Logged

Alper
Alpyre
Uzman
*****
Mesaj Sayısı: 2.237



Üyelik Bilgileri WWW
« Yanıtla #55 : Aralık 02, 2016, 21:18:34 ÖS »

...ve hatta bana sorarsan Execute("Assign ...") kullanmak yerine dos.library fonksiyonu AssignPath()'i kullansan daha daha da optimize olacaktır.
Logged

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


Commodore Forever


Üyelik Bilgileri WWW
« Yanıtla #56 : Aralık 02, 2016, 21:39:51 ÖS »

...ve hatta bana sorarsan Execute("Assign ...") kullanmak yerine dos.library fonksiyonu AssignPath()'i kullansan daha daha da optimize olacaktır.

Bana bunlarla gel abicim.

http://amigadev.elowar.com/read/ADCD_2.1/Includes_and_Autodocs_3._guide/node0142.html

Bu (V36) ibaresi bu fonksiyonun Kickstart 2.0 ile geldiğini göstermyor değil mi?
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 #57 : Aralık 02, 2016, 22:28:58 ÖS »

Bu (V36) ibaresi bu fonksiyonun Kickstart 2.0 ile geldiğini göstermyor değil mi?

Ooops! Evet gösteriyor.
O zaman sadece printf()... Kahkaha
Logged

Alper
emarti
Uzman
*****
Mesaj Sayısı: 2.600


Only Amiga Makes It Possible █


Üyelik Bilgileri WWW
« Yanıtla #58 : Aralık 06, 2016, 20:34:02 ÖS »

@Simon abi şu multiboot kullanımını biraz açar mısın? Nasıl kullanacağız?
Logged

https://github.com/emartisoft My GitHUB | http://csdb.dk/scener/?id=26786 My CSDB | https://c64kernal.com Genesis

READY.
SYS(64767): EMARTI
Simon (Özay Turay)
Yönetici
*****
Mesaj Sayısı: 7.757


Commodore Forever


Üyelik Bilgileri WWW
« Yanıtla #59 : Aralık 06, 2016, 23:27:19 ÖS »

@Simon abi şu multiboot kullanımını biraz açar mısın? Nasıl kullanacağız?

MultiBoot sadece bir şekilde Amiga'sında ROM Switcher olanların işine yarayacak. Şöyle ki, eğer sistemi 1.3 ROM ile açarsam Workbench 1.3 yüklensin, 3.0 ROM ile açarsam Workbench 3.1 yüklensin, 3.1 ROM ile açarsam ClassicWB LITE yüklensin, üstelik bunu yapmak için sadece bir tane bootable partition yeterli olsun gibi.

Tabi buna paralel bir de 4 adet ROM arasında geçiş yapabilen, CTRL+Amiga+Amiga tuşlarına 5 saniyeden uzun basınca bir sonraki ROM'a geçiş yapabileceğimiz, böylece kasayı delip switch falan takmamız gerekmeyecek bir ROM Switcher projesi de olacak. Karizmatik
« Son Düzenleme: Aralık 06, 2016, 23:29:36 Ö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
Sayfa: 1 2 3 [4] 5   Yukarı git
Yazdır
Gitmek istediğiniz yer: