This commit was generated by cvs2svn to compensate for changes in r5,
[btb/d2x.git] / 2d / box.c
1 /*
2 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
3 SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
4 END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
5 ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
6 IN USING, DISPLAYING,  AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
7 SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
8 FREE PURPOSES.  IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
9 CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES.  THE END-USER UNDERSTANDS
10 AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.  
11 COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION.  ALL RIGHTS RESERVED.
12 */
13
14 #include <conf.h>
15 #include "u_mem.h"
16
17
18 #include "gr.h"
19 #include "grdef.h"
20
21 void gr_ubox0(int left,int top,int right,int bot)
22 {
23         int i, d;
24
25         unsigned char * ptr1;
26         unsigned char * ptr2;
27
28         ptr1 = DATA + ROWSIZE *top+left;
29
30         ptr2 = ptr1;
31         d = right - left;
32
33         for (i=top; i<=bot; i++ )
34         {
35                 ptr2[0] = (unsigned char) COLOR;
36                 ptr2[d] = (unsigned char) COLOR;
37                 ptr2 += ROWSIZE;
38         }
39
40         ptr2 = ptr1;
41         d = (bot - top)*ROWSIZE;
42
43         for (i=1; i<(right-left); i++ )
44         {
45                 ptr2[i+0] = (unsigned char) COLOR;
46                 ptr2[i+d] = (unsigned char) COLOR;
47         }
48 }
49
50 void gr_box0(int left,int top,int right,int bot)
51 {
52         if (top > MAXY ) return;
53     if (bot < MINY ) return;
54     if (left > MAXX ) return;
55     if (right < MINX ) return;
56     
57         if (top < MINY) top = MINY;
58     if (bot > MAXY ) bot = MAXY;
59         if (left < MINX) left = MINX;
60     if (right > MAXX ) right = MAXX;
61
62         gr_ubox0(left,top,right,bot);
63
64 }
65
66
67 void gr_ubox12(int left,int top,int right,int bot)
68 {
69         int i;
70
71         for (i=top; i<=bot; i++ )
72         {
73                 gr_upixel( left, i );
74                 gr_upixel( right, i );
75         }
76
77         gr_uscanline( left, right, top );
78
79         gr_uscanline( left, right, bot );
80 }
81
82 void gr_box12(int left,int top,int right,int bot)
83 {
84     if (top > MAXY ) return;
85     if (bot < MINY ) return;
86     if (left > MAXX ) return;
87     if (right < MINX ) return;
88     
89         if (top < MINY) top = MINY;
90     if (bot > MAXY ) bot = MAXY;
91         if (left < MINX) left = MINX;
92     if (right > MAXX ) right = MAXX;
93         
94         gr_ubox12(left, top, right, bot );
95     
96 }
97
98 void gr_ubox(int left,int top,int right,int bot)
99 {
100         if (TYPE==BM_LINEAR)
101                 gr_ubox0( left, top, right, bot );
102
103 #ifdef __ENV_DJGPP__
104         else if ( TYPE == BM_MODEX )
105                 gr_ubox12( left, top, right, bot );
106 #endif
107
108     else
109                 gr_ubox12( left, top, right, bot );
110 }
111
112 void gr_box(int left,int top,int right,int bot)
113 {
114         if (TYPE==BM_LINEAR)
115                 gr_box0( left, top, right, bot );
116
117 #ifdef __ENV_DJGPP__
118         else if ( TYPE == BM_MODEX )
119                 gr_box12( left, top, right, bot );
120 #endif
121     
122         else
123                 gr_ubox12( left, top, right, bot );
124 }
125