/** =========== CODE PAGES v1.0 - luglio 2016, di Aldo Carpanelli ==============
Il programma permette di "ispezionare" il code page (character set) usato nella
console del C nell'ambito di una certa localizzazione.
Funziona solo in ambiente Windows, non portabile.
=============================================================================**/
#ifndef CODEPAGES_H_INCLUDED
#define CODEPAGES_H_INCLUDED
/** ===> INCLUSIONI <======================================================= **/
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
/** ===> COSTANTI <========================================================= **/
enum {
kCmndEsci,
kCmndCambiaLocale,
kCmndCar_0_31,
kCmndCar_32_127,
kCmndCar_128_255,
kTotVociMenu
};
/** ===> STRINGHE <========================================================= **/
const char *kStrVociMenu[kTotVociMenu] = {
"Esci dal programma",
"Cambia locale",
"Mostra caratteri 1-31",
"Mostra caratteri 32-127",
"Mostra caratteri 128-255"
};
// usate in "main()"
const char kStrNomeProgramma[] =
"Code Pages";
const char kStrErrMemoriaInsuff[] =
" ERRORE!\n Memoria insufficiente";
const char kStrErrDimConsoleIlleggibili[] =
" ERRORE!\n Impossibile verificare le dimensioni della console";
// usate in "Menu()"
const char kStrBoxTitolo_1[] =
"C O D E P A G E S\nvisualizza i caratteri della localizzazione";
const char kStrSceltaComando_1[] =
" Esprimi la tua scelta: ";
const char kStrSceltaComando_2[] =
" Scelta non valida, riprova: ";
// usate in "CambiaLocale()"
const char kStrBoxTitolo_2[] =
"CAMBIAMENTO LOCALE";
const char kStrEtichLocale[] =
" Locale corrente: ";
const char kStrRichiestaLocale[] =
" Stringa identificativa\n della nuova localizzazione:";
const char kStrErrStrLocIgnota[] =
" ERRORE!\n Stringa non riconosciuta";
// usate in "VisualizzaTabella()"
const char kStrTitTab_1[] =
"CARATTERI 1-31";
const char kStrTitTab_2[] =
"CARATTERI 32-127";
const char kStrTitTab_3[] =
"CARATTERI 128-255";
const char kStrSottoTitTab[] =
"locale: ";
/** ===> PROTOTIPI <======================================================== **/
bool RicavaNumeroColonneConsole( void );
void ImpostaTitoloFinestra( const char *titolo );
void ImpostaColoriConsole( WORD c );
int Menu( void );
void CambiaLocale( char *loc, int dimMaxLoc, char *buff, int dimBuff );
void VisualizzaTabella( const char *loc, char *buff, int tipo );
char *ListaCaratteri_0_31( char *buff );
char *ListaCaratteri_32_127( char *buff );
char *ListaCaratteri_128_255( char *buff );
void Centrato( const char *s, int largh );
void Box( const char *s, int largh, int marg, bool txt_centrato, bool X2 );
void Errore( const char *msg );
/** ===> MACRO <============================================================ **/
#define CLS system("cls")
#define PAUSE system("pause")
#define A_CAPO putchar( '\n' )
#define SPAZI(n) for( int i=0; i<(n); ++i ) putchar( ' ' )
#define RIGA(n) for( int i=0; i<(n); ++i ) putchar( '-' )
#define RIGA_VERT putchar( '|' )
#define RIGA_2(n) for( int i=0; i<(n); ++i ) putchar( '=' )
#define COLORE_TESTO(r,g,b,i) (WORD)(((r)?FOREGROUND_RED:0)|\
((g)?FOREGROUND_GREEN:0)|\
((b)?FOREGROUND_BLUE:0)|\
((i)?FOREGROUND_INTENSITY:0))
#define COLORE_SFONDO(r,g,b,i) (WORD)(((r)?BACKGROUND_RED:0)|\
((g)?BACKGROUND_GREEN:0)|\
((b)?BACKGROUND_BLUE:0)|\
((i)?BACKGROUND_INTENSITY:0))
#define COL_DFLT (WORD)(COLORE_TESTO(0,1,0,1)|COLORE_SFONDO(0,0,0,0))
#define GIALLO (WORD)(COLORE_TESTO(1,1,0,1)|COLORE_SFONDO(0,0,0,0))
#define ROSSO (WORD)(COLORE_TESTO(1,0,0,1)|COLORE_SFONDO(0,0,0,0))
#endif // CODEPAGES_H_INCLUDED