Obsługa monitora
Patkoss
Czasami pisząc programy dla trybu tekstowego (czy każdy program wymaga trybu graficznego?) myślę o jakimś wygaszaczu ekranu, jakaś najprostszą choćby funkcja oszczędzania monitora. Jest to dobre, a i nasz program zdobędzie większą sympatię użytkownika. Nie zawsze jednak mamy czas, aby zmyślić jakiś ciekawy efekt, a i jeszcze go napisać. Z pomocą może nam wtedy przyjść przerwanie 10h (karty graficznej). Otóż możemy ustawić monitor w kilka trybów (w nawiasie od razu podaję numer trybu): On (0) - włączony: normalny tryb pracy; StandBy (1): tryb czuwania; Suspend (2): monitor jest zawieszony w działaniu, Off (4): wyłączony. W zależności od trybu jest zużycie energii. Im wyższy numer trybu tym mniej energii monitor pobiera. Funkcja, którą użyjemy nosi numer 4f10h.. Podajemy ją oczywiście do rejestru AX. Rejestr BX: jego dolna połówka BL winna być ustawiona na wartość 1, a górna polówka BH winna zawierać numer trybu. Jak się zapewne domyślasz wykorzystamy możliwości wywoływania funkcji Assemblera w naszym kompilatorze C. W pliku nagłówkowym dos.h znajduje się miła unia REGS i funkcja int86, którą wykorzystamy.
#include <dos.h>
void main() {
REGS regs;
regs.x.ax=0x4f10;
regs.h.bl=1;
regs.h.bh=2;
//suspend monitor...
int86(0x10, $regs, $regs);
//...for one second
sleep(1000);
regs.x.ax=0x4f10;
regs.h.bl=1;
regs.h.bh=0;
//go back to normal working mode
int86(0x10, $regs, $regs);
}
Sposób ten można wykorzystać praktycznie w każdym języku pozwalającym wywoływać przerwania, i w każdym systemie operacyjnym, działającym na procesorze zgodnym z x86. Także Windows XP nie stwarza tu ograniczeń.