/src/bin/col.c

https://bitbucket.org/hchbaw/terminology · C · 475 lines · 421 code · 49 blank · 5 comment · 7 complexity · 4b3e0c8369aebe2557df777b31824e3d MD5 · raw file

  1. #include "private.h"
  2. #include <Elementary.h>
  3. #include "config.h"
  4. #include "col.h"
  5. typedef struct _Color Color;
  6. struct _Color
  7. {
  8. unsigned char r;
  9. unsigned char g;
  10. unsigned char b;
  11. unsigned char a;
  12. };
  13. static const Color default_colors[2][2][12] =
  14. {
  15. { // normal
  16. { // normal
  17. { 0xaa, 0xaa, 0xaa, 0xff }, // COL_DEF
  18. { 0x00, 0x00, 0x00, 0xff }, // COL_BLACK
  19. { 0xc0, 0x00, 0x00, 0xff }, // COL_RED
  20. { 0x00, 0xc0, 0x00, 0xff }, // COL_GREEN
  21. { 0xc0, 0xc0, 0x00, 0xff }, // COL_YELLOW
  22. { 0x00, 0x00, 0xc0, 0xff }, // COL_BLUE
  23. { 0xc0, 0x00, 0xc0, 0xff }, // COL_MAGENTA
  24. { 0x00, 0xc0, 0xc0, 0xff }, // COL_CYAN
  25. { 0xc0, 0xc0, 0xc0, 0xff }, // COL_WHITE
  26. { 0x00, 0x00, 0x00, 0x00 }, // COL_INVIS
  27. { 0x22, 0x22, 0x22, 0xff }, // COL_INVERSE
  28. { 0xaa, 0xaa, 0xaa, 0xff }, // COL_INVERSEBG
  29. },
  30. { // bright/bold
  31. { 0xee, 0xee, 0xee, 0xff }, // COL_DEF
  32. { 0xcc, 0xcc, 0xcc, 0xff }, // COL_BLACK
  33. { 0xcc, 0x88, 0x88, 0xff }, // COL_RED
  34. { 0x88, 0xcc, 0x88, 0xff }, // COL_GREEN
  35. { 0xcc, 0xaa, 0x88, 0xff }, // COL_YELLOW
  36. { 0x88, 0x88, 0xcc, 0xff }, // COL_BLUE
  37. { 0xcc, 0x88, 0xcc, 0xff }, // COL_MAGENTA
  38. { 0x88, 0xcc, 0xcc, 0xff }, // COL_CYAN
  39. { 0xcc, 0xcc, 0xcc, 0xff }, // COL_WHITE
  40. { 0x00, 0x00, 0x00, 0x00 }, // COL_INVIS
  41. { 0x11, 0x11, 0x11, 0xff }, // COL_INVERSE
  42. { 0xee, 0xee, 0xee, 0xff }, // COL_INVERSEBG
  43. },
  44. },
  45. { // intense
  46. { // normal
  47. { 0xdd, 0xdd, 0xdd, 0xff }, // COL_DEF
  48. { 0x80, 0x80, 0x80, 0xff }, // COL_BLACK
  49. { 0xff, 0x80, 0x80, 0xff }, // COL_RED
  50. { 0x80, 0xff, 0x80, 0xff }, // COL_GREEN
  51. { 0xff, 0xff, 0x80, 0xff }, // COL_YELLOW
  52. { 0x80, 0x80, 0xff, 0xff }, // COL_BLUE
  53. { 0xff, 0x80, 0xff, 0xff }, // COL_MAGENTA
  54. { 0x80, 0xff, 0xff, 0xff }, // COL_CYAN
  55. { 0xff, 0xff, 0xff, 0xff }, // COL_WHITE
  56. { 0x00, 0x00, 0x00, 0x00 }, // COL_INVIS
  57. { 0x11, 0x11, 0x11, 0xff }, // COL_INVERSE
  58. { 0xcc, 0xcc, 0xcc, 0xff }, // COL_INVERSEBG
  59. },
  60. { // bright/bold
  61. { 0xff, 0xff, 0xff, 0xff }, // COL_DEF
  62. { 0xcc, 0xcc, 0xcc, 0xff }, // COL_BLACK
  63. { 0xff, 0xcc, 0xcc, 0xff }, // COL_RED
  64. { 0xcc, 0xff, 0xcc, 0xff }, // COL_GREEN
  65. { 0xff, 0xff, 0xcc, 0xff }, // COL_YELLOW
  66. { 0xcc, 0xcc, 0xff, 0xff }, // COL_BLUE
  67. { 0xff, 0xcc, 0xff, 0xff }, // COL_MAGENTA
  68. { 0xcc, 0xff, 0xff, 0xff }, // COL_CYAN
  69. { 0xff, 0xff, 0xff, 0xff }, // COL_WHITE
  70. { 0x00, 0x00, 0x00, 0x00 }, // COL_INVIS
  71. { 0x00, 0x00, 0x00, 0xff }, // COL_INVERSE
  72. { 0xff, 0xff, 0xff, 0xff }, // COL_INVERSEBG
  73. }
  74. }
  75. };
  76. static const Color default_colors256[256] =
  77. {
  78. // basic 16 repeated
  79. { 0x00, 0x00, 0x00, 0xff }, // COL_BLACK
  80. { 0xc0, 0x00, 0x00, 0xff }, // COL_RED
  81. { 0x00, 0xc0, 0x00, 0xff }, // COL_GREEN
  82. { 0xc0, 0xc0, 0x00, 0xff }, // COL_YELLOW
  83. { 0x00, 0x00, 0xc0, 0xff }, // COL_BLUE
  84. { 0xc0, 0x00, 0xc0, 0xff }, // COL_MAGENTA
  85. { 0x00, 0xc0, 0xc0, 0xff }, // COL_CYAN
  86. { 0xc0, 0xc0, 0xc0, 0xff }, // COL_WHITE
  87. { 0x80, 0x80, 0x80, 0xff }, // COL_BLACK
  88. { 0xff, 0x80, 0x80, 0xff }, // COL_RED
  89. { 0x80, 0xff, 0x80, 0xff }, // COL_GREEN
  90. { 0xff, 0xff, 0x80, 0xff }, // COL_YELLOW
  91. { 0x80, 0x80, 0xff, 0xff }, // COL_BLUE
  92. { 0xff, 0x80, 0xff, 0xff }, // COL_MAGENTA
  93. { 0x80, 0xff, 0xff, 0xff }, // COL_CYAN
  94. { 0xff, 0xff, 0xff, 0xff }, // COL_WHITE
  95. // pure 6x6x6 colorcube
  96. { 0x00, 0x00, 0x00, 0xff },
  97. { 0x00, 0x00, 0x5f, 0xff },
  98. { 0x00, 0x00, 0x87, 0xff },
  99. { 0x00, 0x00, 0xaf, 0xff },
  100. { 0x00, 0x00, 0xd7, 0xff },
  101. { 0x00, 0x00, 0xff, 0xff },
  102. { 0x00, 0x5f, 0x00, 0xff },
  103. { 0x00, 0x5f, 0x5f, 0xff },
  104. { 0x00, 0x5f, 0x87, 0xff },
  105. { 0x00, 0x5f, 0xaf, 0xff },
  106. { 0x00, 0x5f, 0xd7, 0xff },
  107. { 0x00, 0x5f, 0xff, 0xff },
  108. { 0x00, 0x87, 0x00, 0xff },
  109. { 0x00, 0x87, 0x5f, 0xff },
  110. { 0x00, 0x87, 0x87, 0xff },
  111. { 0x00, 0x87, 0xaf, 0xff },
  112. { 0x00, 0x87, 0xd7, 0xff },
  113. { 0x00, 0x87, 0xff, 0xff },
  114. { 0x00, 0xaf, 0x00, 0xff },
  115. { 0x00, 0xaf, 0x5f, 0xff },
  116. { 0x00, 0xaf, 0x87, 0xff },
  117. { 0x00, 0xaf, 0xaf, 0xff },
  118. { 0x00, 0xaf, 0xd7, 0xff },
  119. { 0x00, 0xaf, 0xff, 0xff },
  120. { 0x00, 0xd7, 0x00, 0xff },
  121. { 0x00, 0xd7, 0x5f, 0xff },
  122. { 0x00, 0xd7, 0x87, 0xff },
  123. { 0x00, 0xd7, 0xaf, 0xff },
  124. { 0x00, 0xd7, 0xd7, 0xff },
  125. { 0x00, 0xd7, 0xff, 0xff },
  126. { 0x00, 0xff, 0x00, 0xff },
  127. { 0x00, 0xff, 0x5f, 0xff },
  128. { 0x00, 0xff, 0x87, 0xff },
  129. { 0x00, 0xff, 0xaf, 0xff },
  130. { 0x00, 0xff, 0xd7, 0xff },
  131. { 0x00, 0xff, 0xff, 0xff },
  132. { 0x5f, 0x00, 0x00, 0xff },
  133. { 0x5f, 0x00, 0x5f, 0xff },
  134. { 0x5f, 0x00, 0x87, 0xff },
  135. { 0x5f, 0x00, 0xaf, 0xff },
  136. { 0x5f, 0x00, 0xd7, 0xff },
  137. { 0x5f, 0x00, 0xff, 0xff },
  138. { 0x5f, 0x5f, 0x00, 0xff },
  139. { 0x5f, 0x5f, 0x5f, 0xff },
  140. { 0x5f, 0x5f, 0x87, 0xff },
  141. { 0x5f, 0x5f, 0xaf, 0xff },
  142. { 0x5f, 0x5f, 0xd7, 0xff },
  143. { 0x5f, 0x5f, 0xff, 0xff },
  144. { 0x5f, 0x87, 0x00, 0xff },
  145. { 0x5f, 0x87, 0x5f, 0xff },
  146. { 0x5f, 0x87, 0x87, 0xff },
  147. { 0x5f, 0x87, 0xaf, 0xff },
  148. { 0x5f, 0x87, 0xd7, 0xff },
  149. { 0x5f, 0x87, 0xff, 0xff },
  150. { 0x5f, 0xaf, 0x00, 0xff },
  151. { 0x5f, 0xaf, 0x5f, 0xff },
  152. { 0x5f, 0xaf, 0x87, 0xff },
  153. { 0x5f, 0xaf, 0xaf, 0xff },
  154. { 0x5f, 0xaf, 0xd7, 0xff },
  155. { 0x5f, 0xaf, 0xff, 0xff },
  156. { 0x5f, 0xd7, 0x00, 0xff },
  157. { 0x5f, 0xd7, 0x5f, 0xff },
  158. { 0x5f, 0xd7, 0x87, 0xff },
  159. { 0x5f, 0xd7, 0xaf, 0xff },
  160. { 0x5f, 0xd7, 0xd7, 0xff },
  161. { 0x5f, 0xd7, 0xff, 0xff },
  162. { 0x5f, 0xff, 0x00, 0xff },
  163. { 0x5f, 0xff, 0x5f, 0xff },
  164. { 0x5f, 0xff, 0x87, 0xff },
  165. { 0x5f, 0xff, 0xaf, 0xff },
  166. { 0x5f, 0xff, 0xd7, 0xff },
  167. { 0x5f, 0xff, 0xff, 0xff },
  168. { 0x87, 0x00, 0x00, 0xff },
  169. { 0x87, 0x00, 0x5f, 0xff },
  170. { 0x87, 0x00, 0x87, 0xff },
  171. { 0x87, 0x00, 0xaf, 0xff },
  172. { 0x87, 0x00, 0xd7, 0xff },
  173. { 0x87, 0x00, 0xff, 0xff },
  174. { 0x87, 0x5f, 0x00, 0xff },
  175. { 0x87, 0x5f, 0x5f, 0xff },
  176. { 0x87, 0x5f, 0x87, 0xff },
  177. { 0x87, 0x5f, 0xaf, 0xff },
  178. { 0x87, 0x5f, 0xd7, 0xff },
  179. { 0x87, 0x5f, 0xff, 0xff },
  180. { 0x87, 0x87, 0x00, 0xff },
  181. { 0x87, 0x87, 0x5f, 0xff },
  182. { 0x87, 0x87, 0x87, 0xff },
  183. { 0x87, 0x87, 0xaf, 0xff },
  184. { 0x87, 0x87, 0xd7, 0xff },
  185. { 0x87, 0x87, 0xff, 0xff },
  186. { 0x87, 0xaf, 0x00, 0xff },
  187. { 0x87, 0xaf, 0x5f, 0xff },
  188. { 0x87, 0xaf, 0x87, 0xff },
  189. { 0x87, 0xaf, 0xaf, 0xff },
  190. { 0x87, 0xaf, 0xd7, 0xff },
  191. { 0x87, 0xaf, 0xff, 0xff },
  192. { 0x87, 0xd7, 0x00, 0xff },
  193. { 0x87, 0xd7, 0x5f, 0xff },
  194. { 0x87, 0xd7, 0x87, 0xff },
  195. { 0x87, 0xd7, 0xaf, 0xff },
  196. { 0x87, 0xd7, 0xd7, 0xff },
  197. { 0x87, 0xd7, 0xff, 0xff },
  198. { 0x87, 0xff, 0x00, 0xff },
  199. { 0x87, 0xff, 0x5f, 0xff },
  200. { 0x87, 0xff, 0x87, 0xff },
  201. { 0x87, 0xff, 0xaf, 0xff },
  202. { 0x87, 0xff, 0xd7, 0xff },
  203. { 0x87, 0xff, 0xff, 0xff },
  204. { 0xaf, 0x00, 0x00, 0xff },
  205. { 0xaf, 0x00, 0x5f, 0xff },
  206. { 0xaf, 0x00, 0x87, 0xff },
  207. { 0xaf, 0x00, 0xaf, 0xff },
  208. { 0xaf, 0x00, 0xd7, 0xff },
  209. { 0xaf, 0x00, 0xff, 0xff },
  210. { 0xaf, 0x5f, 0x00, 0xff },
  211. { 0xaf, 0x5f, 0x5f, 0xff },
  212. { 0xaf, 0x5f, 0x87, 0xff },
  213. { 0xaf, 0x5f, 0xaf, 0xff },
  214. { 0xaf, 0x5f, 0xd7, 0xff },
  215. { 0xaf, 0x5f, 0xff, 0xff },
  216. { 0xaf, 0x87, 0x00, 0xff },
  217. { 0xaf, 0x87, 0x5f, 0xff },
  218. { 0xaf, 0x87, 0x87, 0xff },
  219. { 0xaf, 0x87, 0xaf, 0xff },
  220. { 0xaf, 0x87, 0xd7, 0xff },
  221. { 0xaf, 0x87, 0xff, 0xff },
  222. { 0xaf, 0xaf, 0x00, 0xff },
  223. { 0xaf, 0xaf, 0x5f, 0xff },
  224. { 0xaf, 0xaf, 0x87, 0xff },
  225. { 0xaf, 0xaf, 0xaf, 0xff },
  226. { 0xaf, 0xaf, 0xd7, 0xff },
  227. { 0xaf, 0xaf, 0xff, 0xff },
  228. { 0xaf, 0xd7, 0x00, 0xff },
  229. { 0xaf, 0xd7, 0x5f, 0xff },
  230. { 0xaf, 0xd7, 0x87, 0xff },
  231. { 0xaf, 0xd7, 0xaf, 0xff },
  232. { 0xaf, 0xd7, 0xd7, 0xff },
  233. { 0xaf, 0xd7, 0xff, 0xff },
  234. { 0xaf, 0xff, 0x00, 0xff },
  235. { 0xaf, 0xff, 0x5f, 0xff },
  236. { 0xaf, 0xff, 0x87, 0xff },
  237. { 0xaf, 0xff, 0xaf, 0xff },
  238. { 0xaf, 0xff, 0xd7, 0xff },
  239. { 0xaf, 0xff, 0xff, 0xff },
  240. { 0xd7, 0x00, 0x00, 0xff },
  241. { 0xd7, 0x00, 0x5f, 0xff },
  242. { 0xd7, 0x00, 0x87, 0xff },
  243. { 0xd7, 0x00, 0xaf, 0xff },
  244. { 0xd7, 0x00, 0xd7, 0xff },
  245. { 0xd7, 0x00, 0xff, 0xff },
  246. { 0xd7, 0x5f, 0x00, 0xff },
  247. { 0xd7, 0x5f, 0x5f, 0xff },
  248. { 0xd7, 0x5f, 0x87, 0xff },
  249. { 0xd7, 0x5f, 0xaf, 0xff },
  250. { 0xd7, 0x5f, 0xd7, 0xff },
  251. { 0xd7, 0x5f, 0xff, 0xff },
  252. { 0xd7, 0x87, 0x00, 0xff },
  253. { 0xd7, 0x87, 0x5f, 0xff },
  254. { 0xd7, 0x87, 0x87, 0xff },
  255. { 0xd7, 0x87, 0xaf, 0xff },
  256. { 0xd7, 0x87, 0xd7, 0xff },
  257. { 0xd7, 0x87, 0xff, 0xff },
  258. { 0xd7, 0xaf, 0x00, 0xff },
  259. { 0xd7, 0xaf, 0x5f, 0xff },
  260. { 0xd7, 0xaf, 0x87, 0xff },
  261. { 0xd7, 0xaf, 0xaf, 0xff },
  262. { 0xd7, 0xaf, 0xd7, 0xff },
  263. { 0xd7, 0xaf, 0xff, 0xff },
  264. { 0xd7, 0xd7, 0x00, 0xff },
  265. { 0xd7, 0xd7, 0x5f, 0xff },
  266. { 0xd7, 0xd7, 0x87, 0xff },
  267. { 0xd7, 0xd7, 0xaf, 0xff },
  268. { 0xd7, 0xd7, 0xd7, 0xff },
  269. { 0xd7, 0xd7, 0xff, 0xff },
  270. { 0xd7, 0xff, 0x00, 0xff },
  271. { 0xd7, 0xff, 0x5f, 0xff },
  272. { 0xd7, 0xff, 0x87, 0xff },
  273. { 0xd7, 0xff, 0xaf, 0xff },
  274. { 0xd7, 0xff, 0xd7, 0xff },
  275. { 0xd7, 0xff, 0xff, 0xff },
  276. { 0xff, 0x00, 0x00, 0xff },
  277. { 0xff, 0x00, 0x5f, 0xff },
  278. { 0xff, 0x00, 0x87, 0xff },
  279. { 0xff, 0x00, 0xaf, 0xff },
  280. { 0xff, 0x00, 0xd7, 0xff },
  281. { 0xff, 0x00, 0xff, 0xff },
  282. { 0xff, 0x5f, 0x00, 0xff },
  283. { 0xff, 0x5f, 0x5f, 0xff },
  284. { 0xff, 0x5f, 0x87, 0xff },
  285. { 0xff, 0x5f, 0xaf, 0xff },
  286. { 0xff, 0x5f, 0xd7, 0xff },
  287. { 0xff, 0x5f, 0xff, 0xff },
  288. { 0xff, 0x87, 0x00, 0xff },
  289. { 0xff, 0x87, 0x5f, 0xff },
  290. { 0xff, 0x87, 0x87, 0xff },
  291. { 0xff, 0x87, 0xaf, 0xff },
  292. { 0xff, 0x87, 0xd7, 0xff },
  293. { 0xff, 0x87, 0xff, 0xff },
  294. { 0xff, 0xaf, 0x00, 0xff },
  295. { 0xff, 0xaf, 0x5f, 0xff },
  296. { 0xff, 0xaf, 0x87, 0xff },
  297. { 0xff, 0xaf, 0xaf, 0xff },
  298. { 0xff, 0xaf, 0xd7, 0xff },
  299. { 0xff, 0xaf, 0xff, 0xff },
  300. { 0xff, 0xd7, 0x00, 0xff },
  301. { 0xff, 0xd7, 0x5f, 0xff },
  302. { 0xff, 0xd7, 0x87, 0xff },
  303. { 0xff, 0xd7, 0xaf, 0xff },
  304. { 0xff, 0xd7, 0xd7, 0xff },
  305. { 0xff, 0xd7, 0xff, 0xff },
  306. { 0xff, 0xff, 0x00, 0xff },
  307. { 0xff, 0xff, 0x5f, 0xff },
  308. { 0xff, 0xff, 0x87, 0xff },
  309. { 0xff, 0xff, 0xaf, 0xff },
  310. { 0xff, 0xff, 0xd7, 0xff },
  311. { 0xff, 0xff, 0xff, 0xff },
  312. // greyscale ramp (24 not including black and white, so 26 if included)
  313. { 0x08, 0x08, 0x08, 0xff },
  314. { 0x12, 0x12, 0x12, 0xff },
  315. { 0x1c, 0x1c, 0x1c, 0xff },
  316. { 0x26, 0x26, 0x26, 0xff },
  317. { 0x30, 0x30, 0x30, 0xff },
  318. { 0x3a, 0x3a, 0x3a, 0xff },
  319. { 0x44, 0x44, 0x44, 0xff },
  320. { 0x4e, 0x4e, 0x4e, 0xff },
  321. { 0x58, 0x58, 0x58, 0xff },
  322. { 0x62, 0x62, 0x62, 0xff },
  323. { 0x6c, 0x6c, 0x6c, 0xff },
  324. { 0x76, 0x76, 0x76, 0xff },
  325. { 0x80, 0x80, 0x80, 0xff },
  326. { 0x8a, 0x8a, 0x8a, 0xff },
  327. { 0x94, 0x94, 0x94, 0xff },
  328. { 0x9e, 0x9e, 0x9e, 0xff },
  329. { 0xa8, 0xa8, 0xa8, 0xff },
  330. { 0xb2, 0xb2, 0xb2, 0xff },
  331. { 0xbc, 0xbc, 0xbc, 0xff },
  332. { 0xc6, 0xc6, 0xc6, 0xff },
  333. { 0xd0, 0xd0, 0xd0, 0xff },
  334. { 0xda, 0xda, 0xda, 0xff },
  335. { 0xe4, 0xe4, 0xe4, 0xff },
  336. { 0xee, 0xee, 0xee, 0xff },
  337. };
  338. void
  339. colors_term_init(Evas_Object *textgrid, Evas_Object *bg, Config *config)
  340. {
  341. int c, n;
  342. char buf[32];
  343. int r, g , b, a;
  344. const Color *color;
  345. for (c = 0; c < (4 * 12); c++)
  346. {
  347. n = c + (24 * (c / 24));
  348. if (config->colors_use)
  349. {
  350. r = config->colors[c].r;
  351. g = config->colors[c].g;
  352. b = config->colors[c].b;
  353. a = config->colors[c].a;
  354. }
  355. else
  356. {
  357. snprintf(buf, sizeof(buf) - 1, "c%i", c);
  358. if (!edje_object_color_class_get(bg, buf,
  359. &r,
  360. &g,
  361. &b,
  362. &a,
  363. NULL, NULL, NULL, NULL,
  364. NULL, NULL, NULL, NULL))
  365. {
  366. color = &default_colors[c / 24][(c % 24) / 12][c % 12];
  367. r = color->r;
  368. g = color->g;
  369. b = color->b;
  370. a = color->a;
  371. }
  372. }
  373. /* normal */
  374. evas_object_textgrid_palette_set(
  375. textgrid, EVAS_TEXTGRID_PALETTE_STANDARD, n,
  376. r, g, b, a);
  377. /* faint */
  378. evas_object_textgrid_palette_set(
  379. textgrid, EVAS_TEXTGRID_PALETTE_STANDARD, n + 24,
  380. r / 2, g / 2, b / 2, a / 2);
  381. }
  382. for (c = 0; c < 256; c++)
  383. {
  384. snprintf(buf, sizeof(buf) - 1, "C%i", c);
  385. if (!edje_object_color_class_get(bg, buf,
  386. &r,
  387. &g,
  388. &b,
  389. &a,
  390. NULL, NULL, NULL, NULL,
  391. NULL, NULL, NULL, NULL))
  392. {
  393. color = &default_colors256[c];
  394. r = color->r;
  395. g = color->g;
  396. b = color->b;
  397. a = color->a;
  398. }
  399. evas_object_textgrid_palette_set(
  400. textgrid, EVAS_TEXTGRID_PALETTE_EXTENDED, c,
  401. r, g, b, a);
  402. }
  403. }
  404. void
  405. colors_standard_get(int set, int col,
  406. unsigned char *r,
  407. unsigned char *g,
  408. unsigned char *b,
  409. unsigned char *a)
  410. {
  411. if ((set >= 0) && (set < 4))
  412. {
  413. int s1, s2;
  414. s1 = set / 2;
  415. s2 = set % 2;
  416. *r = default_colors[s1][s2][col].r;
  417. *g = default_colors[s1][s2][col].g;
  418. *b = default_colors[s1][s2][col].b;
  419. *a = default_colors[s1][s2][col].a;
  420. return;
  421. }
  422. *r = 0;
  423. *g = 0;
  424. *b = 0;
  425. *a = 0;
  426. }