Logo Search packages:      
Sourcecode: fenix version File versions  Download package

g_systexts.c

/*
 *  Fenix - Videogame compiler/interpreter
 *  Current release       : FENIX - PROJECT 1.0 - R 0.84
 *  Last stable release   :
 *  Project documentation : http://fenix.divsite.net
 *
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 *
 *  Copyright © 1999 José Luis Cebrián Pagüe
 *  Copyright © 2002 Fenix Team
 *
 */

#ifdef TARGET_BEOS
#include <posix/assert.h>
#else
#include <assert.h>
#endif

#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <ctype.h>

#include "fxi.h"
#include "dcb.h"

#define CHARWIDTH 6

static char sysfont[][8][16] = {
{
        { "......" },
        { "......" },
        { "......" },
        { "......" },
        { "......" },
        { "......" },
        { "......" },
        { "......" }
},{
        { ".OOO.." },
        { "O...O." },
        { "O...O." },
        { "OOOOO." },
        { "O...O." },
        { "O...O." },
        { "O...O." },
        { "......" }
},{
        { "OOOO.." },
        { "O...O." },
        { "O...O." },
        { "OOOO.." },
        { "O...O." },
        { "O...O." },
        { "OOOO.." },
        { "......" }
},{
        { ".OOO.." },
        { "O...O." },
        { "O....." },
        { "O....." },
        { "O....." },
        { "O...O." },
        { ".OOO.." },
        { "......" }
},{
        { "OOOO.." },
        { "O...O." },
        { "O...O." },
        { "O...O." },
        { "O...O." },
        { "O...O." },
        { "OOOO.." },
        { "......" }
},{
        { "OOOOO." },
        { "O....." },
        { "O....." },
        { "OOOO.." },
        { "O....." },
        { "O....." },
        { "OOOOO." },
        { "......" }
},{
        { "OOOOO." },
        { "O....." },
        { "O....." },
        { "OOOO.." },
        { "O....." },
        { "O....." },
        { "O....." },
        { "......" }
},{
        { ".OOO.." },
        { "O...O." },
        { "O....." },
            { "O..OO." },
        { "O...O." },
        { "O...O." },
        { ".OOO.." },
        { "......" }
},{
        { "O...O." },
        { "O...O." },
        { "O...O." },
        { "OOOOO." },
        { "O...O." },
        { "O...O." },
        { "O...O." },
        { "......" }
},{
        { "OOOOO." },
        { "..O..." },
        { "..O..." },
        { "..O..." },
        { "..O..." },
        { "..O..." },
        { "OOOOO." },
        { "......" }
},{
        { "....O." },
        { "....O." },
        { "....O." },
        { "....O." },
        { "....O." },
        { "O...O." },
        { ".OOO.." },
        { "......" }
},{
        { "O...O." },
        { "O..O.." },
        { "O.O..." },
        { "OO...." },
        { "O.O..." },
        { "O..O.." },
        { "O...O." },
        { "......" }
},{
        { "O....." },
        { "O....." },
        { "O....." },
        { "O....." },
        { "O....." },
        { "O....." },
        { "OOOOO." },
        { "......" }
},{
        { "O...O." },
        { "OO.OO." },
        { "O.O.O." },
        { "O...O." },
        { "O...O." },
        { "O...O." },
        { "O...O." },
        { "......" }
},{
        { ".OOO.." },
        { "......" },
        { "OO..O." },
        { "OO..O." },
        { "O.O.O." },
        { "O..OO." },
        { "O..OO." },
        { "......" }
},{
        { "OO..O." },
        { "OO..O." },
        { "O.O.O." },
        { "O.O.O." },
        { "O.O.O." },
        { "O..OO." },
        { "O..OO." },
        { "......" }
},{
        { ".OOO.." },
        { "O...O." },
        { "O...O." },
        { "O...O." },
        { "O...O." },
        { "O...O." },
        { ".OOO.." },
        { "......" }
},{
        { "OOOO.." },
        { "O...O." },
        { "O...O." },
        { "OOOO.." },
        { "O....." },
        { "O....." },
        { "O....." },
        { "......" }
},{
        { ".OOO.." },
        { "O...O." },
        { "O...O." },
        { "O...O." },
        { "O.O.O." },
        { "OO..O." },
        { ".OOO.." },
        { "......" }
},{
        { "OOOO.." },
        { "O...O." },
        { "O...O." },
        { "OOOO.." },
        { "O.O..." },
        { "O..O.." },
        { "O...O." },
        { "......" }
},{
        { ".OOO.." },
        { "O...O." },
        { "O....." },
        { ".OOO.." },
        { "....O." },
        { "O...O." },
        { ".OOO.." },
        { "......" }
},{
        { "OOOOO." },
        { "..O..." },
        { "..O..." },
        { "..O..." },
        { "..O..." },
        { "..O..." },
        { "..O..." },
        { "......" }
},{
        { "O...O." },
        { "O...O." },
        { "O...O." },
        { "O...O." },
        { "O...O." },
        { "O...O." },
        { ".OOO.." },
        { "......" }
},{
        { "O...O." },
        { "O...O." },
        { "O...O." },
        { "O...O." },
        { ".O.O.." },
        { ".O.O.." },
        { "..O..." },
        { "......" }
},{
        { "O...O." },
        { "O...O." },
        { "O...O." },
        { "O...O." },
        { "O.O.O." },
        { "O.O.O." },
        { ".O.O.." },
        { "......" }
},{
        { "O...O." },
        { "O...O." },
        { ".O.O.." },
        { "..O..." },
        { ".O.O.." },
        { "O...O." },
        { "O...O." },
        { "......" }
},{
        { "O...O." },
        { "O...O." },
        { ".O.O.." },
        { "..O..." },
        { "..O..." },
        { "..O..." },
        { "..O..." },
        { "......" }
},{
        { "OOOOO." },
        { "....O." },
        { "...O.." },
        { "..O..." },
        { ".O...." },
        { "O....." },
        { "OOOOO." },
        { "......" }
},{
        { ".OOO.." },
        { "O...O." },
        { "O...O." },
        { "O...O." },
        { "O...O." },
        { "O...O." },
        { ".OOO.." },
        { "......" }
},{
        { "..O..." },
        { ".OO..." },
        { "O.O..." },
        { "..O..." },
        { "..O..." },
        { "..O..." },
        { "OOOOO." },
        { "......" }
},{
        { ".OOO.." },
        { "O...O." },
        { "....O." },
        { "..OO.." },
        { ".O...." },
        { "O....." },
        { "OOOOO." },
        { "......" }
},{
        { ".OOO.." },
        { "O...O." },
        { "....O." },
        { ".OOO.." },
        { "....O." },
        { "O...O." },
        { ".OOO.." },
        { "......" }
},{
        { "....O." },
        { "O...O." },
        { "O...O." },
        { "OOOOO." },
        { "....O." },
        { "....O." },
        { "....O." },
        { "......" }
},{
        { "OOOOO." },
        { "O....." },
        { "OOOO.." },
        { "....O." },
        { "....O." },
        { "....O." },
        { "OOOO.." },
        { "......" }
},{
        { ".OOO.." },
        { "O....." },
        { "OOOO.." },
        { "O...O." },
        { "O...O." },
        { "O...O." },
        { ".OOO.." },
        { "......" }
},{
        { "OOOOO." },
        { "....O." },
        { "...O.." },
        { "..O..." },
        { ".O...." },
        { "O....." },
        { "O....." },
        { "......" }
},{
        { ".OOO.." },
        { "O...O." },
        { "O...O." },
        { ".OOO.." },
        { "O...O." },
        { "O...O." },
        { ".OOO.." },
        { "......" }
},{
        { ".OOO.." },
        { "O...O." },
        { "O...O." },
        { "O...O." },
        { ".OOOO." },
        { "....O." },
        { ".OOO.." },
        { "......" }
},{
        { "......" },
        { "......" },
        { "......" },
        { "......" },
        { "......" },
        { "......" },
        { "..OO.." },
        { "......" }
},{
        { "......" },
        { "......" },
        { "..OO.." },
        { "......" },
        { "......" },
        { "..OO.." },
        { "......" },
        { "......" }
},{
        { "......" },
        { "......" },
        { "......" },
        { ".OOOO." },
        { "......" },
        { ".OOOO." },
        { "......" },
        { "......" }
},{
        { "OO...." },
        { "O...O." },
        { "...O.." },
        { "..O..." },
        { ".O...." },
        { "O...O." },
        { "...OO." },
        { "......" }
},{
        { "......" },
        { "......" },
        { ".OOO.." },
        { "....O." },
        { ".OOOO." },
        { "O...O." },
        { ".OOOO." },
        { "......" }
},{
        { "O....." },
        { "O....." },
        { "OOOO.." },
        { "O...O." },
        { "O...O." },
        { "O...O." },
        { "OOOO.." },
        { "......" }
},{
        { "......" },
        { "......" },
        { ".OOO.." },
        { "O...O." },
        { "O....." },
        { "O...O." },
        { ".OOO.." },
        { "......" }
},{
        { "....O." },
        { "....O." },
        { ".OOOO." },
        { "O...O." },
        { "O...O." },
        { "O...O." },
        { ".OOOO." },
        { "......" }
},{
        { "......" },
        { "......" },
        { ".OOO.." },
        { "O...O." },
        { "OOOO.." },
        { "O....." },
        { ".OOOO." },
        { "......" }
},{
        { ".OOO.." },
        { "O...O." },
        { "O....." },
        { "OOO..." },
        { "O....." },
        { "O....." },
        { "O....." },
        { "......" }
},{
        { "......" },
        { "......" },
        { ".OOOO." },
        { "O...O." },
        { "O...O." },
        { ".OOOO." },
        { "....O." },
        { ".OOO.." }
},{
        { "O....." },
        { "O....." },
        { "OOOO.." },
        { "O...O." },
        { "O...O." },
        { "O...O." },
        { "O...O." },
        { "......" }
},{
        { "......" },
        { "..O..." },
        { "......" },
        { ".OO..." },
        { "..O..." },
        { "..O..." },
        { ".OOO.." },
        { "......" }
},{
        { "......" },
        { "....O." },
        { "......" },
        { "..OOO." },
        { "....O." },
        { "....O." },
        { "O...O." },
        { ".OOO.." }
},{
        { "O....." },
        { "O....." },
        { "O....." },
        { "O..O.." },
        { "OOO..." },
        { "O..O.." },
        { "O...O." },
        { "......" }
},{
        { ".OO..." },
        { "..O..." },
        { "..O..." },
        { "..O..." },
        { "..O..." },
        { "..O..." },
        { "OOOOO." },
        { "......" }
},{
        { "......" },
        { "......" },
        { ".O.O.." },
        { "O.O.O." },
        { "O.O.O." },
        { "O.O.O." },
        { "O.O.O." },
        { "......" }
},{
        { "OOOOO." },
        { "......" },
        { ".OOO.." },
        { "O...O." },
        { "O...O." },
        { "O...O." },
        { "O...O." },
        { "......" }
},{
        { "......" },
        { "......" },
        { ".OOO.." },
        { "O...O." },
        { "O...O." },
        { "O...O." },
        { "O...O." },
        { "......" }
},{
        { "......" },
        { "......" },
        { ".OOO.." },
        { "O...O." },
        { "O...O." },
        { "O...O." },
        { ".OOO.." },
        { "......" }
},{
        { "......" },
        { "......" },
        { "OOOO.." },
        { "O...O." },
        { "O...O." },
        { "OOOO.." },
        { "O....." },
        { "O....." }
},{
        { "......" },
        { "......" },
        { ".OOOO." },
        { "O...O." },
        { "O...O." },
        { ".OOOO." },
        { "....O." },
        { "....O." }
},{
        { "......" },
        { "......" },
        { "O.OO.." },
        { "OO..O." },
        { "O....." },
        { "O....." },
        { "O....." },
        { "......" }
},{
        { "......" },
        { "......" },
        { ".OOO.." },
        { "O....." },
        { ".OOO.." },
        { "....O." },
        { "OOOO.." },
        { "......" }
},{
        { ".O...." },
        { ".O...." },
        { "OOOO.." },
        { ".O...." },
        { ".O...." },
        { ".O..O." },
        { "..OO.." },
        { "......" }
},{
        { "......" },
        { "......" },
        { "O...O." },
        { "O...O." },
        { "O...O." },
        { "O...O." },
        { ".OOO.." },
        { "......" }
},{
        { "......" },
        { "......" },
        { "O...O." },
        { "O...O." },
        { "O...O." },
        { ".O.O.." },
        { "..O..." },
        { "......" }
},{
        { "......" },
        { "......" },
        { "O...O." },
        { "O...O." },
        { "O.O.O." },
        { "O.O.O." },
        { ".O.O.." },
        { "......" }
},{
        { "......" },
        { "......" },
        { "O...O." },
        { ".O.O.." },
        { "..O..." },
        { ".O.O.." },
        { "O...O." },
        { "......" }
},{
        { "......" },
        { "......" },
        { "O...O." },
        { "O...O." },
        { "O...O." },
        { ".OOOO." },
        { "....O." },
        { "OOOO.." }
},{
        { "......" },
        { "......" },
        { "OOOOO." },
        { "...O.." },
        { "..O..." },
        { ".O...." },
        { "OOOOO." },
        { "......" }
},{
        { ".OOO.." },
        { ".O...." },
        { ".O...." },
        { ".O...." },
        { ".O...." },
        { ".O...." },
        { ".OOO.." },
        { "......" }
},{
        { ".OOO.." },
        { "...O.." },
        { "...O.." },
        { "...O.." },
        { "...O.." },
        { "...O.." },
        { ".OOO.." },
        { "......" }
},{
        { "..OO.." },
        { ".O...." },
        { ".O...." },
        { ".O...." },
        { ".O...." },
        { ".O...." },
        { "..OO.." },
        { "......" }
},{
        { ".OO..." },
        { "...O.." },
        { "...O.." },
        { "...O.." },
        { "...O.." },
        { "...O.." },
        { ".OO..." },
        { "......" }
},{
        { "..OO.." },
        { ".O...." },
        { ".O...." },
        { "O....." },
        { ".O...." },
        { ".O...." },
        { "..OO.." },
        { "......" }
},{
        { ".OO..." },
        { "...O.." },
        { "...O.." },
        { "....O." },
        { "...O.." },
        { "...O.." },
        { ".OO..." },
        { "......" }
},{
        { "......" },
        { "......" },
        { "......" },
        { "......" },
        { "OOOOO." },
        { "......" },
        { "......" },
        { "......" }
},{
        { ".O...." },
        { "..O..." },
        { "...O.." },
        { "....O." },
        { "...O.." },
        { "..O..." },
        { ".O...." },
        { "......" }
},{
        { "....O." },
        { "...O.." },
        { "..O..." },
        { ".O...." },
        { "..O..." },
        { "...O.." },
        { "....O." },
        { "......" }
},{
        { "......" },
        { "......" },
        { "......" },
        { "......" },
        { "......" },
        { "......" },
        { "OOOOO." },
        { "......" }
},{
        { "......" },
        { "......" },
        { "......" },
        { "......" },
        { "......" },
        { "......" },
        { "...O.." },
        { ".OO..." }
},{
        { "......" },
        { "O....." },
        { ".O...." },
        { "..O..." },
        { "...O.." },
        { "....O." },
        { ".....O" },
        { "......" }
},{
        { "......" },
        { ".....O" },
        { "....O." },
        { "...O.." },
        { "..O..." },
        { ".O...." },
        { "O....." },
        { "......" }
},{
        { "......" },
        { "......" },
        { "..O..." },
        { "..O..." },
        { "OOOOO." },
        { "..O..." },
        { "..O..." },
        { "......" }
},{
        { "......" },
        { ".O.O.." },
        { "..O..." },
        { "OOOOO." },
        { "..O..." },
        { ".O.O.." },
        { "......" },
        { "......" }
},{
        { "......" },
        { "..O..." },
        { "..O..." },
        { "..O..." },
        { "..O..." },
        { "......" },
        { "..O..." },
        { "......" }
},{
        { "......" },
        { "..O..." },
        { "......" },
        { "..O..." },
        { "..O..." },
        { "..O..." },
        { "..O..." },
        { "......" }
},{
        { "......" },
        { ".OOO.." },
        { "O...O." },
        { "...O.." },
        { "..O..." },
        { "......" },
        { "..O..." },
        { "......" }
},{
        { "......" },
        { "..O..." },
        { "......" },
        { "..O..." },
        { ".O...." },
        { "O...O." },
        { ".OOO.." },
        { "......" }
},{
        { ".O.O.." },
        { ".O.O.." },
        { "......" },
        { "......" },
        { "......" },
        { "......" },
        { "......" },
        { "......" }
},{
        { "...O.." },
        { "..O..." },
        { "......" },
        { "......" },
        { "......" },
        { "......" },
        { "......" },
        { "......" }
},{
        { "..O..." },
        { "..O..." },
        { "..O..." },
        { "..O..." },
        { "..OOOO" },
        { "..O..." },
        { "..O..." },
        { "..O..." }
},{
        { "......" },
        { "......" },
        { "......" },
        { "......" },
        { "OOOOOO" },
        { "......" },
        { "......" },
        { "......" }
},{
        { "..O..." },
        { "..O..." },
        { "..O..." },
        { "..O..." },
        { "..O..." },
        { "..O..." },
        { "..O..." },
        { "..O..." }
}
};

