/* ScummVM - Graphic Adventure Engine
 *
 * ScummVM is the legal property of its developers, whose names
 * are too numerous to list here. Please refer to the COPYRIGHT
 * file distributed with this source distribution.
 *
 * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 *
 * $URL$
 * $Id$
 *
 */

#ifndef DRASCULA_H
#define DRASCULA_H

#include "common/scummsys.h"
#include "common/endian.h"
#include "common/util.h"
#include "common/file.h"
#include "common/savefile.h"
#include "common/system.h"
#include "common/hash-str.h"
#include "common/events.h"
#include "common/keyboard.h"

#include "sound/audiostream.h"
#include "sound/mixer.h"
#include "sound/voc.h"
#include "sound/audiocd.h"

#include "engines/engine.h"

namespace Drascula {

enum DrasculaGameFeatures {
};

struct DrasculaGameDescription;

#define NUM_SAVES     10
#define NUM_BANDERAS  50
#define ESC          0x01
#define F1           0x3B
#define F2           0x3C
#define F3           0x3D
#define F4           0x3E
#define F5           0x3F
#define F6           0x40
#define F8           0x42
#define F9           0x43
#define F10          0x44
#define MIRAR           1
#define COGER           2
#define ABRIR           3
#define CERRAR          4
#define HABLAR          5
#define MOVER           6
#define INICISOUND      6
#define FINALSOUND      8
#define FINDRV          9
#define DIF_MASK       55
#define ANCHOBJ        40
#define ALTOBJ         25

#define X_OBJ1         5
#define Y_OBJ1         10
#define X_OBJ2         50
#define Y_OBJ2         10
#define X_OBJ3         95
#define Y_OBJ3         10
#define X_OBJ4         140
#define Y_OBJ4         10
#define X_OBJ5         185
#define Y_OBJ5         10
#define X_OBJ6         230
#define Y_OBJ6         10
#define X_OBJ7         275
#define Y_OBJ7         10
#define X_OBJ8         5
#define Y_OBJ8         40
#define X_OBJ9         50
#define Y_OBJ9         40
#define X_OBJ10        95
#define Y_OBJ10        40
#define X_OBJ11        140
#define Y_OBJ11        40
#define X_OBJ12        185
#define Y_OBJ12        40
#define X_OBJ13        230
#define Y_OBJ13        40
#define X_OBJ14        275
#define Y_OBJ14        40
#define X_OBJ15        5
#define Y_OBJ15        70
#define X_OBJ16        50
#define Y_OBJ16        70
#define X_OBJ17        95
#define Y_OBJ17        70
#define X_OBJ18        140
#define Y_OBJ18        70
#define X_OBJ19        185
#define Y_OBJ19        70
#define X_OBJ20        230
#define Y_OBJ20        70
#define X_OBJ21        275
#define Y_OBJ21        70
#define X_OBJ22        5
#define Y_OBJ22        100
#define X_OBJ23        50
#define Y_OBJ23        100
#define X_OBJ24        95
#define Y_OBJ24        100
#define X_OBJ25        140
#define Y_OBJ25        100
#define X_OBJ26        185
#define Y_OBJ26        100
#define X_OBJ27        230
#define Y_OBJ27        100
#define X_OBJ28        275
#define Y_OBJ28        100
#define X_OBJ29        5
#define Y_OBJ29        130
#define X_OBJ30        50
#define Y_OBJ30        130
#define X_OBJ31        95
#define Y_OBJ31        130
#define X_OBJ32        140
#define Y_OBJ32        130
#define X_OBJ33        185
#define Y_OBJ33        130
#define X_OBJ34        230
#define Y_OBJ34        130
#define X_OBJ35        275
#define Y_OBJ35        130
#define X_OBJ36        5
#define Y_OBJ36        160
#define X_OBJ37        50
#define Y_OBJ37        160
#define X_OBJ38        95
#define Y_OBJ38        160
#define X_OBJ39        140
#define Y_OBJ39        160
#define X_OBJ40        185
#define Y_OBJ40        160
#define X_OBJ41        230
#define Y_OBJ41        160
#define X_OBJ42        275
#define Y_OBJ42        160
#define X_OBJ43        275
#define Y_OBJ43        160

#define DIF_MASK_HARE   72
#define DIF_MASK_ABC    22
#define ANCHO_LETRAS     8
#define ALTO_LETRAS      6

#define Y_ABC            158
#define Y_SIGNOS         169
#define Y_ACENTOS        180

#define X_A              6
#define X_B              15
#define X_C              24
#define X_D              33
#define X_E              42
#define X_F              51
#define X_G              60
#define X_H              69
#define X_I              78
#define X_J              87
#define X_K              96
#define X_L             105
#define X_M             114
#define X_N             123
#define X_GN            132
#define X_O             141
#define X_P             150
#define X_Q             159
#define X_R             168
#define X_S             177
#define X_T             186
#define X_U             195
#define X_V             204
#define X_W             213
#define X_X             222
#define X_Y             231
#define X_Z             240
#define X_PUNTO          6
#define X_COMA           15
#define X_GUION          24
#define X_CIERRA_INTERROGACION        33
#define X_ABRE_INTERROGACION          42
#define X_COMILLAS       51
#define X_CIERRA_EXCLAMACION         60
#define X_ABRE_EXCLAMACION              69
#define X_PUNTO_Y_COMA              78
#define X_MAYOR_QUE              87
#define X_MENOR_QUE              96
#define X_DOLAR             105
#define X_POR_CIENTO             114
#define X_DOS_PUNTOS             123
#define X_AND            132
#define X_BARRA             141
#define X_ABRE_PARENTESIS             150
#define X_CIERRA_PARENTESIS             159
#define X_ASTERISCO             168
#define X_MAS             177
#define X_N1             186
#define X_N2            195
#define X_N3            204
#define X_N4            213
#define X_N5            222
#define X_N6            231
#define X_N7            240
#define X_N8            249
#define X_N9            258
#define X_N0            267
#define ESPACIO         250
#define ALTO_HABLA_HARE  25
#define ANCHO_HABLA_HARE 23
#define VON_BRAUN        1
#define AZUL_OSCURO       2
#define VERDE_CLARO       3
#define VERDE_OSCURO      4
#define AMARILLO          5
#define NARANJA           6
#define ROJO              7
#define MARRON            8
#define MORADO            9
#define BLANCO           10
#define ROSA             11
#define PASO_HARE_X       8
#define PASO_HARE_Y       3
#define ALTO_PERSONAJE   70
#define ANCHO_PERSONAJE  43
#define PIES_HARE        12

#define ANCHO_LETRAS_OPC     6
#define ALTO_LETRAS_OPC      5
#define Y_ABC_OPC_1          6
#define Y_SIGNOS_OPC_1       15
#define Y_ABC_OPC_2          31
#define Y_SIGNOS_OPC_2       40
#define Y_ABC_OPC_3          56
#define Y_SIGNOS_OPC_3       65
#define X_A_OPC              10
#define X_B_OPC              17
#define X_C_OPC              24
#define X_D_OPC              31
#define X_E_OPC              38
#define X_F_OPC              45
#define X_G_OPC              52
#define X_H_OPC              59
#define X_I_OPC              66
#define X_J_OPC              73
#define X_K_OPC              80
#define X_L_OPC              87
#define X_M_OPC              94
#define X_N_OPC             101
#define X_GN_OPC            108
#define X_O_OPC             115
#define X_P_OPC             122
#define X_Q_OPC             129
#define X_R_OPC             136
#define X_S_OPC             143
#define X_T_OPC             150
#define X_U_OPC             157
#define X_V_OPC             164
#define X_W_OPC             171
#define X_X_OPC             178
#define X_Y_OPC             185
#define X_Z_OPC             192
#define ESPACIO_OPC         199
#define X_PUNTO_OPC          10
#define X_COMA_OPC           17
#define X_GUION_OPC          24
#define X_CIERRA_INTERROGACION_OPC        31
#define X_ABRE_INTERROGACION_OPC          38
#define X_COMILLAS_OPC       45
#define X_CIERRA_EXCLAMACION_OPC         52
#define X_ABRE_EXCLAMACION_OPC              59
#define X_PUNTO_Y_COMA_OPC              66
#define X_MAYOR_QUE_OPC              73
#define X_MENOR_QUE_OPC              80
#define X_DOLAR_OPC             87
#define X_POR_CIENTO_OPC            94
#define X_DOS_PUNTOS_OPC             101
#define X_AND_OPC            108
#define X_BARRA_OPC             115
#define X_ABRE_PARENTESIS_OPC             122
#define X_CIERRA_PARENTESIS_OPC             129
#define X_ASTERISCO_OPC             136
#define X_MAS_OPC             143
#define X_N1_OPC             150
#define X_N2_OPC            157
#define X_N3_OPC            164
#define X_N4_OPC            171
#define X_N5_OPC            178
#define X_N6_OPC            185
#define X_N7_OPC            192
#define X_N8_OPC            199
#define X_N9_OPC            206
#define X_N0_OPC            213
#define NO_PUERTA            99

#define INIT_FRAME  0
#define CMP_RLE     1
#define CMP_OFF     2
#define END_ANIM    3
#define SET_PALET   4
#define MOUSE_KEY   5
#define EMPTY_FRAME 6

#define COMPLETA    256
#define MEDIA       128

class DrasculaEngine : public ::Engine {
	int _gameId;
	Common::KeyState _keyPressed;

protected:

