Seite 1 von 1

Basic-Progamm von C aus starten (war Bitte um kleine Änderung)

Verfasst: So Feb 13, 2022 7:22 pm
von Mr. Jones
Hallo zusammen,

ich habe leider keine Ahnung von C-Programmierung und brauche deshalb Hilfe bei einem völlig banalen Problem.
Mein zusammengefrickeltes kleines C Programm funktioniert aber hat eine kleine Merkwürdigkeit die noch behoben werden müsste.
Ich möchte gerne einen Basic-Interpreter direkt mit einem Basic Programm laden aber nur einen "Befehl" starten.
Zur Zeit muss ich folgendes eingeben:

basic GAME.BAS

Ich habe es inzwischen geschafft ein kleines C-Programm zu schreiben was zwar letztendlich genau das macht aber ich muss 8 mal eine Taste drücken damit das Argument auch berücksichtigt wird. 8 mal weil eben die Datei GAME.BAS insgesamt aus 8 Stellen besteht.
Ich weiß dass das totaler Schwachsinn ist aber leider habe ich es nur so hinbekommen.
Kann mir jemand schreiben wie ich den nachfolgenden Code umschreiben muss um das Resultat direkt zu bekommen?

Code: Alles auswählen

main(argv)
  char ** argv;
{
  char ** _getargs();
  argv = _getargs(0, "GAME.BAS");
  execv("basic",argv,0);
}


Vielen Dank schon mal im voraus!!!

Re: Bitte um kleine Änderung

Verfasst: So Feb 13, 2022 8:05 pm
von Xin
Wer oder was kompiliert das denn!?
Wo kommt das Programm her? Das ist ja ein Stil, der schon lange verboten gehört. :-D

Wie sieht's damit aus?

Code: Alles auswählen

#include <unistd.h> // Linux

int main( int argc, char ** argv )
{
  char * myArgv[] = { "GAME.BAS", 0 };
  evecvp( "basic", myArgv );
};

Re: Basic-Progamm von C aus starten (war Bitte um kleine Änderung)

Verfasst: So Feb 13, 2022 8:27 pm
von Mr. Jones
Hallo @Xin,

das ist ein alter CP/M C Compiler von der Firma HiTech.

Viele Dank für Deine Hilfe aber leider spuckt der Compiler bei Deiner Korrektur eine Fehlermeldung aus .

Can't initialise auto aggregates

Re: Bitte um kleine Änderung

Verfasst: So Feb 13, 2022 8:41 pm
von Mr. Jones
Xin hat geschrieben:
So Feb 13, 2022 8:05 pm
Wer oder was kompiliert das denn!?
Wo kommt das Programm her? Das ist ja ein Stil, der schon lange verboten gehört. :-D
Ja, das ist das Problem. Die Syntax kann ich von den aktuellen Stil nicht einfach übernehmen.

Die Dokumentation von Hi Tech findest Du hier:

https://github.com/agn453/HI-TECH-Z80-C/tree/master/doc

wärst Du so nett und schaust Dir das mal an?

Re: Bitte um kleine Änderung

Verfasst: So Feb 13, 2022 11:26 pm
von Xin
Mr. Jones hat geschrieben:
So Feb 13, 2022 8:41 pm
Xin hat geschrieben:
So Feb 13, 2022 8:05 pm
Wer oder was kompiliert das denn!?
Wo kommt das Programm her? Das ist ja ein Stil, der schon lange verboten gehört. :-D
Ja, das ist das Problem. Die Syntax kann ich von den aktuellen Stil nicht einfach übernehmen.

Die Dokumentation von Hi Tech findest Du hier:

https://github.com/agn453/HI-TECH-Z80-C/tree/master/doc
Ähh... okay... 1989... ich habe 1994 mit C angefangen, wenn ich mich recht entsinne...
Mr. Jones hat geschrieben:
So Feb 13, 2022 8:41 pm
wärst Du so nett und schaust Dir das mal an?
Nein. Mit der Fehlermeldung kann ich nix anfangen, aber ich habe einen Verdacht und vermutlich spuckt der Compiler auch noch Zeilennummern aus.

Besteht die Chance, dass man das mal über Discord/Skype/Teamviewer macht, bevor ich mich jetzt in einen 1989er C-Compiler einlese, um Dir dann geratene Quellcodes zu schicken?

Re: Basic-Progamm von C aus starten (war Bitte um kleine Änderung)

Verfasst: Mo Feb 14, 2022 6:10 pm
von Mr. Jones
Vielen Dank für die Unterstützung!

Jetzt klappt es endlich!

Nur zur Vervollständigung des Threads hier die Lösung:

Code: Alles auswählen

main()
{
   execl( "basic", "GAME.BAS", "GAME.BAS", 0 );
}

Re: Basic-Progamm von C aus starten (war Bitte um kleine Änderung)

Verfasst: Mo Feb 14, 2022 7:12 pm
von Xin
Mr. Jones hat geschrieben:
Mo Feb 14, 2022 6:10 pm
Vielen Dank für die Unterstützung!

Jetzt klappt es endlich!

Nur zur Vervollständigung des Threads hier die Lösung:

Code: Alles auswählen

main()
{
   execl( "basic", "GAME.BAS", "GAME.BAS", 0 );
}
Hier wäre als erstes Argument nochmal "basic" gefragt.

Code: Alles auswählen

   execl( "basic", "basic", "GAME.BAS", 0 );
Du rufst das Programm "basic" und teilst ihm dann mit, dass Du es unter dem Namen "basic" gerufen hast mit dem 1. Parameter "GAME.BAS".

Zugegenermaßen eher eine Formalität, wenn's schon läuft.