#include "\clipper\nandef.h" #include "\clipper\extend.h" #define VIDMODE *(unsigned char far *) 0x00449lu #define MONOSEG 0xb0000000L #define COLOR 0xb8000000L #define VIDSEG (unsigned char far *)((7 == VIDMODE) ? MONOSEG : COLOR ) unsigned char far *ScrPtr( int x, int y ); void RevForeAttr(); CLIPPER shadow() { int t,l,b,r; t = _parni(1); l = _parni(2); b = _parni(3); r = _parni(4); t++; l++; b++; r++; if (r + 2 <= 79) { RevForeAttr((t + 1),(r + 1), b,(r + 2)); if (b + 1 <= 24) { RevForeAttr((b + 1),(l + 2),(b + 1),(r + 2)); } } else if (r + 1 <= 79) { RevForeAttr((t + 1),(r + 1), b,(b + 1)); if (b + 1 <= 24) { RevForeAttr((b + 1),(l + 1),(b + 1),(r + 1)); } } else if (b + 1 <= 24) { RevForeAttr((b + 1),(l + 1),(b + 1), r); } _ret(); } /******************************** * * Reverse text Attribute for * passed coordinates * */ void RevForeAttr( int y, int x, int yy, int xx ) { register unsigned char far *scptr; register int i,j; for (i = y; i <= yy; ++i) { scptr = ScrPtr( x, i ); scptr++; for (j = x; j <= xx; ++j) { *scptr = *scptr % 8; /* reverse the attribute */ scptr += 2; /* skip the character */ } } } /* Screen pointer */ unsigned char far *ScrPtr( int col, int row ) { return( VIDSEG + (--row * 160) + (--col << 1) ); }