//all credits to Ray "Bear" Dillinger
		  1. Right System Locale:
				  You have to be using a UTF-8 locale (Mine is en_US.UTF-8; I imagine others will have different choices).
				Type ‘locale’ at a shell prompt to be sure.
		  2. Right Terminal:
				 You have to have a term program that can display non-ASCII characters. 
				Most of them can handle that these days, but there are still a few holdouts. 
				rxvt-unicode and konsole, popular term programs on Linux, are both good.
		  3. Right Console Font:
				  You have to use a console font which contains glyphs for the non-ASCII characters that you use.
				Again, most default console fonts can handle that these days, but it’s still another gotcha,
				and if you routinely pick some random blambot font to use on the console you’re likely to miss out.
				 Try typing a non-ASCII character at the console prompt just to make sure you see it. 
				If you don’t know how to type non-ASCII characters from the keyboard,
				that’s beyond the scope of what’s covered here and you’ll need to go and read some documentation
				and possibly set some keyboard preferences.
				Anyway, if you see it, then you’ve got the first, second, and third things covered.
		  4. Right Ncurses Package:
				  You have to have ncurses configured to deal with wide characters. 
				For most linux distributions, that means: Your ncurses distribution is based on version 5.4 or later (mine is 5.9),
				but NOT on version 11. I have no idea where version 11 came from,
				but it’s definitely a fork based on a pre-5.4 ncurses version, and hasn’t got the Unicode extensions. 
				Also, you must have the ‘ncursesw’ versions, which are configured and compiled for wide characters.
				 How this works depends on your distribution, but for Debian, you have to get both the ‘ncursesw’ package
				to run ncurses programs that use wide characters and the ‘ncursesw-dev’ package to compile them.
				The current versions are ncursesw5 and ncursesw5-dev.
			Purple(But there’s an apparent packaging mistake where the wide-character dev package, ncursesw-dev, 
				does not contain any documentation for the wide-character functions.
				If you want the man pages for the wide-character curses functions, you must also install ncurses-dev,
				which comes with a “wrong” version of ncurses that doesn’t have the wide-character functions.
				Don’t think too much about why anyone would do this; you’ll only break your head.
				The short version of the story is that you pretty much have to install ncurses, ncurses-dev, ncursesw, and ncursesw-dev, 
				all at the same time, and then just be very very careful about not ever using the library versions
				that don’t actually have the wide character functions in them. )
		  5. Program Locale:
				  Your program has to call “setlocale” immediately after it starts up, before it starts curses or does any I/O.
				If it doesn’t call setlocale, your program will remain in the ‘C’ locale, which assumes that the terminal cannot
				display any characters outside the ASCII set. If you do any input or output, or start curses before calling setlocale,
				you will force your runtime to commit to some settings before it knows the locale,
				and then setlocale when you do call it won’t have all of the desired effects.
				Your program is likely to print ASCII transliterations for characters outside the ASCII range if this happens.
				setlocale(LC_ALL, "");
		  6. Use Specified macro:
				  You have to #define _XOPEN_SOURCE_EXTENDED in your source before any library #include statements.
				The wide character curses functions are part of a standard called the XOPEN standard,
				and preprocessing conditionals check this symbol to see whether your program expects to use that standard.
				If this symbol is found, and you’ve included the right headers (see item Seven)
				then macroexpansion will configure the headers you include to actually contain definitions
				for the documented wide-character functions. But it’s not just the ‘curses’ headers that depend on it;
				you will get bugs and linking problems with other libraries if you have this symbol defined for some includes but not others,
				so put it before all include statements.
				 Unfortunately, the XOPEN_SOURCE_EXTENDED macro is not mentioned in the man pages of many of the functions
				that won’t link if you don’t do it. You’d have to hunt through a bunch of not-very-obviously related ‘see also’ pages
				before you find one that mentions it, and then it might not be clear that it relates to the function you were interested in.
				Trust me, it does. Without this macro, you can use the right headers and still find that there are no wide-curses definitions
				in them to link to.
			Purple(7. Right Ncurses header
				  You have to include the right header file rather than the one the documentation tells you to include.
				This isn’t a joke. The man page tells you that you have to include “curses.h”
				to get any of the wide-character functions working, but the header that actually contains
				the wide-character function definitions is “ncursesw/curses.h“. I hope this gets fixed soon,
				but it’s been this way for several years so some idiot may think this isn’t a bug. )
		  8. Linking Ncurses
				  You have to use the -lncursesw compiler option (as opposed to the -lncurses option) when you’re linking your executable.
			Purple(Earlier versions of gcc contained a bug that -WError and -WAll would cause linking to fail on the ncursesw library,
				but this appears to have been fixed. )
		  9. Use Wide Char Functions
				  Use the wide-character versions of everything, not just a few things.
				This is harder than it ought to be, because the library doesn’t issue link warnings warn you about mixing functionality,
				and the documentation doesn’t specifically say which of the things it recommends won’t work correctly with wide characters.
				That means cchar_t rather than chtype, wide video attributes rather than standard video attributes,
				and setcchar rather than OR to combine attributes with character information.