source: libcaca/trunk/libee/graphics.c @ 179

Last change on this file since 179 was 179, checked in by Sam Hocevar, 16 years ago
  • libee/graphics.c: + Correct clipping in ee_putstr() for long strings.
  • libee/ee.c: + New ee_get_rendertime() call to provide framerate information.
  • libee/ee.h: + Added const keywords where it was meaningful, despite Slang's blatant

omission of such keywords in its prototypes.

  • Property svn:keywords set to Id
File size: 2.9 KB
Line 
1/*
2 *   libee         ASCII-Art library
3 *   Copyright (c) 2002, 2003 Sam Hocevar <sam@zoy.org>
4 *                 All Rights Reserved
5 *
6 *   $Id: graphics.c 179 2003-11-15 09:58:20Z sam $
7 *
8 *   This program is free software; you can redistribute it and/or modify
9 *   it under the terms of the GNU General Public License as published by
10 *   the Free Software Foundation; either version 2 of the License, or
11 *   (at your option) any later version.
12 *
13 *   This program is distributed in the hope that it will be useful,
14 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
15 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 *   GNU General Public License for more details.
17 *
18 *   You should have received a copy of the GNU General Public License
19 *   along with this program; if not, write to the Free Software
20 *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 */
22
23#include "config.h"
24
25#if defined(USE_SLANG)
26#   include <slang.h>
27#elif defined(USE_NCURSES)
28#   include <curses.h>
29#elif defined(USE_CONIO)
30#   include <conio.h>
31#else
32#   error "no graphics library detected"
33#endif
34
35#include <string.h>
36#include <stdlib.h>
37
38#include "ee.h"
39#include "ee_internals.h"
40
41static int ee_color = 0;
42
43void ee_set_color(int color)
44{
45    if(color < 0 || color > 15)
46        return;
47
48    ee_color = color;
49#if defined(USE_SLANG)
50    SLsmg_set_color(color + 1);
51#elif defined(USE_NCURSES)
52    attrset(_ee_attr[color]);
53#elif defined(USE_CONIO)
54    textcolor(color);
55#endif
56}
57
58int ee_get_color(void)
59{
60    return ee_color;
61}
62
63void ee_putchar(int x, int y, char c)
64{
65    if(x < 0 || x >= ee_get_width() || y < 0 || y >= ee_get_height())
66        return;
67
68#if defined(USE_SLANG)
69    SLsmg_gotorc(y, x);
70    SLsmg_write_char(c);
71#elif defined(USE_NCURSES)
72    move(y, x);
73    addch(c);
74#elif defined(USE_CONIO)
75    _ee_screen[2 * (x + y * ee_get_width())] = c;
76    _ee_screen[2 * (x + y * ee_get_width()) + 1] = ee_color;
77//    gotoxy(x + 1, y + 1);
78//    putch(c);
79#endif
80}
81
82void ee_putstr(int x, int y, const char *s)
83{
84    int len;
85
86    if(y < 0 || y >= ee_get_height() || x >= ee_get_width())
87        return;
88
89    len = strlen(s);
90
91    if(x < 0)
92    {
93        len -= -x;
94        if(len < 0)
95            return;
96        s += -x;
97        x = 0;
98    }
99
100    if(x + len >= ee_get_width())
101    {
102        memcpy(_ee_scratch_line, s, ee_get_width() - x);
103        _ee_scratch_line[ee_get_width() - x] = '\0';
104        s = _ee_scratch_line;
105    }
106
107#if defined(USE_SLANG)
108    SLsmg_gotorc(y, x);
109    SLsmg_write_string(s);
110#elif defined(USE_NCURSES)
111    move(y, x);
112    addstr(s);
113#elif defined(USE_CONIO)
114    char *buf = _ee_screen + 2 * (x + y * ee_get_width());
115    while(*s)
116    {
117        *buf++ = *s++;
118        *buf++ = ee_color;
119    }
120//    gotoxy(x + 1, y + 1);
121//    cputs(s);
122#endif
123}
124
125void ee_clear(void)
126{
127    /* We could use SLsmg_cls() etc., but drawing empty lines is much faster */
128    int y = ee_get_height();
129
130    while(y--)
131        ee_putstr(0, y, _ee_empty_line);
132}
133
Note: See TracBrowser for help on using the repository browser.