Browse Source

* Created internal function _cucul_argb32_to_argb4() that splits an argb

fg/bg value into its separate argb 4-bit fields.
tags/v0.99.beta14
Sam Hocevar sam 19 years ago
parent
commit
9369b9a48f
2 changed files with 29 additions and 0 deletions
  1. +28
    -0
      cucul/colour.c
  2. +1
    -0
      cucul/cucul_internals.h

+ 28
- 0
cucul/colour.c View File

@@ -23,6 +23,12 @@
#include "cucul.h"
#include "cucul_internals.h"

static const uint16_t ansitab[16] =
{
0xf000, 0xf008, 0xf080, 0xf088, 0xf800, 0xf808, 0xf880, 0xf888,
0xf444, 0xf44f, 0xf4f4, 0xf4ff, 0xff44, 0xff4f, 0xfff4, 0xffff,
};

/* FIXME: could this be inlined? */

uint8_t _cucul_argb32_to_ansi8(uint32_t c)
@@ -43,3 +49,25 @@ uint8_t _cucul_argb32_to_ansi4bg(uint32_t c)
return (c & 0x000f0000) >> 16;
}

void _cucul_argb32_to_argb4(uint32_t c, uint8_t argb[8])
{
uint16_t fg = c & 0xffff;
uint16_t bg = c >> 16;

if(fg < 0x0016)
fg = ansitab[fg];

if(bg < 0x0016)
bg = ansitab[bg];

argb[0] = bg >> 12;
argb[1] = (bg >> 8) & 0xf;
argb[2] = (bg >> 4) & 0xf;
argb[3] = bg & 0xf;

argb[4] = fg >> 12;
argb[5] = (fg >> 8) & 0xf;
argb[6] = (fg >> 4) & 0xf;
argb[7] = fg & 0xf;
}


+ 1
- 0
cucul/cucul_internals.h View File

@@ -65,6 +65,7 @@ extern uint32_t _cucul_cp437_to_utf32(uint8_t);
uint8_t _cucul_argb32_to_ansi8(uint32_t);
uint8_t _cucul_argb32_to_ansi4fg(uint32_t);
uint8_t _cucul_argb32_to_ansi4bg(uint32_t);
void _cucul_argb32_to_argb4(uint32_t, uint8_t[8]);

/* Export functions */
extern void _cucul_get_ansi(cucul_t *, struct cucul_export *);


Loading…
Cancel
Save