Skip to content

Instantly share code, notes, and snippets.

@dlOuOlb
Last active January 15, 2023 11:55
Changing the font color on a console.
CMake_Minimum_Required( VERSION 3.12 )
Project( "MyColor" LANGUAGES "C" VERSION "0.0.0.0" DESCRIPTION "Changing the font color on a console." HOMEPAGE_URL "https://gist.github.com/dlOuOlb/6a491c71081bfa8189ed6553ac250bf4" )
Set( CMAKE_C_STANDARD "90" )
Set( CMAKE_SUPPRESS_REGENERATION "ON" )
Set( CMAKE_BUILD_TYPE "Release" )
Set( CMAKE_CONFIGURATION_TYPES "Release" )
Add_Executable( "MyColor" "main.c;names.c;values.c;" )
Target_Compile_Features( "MyColor" PRIVATE "c_std_90" )
#if !__STDC__
# error "This code is written in standard C90."
#else
# include <stdio.h> /* printf|puts */
# include <stdlib.h> /* EXIT_(FAILURE|SUCCESS)|bsearch|system */
# include <string.h> /* strcmp */
enum { xNumber = 0x8CU };
static const char *const *xCast_( const char *const *const Pointer ) { return Pointer; }
static signed int xCompare_( const void *const Former, const void *const Latter ) { return strcmp( *xCast_( Former ), *xCast_( Latter ) ); }
static signed int xPrint_( const char *const Order )
{
if( Order )
{
extern const char *const xNames[ xNumber ];
register const char *const *const Name = bsearch( &Order, xNames, sizeof xNames / sizeof *xNames, sizeof *xNames, xCompare_ );
if( Name )
{
extern const struct xColor { const unsigned char Red, Green, Blue, Alpha; } xValues[ xNumber ];
register const struct xColor *const Color = xValues + ( Name - xNames );
return printf( "\x1B[38;2;%u;%u;%um", Color->Red, Color->Green, Color->Blue );
}
else
return puts( Order );
}
else
return printf( "\x1B[0m" );
}
extern signed int main( const signed int Count, char **Orders )
{
if( !Count )
return EXIT_SUCCESS;
else if( !system( 0 ) )
return EXIT_FAILURE;
else if( system( " " ) )
return EXIT_FAILURE;
else if( xPrint_( 0 ) < 0 )
return EXIT_FAILURE;
else
{
while( *++Orders )
while( xPrint_( *Orders ) < 0 )
return EXIT_FAILURE;
return EXIT_SUCCESS;
}
}
#endif
#if !__STDC__
# error "This code is written in standard C90."
#else
const char *const xNames[ 0x8CU ] =
{
"AliceBlue",
"AntiqueWhite",
"Aqua",
"Aquamarine",
"Azure",
"Beige",
"Bisque",
"Black",
"BlanchedAlmond",
"Blue",
"BlueViolet",
"Brown",
"Burlywood",
"CadetBlue",
"Chartreuse",
"Chocolate",
"Coral",
"CornflowerBlue",
"Cornsilk",
"Crimson",
"Cyan",
"DarkBlue",
"DarkCyan",
"DarkGoldenrod",
"DarkGray",
"DarkGreen",
"DarkKhaki",
"DarkMagenta",
"DarkOliveGreen",
"DarkOrange",
"DarkOrchid",
"DarkRed",
"DarkSalmon",
"DarkSeaGreen",
"DarkSlateBlue",
"DarkSlateGray",
"DarkTurquoise",
"DarkViolet",
"DeepPink",
"DeepSkyBlue",
"DimGray",
"DodgerBlue",
"Firebrick",
"FloralWhite",
"ForestGreen",
"Fuchsia",
"Gainsboro",
"GhostWhite",
"Gold",
"Goldenrod",
"Gray",
"Green",
"GreenYellow",
"Honeydew",
"HotPink",
"IndianRed",
"Indigo",
"Ivory",
"Khaki",
"Lavender",
"LavenderBlush",
"LawnGreen",
"LemonChiffon",
"LightBlue",
"LightCoral",
"LightCyan",
"LightGoldenrodYellow",
"LightGray",
"LightGreen",
"LightPink",
"LightSalmon",
"LightSeaGreen",
"LightSkyBlue",
"LightSlateGray",
"LightSteelBlue",
"LightYellow",
"Lime",
"LimeGreen",
"Linen",
"Magenta",
"Maroon",
"MediumAquamarine",
"MediumBlue",
"MediumOrchid",
"MediumPurple",
"MediumSeaGreen",
"MediumSlateBlue",
"MediumSpringGreen",
"MediumTurquoise",
"MediumVioletRed",
"MidnightBlue",
"MintCream",
"MistyRose",
"Moccasin",
"NavajoWhite",
"Navy",
"OldLace",
"Olive",
"OliveDrab",
"Orange",
"OrangeRed",
"Orchid",
"PaleGoldenrod",
"PaleGreen",
"PaleTurquoise",
"PaleVioletRed",
"PapayaWhip",
"PeachPuff",
"Peru",
"Pink",
"Plum",
"PowderBlue",
"Purple",
"Red",
"RosyBrown",
"RoyalBlue",
"SaddleBrown",
"Salmon",
"SandyBrown",
"SeaGreen",
"Seashell",
"Sienna",
"Silver",
"SkyBlue",
"SlateBlue",
"SlateGray",
"Snow",
"SpringGreen",
"SteelBlue",
"Tan",
"Teal",
"Thistle",
"Tomato",
"Turquoise",
"Violet",
"Wheat",
"White",
"WhiteSmoke",
"Yellow",
"YellowGreen"
};
#endif
#if !__STDC__
# error "This code is written in standard C90."
#else
const struct xColor { const unsigned char Red, Green, Blue, Alpha; } xValues[ 0x8CU ] =
{
{ 0xF0U, 0xF8U, 0xFFU, 0xFFU },
{ 0xFAU, 0xEBU, 0xD7U, 0xFFU },
{ 0x00U, 0xFFU, 0xFFU, 0xFFU },
{ 0x7FU, 0xFFU, 0xD4U, 0xFFU },
{ 0xF0U, 0xFFU, 0xFFU, 0xFFU },
{ 0xF5U, 0xF5U, 0xDCU, 0xFFU },
{ 0xFFU, 0xE4U, 0xC4U, 0xFFU },
{ 0x00U, 0x00U, 0x00U, 0xFFU },
{ 0xFFU, 0xEBU, 0xCDU, 0xFFU },
{ 0x00U, 0x00U, 0xFFU, 0xFFU },
{ 0x8AU, 0x2BU, 0xE2U, 0xFFU },
{ 0xA5U, 0x2AU, 0x2AU, 0xFFU },
{ 0xDEU, 0xB8U, 0x87U, 0xFFU },
{ 0x5FU, 0x9EU, 0xA0U, 0xFFU },
{ 0x7FU, 0xFFU, 0x00U, 0xFFU },
{ 0xD2U, 0x69U, 0x1EU, 0xFFU },
{ 0xFFU, 0x7FU, 0x50U, 0xFFU },
{ 0x64U, 0x95U, 0xEDU, 0xFFU },
{ 0xFFU, 0xF8U, 0xDCU, 0xFFU },
{ 0xDCU, 0x14U, 0x3CU, 0xFFU },
{ 0x00U, 0xFFU, 0xFFU, 0xFFU },
{ 0x00U, 0x00U, 0x8BU, 0xFFU },
{ 0x00U, 0x8BU, 0x8BU, 0xFFU },
{ 0xB8U, 0x86U, 0x0BU, 0xFFU },
{ 0xA9U, 0xA9U, 0xA9U, 0xFFU },
{ 0x00U, 0x64U, 0x00U, 0xFFU },
{ 0xBDU, 0xB7U, 0x6BU, 0xFFU },
{ 0x8BU, 0x00U, 0x8BU, 0xFFU },
{ 0x55U, 0x6BU, 0x2FU, 0xFFU },
{ 0xFFU, 0x8CU, 0x00U, 0xFFU },
{ 0x99U, 0x32U, 0xCCU, 0xFFU },
{ 0x8BU, 0x00U, 0x00U, 0xFFU },
{ 0xE9U, 0x96U, 0x7AU, 0xFFU },
{ 0x8FU, 0xBCU, 0x8FU, 0xFFU },
{ 0x48U, 0x3DU, 0x8BU, 0xFFU },
{ 0x2FU, 0x4FU, 0x4FU, 0xFFU },
{ 0x00U, 0xCEU, 0xD1U, 0xFFU },
{ 0x94U, 0x00U, 0xD3U, 0xFFU },
{ 0xFFU, 0x14U, 0x93U, 0xFFU },
{ 0x00U, 0xBFU, 0xFFU, 0xFFU },
{ 0x69U, 0x69U, 0x69U, 0xFFU },
{ 0x1EU, 0x90U, 0xFFU, 0xFFU },
{ 0xB2U, 0x22U, 0x22U, 0xFFU },
{ 0xFFU, 0xFAU, 0xF0U, 0xFFU },
{ 0x22U, 0x8BU, 0x22U, 0xFFU },
{ 0xFFU, 0x00U, 0xFFU, 0xFFU },
{ 0xDCU, 0xDCU, 0xDCU, 0xFFU },
{ 0xF8U, 0xF8U, 0xFFU, 0xFFU },
{ 0xFFU, 0xD7U, 0x00U, 0xFFU },
{ 0xDAU, 0xA5U, 0x20U, 0xFFU },
{ 0x80U, 0x80U, 0x80U, 0xFFU },
{ 0x00U, 0x80U, 0x00U, 0xFFU },
{ 0xADU, 0xFFU, 0x2FU, 0xFFU },
{ 0xF0U, 0xFFU, 0xF0U, 0xFFU },
{ 0xFFU, 0x69U, 0xB4U, 0xFFU },
{ 0xCDU, 0x5CU, 0x5CU, 0xFFU },
{ 0x4BU, 0x00U, 0x82U, 0xFFU },
{ 0xFFU, 0xFFU, 0xF0U, 0xFFU },
{ 0xF0U, 0xE6U, 0x8CU, 0xFFU },
{ 0xE6U, 0xE6U, 0xFAU, 0xFFU },
{ 0xFFU, 0xF0U, 0xF5U, 0xFFU },
{ 0x7CU, 0xFCU, 0x00U, 0xFFU },
{ 0xFFU, 0xFAU, 0xCDU, 0xFFU },
{ 0xADU, 0xD8U, 0xE6U, 0xFFU },
{ 0xF0U, 0x80U, 0x80U, 0xFFU },
{ 0xE0U, 0xFFU, 0xFFU, 0xFFU },
{ 0xFAU, 0xFAU, 0xD2U, 0xFFU },
{ 0xD3U, 0xD3U, 0xD3U, 0xFFU },
{ 0x90U, 0xEEU, 0x90U, 0xFFU },
{ 0xFFU, 0xB6U, 0xC1U, 0xFFU },
{ 0xFFU, 0xA0U, 0x7AU, 0xFFU },
{ 0x20U, 0xB2U, 0xAAU, 0xFFU },
{ 0x87U, 0xCEU, 0xFAU, 0xFFU },
{ 0x77U, 0x88U, 0x99U, 0xFFU },
{ 0xB0U, 0xC4U, 0xDEU, 0xFFU },
{ 0xFFU, 0xFFU, 0xE0U, 0xFFU },
{ 0x00U, 0xFFU, 0x00U, 0xFFU },
{ 0x32U, 0xCDU, 0x32U, 0xFFU },
{ 0xFAU, 0xF0U, 0xE6U, 0xFFU },
{ 0xFFU, 0x00U, 0xFFU, 0xFFU },
{ 0x80U, 0x00U, 0x00U, 0xFFU },
{ 0x66U, 0xCDU, 0xAAU, 0xFFU },
{ 0x00U, 0x00U, 0xCDU, 0xFFU },
{ 0xBAU, 0x55U, 0xD3U, 0xFFU },
{ 0x93U, 0x70U, 0xDBU, 0xFFU },
{ 0x3CU, 0xB3U, 0x71U, 0xFFU },
{ 0x7BU, 0x68U, 0xEEU, 0xFFU },
{ 0x00U, 0xFAU, 0x9AU, 0xFFU },
{ 0x48U, 0xD1U, 0xCCU, 0xFFU },
{ 0xC7U, 0x15U, 0x85U, 0xFFU },
{ 0x19U, 0x19U, 0x70U, 0xFFU },
{ 0xF5U, 0xFFU, 0xFAU, 0xFFU },
{ 0xFFU, 0xE4U, 0xE1U, 0xFFU },
{ 0xFFU, 0xE4U, 0xB5U, 0xFFU },
{ 0xFFU, 0xDEU, 0xADU, 0xFFU },
{ 0x00U, 0x00U, 0x80U, 0xFFU },
{ 0xFDU, 0xF5U, 0xE6U, 0xFFU },
{ 0x80U, 0x80U, 0x00U, 0xFFU },
{ 0x6BU, 0x8EU, 0x23U, 0xFFU },
{ 0xFFU, 0xA5U, 0x00U, 0xFFU },
{ 0xFFU, 0x45U, 0x00U, 0xFFU },
{ 0xDAU, 0x70U, 0xD6U, 0xFFU },
{ 0xEEU, 0xE8U, 0xAAU, 0xFFU },
{ 0x98U, 0xFBU, 0x98U, 0xFFU },
{ 0xAFU, 0xEEU, 0xEEU, 0xFFU },
{ 0xDBU, 0x70U, 0x93U, 0xFFU },
{ 0xFFU, 0xEFU, 0xD5U, 0xFFU },
{ 0xFFU, 0xDAU, 0xB9U, 0xFFU },
{ 0xCDU, 0x85U, 0x3FU, 0xFFU },
{ 0xFFU, 0xC0U, 0xCBU, 0xFFU },
{ 0xDDU, 0xA0U, 0xDDU, 0xFFU },
{ 0xB0U, 0xE0U, 0xE6U, 0xFFU },
{ 0x80U, 0x00U, 0x80U, 0xFFU },
{ 0xFFU, 0x00U, 0x00U, 0xFFU },
{ 0xBCU, 0x8FU, 0x8FU, 0xFFU },
{ 0x41U, 0x69U, 0xE1U, 0xFFU },
{ 0x8BU, 0x45U, 0x13U, 0xFFU },
{ 0xFAU, 0x80U, 0x72U, 0xFFU },
{ 0xF4U, 0xA4U, 0x60U, 0xFFU },
{ 0x2EU, 0x8BU, 0x57U, 0xFFU },
{ 0xFFU, 0xF5U, 0xEEU, 0xFFU },
{ 0xA0U, 0x52U, 0x2DU, 0xFFU },
{ 0xC0U, 0xC0U, 0xC0U, 0xFFU },
{ 0x87U, 0xCEU, 0xEBU, 0xFFU },
{ 0x6AU, 0x5AU, 0xCDU, 0xFFU },
{ 0x70U, 0x80U, 0x90U, 0xFFU },
{ 0xFFU, 0xFAU, 0xFAU, 0xFFU },
{ 0x00U, 0xFFU, 0x7FU, 0xFFU },
{ 0x46U, 0x82U, 0xB4U, 0xFFU },
{ 0xD2U, 0xB4U, 0x8CU, 0xFFU },
{ 0x00U, 0x80U, 0x80U, 0xFFU },
{ 0xD8U, 0xBFU, 0xD8U, 0xFFU },
{ 0xFFU, 0x63U, 0x47U, 0xFFU },
{ 0x40U, 0xE0U, 0xD0U, 0xFFU },
{ 0xEEU, 0x82U, 0xEEU, 0xFFU },
{ 0xF5U, 0xDEU, 0xB3U, 0xFFU },
{ 0xFFU, 0xFFU, 0xFFU, 0xFFU },
{ 0xF5U, 0xF5U, 0xF5U, 0xFFU },
{ 0xFFU, 0xFFU, 0x00U, 0xFFU },
{ 0x9AU, 0xCDU, 0x32U, 0xFFU }
};
#endif
@dlOuOlb
Copy link
Author

dlOuOlb commented Jan 15, 2023

  • Building the program:
     $ cmake -S "." -B "./Build"
     $ cmake --build "./Build" --config "Release"
  • Testing the program:
     $ MyColor Orange Juice
     $ MyColor Tomato
     $ MyColor

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment