Cursor ausschalten bzw. Größe ändern
-
Hallo,
weiß jemand wie man unter DOS den Cursor ein-/ausschalten, bzw. die Größe ändern kann? Ich hab da zwar noch was mit einem Bios-Aufruf in Erinnerung, aber leider keine Dokumentation mehr dazu.
LG, Sascha
-
...da wirst du geholfen
-
#include <windows.h> void show_cursor( bool show ) { CONSOLE_CURSOR_INFO cci; GetConsoleCursorInfo( GetStdHandle( STD_OUTPUT_HANDLE ), &cci ); cci.bVisible = show; SetConsoleCursorInfo( GetStdHandle( STD_OUTPUT_HANDLE ), &cci ); }
Greetz, Swordfish
-
@Swordfish: Das ist jetzt für die Windows-Konsole, nicht für DOS (auch wenn er wahrscheinlich nur das falsche Wort benutzt ;)).
Für DOS gibts aber auch was in der FAQ.
MfG SideWinder
-
@SideWinder: Na ja, ich hab' mal forsch vorausgesetzt, dass er die Konsole meint.
SideWindow schrieb:
Für DOS gibts aber auch was in der FAQ.
Wirklich?? Wo denn?
Der vollständigkeit halber, für DOS:
void show_cursor( bool show ) { unsigned char start = 14, end = 14; if( !show ) { end = start = ~0; } asm { MOV AH, 1 MOV CH, start MOV CL, end INT 0x10 } }
Greetz, Swordfish
-
Danke Leute, aber irgendwie ist es immer noch net ganz was ich suche. Also zunächst mal, ich meine tatsächlich unter DOS. Andererseits soll der Code auch leicht auf andere Plattformen portierbar sein (das Ganze soll ne Bibliothek werden). Deshalb dachte ich am besten wären die BIOS-Aufrufe. Weiß denn hier niemand wo man eine Dokumentation zu diesen Aufrufen findet?
-
Hab mir mittlerweile selbst was gebastelt, wobei mir der Assemblercode von Swordfish (Danke!) etwas geholfen hat:
...
#define HIDECURSOR 0 // Cursor-Stile
#define LOWCURSOR 1
#define HIGHCURSOR 2
......
//////////////////////////////////////////////////////////////////////////
// Žndert den Stil des Textcursors. HIDECURSOR schaltet den Cursor ab,
// LOWCURSOR und HIGHCURSOR zeigen einen kleinen, bzw. groáen Cursor.
//////////////////////////////////////////////////////////////////////////
void _ShowCursor(UINT nStyle)
{
union REGS regs;regs.h.ah = 0x01; // CursorgrӇe andern
switch(nStyle)
{
case HIDECURSOR: // Cursor unsichtbar
regs.h.ch = 0x01;
regs.h.cl = 0x00;
break;
case LOWCURSOR: // Kleiner Cursor (Einfgen)
regs.h.ch = 0x06;
regs.h.cl = 0x07;
break;
case HIGHCURSOR: // Groáer Cursor (šberschreiben)
regs.h.ch = 0x00;
regs.h.cl = 0x07;
break;
default:
assert(0);
}
int86(0x10, ®s, ®s);
}//////////////////////////////////////////////////////////////////////////
// Setzt den Textcursor an die X/Y-Koordinate (Spalte/Zeile).
//////////////////////////////////////////////////////////////////////////
void _SetCursor(BYTE bXPos, BYTE bYPos)
{
union REGS regs;assert(bXPos < 80); // Spalte auf Gltigkeit prfen
assert(bYPos < 25); // Zeile auf Gltigkeit prfen
regs.h.ah = 0x02; // Cursor setzen
regs.h.bh = 0x00; // Bildschirmseite 0
regs.h.dl = bXPos; // X/Y-Koordinaten
regs.h.dh = bYPos;
int86(0x10, ®s, ®s);
}
...Eine Übersicht über die BIOS-Funktionen hab ich mittlerweile auch gefunden:
http://www.datasource.de/programmierung/index.htmlFür alle die es vielleicht interessiert
-
Ralf Brown's Interrupt List sollte dir helfen.
Greetz, Swordfish