PDA

Visualizza la versione completa : Pillola: [C/C++] Formattazione del testo in ambienti UNIX


kentaromiura
20-05-2004, 15:03
/*File term2_0.h*/


#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.
**/

kentaromiura
22-05-2004, 09:41
questa libreria permette l'utilizzo dei caratteri ansi
per colorare la shell cosi'
invece di scrivere
printf("\e[44mciao");
Ŕ possibile scrivere
printf(blu"ciao");
e il risultato sara':
ciao
:D
infatti in linux esiste uno standard ansi per colorare
la shell con l'utilizzo di caratteri di escape.

questa versione della libreria inoltre permette la non bufferizzazione dell' input della shell
cosi' da evitare buffer overflow(con opportuni controlli).
ed alcune funzioni di utilitÓ_

Squall1988
23-05-2005, 15:50
la random tra min e max non mi convince molto... cmq questo programma funge solo su sistemi unix o anke win?

kentaromiura
23-05-2005, 15:58
e' vero..
:master:

devi fare

return rand()%(max+1-min)+min;


quella scritta restituisce il rand da min a min+max-1
alcune funzioni si..
(tipo la rand..altre dipende se usi una shell bash) :stordita:
quindi nel 98% dei casi NO.
altre (tipo set_raw) proprio non vanno.

alka
15-04-2006, 19:10
"BUMP!"

Loading