static Uint8 * letters = " ABCDEFGHIJKLMÑNOPQRSTUVWXYZ0123456789.:=%abcdefghijklmñnopqrstuvwxyz[](){}-><_,\\/+*!¡?¿\"'\x01\x02\x03" ;

static int fg, bg ;

void gr_sys_putchar (GRAPH * map, int ox, int oy, Uint8 c)
{
        Sint32 x, y ;
        static int corr[256] ;
        static int corr_init = 0 ;

        if (!corr_init)
        {
                Uint8 * ptr ;

                for (ptr = letters; *ptr; ptr++)
                        corr[*ptr] = corr_init++ ;
        }

#define PUTSYS(TYPE)                                                                      \
        for (y = oy ; y < oy+8 ; y++)                                               \
        {                                                                                       \
                TYPE * ptr; Uint8 * cptr ;                                          \
                if (y < 0 || y >= (int)map->height)                           \
                        continue ;                                                  \
                ptr = (TYPE *)((Uint8*)map->data + map->pitch*y) ;      \
                ptr += ox;                                                                \
                cptr = (Uint8*)sysfont[c][y-oy];                              \
                for (x = ox ; x < ox+6 ; x++, cptr++)                   \
                {                                                       \
                        if (x < 0 || x >= (int)map->width)              \
                        {                                               \
                                ptr++ ;                                 \
                                continue ;                              \
                        }                                               \
                        if (*cptr == 'O')                               \
                                *ptr++ = fg ;                           \
                        else if (bg)                                    \
                                *ptr++ = bg ;                           \
                        else ptr++ ;                                    \
                }                                                       \
        }

        if (map->depth == 8)
            {
                  c = corr[c] ;
                  PUTSYS(Uint8)
            }
        else
            {
                  c = corr[c] ;
                  PUTSYS(Uint16)
            }

#undef PUTSYS
}

