www.delorie.com/archives/browse.cgi   search  
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 -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019