inkpot_t *inkpot_init ( void )
{
- inkpot_t *inkpot;
- IDX_MRU_CACHE i;
-
- inkpot = malloc(sizeof(inkpot_t));
+ inkpot_t *inkpot = malloc(sizeof(inkpot_t));
if (inkpot) {
-
- inkpot->values.no_palette_value = 0;
- inkpot->values.no_palette_vtype = (BIT_VTYPE_size_16 | BIT_VTYPE_code_rgb);
-
- inkpot->value.index = 0;
- inkpot->value.value = 0;
- inkpot->value.vtype = (BIT_VTYPE_size_16 | BIT_VTYPE_code_rgb);
-
- inkpot->canon = NULL;
- inkpot->canon_alloc = 0;
-
+ memset(inkpot, 0, sizeof(inkpot_t));
inkpot->disc = inkpot_default_disc;
inkpot->out_closure = stdout;
inkpot->err_closure = stderr;
-
- inkpot->most_recently_used_idx = 0;
- for (i = 0; i < SZT_MRU_CACHE; i++)
- inkpot->cache[i].next_recently_used_idx = i + 1;
-
- inkpot->scheme_bits = 0; /* clear schemes */
- inkpot->active_schemes = 0;
- inkpot->active_out_schemes = 0;
- inkpot->out_name = NULL;
}
return inkpot;
}
v = (v > 1.0) ? 1.0 : v;
value.value |= (int)(v * 65535);
}
- value.vtype = BIT_VTYPE_size_16 | BIT_VTYPE_code_rgba;
+ value.vtype = VTYPE_rgba;
rc = inkpot_value_set ( &inkpot->values, &value );
if (rc == INKPOT_SUCCESS)
if (*inkpot->canon == '#') {
a = 65535;
if ((len = sscanf(inkpot->canon, "#%4x%4x%4x%4x", &r, &g, &b, &a)) >= 3) {
- if (len == 4)
- value.vtype = BIT_VTYPE_size_16 | BIT_VTYPE_code_rgba;
- else
- value.vtype = BIT_VTYPE_size_16 | BIT_VTYPE_code_rgb;
+ value.value = (((((((unsigned long)r) << 16)
+ | (unsigned long)g) << 16)
+ | (unsigned long)b) << 16)
+ | (unsigned long)a;
}
else if (len < 3) {
a = 255;
if ((len = sscanf(inkpot->canon, "#%2x%2x%2x%2x", &r, &g, &b, &a)) >= 3) {
- r *= 65535/255; g *= 65535/255; b *= 65535/255; a *= 65535/255;
- if (len == 4)
- value.vtype = BIT_VTYPE_size_8 | BIT_VTYPE_code_rgba;
- else
- value.vtype = BIT_VTYPE_size_8 | BIT_VTYPE_code_rgb;
+/* r *= 65535/255; g *= 65535/255; b *= 65535/255; a *= 65535/255; // too ugly */
+ value.value = (((((((unsigned long)r) << 16)
+ | (unsigned long)g) << 16)
+ | (unsigned long)b) << 16)
+ | (unsigned long)a;
+ value.value |= value.value << 8; /* not ugly */
}
}
if (len >= 3) {
- value.value = (((((((unsigned long)r) << 16) | (unsigned long)g) << 16) | (unsigned long)b) << 16) | (unsigned long)a;
-
+ value.vtype = VTYPE_rgba;
rc = inkpot_value_set ( &inkpot->values, &value );
if (rc == INKPOT_SUCCESS)
inkpot->value = value;
return ((inkpot->status = INKPOT_SUCCESS));
}
+
+ /* FIXME - most of this should go */
+
if (inkpot->out_scheme_bit) {
value_idx = inkpot->value.index;
if (value_idx < SZT_VALUES) {
}
if (value_idx == SZT_NONAME_VALUES) {
*color = NULL;
- return ((inkpot->status = INKPOT_COLOR_NOPALETTE));
+ return ((inkpot->status = INKPOT_NOPALETTE));
}
assert(0); /* support for dynamic values to go here */
}
m = "\nINKPOT_COLOR_UNKNOWN\n"; break;
case INKPOT_COLOR_NONAME:
m = "\nINKPOT_COLOR_NONAME\n"; break;
- case INKPOT_COLOR_NOPALETTE:
- m = "\nINKPOT_COLOR_PALETTE\n"; break;
case INKPOT_SCHEME_UNKNOWN:
m = "\nINKPOT_SCHEME_UNKNOWN\n"; break;
+ case INKPOT_NOPALETTE:
+ m = "\nINKPOT_PALETTE\n"; break;
case INKPOT_NOSUCH_INDEX:
m = "\nINKPOT_NOSUCH_INDEX\n"; break;
}
inkpot_status_t inkpot_value_set ( inkpot_values_t *values, inkpot_value_t *value )
{
- values->no_palette_value = value->value;
- values->no_palette_vtype = value->vtype;
+ value->vtype = VTYPE_rgba; /* FIXME */
value->index = SZT_VALUES + SZT_NONAME_VALUES;
return INKPOT_SUCCESS;
inkpot_status_t inkpot_value_get ( inkpot_values_t *values, inkpot_value_t *value )
{
- IDX_VALUES index;
+ IDX_VALUES index = value->index;
/* FIXME - this routine must check for 8 bit values and properly scale to 16 for the api */
-
- index = value->index;
+
if (index < SZT_VALUES) {
value->value = TAB_VALUES[index];
- value->vtype = BIT_VTYPE_size_16 | BIT_VTYPE_code_rgba; /* FIXME */
+ value->vtype = VTYPE_rgba; /* FIXME */
}
else if (index - SZT_VALUES < SZT_NONAME_VALUES) {
value->value = TAB_NONAME_VALUES[index - SZT_VALUES];
- value->vtype = BIT_VTYPE_size_16 | BIT_VTYPE_code_rgba; /* FIXME */
+ value->vtype = VTYPE_rgba; /* FIXME */
}
else if (index == SZT_VALUES + SZT_NONAME_VALUES) {
- value->value = values->no_palette_value;
- value->vtype = values->no_palette_vtype;
+ value->vtype = VTYPE_rgba; /* FIXME */
+ return INKPOT_NOPALETTE;
}
else
return INKPOT_NOSUCH_INDEX;
typedef int BIT_VTYPE;
-#define MSK_VTYPE_size 0x01
-#define BIT_VTYPE_size_16 0x00
-#define BIT_VTYPE_size_8 0x01
-
-#define MSK_VTYPE_code 0x0e
-#define BIT_VTYPE_code_rgba 0x00
-#define BIT_VTYPE_code_hsva 0x02
-#define BIT_VTYPE_code_cmyk 0x04
-#define BIT_VTYPE_code_rgb 0x06
-#define BIT_VTYPE_code_hsv 0x08
+typedef enum {
+ VTYPE_rgba = 0,
+ VTYPE_hsva,
+ VTYPE_cmyk,
+ SZT_VTYPE
+} inkpot_value_vtype_t;
typedef struct inkpot_values_s {
- unsigned long no_palette_value;
- BIT_VTYPE no_palette_vtype;
+#if 0
+/* FIXME - not sure about all this ... */
+ unsigned long * named[SZT_VTYPE];
+ unsigned long * unnamed[SZT_VTYPE];
+ unsigned long * palette[SZT_VTYPE];
+ size_t named_64_size[SZT_VTYPE];
+ size_t named_48_size[SZT_VTYPE];
+ size_t named_32_size[SZT_VTYPE];
+ size_t named_24_size[SZT_VTYPE];
+ size_t unnamed_64_size[SZT_VTYPE];
+ size_t unnamed_48_size[SZT_VTYPE];
+ size_t unnamed_32_size[SZT_VTYPE];
+ size_t unnamed_24_size[SZT_VTYPE];
+ size_t palette_64_size[SZT_VTYPE];
+ size_t palette_48_size[SZT_VTYPE];
+ size_t palette_32_size[SZT_VTYPE];
+ size_t palette_24_size[SZT_VTYPE];
+ size_t palette_alloc[SZT_VTYPE];
+#endif
} inkpot_values_t;
typedef struct inkpot_value_s {