/**
* 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);