fork download
  1. #ifndef CON_COLOR_H
  2. #define CON_COLOR_H
  3.  
  4. #if defined(_WIN32) || defined(_WIN64) || defined(__WINDOWS__) || defined(__TOS_WIN__)
  5.  
  6. #define CON_COLOR_WIN32
  7.  
  8. #elif defined(__linux__) || defined(__unix__) || defined(__unix) \
  9. || defined(__CYGWIN__) || defined(__GNU__) || defined(__MINGW32__) \
  10. || defined(__MINGW64__)
  11.  
  12. #define CON_COLOR_ANSI
  13. #endif
  14.  
  15.  
  16. #if 0 /* change to 1 to FORCE ANSI mode (for Windows you need: ansicon.exe)*/
  17. #ifdef CON_COLOR_WIN32
  18. #undef CON_COLOR_WIN32
  19. #endif
  20.  
  21. #ifndef CON_COLOR_ANSI
  22. #define CON_COLOR_ANSI
  23. #endif
  24. #endif
  25.  
  26.  
  27. #if defined( CON_COLOR_WIN32 )
  28.  
  29. #include <windows.h>
  30.  
  31. HANDLE hStdout;
  32. CONSOLE_SCREEN_BUFFER_INFO csbiInfo, csbiSaved, csbiTemp;
  33.  
  34. /* Win32 Macros */
  35.  
  36. #define CONOUT_INIT() \
  37. do { \
  38. hStdout = GetStdHandle( STD_OUTPUT_HANDLE ); \
  39. if ( hStdout != INVALID_HANDLE_VALUE ) \
  40. { \
  41. GetConsoleScreenBufferInfo(hStdout, &csbiInfo); \
  42. memcpy( &csbiSaved, &csbiInfo, \
  43. sizeof(CONSOLE_SCREEN_BUFFER_INFO) ); \
  44. } \
  45. else \
  46. printf("*** CONOUT_INIT failed: %d!\n", GetLastError());\
  47. } while(0)
  48.  
  49. #define CONOUT_SET_COLOR( color ) \
  50. do { \
  51. memcpy( &csbiTemp, &csbiInfo, \
  52. sizeof(CONSOLE_SCREEN_BUFFER_INFO) ); \
  53. csbiInfo.wAttributes = (color); \
  54. SetConsoleTextAttribute( hStdout, (color) ); \
  55. } while(0)
  56.  
  57. #define CONOUT_ADD_COLOR( color ) \
  58. do { \
  59. csbiInfo.wAttributes |= (color); \
  60. SetConsoleTextAttribute(hStdout, csbiInfo.wAttributes); \
  61. } while(0)
  62.  
  63. #define CONOUT_RESET() \
  64. do { \
  65. SetConsoleTextAttribute(hStdout, csbiTemp.wAttributes); \
  66. memcpy( &csbiInfo, &csbiTemp, \
  67. sizeof(CONSOLE_SCREEN_BUFFER_INFO) ); \
  68. } while(0)
  69.  
  70. #define CONOUT_RESTORE() \
  71. SetConsoleTextAttribute( hStdout, csbiSaved.wAttributes )
  72.  
  73. /* Win32 Foreground Colors */
  74.  
  75. #define FG_NOCHANGE -1
  76. #define BG_NOCHANGE -1
  77.  
  78. #define FG_WHITE \
  79. FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_INTENSITY
  80.  
  81. #define FG_GRAY FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE
  82.  
  83. #define FG_DARKGRAY FOREGROUND_INTENSITY
  84. #define FG_BLACK 0x00
  85.  
  86. #define FG_RED FOREGROUND_RED|FOREGROUND_INTENSITY
  87. #define FG_DARKRED FOREGROUND_RED
  88.  
  89. #define FG_GREEN FOREGROUND_GREEN|FOREGROUND_INTENSITY
  90. #define FG_DARKGREEN FOREGROUND_GREEN
  91.  
  92. #define FG_BLUE FOREGROUND_BLUE|FOREGROUND_INTENSITY
  93. #define FG_DARKBLUE FOREGROUND_BLUE
  94.  
  95. #define FG_YELLOW FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_INTENSITY
  96. #define FG_DARKYELLOW FOREGROUND_RED|FOREGROUND_GREEN
  97.  
  98. #define FG_MAGENTA FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_INTENSITY
  99. #define FG_DARKMAGENTA FOREGROUND_RED|FOREGROUND_BLUE
  100.  
  101. #define FG_CYAN FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_INTENSITY
  102. #define FG_DARKCYAN FOREGROUND_GREEN|FOREGROUND_BLUE
  103.  
  104. /* Win32 Background Colors */
  105.  
  106. #define BG_WHITE \
  107. BACKGROUND_RED|BACKGROUND_GREEN|BACKGROUND_BLUE|BACKGROUND_INTENSITY
  108.  
  109. #define BG_GRAY BACKGROUND_RED|BACKGROUND_GREEN|BACKGROUND_BLUE
  110.  
  111. #define BG_DARKGRAY BACKGROUND_INTENSITY
  112. #define BG_BLACK 0x00
  113.  
  114. #define BG_RED BACKGROUND_RED|BACKGROUND_INTENSITY
  115. #define BG_DARKRED BACKGROUND_RED
  116.  
  117. #define BG_GREEN BACKGROUND_GREEN|BACKGROUND_INTENSITY
  118. #define BG_DARKGREEN BACKGROUND_GREEN
  119.  
  120. #define BG_BLUE BACKGROUND_BLUE|BACKGROUND_INTENSITY
  121. #define BG_DARKBLUE BACKGROUND_BLUE
  122.  
  123. #define BG_YELLOW BACKGROUND_RED|BACKGROUND_GREEN|BACKGROUND_INTENSITY
  124. #define BG_DARKYELLOW BACKGROUND_RED|BACKGROUND_GREEN
  125.  
  126. #define BG_MAGENTA BACKGROUND_RED|BACKGROUND_BLUE|BACKGROUND_INTENSITY
  127. #define BG_DARKMAGENTA BACKGROUND_RED|BACKGROUND_BLUE
  128.  
  129. #define BG_CYAN BACKGROUND_GREEN|BACKGROUND_BLUE|BACKGROUND_INTENSITY
  130. #define BG_DARKCYAN BACKGROUND_GREEN|BACKGROUND_BLUE
  131.  
  132. #elif defined( CON_COLOR_ANSI )
  133.  
  134. /* ANSI Macros */
  135.  
  136. #define CONOUT_INIT()
  137. #define CONOUT_SET_COLOR( color ) printf( color )
  138. #define CONOUT_ADD_COLOR( color ) printf( color )
  139. #define CONOUT_RESET() printf( "\033[0m" )
  140. #define CONOUT_RESTORE() printf( "\033[0m" )
  141.  
  142. /* ANSI Foreground Colors */
  143.  
  144. #define FG_NOCHANGE '\0'
  145. #define BG_NOCHANGE '\0'
  146.  
  147. #define FG_WHITE "\033[1;37m"
  148. #define FG_GRAY "\033[0;37m"
  149.  
  150. #define FG_DARKGRAY "\033[1;30m"
  151. #define FG_BLACK "\033[0;30m"
  152.  
  153. #define FG_RED "\033[1;31m"
  154. #define FG_DARKRED "\033[0;31m"
  155.  
  156. #define FG_GREEN "\033[1;32m"
  157. #define FG_DARKGREEN "\033[0;32m"
  158.  
  159. #define FG_BLUE "\033[1;34m"
  160. #define FG_DARKBLUE "\033[0;34m"
  161.  
  162. #define FG_YELLOW "\033[1;33m"
  163. #define FG_DARKYELLOW "\033[0;33m"
  164.  
  165. #define FG_MAGENTA "\033[1;35m"
  166. #define FG_DARKMAGENTA "\033[0;35m"
  167.  
  168. #define FG_CYAN "\033[1;36m"
  169. #define FG_DARKCYAN "\033[0;36m"
  170.  
  171. /* ANSI Background Colors */
  172.  
  173. #define BG_WHITE "\033[47m"
  174. #define BG_GRAY "\033[47m"
  175.  
  176. #define BG_DARKGRAY "\033[40m"
  177. #define BG_BLACK "\033[40m"
  178.  
  179. #define BG_RED "\033[41m"
  180. #define BG_DARKRED "\033[41m"
  181.  
  182. #define BG_GREEN "\033[42m"
  183. #define BG_DARKGREEN "\033[42m"
  184.  
  185. #define BG_BLUE "\033[44m"
  186. #define BG_DARKBLUE "\033[44m"
  187.  
  188. #define BG_YELLOW "\033[43m"
  189. #define BG_DARKYELLOW "\033[43m"
  190.  
  191. #define BG_MAGENTA "\033[45m"
  192. #define BG_DARKMAGENTA "\033[45m"
  193.  
  194. #define BG_CYAN "\033[46m"
  195. #define BG_DARKCYAN "\033[46m"
  196. #endif
  197.  
  198. #define CONOUT_PRINTF(fg, bg, ...) \
  199. do { \
  200. if ( (fg) != FG_NOCHANGE ) \
  201. CONOUT_SET_COLOR( (fg) ); \
  202. if ( (bg) != BG_NOCHANGE ) \
  203. CONOUT_ADD_COLOR( (bg) ); \
  204. printf( __VA_ARGS__ ); \
  205. if ( (fg) != FG_NOCHANGE || (bg) != BG_NOCHANGE ) \
  206. CONOUT_RESET(); \
  207. } while(0)
  208.  
  209.  
  210.  
  211. #endif /* ifndef CON_COLOR_H */
  212.  
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty