Alten C-Code Umwandeln (C++)





  • Hallo Gast3,
    vielen Dank für Deine ausführliche Antwort.
    Zu Deinen Fragen:
    1. war DOS Version 1989
    2. wahrscheinlich QC2 (Quick C)
    3. ca. 600 Codezeilen (aber nur die Funktions-Datei, das Projekt besteht aber aus insgesamt 6 Dateien, Gesamtgröße ca. 2000 Codezeilen
    4. 2 Interruptaufrufe, den einen habe ich ja schon ersetzt, den 2ten fast (siehe beigefügten Code)
    5. Nein es sind 28 Jahre vergangen
    6. Zielsystem ist WINDOWS 10 Pro 64 Bit
    7. Visual Basic 2015 ist vorhanden, ich dachte aber das die Umsetzung mit einem einfachen Compiler einfacher ist.
    8. Die entsprechende Funktion "Fwrite_str_to_disp()" steht am Anfang

    Das mit den Interrupts ist mir nun klar.

    Hier nun mein neuer Code für die Funktion "Fwrite_str_to_disp()"

    void Fwrite_str_to_disp(int iy,int ix,char output,int ilen,int color)
    {
        setcurs(iy,ix);
        HANDLE handle= GetStdHandle(STD_OUTPUT_HANDLE);
        SetConsoleTextAttribute( handle, color);
        printf(output);
        SetConsoleTextAttribute( handle, color);
    
    }
    

    Allerdings bekomme ich bei der Zeile "printf(output") folgende Meldung:

    type error in argument 1 to 'printf'; found 'char' expected 'pointer to Char'

    MfG
    Juergen B.
    😕



  • probier mal printf("%c", output);



  • Nimm

    putchar(output);
    

    Und 2x

    SetConsoleTextAttribute(handle, color);
    

    aufzurufen, ist wahrscheinlich auch falsch, oder? Du möchtest evtl. die Farbe wieder auf den vorherigen Wert zurücksetzen, also so etwas wie GetConsoleTextAttribute (was es direkt nicht gibt), aber schau mal in How to get current console background and text colors?

    Edit: Und wenn 'ilen' noch benutzt werden soll, dann noch eine Schleife um die Ausgabe bauen.



  • Fwrite_str_to_disp() ist eine irreführender Name für eine Funktion, die nur ein Zeichen ausgibt.



  • Fwrite_str_to_disp() ist eine irreführender Name für eine Funktion, die nur ein Zeichen ausgibt.

    das sollte sie nicht

    das ist die BIOS-Funktion die er ersetzen will

    http://www.ctyme.com/intr/rb-0099.htm
    schreibt n mal das gleiche Zeichen mit Farbe



  • Gast3 schrieb:

    schreibt n mal das gleiche Zeichen mit Farbe

    Das ist aber kein String im Sinne von C.
    Da hätte ich ein char* als Parameter erwartet.



  • Vermute mal mit der Funktion sollen Menüs auf dem Bildschirm dargestellt werden 😕

    Hier mal ein Entwurf, der sicher noch besser geht:

    #include <windows.h>
    #include <iostream>
    
    void setcurs(int izeile, int ispalte)
    {
        COORD coord;
        coord.X = ispalte;
        coord.Y = izeile;
        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
    }
    
    void Fwrite_str_to_disp(int iy, int ix, char output, int ilen, int color)
    {
        setcurs(iy, ix);
        HANDLE handle= GetStdHandle(STD_OUTPUT_HANDLE);
        SetConsoleTextAttribute(handle, color);
    	for(int countchar = 0; countchar < ilen; countchar++)
    	{
    		setcurs(iy, ix++);
    		HANDLE handle= GetStdHandle(STD_OUTPUT_HANDLE);
    		putchar(output);	
    	}
    }
    
    int main()
    {
    	Fwrite_str_to_disp(20, 10, 'A', 5, 4);
    	Fwrite_str_to_disp(10, 8, 'Z', 3, 6);
    	std::cin.get();
    }
    

    Die 2,5 Zeilen C++ bekommt ihr auch noch zu C. 😃



  • DirkB schrieb:

    Gast3 schrieb:

    schreibt n mal das gleiche Zeichen mit Farbe

    Das ist aber kein String im Sinne von C.
    Da hätte ich ein char* als Parameter erwartet.

    ja der 28 Jahre alte Name ist schlecht und seine neue Implementierung ist bisher auch noch falsch



  • jbaben schrieb:

    Kann mir dazu jemand einen Tipp geben wie ich ein Zeichen an einer bestimmten Cursor-Position ausgeben kann?

    Alles, was des Windows-Konsole-Programmierers Herz begehrt, findest Du hier:
    https://msdn.microsoft.com/en-us/library/windows/desktop/ms682073(v=vs.85).aspx



  • am Ende sollte man immer mal ein Feedback geben - wie sieht es denn aus - alles geklappt?


Anmelden zum Antworten