rott/rott/fli_util.h

165 lines
4.4 KiB
C
Executable File

/*
Copyright (C) 1994-1995 Apogee Software, Ltd.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
/* pcclone.h - machine specific parts of readflic. Structures and
* prototypes for polling the keyboard, checking the time,
* writing to the video screen, allocating large blocks of memory
* and reading files.
*
* Copyright (c) 1992 Jim Kent. This file may be freely used, modified,
* copied and distributed. This file was first published as part of
* an article for Dr. Dobb's Journal March 1993 issue.
*/
#ifndef PCCLONE_H /* Prevent file from being included twice. */
#define PCCLONE_H
typedef Uchar Pixel; /* Pixel type. */
typedef struct
{
Uchar r,g,b;
} Color; /* One color map entry r,g,b 0-255. */
typedef struct
{
Pixel pixels[2];
} Pixels2; /* For word-oriented run length encoding */
typedef struct
{
Pixel *pixels; /* Set to AOOO:0000 for hardware. */
int width, height; /* Dimensions of screen. (320x200) */
int old_mode; /* Mode screen was in originally. */
Boolean is_open; /* Is screen open? */
} Screen; /* Device specific screen type. */
/* Prototypes for routines that work on display screen. */
ErrCode screen_open(Screen *s);
/* Put machine into graphics mode and fill out screen structure. */
void screen_close(Screen *s);
/* Close screen. Restore original display mode. */
int screen_width(Screen *s);
/* Return width of screen. */
int screen_height(Screen *s);
/* Return height of screen. */
void screen_put_dot(Screen *s, int x, int y, Pixel color);
/* Set one dot. */
void screen_copy_seg(Screen *s, int x, int y, Pixel *pixels, int count);
/* Copy pixels from memory into screen. */
void screen_repeat_one(Screen *s, int x, int y, Pixel color, int count);
/* Draw a horizontal line of a solid color */
void screen_repeat_two(Screen *s, int x,int y, Pixels2 pixels2, int count);
/* Repeat 2 pixels count times on screen. */
void screen_put_colors(Screen *s, int start, Color *colors, int count);
/* Set count colors in color map starting at start. RGB values
* go from 0 to 255. */
void screen_put_colors_64(Screen *s, int start, Color *colors, int count);
/* Set count colors in color map starting at start. RGB values
* go from 0 to 64. */
/* Clock structure and routines. */
typedef struct
{
Ulong speed; /* Number of clock ticks per second. */
} Clock;
ErrCode clock_open(Clock *clock);
/* Set up millisecond clock. */
void clock_close(Clock *clock);
/* Return clock to normal. */
Ulong clock_ticks(Clock *clock);
/* Get time in terms of clock->speed. */
/* Keyboard structure and routines. */
typedef struct
{
Uchar ascii;
Ushort scancode;
} Key;
ErrCode key_open(Key *key);
/* Set up keyboard. */
void key_close(Key *key);
/* Close keyboard. */
Boolean key_ready(Key *key);
/* See if a key is ready. */
Uchar key_read(Key *key);
/* Get next key. */
/** MemPtr - handles allocating big blocks of memory (>64K) on the
** PC. On other machines may be much simpler. */
typedef Uchar * MemPtr;
ErrCode big_alloc(MemPtr *bb, Ulong size);
/* Allocate a big block. */
void big_free(MemPtr *bb);
/* Free up a big block. */
/** Stuff for reading files - regular and over 64k blocks at a time. **/
ErrCode file_open_to_read(FileHandle *phandle, char *name);
/* Open a binary file to read. */
ErrCode file_read_block(FileHandle handle, void *block, unsigned size);
/* Read in a block. If read less than size return error code. */
ErrCode file_read_big_block(FileHandle handle, MemPtr bb, Ulong size);
/* Read in a big block. Could be bigger than 64K. */
/** Machine structure - contains all the machine dependent stuff. **/
typedef struct
{
Screen screen;
Clock clock;
Key key;
} Machine;
ErrCode machine_open(Machine *machine);
/* Open up machine: keyboard, clock, screen. */
void machine_close(Machine *machine);
/* Close down machine. */
#endif /* PCCLONE_H */