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.