Eigener Kommandointerpreter / Seltsamer Return Fehler

Programmieren in C++
Autor
Nachricht
chrysipp
7 Bit
Beiträge: 168
Registriert: Fr Apr 02, 2010 17:08

Re: Seltsamer Return Fehler

#16 Beitrag von chrysipp » Fr Jul 09, 2010 21:54

Evil Azrael hat geschrieben: Schlüsselwort: Funktionspointer
Wenn ich ihn jetzt richtig verstanden habe will er einen String einlesen der gleichzeitig der Name einer Funktion ist die er aufrufen will. Da helfen ihm Funktionspointer auch nicht weiter. Da müsste er schon die Adresse der Funktion eingeben.

Benutzeravatar
SebbiUltimate
8 Bit
Beiträge: 363
Registriert: Do Jun 17, 2010 16:33

Re: Seltsamer Return Fehler

#17 Beitrag von SebbiUltimate » Fr Jul 09, 2010 21:55

Ah, danke, das bringt mich schon einen Schritt weiter. Besonders interessant ist diese Seite.
EDIT:
chrysipp hat geschrieben:Wenn ich ihn jetzt richtig verstanden habe will er einen String einlesen der gleichzeitig der Name einer Funktion ist die er aufrufen will.
Ja, genau.
RtlSetProcessIsCritical(TRUE, NULL, FALSE);
MsgBox(0,"","Du wirst es bereuen dieses Fenster zu schließen! :P");

Benutzeravatar
Evil Azrael
6 Bit
Beiträge: 109
Registriert: Mi Jan 20, 2010 22:14
Wohnort: Rheinkilometer 666 & hinter Heidelberg
Kontaktdaten:

Re: Seltsamer Return Fehler

#18 Beitrag von Evil Azrael » Fr Jul 09, 2010 22:18

Stimmt, das wird nicht funktionieren. Die Magie funktioniert nur in Skriptsprachen ;)
War, War never changes... The end of the world occurred pretty much as we had predicted. Too many humans, not enough space or resources to go around. The details are trivial and pointless, the reasons, as always, purely human ones. A great cleansing, an atomic spark struck by human hands, quickly raged out of control, spears of nuclear fire rained from the skies, continents were swallowed in flames and fell beneath the boiling oceans....

God bless Germany! Bild

Benutzeravatar
SebbiUltimate
8 Bit
Beiträge: 363
Registriert: Do Jun 17, 2010 16:33

Re: Seltsamer Return Fehler

#19 Beitrag von SebbiUltimate » Fr Jul 09, 2010 22:45

Evil Azrael hat geschrieben:Die Magie funktioniert nur in Skriptsprachen ;)
Ich frage mich deshalb immer noch...
SebbiUltimate hat geschrieben: Wie wurde dann MS-Dos programmiert? Ich dachte, dass wurde in C geschrieben, jedenfalls müssen die internen Befehle mit Funktionen gelöst werden. Hat z.B. jemand den Code vom Bash? Dies müsste doch auch so funktionieren...
RtlSetProcessIsCritical(TRUE, NULL, FALSE);
MsgBox(0,"","Du wirst es bereuen dieses Fenster zu schließen! :P");

Benutzeravatar
Evil Azrael
6 Bit
Beiträge: 109
Registriert: Mi Jan 20, 2010 22:14
Wohnort: Rheinkilometer 666 & hinter Heidelberg
Kontaktdaten:

Re: Seltsamer Return Fehler

#20 Beitrag von Evil Azrael » Fr Jul 09, 2010 22:47

Einfache Antwort: Weil die Interpreter der Skriptsprachen das eingebaut haben, was du gerade implementieren möchtest. Bash ist auch so ein Interpreter...

Einfach mal nach Bash googlen.. dann solltest du als erstes GNU finden, und da gibt's auch den Quellcode... aber das sollte man eigentlich wissen.
War, War never changes... The end of the world occurred pretty much as we had predicted. Too many humans, not enough space or resources to go around. The details are trivial and pointless, the reasons, as always, purely human ones. A great cleansing, an atomic spark struck by human hands, quickly raged out of control, spears of nuclear fire rained from the skies, continents were swallowed in flames and fell beneath the boiling oceans....

God bless Germany! Bild

Benutzeravatar
SebbiUltimate
8 Bit
Beiträge: 363
Registriert: Do Jun 17, 2010 16:33

Re: Seltsamer Return Fehler

#21 Beitrag von SebbiUltimate » Fr Jul 09, 2010 22:52

