Oppure

Loading
02/12/10 21:38
Oneiros
Ciao a tutti :)

Vorrei condividere con voi una mia creazione: una pratica e utile libreria in C che offre utili funzioni per gestire la console (colori, dimensioni, posizione, input, output, creazione menu) e non solo

Questa libreria l'ho creata durante il mio primo anno di università durante il quale ho preso l'abitudine di raccogliere in essa tutte le funzioni che potevano essermi utili per facilitarmi la programmazione.

Consideratela dunque un supporto per chi si avvicina al C e vuole dare un tocco grafico più carino ai propri programmi a linea di comando :)

Ecco l'Header della libreria. Qui sono raccolte e documentate tutte le sue funzioni:


/**
 * File:    Oneiros Library Header File (oneiros.h)
 * Author:  Oneiros - Lorenzo Valente (oneiros.valente [AT] gmail.com)
 * Version: 1.2
 *
 * Created on 10 maggio 2010, 9.12
 */

/** Questa definizione serve per assicurare al compilatore che stiamo
 * lavorando su una versione di Windows superiore a Windows 2000 */
#define _WIN32_WINNT 0x0500

#include <string.h>
#include <windows.h>
#include <time.h>

/** Definisco i colori */
#define BLACK 0
#define DARK_BLUE 1
#define GREEN 2
#define TEAL 3
#define BORDEAUX 4
#define PURPLE 5
#define OCRA 6
#define LIGHT_GRAY 7
#define GRAY 8
#define BLUE 9
#define LIME 10
#define LIGHT_BLUE 11
#define RED 12
#define PINK 13
#define YELLOW 14
#define WHITE 15

/** Definisco un codice di errore per gestire le eccezioni */
#define CONTROL_CODE -23081990

/** Definisco il tipo stringa */
typedef char *String;


/************** CONSOLE OPERATIONS ******************/


/** Pulisce la console da precedenti stampe */
void clear();

/** Mette in pausa il programma. L'esecuzione riprenderà premendo un pulsante
 * qualsiasi */
void pause();

/** Cambia il titolo della Console con la stringa s */
void setTitle(String s);

/** Sposta il cursore di inserimento nella posizione desiderata. Stampando
 * qualcosa, ad esempio con una printf(), dopo aver spostato il cursore, si
 * sovrascriverà quello che c'è scritto in quella posizione */
void setCursor(unsigned int line, unsigned int col);

/** Restituisce una variabile di tipo COORD (ovvero una struttura contenente
 * una coordinata x e una y) che indica la posizione attuale del cursore di
 * inserimento*/
COORD getCursor();

/** Va a capo */
void newLine();

/** Va a capo n volte */
void newLines(int n);

/** Pulisce la riga "line" da precedenti stampe */
void clearLine(int line);

/** Restituisce la larghezza (in pixel) del frame della console */
unsigned int getConsoleWindowWidth();

/** Restituisce l'altezza (in pixel) del frame della console */
unsigned int getConsoleWindowHeight();

/** Restituisce la larghezza (in numero di colonne) della console */
unsigned int getConsoleWidth();

/** Restituisce l'altezza (in numero di righe) della console */
unsigned int getConsoleHeight();

/** Imposta il numero di righe ed il numero di colonne della console */
void setConsoleSize(unsigned int lines, unsigned int cols);

/** Sposta la console nella posizione di coordinate (in pixel) "x" e "y" */
void setConsoleLocation(unsigned int x, unsigned int y);

/** Adatta la dimensione del buffer della console alla dimensione della
 * console stessa */
void adaptScreenBufferSize();

/** Centra il frame della console all'interno dello schermo */
void setConsoleCentered();

/** Emette un suono */
void beep();

/** Pulisce il buffer di input della console */
void flush();


/*************** COLOR OPERATIONS *******************/


/** Imposta il colore delle stringhe stampate e del loro sfondo prendendo in
 * input un intero ("color") che va da 0 a 255 */
void setColor(int color);

/** Restituisce il codice identificativo del colore attualemente in uso */
int getColor();

/** Imposta il colore del testo senza modificare quello di sfondo. I colori
 * sono definiti nella libreria come costanti, con nome in inglese (Esempio:
 * setTextColor(GREEN) cambierà il colore del testo in verde). */
void setTextColor(int color);

/** Imposta il colore di sfondo senza modificare quello del testo. I colori
 * sono definiti nella libreria come costanti, con nome in inglese (Esempio:
 * setBackgroundColor(WHITE) cambierà il colore di sfondo in bianco). */
void setBackgroundColor(int color);

/** Restituisce il codice identificativo del colore attualmente in uso per il
 * testo */
int getTextColor();

/** Restituisce il codice identificativo del colore attualmente in uso per lo
 * sfondo del testo */
int getBackgroundColor();


/*************** CHAR OPERATIONS ********************/


/** Restituisce la maiuscola del carattere "toUpper" */
char charToUpper(char toUpper);


/*************** STRING OPERATIONS ******************/


/** La stringa puntata dal puntatore string viene allocata in memoria ed
 * inizializzata con il valore della stringa input */
void initString(String *string, String input);

/** Restituisce la stringa "text" resa maiuscola */
String stringToUpper(String text);

/** Converte un intero in una stringa*/
String intToString(int n);

/** Converte una stringa in un intero */
int stringToInt(String s);

/** Confronta due stringhe. Restituisce TRUE se esse sono esattamente uguali */
boolean stringEqualsString(String s1, String s2);

