source: libcaca/trunk/examples/export.c @ 2821

Last change on this file since 2821 was 2821, checked in by Sam Hocevar, 11 years ago

Starting refactoring to get rid of libcucul. The initial reason for the
split is rendered moot by the plugin system: when enabled, binaries do
not link directly with libX11 or libGL. I hope this is a step towards
more consisteny and clarity.

  • Property svn:keywords set to Id
File size: 4.8 KB
Line 
1/*
2 *  export        libcaca export test program
3 *  Copyright (c) 2006 Sam Hocevar <sam@zoy.org>
4 *                All Rights Reserved
5 *
6 *  $Id: export.c 2821 2008-09-27 13:12:46Z sam $
7 *
8 *  This program is free software. It comes without any warranty, to
9 *  the extent permitted by applicable law. You can redistribute it
10 *  and/or modify it under the terms of the Do What The Fuck You Want
11 *  To Public License, Version 2, as published by Sam Hocevar. See
12 *  http://sam.zoy.org/wtfpl/COPYING for more details.
13 */
14
15#include "config.h"
16
17#if !defined(__KERNEL__)
18#   include <stdio.h>
19#   include <stdlib.h>
20#   include <string.h>
21#endif
22
23#include "caca.h"
24
25#define WIDTH 80
26#define HEIGHT 32
27
28uint32_t pixels[256*256];
29
30int main(int argc, char *argv[])
31{
32    caca_canvas_t *cv;
33    caca_dither_t *dither;
34    void *buffer;
35    char *file, *format;
36    char const * const * exports, * const * p;
37    size_t len;
38    int x, y;
39
40    exports = caca_get_export_list();
41
42    if(argc < 2 || argc > 3)
43    {
44        fprintf(stderr, "%s: wrong argument count\n", argv[0]);
45        fprintf(stderr, "usage: %s [file] <format>\n", argv[0]);
46        fprintf(stderr, "where <format> is one of:\n");
47        for(p = exports; *p; p += 2)
48            fprintf(stderr, " \"%s\" (%s)\n", *p, *(p + 1));
49        exit(-1);
50    }
51
52    if(argc == 2)
53    {
54        file = NULL;
55        format = argv[1];
56    }
57    else
58    {
59        file = argv[1];
60        format = argv[2];
61    }
62
63    for(p = exports; *p; p += 2)
64        if(!strcasecmp(format, *p))
65            break;
66
67    if(!*p)
68    {
69        fprintf(stderr, "%s: unknown format `%s'\n", argv[0], format);
70        fprintf(stderr, "please use one of:\n");
71        for(p = exports; *p; p += 2)
72            fprintf(stderr, " \"%s\" (%s)\n", *p, *(p + 1));
73        exit(-1);
74    }
75
76    if(file)
77    {
78        cv = caca_create_canvas(0, 0);
79        if(caca_import_file(cv, file, "") < 0)
80        {
81            fprintf(stderr, "%s: `%s' has unknown format\n", argv[0], file);
82            exit(-1);
83        }
84    }
85    else
86    {
87        cv = caca_create_canvas(WIDTH, HEIGHT);
88
89        for(y = 0; y < 256; y++)
90        {
91            for(x = 0; x < 256; x++)
92            {
93                uint32_t r = x;
94                uint32_t g = (255 - y + x) / 2;
95                uint32_t b = y * (255 - x) / 256;
96                pixels[y * 256 + x] = (r << 16) | (g << 8) | (b << 0);
97            }
98        }
99
100        dither = caca_create_dither(32, 256, 256, 4 * 256,
101                                     0x00ff0000, 0x0000ff00, 0x000000ff, 0x0);
102        if(!strcmp(format, "ansi") || !strcmp(format, "utf8"))
103            caca_set_dither_charset(dither, "shades");
104        caca_dither_bitmap(cv, 0, 0, caca_get_canvas_width(cv),
105                            caca_get_canvas_height(cv), dither, pixels);
106        caca_free_dither(dither);
107
108        caca_set_color_ansi(cv, CACA_WHITE, CACA_BLACK);
109        caca_draw_thin_box(cv, 0, 0, WIDTH - 1, HEIGHT - 1);
110
111        caca_set_color_ansi(cv, CACA_BLACK, CACA_WHITE);
112        caca_fill_ellipse(cv, WIDTH / 2, HEIGHT / 2,
113                               WIDTH / 4, HEIGHT / 4, ' ');
114
115        caca_set_color_ansi(cv, CACA_LIGHTGRAY, CACA_BLACK);
116        caca_put_str(cv, WIDTH / 2 - 12, HEIGHT / 2 - 6,
117                      "   lightgray on black   ");
118        caca_set_color_ansi(cv, CACA_DEFAULT, CACA_TRANSPARENT);
119        caca_put_str(cv, WIDTH / 2 - 12, HEIGHT / 2 - 5,
120                      " default on transparent ");
121        caca_set_color_ansi(cv, CACA_BLACK, CACA_WHITE);
122        caca_put_str(cv, WIDTH / 2 - 12, HEIGHT / 2 - 4,
123                      "     black on white     ");
124
125        caca_set_color_ansi(cv, CACA_BLACK, CACA_WHITE);
126        caca_put_str(cv, WIDTH / 2 - 8, HEIGHT / 2 - 3, "[<><><><> <>--<>]");
127        caca_put_str(cv, WIDTH / 2 - 8, HEIGHT / 2 - 2, "[ドラゴン ボーレ]");
128        caca_put_str(cv, WIDTH / 2 - 7, HEIGHT / 2 + 2, "äβç ░▒▓█▓▒░ ΔЗҒ");
129        caca_put_str(cv, WIDTH / 2 - 5, HEIGHT / 2 + 4, "(\") \\o/ <&>");
130
131        caca_set_attr(cv, CACA_BOLD);
132        caca_put_str(cv, WIDTH / 2 - 16, HEIGHT / 2 + 3, "Bold");
133        caca_set_attr(cv, CACA_BLINK);
134        caca_put_str(cv, WIDTH / 2 - 9, HEIGHT / 2 + 3, "Blink");
135        caca_set_attr(cv, CACA_ITALICS);
136        caca_put_str(cv, WIDTH / 2 - 1, HEIGHT / 2 + 3, "Italics");
137        caca_set_attr(cv, CACA_UNDERLINE);
138        caca_put_str(cv, WIDTH / 2 + 8, HEIGHT / 2 + 3, "Underline");
139        caca_set_attr(cv, 0);
140
141        caca_set_color_ansi(cv, CACA_WHITE, CACA_LIGHTBLUE);
142        caca_put_str(cv, WIDTH / 2 - 7, HEIGHT / 2, "    LIBCACA    ");
143
144        for(x = 0; x < 16; x++)
145        {
146            caca_set_color_argb(cv, 0xff00 | x, 0xf00f | (x << 4));
147            caca_put_char(cv, WIDTH / 2 - 7 + x, HEIGHT / 2 + 6, '#');
148        }
149    }
150
151    buffer = caca_export_memory(cv, format, &len);
152    fwrite(buffer, len, 1, stdout);
153    free(buffer);
154
155    caca_free_canvas(cv);
156
157    return 0;
158}
159
Note: See TracBrowser for help on using the repository browser.