#!/usr/bin/env bash

ENABLED=yes
[[ ${ENABLED} == "yes" ]] || exit 0

SELF_NAME="grub-functions"

PATH_GRUB="/memory/data/from/0/boot/grub/"

exec_get_all_menuentry(){
## Показать все варианты загрузки из grub_main.cfg   grub_addon.cfg   grub_boothdd.cfg   grub_recovery.cfg
    echo "\
Full_save_to_HDD
Sandbox_in_RAM_with_save_user_profile_on_HDD
Full_sandbox_in_RAM
Saving_to_the_HDD_module
Menu_of_the_second_system
Additional_Menu>Sandbox_on_HDD_with_saving_user_profile_on_HDD
Additional_Menu>Full_sandbox_on_HDD
Recovery_Menu>Boot_base_modules_on_HDD_without_user_settings
Recovery_Menu>Boot_base_modules_in_RAM_without_user_settings
Boot_menu_for_other_OS>Boot_Windows_bootmgr
Boot_menu_for_other_OS>Boot_Windows_ntldr
Boot_menu_for_other_OS>Boot_Windows_BIOS_MBR
Boot_menu_for_other_OS>Boot_Windows_EFI_MBR
Boot_menu_for_other_OS>Boot_from_storage_1_Windows_EFI_MBR
Boot_menu_for_other_OS>Boot_from_storage_2_Windows_EFI_MBR
Boot_menu_for_other_OS>Boot_from_storage_3_Windows_EFI_MBR
Boot_menu_for_other_OS>Boot_from_storage_4_Windows_EFI_MBR
Boot_menu_for_other_OS>Boot_Windows_EFI_GPT
Boot_menu_for_other_OS>Boot_from_storage_1_Windows_EFI_GPT
Boot_menu_for_other_OS>Boot_from_storage_2_Windows_EFI_GPT
Boot_menu_for_other_OS>Boot_from_storage_3_Windows_EFI_GPT
Boot_menu_for_other_OS>Boot_from_storage_4_Windows_EFI_GPT
Boot_menu_for_other_OS>Boot_from_storage_2_masking
Boot_menu_for_other_OS>Boot_from_storage_3_masking
Boot_menu_for_other_OS>Boot_from_storage_4_masking
Boot_menu_for_other_OS>Boot_from_storage_2_without_masking
Boot_menu_for_other_OS>Boot_from_storage_3_without_masking
Boot_menu_for_other_OS>Boot_from_storage_4_without_masking"

#Старые пункт:
#UBLinux Desktop Enterprise 2405 - Полное сохранение HDD
#UBLinux Desktop Enterprise 2405 - Песочница в RAM с сохранением профиля пользователя HDD
#UBLinux Desktop Enterprise 2405 - Полная песочница в RAM
#UBLinux Desktop Enterprise 2405 - Сохранение в модуль HDD
#Меню дополнительное>UBLinux Desktop Enterprise 2405 - Песочница на HDD с сохранением профиля пользователя HDD
#Меню дополнительное>UBLinux Desktop Enterprise 2405 - Полная песочница на HDD
#Меню выбора загрузки других ОС>Загрузка Windows используя bootmgr (7, 8, 8.1, 10, 11, 12)
#Меню выбора загрузки других ОС>Загрузка Windows используя ntldr (XP)
#Меню выбора загрузки других ОС>Загрузка Windows BIOS MBR
#Меню выбора загрузки других ОС>Загрузка Windows EFI boot раздел MBR
#Меню выбора загрузки других ОС>Загрузка с диска №1, Windows EFI boot раздел MBR
#Меню выбора загрузки других ОС>Загрузка с диска №2, Windows EFI boot раздел MBR
#Меню выбора загрузки других ОС>Загрузка с диска №3, Windows EFI boot раздел MBR
#Меню выбора загрузки других ОС>Загрузка с диска №4, Windows EFI boot раздел MBR
#Меню выбора загрузки других ОС>Загрузка Windows EFI boot раздел GPT
#Меню выбора загрузки других ОС>Загрузка с диска №1, Windows EFI boot раздел GPT
#Меню выбора загрузки других ОС>Загрузка с диска №2, Windows EFI boot раздел GPT
#Меню выбора загрузки других ОС>Загрузка с диска №3, Windows EFI boot раздел GPT
#Меню выбора загрузки других ОС>Загрузка с диска №4, Windows EFI boot раздел GPT
#Меню выбора загрузки других ОС>Загрузка с диска №2, маскируем диск под первый загрузочный
#Меню выбора загрузки других ОС>Загрузка с диска №3, маскируем диск под первый загрузочный
#Меню выбора загрузки других ОС>Загрузка с диска №4, маскируем диск под первый загрузочный
#Меню выбора загрузки других ОС>Загрузка с диска №2, без маскировки
#Меню выбора загрузки других ОС>Загрузка с диска №3, без маскировки
#Меню выбора загрузки других ОС>Загрузка с диска №4, без маскировки

#    FILE_OSRELEASE="/usr/lib/os-release"
#    NAME_DISTRIB=$(sed -En "/VARIANT=/{s/VARIANT=\"(.*)\"/\1/p}" ${FILE_OSRELEASE})
#    VER_DISTRIB=$(sed -En "/VERSION_ID=/{s/VERSION_ID=(.*)/\1/p}" ${FILE_OSRELEASE})
#
#    FILE_GRUB_MAIN="${PATH_GRUB}/ublinux/grub_main.cfg"
#    if [[ -f ${FILE_GRUB_MAIN} ]]; then
#        sed -En "/menuentry/{
#	    /(ISO|Install|Установка)/!{
#	        s/^[ \t]*//
#	        s/\\$\{NAME_DISTRIB\}/${NAME_DISTRIB}/
#	        s/\\$\{VER_DISTRIB\}/${VER_DISTRIB}/
#	        s/menuentry \"(.*${NAME_DISTRIB}.*${VER_DISTRIB}.*)\" .*/\1/p
#	    }
#        }" ${FILE_GRUB_MAIN}
#    fi
#
#
#    FILE_GRUB_ADDON="${PATH_GRUB}/ublinux/grub_addon.cfg"
#    if [[ -f ${FILE_GRUB_ADDON} ]]; then
#        NAME_MENU_GRUB_ADDON=$(sed -En "/${FILE_GRUB_ADDON##*/}/{x;{s/menuentry \"(.*)\" .*/\1/p};d;}; x" ${FILE_GRUB_MAIN})
#        sed -En "/menuentry/{
#	    /(ISO|Install|Установка)/!{
#	        s/^[ \t]*/${NAME_MENU_GRUB_ADDON}>/
#	        s/\\$\{NAME_DISTRIB\}/${NAME_DISTRIB}/
#	        s/\\$\{VER_DISTRIB\}/${VER_DISTRIB}/
#	        s/menuentry \"(.*${NAME_DISTRIB}.*${VER_DISTRIB}.*)\" .*/\1/p
#	    }
#        }" ${FILE_GRUB_ADDON}
#    #"
#    fi
#
#    FILE_GRUB_BOOTHDD="${PATH_GRUB}/ublinux/grub_boothdd.cfg"
#    if [[ -f ${FILE_GRUB_BOOTHDD} ]]; then
#        NAME_MENU_GRUB_BOOTHDD=$(sed -En "/${FILE_GRUB_BOOTHDD##*/}/{x;{s/menuentry \"(.*)\" .*/\1/p};d;}; x" ${FILE_GRUB_MAIN})
#        sed -En "/menuentry/{
#	    /(Back|Возврат)/!{
#	        s/^[ \t]*/${NAME_MENU_GRUB_BOOTHDD}>/
#	        s/\\$\{VER_DISTRIB\}/${VER_DISTRIB}/
#	        s/menuentry \"(.*)\" .*/\1/p
#	    }
#        }" ${FILE_GRUB_BOOTHDD}
#    #"
#    fi
#
#    FILE_GRUB_LOCAL="${PATH_GRUB}/ublinux/grub_local.cfg"
#    if [[ -f ${FILE_GRUB_LOCAL} ]]; then
#        NAME_MENU_GRUB_LOCAL=$(sed -En "/${FILE_GRUB_LOCAL##*/}/{x;{s/menuentry \"(.*)\" .*/\1/p};d;}; x" ${FILE_GRUB_MAIN} | sed -E "s/^[[:blank:]]//")
#        sed -En "/menuentry/{
#	    /(Back|Возврат)/!{
#	        s/^[ \t]*/${NAME_MENU_GRUB_LOCAL}>/
#	        s/\\$\{VER_DISTRIB\}/${VER_DISTRIB}/
#	        s/menuentry \"(.*)\" .*/\1/p
#	    }
#        }" ${FILE_GRUB_LOCAL}
#    #"
#    fi
}

exec_get_last_menuentry(){
## Показать последний выбранный вариант загрузки
    FILE_GRUBENV="${PATH_GRUB}/grubenv"
    sed -En "/saved_entry=/{s/saved_entry=(.*)/\1/p}" ${FILE_GRUBENV}
}

################
##### MAIN #####
################

    # Если файл подключен как ресурс с функциями, то выйти
    return 0 2>/dev/null && return 0
    if [[ -z $@ ]]; then
	true
    else
	FUNCTION=
	while [[ $# -gt 0 ]]; do
	    declare -f "${1}" &>/dev/null && FUNCTION+="; ${1}" || FUNCTION+=" '${1//\'/}'"
	    shift
	done
	eval ${FUNCTION#*; }
    fi