	int init();
	int go();
//	void shutdown();

public:
	DrasculaEngine(OSystem *syst, const DrasculaGameDescription *gameDesc);
	virtual ~DrasculaEngine();
	int getGameId() {
		return _gameId;
	}

	Common::RandomSource *_rnd;
	const DrasculaGameDescription *_gameDescription;
	uint32 getGameID() const;
	uint32 getFeatures() const;
	uint16 getVersion() const;
	Common::Platform getPlatform() const;
	void update_events();

	Audio::SoundHandle _soundHandle;

	void asigna_memoria();
	void libera_memoria();
	void salir_al_dos(int r);

	void lee_dibujos(const char *);
	void descomprime_dibujo(byte *dir_escritura, int plt);

	typedef char DacPalette256[256][3];

	void asigna_rgb(byte *dir_lectura, int plt);
	void funde_rgb(int plt);
	void paleta_hare();
	void ActualizaPaleta();
	void setvgapalette256(byte *PalBuf);
	void DIBUJA_FONDO(int xorg, int yorg, int xdes, int ydes, int Ancho,
				int Alto, byte *Origen, byte *Destino);
	void DIBUJA_BLOQUE(int xorg, int yorg, int xdes, int ydes, int Ancho,
				int Alto, byte *Origen, byte *Destino);
	void DIBUJA_BLOQUE_CUT(int *Array, byte *Origen, byte *Destino);
	void VUELCA_PANTALLA(int xorg, int yorg, int xdes, int ydes, int Ancho, int Alto, byte *Buffer);

