#!/bin/bash

# Répertoire absolu du fichier
RELPAT="$(dirname $0)"

function menup {
	select_menup=$(zenity --list --title="Menu Principal" \
				--text="Veuillez choisir un item" \
				--column="select" --column=" " \
					"quit" "Quitter" \
					"cas" "TI-nSpire CAS" \
					"noncas" "TI-nSpire" \
					"binrun" "Fichier bin" \
					"aide" "Aide" \
				--hide-column="1" \
				--height="300" \
				--width="500");
}


function cas {
	select_cas=$(zenity --list --title="Menu TI-nSpire CAS" \
				--text="Veuillez choisir un item" \
				--column="select" --column=" " \
					"return" "Retour" \
					"extboot2" "Extraire le boot2" \
					"romcas" "Créer une ROM" \
					"runcasb1" "Lancer une ROM sur le boot1" \
					"runcasb2" "Lancer une ROM sur le boot2" \
				--hide-column="1" \
				--height="300" \
				--width="500");
}


function noncas {
	select_noncas=$(zenity --list --title="Menu TI-nSpire" \
				--text="Veuillez choisir un item" \
				--column="select" --column=" " \
					"return" "Retour" \
					"extboot2" "Extraire le boot2" \
					"romnoncas" "Créer une ROM" \
					"runnoncasb1" "Lancer une ROM sur le boot1" \
					"runnoncas84b1" "Lancer une ROM en mode 84+ sur le boot1" \
					"runnoncasb2" "Lancer une ROM sur le boot2" \
					"runnoncas84b2" "Lancer une ROM en mode 84+ sur le boot2" \
				--hide-column="1" \
				--height="300" \
				--width="500");
}

function binrun {
	binfile=$(zenity --file-selection --title="Sélectionnez un fichier *.bin"  --height="30" --width="500"  --filename="$RELPAT/");
	if [ "$binfile" ]; then
		"$RELPAT"/nspire_emu /B="$binfile"
	fi
}

function extboot2 {
	clear
	echo "#####################################################"
	echo "#           Extraire le Boot2 de boot2.img          #"
	echo "#####################################################"
	wine "$RELPAT"/imgdump.exe boot2.img
}

function romnoncas {
	os=$(zenity --file-selection --title="Sélectionnez un fichier *.tno" --filename="$RELPAT/");
	if [ "$os" ]; then
		if [ "${os##*.}" = "tno" ]; then
			rom=$(zenity --file-selection --title="Enregistrer une ROM" --save --confirm-overwrite --filename="$RELPAT/");
			if [ "$rom" ]; then
				if [ "${rom##*.}" != "rom" ]; then
					rom="$rom.rom"
				fi
				"$RELPAT"/nspire_emu /F="$rom" /N /PB=boot2.img /PO="$os"
			fi
		else
			zenity --error --title="Erreur" --text="Veuillez sélectionner un fichier *.tno et pas autre chose ! \n Opréation annulée"
		fi
	fi
}

function romcas {
	os=$(zenity --file-selection --title="Sélectionnez un fichier *.tnc" --filename="$RELPAT/");
	if [ "$os" ]; then
		if [ "${os##*.}" = "tnc" ]; then
			rom=$(zenity --file-selection --title="Enregistrer une ROM" --save --confirm-overwrite --filename="$RELPAT/");
			if [ "$rom" ]; then
				if [ "${rom##*.}" != "rom" ]; then
					rom="$rom.rom"
				fi
				"$RELPAT"/nspire_emu /F="$rom" /N /PB=boot2.img /PO="$os" /C
			fi
		else
			zenity --error --title="Erreur" --text="Veuillez sélectionner un fichier *.tnc et pas autre chose ! \n Opréation annulée"
		fi
	fi
}

function runnoncasb1 {
	rom=$(zenity --file-selection --title="Sélectionnez un fichier *.rom" --filename="$RELPAT/");
	if [ "$rom" ]; then
		if [ "${rom##*.}" = "rom" ]; then
			boot1=$(zenity --file-selection --title="Sélectionnez un fichier BOOT1" --filename="$RELPAT/");
			if [ "$boot1" ]; then
				"$RELPAT"/nspire_emu /F="$rom" /1="$boot1"
			fi
		else
			zenity --error --title="Erreur" --text="Veuillez sélectionner un fichier *.rom et pas autre chose ! \n Opréation annulée"
		fi
	fi
}

function runnoncas84b1 {
	rom=$(zenity --file-selection --title="Sélectionnez un fichier *.rom" --filename="$RELPAT/");
	if [ "$rom" ]; then
		if [ "${rom##*.}" = "rom" ]; then
			boot1=$(zenity --file-selection --title="Sélectionnez un fichier BOOT1" --filename="$RELPAT/");
			if [ "$boot1" ]; then
				"$RELPAT"/nspire_emu /F="$rom" /1="$boot1" /K
			fi
		else
			zenity --error --title="Erreur" --text="Veuillez sélectionner un fichier *.rom et pas autre chose ! \n Opréation annulée"
		fi
	fi
}