/** Confronta due stringhe. Restituisce TRUE se esse sono uguali, ignorando
 * il case */
boolean stringEqualsStringIgnoreCase(String s1, String s2);

/** Confronta una stringa ed un intero. Restituisce TRUE se nella stringa "s"
 * è contenuto solo ed esattamente l'intero "n" */
boolean stringEqualsInt(String s, int n);


/*************** OUTPUT OPERATIONS ******************/


/** Stampa a video l'intero "integer" utilizzando il colore "color" */
void outInt(int integer, int color);

/** Stampa a video il numero "number" utilizzando il colore "color" */
void outFloat(float number, int color);

/** Stampa a video il numero "number" utilizzando il colore "color" */
void outDouble(double number, int color);

/** Stampa a video il carattere "character" utilizzando il colore "color" */
void outChar(char character, int pColor);

/** Stampa a video la stringa "text" utilizzando il colore "color" */
void outString(String text, int color);

/** Stampa a video il boolean "boo" utilizzando il colore "color" */
void outBoolean(boolean boo, int color);

/** Stampa a video la stringa "text" utilizzando il colore "color" e va a capo*/
void outStringLine(String text, int color);


/**************** INPUT OPERATIONS ******************/


/** Attende l'inserimento di un numero e lo restituisce. Nel caso in cui il
 * valore inserito non sia di tipo "int" questa funzione restituisce il
 * codice di controllo "CONTROL_CODE" */
int inInt(int color);

/** Del tutto equivalente a "inInt" con l'aggiunta che se il valore inserito
 * non è interno all'intervallo definito dai parametri "from" e "to" viene
 * stampata la stringa "error" e richiesto nuovamente l'input */
int controlledInInt(String text, int textColor, int inputColor, int from, int to, String error);

/** Attende l'inserimento di un numero e lo restituisce. Nel caso in cui il
 * valore inserito non sia di tipo "double" questa funzione restituisce il
 * codice di controllo "CONTROL_CODE" */
float inFloat(int color);

/** Attende l'inserimento di un numero e lo restituisce. Nel caso in cui il
 * valore inserito non sia di tipo "double" questa funzione restituisce il
 * codice di controllo "CONTROL_CODE" */
double inDouble(int color);

/** Attende l'inserimento di un carattere e la restituisce */
char inChar(int color);

/** Attende l'inserimento di una stringa e la restituisce */
String inString(int color);


/**************** RANDOM OPERATIONS *****************/


/** Restituisce un numero random compreso nell'intervallo definito dai
 * parametri from e to */
int randomInt(int from, int to);

/** Funzione da chiamare prima di "randomInt" per evitare che il programma
 * peschi sempre gli stessi numeri nelle successive esecuzioni */
void randomize();


/********************* MENU *************************/


/** Stampa la stringa "title" incorniciata da asterischi */
void starredString(String title, int color, int starColor);

/** Stampa un menu del tipo:
 *
 * [1] "menu[1]"
 * [2] "menu[2]"
 * [3] "menu[3]"
 * [4] "menu[4]"
 * [5] "menu[5]"
 * [6] "menu[6]"
 * [0] "end" */
void menu(int menuNumber, String menu[], int color, int secondColor, int thirdColor, String end);

/** Stampa un menu del tipo:
 *
 * [1] "menu[1]menu2[1]"
 * [2] "menu[2]menu2[2]"
 * [3] "menu[3]menu2[3]"
 * [4] "menu[4]menu2[4]"
 * [5] "menu[5]menu2[5]"
 * [6] "menu[6]menu2[6]"
 * [0] "end" */
void menu2(int menuNumber, String menu[], String menu2[], int color, int color2, int color3, int color4, String end);




:alert::alert::alert::alert::alert::alert::alert:
A questo indirizzo potete scaricare il file .a
db.tt/…
:alert::alert::alert::alert::alert::alert::alert:
Ultima modifica effettuata da Oneiros 02/12/10 21:47
aaa
02/12/10 23:05
pierotofy
Spam? :-|
Il mio blog: piero.dev
03/12/10 0:53
paoloricciuti
Postato originariamente da pierotofy:

Spam? :-|


Posso assicurare io per lui. Non è spam. È una persona vera che vuole condividere! ;)
aaa
03/12/10 9:16
HeDo
Postato originariamente da paoloricciuti:

Postato originariamente da pierotofy:

Spam? :-|


Posso assicurare io per lui. Non è spam. È una persona vera che vuole condividere! ;)


si ma non è questo il modo, deve far richiesta per diventare membro dopodichè può pubblicare articoli/tutorial su quello che gli pare :|
aaa
03/12/10 12:54
XBarboX
fa un gesto carino e subito lo trattate male...
aaa
03/12/10 13:43
a_butta
Non è trattare male. Anzi io condivido personalmente cioè che ha detto Paoloricciuti in base alla buona volontà che si evince dal messaggio. Ma le regole sono regole. Il forum non si usa per questo ed è giusto che il suo contributo venga spostato nella sezione giusta. Non è trattare male :D
aaa
03/12/10 22:27
netarrow
Ti rimando al link per fare la richiesta per diventare membro:
pierotofy.it/pages/members/join_module/

E pubblicare la libreria sotto la sezione programmi o progetti.

Altra cosa importantissima:

...
A questo indirizzo potete scaricare il file .a
...


I file .a sono binari, ma essendo pierotofy.it una community che segue l'open source per contribuire è richiesto che tutti i sorgenti siano distribuiti; nel caso del C quindi sia il .h sia il .c
aaa