eigene konsole entwerfen...



  • moin, ich möchte die cmd nachbauen, aber habe keinen plan wie ich anfangen soll. ich weiss, dass es diese frage hier schon gaaanz oft gab, aber ich finde (verdammt nochmal) keine beiträe mehr dazu. 😞

    kann mir jemand helfen? danke!

    ps.: ich möchte, das man die konsole wie einen editor benutzen kann. also mehrzeiliges editieren und somit navigieren im fenster soll möglich sein. danke



  • ich möchte die cmd nachbauen, aber habe keinen plan wie ich anfangen soll

    Nun, ein Fenster oder ein Dialog mit Editfeld waere vermutlich kein schlechter Anfang 😉
    Womit das ganze sicherlich ins Win-API Forum zu verschieben waere.

    Gruss,
    DeSoVoDaMu



  • DeSoVoDaMu schrieb:

    ich möchte die cmd nachbauen, aber habe keinen plan wie ich anfangen soll

    Nun, ein Fenster oder ein Dialog mit Editfeld waere vermutlich kein schlechter Anfang 😉
    Womit das ganze sicherlich ins Win-API Forum zu verschieben waere.

    Gruss,
    DeSoVoDaMu

    Das habe ich anderst verstanden, ich denke er will sowas wie 'cmd' unter WinXP schreiben. Dann ist er hier schon richtig... Nur mir drängt sich eine Frage auf: WARUM??

    Gruß



  • Warum frage ich schon garnicht mehr 🙂
    Aber wie stellst du dir das denn vor? Ich meine es handelt sich dabei doch auch dabei um ein Fenster. o_O
    Und wenn er das ding nachbauen will, allerdings Erweiterungen einbauen will (zeilen selektieren oder was auch immer), dann kommt er doch um etwas betriebssystemspezifisches nicht herum. Da kann man doch mit einem Konsolenprojekt imo nicht viel anfangen (wobei man da über windows-Funktionen wahrscheinlich auch schon ein paar Sachen aendern koennte - aber es bleibt windows).

    Gruss,
    DeSoVoDaMu



  • scooter schrieb:

    ps.: ich möchte, das man die konsole wie einen editor benutzen kann. also mehrzeiliges editieren und somit navigieren im fenster soll möglich sein. danke

    Fuer welches Betriebssystem willst Du das machen?

    Prinzipiell ist es durchaus moeglich, eine eigene Shell zu programmieren. Es ist sogar ein interessantes Projekt! 🙂

    Es funktioniert im Prinzip so:
    1. Zuerst schreibst Du den Code fuer die Konsolenverwaltung, also Bildschirmpuffer usw. -- also im Prinzip musst Du Dir Dein eigenes Terminalpaket entwickeln. (Das hoert sich komplizierter an, als es ist)
    2. Wenn Du jetzt eine Eingabe einliest, startest Du einen Prozess und lenkst die Ein-/Ausgabekanaele des Prozesses um, damit Du an die Daten kommst. Einfache Befehle werden am besten inline (also innerhalb Deines Kommandoprozessors) ausgefuehrt.

    Full-Screen Command Editing a la C-64 bekommst Du, wenn Du den Bildschirm mit Spezialzeichen fuellst, die wie Leerzeichen aussehen. Geht der Benutzer mit dem Cursor auf eine Zeile und drueckt Return, liest Du von der Cursorposition in beide Richtungen so lange, bis Du auf Anfang/Ende des Bildschirms oder Dein Spezialzeichen stoesst. Das verwendest Du, um Anfang und Ende der Kommandozeile festzustellen. I.d.R. ist diese Loesung ganz brauchbar. 🙂



  • 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