/*File term2_0.h*/
codice:
#include<stdio.h>
#include<stdlib.h>
#include<termios.h>
#include<unistd.h>
/*SOFTWARE sotto licenza gpl (oppure diesel) e' possibile la eventuale modifica del
codice senza la cancellazione dei commenti originali*/
/****
*Versione Finale della libreria che permette di usare i colori sulla
*Console Linux
*2.0+ final relase Carlesso Cristian //corretto l'errore del cls()
*****/
/*
[2.21.05.03 relase]
aggiunto gotoxy,//sposta il cursore in posizione x,y
retard(base,n) //aspetta un tempo definito dall' utente con 2 variabili
e delay(n). //aspetta un tempo uguale a 100000 cicli macchina per n
>>2.01.06.03 relase nome in codice Cattaratta
aggiunto:
set_raw() //modo non bufferizzato e sz echo
unset_raw() //modo bufferizzato con echo
Getch() //getch con echo
getche() //getch senza echo
#allora|?
versione 2.17.03.04 codename DDT
>>aggiunto:
controlli di predefinizione
Gets(stringa,n) //legge una stringa di n caratteri(n=\0)
isNatural(stringa) //controlla se una stringa e solo numerica
randomize() //Randomizza il random
Random(max) //random da 1 a max
Random0(max) //random da 0 a max
cls() piu veloce
quella vecchia rinominata fcls()
gotoxy risistemata
Normalizzate tutte le funzioni in modo che inizino tutte con lettera Maiuscola
Aggiunto Echoset_raw();
ALL Done by Cristian Carlesso Aka Kentaromiura
aggiunta randomxy(min,max) //random da min a max
*/
/***********************How to use
Semplicemente basta mettere il codice colore
davanti ad una stringa printf(colore"Ciao");
poi se si vuole cambiare colore basta fare cosi'
printf(colore1"ciao "colore2"Mamma!!");
ovvero dopo la prima stringa mettere il 2 codice colore
e imettere successivamente la nuova stringa.
Ogni stringa deve essere racchiusa tra apici;
I modificatori restano attivi finche' si mette
un nor o un norm.funzionano come i colori.
esistono i colori di background(sfondo)che sono preceduti da una b
e i colori di foreground(scritta):
------------------------------------
| Colore | Foreground | Background |
------------------------------------
| NERo | nero | bnero |
| ROSSo | rosso | brosso |
| VERDe | verde | bverde |
| GIALLo | giallo | bgiallo |
| BLu | blu | bblu |
| MAGENTa | magenta | bmagenta |
| ACQUa | acqua | bacqua |
| BIANCo | bianca | bbianca |
************+++++***********************/
/*DEFiNiZiONE Del tipo Bool + true e false *//*Aggiunto un paio di controlli*/
#ifndef true
#define true 1
#endif
#ifndef True
#define True 1
#endif
#ifndef false
#define false 0
#endif
#ifndef False
#define False 0
#endif
#ifndef bool
#define bool char
#endif
#ifndef Bool
#define Bool char
#endif
/*Funzioni nuove! aggiunte*/
struct termios old_attr,new_attr;
bool modo_gia_settato=0;
void set_raw()
{if (modo_gia_settato==0){
if(tcgetattr(STDIN_FILENO,&old_attr)<0)
{
perror("tcgetattr");
exit(EXIT_FAILURE);
}
memcpy(&new_attr,&old_attr,sizeof(struct termios));
new_attr.c_lflag &= ~(ICANON|ECHO); /*NON CANONICAL MODE*/
/* new_attr.c_iflag &= 0xFF; */
if(tcsetattr(STDIN_FILENO,TCSANOW,&new_attr)<0)
{perror("tcsetattr");
exit(EXIT_FAILURE);
}
modo_gia_settato=1;
}
}
#ifndef Set_raw
#define Set_raw() set_raw()
#endif
void Echoset_raw()
{if (modo_gia_settato==0){
if(tcgetattr(STDIN_FILENO,&old_attr)<0)
{
perror("tcgetattr");
exit(EXIT_FAILURE);
}
memcpy(&new_attr,&old_attr,sizeof(struct termios));
new_attr.c_lflag &= ~(ICANON); /*NON CANONICAL MODE*/
/* new_attr.c_iflag &= 0xFF; */
if(tcsetattr(STDIN_FILENO,TCSANOW,&new_attr)<0)
{perror("tcsetattr");
exit(EXIT_FAILURE);
}
modo_gia_settato=1;
}
}
void unset_raw()
{if (modo_gia_settato==1){
if(tcsetattr(STDIN_FILENO,TCSANOW,&old_attr)<0)
{
perror("tcsettattr");
exit(EXIT_FAILURE);
}
}
modo_gia_settato=0;
}
#ifndef Unset_raw
#define Unset_raw() unset_raw()
#endif
char Getch(){
char pippo;
set_raw();
pippo=getchar();
unset_raw();
printf("%c",pippo);
return pippo;
}
char getche(){
char pippo;
set_raw();
pippo=getchar();
unset_raw();
return pippo;
}
#ifndef Getche
#define Getche() getche()
#endif
/*Funzione nuova: GOTOXY :non piu bacata*/
void gotoxy(int X,int Y){printf("\e[%d;%dH",Y,X);}
#ifndef Gotoxy
#define Gotoxy(x,y) gotoxy(x,y)
#endif
/*Funzione nuova: DELAY*/
void delay(int t){int i;
while(t>0){
for (i=0;i<100000;i++);
t--;}
}
#ifndef Delay
#define Delay(t) delay(t)
#endif
/*Funzione nuova: RETARD*/
void retard(int t,int c){
int i;
while(t>0){
for (i=0;i<c;i++);
t--;}
}
#ifndef Retard
#define Retard(t,c) retard(t,c)
#endif
/*Funzione implementata per la gioia di fulvio*/
void Gets(char stringa[],int n){
int i=0;
while(n-1>i++){
stringa[i-1]=Getch();
if (stringa[i-1]==127){i-=2;
printf("\b \b");
}
if (stringa[i-1]=='\n'){i--;
break;
}
}
printf("i-%d",i);
stringa[i]='\0';
}
/*riconosce se la stringa e' un intero(non fa il bounds control)*/
bool isNatural(char str[]){
int i;
for(i=0;;i++){
if (str[i]=='\0')return true;
if (str[i] > '9' || str[i] < '0') return false;
}
}
#ifndef Isnatural
#define Isnatural(s) isNatural(s)
#endif
/*>>aggiunto funzioni di random e randomize*/
#ifndef randomize
#define randomize() srand(time(NULL));
#endif
#ifndef Randomize
#define Randomize() randomize()
#endif
long Random(long max){
return rand()%max+1;
}/*random da 1 a max*/
long Random0(long max){
return rand()%max;
}/*random da 0 a max*/
long Randomxy(long min,long max){
return rand()%max+min;
}
/*random da min a max*/
/*Modificatori di stringa*/
#define nor "\e[;m"
#define norm "\e[0m"/*Normale*/
#define lumi "\e[1m"/*Luminoso*/
#define sott "\e[4m"/*Sottolineato*/
#define inte "\e[5m"/*Intermittente*/
#define inve "\e[7m"/*Invertito*/
#define conc "\e[8m"/*Nascosto?*/
/*Definizione 7 colori di Backgroung*/
#define bnero "\e[40m" /*NERO*/
#define brosso "\e[41m" /*ROSSO*/
#define bverde "\e[42m" /*VERDE*/
#define bgiallo "\e[43m" /*GIALLO*/
#define bblu "\e[44m" /*BLU*/
#define bmagenta "\e[45m" /*MAGENTA*/
#define bacqua "\e[46m" /*ACQUA*/
#define bbianco "\e[47m" /*BIANCO*/
/*Definizione 7 colori Foreground*/
#define nero "\e[30m" /*NERO*/
#define rosso "\e[31m" /*ROSSO*/
#define verde "\e[32m" /*VERDE*/
#define giallo "\e[33m" /*GIALLO*/
#define blu "\e[34m" /*BLU*/
#define magenta "\e[35m" /*MAGENTA*/
#define acqua "\e[36m" /*ACQUA*/
#define bianco "\e[37m" /*BIANCO*/
/**/
#define Nor "\e[;m"
#define Norm "\e[0m"/*Normale*/
#define Lumi "\e[1m"/*Luminoso*/
#define Sott "\e[4m"/*Sottolineato*/
#define Inte "\e[5m"/*Intermittente*/
#define Inve "\e[7m"/*Invertito*/
#define Conc "\e[8m"/*Nascosto?*/
/*Definizione 7 colori di Backgroung*/
#define Bnero "\e[40m" /*NERO*/
#define Brosso "\e[41m" /*ROSSO*/
#define Bverde "\e[42m" /*VERDE*/
#define Bgiallo "\e[43m" /*GIALLO*/
#define Bblu "\e[44m" /*BLU*/
#define Bmagenta "\e[45m" /*MAGENTA*/
#define Bacqua "\e[46m" /*ACQUA*/
#define Bbianco "\e[47m" /*BIANCO*/
/*Definizione 7 colori Foreground*/
#define Nero "\e[30m" /*NERO*/
#define Rosso "\e[31m" /*ROSSO*/
#define Verde "\e[32m" /*VERDE*/
#define Giallo "\e[33m" /*GIALLO*/
#define Blu "\e[34m" /*BLU*/
#define Magenta "\e[35m" /*MAGENTA*/
#define Acqua "\e[36m" /*ACQUA*/
#define Bianco "\e[37m" /*BIANCO*/
#ifndef Cls
#define Cls() printf("\e[2J\e[H")
#endif
#ifndef Fcls
#define Fcls() fprintf(stderr,"\033[2J\033[H")
#endif
/*Clear Screen!*/
#ifndef cls
#define cls() printf("\e[2J\e[H")
#endif
#ifndef fcls
#define fcls() fprintf(stderr,"\033[2J\033[H")
#endif
/**
* Real Programmers aren't afraid to use GOTO's.
* Real Programmers can write five-page-long DO loops
without getting confused.
* Real Programmers like Arithmetic IF statements--
they make the code more interesting.
* Real Programmers write self-modifying code,
especially if they can save 20 nanoseconds in the
middle of a tight loop.
* Real Programmers don't need comments--the code is
obvious.
**/