﻿function ReadDongle(type) {
	var executable, tempFolder, filename;
	switch (type) {
		case "5Q": // 5D Inspira
			executable = GetProgramFolder() + "DongleUpdate_5Q.exe";
			tempFolder = GetTempFolder();
			filename = "5QDongle.c2v";
			break;
			
		default: // 5D is the deafult
			executable = GetProgramFolder() + "DongleUpdate_5D.exe";
			tempFolder = GetTempFolder();
			filename = "5DDongle.c2v";
			break;
	}

	// Request c2v file
	if (FileExists(executable)) {
		var error = CallExec(executable, "C2V", tempFolder + filename);
		if (error != 0) {
			return "#" + error + " - " + GetHaspErrorMessage(error);
		}
		else {
			return ReadFile(tempFolder + filename);
		}
	}
	else {
		return "#0 - DONGLE_NOT_REQUIRED";
	}
}

function ReadDongleFontData(type) {
	var executable, tempFolder, filename;
	switch (type) {
		case "5Q": // 5D Inspira
			executable = GetProgramFolder() + "DongleUpdate_5Q.exe";
			tempFolder = GetTempFolder();
			filename = "5QDongle.dat";
			break;

		default: // 5D is the deafult
			executable = GetProgramFolder() + "DongleUpdate_5D.exe";
			tempFolder = GetTempFolder();
			filename = "5DDongle.dat";
			break;
	}

	// Request data file
	if (FileExists(executable)) {
		var error = CallExec(executable, "/GetFonts", tempFolder + filename);
		if (error != 0) {
			return "#" + error + " - " + GetHaspErrorMessage(error);
		}
		else {
			return ReadFile(tempFolder + filename);
		}
	}
	else {
		return "#0 - DONGLE_NOT_REQUIRED";
	}
}

function WriteDongle(type, v2c) {
	var executable, tempFolder, filename;
	switch (type) {
		case "5Q": // 5D Inspira
			executable = GetProgramFolder() + "DongleUpdate_5Q.exe";
			tempFolder = GetTempFolder();
			filename = "5QDongle.c2v";
			break;
			
		default: // 5D is the deafult
			executable = GetProgramFolder() + "DongleUpdate_5D.exe";
			tempFolder = GetTempFolder();
			filename = "5DDongle.v2c";
			break;
	}

	// Save v2c file into temporary location
	var error = WriteFile(tempFolder + filename, v2c);
	if (error != 0) {
		return error;
	}
	else {
		// Apply to Dongle
		if (FileExists(executable)) {
			error = CallExec(executable, "V2C", tempFolder + filename);
			if (error != 0) {
				return "#" + error + " - " + GetHaspErrorMessage(error);
			}
			else {
				return "";
			}
		}
		else {
			return "#0 - DONGLE_NOT_REQUIRED";
		}
	}
}

function WriteDongleFontData(type, code) {
	var executable, tempFolder, filename;
	switch (type) {
		case "5Q": // 5D Inspira
			executable = GetProgramFolder() + "DongleUpdate_5Q.exe";
			tempFolder = GetTempFolder();
			filename = "5QDongle.txt";
			break;

		default: // 5D is the deafult
			executable = GetProgramFolder() + "DongleUpdate_5D.exe";
			tempFolder = GetTempFolder();
			filename = "5DDongle.txt";
			break;
	}

	// Save update file into temporary location
	var error = WriteFile(tempFolder + filename, code);
	if (error != 0) {
		return error;
	}
	else {
		// Apply to Dongle
		error = CallExec(executable, "/SetFonts ", tempFolder + filename);
		if (error != 0) {
			return "#" + error + " - " + GetHaspErrorMessage(error);
		}
		else {
			return "";
		}
	}
}

function FileExists(filename) {
	return top.FileSysObj.FileExists(filename);
}