function runcasb1 {
	rom=$(zenity --file-selection --title="Sélectionnez un fichier *.rom" --filename="$RELPAT/");
	if [ "$rom" ]; then
		if [ "${rom##*.}" = "rom" ]; then
			boot1=$(zenity --file-selection --title="Sélectionnez un fichier BOOT1" --filename="$RELPAT/");
			if [ "$boot1" ]; then
				"$RELPAT"/nspire_emu /F="$rom" /1="$boot1" /C
			fi
		else
			zenity --error --title="Erreur" --text="Veuillez sélectionner un fichier *.rom et pas autre chose ! \n Opréation annulée"
		fi
	fi
}

function runnoncasb2 {
	rom=$(zenity --file-selection --title="Sélectionnez un fichier *.rom" --filename="$RELPAT/");
	if [ "$rom" ]; then
		if [ "${rom##*.}" = "rom" ]; then
			"$RELPAT"/nspire_emu /F="$rom" /B=boot2.img.raw
		else
			zenity --error --title="Erreur" --text="Veuillez sélectionner un fichier *.rom et pas autre chose ! \n Opréation annulée"
		fi
	fi
}

function runnoncas84b2 {
	rom=$(zenity --file-selection --title="Sélectionnez un fichier *.rom" --filename="$RELPAT/");
	if [ "$rom" ]; then
		if [ "${rom##*.}" = "rom" ]; then
			"$RELPAT"/nspire_emu /F="$rom" /B=boot2.img.raw /K
		else
			zenity --error --title="Erreur" --text="Veuillez sélectionner un fichier *.rom et pas autre chose ! \n Opréation annulée"
		fi
	fi
}

function runcasb2 {
	rom=$(zenity --file-selection --title="Sélectionnez un fichier *.rom" --filename="$RELPAT/");
	if [ "$rom" ]; then
		if [ "${rom##*.}" = "rom" ]; then
			"$RELPAT"/nspire_emu /F="$rom" /B=boot2.img.raw /C
		else
			zenity --error --title="Erreur" --text="Veuillez sélectionner un fichier *.rom et pas autre chose ! \n Opréation annulée"
		fi
	fi
}

function aide {
	clear
	echo "#####################################################"
	echo "#                      Aide                         #"
	echo "#                   ----------                     ##"
	echo "##    sur l'utilisation de l'emulateur en boot2    ##"
	echo "#####################################################"
	echo "- Recuperez le fichier de mise a jour TI (*.tnc/*.tno) en le telechargeant  "
	echo "  depuis le site de TI ou sur TI-bank, qui lui ressence une grande partie "
	echo "  des OS ayant existes."
	echo "- Copiez ce fichier dans la racine du dossier de l'emulateur."
	echo "- Le renommer pour plus de simplicite (ex : 17.tnc) !"
	echo "- L'assimiler a un format *.zip."
	echo "- Ouvrir l'archive et en extraire 'boot2.img' et le placer dans la racine"
	echo "  du dossier de l'emulateur."
	echo "- Retablir l'extension du fichier de mise a jour TI (*.tnc/*.tno)."
	echo "- Grace a ce fichier batch, decryptez le 'boot2.img'."
	echo "- Grace a ce fichier batch, lancez l'emulation."
	echo "### Pour regarder ce tutoriel en video : http://vimeo.com/8884626"
	echo ""	
	echo "Appuyer la touche <Entrée> pour continuer..."
	read touche
}

while [  "$select_menup" != "quit"  ]; do
	menup
	if [ "$select_menup" = "cas" ]; then
		while [ "$select_cas" != "return" ]; do		
			cas		
			if [ "$select_cas" = "extboot2" ]; then
				extboot2
			elif [ "$select_cas" = "romcas" ]; then
				romcas
			elif [ "$select_cas" = "runcasb1" ]; then
				runcasb1
			elif [ "$select_cas" = "runcasb2" ]; then
				runcasb2
			else break;
			fi
		done
	select_cas=$"none"
	elif [ "$select_menup" = "noncas" ]; then
		while [ "$select_noncas" != "return" ]; do			
			noncas
			if [ "$select_noncas" = "extboot2" ]; then
				extboot2
			elif [ "$select_noncas" = "romnoncas" ]; then
				romnoncas
			elif [ "$select_noncas" = "runnoncasb1" ]; then
				runnoncasb1
			elif [ "$select_noncas" = "runnoncas84b1" ]; then
				runnoncas84b1
			elif [ "$select_noncas" = "runnoncasb2" ]; then
				runnoncasb2
			elif [ "$select_noncas" = "runnoncas84b2" ]; then
				runnoncas84b2
			else break;
			fi
		done
	select_noncas=$"none"
	elif [ "$select_menup" = "binrun" ]; then
		binrun	
	elif [ "$select_menup" = "aide" ]; then
		aide	
	else break;
	fi
done

# Credits
clear
zenity 	--info --title="Credits" \
		--text=\
"Merci d'avoir utilisé ce shell Bash réalisé par Levak. 
Un grand merci à Goplat pour son émulateur et à xspire pour son skin !"
clear
