Really make it work on both architectures.
[bertos.git] / mware / text.c
index c73ef075b065d1a52dcca78a7ab46bcfe9e9edcc..5def533fa011ee6ad51089fb9ee5ecf607043354 100755 (executable)
@@ -1,53 +1,76 @@
 /*!
  * \file
  * <!--
- * Copyright (C) 1999 Bernardo Innocenti <bernie@develer.com>
- * Copyright (C) 2003,2004 Develer S.r.l. (http://www.develer.com/)
- * All Rights Reserved.
+ * Copyright 2003, 2004 Develer S.r.l. (http://www.develer.com/)
+ * Copyright 1999 Bernardo Innocenti <bernie@develer.com>
+ * This file is part of DevLib - See devlib/README for information.
  * -->
  *
- * \version $Id$
+ * \brief Text graphic routines
  *
+ * \version $Id$
  * \author Bernardo Innocenti <bernie@develer.com>
  * \author Stefano Fedrigo <aleph@develer.com>
- *
- * \brief Text graphic routines
  */
 
-/*
- * $Log$
- * Revision 1.1  2004/05/23 15:43:16  bernie
- * Import mware modules.
- *
- * Revision 1.17  2004/05/15 16:57:01  aleph
- * Fixes for non-DEBUG build
- *
- * Revision 1.16  2004/04/03 20:42:49  aleph
- * Add text_clear()
- *
- * Revision 1.15  2004/03/24 15:03:45  bernie
- * Use explicit include paths; clean Doxygen comments
- *
- * Revision 1.14  2004/03/19 16:52:28  bernie
- * Move printf() like functions from text.c to text_format.c and add PROGMEM versions.
- *
- * Revision 1.13  2004/03/17 18:23:32  bernie
- * Oops.
- *
- * Revision 1.12  2004/03/17 18:03:22  bernie
- * Make diagnostic message shorter
- *
- * Revision 1.11  2004/03/13 22:52:54  aleph
- * documentation fixes
- */
+/*#*
+ *#* $Log$
+ *#* Revision 1.10  2005/01/08 09:20:12  bernie
+ *#* Really make it work on both architectures.
+ *#*
+ *#* Revision 1.9  2004/12/31 16:44:29  bernie
+ *#* Sanitize for non-Harvard processors.
+ *#*
+ *#* Revision 1.8  2004/11/16 21:16:28  bernie
+ *#* Update to new naming scheme in mware/gfx.c.
+ *#*
+ *#* Revision 1.7  2004/09/20 03:28:28  bernie
+ *#* Fix header.
+ *#*
+ *#* Revision 1.6  2004/09/14 20:57:15  bernie
+ *#* Use debug.h instead of kdebug.h.
+ *#*
+ *#* Revision 1.5  2004/09/06 21:51:26  bernie
+ *#* Extend interface to allow any algorithmic style.
+ *#*
+ *#* Revision 1.2  2004/06/03 11:27:09  bernie
+ *#* Add dual-license information.
+ *#*
+ *#* Revision 1.1  2004/05/23 15:43:16  bernie
+ *#* Import mware modules.
+ *#*
+ *#* Revision 1.17  2004/05/15 16:57:01  aleph
+ *#* Fixes for non-DEBUG build
+ *#*
+ *#* Revision 1.16  2004/04/03 20:42:49  aleph
+ *#* Add text_clear()
+ *#*
+ *#* Revision 1.15  2004/03/24 15:03:45  bernie
+ *#* Use explicit include paths; clean Doxygen comments
+ *#*
+ *#* Revision 1.14  2004/03/19 16:52:28  bernie
+ *#* Move printf() like functions from text.c to text_format.c and add PROGMEM versions.
+ *#*
+ *#* Revision 1.13  2004/03/17 18:23:32  bernie
+ *#* Oops.
+ *#*
+ *#* Revision 1.12  2004/03/17 18:03:22  bernie
+ *#* Make diagnostic message shorter
+ *#*
+ *#* Revision 1.11  2004/03/13 22:52:54  aleph
+ *#* documentation fixes
+ *#*/
 
 #include "gfx.h"
 #include "font.h"
 #include "text.h"
-#include <drv/kdebug.h>
+
+#include <debug.h>
+
 
 /*!
  * Flags degli stili algoritmici
+ *
  * La routine di rendering del testo e' in grado di applicare
  * delle semplici trasformazioni al font interno per generare
  * automaticamente degli stili predefiniti (bold, italic,
@@ -86,7 +109,7 @@ void text_setcoord(struct Bitmap *bm, int x, int y)
 
 
 /*!
- * Render char <code>c</code>
+ * Render char \a c on Bitmap \a bm
  */
 static int text_putglyph(char c, struct Bitmap *bm)
 {
@@ -133,7 +156,11 @@ static int text_putglyph(char c, struct Bitmap *bm)
                /* Per ogni colonna di dot del glyph... */
                for (i = 0; i < glyph_width; ++i)
                {
-                       dots = pgm_read_byte(glyph);
+                       #if CPU_HARVARD
+                               dots = PGM_READ_CHAR(glyph);
+                       #else
+                               dots = *glyph;
+                       #endif
 
                        /* Advance to next column in glyph.
                         * Expand: advances only once every two columns
@@ -171,7 +198,13 @@ static int text_putglyph(char c, struct Bitmap *bm)
        }
        else /* No style: fast vanilla copy of glyph to line buffer */
                while (glyph_width--)
-                       *buf++ = pgm_read_byte(glyph++);
+               {
+                       #if CPU_HARVARD
+                               *buf++ = PGM_READ_CHAR(glyph++);
+                       #else
+                               *buf++ = *glyph++;
+                       #endif
+               }
 
        return c;
 }
@@ -188,14 +221,14 @@ int text_putchar(char c, struct Bitmap *bm)
        {
                switch (c)
                {
-                       case ANSI_ESC_CLEARSCREEN:
-                               gfx_ClearBitmap(bm);
-                               bm->penX = 0;
-                               bm->penY = 0;
-                               text_style(0, STYLEF_MASK);
-                               break;
-                       DB(default:
-                               kprintf("Unknown ANSI esc code: %x\n", c);)
+               case ANSI_ESC_CLEARSCREEN:
+                       gfx_bitmapClear(bm);
+                       bm->penX = 0;
+                       bm->penY = 0;
+                       text_style(0, STYLEF_MASK);
+                       break;
+               DB(default:
+                       kprintf("Unknown ANSI esc code: %x\n", c);)
                }
                ansi_mode = false;
        }
@@ -229,6 +262,12 @@ void text_clear(struct Bitmap *bmp)
 }
 
 
+void text_clearLine(struct Bitmap *bmp, int line)
+{
+       gfx_rectClear(bmp, 0, line * FONT_HEIGHT, bmp->width, (line + 1) * FONT_HEIGHT);
+}
+
+
 /*!
  * Set/clear algorithmic font style bits.
  *