	DacPalette256 palJuego;
	DacPalette256 palHare;
	DacPalette256 palHareClaro;
	DacPalette256 palHareOscuro;

	byte *VGA;

	byte *dir_dibujo1;
	byte *dir_hare_fondo;
	byte *dir_dibujo3;
	byte *dir_dibujo2;
	byte *dir_mesa;
	byte *dir_hare_dch;
	byte *dir_zona_pantalla;
	byte *dir_hare_frente;
	byte *dir_texto;
	byte *dir_pendulo;

	byte cPal[768];
	byte *Buffer_pcx;
	long LenFile;

	Common::File *ald, *sku;

	int hay_sb;
	int nivel_osc, musica_antes, musica_room;
	char num_room[20], pantalla_disco[20];
	char datos_actuales[20];
	int objs_room;
	char fondo_y_menu[20];

	char nombre_obj[30][20];
	char nombre_icono[44][13];

	int num_obj[40], visible[40], espuerta[40];
	int sitiobj_x[40], sitiobj_y[40], sentidobj[40];
	int objetos_que_tengo[43];
	char alapantallakeva[40][20];
	int x_alakeva[40], y_alakeva[40], sentido_alkeva[40], alapuertakeva[40];
	int x1[40], y1[40], x2[40], y2[40];
	int lleva_objeto, objeto_que_lleva;
	int con_voces;
	int menu_bar, menu_scr, hay_nombre;
	char texto_nombre[20];
	int frame_ciego;
	int frame_ronquido;
	int frame_murcielago;
	int c_mirar;
	int c_poder;

