Main Page | Class List | File List | Class Members | File Members

image.h

Go to the documentation of this file.
00001 /* Copyright (c) 1993-2002
00002  *      Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de)
00003  *      Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de)
00004  * Copyright (c) 1987 Oliver Laumann
00005  *
00006  * This program is free software; you can redistribute it and/or modify
00007  * it under the terms of the GNU General Public License as published by
00008  * the Free Software Foundation; either version 2, or (at your option)
00009  * any later version.
00010  *
00011  * This program is distributed in the hope that it will be useful,
00012  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00013  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014  * GNU General Public License for more details.
00015  *
00016  * You should have received a copy of the GNU General Public License
00017  * along with this program (see the file COPYING); if not, write to the
00018  * Free Software Foundation, Inc.,
00019  * 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA
00020  *
00021  ****************************************************************
00022  * $Id: image.h,v 1.9 1994/05/31 12:31:54 mlschroe Exp $ FAU
00023  */
00024 
00025 
00026 #undef IFFONT
00027 #undef IFCOLOR
00028 
00029 #ifdef FONT
00030 # define IFFONT(x) x
00031 #else
00032 # define IFFONT(x)
00033 #endif
00034 
00035 #ifdef COLOR
00036 # define IFCOLOR(x) x
00037 #else
00038 # define IFCOLOR(x)
00039 #endif
00040 
00041 #if defined(COLOR) && defined(COLORS16) && defined(COLORS256)
00042 # define IFCOLORX(x) x
00043 #else
00044 # define IFCOLORX(x)
00045 #endif
00046 
00047 #ifdef DW_CHARS
00048 # define IFDWCHAR(x) x
00049 #else
00050 # define IFDWCHAR(x)
00051 #endif
00052 
00053 struct mchar {
00054          unsigned char image;
00055          unsigned char attr;
00056 IFFONT(  unsigned char font; )
00057 IFCOLOR( unsigned char color; )
00058 IFCOLORX(unsigned char colorx; )
00059 IFDWCHAR(unsigned char mbcs; )
00060 };
00061 
00062 struct mline {
00063          unsigned char *image;
00064          unsigned char *attr;
00065 IFFONT(  unsigned char *font; )
00066 IFCOLOR( unsigned char *color; )
00067 IFCOLORX(unsigned char *colorx; )
00068 };
00069 
00070 
00071 
00072 #define save_mline(ml, n) do {                                          \
00073          bcopy((char *)(ml)->image, (char *)mline_old.image, (n));      \
00074          bcopy((char *)(ml)->attr,  (char *)mline_old.attr,  (n));      \
00075 IFFONT(  bcopy((char *)(ml)->font,  (char *)mline_old.font,  (n));    ) \
00076 IFCOLOR( bcopy((char *)(ml)->color, (char *)mline_old.color, (n));    ) \
00077 IFCOLORX(bcopy((char *)(ml)->colorx, (char *)mline_old.colorx, (n));  ) \
00078 } while (0)
00079 
00080 #define bcopy_mline(ml, xf, xt, n) do {                                        \
00081          bcopy((char *)(ml)->image + (xf), (char *)(ml)->image + (xt), (n));   \
00082          bcopy((char *)(ml)->attr  + (xf), (char *)(ml)->attr  + (xt), (n));   \
00083 IFFONT(  bcopy((char *)(ml)->font  + (xf), (char *)(ml)->font  + (xt), (n)); ) \
00084 IFCOLOR( bcopy((char *)(ml)->color + (xf), (char *)(ml)->color + (xt), (n)); ) \
00085 IFCOLORX(bcopy((char *)(ml)->colorx + (xf), (char *)(ml)->colorx + (xt), (n));) \
00086 } while (0)
00087 
00088 #define clear_mline(ml, x, n) do {                                             \
00089          bclear((char *)(ml)->image + (x), (n));                               \
00090          if ((ml)->attr != null) bzero((char *)(ml)->attr  + (x), (n));        \
00091 IFFONT(  if ((ml)->font != null) bzero((char *)(ml)->font  + (x), (n));      ) \
00092 IFCOLOR( if ((ml)->color!= null) bzero((char *)(ml)->color + (x), (n));      ) \
00093 IFCOLORX(if ((ml)->colorx!= null) bzero((char *)(ml)->colorx + (x), (n));    ) \
00094 } while (0)
00095 
00096 #define cmp_mline(ml1, ml2, x) (                                \
00097             (ml1)->image[x] == (ml2)->image[x]                  \
00098          && (ml1)->attr[x]  == (ml2)->attr[x]                   \
00099 IFFONT(  && (ml1)->font[x]  == (ml2)->font[x]                 ) \
00100 IFCOLOR( && (ml1)->color[x] == (ml2)->color[x]                ) \
00101 IFCOLORX(&& (ml1)->colorx[x] == (ml2)->colorx[x]              ) \
00102 )
00103 
00104 #define cmp_mchar(mc1, mc2) (                                   \
00105             (mc1)->image == (mc2)->image                        \
00106          && (mc1)->attr  == (mc2)->attr                         \
00107 IFFONT(  && (mc1)->font  == (mc2)->font                       ) \
00108 IFCOLOR( && (mc1)->color == (mc2)->color                      ) \
00109 IFCOLORX(&& (mc1)->colorx == (mc2)->colorx                    ) \
00110 )
00111 
00112 #define cmp_mchar_mline(mc, ml, x) (                            \
00113             (mc)->image == (ml)->image[x]                       \
00114          && (mc)->attr  == (ml)->attr[x]                        \
00115 IFFONT(  && (mc)->font  == (ml)->font[x]                      ) \
00116 IFCOLOR( && (mc)->color == (ml)->color[x]                     ) \
00117 IFCOLORX(&& (mc)->colorx == (ml)->colorx[x]                   ) \
00118 )
00119 
00120 #define copy_mchar2mline(mc, ml, x) do {                        \
00121          (ml)->image[x] = (mc)->image;                          \
00122          (ml)->attr[x]  = (mc)->attr;                           \
00123 IFFONT(  (ml)->font[x]  = (mc)->font;                         ) \
00124 IFCOLOR( (ml)->color[x] = (mc)->color;                        ) \
00125 IFCOLORX((ml)->colorx[x] = (mc)->colorx;                      ) \
00126 } while (0)
00127 
00128 #define copy_mline2mchar(mc, ml, x) do {                        \
00129          (mc)->image = (ml)->image[x];                          \
00130          (mc)->attr  = (ml)->attr[x];                           \
00131 IFFONT(  (mc)->font  = (ml)->font[x];                         ) \
00132 IFCOLOR( (mc)->color = (ml)->color[x];                        ) \
00133 IFCOLORX((mc)->colorx = (ml)->colorx[x];                      ) \
00134 IFDWCHAR((mc)->mbcs  = 0;                                     ) \
00135 } while (0)
00136 
00137 #ifdef COLOR
00138 # ifdef COLORS16
00139 #  ifdef COLORS256
00140 #   define rend_getbg(mc) (((mc)->color & 0xf0) >> 4 | ((mc)->attr & A_BBG ? 0x100 : 0) | ((mc)->colorx & 0xf0))
00141 #   define rend_setbg(mc, c) ((mc)->color = ((mc)->color & 0x0f) | (c << 4 & 0xf0), (mc)->colorx = ((mc)->colorx & 0x0f) | (c & 0xf0), (mc)->attr = ((mc)->attr | A_BBG) ^ (c & 0x100 ? 0 : A_BBG))
00142 #   define rend_getfg(mc) (((mc)->color & 0x0f) | ((mc)->attr & A_BFG ? 0x100 : 0) | (((mc)->colorx & 0x0f) << 4))
00143 #   define rend_setfg(mc, c) ((mc)->color = ((mc)->color & 0xf0) | (c & 0x0f), (mc)->colorx = ((mc)->colorx & 0xf0) | ((c & 0xf0) >> 4), (mc)->attr = ((mc)->attr | A_BFG) ^ (c & 0x100 ? 0 : A_BFG))
00144 #   define rend_setdefault(mc) ((mc)->color = (mc)->colorx = 0, (mc)->attr &= ~(A_BBG|A_BFG))
00145 #  else
00146 #   define rend_getbg(mc) (((mc)->color & 0xf0) >> 4 | ((mc)->attr & A_BBG ? 0x100 : 0))
00147 #   define rend_setbg(mc, c) ((mc)->color = ((mc)->color & 0x0f) | (c << 4 & 0xf0), (mc)->attr = ((mc)->attr | A_BBG) ^ (c & 0x100 ? 0 : A_BBG))
00148 #   define rend_getfg(mc) (((mc)->color & 0x0f) | ((mc)->attr & A_BFG ? 0x100 : 0))
00149 #   define rend_setfg(mc, c) ((mc)->color = ((mc)->color & 0xf0) | (c & 0x0f), (mc)->attr = ((mc)->attr | A_BFG) ^ (c & 0x100 ? 0 : A_BFG))
00150 #   define rend_setdefault(mc) ((mc)->color = 0, (mc)->attr &= ~(A_BBG|A_BFG))
00151 #  endif
00152 #  define coli2e(c) ((((c) & 0x1f8) == 0x108 ? (c) ^ 0x108 : (c & 0xff)) ^ 9)
00153 #  define cole2i(c) ((c) >= 8 && (c) < 16 ? (c) ^ 0x109 : (c) ^ 9)
00154 # else
00155 #  define rend_getbg(mc) (((mc)->color & 0xf0) >> 4)
00156 #  define rend_setbg(mc, c) ((mc)->color = ((mc)->color & 0x0f) | (c << 4 & 0xf0))
00157 #  define rend_getfg(mc) ((mc)->color & 0x0f)
00158 #  define rend_setfg(mc, c) ((mc)->color = ((mc)->color & 0xf0) | (c & 0x0f))
00159 #  define rend_setdefault(mc) ((mc)->color = 0)
00160 #  define coli2e(c) ((c) ^ 9)
00161 #  define cole2i(c) ((c) ^ 9)
00162 # endif
00163 #endif

Generated on Sat Jul 2 20:56:16 2005 for GNU Screen by  doxygen 1.4.3