Eilikkä c++:salla näyttötilan vaihto. Tuo alku on ripattu jostain vanhasta koodin pätkästä.
Ohjelma eivälttämättä toimi WindowsXPeessä kunnolla esim. jotkut tilat eivät toimi tai tulee siniseksi teksti.
vaihto.cpp
#include <iostream>
#include <stdlib.h> //atoita varten
#include <conio.h> //system (pause komennon suoritusta varten)
using namespace std;
void svm(int x) /*funktio grafiikka tilan vaihtamiseen. Optimoimisen varaa olisi,
mutta koodin pätkä on ripattu jostain vanhasta ohjelmasta.*/
{
int a = 0;
int b = 1;
int c = 2;
int d = 3;
int e = 4;
int f = 5;
int g = 6;
int h = 7;
int i = 8;
int j = 9;
int k = 10;
int l = 11;
int m = 12;
int n = 13;
int o = 14;
int p = 15;
int q = 16;
int r = 17;
if (x == a)
{
//40x25 mono(16) teksti
asm {
mov ax, 0000h
int 10h
}
}
if (x == b)
{
//40x25 16 teksti
asm {
mov ax, 0001h
int 10h
}
}
if (x == c)
{
//80x25 mono(16) teksti
asm {
mov ax, 0002h
int 10h
}
}
if (x == d)
{
//80x25 16 teksti
asm {
mov ax, 0003h
int 10h
}
}
if (x == e)
{
//320x200 4 grafiikka
asm {
mov ax, 0004h
int 10h
}
}
if (x == e)
{
//320x200 mono(4) grafiikka
asm {
mov ax, 0005h
int 10h
}
}
if (x == f)
{
//640x200 2 grafiikka
asm {
mov ax, 0006h
int 10h
}
}
if (x == g)
{
//80x25 mono(2) teksti
asm {
mov ax, 0007h
int 10h
}
}
if (x == h)
{
//160x200 16 grafiikka
asm {
mov ax, 0008h
int 10h
}
}
if (x == i)
{
//320x200 16 grafiikka
asm {
mov ax, 00009h
int 10h
}
}
if (x == j)
{
//640x200 4 grafiikka
asm {
mov ax, 000Ah
int 10h
}
}
if (x == k)
{
//320x200 16 grafiikka
asm {
mov ax, 000Dh
int 10h
}
}
if (x == l)
{
//640x200 16 grafiikka
asm {
mov ax, 000Eh
int 10h
}
}
if (x == m)
{
//640x350 mono(2) grafiikka
asm {
mov ax, 000Fh
int 10h
}
}
if (x == n)
{
//640x350 4 grafiikka
asm {
mov ax, 0010h
int 10h
}
}
if (x == o)
{
//640x350 2 grafiikka
asm {
mov ax, 0011h
int 10h
}
}
if (x == p)
{
//640X480 16 grafiikka
asm {
mov ax, 0012h
int 10h
}
}
if (x == q)
{
//320x200 256 grafiikka
asm {
mov ax, 0013h
int 10h
}
}
if (x == r)
{
//640x480 256 grafiikka??? En ole varma mikä tila luultavasti 640x480, suurempiakin voi yrittää
asm {
mov ax, 0014h
int 10h
}
}
}
int main()
{
char in[80]; //näyttötilan kirjoitus puskuri
int mode; //näyttötila
int small = 0; //pienin näyttötila
char big = 17; //suurin näyttötila
int NTILA; //näyttötilan tallentamiseen
//nykyisen näyttötilan tallennus
asm {
mov ah, 0Fh //haetaan nykyinen näyttötila
int 10h //kutsu BIOS-palvelu
mov NTILA, al //tallenna näyttötila
}
// silmukka uuden näyttötila numeron vastaan ottamiseen
while(1)
{
cout << "Press key 0-17 to select video mode:\n";
cin >> in; //vastaan otetetaan tilan numero
mode=atoi(in); //muunnetaa in(char)->mode(int)
if((small > mode)||(big < mode)) /*varmistetaan, että syötetty näyttötila
numero on oikealta alueelta*/
{
cout << "Wrong videomode number!\n"; //Nyt ei kyllä ole oikea
}
else
break; //keskeytetään while
}
cout << "\nChanging video mode...\n";
svm(mode); //kutsutaan svm javaihdetaan näyttötila
system("pause"); /*järjestelmä komento joka pysäyttääsyötteen kunnes käyttäjä
painaa jotain näppäintä*/
// Palautetaan alkuperäinen näyttötila
asm {
mov al, NTILA //vanha näyttötila
xor ah, ah //AH = 0 -aseta näyttötila
int 10h //kutsu BIOS-palvelu
}
return(0);
}Aihe on jo aika vanha, joten et voi enää vastata siihen.