function GetHaspErrorMessage(ErrorNumber) {
	switch (ErrorNumber) {
		case 0: return "HASP_STATUS_OK";
		case 1: return "HASP_MEM_RANGE";
		case 2: return "HASP_INV_PROGNUM_OPT";
		case 3: return "HASP_INSUF_MEM";
		case 4: return "HASP_TMOF";
		case 5: return "HASP_ACCESS_DENIED";
		case 6: return "HASP_INCOMPAT_FEATURE";
		case 7: return "HASP_HASP_NOT_FOUND";
		case 8: return "HASP_TOO_SHORT";
		case 9: return "HASP_INV_HND";
		case 10: return "HASP_INV_FILEID";
		case 11: return "HASP_OLD_DRIVER";
		case 12: return "HASP_NO_TIME";
		case 13: return "HASP_SYS_ERR";
		case 14: return "HASP_NO_DRIVER";
		case 15: return "HASP_INV_FORMAT";
		case 16: return "HASP_REQ_NOT_SUPP";
		case 17: return "HASP_INV_UPDATE_OBJ";
		case 18: return "HASP_KEYID_NOT_FOUND";
		case 19: return "HASP_INV_UPDATE_DATA";
		case 20: return "HASP_INV_UPDATE_NOTSUPP";
		case 21: return "HASP_INV_UPDATE_CNTR";
		case 22: return "HASP_INV_VCODE";
		case 23: return "HASP_ENC_NOT_SUPP";
		case 24: return "HASP_INV_TIME";
		case 25: return "HASP_NO_BATTERY_POWER";
		case 26: return "HASP_NO_ACK_SPACE";
		case 27: return "HASP_TS_DETECTED";
		case 28: return "HASP_FEATURE_TYPE_NOT_IMPL";
		case 29: return "HASP_UNKNOWN_ALG";
		case 30: return "HASP_INV_SIG";
		case 31: return "HASP_FEATURE_NOT_FOUND";
		case 32: return "HASP_NO_LOG";
		case 33: return "HASP_LOCAL_COMM_ERR";
		case 34: return "HASP_UNKNOWN_VCODE";
		case 35: return "HASP_INV_SPEC";
		case 36: return "HASP_INV_SCOPE";
		case 37: return "HASP_TOO_MANY_KEYS";
		case 38: return "HASP_TOO_MANY_USERS";
		case 39: return "HASP_BROKEN_SESSION";
		case 40: return "HASP_REMOTE_COMM_ERR";
		case 41: return "HASP_FEATURE_EXPIRED";
		case 42: return "HASP_OLD_LM";
		case 43: return "HASP_DEVICE_ERR";
		case 44: return "HASP_UPDATE_BLOCKED";
		case 45: return "HASP_TIME_ERR";
		case 46: return "HASP_SCHAN_ERR";
		case 47: return "HASP_STORAGE_CORRUPT";
		case 48: return "HASP_NO_VLIB";
		case 49: return "HASP_INV_VLIB";
		case 50: return "HASP_SCOPE_RESULTS_EMPTY";
		case 51: return "HASP_VM_DETECTED";
		case 52: return "HASP_HARDWARE_MODIFIED";
		case 53: return "HASP_USER_DENIED";
		case 54: return "HASP_UPDATE_TOO_OLD";
		case 55: return "HASP_UPDATE_TOO_NEW";
		case 56: return "HASP_OLD_VLIB";
		case 57: return "HASP_UPLOAD_ERROR";
		case 58: return "HASP_INV_RECIPIENT";
		case 59: return "HASP_INV_DETACH_ACTION";
		case 60: return "HASP_TOO_MANY_PRODUCTS";
		case 61: return "HASP_INV_PRODUCT";
		case 62: return "HASP_UNKNOWN_RECIPIENT";
		case 63: return "HASP_INV_DURATION";
		case 64: return "HASP_CLONE_DETECTED";
		case 400: return "HASP_NO_API_DYLIB";
		case 401: return "HASP_INV_API_DYLIB";
		case 501: return "HASP_INVALID_PARAMETER";
		case 500: return "HASP_INVALID_OBJECT";
		case 502: return "HASP_ALREADY_LOGGED_IN";
		case 503: return "HASP_ALREADY_LOGGED_OUT";
		case 525: return "HASP_OPERATION_FAILED";
		case 600: return "HASP_NO_EXTBLOCK";
		case 650: return "HASP_INV_PORT_TYPE";
		case 651: return "HASP_INV_PORT";
		case 698: return "HASP_NOT_IMPL";
		case 699: return "HASP_INT_ERR";
		case 2001: return "HASP_FIRST_HELPER";
		case 3001: return "HASP_FIRST_HASP_ACT";
		case 5001: return "HASP_NEXT_FREE_VALUES";
		default: return "UNKNOWN";
	}
}