	int flags[NUM_BANDERAS];

	int frame_y;
	int hare_x, hare_y, hare_se_mueve, direccion_hare, sentido_hare, num_frame, hare_se_ve;
	int sitio_x, sitio_y, comprueba_flags;
	int rompo, rompo2;
	int paso_x, paso_y;
	int alto_hare, ancho_hare, alto_pies;
	int alto_habla, ancho_habla;
	int suelo_x1, suelo_y1, suelo_x2, suelo_y2;
	int cerca, lejos;
	int sentido_final, anda_a_objeto;
	int obj_saliendo;
	int diff_vez, conta_vez;
	int hay_respuesta;
	int conta_ciego_vez;
	int cambio_de_color;
	int rompo_y_salgo;
	int vb_x, sentido_vb, vb_se_mueve, frame_vb;
	float nuevo_alto, nuevo_ancho;
	int diferencia_x, diferencia_y;
	int factor_red[202];
	int frame_piano;
	int frame_borracho;
	int frame_velas;
	int color_solo;
	int parpadeo;
	int x_igor, y_igor, sentido_igor;
	int x_dr, y_dr, sentido_dr;
	int x_bj, y_bj, sentido_bj;
	int cont_sv;
	int term_int;
	int num_ejec;
	int hay_que_load;
	char nom_partida[13];
	int _color;
	int corta_musica;
	char select[23];
	int hay_seleccion;
	int x_raton;
	int y_raton;
	int y_raton_ant;
	int boton_izq;
	int boton_dch;

	bool escoba();
	void Negro();
	void habla_vb(const char *, const char *);
	void habla_vbpuerta(const char *dicho, const char *filename);
	void habla_ciego(const char *, const char *, const char *);
	void habla_hacker(const char *, const char *);
	void agarra_objeto(int);
	void anda_parriba();
	void anda_pabajo();
	void pon_vb();
	void lleva_vb(int punto_x);
	void hipo_sin_nadie(int contador);
	void abre_puerta(int nflag, int n_puerta);
	void mapa();
	void buffer_teclado() { }
	void animacion_1_1();
	void animacion_2_1();
	void animacion_1_2();
	void animacion_2_2();
	void animacion_3_1();
	void animacion_4_1();
	void animacion_3_2();
	void animacion_4_2();
	void animacion_5_2();
	void animacion_6_2();
	void animacion_7_2();
	void animacion_8_2();
	void animacion_9_2();
	void animacion_10_2();
	void animacion_11_2();
	void animacion_12_2();
	void animacion_13_2();
	void animacion_14_2();
	void animacion_15_2();
	void animacion_16_2();
	void animacion_17_2();
	void animacion_18_2();
	void animacion_19_2();
	void animacion_20_2();
	void animacion_21_2();
	void animacion_22_2();
	void animacion_23_2();
	void animacion_23_anexo();
	void animacion_23_anexo2();
	void animacion_24_2();
	void animacion_25_2();
	void animacion_26_2();
	void animacion_27_2();
	void animacion_28_2();
	void animacion_29_2();
	void animacion_30_2();
	void animacion_31_2();
	void animacion_32_2();
	void animacion_33_2();
	void animacion_34_2();
	void animacion_35_2();
	void animacion_36_2();

	void refresca_1_antes();
	void refresca_2();
	void refresca_3();
	void refresca_3_antes();
	void refresca_4();
	void refresca_5();
	void refresca_5_antes();
	void refresca_6_antes();
	void refresca_7_antes();
	void refresca_9_antes();
	void refresca_12_antes();
	void refresca_14_antes();
	void refresca_15();
	void refresca_16_antes();
	void refresca_17_antes();
	void refresca_17();
	void refresca_18_antes();
	void refresca_18();
	void refresca_21_antes();
	void refresca_22_antes();
	void refresca_23_antes();
	void refresca_24_antes();
	void refresca_26_antes();
	void refresca_26();
	void refresca_27();
	void refresca_27_antes();
	void refresca_29();
	void refresca_29_antes();
	void refresca_30_antes();
	void refresca_31_antes();
	void refresca_34_antes();
	void refresca_35_antes();
	void refresca_31();
	void refresca_34();
	void refresca_35();
	void hare_oscuro();


