Ignore:
Timestamp:
Nov 9, 2003, 1:40:53 PM (17 years ago)
Author:
Sam Hocevar
Message:
  • libee is now standalone.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/libee/ee.c

    r75 r79  
    11/*
    2  *   ttyvaders     Textmode shoot'em up
    3  *   Copyright (c) 2002 Sam Hocevar <sam@zoy.org>
     2 *   libee         ASCII-Art library
     3 *   Copyright (c) 2002, 2003 Sam Hocevar <sam@zoy.org>
    44 *                 All Rights Reserved
    55 *
     
    2828#include <time.h>
    2929
    30 #include "common.h"
    31 
    32 int init_graphics( void )
    33 {
    34 #ifdef USE_SLANG
     30#include "ee.h"
     31
     32int ee_init(void)
     33{
     34#ifdef USE_SLANG
     35    static char * colors[] = { "black", "green", "yellow", "white",
     36        "red", "gray", "lightgray", "blue", "cyan", "magenta", NULL };
     37    int i;
     38
    3539    /* Initialize slang library */
    3640    SLsig_block_signals();
    3741    SLtt_get_terminfo();
    3842
    39     if( SLkp_init() == -1 )
     43    if(SLkp_init() == -1)
    4044    {
    4145        SLsig_unblock_signals();
    42         return 1;
    43     }
    44 
    45     SLang_init_tty (-1, 0, 1);
    46 
    47     if( SLsmg_init_smg() == -1 )
     46        return -1;
     47    }
     48
     49    SLang_init_tty(-1, 0, 1);
     50
     51    if(SLsmg_init_smg() == -1)
    4852    {
    4953        SLsig_unblock_signals();
    50         return 1;
     54        return -1;
    5155    }
    5256
     
    5458
    5559    SLsmg_cls();
    56     SLtt_set_cursor_visibility( 0 );
     60    SLtt_set_cursor_visibility(0);
    5761    SLsmg_refresh();
     62
     63    for(i = 0; colors[i]; i++)
     64    {
     65        SLtt_set_color(i + 1, NULL, colors[i], "black");
     66    }
     67
    5868#elif USE_NCURSES
    5969    /* Initialize ncurses library */
     
    6474    noecho();
    6575    nodelay(stdscr, TRUE);
    66     curs_set( 0 );
     76    curs_set(0);
     77
     78    start_color();
     79
     80    init_pair(EE_BLACK, COLOR_BLACK, COLOR_BLACK);
     81    init_pair(EE_GREEN, COLOR_GREEN, COLOR_BLACK);
     82    init_pair(EE_YELLOW, COLOR_YELLOW, COLOR_BLACK);
     83    init_pair(EE_WHITE, COLOR_WHITE, COLOR_BLACK);
     84    init_pair(EE_RED, COLOR_RED, COLOR_BLACK);
     85    init_pair(EE_GRAY, COLOR_WHITE, COLOR_BLACK); // XXX
     86    init_pair(EE_LIGHTGRAY, COLOR_WHITE, COLOR_BLACK); // XXX
     87    init_pair(EE_BLUE, COLOR_BLUE, COLOR_BLACK);
     88    init_pair(EE_CYAN, COLOR_CYAN, COLOR_BLACK);
     89    init_pair(EE_MAGENTA, COLOR_MAGENTA, COLOR_BLACK);
     90
    6791#else
    6892    /* Dummy driver */
     93
    6994#endif
    7095
     
    7297}
    7398
    74 void init_game( game *g )
    75 {
    76 #ifdef USE_SLANG
    77     static char * const colors[] =
    78     {
    79         "black", "green", "yellow", "white",
    80         "red", "gray", "lightgray", "blue", "cyan", "magenta", NULL
    81     };
    82 
    83     int i;
    84 
    85     for( i = 0; colors[i] ; i++ )
    86     {
    87         SLtt_set_color( i+1, NULL, colors[i], "black" );
    88     }
    89 
    90     g->w = SLtt_Screen_Cols;
    91     g->h = SLtt_Screen_Rows;
    92 #elif USE_NCURSES
    93     start_color();
    94 
    95     init_pair( BLACK, COLOR_BLACK, COLOR_BLACK );
    96     init_pair( GREEN, COLOR_GREEN, COLOR_BLACK );
    97     init_pair( YELLOW, COLOR_YELLOW, COLOR_BLACK );
    98     init_pair( WHITE, COLOR_WHITE, COLOR_BLACK );
    99     init_pair( RED, COLOR_RED, COLOR_BLACK );
    100     init_pair( GRAY, COLOR_WHITE, COLOR_BLACK ); // XXX
    101     init_pair( LIGHTGRAY, COLOR_WHITE, COLOR_BLACK ); // XXX
    102     init_pair( BLUE, COLOR_BLUE, COLOR_BLACK );
    103     init_pair( CYAN, COLOR_CYAN, COLOR_BLACK );
    104     init_pair( MAGENTA, COLOR_MAGENTA, COLOR_BLACK );
    105 
    106     g->w = COLS;
    107     g->h = LINES;
    108 #else
    109     /* Use dummy driver */
    110     g->w = 80;
    111     g->h = 25;
    112 #endif
    113 }
    114 
    115 char get_key( void )
    116 {
    117 #ifdef USE_SLANG
    118     if( SLang_input_pending (0) )
    119     {
    120         return SLang_getkey();
    121     }
    122 #elif USE_NCURSES
    123     char key;
    124 
    125     if( ( key = getch() ) != ERR )
    126     {
    127         return key;
    128     }
    129 #else
    130     /* Use dummy driver */
    131     char key = GET_RAND(0,256);
    132 
    133     if( key != 'q' && key != 'p' && key != '\t' )
    134     {
    135         return key;
    136     }
    137 #endif
    138 
    139     return 0;
    140 }
    141 
    142 void clear_graphics( game *g )
     99int ee_get_width(void)
     100{
     101#ifdef USE_SLANG
     102    return SLtt_Screen_Cols;
     103#elif USE_NCURSES
     104    return COLS;
     105#else
     106    return 80;
     107#endif
     108}
     109
     110int ee_get_height(void)
     111{
     112#ifdef USE_SLANG
     113    return SLtt_Screen_Rows;
     114#elif USE_NCURSES
     115    return LINES;
     116#else
     117    return 25;
     118#endif
     119}
     120
     121void ee_clear(void)
    143122{
    144123#ifdef USE_SLANG
    145124    //SLsmg_cls();
    146125    int y;
    147     for( y = 0; y < g->h; y++ )
    148     {
    149         gfx_goto( 0, y );
    150         gfx_putstr( "                                                                                " );
     126    for(y = 0; y < ee_get_height(); y++)
     127    {
     128        ee_goto(0, y);
     129        ee_putstr("                                                                                ");
    151130    }
    152131#elif USE_NCURSES
    153132    //clear();
    154133    int y;
    155     for( y = 0; y < g->h; y++ )
    156     {
    157         gfx_goto( 0, y );
    158         gfx_putstr( "                                                                                " );
     134    for(y = 0; y < ee_get_height(); y++)
     135    {
     136        ee_goto(0, y);
     137        ee_putstr("                                                                                ");
    159138    }
    160139#else
     
    176155
    177156#define DELAY 40000
    178 
    179 void refresh_graphics( void )
     157void ee_refresh(void)
    180158{
    181159    static int64_t local_clock = 0;
    182160    int64_t now;
    183161
    184     gfx_goto( 0, 0 );
    185 
    186     if( !local_clock )
     162    ee_goto(0, 0);
     163
     164    if(!local_clock)
    187165    {
    188166        /* Initialize local_clock */
     
    190168    }
    191169
    192     if( local_time() > local_clock + 10000 )
     170    if(local_time() > local_clock + 10000)
    193171    {
    194172        /* If we are late, we shouldn't display anything */
     
    205183    now = local_time();
    206184
    207     if( now < local_clock + DELAY - 10000 )
    208     {
    209         usleep( local_clock + DELAY - 10000 - now );
     185    if(now < local_clock + DELAY - 10000)
     186    {
     187        usleep(local_clock + DELAY - 10000 - now);
    210188    }
    211189
     
    213191}
    214192
    215 void end_graphics( void )
    216 {
    217 #ifdef USE_SLANG
    218     SLtt_set_cursor_visibility( 1 );
     193void ee_end(void)
     194{
     195#ifdef USE_SLANG
     196    SLtt_set_cursor_visibility(1);
    219197    SLang_reset_tty();
    220198    SLsmg_reset_smg();
    221199#elif USE_NCURSES
    222     curs_set( 1 );
     200    curs_set(1);
    223201    endwin();
    224202#else
     
    227205}
    228206
     207char ee_get_key(void)
     208{
     209#ifdef USE_SLANG
     210    if(SLang_input_pending(0))
     211    {
     212        return SLang_getkey();
     213    }
     214#elif USE_NCURSES
     215    char key = getch();
     216
     217    if(key != ERR)
     218    {
     219        return key;
     220    }
     221#else
     222    return 0;
     223
     224#endif
     225
     226    return 0;
     227}
     228
Note: See TracChangeset for help on using the changeset viewer.