Skip to content

Instantly share code, notes, and snippets.

@rofl0r
Created January 3, 2017 00:24
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rofl0r/12c766fc7e72f90cb56daf5d15652fc9 to your computer and use it in GitHub Desktop.
Save rofl0r/12c766fc7e72f90cb56daf5d15652fc9 to your computer and use it in GitHub Desktop.
/*
* gcc console.c -lncurses
*
* then run after export TERM=xterm-256color
*
* (C) 2010, 2017 rofl0r
*
* displays a nice 256color picture on the terminal, if the terminal
* supports it.
*/
#include <stdint.h>
#include <stdio.h>
#include <strings.h>
#include <string.h>
#include <stdlib.h>
#include <curses.h>
unsigned char rgbdata[] = (
"\x00\xF4\x1C\x1C\x00\xF4\x1C\x1C\x00\xF4\x1C\x1C\x00\xF4\x1C\x1C\x00\xF4\x1C\x1C\x00\xF4\x1C\x1C\x00\xF4\x1C\x1C\x00\xF4\x1C\x1C"
"\x00\xF4\x1C\x1C\x00\xEC\x24\x24\x00\xEC\x24\x24\x00\xEC\x24\x24\x00\xE8\x28\x28\x00\xE4\x2C\x2C\x00\xD8\x28\x28\x00\xDC\x34\x34"
"\x00\xD4\x34\x34\x00\xD4\x3C\x34\x00\xD4\x3C\x3C\x00\xCC\x3C\x3C\x00\xCC\x44\x3C\x00\xC4\x44\x44\x00\xC4\x4C\x44\x00\xBC\x4C\x44"
"\x00\xBC\x4C\x4C\x00\xBC\x54\x4C\x00\xB4\x54\x4C\x00\xB4\x5C\x54\x00\xAC\x5C\x54\x00\xA8\x58\x58\x00\xA4\x64\x5C\x00\xA4\x64\x5C"
"\x00\x98\x68\x58\x00\x9C\x6C\x64\x00\x98\x68\x68\x00\x94\x74\x6C\x00\x94\x74\x6C\x00\x8C\x7C\x6C\x00\x8C\x7C\x74\x00\x84\x7C\x74"
"\x00\x84\x84\x74\x00\x7C\x84\x7C\x00\x7C\x8C\x7C\x00\x74\x8C\x7C\x00\x74\x94\x84\x00\x6C\x94\x84\x00\x6C\x94\x8C\x00\x6C\x9C\x8C"
"\x00\x64\x9C\x8C\x00\x60\xA0\xA0\x00\x5C\xA4\x94\x00\x5C\xA4\x94\x00\x54\xAC\x9C\x00\x54\xAC\x9C\x00\x50\xB0\x90\x00\x4C\xB4\xA4"
"\x00\x44\xB4\xA4\x00\x44\xBC\xA4\x00\x44\xBC\xAC\x00\x44\xBC\xAC\x00\xF4\x1C\x1C\x00\xF4\x1C\x1C\x00\xF4\x1C\x1C\x00\xF4\x1C\x1C"
"\x00\xF4\x1C\x1C\x00\xF4\x1C\x1C\x00\xF4\x1C\x1C\x00\xF4\x1C\x1C\x00\xF4\x1C\x1C\x00\xEC\x24\x24\x00\xEC\x24\x24\x00\xE4\x2C\x2C"
"\x00\xE4\x2C\x2C\x00\xDC\x34\x2C\x00\xDC\x34\x34\x00\xDC\x34\x34\x00\xD4\x3C\x34\x00\xD4\x3C\x3C\x00\xCC\x44\x3C\x00\xCC\x44\x3C"
"\x00\xC4\x44\x44\x00\xC4\x4C\x44\x00\xBC\x4C\x44\x00\xBC\x4C\x4C\x00\xB4\x54\x4C\x00\xB4\x54\x54\x00\xB4\x5C\x54\x00\xAC\x5C\x54"
"\x00\xA8\x58\x58\x00\xA4\x64\x5C\x00\xA4\x64\x5C\x00\x9C\x6C\x64\x00\x9C\x6C\x64\x00\x98\x78\x68\x00\x94\x74\x6C\x00\x8C\x74\x6C"
"\x00\x8C\x7C\x6C\x00\x8C\x7C\x74\x00\x84\x84\x74\x00\x84\x84\x74\x00\x7C\x84\x7C\x00\x7C\x8C\x7C\x00\x74\x8C\x7C\x00\x74\x94\x84"
"\x00\x6C\x94\x84\x00\x6C\x94\x8C\x00\x64\x9C\x8C\x00\x64\x9C\x8C\x00\x5C\xA4\x94\x00\x5C\xA4\x94\x00\x5C\xA4\x94\x00\x54\xAC\x9C"
"\x00\x54\xAC\x9C\x00\x50\xB0\x90\x00\x4C\xB4\xA4\x00\x44\xB4\xA4\x00\x44\xBC\xAC\x00\x44\xBC\xAC\x00\x3C\xC4\xAC\x00\x3C\xC4\xAC"
"\x00\xF4\x1C\x1C\x00\xF4\x1C\x1C\x00\xF4\x1C\x1C\x00\xF4\x1C\x1C\x00\xF4\x1C\x1C\x00\xF4\x1C\x1C\x00\xF4\x1C\x1C\x00\xEC\x24\x24"
"\x00\xEC\x24\x24\x00\xEC\x24\x24\x00\xE4\x2C\x2C\x00\xE4\x2C\x2C\x00\xDC\x34\x2C\x00\xDC\x34\x34\x00\xD4\x34\x34\x00\xD4\x3C\x34"
"\x00\xCC\x3C\x3C\x00\xCC\x44\x3C\x00\xCC\x44\x3C\x00\xC4\x44\x44\x00\xC4\x4C\x44\x00\xBC\x4C\x4C\x00\xBC\x54\x4C\x00\xB4\x54\x4C"
"\x00\xB4\x54\x54\x00\xAC\x5C\x54\x00\xAC\x5C\x54\x00\xA8\x68\x58\x00\xA4\x64\x5C\x00\xA4\x64\x5C\x00\x9C\x6C\x64\x00\x9C\x6C\x64"
"\x00\x98\x78\x68\x00\x94\x74\x6C\x00\x8C\x74\x6C\x00\x8C\x7C\x74\x00\x84\x7C\x74\x00\x84\x84\x74\x00\x7C\x84\x7C\x00\x7C\x84\x7C"
"\x00\x7C\x8C\x7C\x00\x74\x8C\x84\x00\x74\x94\x84\x00\x6C\x94\x84\x00\x6C\x94\x8C\x00\x64\x9C\x8C\x00\x64\x9C\x8C\x00\x5C\xA4\x94"
"\x00\x5C\xA4\x94\x00\x5C\xA4\x94\x00\x54\xAC\x9C\x00\x54\xAC\x9C\x00\x4C\xB4\xA4\x00\x4C\xB4\xA4\x00\x44\xB4\xA4\x00\x44\xBC\xAC"
"\x00\x3C\xBC\xAC\x00\x3C\xC4\xAC\x00\x3C\xC4\xB4\x00\x3C\xC4\xB4\x00\xF4\x1C\x1C\x00\xF4\x1C\x1C\x00\xF4\x1C\x1C\x00\xF4\x1C\x1C"
"\x00\xF4\x1C\x1C\x00\xF4\x1C\x1C\x00\xEC\x24\x24\x00\xEC\x24\x24\x00\xE8\x28\x28\x00\xE4\x2C\x2C\x00\xE4\x2C\x2C\x00\xDC\x34\x2C"
"\x00\xDC\x34\x34\x00\xD4\x34\x34\x00\xD4\x3C\x34\x00\xCC\x3C\x3C\x00\xCC\x44\x3C\x00\xC4\x44\x44\x00\xC4\x44\x44\x00\xC4\x4C\x44"
"\x00\xBC\x4C\x4C\x00\xBC\x54\x4C\x00\xB4\x54\x4C\x00\xB4\x54\x54\x00\xAC\x5C\x54\x00\xAC\x5C\x54\x00\xA4\x64\x5C\x00\xA4\x64\x5C"
"\x00\xA4\x64\x5C\x00\x9C\x6C\x64\x00\x9C\x6C\x64\x00\x94\x74\x6C\x00\x94\x74\x6C\x00\x8C\x74\x6C\x00\x8C\x7C\x74\x00\x84\x7C\x74"
"\x00\x84\x84\x74\x00\x7C\x84\x7C\x00\x7C\x84\x7C\x00\x7C\x8C\x7C\x00\x74\x8C\x84\x00\x74\x94\x84\x00\x6C\x94\x84\x00\x6C\x9C\x8C"
"\x00\x64\x9C\x8C\x00\x64\x9C\x8C\x00\x5C\xA4\x94\x00\x5C\xA4\x94\x00\x54\xAC\x9C\x00\x54\xAC\x9C\x00\x54\xAC\x9C\x00\x4C\xB4\xA4"
"\x00\x4C\xB4\xA4\x00\x44\xBC\xA4\x00\x44\xBC\xAC\x00\x3C\xBC\xAC\x00\x3C\xC4\xAC\x00\x34\xC4\xB4\x00\x34\xCC\xB4\x00\x34\xCC\xB4"
"\x00\xF4\x1C\x1C\x00\xF4\x1C\x1C\x00\xF4\x1C\x1C\x00\xF4\x1C\x1C\x00\xF4\x1C\x1C\x00\xEC\x24\x24\x00\xEC\x24\x24\x00\xE8\x28\x28"
"\x00\xE4\x2C\x2C\x00\xD8\x28\x28\x00\xDC\x34\x2C\x00\xDC\x34\x34\x00\xD4\x34\x34\x00\xD4\x3C\x3C\x00\xCC\x3C\x3C\x00\xCC\x44\x3C"
"\x00\xC4\x44\x44\x00\xC4\x4C\x44\x00\xBC\x4C\x44\x00\xBC\x4C\x4C\x00\xB4\x54\x4C\x00\xB4\x54\x4C\x00\xB4\x54\x54\x00\xAC\x5C\x54"
"\x00\xAC\x5C\x54\x00\xA4\x64\x5C\x00\xA4\x64\x5C\x00\x98\x68\x58\x00\x9C\x6C\x64\x00\x98\x68\x68\x00\x94\x74\x6C\x00\x94\x74\x6C"
"\x00\x8C\x7C\x6C\x00\x8C\x7C\x74\x00\x84\x7C\x74\x00\x84\x84\x74\x00\x7C\x84\x7C\x00\x7C\x8C\x7C\x00\x74\x8C\x7C\x00\x74\x8C\x84"
"\x00\x6C\x94\x84\x00\x6C\x94\x84\x00\x6C\x9C\x8C\x00\x64\x9C\x8C\x00\x64\x9C\x94\x00\x5C\xA4\x94\x00\x5C\xA4\x94\x00\x54\xAC\x9C"
"\x00\x54\xAC\x9C\x00\x50\xB0\x90\x00\x4C\xB4\xA4\x00\x4C\xB4\xA4\x00\x44\xBC\xA4\x00\x44\xBC\xAC\x00\x3C\xBC\xAC\x00\x3C\xC4\xAC"
"\x00\x34\xC4\xB4\x00\x34\xCC\xB4\x00\x2C\xCC\xBC\x00\x2C\xCC\xBC\x00\xF4\x1C\x1C\x00\xF4\x1C\x1C\x00\xF4\x1C\x1C\x00\xEC\x24\x24"
"\x00\xEC\x24\x24\x00\xEC\x24\x24\x00\xE8\x28\x28\x00\xE4\x2C\x2C\x00\xD8\x28\x28\x00\xDC\x34\x34\x00\xD4\x34\x34\x00\xD4\x3C\x34"
"\x00\xD4\x3C\x3C\x00\xCC\x3C\x3C\x00\xCC\x44\x3C\x00\xC4\x44\x44\x00\xC4\x4C\x44\x00\xBC\x4C\x44\x00\xBC\x4C\x4C\x00\xB4\x54\x4C"
"\x00\xB4\x54\x4C\x00\xB4\x5C\x54\x00\xAC\x5C\x54\x00\xAC\x5C\x54\x00\xA4\x64\x5C\x00\xA4\x64\x5C\x00\x98\x68\x58\x00\x9C\x6C\x64"
"\x00\x98\x68\x68\x00\x94\x74\x6C\x00\x94\x74\x6C\x00\x8C\x7C\x6C\x00\x8C\x7C\x74\x00\x84\x7C\x74\x00\x84\x84\x74\x00\x7C\x84\x7C"
"\x00\x7C\x8C\x7C\x00\x74\x8C\x7C\x00\x74\x94\x84\x00\x6C\x94\x84\x00\x6C\x94\x8C\x00\x6C\x9C\x8C\x00\x64\x9C\x8C\x00\x64\x9C\x94"
"\x00\x5C\xA4\x94\x00\x5C\xA4\x94\x00\x54\xAC\x9C\x00\x54\xAC\x9C\x00\x50\xB0\x90\x00\x4C\xB4\xA4\x00\x44\xB4\xA4\x00\x44\xBC\xA4"
"\x00\x44\xBC\xAC\x00\x3C\xC4\xAC\x00\x3C\xC4\xB4\x00\x34\xC4\xB4\x00\x34\xCC\xB4\x00\x2C\xCC\xBC\x00\x2C\xD4\xBC\x00\x2C\xD4\xBC"
"\x00\xF4\x1C\x1C\x00\xF4\x1C\x1C\x00\xF4\x1C\x1C\x00\xEC\x24\x24\x00\xEC\x24\x24\x00\xE4\x2C\x2C\x00\xE4\x2C\x2C\x00\xDC\x34\x2C"
"\x00\xDC\x34\x34\x00\xD4\x34\x34\x00\xD4\x3C\x34\x00\xD4\x3C\x3C\x00\xCC\x44\x3C\x00\xCC\x44\x3C\x00\xC4\x44\x44\x00\xC4\x4C\x44"
"\x00\xBC\x4C\x44\x00\xBC\x54\x4C\x00\xB4\x54\x4C\x00\xB4\x54\x4C\x00\xAC\x5C\x54\x00\xAC\x5C\x54\x00\xA8\x58\x58\x00\xA4\x64\x5C"
"\x00\xA4\x64\x5C\x00\x9C\x6C\x64\x00\x9C\x6C\x64\x00\x98\x68\x68\x00\x94\x74\x6C\x00\x8C\x74\x6C\x00\x8C\x7C\x6C\x00\x84\x7C\x74"
"\x00\x84\x84\x74\x00\x84\x84\x74\x00\x7C\x84\x7C\x00\x78\x68\x78\x00\x64\x3C\x6C\x00\x68\x68\x78\x00\x6C\x94\x84\x00\x6C\x94\x8C"
"\x00\x64\x9C\x8C\x00\x64\x9C\x8C\x00\x5C\xA4\x94\x00\x5C\xA4\x94\x00\x5C\xA4\x94\x00\x54\xAC\x9C\x00\x54\xAC\x9C\x00\x50\xB0\x90"
"\x00\x4C\xB4\xA4\x00\x44\xB4\xA4\x00\x44\xBC\xAC\x00\x44\xBC\xAC\x00\x3C\xC4\xAC\x00\x3C\xC4\xB4\x00\x34\xC4\xB4\x00\x34\xCC\xB4"
"\x00\x2C\xCC\xBC\x00\x2C\xD4\xBC\x00\x24\xD4\xBC\x00\x24\xD4\xBC\x00\xF4\x1C\x1C\x00\xEC\x24\x24\x00\xEC\x24\x24\x00\xEC\x24\x24"
"\x00\xE4\x2C\x2C\x00\xE4\x2C\x2C\x00\xDC\x34\x2C\x00\xDC\x34\x34\x00\xD4\x34\x34\x00\xD4\x3C\x34\x00\xCC\x3C\x3C\x00\xCC\x44\x3C"
"\x00\xC8\x48\x38\x00\xA0\x20\x60\x00\x64\x3C\x6C\x00\x64\x3C\x6C\x00\x64\x3C\x6C\x00\x64\x3C\x6C\x00\x68\x38\x68\x00\x78\x48\x68"
"\x00\x88\x48\x68\x00\x98\x58\x58\x00\xA4\x64\x5C\x00\xA4\x64\x5C\x00\x9C\x6C\x64\x00\x9C\x6C\x64\x00\x98\x78\x68\x00\x94\x74\x6C"
"\x00\x8C\x74\x6C\x00\x8C\x7C\x74\x00\x84\x7C\x74\x00\x84\x84\x74\x00\x7C\x84\x7C\x00\x7C\x84\x7C\x00\x7C\x8C\x7C\x00\x68\x68\x78"
"\x00\x64\x3C\x6C\x00\x68\x68\x78\x00\x6C\x94\x8C\x00\x64\x9C\x8C\x00\x64\x9C\x8C\x00\x5C\xA4\x94\x00\x5C\xA4\x94\x00\x58\xA8\x98"
"\x00\x54\xAC\x9C\x00\x54\xAC\x9C\x00\x4C\xB4\xA4\x00\x4C\xB4\xA4\x00\x44\xB4\xA4\x00\x44\xBC\xAC\x00\x3C\xBC\xAC\x00\x3C\xC4\xAC"
"\x00\x34\xC4\xB4\x00\x34\xC4\xB4\x00\x34\xCC\xB4\x00\x2C\xCC\xBC\x00\x2C\xD4\xBC\x00\x24\xD4\xBC\x00\x24\xD4\xC4\x00\x24\xD4\xC4"
"\x00\xEC\x24\x24\x00\xEC\x24\x24\x00\xEC\x24\x24\x00\xE4\x2C\x2C\x00\xE4\x2C\x2C\x00\xDC\x34\x2C\x00\xDC\x34\x34\x00\xD4\x34\x34"
"\x00\xD4\x3C\x34\x00\xCC\x3C\x3C\x00\xCC\x44\x3C\x00\xC4\x44\x44\x00\xC4\x44\x44\x00\x98\x48\x58\x00\x64\x3C\x6C\x00\x88\x48\x58"
"\x00\xB4\x54\x4C\x00\xA8\x58\x58\x00\x98\x58\x58\x00\x88\x48\x68\x00\x68\x38\x68\x00\x88\x58\x68\x00\x98\x68\x58\x00\x9C\x6C\x64"
"\x00\x9C\x6C\x64\x00\x98\x78\x68\x00\x94\x74\x6C\x00\x8C\x7C\x6C\x00\x8C\x7C\x74\x00\x84\x7C\x74\x00\x84\x84\x74\x00\x7C\x84\x7C"
"\x00\x7C\x8C\x7C\x00\x7C\x8C\x7C\x00\x74\x8C\x84\x00\x68\x68\x78\x00\x64\x3C\x6C\x00\x68\x68\x78\x00\x64\x9C\x8C\x00\x64\x9C\x94"
"\x00\x5C\xA4\x94\x00\x5C\xA4\x94\x00\x58\xA8\x98\x00\x54\xAC\x9C\x00\x54\xAC\x9C\x00\x4C\xB4\xA4\x00\x4C\xB4\xA4\x00\x44\xBC\xA4"
"\x00\x44\xBC\xAC\x00\x3C\xBC\xAC\x00\x3C\xC4\xAC\x00\x34\xC4\xB4\x00\x34\xCC\xB4\x00\x28\xC8\xB8\x00\x2C\xCC\xBC\x00\x2C\xD4\xBC"
"\x00\x24\xD4\xBC\x00\x24\xDC\xC4\x00\x1C\xDC\xC4\x00\x1C\xDC\xC4\x00\xEC\x24\x24\x00\xE8\x28\x28\x00\xE4\x2C\x2C\x00\xE4\x2C\x2C"
"\x00\xDC\x34\x2C\x00\xDC\x34\x34\x00\xD4\x3C\x34\x00\xD4\x3C\x3C\x00\xCC\x3C\x3C\x00\xCC\x44\x3C\x00\xC4\x44\x44\x00\xC4\x4C\x44"
"\x00\xBC\x4C\x44\x00\x98\x48\x58\x00\x64\x3C\x6C\x00\x64\x3C\x6C\x00\x64\x3C\x6C\x00\x64\x3C\x6C\x00\x64\x3C\x6C\x00\x78\x48\x68"
"\x00\x88\x58\x68\x00\x98\x68\x68\x00\x9C\x6C\x64\x00\x98\x68\x68\x00\x94\x74\x6C\x00\x78\x58\x68\x00\x64\x3C\x6C\x00\x78\x58\x68"
"\x00\x84\x7C\x74\x00\x84\x84\x74\x00\x7C\x84\x7C\x00\x78\x68\x78\x00\x64\x3C\x6C\x00\x68\x68\x78\x00\x74\x94\x84\x00\x68\x68\x78"
"\x00\x64\x3C\x6C\x00\x68\x68\x78\x00\x64\x9C\x94\x00\x60\xA0\xA0\x00\x60\xA0\xA0\x00\x68\x68\x78\x00\x68\x48\x68\x00\x68\x48\x68"
"\x00\x68\x48\x68\x00\x60\x60\x60\x00\x58\x78\x88\x00\x60\xA0\xA0\x00\x3C\xBC\xAC\x00\x3C\xC4\xAC\x00\x34\xC4\xB4\x00\x34\xCC\xB4"
"\x00\x28\xC8\xB8\x00\x2C\xD4\xBC\x00\x2C\xD4\xBC\x00\x24\xD4\xC4\x00\x24\xDC\xC4\x00\x1C\xDC\xC4\x00\x1C\xDC\xCC\x00\x1C\xDC\xCC"
"\x00\xE8\x28\x28\x00\xE4\x2C\x2C\x00\xD8\x28\x28\x00\xDC\x34\x34\x00\xD4\x34\x34\x00\xD4\x3C\x34\x00\xD4\x3C\x3C\x00\xCC\x3C\x3C"
"\x00\xCC\x44\x3C\x00\xC4\x44\x44\x00\xC4\x4C\x44\x00\xBC\x4C\x44\x00\xBC\x4C\x4C\x00\x98\x48\x58\x00\x64\x3C\x6C\x00\x88\x48\x68"
"\x00\xAC\x5C\x54\x00\x98\x58\x58\x00\x88\x48\x68\x00\x78\x48\x68\x00\x78\x48\x68\x00\x88\x58\x68\x00\x98\x68\x68\x00\x94\x74\x6C"
"\x00\x94\x74\x6C\x00\x78\x58\x68\x00\x64\x3C\x6C\x00\x78\x58\x78\x00\x84\x84\x74\x00\x7C\x84\x7C\x00\x7C\x8C\x7C\x00\x78\x68\x78"
"\x00\x64\x3C\x6C\x00\x68\x68\x78\x00\x6C\x94\x84\x00\x68\x68\x78\x00\x64\x3C\x6C\x00\x60\x60\xA0\x00\x5C\xA4\x94\x00\x60\x60\xA0"
"\x00\x68\x48\x68\x00\x64\x3C\x6C\x00\x64\x3C\x6C\x00\x64\x3C\x6C\x00\x64\x3C\x6C\x00\x64\x3C\x6C\x00\x64\x3C\x6C\x00\x60\xA0\xA0"
"\x00\x3C\xC4\xB4\x00\x34\xC4\xB4\x00\x34\xCC\xB4\x00\x2C\xCC\xBC\x00\x2C\xD4\xBC\x00\x24\xD4\xBC\x00\x24\xD4\xC4\x00\x1C\xDC\xC4"
"\x00\x1C\xDC\xC4\x00\x18\xE8\xC8\x00\x14\xE4\xCC\x00\x14\xE4\xCC\x00\xE4\x2C\x2C\x00\xD8\x28\x28\x00\xDC\x34\x34\x00\xD4\x34\x34"
"\x00\xD4\x3C\x34\x00\xD4\x3C\x3C\x00\xCC\x3C\x3C\x00\xCC\x44\x3C\x00\xC4\x44\x44\x00\xC4\x4C\x44\x00\xBC\x4C\x44\x00\xBC\x54\x4C"
"\x00\xB4\x54\x4C\x00\x88\x48\x58\x00\x64\x3C\x6C\x00\x88\x48\x68\x00\xA8\x68\x58\x00\xA4\x64\x5C\x00\x98\x68\x58\x00\x88\x58\x68"
"\x00\x68\x48\x68\x00\x78\x58\x68\x00\x90\x70\x70\x00\x8C\x74\x6C\x00\x8C\x7C\x6C\x00\x78\x58\x68\x00\x64\x3C\x6C\x00\x68\x58\x78"
"\x00\x78\x78\x78\x00\x78\x78\x78\x00\x78\x78\x78\x00\x68\x58\x78\x00\x64\x3C\x6C\x00\x68\x68\x78\x00\x64\x9C\x8C\x00\x68\x68\x78"
"\x00\x64\x3C\x6C\x00\x58\x78\x88\x00\x5C\xA4\x94\x00\x58\x78\x88\x00\x68\x48\x68\x00\x50\x70\x90\x00\x60\xA0\xA0\x00\x50\xB0\x90"
"\x00\x44\xB4\xA4\x00\x44\xBC\xAC\x00\x3C\xC4\xAC\x00\x3C\xC4\xB4\x00\x34\xC4\xB4\x00\x34\xCC\xB4\x00\x2C\xCC\xBC\x00\x2C\xD4\xBC"
"\x00\x24\xD4\xBC\x00\x24\xD4\xC4\x00\x1C\xDC\xC4\x00\x1C\xDC\xC4\x00\x18\xE8\xC8\x00\x14\xE4\xCC\x00\x14\xE4\xCC\x00\x14\xE4\xCC"
"\x00\xDC\x34\x2C\x00\xDC\x34\x34\x00\xD4\x34\x34\x00\xD4\x3C\x34\x00\xCC\x3C\x3C\x00\xCC\x44\x3C\x00\xC8\x48\x38\x00\xC4\x44\x44"
"\x00\xC4\x4C\x44\x00\xBC\x4C\x4C\x00\xBC\x54\x4C\x00\xB4\x54\x4C\x00\xB4\x54\x54\x00\x88\x48\x58\x00\x64\x3C\x6C\x00\x88\x48\x68"
"\x00\xA4\x64\x5C\x00\xA4\x64\x5C\x00\x9C\x6C\x64\x00\x90\x70\x70\x00\x88\x58\x68\x00\x78\x58\x68\x00\x68\x48\x68\x00\x70\x70\x70"
"\x00\x84\x7C\x74\x00\x78\x68\x78\x00\x78\x58\x78\x00\x68\x48\x68\x00\x64\x3C\x6C\x00\x68\x48\x78\x00\x68\x58\x78\x00\x68\x48\x78"
"\x00\x64\x3C\x6C\x00\x68\x68\x78\x00\x64\x9C\x8C\x00\x68\x68\x78\x00\x64\x3C\x6C\x00\x58\x78\x88\x00\x54\xAC\x9C\x00\x60\xA0\xA0"
"\x00\x60\xA0\xA0\x00\x50\x70\x90\x00\x68\x48\x78\x00\x68\x48\x68\x00\x64\x3C\x6C\x00\x64\x3C\x6C\x00\x64\x3C\x6C\x00\x60\xA0\xA0"
"\x00\x34\xCC\xB4\x00\x2C\xCC\xBC\x00\x2C\xD4\xBC\x00\x24\xD4\xBC\x00\x24\xDC\xC4\x00\x1C\xDC\xC4\x00\x1C\xDC\xC4\x00\x14\xE4\xCC"
"\x00\x14\xE4\xCC\x00\x18\xE8\xD8\x00\x0C\xEC\xD4\x00\x0C\xEC\xD4\x00\xDC\x34\x34\x00\xD4\x3C\x34\x00\xD4\x3C\x34\x00\xCC\x3C\x3C"
"\x00\xCC\x44\x3C\x00\xC4\x44\x44\x00\xC4\x44\x44\x00\xC4\x4C\x44\x00\xBC\x4C\x4C\x00\xBC\x54\x4C\x00\xB4\x54\x4C\x00\xB4\x54\x54"
"\x00\xAC\x5C\x54\x00\xAC\x5C\x54\x00\xA4\x64\x5C\x00\xA4\x64\x5C\x00\x98\x68\x58\x00\x9C\x6C\x64\x00\x9C\x6C\x64\x00\x94\x74\x6C"
"\x00\x94\x74\x6C\x00\x8C\x7C\x6C\x00\x8C\x7C\x74\x00\x84\x7C\x74\x00\x84\x84\x74\x00\x7C\x84\x7C\x00\x7C\x84\x7C\x00\x7C\x8C\x7C"
"\x00\x74\x8C\x84\x00\x74\x94\x84\x00\x6C\x94\x84\x00\x6C\x94\x8C\x00\x64\x9C\x8C\x00\x64\x9C\x94\x00\x5C\xA4\x94\x00\x5C\xA4\x94"
"\x00\x58\xA8\x98\x00\x54\xAC\x9C\x00\x54\xAC\x9C\x00\x4C\xB4\xA4\x00\x4C\xB4\xA4\x00\x44\xBC\xA4\x00\x44\xBC\xAC\x00\x3C\xBC\xAC"
"\x00\x3C\xC4\xAC\x00\x34\xC4\xB4\x00\x34\xCC\xB4\x00\x34\xCC\xB4\x00\x2C\xCC\xBC\x00\x2C\xD4\xBC\x00\x24\xD4\xC4\x00\x24\xDC\xC4"
"\x00\x1C\xDC\xC4\x00\x1C\xDC\xCC\x00\x14\xE4\xCC\x00\x14\xE4\xCC\x00\x0C\xEC\xD4\x00\x0C\xEC\xD4\x00\x0C\xEC\xD4\x00\x0C\xEC\xD4"
"\x00\xD4\x3C\x34\x00\xD4\x3C\x3C\x00\xCC\x3C\x3C\x00\xCC\x44\x3C\x00\xC4\x44\x44\x00\xC4\x4C\x44\x00\xBC\x4C\x44\x00\xBC\x4C\x4C"
"\x00\xBC\x54\x4C\x00\xB4\x54\x4C\x00\xB4\x5C\x54\x00\xAC\x5C\x54\x00\xAC\x5C\x54\x00\xA4\x64\x5C\x00\xA4\x64\x5C\x00\x9C\x6C\x64"
"\x00\x9C\x6C\x64\x00\x9C\x6C\x64\x00\x94\x74\x6C\x00\x94\x74\x6C\x00\x8C\x7C\x6C\x00\x8C\x7C\x74\x00\x84\x7C\x74\x00\x84\x84\x74"
"\x00\x7C\x84\x7C\x00\x7C\x8C\x7C\x00\x74\x8C\x7C\x00\x74\x8C\x84\x00\x6C\x94\x84\x00\x6C\x94\x84\x00\x6C\x9C\x8C\x00\x64\x9C\x8C"
"\x00\x64\x9C\x94\x00\x5C\xA4\x94\x00\x5C\xA4\x94\x00\x54\xAC\x9C\x00\x54\xAC\x9C\x00\x50\xB0\x90\x00\x4C\xB4\xA4\x00\x4C\xB4\xA4"
"\x00\x44\xBC\xA4\x00\x44\xBC\xAC\x00\x3C\xBC\xAC\x00\x3C\xC4\xB4\x00\x34\xC4\xB4\x00\x34\xCC\xB4\x00\x2C\xCC\xBC\x00\x2C\xCC\xBC"
"\x00\x24\xD4\xBC\x00\x24\xD4\xC4\x00\x24\xDC\xC4\x00\x1C\xDC\xC4\x00\x1C\xDC\xCC\x00\x14\xE4\xCC\x00\x14\xE4\xCC\x00\x0C\xEC\xD4"
"\x00\x0C\xEC\xD4\x00\x0C\xEC\xD4\x00\x0C\xEC\xD4\x00\x0C\xEC\xD4\x00\xD4\x3C\x3C\x00\xCC\x3C\x3C\x00\xCC\x44\x3C\x00\xC4\x44\x44"
"\x00\xC4\x4C\x44\x00\xBC\x4C\x44\x00\xBC\x4C\x4C\x00\xB4\x54\x4C\x00\xB4\x54\x4C\x00\xB4\x5C\x54\x00\xAC\x5C\x54\x00\xA8\x58\x58"
"\x00\xA4\x64\x5C\x00\xA4\x64\x5C\x00\x9C\x6C\x64\x00\x9C\x6C\x64\x00\x98\x78\x68\x00\x94\x74\x6C\x00\x8C\x74\x6C\x00\x8C\x7C\x6C"
"\x00\x8C\x7C\x74\x00\x84\x84\x74\x00\x84\x84\x74\x00\x7C\x84\x7C\x00\x7C\x8C\x7C\x00\x74\x8C\x84\x00\x74\x8C\x84\x00\x6C\x94\x84"
"\x00\x6C\x94\x8C\x00\x6C\x9C\x8C\x00\x64\x9C\x8C\x00\x60\xA0\xA0\x00\x5C\xA4\x94\x00\x5C\xA4\x94\x00\x54\xAC\x9C\x00\x54\xAC\x9C"
"\x00\x50\xB0\x90\x00\x4C\xB4\xA4\x00\x44\xB4\xA4\x00\x44\xBC\xAC\x00\x3C\xBC\xAC\x00\x3C\xC4\xAC\x00\x3C\xC4\xB4\x00\x34\xC4\xB4"
"\x00\x34\xCC\xB4\x00\x2C\xCC\xBC\x00\x2C\xD4\xBC\x00\x24\xD4\xBC\x00\x24\xD4\xC4\x00\x1C\xDC\xC4\x00\x1C\xDC\xC4\x00\x18\xE8\xC8"
"\x00\x14\xE4\xCC\x00\x18\xE8\xD8\x00\x0C\xEC\xD4\x00\x0C\xEC\xD4\x00\x0C\xEC\xD4\x00\x0C\xEC\xD4\x00\x0C\xEC\xD4\x00\x0C\xEC\xD4"
"\x00\xCC\x3C\x3C\x00\xCC\x44\x3C\x00\xC4\x44\x44\x00\xC4\x4C\x44\x00\xBC\x4C\x44\x00\xBC\x4C\x4C\x00\xB4\x54\x4C\x00\xB4\x54\x54"
"\x00\xAC\x5C\x54\x00\xAC\x5C\x54\x00\xA8\x58\x58\x00\xA4\x64\x5C\x00\xA4\x64\x5C\x00\x9C\x6C\x64\x00\x9C\x6C\x64\x00\x98\x78\x68"
"\x00\x94\x74\x6C\x00\x8C\x74\x6C\x00\x8C\x7C\x6C\x00\x84\x7C\x74\x00\x84\x84\x74\x00\x84\x84\x74\x00\x7C\x84\x7C\x00\x7C\x8C\x7C"
"\x00\x74\x8C\x7C\x00\x74\x94\x84\x00\x6C\x94\x84\x00\x6C\x94\x8C\x00\x64\x9C\x8C\x00\x64\x9C\x8C\x00\x5C\xA4\x94\x00\x5C\xA4\x94"
"\x00\x5C\xA4\x94\x00\x54\xAC\x9C\x00\x54\xAC\x9C\x00\x4C\xB4\xA4\x00\x4C\xB4\xA4\x00\x44\xB4\xA4\x00\x44\xBC\xAC\x00\x3C\xBC\xAC"
"\x00\x3C\xC4\xAC\x00\x3C\xC4\xB4\x00\x34\xC4\xB4\x00\x34\xCC\xB4\x00\x2C\xCC\xBC\x00\x2C\xD4\xBC\x00\x24\xD4\xBC\x00\x24\xD4\xC4"
"\x00\x1C\xDC\xC4\x00\x1C\xDC\xC4\x00\x14\xE4\xCC\x00\x14\xE4\xCC\x00\x18\xE8\xD8\x00\x0C\xEC\xD4\x00\x0C\xEC\xD4\x00\x0C\xEC\xD4"
"\x00\x0C\xEC\xD4\x00\x0C\xEC\xD4\x00\x0C\xEC\xD4\x00\x0C\xEC\xD4\x00\xC8\x48\x38\x00\xC4\x44\x44\x00\xC4\x4C\x44\x00\xBC\x4C\x4C"
"\x00\xBC\x54\x4C\x00\xB4\x54\x4C\x00\xB4\x54\x54\x00\xAC\x5C\x54\x00\xAC\x5C\x54\x00\xA4\x64\x5C\x00\xA4\x64\x5C\x00\xA4\x64\x5C"
"\x00\x9C\x6C\x64\x00\x9C\x6C\x64\x00\x98\x78\x68\x00\x94\x74\x6C\x00\x8C\x74\x6C\x00\x8C\x7C\x74\x00\x84\x7C\x74\x00\x84\x84\x74"
"\x00\x7C\x84\x7C\x00\x7C\x84\x7C\x00\x7C\x8C\x7C\x00\x74\x8C\x84\x00\x74\x94\x84\x00\x6C\x94\x84\x00\x6C\x94\x8C\x00\x64\x9C\x8C"
"\x00\x64\x9C\x8C\x00\x5C\xA4\x94\x00\x5C\xA4\x94\x00\x58\xA8\x98\x00\x54\xAC\x9C\x00\x54\xAC\x9C\x00\x50\xB0\x90\x00\x4C\xB4\xA4"
"\x00\x44\xB4\xA4\x00\x44\xBC\xAC\x00\x3C\xBC\xAC\x00\x3C\xC4\xAC\x00\x34\xC4\xB4\x00\x34\xCC\xB4\x00\x28\xC8\xB8\x00\x2C\xCC\xBC"
"\x00\x2C\xD4\xBC\x00\x24\xD4\xBC\x00\x24\xDC\xC4\x00\x1C\xDC\xC4\x00\x1C\xDC\xCC\x00\x14\xE4\xCC\x00\x14\xE4\xCC\x00\x18\xE8\xD8"
"\x00\x0C\xEC\xD4\x00\x0C\xEC\xD4\x00\x0C\xEC\xD4\x00\x0C\xEC\xD4\x00\x0C\xEC\xD4\x00\x0C\xEC\xD4\x00\x0C\xEC\xD4\x00\x0C\xEC\xD4"
"\x00\xC4\x44\x44\x00\xC4\x4C\x44\x00\xBC\x4C\x4C\x00\xBC\x54\x4C\x00\xB4\x54\x4C\x00\xB4\x5C\x54\x00\xAC\x5C\x54\x00\xAC\x5C\x54"
"\x00\xA4\x64\x5C\x00\xA4\x64\x5C\x00\x98\x68\x58\x00\x9C\x6C\x64\x00\x9C\x6C\x64\x00\x94\x74\x6C\x00\x94\x74\x6C\x00\x8C\x7C\x6C"
"\x00\x8C\x7C\x74\x00\x84\x7C\x74\x00\x84\x84\x74\x00\x7C\x84\x7C\x00\x7C\x8C\x7C\x00\x74\x8C\x7C\x00\x74\x8C\x84\x00\x74\x94\x84"
"\x00\x6C\x94\x84\x00\x6C\x9C\x8C\x00\x64\x9C\x8C\x00\x64\x9C\x8C\x00\x5C\xA4\x94\x00\x5C\xA4\x94\x00\x58\xA8\x98\x00\x54\xAC\x9C"
"\x00\x54\xAC\x9C\x00\x4C\xB4\xA4\x00\x4C\xB4\xA4\x00\x44\xBC\xA4\x00\x44\xBC\xAC\x00\x3C\xBC\xAC\x00\x3C\xC4\xAC\x00\x34\xC4\xB4"
"\x00\x34\xCC\xB4\x00\x2C\xCC\xBC\x00\x2C\xCC\xBC\x00\x2C\xD4\xBC\x00\x24\xD4\xBC\x00\x24\xDC\xC4\x00\x1C\xDC\xC4\x00\x1C\xDC\xCC"
"\x00\x14\xE4\xCC\x00\x14\xE4\xCC\x00\x0C\xEC\xD4\x00\x0C\xEC\xD4\x00\x0C\xEC\xD4\x00\x0C\xEC\xD4\x00\x0C\xEC\xD4\x00\x0C\xEC\xD4"
"\x00\x0C\xEC\xD4\x00\x0C\xEC\xD4\x00\x0C\xEC\xD4\x00\x0C\xEC\xD4\x00\xBC\x4C\x44\x00\xBC\x4C\x44\x00\xB4\x54\x4C\x00\xB4\x54\x4C"
"\x00\xB4\x5C\x54\x00\xB4\x5C\x54\x00\xAC\x5C\x54\x00\xAC\x5C\x54\x00\xA4\x64\x5C\x00\xA4\x64\x5C\x00\x9C\x6C\x64\x00\x9C\x6C\x64"
"\x00\x94\x74\x6C\x00\x94\x74\x6C\x00\x8C\x7C\x6C\x00\x8C\x7C\x6C\x00\x84\x7C\x74\x00\x84\x7C\x74\x00\x7C\x84\x7C\x00\x7C\x84\x7C"
"\x00\x74\x8C\x7C\x00\x74\x8C\x7C\x00\x6C\x94\x84\x00\x6C\x94\x84\x00\x6C\x9C\x8C\x00\x6C\x9C\x8C\x00\x64\x9C\x94\x00\x64\x9C\x94"
"\x00\x5C\xA4\x94\x00\x5C\xA4\x94\x00\x54\xAC\x9C\x00\x54\xAC\x9C\x00\x4C\xB4\xA4\x00\x4C\xB4\xA4\x00\x44\xBC\xA4\x00\x44\xBC\xA4"
"\x00\x3C\xBC\xAC\x00\x3C\xBC\xAC\x00\x34\xC4\xB4\x00\x34\xC4\xB4\x00\x2C\xCC\xBC\x00\x2C\xCC\xBC\x00\x24\xD4\xBC\x00\x24\xD4\xBC"
"\x00\x24\xDC\xC4\x00\x24\xDC\xC4\x00\x1C\xDC\xCC\x00\x1C\xDC\xCC\x00\x14\xE4\xCC\x00\x14\xE4\xCC\x00\x0C\xEC\xD4\x00\x0C\xEC\xD4"
"\x00\x0C\xEC\xD4\x00\x0C\xEC\xD4\x00\x0C\xEC\xD4\x00\x0C\xEC\xD4\x00\x0C\xEC\xD4\x00\x0C\xEC\xD4\x00\x0C\xEC\xD4\x00\x0C\xEC\xD4");
typedef struct {
unsigned char dummy;
unsigned char b;
unsigned char g;
unsigned char r;
} RGB;
int PIC_WIDTH=60;
uint32_t* colors;
int lastattr = 0;
int main() {
int ret = 1, availcolors = 0;
initscr();
noecho();
cbreak();
keypad(stdscr, TRUE);
if(has_colors() != true || can_change_color() != TRUE) goto out;
ret = 0;
start_color();
availcolors = COLORS;
uint32_t *col = (uint32_t*) rgbdata;
colors = calloc(256, 4);
memset(colors, '@', 256 * 4);
int line = -1, i, j;
for(i = 0; i< sizeof(rgbdata)/4; i++) {
if(!(i % PIC_WIDTH)) line++;
move(line, i % PIC_WIDTH);
uint32_t *palette = colors;
for (j = 0; j<256; j++) {
RGB rgb = *((RGB*) col);
RGB palrgb = *((RGB*) palette);
if(palrgb.dummy == '@') {
*palette = *col;
#ifdef debug
printf("rgb: %02X %02X %02X", rgb.r, rgb.g, rgb.b);
#endif
int nr = rgb.r == 0 ? 0 : rgb.r == 255 ? 1000 : (rgb.r * 3921568) / (1000 * 1000);
int ng = rgb.g == 0 ? 0 : rgb.g == 255 ? 1000 : (rgb.g * 3921568) / (1000 * 1000);
int nb = rgb.b == 0 ? 0 : rgb.b == 255 ? 1000 : (rgb.b * 3921568) / (1000 * 1000);
init_color(j+1, nr, ng, nb);
init_pair(j+1, 1, j+1);
if (lastattr) attroff(lastattr);
lastattr = COLOR_PAIR(j+1);
attron(lastattr);
break;
} else if(*palette == *col) {
if (lastattr) attroff(lastattr);
lastattr = COLOR_PAIR(j+1);
attron(lastattr);
break;
}
palette++;
}
addch(' ');
col++;
}
getch();
out:
endwin();
if(ret == 1) printf("error: your terminal can not change colors\n");
if(availcolors < 256)
printf("warning: your terminal has only %d colors!\n"
"so you probably missed some of the beauty.\n", availcolors);
return ret;
}
@rofl0r
Copy link
Author

rofl0r commented Jan 3, 2017

program was written in 2010 and published on the KDE bugtracker.
it's a perfect small example program to show the power of the initc terminfo capability, which can override the terminal's built-in colors with user-supplied RGB values. the ncurses init_color() function makes this capability available.
i removed some commented out code and variable-decl-in-for-loop, so it can be compiled without -std=c99.
i've since published a small PoC program called conpix to display arbitrary images sampled down to 256 colors in the terminal, and a C library called concol which supplies an easy-to-use API to deal with 256 colors with custom RGB values and other improvements to make creating a terminal app simpler than to use the crude ncurses API. that library can use ncurses/netbsd-curses as a backend, but it also features an SDL backend so one can actually make fullscreen, terminal-like apps.

@rofl0r
Copy link
Author

rofl0r commented Jan 3, 2017

conpix is available here http://github.com/rofl0r/conpix and concol here http://github.com/rofl0r/concol

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