26/02/21 13:00
Carlo
Uso i compilatori C/C++ della Microsoft e MinGW, nella rete si trovano molti codici che usano le istruzioni non standard: gotoxy() textcolor() textbackground() clrscr().
Ho letto che tali istruzioni sono implementate nel compilatore C/C++ della Borland e simili.
Con i compilatori che non le supportano, in Windows sono facilmente replicabili, ho scritto un breve codice test che le raggruppa:
La void getxy(), non so se esiste nel compilatore Borland, ma l'ho aggiunta perché potrebbe essere utile sapere le coordinate correnti del cursore in base 0.
Al solito, commenti e considerazioni sono gradite.
Ho letto che tali istruzioni sono implementate nel compilatore C/C++ della Borland e simili.
Con i compilatori che non le supportano, in Windows sono facilmente replicabili, ho scritto un breve codice test che le raggruppa:
#include <stdio.h> #include <windows.h> /**************************************************************************** codice che replica le istruzioni: gotxy(); textcolor(); textbackground(); clrscr(); presenti nella libreria <conio.h> del compilatore Borland C/C++ e simili Per rendere compatibili i codici che usano tali istruzioni con i compilatori: CGwin, MinGW, MSVC e altri, è sufficiente eseguire le seguenti modifiche: 1) aggiungere le variabili globali: fore, back e handle 2) aggiungere nel main(): handle=GetStdHandle(STD_OUTPUT_HANDLE); 3) modificare tutti i cprintf() in printf() 4) aggiungere le quattro void: gotxy(int x, int y) textcolor(int f) textbackground(int b) clrscr() *****************************************************************************/ int fore = 7; // variabile globale colore primo piano int back = 0; // variabile globale colore secondo piano HANDLE handle; // variabile globale che contiene l'HANDLE della console void gotoxy(int x, int y){ // equivalente in Borland C/C++ COORD cursore; // angolo superiore sinistro = 0,0 cursore.X=x-1; // i codici Borland usano la base 1 cursore.Y=y-1; // i codici Borland usano la base 1 SetConsoleCursorPosition(handle, cursore); } COORD getxy(){ // può far comodo CONSOLE_SCREEN_BUFFER_INFO buff; // buffer info schermo GetConsoleScreenBufferInfo(handle, &buff); // lettura info console /* info disponibili: dwCursorPosition COORD dwMaximumWindowSize COORD dwSize COORD srWindow SMALL_RECT wAttributes WORD */ return buff.dwCursorPosition; // angolo superiore sinistro = 0,0 } void textcolor(int f){ // equivalente in Borland C/C++ // se f non è compreso tra 0 e 15, i colori ciclano fore=f; // right 4 bit SetConsoleTextAttribute(handle, fore+back*16); } void textbackground(int b){ // equivalente in Borland C/C++ // se b non è compreso tra 0 e 15, i colori ciclano back=b; // left 4 bit SetConsoleTextAttribute(handle, fore+back*16); } void clrscr(){ system("cls"); } // Test routine int main(){ handle=GetStdHandle(STD_OUTPUT_HANDLE); // lettura dell'HANDLE for (int i=0; i<16; i++) printf("foba "); // intestazione fo=foreground, ba=background for (int ba=0; ba<16; ba++){ // 16 colori di background for (int fo=0; fo<16; fo++){ // 16 colori di foreground gotoxy(ba*5+1,fo+2); // ogni colore al suo posto textcolor(fo); textbackground(ba); printf("%02d%02d", fo, ba); } } textcolor(7); textbackground(0); // colori default printf("\n"); COORD cursore=getxy(); // lettura coordinate cursore in base 0 printf("_<- qui il cursore e' in colonna %d riga %d ", cursore.X, cursore.Y); cursore=getxy(); // lettura coordinate cursore in base 0 printf("_<- qui colonna %d riga %d \n", cursore.X, cursore.Y); return 0; }
La void getxy(), non so se esiste nel compilatore Borland, ma l'ho aggiunta perché potrebbe essere utile sapere le coordinate correnti del cursore in base 0.
Al solito, commenti e considerazioni sono gradite.
Ultima modifica effettuata da Carlo 04/03/21 19:17
in programmazione tutto è permesso