	void sin_verbo();
	bool para_cargar(char[]);
	void carga_escoba(const char *);
	void borra_pantalla();
	void lleva_al_hare(int, int);
	void mueve_cursor();
	void comprueba_objetos();
	void espera_soltar();
	void MirarRaton();
	void elige_en_barra();
	bool comprueba1();
	bool comprueba2();
	Common::KeyCode getscan();
	void elige_verbo(int);
	void mesa();
	bool saves();
	void print_abc(const char *, int, int);
	void delay(int ms);
	bool confirma_salir();
	void salva_pantallas();
	void elige_objeto(int objeto);
	void suma_objeto(int);
	int resta_objeto(int osj);
	void fliplay(const char *filefli, int vel);
	void FundeDelNegro(int VelocidadDeFundido);
	char LimitaVGA(char valor);
	void color_abc(int cl);
	void centra_texto(const char *,int,int);
	void comienza_sound(const char *);
	void anima(const char *animacion, int FPS);
	void fin_sound_corte();
	void FundeAlNegro(int VelocidadDeFundido);
	void pausa(int);
	void habla_dr_grande(const char *dicho, const char *filename);
	void pon_igor();
	void pon_bj();
	void pon_dr();
	void habla_igor_dch(const char *dicho, const char *filename);
	void habla_dr_dch(const char *dicho, const char *filename);
	void habla_dr_izq(const char *dicho, const char *filename);
	void habla_solo(const char *, const char *);
	void habla_igor_frente(const char *, const char *);
	void habla_tabernero(const char *dicho, const char *filename);
	void habla_igorpuerta(const char *dicho, const char *filename);
	void habla_igor_peluca(const char *dicho, const char *filename);
	void hipo(int);
	void fin_sound();
	void habla_bj(const char *, const char *);
	void habla_baul(const char *dicho, const char *filename);
	void hablar(const char *, const char *);
	void hablar_sinc(const char *, const char *, const char *);
	void cierra_puerta(int nflag, int n_puerta);
	void playmusic(int p);
	void stopmusic();
	int music_status();
	void refresca_pantalla();
	bool carga_partida(const char *);
	void puertas_cerradas(int);
	void animafin_sound_corte();
	void color_hare();
	void funde_hare(int oscuridad);
	void paleta_hare_claro();
	void paleta_hare_oscuro();
	void hare_claro();
	void actualiza_datos();
	void empieza_andar();
	void actualiza_refresco();
	void actualiza_refresco_antes();
	void pon_hare();
	void menu_sin_volcar();
	void barra_menu();
	void saca_objeto();
	bool sal_de_la_habitacion(int);
	bool coge_objeto();
	bool banderas(int);
	void cursor_mesa();
	void introduce_nombre();
	void para_grabar(char[]);
	int LookForFree();
	void OpenSSN(const char *Name, int Pause);
	void WaitFrameSSN();
	void MixVideo(byte *OldScreen, byte *NewScreen);
	void Des_RLE(byte *BufferRLE, byte *MiVideoRLE);
	void Des_OFF(byte *BufferOFF, byte *MiVideoOFF, int Lenght);
	void set_dacSSN(byte *dacSSN);
	byte *TryInMem(Common::File *Sesion);
	void EndSSN();
	int PlayFrameSSN();

	byte *AuxBuffOrg;
	byte *AuxBuffLast;
	byte *AuxBuffDes;
	int Leng;

	byte *pointer;
	int UsingMem;
	Common::File *_Sesion;
	byte CHUNK;
	byte CMP, dacSSN[768];
	byte *MiVideoSSN;
	byte *mSesion;
	int FrameSSN;
	int GlobalSpeed;
	uint32 LastFrame;

	int frame_pen;
	int flag_tv;

