This commit was manufactured by cvs2svn to create tag 'd2x-0_1_2'.
[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 #ifdef HAVE_CONFIG_H
15 #include <conf.h>
16 #endif
17
18 #include "u_mem.h"
19
20
21 #include "gr.h"
22 #include "grdef.h"
23
24 void gr_ubox0(int left,int top,int right,int bot)
25 {
26         int i, d;
27
28         unsigned char * ptr1;
29         unsigned char * ptr2;
30
31         ptr1 = DATA + ROWSIZE *top+left;
32
33         ptr2 = ptr1;
34         d = right - left;
35
36         for (i=top; i<=bot; i++ )
37         {
38                 ptr2[0] = (unsigned char) COLOR;
39                 ptr2[d] = (unsigned char) COLOR;
40                 ptr2 += ROWSIZE;
41         }
42
43         ptr2 = ptr1;
44         d = (bot - top)*ROWSIZE;
45
46         for (i=1; i<(right-left); i++ )
47         {
48                 ptr2[i+0] = (unsigned char) COLOR;
49                 ptr2[i+d] = (unsigned char) COLOR;
50         }
51 }
52
53 void gr_box0(int left,int top,int right,int bot)
54 {
55         if (top > MAXY ) return;
56     if (bot < MINY ) return;
57     if (left > MAXX ) return;
58     if (right < MINX ) return;
59     
60         if (top < MINY) top = MINY;
61     if (bot > MAXY ) bot = MAXY;
62         if (left < MINX) left = MINX;
63     if (right > MAXX ) right = MAXX;
64
65         gr_ubox0(left,top,right,bot);
66
67 }
68
69
70 void gr_ubox12(int left,int top,int right,int bot)
71 {
72         int i;
73
74         for (i=top; i<=bot; i++ )
75         {
76                 gr_upixel( left, i );
77                 gr_upixel( right, i );
78         }
79
80         gr_uscanline( left, right, top );
81
82         gr_uscanline( left, right, bot );
83 }
84
85 void gr_box12(int left,int top,int right,int bot)
86 {
87     if (top > MAXY ) return;
88     if (bot < MINY ) return;
89     if (left > MAXX ) return;
90     if (right < MINX ) return;
91     
92         if (top < MINY) top = MINY;
93     if (bot > MAXY ) bot = MAXY;
94         if (left < MINX) left = MINX;
95     if (right > MAXX ) right = MAXX;
96         
97         gr_ubox12(left, top, right, bot );
98     
99 }
100
101 void gr_ubox(int left,int top,int right,int bot)
102 {
103         if (TYPE==BM_LINEAR)
104                 gr_ubox0( left, top, right, bot );
105
106 #ifdef __DJGPP__
107         else if ( TYPE == BM_MODEX )
108                 gr_ubox12( left, top, right, bot );
109 #endif
110
111     else
112                 gr_ubox12( left, top, right, bot );
113 }
114
115 void gr_box(int left,int top,int right,int bot)
116 {
117         if (TYPE==BM_LINEAR)
118                 gr_box0( left, top, right, bot );
119
120 #ifdef __DJGPP__
121         else if ( TYPE == BM_MODEX )
122                 gr_box12( left, top, right, bot );
123 #endif
124     
125         else
126                 gr_ubox12( left, top, right, bot );
127 }