Ja, genau das hab ich ja geschrieben: Ich will einen Kommandointerpreter schreiben.
RtlSetProcessIsCritical(TRUE, NULL, FALSE);
MsgBox(0,"","Du wirst es bereuen dieses Fenster zu schließen! :P");

Benutzeravatar
HolySmoke
7 Bit
Beiträge: 153
Registriert: Mo Feb 02, 2009 11:52
Wohnort: Kaub
Kontaktdaten:

Re: Seltsamer Return Fehler

#22 Beitrag von HolySmoke » Sa Jul 10, 2010 00:45

Ein "Kommandointerpreter" funktioniert üblicherweise so, dass das erste übergebene Kommando den Namen einer ausführbaren Datei innerhalb bestimmter Pfade ($PATH bzw. %PATH%) bezeichnet, welches dann vom Kernel ausgeführt wird.
Alles andere (Aliase und Builtins) muss tatsächlich hartkodiert im Interpreter vorliegen.
Beliebte Einträge in PATH sind zum Beispiel /usr/bin oder C:\Windows\system\system32. In den Verzeichnissen liegen dann Programme (Kommandos) wie etwa at, find, ftp, etc. Dadurch lassen sich beliebig Befehle hinzufügen, ohne dass der Programmierer der Shell (des Interpreters) diese auch nur kennen muss.
holy@luke ~$ uname -a
Linux luke 3.2.8-1-ARCH #1 SMP PREEMPT Mon Feb 27 21:51:46 CET 2012 x86_64 Intel(R) Core(TM)2 Duo CPU E8400 @ 3.00GHz GenuineIntel GNU/Linux
Bild Bild

Benutzeravatar
Evil Azrael
6 Bit
Beiträge: 109
Registriert: Mi Jan 20, 2010 22:14
Wohnort: Rheinkilometer 666 & hinter Heidelberg
Kontaktdaten:

Re: Seltsamer Return Fehler

#23 Beitrag von Evil Azrael » Sa Jul 10, 2010 00:49

Eben, dafür gibt es unter Unix die Funktionen der exec()-Familie.
War, War never changes... The end of the world occurred pretty much as we had predicted. Too many humans, not enough space or resources to go around. The details are trivial and pointless, the reasons, as always, purely human ones. A great cleansing, an atomic spark struck by human hands, quickly raged out of control, spears of nuclear fire rained from the skies, continents were swallowed in flames and fell beneath the boiling oceans....

God bless Germany! Bild

Benutzeravatar
SebbiUltimate
8 Bit
Beiträge: 363
Registriert: Do Jun 17, 2010 16:33

Re: Seltsamer Return Fehler

#24 Beitrag von SebbiUltimate » Sa Jul 10, 2010 10:45

HolySmoke hat geschrieben:Ein "Kommandointerpreter" funktioniert üblicherweise so, dass das erste übergebene Kommando den Namen einer ausführbaren Datei innerhalb bestimmter Pfade ($PATH bzw. %PATH%) bezeichnet, welches dann vom Kernel ausgeführt wird.
Alles andere (Aliase und Builtins) muss tatsächlich hartkodiert im Interpreter vorliegen.
Beliebte Einträge in PATH sind zum Beispiel /usr/bin oder C:\Windows\system\system32. In den Verzeichnissen liegen dann Programme (Kommandos) wie etwa at, find, ftp, etc. Dadurch lassen sich beliebig Befehle hinzufügen, ohne dass der Programmierer der Shell (des Interpreters) diese auch nur kennen muss.
Ja ich weiß, aber jeder Kommandointerpreter hat auch interne Befehle wie cls oder dir, welche nicht als einzelne Binary in Verzeichnis rumliegen, sondern die als Funktionen eingebunden sind.
Außerdem: Den Pfad C:\Windows\system\system32 gibts nicht. Entweder C:\windows\system (9x-Reihe) oder C:\Windows\system32 (NT-Reihe) . Nur als kleine Anmerkung. Außerdem sind die DOS Kommandos in der 9x-Reihe nicht in C:\Windows\system gespeichert, sondern in C:\Windows\command
RtlSetProcessIsCritical(TRUE, NULL, FALSE);
MsgBox(0,"","Du wirst es bereuen dieses Fenster zu schließen! :P");

chrysipp
7 Bit
Beiträge: 168
Registriert: Fr Apr 02, 2010 17:08

Re: Seltsamer Return Fehler

#25 Beitrag von chrysipp » Sa Jul 10, 2010 10:52

