#include <fxlib.h>
#include "filebios.h"

void Locate__Print(int, int, unsigned char*);
void Display_Error(int);
enum {NO_ERROR, ERR_OPEN_CAPT, ERR_WRONG_SIZE, ERR_READ_CAPT, ERR_PICT_ALREADY_EXISTS, ERR_CREATE_PICT, ERR_OPEN_PICT, ERR_WRITE_PICT};

int AddIn_main(int isAppli, unsigned short OptionNum) {
    unsigned int key;
	int handle, new_handle, size, i;
	char capture_contents[1105] = "";
	char picture_contents[1101] = "";
	FONTCHARACTER capture_name[] = {'\\', '\\', 'f', 'l', 's', '0', '\\', 'C', 'A', 'P', 'T', '~', '0', '0', '1', '.', 'g', '1', 'm', 0};
	FONTCHARACTER picture_name[] = {'\\', '\\', 'f', 'l', 's', '0', '\\', 'P', 'I', 'C', 'T', '~', '0', '0', '1', '.', 'g', '1', 'm', 0};
	unsigned char str_to_replace[]={0xaa,0xac,0xbd,0xaf,0x90,0x88,0x9a,0x8d,0xce,0xff,0xef,0xff,0xef,0xff,0x72,0xfe,0xff,0xff,0xfb,0xb3,0xfb,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xff,0xfe,0x50,0x49,0x43,0x54,0x55,0x52,0x45,0x20,0x31,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x01,0x6d,0x61,0x69,0x6e,0x0,0x0,0x0,0x0,0x50,0x49,0x43,0x54,0x31,0x0,0x0,0x0,0x07,0x0,0x0,0x04,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};

	handle = Bfile_OpenFile(capture_name, _OPENMODE_READ);
	if(handle >= 0) {
		size = Bfile_GetFileSize(handle);
		if(size == 1104) {
			i = Bfile_ReadFile(handle, capture_contents, size, -1);
			if(i >= 0) {
				i = Bfile_CreateFile(picture_name, 1100);
				if(i >= 0) {
					new_handle = Bfile_OpenFile(picture_name, _OPENMODE_WRITE);
					if(new_handle >= 0) {
						for(i = 96; i < 1104; i++) picture_contents[i-4] = capture_contents[i];
						for(i = 0; i < 92; i++) picture_contents[i] = str_to_replace[i];

						i = Bfile_WriteFile(new_handle, picture_contents, 1100);
						if(i >= 0) Display_Error(NO_ERROR);
						else Display_Error(ERR_WRITE_PICT);		//	ERREUR

						Bfile_CloseFile(new_handle);
					}
					else Display_Error(ERR_OPEN_PICT);		//	Erreur
				}
				else if(i == IML_FILEERR_ALREADYEXISTENTRY)
					Display_Error(ERR_PICT_ALREADY_EXISTS);		//	Erreur
				else Display_Error(ERR_CREATE_PICT);		//	Erreur
			}
			else Display_Error(ERR_READ_CAPT);		//	Erreur
		}
		else Display_Error(ERR_WRONG_SIZE);		//	Erreur
		Bfile_CloseFile(handle);
	}
	else Display_Error(ERR_OPEN_CAPT);		//	Erreur

	do {
		GetKey(&key);
	} while((key != KEY_CTRL_EXIT) && (key != KEY_CTRL_EXE));

    return 1;
}

void Locate__Print(int x, int y, unsigned char str[]) {
	locate(x, y);
	Print(str);
}

void Display_Error(int err_no) {
	PopUpWin(4);

	switch (err_no) {
	case ERR_OPEN_CAPT:
		Locate__Print(6, 2, "Impossible");
		Locate__Print(7, 3, "d'ouvrir");
		Locate__Print(6, 4, "le fichier");
		Locate__Print(4, 5, "\"CAPT~001.g1m\"");
		break;
	
	case ERR_WRONG_SIZE:
		Locate__Print(3, 2, "Erreur:Le fichier");
		Locate__Print(5, 3, "\"CAPT~001.g1m\"");
		Locate__Print(7, 4, "n'est pas");
		Locate__Print(6, 5, "une capture");
		break;
	
	case ERR_READ_CAPT:
		Locate__Print(4, 2, "Erreur lors de");
		Locate__Print(4, 3, "la lecture du");
		Locate__Print(7, 4, "fichier");
		Locate__Print(4, 5, "\"CAPT~001.g1m\"");
		break;
	
	case ERR_PICT_ALREADY_EXISTS:
		Locate__Print(3, 2, "Erreur:Le fichier");
		Locate__Print(4, 3, "\"PICT~001.g1m\"");
		Locate__Print(5, 4, "existe d\xe6\x0a""j\xe6\x01.");
		Locate__Print(4, 5, "Supprimez-le !");
		break;
	
	case ERR_CREATE_PICT:
		Locate__Print(4, 2, "Erreur lors de");
		Locate__Print(4, 3, "la cr\xe6\x0a""ation du");
		Locate__Print(7, 4, "fichier");
		Locate__Print(4, 5, "\"PICT~001.g1m\"");
		break;
	
	case ERR_OPEN_PICT:
		Locate__Print(4, 2, "Erreur lors de");
		Locate__Print(4, 3, "la lecture du");
		Locate__Print(7, 4, "fichier");
		Locate__Print(4, 5, "\"PICT~001.g1m\"");
		break;
	
	case ERR_WRITE_PICT:
		Locate__Print(4, 2, "Erreur lors de");
		Locate__Print(4, 3, "l'\xe6\x0a""criture dans");
		Locate__Print(6, 4, "le fichier");
		Locate__Print(4, 5, "\"PICT~001.g1m\"");
		break;
	
	default:
		Locate__Print(7, 3, "Complet!");
		Locate__Print(4, 5, "Appuyer:[EXIT]");
	}
}


#pragma section _BR_Size
unsigned long BR_Size;
#pragma section
#pragma section _TOP
int InitializeSystem(int isAppli, unsigned short OptionNum){return INIT_ADDIN_APPLICATION(isAppli, OptionNum);}
#pragma section