	byte *carga_pcx(byte *NamePcc);
	void set_dac(byte *dac);
	void WaitForNext(int FPS);
	int vez();
	void reduce_hare_chico(int, int, int, int, int, int, int, byte *, byte *);
	char codifica(char);
	void cuadrante_1();
	void cuadrante_2();
	void cuadrante_3();
	void cuadrante_4();
	void refresca_62();
	void refresca_62_antes();
	void refresca_63();
	void graba_partida(char[]);
	void aumenta_num_frame();
	int sobre_que_objeto();
	bool comprueba_banderas_menu();
	void pantalla_0();
	void pantalla_1(int);
	void pantalla_2(int);
	void pantalla_3(int);
	void pantalla_4(int);
	void pantalla_5(int);
	void pantalla_6(int);
	void pantalla_7(int);
	void pantalla_8(int);
	void pantalla_9(int);
	void pantalla_12(int);
	void pantalla_14(int);
	void pantalla_15(int);
	void pantalla_16(int);
	void pantalla_17(int);
	void pantalla_18(int);
	void pantalla_19(int);
	bool pantalla_21(int);
	void pantalla_22(int);
	void pantalla_23(int);
	void pantalla_24(int);
	void pantalla_26(int);
	void pantalla_27(int);
	void pantalla_29(int);
	void pantalla_30(int);
	void pantalla_31(int);
	void pantalla_34(int);
	void pantalla_35(int);
	void pantalla_44(int);
	void pantalla_62(int);
	void pantalla_63(int);
	void conversa(const char *);
	void print_abc_opc(const char *, int, int, int);
	void responde(int);
	void habla_borracho(const char *dicho, const char *filename);
	void habla_pianista(const char *dicho, const char *filename);

	void MusicFadeout();
	void ctvd_end();
	void ctvd_stop();
	void ctvd_terminate();
	void ctvd_speaker(int flag);
	void ctvd_output(Common::File *file_handle);
	void ctvd_init(int b);
	void grr();
	bool pantalla_13(int fl);
	void refresca_13();
	void refresca_20();
	void animacion_1_3();
	void animacion_2_3();
	void animacion_3_3();
	void animacion_4_3();
	void animacion_5_3();
	void animacion_6_3();
	void animacion_rayo();
	void animacion_1_4();
	void animacion_2_4();
	void animacion_3_4();
	void animacion_4_4();
	void animacion_5_4();
	void animacion_6_4();
	void animacion_7_4();
	void animacion_8_4();
	void animacion_9_4();
	void animacion_1_5();
	void animacion_2_5();
	void animacion_3_5();
	void animacion_4_5();
	void animacion_5_5();
	void animacion_6_5();
	void animacion_7_5();
	void animacion_8_5();
	void animacion_9_5();
	void animacion_10_5();
	void animacion_11_5();
	void animacion_12_5();
	void animacion_13_5();
	void animacion_14_5();
	void animacion_15_5();
	void animacion_16_5();
	void animacion_17_5();
	void pantalla_49(int);
	void pantalla_53(int);
	void pantalla_54(int);
	void pantalla_55(int);
	bool pantalla_56(int);
	void refresca_53_antes();
	void refresca_54_antes();
	void refresca_49_antes();
	void refresca_56_antes();
	void refresca_50();
	void refresca_57();
	void habla_igor_sentado(const char *, const char *);
	void habla_lobo(const char *dicho, const char *filename);
	void habla_mus(const char *dicho, const char *filename);
	void pantalla_58(int);
	void pantalla_59(int);
	bool pantalla_60(int);
	void pantalla_61(int);
	void pantalla_pendulo(int);
	void refresca_pendulo();
	void refresca_58();
	void refresca_58_antes();
	void refresca_59_antes();
	void refresca_60_antes();
	void refresca_60();
	void refresca_61();
	void animacion_1_6();
	void animacion_2_6();
	void animacion_3_6();
	void animacion_4_6();
	void animacion_5_6();
	void animacion_6_6();
	void animacion_7_6();
	void animacion_9_6();
	void animacion_10_6();
	void animacion_11_6();
	void animacion_12_6();
	void animacion_13_6();
	void animacion_14_6();
	void animacion_15_6();
	void animacion_18_6();
	void animacion_19_6();
	void activa_pendulo();
	void habla_pen(const char *, const char *);
	void habla_pen2(const char *, const char *);
	void habla_taber2(const char *, const char *);
	void habla_bj_cama(const char *dicho, const char * filename);
	void habla_htel(const char *dicho, const char *filename);

private:

public:

};

} // End of namespace Drascula

#endif /* DRASCULA_H */