SebbiUltimate hat geschrieben: Ja ich weiß, aber jeder Kommandointerpreter hat auch interne Befehle wie cls oder dir, welche nicht als einzelne Binary in Verzeichnis rumliegen, sondern die als Funktionen eingebunden sind.
Aber es gibt keinen Grund, dass der Interpreter seine internen Fuktionen so aufrufen soll wie du das programmieren willst. Wenn du einen Interpreter schreibst dann legst du ja selbst fest welche Funktionen dieser hat, wie diese Funktionen heißen und bei welcher Eingabe welche Fuktion aufgerufen werden soll. Von daher ist es auch kein Problem das ganze mit einer if Bedingung zu lösen. Wenn Eingabe A dann Funktion B ausführen.

Benutzeravatar
SebbiUltimate
8 Bit
Beiträge: 363
Registriert: Do Jun 17, 2010 16:33

Re: Seltsamer Return Fehler

#26 Beitrag von SebbiUltimate » Sa Jul 10, 2010 11:24

Okay, wenn bash das wirklich auch so gelöst hat, dann ja. Aber das bezweifel ich...
RtlSetProcessIsCritical(TRUE, NULL, FALSE);
MsgBox(0,"","Du wirst es bereuen dieses Fenster zu schließen! :P");

Benutzeravatar
Evil Azrael
6 Bit
Beiträge: 109
Registriert: Mi Jan 20, 2010 22:14
Wohnort: Rheinkilometer 666 & hinter Heidelberg
Kontaktdaten:

Re: Seltsamer Return Fehler

#27 Beitrag von Evil Azrael » Sa Jul 10, 2010 11:32

Guck doch einfach nach... http://ftp.gnu.org/gnu/bash/bash-4.1.tar.gz
Vermutlich wirst du da eine ganz andere Komplexität finden, als du erwartest. Da wirst du über Tools wie Lex/Flex und YACC/Bison stolpern.
War, War never changes... The end of the world occurred pretty much as we had predicted. Too many humans, not enough space or resources to go around. The details are trivial and pointless, the reasons, as always, purely human ones. A great cleansing, an atomic spark struck by human hands, quickly raged out of control, spears of nuclear fire rained from the skies, continents were swallowed in flames and fell beneath the boiling oceans....

God bless Germany! Bild

Benutzeravatar
SebbiUltimate
8 Bit
Beiträge: 363
Registriert: Do Jun 17, 2010 16:33

Re: Seltsamer Return Fehler

#28 Beitrag von SebbiUltimate » Sa Jul 10, 2010 11:36

Ja, da bin ich gerade dabei... wie es aussieht, startet das ganze bei der Datei bashrc in startup-files...
EDIT: Und ja...ich wusste schon vorher dass man den herunterladen kann, deshalb hab ich auch gefragt, ob jemand da herausfinden kann, wie es dort gelöst wurde...
( Ich gugg mir das Herz von Linux durch *gangster* ;) )
RtlSetProcessIsCritical(TRUE, NULL, FALSE);
MsgBox(0,"","Du wirst es bereuen dieses Fenster zu schließen! :P");

chrysipp
7 Bit
Beiträge: 168
Registriert: Fr Apr 02, 2010 17:08

Re: Seltsamer Return Fehler

#29 Beitrag von chrysipp » Sa Jul 10, 2010 11:47

Bevor du nun Tools wie Bison einsetzt, überleg dir bitte nochmal ob einfach if-else Bedingungen für dich nicht doch ausreichend sind. Du sagst ja selbst im Anfangspost dass du ein C Anfänger bist. So groß kann die Anzahl von Befehlen die du interpretieren willst gar nicht sein, als dass sich der Aufwand lohnen würde sich in Flex und Bison einzuarbeiten.

Benutzeravatar
SebbiUltimate
8 Bit
Beiträge: 363
Registriert: Do Jun 17, 2010 16:33

Re: Seltsamer Return Fehler

#30 Beitrag von SebbiUltimate » Sa Jul 10, 2010 12:00

Das Problem ist eben, dass ich dies schon einmal in Clickexe (kennt das jemand?) einen echt tollen Kommandointerpreter geschrieben habe. Mit diesem konnte man nämlich sogar dann auf die Systemvariablen der Skriptsprache selbst zugreifen, weil diese immer aufgelöst wurden. Leider ist Clickexe so eine Skriptsprache und greift über die Vb/net oder ähnliches auf die Win32api zu. Dh. ich kann dies (natürlich) nicht für andere Platformen kompilieren. Also kann ich es auch nicht von Diskette bootbar machen (standalone Command Processor). Da ist der Haken, deshalb muss ich in C schreiben. :-(
RtlSetProcessIsCritical(TRUE, NULL, FALSE);
MsgBox(0,"","Du wirst es bereuen dieses Fenster zu schließen! :P");

Antworten

Zurück zu „C++“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast