mirror of
https://github.com/RetroDECK/RetroDECK.git
synced 2024-11-27 00:05:37 +00:00
196 lines
5.1 KiB
Bash
Executable file
196 lines
5.1 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
# Copyright (C) 2019-present Shanti Gilbert (https://github.com/shantigilbert)
|
|
# Copyright (C) 2020-present Fewtarius
|
|
|
|
# This content was taken from 99-distribution.conf and made as a shell script for steam deck
|
|
# TODO: remove absolute paths and put the variables INSTALL_DIR
|
|
|
|
export PATH="$PATH:/usr/local/bin:/usr/bin:/storage/bin"
|
|
|
|
export SDL_GAMECONTROLLERCONFIG_FILE="~/retrodeck/storage/.config/SDL-GameControllerDB/gamecontrollerdb.txt"
|
|
|
|
EE_DIR="~/retrodeck/storage/.config/distribution"
|
|
EE_CONF="${EE_DIR}/configs/distribution.conf"
|
|
ES_CONF="~/retrodeck/storage/.emulationstation/es_settings.cfg"
|
|
EE_DEVICE=$(cat ~/retrodeck/storage/.config/.OS_ARCH)
|
|
JSLISTENCONF="~/retrodeck/storage/.config/distribution/configs/jslisten.cfg"
|
|
|
|
get_ee_setting() {
|
|
# Argument $1 is the setting name, EmuELEC settings alway start with ee_ e.g. ee_novideo
|
|
# Usage: get_ee_setting setting [platform] [rom]
|
|
# Only the setting argument is required
|
|
# Priority is: GAME, PLATFORM, GLOBAL, EE_SETTING if at any point one returns 0 it means its dissabled, if it returns empty it will continue onto the next one.
|
|
|
|
SETTING="${1}"
|
|
PLATFORM="${2}"
|
|
ROM="${3}"
|
|
|
|
#ROM
|
|
ROM=$(echo [\"${ROM}\"] | sed -e 's|\[|\\\[|g' | sed -e 's|\]|\\\]|g' | sed -e 's|(|\\\(|g' | sed -e 's|)|\\\)|g')
|
|
PAT="^${PLATFORM}${ROM}[.-]${SETTING}=(.*)"
|
|
EES=$(cat "${EE_CONF}" | grep -oE "${PAT}")
|
|
EES="${EES##*=}"
|
|
|
|
if [ -z "${EES}" ]; then
|
|
#PLATFORM
|
|
PAT="^${PLATFORM}[.-]${SETTING}=(.*)"
|
|
EES=$(cat "${EE_CONF}" | grep -oE "${PAT}")
|
|
EES="${EES##*=}"
|
|
fi
|
|
|
|
if [ -z "${EES}" ]; then
|
|
#GLOBAL
|
|
PAT="^global[.-]${SETTING}=(.*)"
|
|
EES=$(cat "${EE_CONF}" | grep -oE "${PAT}")
|
|
EES="${EES##*=}"
|
|
fi
|
|
|
|
if [ -z "${EES}" ]; then
|
|
#EE_SETTINGS
|
|
PAT="^${SETTING}=(.*)"
|
|
EES=$(cat "${EE_CONF}" | grep -oE "${PAT}")
|
|
EES="${EES##*=}"
|
|
fi
|
|
|
|
echo "${EES}"
|
|
}
|
|
|
|
set_ee_setting() {
|
|
# argument $1 is the setting name e.g. nes.integerscale. $2 is the value, e.g "1"
|
|
sed -i "/$1=/d" "${EE_CONF}"
|
|
[ $2 == "disable" ] && echo "#${1}=" >> "${EE_CONF}" || echo "${1}=${2}" >> "${EE_CONF}"
|
|
}
|
|
|
|
get_es_setting() {
|
|
echo $(sed -n "s|\s*<${1} name=\"${2}\" value=\"\(.*\)\" />|\1|p" ${ES_CONF})
|
|
}
|
|
|
|
|
|
normperf() {
|
|
# A foo function as in steam deck is not needed, however sometime it's called and I am lazy to edit everything, sorry -Xargon
|
|
return
|
|
}
|
|
|
|
maxperf() {
|
|
# A foo function as in steam deck is not needed, however sometime it's called and I am lazy to edit everything, sorry -Xargon
|
|
return
|
|
}
|
|
|
|
|
|
ee_check_bios() {
|
|
|
|
PLATFORM="${1}"
|
|
CORE="${2}"
|
|
EMULATOR="${3}"
|
|
ROMNAME="${4}"
|
|
LOG="${5}"
|
|
|
|
if [[ -z "$LOG" ]]; then
|
|
LOG="/tmp/logs/exec.log"
|
|
cat /etc/motd > "$LOG"
|
|
fi
|
|
|
|
MISSINGBIOS="$(batocera-systems --strictfilter ${PLATFORM})"
|
|
if [ "$?" == "2" ]; then
|
|
|
|
# formating so it looks nice :)
|
|
PLATFORMNAME="${MISSINGBIOS##*>}" # read from -P onwards
|
|
PLATFORMNAME="${PLATFORMNAME%%MISSING*}" # until a space is found
|
|
PLATFORMNAME=$(echo $PLATFORMNAME | sed -e 's/\\n//g')
|
|
|
|
if [[ -f "${LOG}" ]]; then
|
|
echo "${CORE} ${EMULATOR} ${ROMNAME}" >> $LOG
|
|
echo "${PLATFORMNAME} missing BIOS - Could not find all BIOS: " >> $LOG
|
|
echo "please make sure you copied the files into the corresponding folder " >> $LOG
|
|
echo "${MISSINGBIOS}" >> $LOG
|
|
fi
|
|
MISSINGBIOS=$(echo "$MISSINGBIOS" | sed -e 's/$/\\n/g')
|
|
|
|
/usr/bin/error.sh "${PLATFORMNAME} missing BIOS" "Could not find all BIOS/files in /storage/roms, the game may not work:\n\n ${MISSINGBIOS}\n\nPlease make sure you copied the files into the corresponding folder."
|
|
error_process="$!"
|
|
pkill -P $error_process
|
|
fi
|
|
}
|
|
|
|
message_stream () {
|
|
local MESSAGE=$1
|
|
local DELAY=$2
|
|
local LOADBUFFER=0
|
|
local ANSI=0
|
|
for (( i=0; i<${#MESSAGE}; i++ ))
|
|
do
|
|
CHAR="${MESSAGE:$i:1}"
|
|
# Is this an escape character?
|
|
if [ "${CHAR}" == "\\" ]
|
|
then
|
|
LOADBUFFER=1
|
|
BUFFER="$BUFFER${CHAR}"
|
|
continue
|
|
fi
|
|
|
|
# Is this ANSI? (\e[*[a-Z])
|
|
if [ "${BUFFER}" == "\e[" ] && [ "${LOADBUFFER}" -eq 1 ]
|
|
then
|
|
ANSI=1
|
|
BUFFER="$BUFFER${CHAR}"
|
|
continue
|
|
fi
|
|
|
|
if [ "${LOADBUFFER}" -eq 1 ] && [ "${ANSI}" -eq 1 ]
|
|
then
|
|
# If it isn't ANSI it's a control char like \n
|
|
if [[ "${CHAR}" =~ [a-Z] ]]
|
|
then
|
|
echo -ne "${BUFFER}${CHAR}" >/dev/console
|
|
unset BUFFER
|
|
LOADBUFFER=0
|
|
ANSI=0
|
|
fi
|
|
else
|
|
# otherwise it's text
|
|
echo -ne "${BUFFER}${CHAR}" >/dev/console
|
|
unset BUFFER
|
|
LOADBUFFER=0
|
|
ANSI=0
|
|
fi
|
|
sleep ${DELAY}
|
|
done
|
|
}
|
|
|
|
spinny_cursor() {
|
|
message_stream "$1" 0
|
|
for (( c=0; c<=$2; c++ ))
|
|
do
|
|
echo -ne '\e[2D' '-' > /dev/console
|
|
sleep .01
|
|
echo -ne '\e[2D' '\\' > /dev/console
|
|
sleep .01
|
|
echo -ne '\e[2D' '|' > /dev/console
|
|
sleep .01
|
|
echo -ne '\e[2D' '/' > /dev/console
|
|
sleep .01
|
|
done
|
|
echo -ne '\e[80D\e[K' > /dev/console
|
|
}
|
|
|
|
jslisten() {
|
|
# A foo function as in steam deck is not needed, however sometime it's called and I am lazy to edit everything, sorry -Xargon
|
|
return
|
|
}
|
|
|
|
|
|
# 351EDECK specific code
|
|
|
|
export -f get_ee_setting
|
|
export -f set_ee_setting
|
|
export -f get_es_setting
|
|
export -f maxperf
|
|
export -f normperf
|
|
export -f ee_check_bios
|
|
export -f message_stream
|
|
export -f spinny_cursor
|
|
#export -f jslisten
|
|
#export -f init_port
|