source: ttyvaders/trunk/libee/graphics.c @ 158

Last change on this file since 158 was 158, checked in by Sam Hocevar, 16 years ago
  • README: + Added a note about dos cross-compilation.
  • configure.ac: + Added a check for ScreenUpdate? in <pc.h>.
  • libee/graphics.c libee/ee.c: + Improved the conio port thanks to ScreenUpdate?().
  • 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 158 2003-11-12 18:41:02Z 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
40static int ee_color = 0;
41#if defined(USE_CONIO)
42static enum COLORS dos_colors[] = {
43    0,
44    BLACK,
45    GREEN,
46    YELLOW,
47    WHITE,
48    RED,
49    DARKGRAY,
50    LIGHTGRAY,
51    BLUE,
52    CYAN,
53    MAGENTA
54};
55#endif
56
57void ee_set_color(int color)
58{
59    ee_color = color;
60#if defined(USE_SLANG)
61    SLsmg_set_color(color);
62#elif defined(USE_NCURSES)
63    attrset(COLOR_PAIR(color));
64#elif defined(USE_CONIO)
65    if(color >= 1 && color <= 10)
66        textcolor(dos_colors[color]);
67#endif
68}
69
70int ee_get_color(void)
71{
72    return ee_color;
73}
74
75extern char *_screen_buffer;
76
77void ee_putchar(int x, int y, char c)
78{
79#if defined(USE_SLANG)
80    SLsmg_gotorc(y,x);
81    SLsmg_write_char(c);
82#elif defined(USE_NCURSES)
83    move(y,x);
84    addch(c);
85#elif defined(USE_CONIO)
86    if(x<0 || x>=ee_get_width() || y<0 || y>=ee_get_height())
87        return;
88    _screen_buffer[2 * (x + y * ee_get_width())] = c;
89    _screen_buffer[2 * (x + y * ee_get_width()) + 1] = dos_colors[ee_color];
90//    gotoxy(x+1,y+1);
91//    putch(c);
92#endif
93}
94
95void ee_putstr(int x, int y, char *s)
96{
97    if(y<0 || y>=ee_get_height())
98        return;
99#if defined(USE_SLANG)
100    SLsmg_gotorc(y,x);
101    SLsmg_write_string(s);
102#elif defined(USE_NCURSES)
103    move(y,x);
104    addstr(s);
105#elif defined(USE_CONIO)
106    char *buf = _screen_buffer + 2 * (x + y * ee_get_width());
107    while(*s)
108    {
109        *buf++ = *s++;
110        *buf++ = dos_colors[ee_color];
111    }
112//    gotoxy(x+1,y+1);
113//    cputs(s);
114#endif
115}
116
117void ee_clear(void)
118{
119    /* We could use SLsmg_cls() etc., but drawing empty lines is much faster */
120    int x = ee_get_width(), y = ee_get_height();
121    char *empty_line = malloc((x + 1) * sizeof(char));
122
123    memset(empty_line, ' ', x);
124    empty_line[x] = '\0';
125
126    while(y--)
127    {
128        ee_putstr(0, y, empty_line);
129    }
130
131    free(empty_line);
132}
133
Note: See TracBrowser for help on using the repository browser.