DEADSOFTWARE

software: fix crashes on buffer resize
[flatwaifu.git] / src / soft / vga.h
1 /*
2 Управление графикой VGA для DOS4GW
3 Модуль версии 1.0
4 Copyright (C) Алексей Волынсков, 1996
6 Copyright (C) Prikol Software 1996-1997
7 Copyright (C) Aleksey Volynskov 1996-1997
8 Copyright (C) <ARembo@gmail.com> 2011
10 This file is part of the Doom2D:Rembo project.
12 Doom2D:Rembo is free software; you can redistribute it and/or modify
13 it under the terms of the GNU General Public License version 2 as
14 published by the Free Software Foundation.
16 Doom2D:Rembo is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 GNU General Public License for more details.
21 You should have received a copy of the GNU General Public License
22 along with this program; if not, see <http://www.gnu.org/licenses/> or
23 write to the Free Software Foundation, Inc.,
24 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
25 */
27 #ifndef VGA_H_INCLUDED
28 #define VGA_H_INCLUDED
30 #include "glob.h"
32 #pragma pack(1)
33 typedef struct {
34 unsigned short w, h; // W-ширина,H-высота
35 short sx, sy; // сдвиг центра изображения
36 } vgaimg;
37 #pragma pack()
39 // карта цветов
40 typedef unsigned char colormap[256];
42 typedef void spr_f(int, int, unsigned char);
44 extern int SCRW;
45 extern int SCRH;
46 extern char fullscreen;
48 extern byte *buffer;
49 extern int buf_w, buf_h, pitch;
51 extern byte bright[256];
52 extern byte mixmap[256][256];
53 extern byte clrmap[256*12];
55 vgaimg *V_getvgaimg (int id);
56 vgaimg *V_loadvgaimg (char *name);
58 // ждать обратного хода луча развертки
59 void V_wait (void);
61 // вывести картинку i в координатах (x,y)
62 void V_pic (short x, short y, vgaimg *i);
64 // вывести спрайт i в координатах (x,y) при помощи функции f
65 // параметры: AL=цвет_точки_спрайта EDI=>экран
66 // !!! сохраняйте все регистры, кроме EAX
67 // !!! EDI должен быть переведен на точку вправо (INC EDI или STOSB)
68 void V_sprf (short x, short y, vgaimg *i, spr_f *f);
70 void smoke_sprf (int x, int y, unsigned char c);
71 void flame_sprf (int x, int y, unsigned char c);
73 // вывести спрайт i в координатах (x,y)
74 void V_spr (short x, short y, vgaimg *i);
76 // вывести зеркально перевернутый спрайт i в координатах (x,y)
77 void V_spr2 (short x, short y, vgaimg *i);
79 // вывести точку цвета c в координатах (x,y)
80 void V_dot (short x, short y, unsigned char c);
82 void V_manspr (int x, int y, void *p, unsigned char c);
83 void V_manspr2 (int x, int y, void *p, unsigned char c);
85 // очистить прямоугольник цветом c
86 // x-левая сторона,w-ширина,y-верх,h-высота
87 void V_clr (short x, short w, short y, short h, unsigned char c);
89 // установить область вывода
90 void V_setrect (short x, short w, short y, short h);
92 // установить адрес экранного буфера
93 // NULL - реальный экран
94 void V_setscr (void *);
96 // скопировать прямоугольник на экран
97 void V_copytoscr (short x, short w, short y, short h);
99 void V_maptoscr (int, int, int, int, void *);
101 // переделать изображение i по карте цветов m
102 void V_remap (vgaimg *i, colormap m);
104 void V_remap_rect (int x, int y, int w, int h, byte *cmap);
106 void V_update_buffer (void);
107 void V_rotspr (int x, int y, vgaimg* i, int d);
108 void V_center (int f);
109 void V_offset (int ox, int oy);
111 #endif /* VGA_H_INCLUDED */