static int text_colors[] =
{
        0x404040, 0xC00000, 0x00C000, 0x0000C0, 0x00C0C0, 0xC000C0, 0xC0C000, 0xC0C0C0,
        0x808080, 0xFF0000, 0x00FF00, 0x0000FF, 0x00FFFF, 0xFF00FF, 0xFFFF00, 0xFFFFFF
} ;

void gr_sys_puts (GRAPH * map, int x, int y, Uint8 * str, int len)
{
      if (bg == 0 && fg != 0)
      {
            int ofg = fg;
            fg = 0;
            gr_sys_puts (map, x-1, y, str, len);
            gr_sys_puts (map, x+1, y, str, len);
            gr_sys_puts (map, x-1, y-1, str, len);
            gr_sys_puts (map, x+1, y+1, str, len);
            gr_sys_puts (map, x, y-1, str, len);
            gr_sys_puts (map, x, y+1, str, len);
            fg = ofg;
      }

      while (*str && len--)
      {
            if (*str == (Uint8)'¬')
            {
                  Uint8 color = 0 ;
                  str++ ;
                  if (isdigit(*str)) color = *str++ - '0' ;
                  if (isdigit(*str)) color = color*10 + *str++ - '0' ;
                  if (color > 15) color = 15 ;
                  if (fg != 0) gr_sys_color (text_colors[color], -1) ;
                  if (!*str) { len++ ; break ; }
            }
            gr_sys_putchar (map, x, y, *str++) ;
            x += CHARWIDTH ;
      }
      while (len-- > 0)
      {
            gr_sys_putchar (map, x, y, ' ') ;
            x += CHARWIDTH ;
      }
}

void gr_sys_color (int cfg, int cbg)
{
      if (cbg == 0) bg = 0;
      if (enable_16bits)
      {
            if (cfg > 0)
                  fg = gr_rgb (((cfg & 0xFF0000) >> 16),
                                     ((cfg & 0x00FF00) >>  8),
                                      (cfg & 0x0000FF) ) ;
            if (cbg > 0)
                  bg = gr_rgb (((cbg & 0xFF0000) >> 16),
                                     ((cbg & 0x00FF00) >>  8),
                                      (cbg & 0x0000FF) ) ;
      }
      else
      {
            if (!trans_table_updated)
                  gr_make_trans_table() ;

            if (cfg > 0)
                  fg = gr_find_nearest_color (
                        ((cfg & 0xFF0000) >> 16),
                        ((cfg & 0x00FF00) >>  8),
                         (cfg & 0x0000FF) ) ;
            if (cbg > 0)
                  bg = gr_find_nearest_color (
                        ((cbg & 0xFF0000) >> 16),
                        ((cbg & 0x00FF00) >>  8),
                         (cbg & 0x0000FF) ) ;
      }
}


Generated by  Doxygen 1.6.0   Back to index