Mail Archives: djgpp/1998/12/27/05:00:25
From: | Samu Naukkarinen <ssnaukka AT kolumbus DOT fi>
|
Newsgroups: | comp.os.msdos.djgpp
|
Subject: | game programming
|
Date: | Sun, 27 Dec 1998 11:54:17 +0200
|
Lines: | 271
|
Message-ID: | <368603C8.C7BDF4CA@kolumbus.fi>
|
NNTP-Posting-Host: | n124i1hel.dial.kolumbus.fi
|
Mime-Version: | 1.0
|
X-Mailer: | Mozilla 4.05 [en] (Win95; I)
|
To: | djgpp AT delorie DOT com
|
DJ-Gateway: | from newsgroup comp.os.msdos.djgpp
|
Reply-To: | djgpp AT delorie DOT com
|
I have bought a book called "Tricks Of The Game Programming Gurus".
This book includes lots of examples. What's the problem, because
no one of the examples don't compile. The author says that all examples
will compile with DJGPP. I have tested couple of versions, but
both give same errors. What should I do?
Is the problem in source code or in the compiler?
Here is one example:
// I N C L U D E S
///////////////////////////////////////////////////////////
#include <io.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <dos.h>
#include <bios.h>
#include <fcntl.h>
#include <memory.h>
#include <math.h>
#include <string.h>
// D E F I N E S
////////////////////////////////////////////////////////////
#define ROM_CHAR_SET_SEG 0xF000 // segment of 8x8 ROM character set
#define ROM_CHAR_SET_OFF 0xFA6E // begining offset of 8x8 ROM character
set
#define VGA256 0x13
#define TEXT_MODE 0x03
#define PALETTE_MASK 0x3c6
#define PALETTE_REGISTER_RD 0x3c7
#define PALETTE_REGISTER_WR 0x3c8
#define PALETTE_DATA 0x3c9
#define SCREEN_WIDTH (unsigned int)320
#define SCREEN_HEIGHT (unsigned int)200
// S T R U C T U R E S
///////////////////////////////////////////////////////
// this structure holds a RGB triple in three bytes
typedef struct RGB_color_typ
{
unsigned char red; // red component of color 0-63
unsigned char green; // green component of color 0-63
unsigned char blue; // blue component of color 0-63
} RGB_color, *RGB_color_ptr;
// E X T E R N A L S
/////////////////////////////////////////////////////////
extern Set_Mode(int mode);
// P R O T O T Y P E S
///////////////////////////////////////////////////////
void Set_Palette_Register(int index, RGB_color_ptr color);
void Get_Palette_Register(int index, RGB_color_ptr color);
void Create_Cool_Palette();
void V_Line(int y1,int y2,int x,unsigned int color);
// G L O B A L S
////////////////////////////////////////////////////////////
unsigned char far *video_buffer = (char far *)0xA0000000L; // vram byte
ptr
unsigned int far *video_buffer_w= (int far *)0xA0000000L; // vram word
ptr
// F U N C T I O N S
/////////////////////////////////////////////////////////
void Set_Palette_Register(int index, RGB_color_ptr color)
{
// this function sets a single color look up table value indexed by
index
// with the value in the color structure
// tell VGA card we are going to update a pallete register
_outp(PALETTE_MASK,0xff);
// tell vga card which register we will be updating
_outp(PALETTE_REGISTER_WR, index);
// now update the RGB triple, note the same port is used each time
_outp(PALETTE_DATA,color->red);
_outp(PALETTE_DATA,color->green);
_outp(PALETTE_DATA,color->blue);
} // end Set_Palette_Color
///////////////////////////////////////////////////////////////////////////////
void Get_Palette_Register(int index, RGB_color_ptr color)
{
// this function gets the data out of a color lookup regsiter and places
it
// into color
// set the palette mask register
_outp(PALETTE_MASK,0xff);
// tell vga card which register we will be reading
_outp(PALETTE_REGISTER_RD, index);
// now extract the data
color->red = _inp(PALETTE_DATA);
color->green = _inp(PALETTE_DATA);
color->blue = _inp(PALETTE_DATA);
} // end Get_Palette_Color
//////////////////////////////////////////////////////////////////////////////
void Create_Cool_Palette(void)
{
// this function creates a cool palette. 64 shades of gray, 64 of red,
// 64 of green and finally 64 of blue.
RGB_color color;
int index;
// swip thru the color registers and create 4 banks of 64 colors
for (index=0; index < 64; index++)
{
// grays
color.red = index;
color.green = index;
color.blue = index;
Set_Palette_Register(index, (RGB_color_ptr)&color);
// reds
color.red = index;
color.green = 0;
color.blue = 0;
Set_Palette_Register(index+64, (RGB_color_ptr)&color);
// greens
color.red = 0;
color.green = index;
color.blue = 0;
Set_Palette_Register(index+128, (RGB_color_ptr)&color);
// blues
color.red = 0;
color.green = 0;
color.blue = index;
Set_Palette_Register(index+192, (RGB_color_ptr)&color);
} // end index
} // end Create_Cool_Palette
//////////////////////////////////////////////////////////////////////////////
void V_Line(int y1,int y2,int x,unsigned int color)
{
// draw a vertical line, note y2 > y1
unsigned int line_offset,
index;
// compute starting position
line_offset = ((y1<<8) + (y1<<6)) + x;
for (index=0; index<=y2-y1; index++)
{
video_buffer[line_offset] = color;
line_offset+=320; // move to next line
} // end for index
} // end V_Line
//M A I N
/////////////////////////////////////////////////////////////////////
void main(void)
{
int index;
RGB_color color,color_1;
// set video mode to 320x200 256 color mode
Set_Mode(VGA256);
// create the color palette
Create_Cool_Palette();
// draw a bunch of vertical lines, one for each color
for (index=0; index<320; index++)
V_Line(0,199,index,index);
// wait for user to hit a key
while(!kbhit())
{
Get_Palette_Register(0,(RGB_color_ptr)&color_1);
Get_Palette_Register(0,(RGB_color_ptr)&color_1);
for (index=0; index<=254; index++)
{
Get_Palette_Register(index+1,(RGB_color_ptr)&color);
Get_Palette_Register(index+1,(RGB_color_ptr)&color);
Set_Palette_Register(index,(RGB_color_ptr)&color);
} // end for
Set_Palette_Register(255,(RGB_color_ptr)&color_1);
} // end while
// go back to text mode
Set_Mode(TEXT_MODE);
} // end main
Here is error list:
line 65: parse error before '*'
line 65: parse error before 'far'
line 66: parse error before '*'
line 66: parse error before 'far'
in function 'main':
line 196: warning: return type of 'main' is not 'int'
Thanks,
Samu
- Raw text -