92e37aa54bd3f1f97b43375ca6fae49aaf174f93
[btb/d2x.git] / 2d / gpixel.c
1 /* $Id: gpixel.c,v 1.5 2002-10-10 18:55:32 btb Exp $ */
2 /*
3 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
4 SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
5 END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
6 ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
7 IN USING, DISPLAYING,  AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
8 SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
9 FREE PURPOSES.  IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
10 CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES.  THE END-USER UNDERSTANDS
11 AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
12 COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION.  ALL RIGHTS RESERVED.
13 */
14
15 #ifdef HAVE_CONFIG_H
16 #include <conf.h>
17 #endif
18
19 #include "u_mem.h"
20
21 #include "gr.h"
22 #include "grdef.h"
23 #ifdef __DJGPP__
24 #include "modex.h"
25 #include "vesa.h"
26 #endif
27
28 unsigned char gr_ugpixel( grs_bitmap * bitmap, int x, int y )
29 {
30 #ifdef __DJGPP__
31         switch(bitmap->bm_type)
32         {
33         case BM_LINEAR:
34 #endif
35                 return bitmap->bm_data[ bitmap->bm_rowsize*y + x ];
36 #ifdef __DJGPP__
37         case BM_MODEX:
38                 x += bitmap->bm_x;
39                 y += bitmap->bm_y;
40                 gr_modex_setplane( x & 3 );
41                 return gr_video_memory[(bitmap->bm_rowsize * y) + (x/4)];
42         case BM_SVGA:
43                 {
44                 unsigned int offset;
45                 offset = (unsigned int)bitmap->bm_data + (unsigned int)bitmap->bm_rowsize * y + x;
46                 gr_vesa_setpage( offset >> 16 );
47                 return gr_video_memory[offset & 0xFFFF];
48                 }
49         }
50         return 0;
51 #endif
52 }
53
54 unsigned char gr_gpixel( grs_bitmap * bitmap, int x, int y )
55 {
56         if ((x<0) || (y<0) || (x>=bitmap->bm_w) || (y>=bitmap->bm_h)) return 0;
57 #ifdef __DJGPP__
58         switch(bitmap->bm_type)
59         {
60         case BM_LINEAR:
61 #endif
62                 return bitmap->bm_data[ bitmap->bm_rowsize*y + x ];
63 #ifdef __DJGPP__
64         case BM_MODEX:
65                 x += bitmap->bm_x;
66                 y += bitmap->bm_y;
67                 gr_modex_setplane( x & 3 );
68                 return gr_video_memory[(bitmap->bm_rowsize * y) + (x/4)];
69         case BM_SVGA:
70                 {
71                 unsigned int offset;
72                 offset = (unsigned int)bitmap->bm_data + (unsigned int)bitmap->bm_rowsize * y + x;
73                 gr_vesa_setpage( offset >> 16 );
74                 return gr_video_memory[offset & 0xFFFF];
75                 }
76         }
77         return 0;
78 #endif
79 }