Improved Console 5



  • **Improved Console 5
    inkl. aller Informationen und Anleitungen erhältlich auf:
    http://ic.c-plusplus.net

    Vorgänger Improved Console 4
    http://www.c-plusplus.net/forum/131915
    http://ic.c-plusplus.net/4
    **

    Alter Text schrieb:

    Habe die Improved Console nach 6,5 Jahren wieder einmal überarbeitet. Würde mich freuen wenn einige Personen kurz drübersehen könnten, ich lass den Thread hier mal 1-2 Wochen offen, danach werde ich notwendige Überarbeitungen einbauen, die Homepage updaten und zu guter letzt die neue Version hochladen 🙂

    https://dl.dropbox.com/u/35926340/IC/ic.hpp
    https://dl.dropbox.com/u/35926340/IC/ic.cpp

    Änderungen:

    • Added: Programmatische Veränderung des Viewports (=> Scrolling)
    • Added: move(), rechteckigen Bereich in der Konsole verschieben
    • Added: Enumeration für gängige Cursor-Größen
    • Added: isFullscreenSupported() -> ist ab Windows 7 nämlich nicht mehr möglich
    • Added: Weitere Shorties, alle djgpp conio.h extensions werden jetzt unterstützt (delline, insline, movetext, setcursortype, window)
    • Improved: Bessere, dokumentierende Kommentare in der ic.hpp
    • Improved: SetConsoleDisplayMode() wird nun nicht mehr aus einer DLL geladen sondern direkt aus dem Platform SDK verwendet
    • Improved: Schnellerer Weg (max. 3 API calls statt bisher 4) um die Fenstergröße inkl. Buffer zu verändern
    • Improved: Code so verbessert, dass auch bei /W4 keine Warnungen erzeugt werden
    • Changed: In Zeiten von Auto-Completion keine Abkürzungen in Methodennamen mehr
    • Changed: Farben heißen nun genau wie in der früheren <conio.h>
    • Changed: Entfernung von TCHAR zu Gunsten von WCHAR (Anfänger sollen endgültig zu Unicode gezwungen werden)

    Feature-Wünsche werden übrigens auch noch gerne entgegen genommen, doch gleich einmal folgende Kommentare dazu:

    Schriftartwechsel: Ist nur sehr begrenzt möglich, eine Auflistung aller Schriftarten ist nur über Umwege möglich, stellt sich die Frage inwiefern das überhaupt sinnvoll ist (sind ja doch nur monospace fonts). Desweiteren bringt es einen ganzen Haufen Umständlichkeiten mit: Bspw. spielt die Schriftgröße auch bei der minimalen Buffer-Größe eine Rolle, da ja der Buffer immer zumindest gleich groß wie das Fenster darüber sein muss und kleinere Buchstaben heißen größerer Buffer, etc.

    Wenn da aber jemand eine schöne Lösung kennt bzw. schon einmal gesehen hätte würde ich mich natürlich freuen das einzubauen. Wird immer wieder einmal nachgefragt...

    Double buffering: Imho sollte die derzeitige Ausgabe schnell genug sein um kein Flackern zu erzeugen, muss ja nicht immer gleich die gesamte Konsole neu gezeichnet werden. Weiß jemand von euch ob eine Kombination aus einem zweiten Screen Buffer und SetConsoleActiveScreenBuffer()-Wechseln wirklich viel Performance bringt? Hab da auch schon Gegenteiliges gehört, nämlich, dass der Wechsel viel zu lange dauert. Fragt sich nur wofür man überhaupt mehrere screen buffer erzeugen kann...

    I/O code pages: Wäre schön wenn mir jemand den aktuellen Stand (Windows 7/8) der Konsolen-Codepages erklären könnte. Kann die Konsole inzwischen Unicode? Nein? Kann ich die Codepage so umstellen, dass deutsche Umlaute autom. richtig angezeigt werden? Falls nein, was ist heute der gängigste Weg um Umlaute in der Konsole richtig darzustellen? Ich möchte das auch gleich irgendwie in die IC einbauen. Der derzeit in der FAQ gezeigte Weg ist fürchterlich umständlich und ist hoffentlich nicht mehr state of the art.

    Selection: Hatte ich schon eingebaut hat aber keinen Sinn, sobald ich etwas markiere geht die Konsole in den Select-Modus und das Programm ist damit quasi pausiert. Sollte ich eine Taste drücken geht zuerst die Selektion verloren und erst dann geht das Programm weiter und zeigt mir an, dass nichts selektiert ist...weiß da jemand mehr darüber?

    Zu guter Letzt könnte man auch noch über den Einbau von I/O alias getch()/kbhit() reden, aber da diese beiden Funktionen noch in der MSVC2012-conio.h zu finden sind fragt sich ob das Sinn macht...eher nicht.

    Achja, und getCursorPositionX() gefällt mir nicht als Name, würdet ihr hier lieber eine COORD getCursorPosition() sehen? Soll ich direkt COORD nehmen oder eine eigene Struktur bauen? COORD verwendet short, ich verwende überall int.

    Edit:
    Auch die Benennung und generell den Coding Style könnt ihr gerne kritisieren, ich hab zugegebenermaßen schon länger nicht mehr mit C++ gearbeitet und weiß nicht was da gerade state-of-the-art ist.

    MfG SideWinder



  • SideWinder schrieb:

    [*] Changed: Farben heißen nun genau wie in der früheren <conio.h>

    MfG SideWinder

    Hi SideWinder, ist schon ein paar Monde her, das ich unter DOS damit "gespielt" hab. Deshalb noch mal gegenprüfen.

    Die Farben wurden nur bei Borland in der früheren <conio.h> definiert. Da allerdings mit anderen Begriffen. Also ohne FG_Farbe oder BG-Farbe.

    Du hast bei den Farben die Microsoft-Variante erwischt. Dazu muss damals der <graph.h> eingebunden werden, wenn man auf Konsole farbig schreiben wollte.

    Bei Zortech, Symantec, also heute Digital-Mars musste dann der <disp.h> eingebunden werden.

    gotoxy kannte nur Borland. Wie die Pedants bei Mircosoft oder Zortech hiessen müsste ich erst nach sehen.

    Kommt halt drauf an wie ihr das haben wollt? Wie bei Borland im <conio.h>, wie bei Mircosoft z.B. in Quick-C im <graph.h> oder gar eine Mischung von verschiedenen alten Wegen.

    Ich hab jetzt nicht in den Quellen nachgesehen. Deshalb können einzelne Buchstaben zu viel oder zu wenig sein 😡

    Es gab/gibt noch andere Compiler, die noch anders die Farben auf Konsole realisierten. Aber mit den genannten hab ich vor Jahren mal herum gemacht.

    Also welcher Weg soll es werden?

    MfG f.-th.



  • FG_ und BG_ ist nur zur Unterscheidung bei mir nötig, das lässt sich leider nicht verhindern wenn man setColor() behalten will, und das finde ich zu praktisch um es zu verwerfen.

    Die Begriffe dahinter sollten aber ziemlich genau dem DJGPP entsprechen der sich da afaik auch an die Farbnamen des damaligen MSVC gehalten hat. Siehe: http://www.programmingsimplified.com/c/graphics.h/colors

    MfG SideWinder



  • Nachtrag gotoxy:
    Auszug aus graph.h von Quick-C:

    void _far _cdecl _clearscreen(short);
    
    struct xycoord _far _cdecl _moveto(short, short);
    struct xycoord _far _cdecl _getcurrentposition(void);
    

    und hier Zortech disp.h:

    __cdecl disp_move(int,int),
    

    MfG f.-th.



  • Okay hattest schon etwas geschrieben zum Compiler. Hab zu spät hingesehen.



  • Aus deinem Link:

    conio.h file is provided by borland turbo c compiler and gcc compiler doesn't support it.
    

    😃

    Take it easy 😉 🕶



  • Man lernt nicht aus:
    DJGPP != GCC Erinnerung ausgeblendet 😡
    Dabei müsste ich vor fast 20 Jahren versucht haben, den DJGPP ans laufen zu kriegen 🙄

    Also der CJGPP kennt einen conio.h.
    Die haben damals versucht das beste von Borland, Microsoft und weiteren Quellen zu optimieren.
    Der GCC nutzt hier:
    http://www.programmingsimplified.com/c/graphics.h
    Das sich weniger an Borland sondern mehr an Microsoft orientiert.

    MfG f.-th.



  • Diese <graphics.h> enthält aber Funktionen für Pixelgrafik die die IC explizit nicht unterstützt. Pixelgrafik dann gleich lieber mit Allegro oder Konsorten: http://alleg.sourceforge.net/

    MfG SideWinder



  • Kein Wunder das ich auch dem Schlauch steh:

    WinBGIM = Windows-Borland-Grafik-Interface-Microsoft-Style 😕 😃 🙄

    Computer und Abkürzungen 😉

    MfG f.-th.



  • Wow ist echt wieder einmal richtig gut geworden!Auch der saubere Code ist sehr ansprechend sowie die zahlreichen Kommentare.Aber ich frage mich wie du den Schriftartwechsel hinbekommen willst!Ist das überhaupt möglich?

    Sonst ist es echt super geworden 😉



  • Danke für's Feedback euch beiden.

    7xCore schrieb:

    Wow ist echt wieder einmal richtig gut geworden!Auch der saubere Code ist sehr ansprechend sowie die zahlreichen Kommentare.Aber ich frage mich wie du den Schriftartwechsel hinbekommen willst!Ist das überhaupt möglich?

    Sonst ist es echt super geworden 😉

    Wollte mir gerade deine Seite aus der Signatur ansehen, aber die ist gar nicht mehr aktiv. Hast du ein ähnliches Projekt?

    Schriftartwechsel grundsätzlich mit SetCurrentConsoleFontEx(), allerdings eben wie gesagt in begrenzem Umfang nur möglich.

    MfG SideWinder



  • Ich erinnere mich noch das man zu DOS-Zeiten bis zu 4 Seiten in den Grafikkarten ansprechen konnte. War damals manchmal notwendig, wenn man per Videointerrupt programmierte um das Bildflackern weniger störend zu gestalten.

    Alternativ konnte man auch ohne Interrupt direkt in den Speicherbereich der Grafikkarte schreiben. Dann wurde aber alles deutlich schneller.

    Bis hier hab ich das schon mal programmiert.

    Inzwischen sind ja ein paar Jahre vergangen. In den Speicher sollte man nur noch über Betriebssystemfunktionen schreiben und CPU und Grafikkarten verwalten mehrere Prozessoren und Speicherbereiche. Will sagen ich hab keinen Plan wie aktuelle Grafikkarten in Bezug aus Geschwindigkeit optimal angesprochen werden.

    Aktuelle Grafikkarten haben laut Datenblatt teilweise mehr als 2000 Prozessoren.

    MfG f.-th.



  • SideWinder schrieb:

    Danke für's Feedback euch beiden.

    7xCore schrieb:

    Wow ist echt wieder einmal richtig gut geworden!Auch der saubere Code ist sehr ansprechend sowie die zahlreichen Kommentare.Aber ich frage mich wie du den Schriftartwechsel hinbekommen willst!Ist das überhaupt möglich?

    Sonst ist es echt super geworden 😉

    Wollte mir gerade deine Seite aus der Signatur ansehen, aber die ist gar nicht mehr aktiv. Hast du ein ähnliches Projekt?

    Schriftartwechsel grundsätzlich mit SetCurrentConsoleFontEx(), allerdings eben wie gesagt in begrenzem Umfang nur möglich.

    MfG SideWinder

    Ja ich hab ein ähnliches Projekt laufen, was aber eher ein anderes Ziel hat.Ich habe gerade nachgesehen und du hast recht, der komplette ftp Inhalt ist weg 😞 .
    SetCurrentConsoleFontEx() hört sichinteressant an, ich schaus mir mal an ^^



  • SideWinder schrieb:

    Danke für's Feedback euch beiden.
    Wollte mir gerade deine Seite aus der Signatur ansehen, aber die ist gar nicht mehr aktiv. Hast du ein ähnliches Projekt?

    Danke außerdem für den Hinweis, habs wieder neuaufgesetzt.