cucul_import_canvas(). * Renamed cucul_create_export() into cucul_export_canvas() for consistency.tags/v0.99.beta14
| @@ -55,7 +55,7 @@ static void raw_display(caca_display_t *dp) | |||
| { | |||
| cucul_buffer_t *buffer; | |||
| buffer = cucul_create_export(dp->cv, "caca"); | |||
| buffer = cucul_export_canvas(dp->cv, "caca"); | |||
| fwrite(cucul_get_buffer_data(buffer), | |||
| cucul_get_buffer_size(buffer), 1, stdout); | |||
| fflush(stdout); | |||
| @@ -350,10 +350,10 @@ void Cucul::free_font ( Cucul::Font *f) | |||
| cucul_free_font(f->font); | |||
| } | |||
| Cucul::Buffer * Cucul::create_export (char const *buf) | |||
| Cucul::Buffer * Cucul::export_canvas (char const *buf) | |||
| { | |||
| Cucul::Buffer *b = new Cucul::Buffer(); | |||
| b->buffer = cucul_create_export(cv, buf); | |||
| b->buffer = cucul_export_canvas(cv, buf); | |||
| return b; | |||
| } | |||
| @@ -118,7 +118,7 @@ class Cucul { | |||
| unsigned int get_font_height (Font *); | |||
| void render_canvas ( Font *, unsigned char *, unsigned int, unsigned int, unsigned int); | |||
| void free_font (Font *); | |||
| Buffer * create_export ( char const *); | |||
| Buffer * export_canvas ( char const *); | |||
| char const *const * get_export_list (void); | |||
| @@ -28,6 +28,7 @@ libcucul_la_SOURCES = \ | |||
| font.c \ | |||
| font_mono9.h \ | |||
| font_monobold12.h \ | |||
| import.c \ | |||
| export.c \ | |||
| $(NULL) | |||
| libcucul_la_LDFLAGS = -no-undefined | |||
| @@ -72,61 +72,6 @@ cucul_canvas_t * cucul_create_canvas(unsigned int width, unsigned int height) | |||
| return cv; | |||
| } | |||
| /** \brief Load a memory area into a canvas. | |||
| * | |||
| * This function loads a memory area containing an exported canvas into | |||
| * a new \e libcucul canvas. | |||
| * | |||
| * \param data The memory area to be loaded into a canvas. | |||
| * \param size The length of the memory area. | |||
| * \return A libcucul canvas, or NULL in case of error. | |||
| */ | |||
| cucul_canvas_t *cucul_load_canvas(void *data, unsigned int size) | |||
| { | |||
| cucul_canvas_t *cv; | |||
| uint8_t *buf = (uint8_t *)data; | |||
| unsigned int width, height, n; | |||
| if(size < 16) | |||
| return NULL; | |||
| if(buf[0] != 'C' || buf[1] != 'A' || buf[2] != 'C' || buf[3] != 'A') | |||
| return NULL; | |||
| if(buf[4] != 'C' || buf[5] != 'A' || buf[6] != 'N' || buf[7] != 'V') | |||
| return NULL; | |||
| width = ((uint32_t)buf[8] << 24) | ((uint32_t)buf[9] << 16) | |||
| | ((uint32_t)buf[10] << 8) | (uint32_t)buf[11]; | |||
| height = ((uint32_t)buf[12] << 24) | ((uint32_t)buf[13] << 16) | |||
| | ((uint32_t)buf[14] << 8) | (uint32_t)buf[15]; | |||
| if(!width || !height) | |||
| return NULL; | |||
| if(size != 16 + width * height * 8) | |||
| return NULL; | |||
| cv = cucul_create_canvas(width, height); | |||
| if(!cv) | |||
| return NULL; | |||
| for(n = height * width; n--; ) | |||
| { | |||
| cv->chars[n] = ((uint32_t)buf[16 + 0 + 8 * n] << 24) | |||
| | ((uint32_t)buf[16 + 1 + 8 * n] << 16) | |||
| | ((uint32_t)buf[16 + 2 + 8 * n] << 8) | |||
| | (uint32_t)buf[16 + 3 + 8 * n]; | |||
| cv->attr[n] = ((uint32_t)buf[16 + 4 + 8 * n] << 24) | |||
| | ((uint32_t)buf[16 + 5 + 8 * n] << 16) | |||
| | ((uint32_t)buf[16 + 6 + 8 * n] << 8) | |||
| | (uint32_t)buf[16 + 7 + 8 * n]; | |||
| } | |||
| return cv; | |||
| } | |||
| /** \brief Resize a canvas. | |||
| * | |||
| * This function sets the canvas width and height, in character cells. | |||
| @@ -74,7 +74,6 @@ typedef struct cucul_font cucul_font_t; | |||
| * | |||
| * @{ */ | |||
| cucul_canvas_t * cucul_create_canvas(unsigned int, unsigned int); | |||
| cucul_canvas_t * cucul_load_canvas(void *, unsigned int); | |||
| void cucul_set_canvas_size(cucul_canvas_t *, unsigned int, unsigned int); | |||
| unsigned int cucul_get_canvas_width(cucul_canvas_t *); | |||
| unsigned int cucul_get_canvas_height(cucul_canvas_t *); | |||
| @@ -205,14 +204,16 @@ void cucul_render_canvas(cucul_canvas_t *, cucul_font_t *, void *, | |||
| void cucul_free_font(cucul_font_t *); | |||
| /* @} */ | |||
| /** \defgroup exporter libcucul exporters to various formats | |||
| /** \defgroup importexport libcucul importers/exporters from/to various formats | |||
| * | |||
| * These functions export the current canvas to various text formats. It | |||
| * is necessary to call cucul_free_buffer() to dispose of the data. | |||
| * These functions import various file formats into a new canvas, or export | |||
| * the current canvas to various text formats. | |||
| * | |||
| * @{ */ | |||
| cucul_buffer_t * cucul_create_export(cucul_canvas_t *, char const *); | |||
| cucul_buffer_t * cucul_export_canvas(cucul_canvas_t *, char const *); | |||
| char const * const * cucul_get_export_list(void); | |||
| cucul_canvas_t * cucul_import_canvas(void const *, unsigned int, char const *); | |||
| char const * const * cucul_get_import_list(void); | |||
| /* @} */ | |||
| #ifdef __cplusplus | |||
| @@ -65,7 +65,7 @@ static void export_tga(cucul_canvas_t *, cucul_buffer_t *); | |||
| * \param cv A libcucul canvas | |||
| * \param format A string describing the requested output format. | |||
| */ | |||
| cucul_buffer_t * cucul_create_export(cucul_canvas_t *cv, char const *format) | |||
| cucul_buffer_t * cucul_export_canvas(cucul_canvas_t *cv, char const *format) | |||
| { | |||
| cucul_buffer_t *ex; | |||
| @@ -103,7 +103,7 @@ cucul_buffer_t * cucul_create_export(cucul_canvas_t *cv, char const *format) | |||
| * | |||
| * Return a list of available export formats. The list is a NULL-terminated | |||
| * array of strings, interleaving a string containing the internal value for | |||
| * the export format, to be used with cucul_create_export(), and a string | |||
| * the export format, to be used with cucul_export_canvas(), and a string | |||
| * containing the natural language description for that export format. | |||
| * | |||
| * \return An array of strings. | |||
| @@ -0,0 +1,127 @@ | |||
| /* | |||
| * libcucul Canvas for ultrafast compositing of Unicode letters | |||
| * Copyright (c) 2002-2006 Sam Hocevar <sam@zoy.org> | |||
| * All Rights Reserved | |||
| * | |||
| * $Id$ | |||
| * | |||
| * This library is free software; you can redistribute it and/or | |||
| * modify it under the terms of the Do What The Fuck You Want To | |||
| * Public License, Version 2, as published by Sam Hocevar. See | |||
| * http://sam.zoy.org/wtfpl/COPYING for more details. | |||
| */ | |||
| /* | |||
| * This file contains various import functions. | |||
| */ | |||
| #include "config.h" | |||
| #if !defined(__KERNEL__) | |||
| # include <stdio.h> | |||
| # include <stdlib.h> | |||
| # include <string.h> | |||
| #endif | |||
| #include "cucul.h" | |||
| #include "cucul_internals.h" | |||
| static cucul_canvas_t *import_caca(void const *, unsigned int); | |||
| /** \brief Import a buffer into a canvas | |||
| * | |||
| * This function imports a memory area into an internal libcucul canvas. | |||
| * | |||
| * Valid values for \c format are: | |||
| * | |||
| * \li \c "caca": import native libcaca files. | |||
| * | |||
| * \param data The memory area to be loaded into a canvas. | |||
| * \param size The length of the memory area. | |||
| * \param format A string describing the input format. | |||
| * \return A libcucul canvas, or NULL in case of error. | |||
| */ | |||
| cucul_canvas_t * cucul_import_canvas(void const *data, unsigned int size, | |||
| char const *format) | |||
| { | |||
| if(!strcasecmp("caca", format)) | |||
| return import_caca(data, size); | |||
| /* FIXME: Try to autodetect */ | |||
| if(!strcasecmp("", format)) | |||
| return import_caca(data, size); | |||
| return NULL; | |||
| } | |||
| /** \brief Get available import formats | |||
| * | |||
| * Return a list of available import formats. The list is a NULL-terminated | |||
| * array of strings, interleaving a string containing the internal value for | |||
| * the import format, to be used with cucul_import_canvas(), and a string | |||
| * containing the natural language description for that import format. | |||
| * | |||
| * \return An array of strings. | |||
| */ | |||
| char const * const * cucul_get_import_list(void) | |||
| { | |||
| static char const * const list[] = | |||
| { | |||
| "", "autodetect", | |||
| "caca", "native libcaca format", | |||
| NULL, NULL | |||
| }; | |||
| return list; | |||
| } | |||
| /* | |||
| * XXX: the following functions are local. | |||
| */ | |||
| static cucul_canvas_t *import_caca(void const *data, unsigned int size) | |||
| { | |||
| cucul_canvas_t *cv; | |||
| uint8_t *buf = (uint8_t *)data; | |||
| unsigned int width, height, n; | |||
| if(size < 16) | |||
| return NULL; | |||
| if(buf[0] != 'C' || buf[1] != 'A' || buf[2] != 'C' || buf[3] != 'A') | |||
| return NULL; | |||
| if(buf[4] != 'C' || buf[5] != 'A' || buf[6] != 'N' || buf[7] != 'V') | |||
| return NULL; | |||
| width = ((uint32_t)buf[8] << 24) | ((uint32_t)buf[9] << 16) | |||
| | ((uint32_t)buf[10] << 8) | (uint32_t)buf[11]; | |||
| height = ((uint32_t)buf[12] << 24) | ((uint32_t)buf[13] << 16) | |||
| | ((uint32_t)buf[14] << 8) | (uint32_t)buf[15]; | |||
| if(!width || !height) | |||
| return NULL; | |||
| if(size != 16 + width * height * 8) | |||
| return NULL; | |||
| cv = cucul_create_canvas(width, height); | |||
| if(!cv) | |||
| return NULL; | |||
| for(n = height * width; n--; ) | |||
| { | |||
| cv->chars[n] = ((uint32_t)buf[16 + 0 + 8 * n] << 24) | |||
| | ((uint32_t)buf[16 + 1 + 8 * n] << 16) | |||
| | ((uint32_t)buf[16 + 2 + 8 * n] << 8) | |||
| | (uint32_t)buf[16 + 3 + 8 * n]; | |||
| cv->attr[n] = ((uint32_t)buf[16 + 4 + 8 * n] << 24) | |||
| | ((uint32_t)buf[16 + 5 + 8 * n] << 16) | |||
| | ((uint32_t)buf[16 + 6 + 8 * n] << 8) | |||
| | (uint32_t)buf[16 + 7 + 8 * n]; | |||
| } | |||
| return cv; | |||
| } | |||
| @@ -53,7 +53,7 @@ int main(int argc, char **argv) | |||
| buffer = malloc(statbuf.st_size); | |||
| read(fd, buffer, statbuf.st_size); | |||
| cv = cucul_load_canvas(buffer, statbuf.st_size); | |||
| cv = cucul_import_canvas(buffer, statbuf.st_size, "caca"); | |||
| free(buffer); | |||
| if(!cv) | |||
| @@ -226,7 +226,7 @@ int main(void) | |||
| if(server->canvas) | |||
| cucul_free_canvas(server->canvas); | |||
| server->canvas = cucul_load_canvas(buf, size); | |||
| server->canvas = cucul_import_canvas(buf, size, "caca"); | |||
| if(!server->canvas) | |||
| continue; /* Load error */ | |||
| @@ -240,7 +240,7 @@ int main(void) | |||
| /* Get ANSI representation of the image and skip the end-of buffer | |||
| * linefeed ("\r\n", 2 bytes) */ | |||
| server->buffer = cucul_create_export(server->canvas, "ansi"); | |||
| server->buffer = cucul_export_canvas(server->canvas, "ansi"); | |||
| server->bufdata = cucul_get_buffer_data(server->buffer); | |||
| server->buflen = cucul_get_buffer_size(server->buffer); | |||
| server->buflen -= 2; | |||
| @@ -58,7 +58,7 @@ int main(int argc, char **argv) | |||
| unload_image(i); | |||
| export = cucul_create_export(cv, "irc"); | |||
| export = cucul_export_canvas(cv, "irc"); | |||
| fwrite(cucul_get_buffer_data(export), | |||
| cucul_get_buffer_size(export), 1, stdout); | |||
| cucul_free_buffer(export); | |||
| @@ -101,7 +101,7 @@ int main(int argc, char *argv[]) | |||
| cucul_putstr(cv, WIDTH / 2 - 7 + x, HEIGHT / 2 + 5, "#"); | |||
| } | |||
| buffer = cucul_create_export(cv, argv[1]); | |||
| buffer = cucul_export_canvas(cv, argv[1]); | |||
| fwrite(cucul_get_buffer_data(buffer), | |||
| cucul_get_buffer_size(buffer), 1, stdout); | |||
| cucul_free_buffer(buffer); | |||