#include <SDL.h>
#define backbuffer BackBuffer

extern SDL_Surface *Screen,*BackBuffer,*fadebuffer;
extern SDL_Rect blitrect;
extern char DATAPATH[200];

// inits a lot of SDL stuff
void init_SDL();

// fades screen to BackBuffer
void FadeScreen(float speed);

// prints error and quits
void ComplainAndExit(void);

// Updates all blitted rects;
void Update();

// Draw a line
void Line(Sint32 X1, Sint32 Y1, Sint32 X2, Sint32 Y2, Uint32 Color);

// Puts a pixel (lock and unlock needed!)
extern int PutPixel(SDL_Surface *Surface, Sint32 X, Sint32 Y, Uint32 Color);

// Add rect to update queue
void AddRect(int x1, int y1, int x2, int y2);
void AddThisRect(SDL_Rect blitrect);

// random number between a and b (inclusive)
int abrand(int a,int b);

// Draws a circle
int Circle (SDL_Surface *Surface, Sint32 X, Sint32 Y, Sint32 Rad, float Aspect, Uint32 Color);

// Draws the background (as a circle)
int UndoCircle (SDL_Surface *Surface, Sint32 X, Sint32 Y, Sint32 Rad, float Aspect);

// returns the flipped surface
SDL_Surface *FlippedSurface(SDL_Surface *Surface);

// returns the color value of a pixel
Uint32 GetPixel (SDL_Surface *Surface, Sint32 X, Sint32 Y);

void lock();
void unlock();
void fadeout();
SDL_Surface *LoadImage(char *datafile, int transparent);
void Blit(int Xpos,int Ypos,SDL_Surface *image);
void BlitToBB(int Xpos,int Ypos,SDL_Surface *image);   //blits to BackBuffer
void BlitPart(int Xpos,int Ypos,SDL_Surface *image, SDL_Rect srcrect);
int PutBackPixel(SDL_Surface *Surface, Sint32 x, Sint32 y);