eigene konsole entwerfen...



  • FireFlow schrieb:

    Nur mir drängt sich eine Frage auf: WARUM??

    Ist das nicht die Frage, die man sich für jede Software stellt? In diesem Fall lautet die konkrete wie einfache Antwort: Weil cmd.exe unadäquat für extensive Benutzung ist. Auf Deutsch: cmd.exe nix gut (genug).



  • Geht es hier jetzt darum, ein eigenes Konsolensystem mit allem drum und dran zu bauen oder einfach nur eine alternative Befehlszeile, die Editieroptionen wie beim C64 bietet unter Nutzung des in Windows implementierten Konsolensystems?
    Ich gehe mal davon aus, dass es sich um die zweite Variante handelt, aber wozu brauchst du das?



  • masterofx32 schrieb:

    Geht es hier jetzt darum, ein eigenes Konsolensystem mit allem drum und dran zu bauen oder einfach nur eine alternative Befehlszeile, die Editieroptionen wie beim C64 bietet unter Nutzung des in Windows implementierten Konsolensystems?
    Ich gehe mal davon aus, dass es sich um die zweite Variante handelt, aber wozu brauchst du das?

    Fuer die zweite Loesung muss er ja ein eigenes Terminal schreiben. Das kann natuerlich auf dem jeweiligen Console-API aufsetzen oder auch in einem eigenen Fenster laufen.

    Ich kann mir gut vorstellen, wozu man sowas braucht, hab ich mir auch schon oefters gewuenscht. 🙂

    Der Vorteil ist halt, man kann auf eine beliebige Zeile auf dem Bildschirm oder im Puffer zurueckgehen und dann irgendwas aendern und Return druecken, wenn ich ihn richtig verstanden habe. Das ist super-bequem, ich frage mich, warum das nicht schon laengst in allen Shells Standard ist.



  • Power Off schrieb:

    Ich kann mir gut vorstellen, wozu man sowas braucht, hab ich mir auch schon oefters gewuenscht. 🙂

    Der Vorteil ist halt, man kann auf eine beliebige Zeile auf dem Bildschirm oder im Puffer zurueckgehen und dann irgendwas aendern und Return druecken, wenn ich ihn richtig verstanden habe. Das ist super-bequem, ich frage mich, warum das nicht schon laengst in allen Shells Standard ist.

    Kann man doch bei der Windows-Befehlszeile auch (Cursor Up). Außerdem wären mehrzeilige Anweisungen bei freier Cursorbewegung schwer bzw nur ungenau zu implementieren. Außerdem hat man oft Müll auf dem Bildschirm und müsste häufig löschen oder wieder ganz nach unten scrollen. Von daher finde ich es zeilenbasiert mit beschränktem Cursor eigentlich angenehmer.



  • Mit anderen Worten ihr wollt eine Unix-Shell unter Windows machen?
    Microsoft wollte dem neuen Windows doch eine Shell spendieren, aber 8 Tage nach der ersten Beta gabs schon den ersten Virus dafür.
    Shells unter Windows ist halt ein Stiefkind.



  • masterofx32 schrieb:

    Außerdem wären mehrzeilige Anweisungen bei freier Cursorbewegung schwer bzw nur ungenau zu implementieren.

    Ich hab doch oben eine Loesung fuer genau das Problem angegeben. 😉

    Ist uebrigens sehr genau, ich hab schon mehrere solcher Terminals implementiert (nicht Shells, bloss das Terminal), falls ich den Source mal wieder finde, kann ich ihn ja veroeffentlichen und euch einen Link geben. Ich hab diese Terminals fuer meine BASIC-Interpreter benutzt (leider ist noch keiner davon fertig! 😉 ).



  • imhotep schrieb:

    Mit anderen Worten ihr wollt eine Unix-Shell unter Windows machen?

    Nein, wenn ich ihn richtig verstanden habe, eher eine C-64 Shell! 😉



  • das wäre ein anfang:

    while(1)
    {
      string t;
      cin.getline(t,80);
      system(t.c_str());
    }
    

    aber wie willst du mehrzeiliges editieren ermöglichen? so python-like? (eingerückte zeilen werden nicht sofort ausgeführt)



  • Du solltest eventuel mit strcmp den eingegebenen String vergleichen, ob er mit deinen Keywords der Konsole übereinstimmt.

    Ich du solltest für die Keywords ein array anlegen

    #define NUMBEROFKEYWORDS 4
    
    const char *KeyWords[] =
    {
        "Help",
        "Exit",
        "GODMODE",
        "ach, was weiß ich"
    };
    
    //mit if und strcmp kannst du dann vergleichen:
    
    for(int i = 0; i < NUMBEROFKEYWORDS; i ++)
    {
        if(strcmp(input, KeyWords[i] == 0) //ich glaube 0 stand für "Stzimmen                überein" bin mir nicht ganz sicher
           ....
    }
    
    // Können Fehler im Code sein (Nur ausm Gedächnis getippt)
    


  • Tc++H schrieb:

    Du solltest eventuel mit strcmp den eingegebenen String vergleichen, ob er mit deinen Keywords der Konsole übereinstimmt.

    Ich du solltest für die Keywords ein array anlegen

    #define NUMBEROFKEYWORDS 4
    
    const char *KeyWords[] =
    

    Uh.

    const std::wstring keywords[] = { /* ... */ };
    const int number_of_keywords = sizeof keywords / sizeof(std::wstring);
    

    ... macht ein 'define' unnötig und verwendet das Framework besser. Wahrscheinlich ist eine std::list oder ein std::vector aber nochmal besser geeignet als ein C-Array.


Anmelden zum Antworten