#!/bin/bash

_save_profile(){ if [ -f "$menudir/$_toolchainname.save" ];then source "$menudir/$_toolchainname.save";input=$("$gui" "$st_" "$bt_" "$title_" --title " -[ $1 Toolchain ]- " $ip_ "\n SAVE PROFILE\n" 0 0 "$_toolchainname");echo $enabled $usevars | sed -e 's/CARDREADER_//g;s/READER_//g;s/MODULE_//g;s/HAVE_//g;s/WEBIF_//g;s/WITH_//g;s/CS_//g;s/_CHARSETS//g;s/CW_CYCLE_CHECK/CWCC/g;s/SUPPORT//g;' >"$profdir/$input.profile";fi;};
_systype(){ systype="bad";case "$(uname -m)" in x86|x86_64|amd64|i686) systype="ok";;esac; };auto_langset(){ langset="fail";cd "$tdir";langsupport=(*);if [ -f "$configdir/force_lang" ];then lng1=$(head -n 1 "$configdir/force_lang");for lng in "${langsupport[@]}";do if [ "$lng" == "$lng1" ];then source "$tdir/$lng";langset="ok";return;fi;done;fi;for lng in "${langsupport[@]}";do if [ "${LANG:0:2}" == "$lng" ];then source "$tdir/$lng";langset="ok";return;fi;done;if [ ! "$langset" == "ok" ];then [ -f "$tdir/en" ] && source "$tdir/en";fi;};
lang_select(){ lng="none";[ -f "$configdir/force_lang" ] && lng=$(head -n 1 "$configdir/force_lang");unset MENU_OPTIONS;COUNT=0;for e in "${langsupport[@]}";do if [ "$lng" == "none" ];then [ "${LANG:0:2}" == "$e" ] && _stat="on" || _stat="off";else [ "$lng" == "$e" ] && _stat="on" || _stat="off";fi;txt=$(head -3 "$tdir/$e" |tail -1);MENU_OPTIONS+=($e $txt $_stat);counter;done;lng=$("$gui" "$st_" "$bt_" "$title_" --title "-[ lang set ...to edit... ]-" "$rl_" "...langset...to...edit..." "${COUNT+7}" 40 0 "${MENU_OPTIONS[@]}");if [ ! "${LANG:0:2}" == "$lng" ];then for lng1 in "${langsupport[@]}";do if [ "$lng" == "$lng1" ];then echo "$lng" >"$configdir/force_lang";fi;done;else [ -f "$configdir/force_lang" ] && rm -rf "$configdir/force_lang";fi;};
_pcsc_on(){  sed -i 's@^//#define CARDREADER_PCSC 1@#define CARDREADER_PCSC 1@g' "$svndir/config.h";};_pcsc_off(){ sed -i 's@^#define CARDREADER_PCSC 1@//#define CARDREADER_PCSC 1@g' "$svndir/config.h";};_stapi5_on(){  sed -i 's@^//#define CARDREADER_STAPI5 1@#define CARDREADER_STAPI5 1@g' "$svndir/config.h";};_stapi5_off(){ sed -i 's@^#define CARDREADER_STAPI5 1@//#define CARDREADER_STAPI5 1@g' "$svndir/config.h";};
_pre_build(){ _oscamconfdir_default="";_oscamconfdir_custom="";source "$tccfgdir/$1";clear;_nl;echo $WH;ologo;_tcfile="";dln="$(decode "$_t1e")$(decode "$_toolchainfilename")";tc_dl="$dldir/$dln";if [ -f "$tcdir/$_toolchainname/bin/$_compiler""gcc" ];then if [ "$run" == "0" ];then echo -e "$w_l  toolchain :$y_l $_toolchainname";echo -e "$w_l     status :$g_l compiler $txt_found ";echo -e "$w_l   compiler :$p_l $_compiler""gcc";else echo -e "$w_l  toolchain :$y_l $_toolchainname      ";echo -e "$w_l    recheck :$g_l ok $txt_now compiler $txt_found";echo -e "$w_l   compiler :$p_l $_compiler""gcc      ";fi;else [ "$run" == "1" ] && echo "$txt_error : build not possible" && exit;_nl;echo -e  "$w_l    toolchain :$y_l $_toolchainname   ";echo -e  "$w_l       status :$r_l compiler $txt_not_found";echo -en "$w_l  backupcheck : ";if [ -f "$dldir/$dln" ];then echo -e  "$g_l$dln $txt_found";echo -en "$w_l     $txt_extracting :$y_l $txt_wait";_console_extract_toolchain;run=1;else echo -e  "$r_l$dln $txt_not_found ";echo -en "$w_l     $txt_loading :$g_l ";_pget;_nl;echo -en "$w_l     $txt_extracting :$y_l $txt_wait";_console_extract_toolchain 1;run=1;fi;_pre_build "$1";fi;_cmd_build "$_toolchainname";};
_load_profile(){ if [ "$(ls -A "$profdir")" ];then ok=0;loadprofile="no";USESTRING=;_create_module_arrays;unset selection;declare -a SELECTION;cd "$profdir";p_files=(*.profile);i=0;for e in "${p_files[@]}";do ((i++));SELECTION+=($e '<');done;pselect=$("$gui" "$st_" "$bt_" "$title_" --no-cancel --title " -[ $txt_select_profile_title ]- " --menu "\n $txt_select_profile\n\n" 0 0 "$i" "${SELECTION[@]}");[ $? = 255 ] && loadprofile="yes" && _toolchain_build_menu;"$gui" "$st_" "$bt_" "$title_" --yesno "\n$txt_confirm_profile_select\n\n$pselect\n\n" 0 0;response=$?;case "$response" in 1)loadprofile="yes";_toolchain_build_menu;;255)loadprofile="yes";_toolchain_build_menu;;esac;if [ -f "$profdir/$pselect" ];then profile_vars=$(cat "$profdir/$pselect";);reset_="$("$svndir/config.sh" -D all)";for e in "${!USE_vars[@]}";do USE_vars[$e]=;done;for e1 in $profile_vars;do for e2 in "${!USE_vars[@]}";do [ "$e1" == "$e2" ] && USE_vars[$e1]="$e1=1";done;for sm in "${SHORT_MODULENAMES[@]}";do if [ "$e1" == "$sm" ];then _em_="$_em_ $(get_module_name "$sm")";fi;done;done;_set_=$("$svndir/config.sh" -E $_em_);USESTRING="$(echo "${USE_vars[@]}"| sed 's@USE_@@g' | sed 's@=1@@g'| tr -s ' ')";loadprofile="yes";fi;else $gui --msgbox "\n$txt_no_profile_found \n " 0 0;fi;loadprofile="no";};
svnup(){ echo -en "$c_l";clear;ologo;i=1;if [ -d "$svndir" ];then echo -en "$p_l\n  $txt_update oscam-svn $re_\n";else checkout;return;fi;echo -en "\n$w_l  SVN TrunkURL  : $g_l""$trunkurl""$re_";svn co "$trunkurl" "$svndir" -q;if [ -f "$svndir/config.sh" ];then tput cup 10 2;echo -e "$w_l""SVN Revision  : ""$y_l$("$svndir/config.sh" -r) $b_l$mac_$re_\n$w_l  SVN UserPath  : $y_l""$svndir\n$re_";fi;if [ -f "$svndir/config.h" ];then reset_="$("$svndir/config.sh" -R)";_fix_config_h;fi;};
checkout(){ echo -en "$c_l";fc1="$(mktemp)";clear;ologo;i=0;COUNT=0;if [ -d "$svndir" ];then rm -rf "$svndir";echo -e "$p_l\n  $txt_delete $txt_existing oscam-svn $re_\n";else echo -e "$p_l\n  $txt_no oscam-svn $txt_found\n$re_";fi;echo -e  "$w_l  SVN TrunkURL  : $g_l$trunkurl$re_";[ ! -z "$1" ] && [ $(($1)) -gt 6999 ] && opt_="-r$1" && mac_="($txt_selected)" || opt_='';echo -en "$w_l  SVN FileCount : ";svn info -R "$trunkurl" |grep '^URL' |uniq |wc -l >"$fc1";n=$(cat "$fc1");echo -e "$g_l""$txt_found $n";echo -en "$w_l  SVN checkout  : ";while read line filename;do counter=$(( 100*(++i)/n));tput cup 11 18;[ "$counter" -lt "100" ] && echo -en "$g_l""$counter%$re_" || echo -en "$g_l""100%$re_";done < <( svn co "$trunkurl" $opt_ "$svndir" |sed "s|$svndir/||g");tput cup 11 18;echo -en "$g_l""100%$re_";if [ -f "$svndir/config.sh" ];then tput cup 12 2;echo -en "$w_l""SVN Revision  : $y_l""$("$svndir/config.sh" -r) $b_l$mac_$re_\n$w_l  SVN UserPath  : $y_l""$svndir";fi;[ -f "$svndir/config.h" ]&& reset_="$("$svndir/config.sh" -R)";_fix_config_h;rm -rf "$fc1";_nl;[ -f "$workdir/SVN-IS-PATCHED" ] && rm -f "$workdir/SVN-IS-PATCHED";tarsvn;};
svnrestore(){ clear;echo -en "$c_l";ologo;if [ "$1" == "list" ];then cd "$bsvn";bfiles="$(find . -type f |sed 's|./||' |sed 's|.tar.gz||')";bcount=$(echo "$bfiles" |wc -w);if [ "$bcount" -gt "0" ];then echo -e "\n$c_l    $bcount$w_l svn backups found\n    ____________________$re_\n";for b in $bfiles;do echo -e "$c_l    --> $w_l$b";done;_nl;else echo -e "\n$r_l    $bcount$w_l svn backups found\n    ____________________$re_\n";fi;exit;fi;if [ -d "$svndir" ];then rm -rf "$svndir";echo -e "$p_l\n  $txt_delete $txt_existing oscam-svn $re_\n";else echo -e "$p_l\n  $txt_no oscam-svn $txt_found\n$re_";fi;untarsvn $1;[ -f "$svndir/config.h" ]&& echo -en "$w_l""  SVN Revision  : $y_l""$("$svndir/config.sh" -r) restored\n\n$re_";};
quicksvnrestore(){ untarsvn $1;};tarsvn(){ cd "$workdir";if [ -f "$svndir/config.sh" ];then cat "$svndir/config.sh" >"$configdir/config.sh.master";[ -f "$svndir/Makefile" ]&& cat "$svndir/Makefile" >"$configdir/Makefile.master";echo -en "$w_l  SVN Backup    :$c_l ";	tar -zcf "$bsvn/$("$svndir/config.sh" -r).tar.gz" oscam-svn;fi;cd "$bsvn";ln -sf "$bsvn/$("$svndir/config.sh" -r).tar.gz" "last.tar.gz";echo -e "done\n$re_";};
untarsvn(){ cd "$workdir";[ -d oscam-svn ] && rm -rf oscam-svn;if [ -z "$1" ];then [ -f "$bsvn/last.tar.gz" ] && tar -xf "$bsvn/last.tar.gz";else if [ -f "$bsvn/$1.tar.gz" ];then tar -xf "$bsvn/$1.tar.gz";cd $bsvn;ln -sf "$bsvn/$("$svndir/config.sh" -r).tar.gz" "last.tar.gz";else if [ -f "$bsvn/last.tar.gz" ];then tar -xf "$bsvn/last.tar.gz";else echo -en "$w_l  SVN Backup    :$r_l $txt_not_found";sleep 3;checkout;fi;fi;fi;[ -f "$workdir/SVN-IS-PATCHED" ] && rm -f "$workdir/SVN-IS-PATCHED";};
svnpatch(){ if [ ! -f "$workdir/SVN-IS-PATCHED" ];then clear;echo -e $C;ologo;unset patchlist;cd "$pdir";patchlist=(*.patch);if [ "$(ls -A "$pdir"/*.patch 2>/dev/null)" ];then touch "$workdir/SVN-IS-PATCHED";for p in "${patchlist[@]}";do echo -e $WH"\n\n    -> $p <-\n"$W;sleep 1;patch -d$svndir/ -p0 < "$pdir/$p" |sed -e "s/^patching file/$G patching > $WH/g;s/^Hunk/$P Hunk     > $Y/g;s/FAILED/$R FAILED/g; ;s/-- saving/$Y -- saving/g;";done;else echo -e $WH"    $txt_no patch $txt_found";fi;else clear;echo -e $C;ologo;echo -e $WH"    already patched";fi;echo -e $W;};
_dialog_checkout(){ upc="$(mktemp)";(echo -en " $txt_verify_syscheck ";[ "$sanity" == "1" ] && echo -e "ok" && sleep 1;if [ "${s3cfg_vars[NO_SVN_AUTOUPDATE]}" == "0" ];then echo -en  " $txt_verify_svn ";if [ -f "$svndir/config.sh" ];then echo "ok";sleep 1;echo -en " $txt_update_svn $txt_wait\n";cd "$svndir";svn -q update;echo 1 >"$upc";sleep 1;fi;fi;) | "$gui" "$st_" "$bt_" "$title_" "$pb_" 5 52;if [ "${s3cfg_vars[NO_SVN_AUTOUPDATE]}" == "0" ];then upc1=$(cat "$upc" 2>/dev/null);rm -f "$upc";[ ! "$upc1" == "1" ] && _dialog_checkout1;if [ -f "$svndir/config.sh" ];then reset_="$("$svndir/config.sh" -R)";_fix_config_h;fi;_get_config_menu;fi;if [ -n "$1" ];then if [ -f "$tccfgdir/$1" ] && [ -f "$svndir/config.sh" ];then source "$tccfgdir/$1";if [ ! -f "$tcdir/$_toolchainname/bin/$_compiler""gcc" ];then first="$1";_toolchain_gui_install;fi;loadprofile="yes";_toolchain_build_menu "$1";else _select_menu;fi;fi;_select_menu;};
_dialog_checkout1(){ rm -rf "$svndir" 2>/dev/null;COUNT=0;[ -z "$1" ] && rn=0 || rn="$1";if [ "$rn" -ge "7000" ];then _rev="-r $rn";sc_text="Revision: $rn";else _rev='';sc_text="$txt_latest";fi;(echo -en "$txt_prepare_svn $txt_wait";)| "$gui" "$st_" "$bt_" "$title_" "$pb_" 3 55;nnn="$(svn info $_rev -R "$trunkurl" |grep "^URL: " |uniq |wc -l)";"$gui" "$st_" "$bt_" "$title_" --title " -[ SVN Checkout $sc_text ]- " --gauge "  $txt_wait" 6 75 < <(while read line filename;do ((++i));PCT=$(( 100*i/(nnn+1) ));cat <<EOF
XXX
$PCT
  $line
XXX
EOF
done < <(svn co "$trunkurl" "$svndir" $_rev| sed "s@$svndir@@g"| awk '{print $2}';cd "$svndir";if [ -f "$svndir/config.sh" ];then reset_="$("$svndir/config.sh" -R)";echo "Revision: $(REVISION) done...";_fix_config_h;[ -f "$workdir/SVN-IS-PATCHED" ] && rm -f "$workdir/SVN-IS-PATCHED";_get_config_menu;fi;));};
save_master(){ [ -f "$svndir/config.sh" ]&& cat "$svndir/config.sh" >"$configdir/config.sh.master";[ -f "$svndir/Makefile" ]&& cat "$svndir/Makefile" >"$configdir/Makefile.master";};_sz(){ lmin=24;lmax=40;_lin=$(tput lines);cmin=79;cmax=200;_col=$(tput cols);if [ "$_lin" -gt "$lmin" ];then if [ "$_lin" -lt "$lmax" ] || [ "$_lin" -eq "$lmax" ];then _lines="$((_lin-6))";fi;if [ "$_lin" -gt "$lmax" ];then _lines="$((lmax-6))";fi;fi;if [ "$_col" -gt "$cmin" ];then if [ "$_col" -lt "$cmax" ] || [ "$_col" -eq "$cmax" ];then _cols="$((_col-6))";fi;if [ "$_col" -gt "$cmax" ];then _cols="$((cmax-6))";fi;fi;};
sysinfo(){ echo -e "$g_l\nSYSTEM$w_l";system_info=$(which lsb_release);[ ${#system_info} -ge 11 ] && lsb_release -irc;echo -e "Uptime:\t\t$(uptime -p)";echo -e "$g_l\nMEMORY$w_l";free -mot | awk '/Mem/{print "Memory:\t\tTotal: " $2 "Mb\tUsed: " $3 "Mb\tFree: " $4 "Mb"} /Swap/{print "Swap:\t\tTotal: " $2 "Mb\tUsed: " $3 "Mb\tFree: " $4 "Mb\n"}';lsblk;echo -e "$g_l\nCPU$w_l";cpu_info=$(which lscpu);[ ${#cpu_info} -ge 5 ] && lscpu | grep -iE 'model name|vendor id|Architecture|per socket|MHz';echo -e "$g_l\nNetwork";echo -e "$w_l""Hostname:\t$HOSTNAME";ip -o addr | awk '/inet /{print "IP (" $2 "):\t" $4}';route -n | awk '/^0.0.0.0/{ printf "Gateway:\t"$2"\n" }';awk '/^nameserver/{ printf "Name Server:\t" $2 "\n"}' /etc/resolv.conf;echo -e "$re_";exit;};
_init_menu(){ IFS="#";COUNT=0;MENU_OPTIONS="BACK#$txt_back#";counter;};_select_menu(){ revision_="$(REVISION)";_menutext="Simplebuild V$SIMPLEVERSION by Gorgone";smenu=$(
"$gui" "$st_" "$bt_" "$title_" "$nc_" --title "-[ $txt_start_menu ]-" --menu "\n $_menutext" 13 55 7 "Continue" "$txt_firstmenu_continue r$revision_" "CHANGE" "$txt_firstmenu_chose" "CEDIT" "$txt_firstmenu_cedit" "LANG" "$txt_firstmenu_lang" "EXIT" "$txt_firstmenu_exit");[ $? = 255 ] && _select_menu;case $smenu in Continue)if [ ! -f "$svndir/config.sh" ];then "$gui" "$st_" "$bt_" "$title_" --infobox "\n  $txt_no oscam-svn $txt_found" 5 35;sleep 2;_select_menu;else _toolchain_main_menu;fi;;CHANGE) new_rev=$("$gui" "$st_" "$nc_" --cr-wrap "$ip_" "Revision: 7000+ \nRevision: 0 = $txt_latest" 9 35);[[ $new_rev =~ ^-?[0-9]+$ ]] && [ ! "$new_rev" -le "7000" ] && _rev="$new_rev" || _rev=0;_dialog_checkout1 "$_rev";_select_menu;;CEDIT) s3cfg_menu;_select_menu;;LANG) lang_select;cd "$workdir"; ./s3 menu;;EXIT) bye;;esac;exit;};_toolchain_add_menu(){ _fill_tc_array; _init_menu;for i in "${MISS_TCLIST[@]}";do if [ ! "$i" == "native" ];then source "$tccfgdir/$i";MENU_OPTIONS+="$_toolchainname#$_description#";counter;fi;done;MENU_OPTIONS+="EXIT#$txt_menu_builder1#";counter;out=$(
"$gui" "$st_" "$nc_" "$bt_" "$title_" --help-button --help-label INFO --title "-[ $txt_add_menu ]-" --menu "$txt_main_revision$(REVISION)" "${COUNT+8}" 75 0 ${MENU_OPTIONS[@]});IFS=$OIFS;first=$(echo "$out" | awk '{printf $1}');case $first in EXIT) bye;; BACK) _toolchain_main_menu;; *) _toolchain_gui_install;_toolchain_main_menu;;esac;};_toolchain_remove_menu(){ _fill_tc_array;_init_menu;if [ "$tcempty" == "0" ];then for i in "${INST_TCLIST[@]}"; do if [ ! "$i" == "native" ]; then source "$tccfgdir/$i";MENU_OPTIONS+="$_toolchainname#$_description#";counter;fi;done;fi;MENU_OPTIONS+="EXIT#$txt_menu_builder1#";counter;out=$(
"$gui" "$st_" "$nc_" "$bt_" "$title_" --title "-[ $txt_remove_menu ]-" --menu "$txt_main_revision$(REVISION)" "${COUNT+8}" 75 0 ${MENU_OPTIONS});IFS=$OIFS;first=$(echo "$out" | awk '{printf $1}');case $first in EXIT) bye;; BACK) _toolchain_main_menu;; *) [ -d "$tcdir/$first" ] && rm -rf "$tcdir/$first";_toolchain_main_menu;;esac;};
_toolchain_gui_install(){ [ -d "$tcdir/$first" ] && rm -rf "$tcdir/$first" && echo "$txt_delete $tcdir/$first";mkdir "$tcdir/$first";cd "$tcdir/$first";source "$tccfgdir/$first";tcname="$(decode "$_t1e$_toolchainfilename")";stcname="$(decode "$_toolchainfilename")";if [ -f "$dldir/$tcname" ];then (xz -d "$dldir/$tcname" -c| tar -xv) |"$gui" "$st_" --title " -[ $txt_extracting ]- " "$pb_" 20 74;else cd "$dldir";wget "$(decode "$_u1e")/$tcname" 2>&1 | stdbuf -o0 awk '/[.] +[0-9][0-9]?[0-9]?%/ { print substr($0,63,3) }' | "$gui" "$st_" "$bt_" "$title_" --title " -[ download ]- " --gauge "  $txt_loading $stcname $txt_wait" 6 74;cd "$tcdir/$first";(xz -d "$dldir/$tcname" -c |tar -xv) |"$gui" "$st_" --title " -[ $txt_extracting ]- " "$pb_" 20 74;fi;};
_oscam_extra_menu(){ uv=;check_smargo;unset MENU_OPTIONS;for e in "${!USE_vars[@]}";do if [ ! "$e" == "USE_TARGZ" ] && [ ! "$e" == "USE_COMPRESS" ] && [ ! "$e" == "USE_PATCH" ] && [ ! "$e" == "USE_LIBUSB" ];then if [ "${#USE_vars[$e]}" -gt "4" ];then MENU_OPTIONS+=( "$e" "$e" on );else MENU_OPTIONS+=( "$e" "$e" off );fi;fi;done;oextra=$("$gui" "$st_" "$nc_" "$bt_" "$title_" --title "-[ Oscam EXTRA ]-" "$cl_" " OPTIONS " 19 40 12 ${MENU_OPTIONS[@]});[ $? = 255 ] && _toolchain_extra_menu;for e in "${!USE_vars[@]}";do if [ ! "$e" == "USE_TARGZ" ] && [ ! "$e" == "USE_COMPRESS" ] && [ ! "$e" == "USE_PATCH" ] && [ ! "$e" == "USE_LIBUSB" ];then ok=0;for oex in $oextra;do o=$(echo "$oex" | tr -d '"');[ "$e" == "$o" ] && ok=1;done;if [ "$ok" == "1" ];then USE_vars[$e]="$e=1";else USE_vars[$e]=;fi;fi;done;[ "${USE_vars[USE_PCSC]}" == "USE_PCSC=1" ] && _pcsc_on;[ ! "${USE_vars[USE_PCSC]}" == "USE_PCSC=1" ] && _pcsc_off;save_config;_toolchain_config_menu;};
_build_extra_menu(){ us=;check_smargo;unset MENU_OPTIONS;for e in USE_COMPRESS USE_TARGZ USE_PATCH;do [ "${#USE_vars[$e]}" -gt "4" ] && MENU_OPTIONS+=( "$e" "$e=1" on ) || MENU_OPTIONS+=( "$e" "$e=1" off );done;bextra=$("$gui" "$st_" "$nc_" "$bt_" "$title_" --title "-[ Build EXTRA ]-" "$cl_" " OPTIONS " 10 40 3 ${MENU_OPTIONS[@]});[ $? = 255 ] && _build_extra_menu;USE_vars[USE_COMPRESS]=;USE_vars[USE_PATCH]=;USE_vars[USE_TARGZ]=;for bex in $bextra;do b=$(echo "$bex" | tr -d '"');USE_vars[$b]="$b=1";done;save_config;_toolchain_config_menu;};
_pget(){ tc_dl="$dldir/$(decode "$_t1e""$_toolchainfilename")";[ -f "$tc_dl" ] && rm -rf "$tc_dl";tput civis;cd "$dldir";wget -N --progress=dot "$(decode "$_u1e")/$dln" 2>&1 |grep --line-buffered "%" |awk '{ printf "\033[12;17H\033[K%-4s ", $7;} { printf "'"$txt_wait >"'"; } { printf " %-6s",$9; }';echo -e "\033[12;17H\033[K100% done...                    ";tput cnorm;};
_clean(){ [ -L "$workdir/lastbuild.log" ] && rm -rf "$workdir/lastbuild.log";clear;echo -e "$w_l";ologo;for e in "$menudir" "$bdir" "$ldir" "$tcdir";do echo -e "  $r_l$txt_delete$w_l\t$e"| sed "s@$workdir@@g";done;rm -rf "$menudir" "$bdir" "$ldir" "$tcdir" 2>/dev/null;for e in "$menudir" "$bdir" "$ldir" "$tcdir";do echo -e "  $g_l$txt_create$w_l\t$e"| sed "s@$workdir@@g";done;mkdir -p "$menudir" "$bdir" "$ldir" "$tcdir" 2>/dev/null;_nl;};
_fill_tc_array(){ unset AVAI_TCLIST;unset INST_TCLIST;tcempty=0;cd "$tccfgdir";[ "$(ls -A "$tccfgdir")" ] && AVAI_TCLIST=(*) || echo "error fix it";cd "$tcdir";if [ "$(ls -A "$tcdir")" ];then tmp_tclist=(*);for t in "${tmp_tclist[@]}";do for a in "${AVAI_TCLIST[@]}";do [ "$t" == "$a" ] && INST_TCLIST+=($t);done;done;else tcempty=1;fi;if [ "$tcempty" == "1" ];then MISS_TCLIST=$(echo ${AVAI_TCLIST[@]} |sort);else MISS_TCLIST=($(for el in $(diff_array AVAI_TCLIST[@] INST_TCLIST[@]);do echo "$el";done |sort));fi;};
_pre_main_menu(){ IFS="#";COUNT=0;MENU_OPTIONS="EXIT#$txt_menu_builder1#";counter;MENU_OPTIONS=${MENU_OPTIONS}"ADD#$txt_menu_builder2#";counter;if [ "$tcempty" == "0" ];then MENU_OPTIONS="${MENU_OPTIONS}REMOVE#$txt_menu_builder3#";counter;fi;MENU_OPTIONS="${MENU_OPTIONS}NATIVE#$txt_menu_builder4$native#";counter;_a=$(uname -m);if [ "$systype" == "ok" ];then if [ "$tcempty" == "0" ];then for i in "${INST_TCLIST[@]}";do source "$tccfgdir/$i";MENU_OPTIONS="${MENU_OPTIONS}$_toolchainname#$_description#";counter;done;fi;fi;out=$("$gui" --help-button --help-label INFO --title "-[ Toolchain Menu V$SIMPLEVERSION ]-" --menu "$txt_t_menu1$REVISION" "${COUNT+8}" 75 0 "${MENU_OPTIONS}");IFS=$OIFS;first=$(echo "$out" | awk '{printf $1}');tc_info=$(echo "$out" | awk '{printf $2}');if [ "$first" == "HELP" ];then if [ -f "$tccfgdir/$(echo "$out" | awk '{printf $2}')" ];then source "$tccfgdir/$tc_info";echo -e "\n\n\tinfobox $_tc_info";sleep 4;fi;fi;if [ "$first" == "EXIT" ];then bye;else toolchain_main_menu;fi;};_list_profiles(){ cd "$profdir";profiles=(*.profile);if [ ${#profiles[@]} -gt 0 ];then echo -e "$c_l";clear;slogo;echo -e "$y_l\n  $txt_profiles $txt_found $txt_for ( ./$(basename "$0") \"tcname\" -p=name.profile )";echo -e "$w_l  ======================================================\n";i=0;for e in "${profiles[@]}";do ((i++));echo -e "$w_l  ($i) > $e";done;fi;echo -e "\n$rs_";};ologo(){ echo -en "$w_h";printf "  %-s\n" "  ___  ____   ___" " / _ \\/ ___| / __|__ _ _ __ ___" "| | | \\___ \\| |  / _\` | '_ \` _ \ " "| |_| |___) | |_| (_| | | | | | |" " \\___/|____/ \\___\\__,_|_| |_| |_|" " ";};slogo(){ echo -en "$w_h";printf "  %-s\n" "     _                            _                         _ " " ___| |_ _ __ ___  __ _ _ __ ___ | |__   ___   __ _ _ __ __| |" "/ __| __| '__/ _ \/ _\` | '_ \` _ \| '_ \ / _ \ / _\` | '__/ _\` |" "\__ \ |_| | |  __/ (_| | | | | | | |_) | (_) | (_| | | | (_| |" "|___/\__|_|  \___|\__,_|_| |_| |_|_.__/ \___/ \__,_|_|  \__,_|" "                                                              ";};bye(){ clear;echo -en "$w_l";printf "\n\t\t simplebuild made for";echo -e "$c_l";slogo;echo -e "\e[8;50H \e[8;50f" && echo -en "$g_l\t\t\t\t\t\t by gorgone $re_";echo -e "\n";exit;exit;};REVISION(){ [ -d "$svndir" ] && cd "$svndir" && svnversion -n . 2>/dev/null| sed 's/[^0-9]//g' || echo " nosvn ";};
_generate_oscam_name(){ cd "$svndir";_dvbapi=$(
[ "$(./config.sh --enabled HAVE_DVBAPI)" == Y ] && echo -n -dvbapi || echo ''; );_webif=$(
[ "$(./config.sh --enabled WEBIF)"       == Y ] && echo -n -webif  || echo ''; );_ssl=$(
[ "$(./config.sh --enabled WITH_SSL)"    == Y ] && echo -n -ssl    || echo ''; );_emu=$(
[ "$(./config.sh --enabled WITH_EMU)"    == Y ] && echo -n -emu    || echo ''; );_ipv6=$(
[ "$(./config.sh --enabled IPV6SUPPORT)" == Y ] && echo -n -ipv6   || echo ''; );[ "${USE_vars[USE_COMPRESS]}" == "USE_COMPRESS=1" ] && _upx="-upx" || _upx='';[ "$1" == "native" ] && _b_name="$(hostname)$_upx" || _b_name="$1";oscam_name="oscam-svn$(REVISION)-$_b_name$_webif$_dvbapi$_ssl$_usb$_pcsc$_stapi$_stapi5$_emu$_ipv6$_upx";};
_set_dialog_types(){ gui="$(which dialog)";st_="--stdout";ib_="--infobox";ip_="--inputbox";nc_="--no-cancel";cl_="--checklist";rl_="--radiolist";bt_="--backtitle";pb_="--progressbox";title_="SIMPLEBUILD_V($SIMPLEVERSION)";};_toolchain_check(){ clear;echo -e "$w_l";ologo;headervars=( crypto.h pcsclite.h libusb.h pthread.h );[ -f "$tccfgdir/$1" ] && source "$tccfgdir/$1";if [ -d "$tcdir/$1/bin" ];then cd "$tcdir/$1/bin";else echo -e "$r_l  $txt_error:$y_l $1$w_l Toolchain $txt_n_installed""$rs_";_nl;exit;fi;compilername="$_compiler""gcc";[ ${#_realcompiler} -gt 4 ] && compilername="$_realcompiler";version=$("./$compilername" -dumpversion);machine=$("./$compilername" -dumpmachine);sr=$("./$compilername" -print-sysroot 2>/dev/null);sysroot=${tcdir//"$1/bin"/};[ -z "$sysroot" ] && sysroot="$r_l$txt_too_old";echo -e "$w_l  Compiler Info\n  =============\n";echo -e "$w_l  Version :$y_l $version";echo -e "$w_l  Target  :$y_l $machine";echo -e "$w_l  Sysroot :$y_l $sysroot";for e in "${headervars[@]}";do temp=$(find "$sr"/* |grep -m1 "$e");[ ${#temp} -gt 8 ] && echo -e "$w_l  Header  :$y_l $e$g_l\t$txt_found" || echo -e "$w_l  Header  :$y_l $e$r_l\t($txt_not_found)";done;_nl;exit;};
tedit(){ clear;if [ -f "$tccfgdir/$1" ];then source "$tccfgdir/$1";echo -e  $y_l;slogo;echo -e  " $p_l change CONF_DIR for $c_l$_toolchainname$w_l\n";echo -e  $w_l"    current =$c_l $_oscamconfdir_custom";echo -e  $w_l"    default =$c_l $_oscamconfdir_default";echo -en $w_l"  Enter new =$w_l ";read name;echo -e      "        now =$y_l CONF_DIR=$name\n$re_";sed -i s@^_oscamconfdir_custom.*@_oscamconfdir_custom=\"$name\"@ "$tccfgdir/$_toolchainname";fi;};
_gtedit(){ if [ -f "$tccfgdir/$_toolchainname" ];then source "$tccfgdir/$_toolchainname";input=$("$gui" "$st_" "$bt_" "$title_" --title " -[ $1 Toolchain ]- " --inputbox "\n CONF_DIR=$_oscamconfdir_default 'default'\n [ESC] = default\n" 0 0 "$_oscamconfdir_custom");retval=$?;case $retval in 0)confdir="$input";;1)confdir="$_oscamconfdir_custom";;255)confdir="$_oscamconfdir_default";;esac;sed -i s@^_oscamconfdir_custom.*@_oscamconfdir_custom=\"$confdir\"@ "$tccfgdir/$_toolchainname";source "$tccfgdir/$_toolchainname";fi;};
_load_toolchain(){ [ ! -z "$1" ] && source "$tccfgdir/$1";dln="$(decode "$_t1e")$(decode "$_toolchainfilename")";tc_dl="$dldir/$dln";[ -f "$dln" ] && rm -rf "$dln";clear;echo -e "$c_l";slogo;_nl;echo -e  "$p_l  load only";_nl;echo -e  "$w_l  Toolchain   :$y_l $dln";echo -en "$w_l  download    :$g_l ";_pget;};
get_toolchain_list(){ [ -d "$sdir/toolchain.cfgs" ] && cd "$sdir/toolchain.cfgs" || echo "please fix $sdir/toolchain.cfgs";toolchain_list=();toolchain_list+=('native');toolchain_list+=(*);cd "$workdir";};_create_module_arrays(){ i=0;for e in $(echo "$addons" | sed 's/WEBIF_//g;s/WITH_//g;s/MODULE_//g;s/CS_//g;s/HAVE_//g;s/_CHARSETS//g;s/CW_CYCLE_CHECK/CWCC/g;s/SUPPORT//g';);do SHORT_ADDONS+=($e);SHORT_MODULENAMES+=($e);done;for e in ${protocols//MODULE_/};do SHORT_PROTOCOLS+=($e);SHORT_MODULENAMES+=($e);done;for e in ${readers//READER_/};do SHORT_READERS+=($e);SHORT_MODULENAMES+=($e);done;for e in ${card_readers//CARDREADER_/};do SHORT_CARD_READERS+=($e);SHORT_MODULENAMES+=($e);done;for e in $addons $protocols $readers $card_readers;do ALL_MODULES_LONG+=($e);done;for e in "${SHORT_MODULENAMES[@]}";do INTERNAL_MODULES["$e"]="${ALL_MODULES_LONG[i]}";((i++));done;};
_console_extract_toolchain(){ [ -d "$tcdir/$_toolchainname" ] && rm -rf "$tcdir/$_toolchainname";mkdir "$tcdir/$_toolchainname";cd "$tcdir/$_toolchainname";xz -d "$tc_dl" -c | tar -x;echo -en "$txt_done!$w_l";};e_readers(){ silent=$("$svndir/config.sh" -s readers);echo ${silent//READER_/};};e_protocols() { silent=$("$svndir/config.sh" -s protocols);echo ${silent//MODULE_/};};e_card_readers(){ silent=$("$svndir/config.sh" -s card_readers);echo ${silent//CARDREADER_/};};e_addons(){ "$svndir/config.sh" -s addons |sed 's/WEBIF_//g;s/WITH_//g;s/MODULE_//g;s/CS_//g;s/HAVE_//g;s/_CHARSETS//g;s/CW_CYCLE_CHECK/CWCC/g;s/SUPPORT//g';};diff_array(){ awk 'BEGIN{RS=ORS=" "}{NR==FNR?a[$0]++:a[$0]--}END{for(k in a)if(a[k])print k}' <(echo -n "${!1}") <(echo -n "${!2}");};
check_smargo(){ if [ -f "$svndir/config.sh" ];then if [ "$("$svndir/config.sh" -e CARDREADER_SMARGO)" == "Y" ];then USE_vars[USE_LIBUSB]="USE_LIBUSB=1";else USE_vars[USE_LIBUSB]=;fi;fi;};_get_patch(){ cd $pdir;[ -f patch.url ] && source patch.url;clear;echo -e $C;ologo;echo -e $WH;[ -f $PATCHNAME ] && echo -e "$Y   old patch found\n  remove  $P$PATCHNAME" && rm -f $PATCHNAME;echo -e $W"  load $PATCHNAME";wget -q -O$PATCHNAME $PATCHURL;[ -f $PATCHNAME ] && echo -e $G"   ok$W new $PATCHNAME loadet\n" || echo -e $R"   patch not found\n"$W;};_reset_config(){ if [ -f "$svndir/config.sh" ];then [ -f "$menudir/$_toolchainname.save" ] && rm -rf "$menudir/$_toolchainname.save";if [ ! -f "$workdir/SVN-IS-PATCHED" ];then reset_="$("$svndir/config.sh" -R)";fi;else _select_menu;fi;};
_get_config_menu(){ tmp="$(mktemp)";while read -r _l;do c=$(echo "$_l" | tr -cd \" | wc -c);_c=$((_c + c));[ ${_c} -lt 11 ] && echo "$_l" >>"$tmp";[ ${_c} -eq 10 ] && break;done <"$svndir/config.sh";mk="$(grep '^   USE_' "$workdir/oscam-svn/Makefile" |sort -u|awk '{print $1}')";for e in $mk;do USE_vars[${e:0:-2}]=;done;check_smargo;source "$tmp";rm -rf "$tmp";};
read_s3cfg(){ if [ -f "$s3cfg" ];then while read l;do s3cfg_vars[$(echo "$l"| awk -F'=' '{print $1}')]=$(echo "$l"| awk -F'=' '{print $2}');done < "$s3cfg";fi;};s3cfg_menu(){ unset CFG_MENU;declare -a CFG_MENU;old_IFS=$IFS;COUNT=0;found="";for e in "${!s3cfg_vars[@]}";do CFG_MENU+="$e#on/off#$([ "${s3cfg_vars[$e]}" -gt "0" ] && echo on || echo off)#";counter;done;IFS="#";erg=$("$gui" "$st_" "$bt_" "$title_" "$cl_" "enable/disable options" 16 45 10 ${CFG_MENU[@]});IFS=$old_IFS;for e1 in "${!s3cfg_vars[@]}";do for e2 in $erg;do found="0";if [ "$e1" == "${e2//\'}" ];then found="1";break;fi;done;if [ "$found" == "1" ];then s3cfg_vars[$e1]=1;else s3cfg_vars[$e1]=0;fi;done;write_s3cfg;};
write_s3cfg(){ [ -f "$s3cfg" ] && rm -rf "$s3cfg";for e in "${!s3cfg_vars[@]}";do echo "$e=${s3cfg_vars[${e}]}" >>"$s3cfg";done;};_apply_menupatch(){ cd "$pdir";pf=(*);if [ ${#pf[@]} -gt 1 ];then [ -f "$workdir/SVN-IS-PATCHED" ] && quicksvnrestore $_toolchainname 2>/dev/null;if [ ! -f "$workdir/SVN-IS-PATCHED" ];then (if [ "$(ls -A "$pdir"/*.patch 2>/dev/null)" ];then unset patchlist;cd "$pdir";patchlist=(*.patch);for e in "${patchlist[@]}";do _w="ok";cd "$svndir";patchlog="$(mktemp)";echo "PATCH : apply $e";patch -f -p0 < "$pdir/$e" >"$patchlog" 2>/dev/null;hunks=$(grep -c1 '^Hunk' "$patchlog");fails=$(grep -c1 'hunks FAILED' "$patchlog");if [ "$hunks" -gt "0" ];then echo "PATCH : $hunks x HUNK for $e";_w="hunk";fi;if [ "$fails" -gt "0" ];then echo "PATCH : $fails x FAILS for $e";_w="fail";fi;done;case $_w in ok)echo "PATCH : done all ok";touch "$workdir/SVN-IS-PATCHED";;hunk)	echo "PATCH : done with warnings save $e.log";cat $patchlog >"$ldir/$e.log";ln -sf "$ldir/$e.log" "$workdir/lastpatch.log";touch "$workdir/SVN-IS-PATCHED";;fail)echo "PATCH : break build save $e.log";cat $patchlog >"$ldir/$e.log";ln -sf "$ldir/$e.log" "$workdir/lastpatch.log";touch "$workdir/SVN-IS-PATCHED";;esac;rm -rf "$patchlog";fi;)|"$gui" "--colors" "$st_" "$bt_" "$title_" "$pb_" 0 62;sleep 2;fi;fi;}
_apply_consolepatch(){ if [ ! -f "$workdir/SVN-IS-PATCHED" ];then cd "$pdir";if [ "$(ls -1 "$pdir"/*.patch 2>/dev/null | wc -l)" -gt "0" ];then unset patchlist;patchlist=(*.patch);for e in "${patchlist[@]}";do _w=0;cd "$svndir";patchlog="$(mktemp)";echo -e "$y_l|     PATCH : apply $e";patch -F 10 -f -p0 < "$pdir/$e" >"$patchlog" 2>/dev/null;hunks=$(grep -c1 '^Hunk' "$patchlog");fails=$(grep -c1 'hunks FAILED' "$patchlog");if [ "$hunks" -gt "0" ];then echo -e "$y_l|     PATCH :$w_l $hunks x HUNK for $e";_w=1;fi;if [ "$fails" -gt "0" ];then echo -e "$y_l|     PATCH :$r_n FAIL (breaking Build) = $fails";echo -en "$w_l|   RESTORE :$c_w LAST SVN BACKUP in ";for (( i=6; i>0; i--));do sleep 1 & echo -en "$i\b";wait;done;svnrestore lastsvn;exit;fi;cat $patchlog >"$ldir/$e.log";ln -sf "$ldir/$e.log" "$workdir/lastpatch.log";rm -rf "$patchlog";done;if [ "$_w" -gt "0" ];then echo -e "$y_l|     PATCH : done with warnings";touch "$workdir/SVN-IS-PATCHED";else echo -e "$y_l|     PATCH :$g_l done all ok$rs_";touch "$workdir/SVN-IS-PATCHED";fi;else echo -en "$y_l|     PATCH : no patch found\n";fi;fi;};
_stapi_select(){ if [ "$stapi_allowed" == "1" ];then stapivar='';addstapi=;USESTRING=;stapimode=$($gui $rl_ " SELECT STAPI MODE" 12 0 5 0 "STAPI_OFF" on 1 "USE_STAPI" off 2 "USE_STAPI5 UFS916" off 3 "USE_STAPI5 UFS916003" off 4 "USE_STAPI5 OPENBOX" off 3>&1 1>&2 2>&3);usevars=$(echo $usevars | sed "s@USE_STAPI5@@" | xargs);usevars=$(echo $usevars | sed "s@USE_STAPI@@" | xargs);case $stapimode in 0)stapivar=;;1)stapivar="STAPI_LIB=$sdir/stapi/liboscam_stapi.a";addstapi="USE_STAPI";;2)stapivar="STAPI5_LIB=$sdir/stapi/liboscam_stapi5_UFS916.a";addstapi="USE_STAPI5";;3)stapivar="STAPI5_LIB=$sdir/stapi/liboscam_stapi5_UFS916_0.03.a";addstapi="USE_STAPI5";;4)stapivar="STAPI5_LIB=$sdir/stapi/liboscam_stapi5_OPENBOX.a";addstapi="USE_STAPI5";;esac;save_config;else "$gui" "$st_" --title "STAPI INFO" --msgbox "NOT for $_toolchainname" 0 0;_toolchain_config_menu;fi;};
save_config(){ usevars=;enabled=;disabled=;check_smargo;enabled=($("$svndir/config.sh" -s));disabled=($("$svndir/config.sh" -Z));[ "$_toolchainname" == "sh4" ] && unset USE_vars[USE_COMPRESS];[ "$_toolchainname" == "sh_4" ] && unset USE_vars[USE_COMPRESS];unset USE_vars[USE_STAPI];unset USE_vars[USE_STAPI5];for e in ${USE_vars[*]};do usevars="${e:0:-2} $usevars";done;[ -f "$menudir/$_toolchainname.save" ] && rm -rf "$menudir/$_toolchainname.save";echo "enabled=\"${enabled[*]}\""  >"$menudir/$_toolchainname.save";echo "disabled=\"${disabled[*]}\"">>"$menudir/$_toolchainname.save";if [ "$stapi_allowed" == "1" ];then if [ "${#stapivar}" -gt "15" ];then echo "stapivar=\"$stapivar\"">>"$menudir/$_toolchainname.save";echo "usevars=\"$usevars $addstapi\"" >>"$menudir/$_toolchainname.save";else echo "usevars=\"$usevars\"" >>"$menudir/$_toolchainname.save";fi;else echo "usevars=\"$usevars\"" >>"$menudir/$_toolchainname.save";fi;};
load_config(){ _stapi=;_stapi5=;enabled=;disabled=;stapivar="";USESTRING=;usevars=;unset USE_vars[USE_STAPI];unset USE_vars[USE_STAPI5];if [ -f "$menudir/$_toolchainname.save" ];then source "$menudir/$_toolchainname.save";ena=$("$svndir/config.sh" -E $enabled);dis=$("$svndir/config.sh" -D $disabled);for e in $usevars;do USE_vars[$e]="$e=1";[ "$e" == "USE_LIBUSB" ] && silent=$("$svndir/config.sh" --enable CARDREADER_SMARGO);[ "$e" == "USE_PCSC" ] && sed -i 's@^//#define CARDREADER_PCSC 1@#define CARDREADER_PCSC 1@g' "$svndir/config.h";done;else _reset_config;[ "${s3cfg_vars[USE_TARGZ]}" == "1" ] && USE_vars[USE_TARGZ]="USE_TARGZ=1";[ "${s3cfg_vars[USE_COMPRESS]}" == "1" ] && USE_vars[USE_COMPRESS]="USE_COMPRESS=1";for e in $default_use;do USE_vars[$e]="$e=1";done;fi;check_smargo;[ "$_toolchainname" == "sh4" ] && unset USE_vars[USE_COMPRESS];[ "$_toolchainname" == "sh_4" ] && unset USE_vars[USE_COMPRESS];USESTRING="$(echo "${USE_vars[@]}"| sed 's@USE_@@g'| sed 's@=1@@g'| tr -s ' ')";};
_get_config_con(){ if [ ! "$1" == "checkout" ] && [ ! "$1" == "clean" ];then tmp="$(mktemp)";if [ -f "$svndir/config.sh" ];then while read -r _l;do c=$(echo "$_l" | tr -cd \" | wc -c);_c=$((_c + c));[ ${_c} -lt 11 ] && echo "$_l" >>"$tmp";[ ${_c} -eq 10 ] && break;done <"$svndir/config.sh";else while read -r _l;do c=$(echo "$_l" | tr -cd \" | wc -c);_c=$((_c + c));[ ${_c} -lt 11 ] && echo "$_l" >>"$tmp";[ ${_c} -eq 10 ] && break;done <"$configdir/config.sh.master";fi;if [ -f "$workdir/oscam-svn/Makefile" ];then str_="$(grep '^   USE_' "$workdir/oscam-svn/Makefile"| sort -u| awk '{print $1}')";for e in $str_;do es="${e:0:-2}";USE_vars[$es]=;done;else str_="$(grep '^   USE_' "$configdir/Makefile.master"| sort -u| awk '{print $1}')";for e in $str_;do es="${e:0:-2}";USE_vars[$es]=;done;fi;check_smargo;source "$tmp";rm -rf "$tmp" "$tmp1";rm -rf "$tmp.load" "$tmp1.load";fi;};
compress_cam(){     cd "$bdir";erg=$(upx "$1" |grep oscam |awk '{print $1" "$3" "$4 }');e1="$(echo "$erg"| awk '{printf("%4.2f k\n", $1 /1024)}')";e2="$(echo "$erg"| awk '{printf("%4.2fk\n", $2 /1024)}')";e3="$(echo "$erg"| awk '{print $3}')";echo -e "$w_l\n\nBEFORE> $txt_compress1\t= $g_n$e1$w_l\nAFTER > $txt_compress2\t= $g_l$e2$w_l\nRESULT> $txt_compress3\t= $c_n$e3$rs_\n";};
compress_cam_gui(){ cd "$bdir";erg=$(upx "$1" |grep oscam |awk '{print $1" "$3" "$4 }');e1="$(echo "$erg"| awk '{printf("%4.2f k\n", $1 /1024)}')";e2="$(echo "$erg"| awk '{printf("%4.2fk\n", $2 /1024)}')";e3="$(echo "$erg"| awk '{print $3}')";echo -e "\n $txt_compress1\t= $e1\n $txt_compress2\t= $e2\n $txt_compress3\t= $e3";};
tar_cam_gui(){ cd "$bdir";erg=$(tar zcf $1.tar.gz $1 $2);if [ -f "$1.tar.gz" ];then echo -e "\n $1.tar.gz\n created";if [ -f "$adir/$1.tar.gz" ];then rm -rf "$adir/$1.tar.gz";mv -f "$1.tar.gz" "$adir";echo -e "\n $1.tar.gz\n moved to $workdir/archive\n";else mv -f "$1.tar.gz" "$adir";echo -e "\n $1.tar.gz\n moved to $workdir/archive\n";fi;else echo -e "\nerror\n no $1.tar.gz\n created";fi;};
tar_cam(){ cd "$bdir";if [ -n $2 ]; then echo -en "$y_n\nTAR   >$w_l $1$g_l $txt_as$w_l $1.tar.gz$rs_";fi;erg=$(tar zcf $1.tar.gz $1 $2);if [ -f "$1.tar.gz" ];then echo -e "$p_n$txt_done$rs_";if [ -f "$adir/$1.tar.gz" ];then rm -rf "$adir/$1.tar.gz";mv -f "$1.tar.gz" "$adir";echo -e "$c_l""MOVE  > $p_l$1.tar.gz $g_l$txt_to $y_n$workdir/archive\n$rs_";else mv -f "$1.tar.gz" "$adir";echo -e "$c_l""MOVE  > $p_l$1.tar.gz $g_l$txt_to $y_n$workdir/archive\n$rs_";fi;else echo -e "$r_l\nerror\n no $1.tar.gz\n created$rs_";fi;};
CPUS(){ nproc;};clean(){ _clean;};_nl(){ echo -e "$rs_";};cedit(){ s3cfg_menu;bye;};get_patch(){ _get_patch; };counter(){ COUNT="$((COUNT+1))";};timer_calc(){ Tcalc="$((Te-Ts))";};timer_stop(){ Te="$(date +%s)";};timer_start(){ Ts="$(date +%s)";};profiles(){ _list_profiles;exit;};decode(){ echo -en "$1" | base64 -d;};get_module_name(){ echo "${INTERNAL_MODULES[$1]}";};_fix_config_h(){ _pcsc_off;_stapi5_off;};
_help_toolchain(){ echo -e "$w_l  toolchains :\n  ------------$g_n";helpline1 "${AVAI_TCLIST[@]}";echo -e "\n";};helpline0(){ ll=0; echo -en "  ";for s in "$@";do ll=$((ll + (${#s} + 4)));if [ "$ll" -lt "30" ];then echo -en "$s(_off) ";else echo -en "$s(_off)\n  ";ll="";fi;done;};helpline1(){ ll=0; echo -en "  ";for s in "$@";do ll=$((ll + (${#s} + 4)));if [ "$ll" -lt "45" ];then echo -en "$s "      ;else echo -en "$s\n  "      ;ll="";fi;done;};
upload_cam(){ clear;slogo;FILENAME=$1;if [ ! -f "$profdir/$FILENAME" ];then echo -e "$r_l\n  $txt_error $FILENAME $txt_upload_cam1 $re_";exit;else echo -e "$w_l\n  CONFIG  : $g_l$FILENAME $txt_upload_cam2 $re_";fi;
#load data from config
source "$profdir/$FILENAME";
#find newest build by date for toolchain
cd "$bdir";buildcamname="$(find . -type f \( -iname "*$toolchain*" ! -iname "*list_smargo" \) -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" " |sed 's@./@@g')";cd "$workdir";
#output date from cam
if [ -f "$bdir/$buildcamname" ];
then echo -e "$w_l  CAMNAME : $y_l$buildcamname";echo -en "$w_l  FILEDATE: "$(
	stat -c %y "$bdir/$buildcamname" |awk '{print $1" "; printf substr($2,1,8)}');echo -e "$w_l";
else echo -e "$r_l\n  matching \$CAM not found in $bdir$re_";exit;fi;
echo -e "$p_l\n  $txt_LOAD  > $w_l$txt_to IP:$b_l$ip$w_l port:$b_l$port";sshpass -p "$password" scp -P "$port" "$bdir/$buildcamname" "$loginname@$ip":/tmp;
#replace target cam
if [ "$replace_target" == "y" ];then echo -en "$p_l  REPLACE > $y_l$targetcam$re_";sshpass -p "$password" ssh -p "$port" -o StrictHostKeyChecking=no "$loginname@$ip" \
	"cd /tmp;if [ -f \"$buildcamname\" ];then if [ -f \"$targetcam\" ];then mv -f \"$buildcamname\" \"$targetcam\";fi;fi;exit;";echo -e "$g_l$txt_done!$re_";fi;
#stop target cam
if [ "$stop_target" == 'y' ];then stop="killall -9 $(basename "$targetcam")";fi;
#remote command (example restart cam)
if [ ! "$remote_command" == "none" ];then echo -e "$w_l  SSH COMMANDS $remote_command $y_l$txt_wait";
	# do remote commands
	sshpass -p "$password" ssh -p "$port" -o StrictHostKeyChecking=no "$loginname@$ip" "$remote_command;";fi;};
_help(){ clear;ologo;
echo -e "  ----------------------------------";
echo -e "  $txt_help1 $0 menu";
echo -e "  $txt_help2";
echo -e "  ----------------------------------";
echo -e "$w_l\n  toolchains :\n  ------------$g_n";
helpline1 "${AVAI_TCLIST[@]}";
echo -e "$w_l\n  simplebuild options :\n  ---------------------$c_n";
helpline1 "${s3opts[@]}";_wait;
echo -e "$w_l  config_cases:\n  --------$c_n";
helpline0 "${config_cases[@]}";
echo -e "$w_l\n\n  addons :\n  --------$p_l";
helpline0 "${SHORT_ADDONS[@]}";_wait;
echo -e "$w_l  protocols :\n  -----------$y_l";
helpline0 "${SHORT_PROTOCOLS[@]}";
echo -e "$w_l\n  readers :\n  ---------$r_l";
helpline0 "${SHORT_READERS[@]}";_wait;
echo -e "$w_l  card_readers :\n  --------------$b_l";
helpline0 "${SHORT_CARD_READERS[@]}";
echo -e "$w_l\n  use_vars :\n  --------$w_n";
helpline0 "${!USE_vars[@]}";_wait;};
_wait(){ echo -e "$w_l";read -n1 -r -p "  $txt_help3" key;tput cuu1;echo '                                          ';}
_toolchain_build_menu(){ [ "$loadprofile" == "yes" ] && load_config;selected=$(
"$gui" "$st_" "$bt_" "$title_" --no-cancel --title " -[ $txt_bmenu_title ]- " --menu "_________________________________________________________ \n $txt_bmenu_user = $(whoami)\n Toolchain       = $_toolchainname\n $txt_bmenu_comp = $_compiler""gcc\n $txt_bmenu_debu = CPU-Threads($(CPUS)) SVN($(REVISION)) SCRIPT($SIMPLEVERSION)\n $txt_bmenu_use  = $(echo $USESTRING| sed -e 's/^[ \t]*//')\n _________________________________________________________ \n" 22 65 10 BUILD "$txt_bmenu_build" CONFIGURE "$txt_bmenu_config" LOAD_PROFILE "$txt_bmenu_profile" SAVE_PROFILE "$txt_bmenus_profile" SHOW_BUILDLOG "$txt_bmenu_log" EDIT_CONF_DIR "Oscam config PATH" BACK "$txt_bmenu_back" EXIT "$txt_firstmenu_exit");[ $? = 255 ] && _toolchain_build_menu;case $selected in BUILD)_gui_build;;CONFIGURE)_toolchain_config_menu;;EDIT_CONF_DIR) _gtedit;_toolchain_build_menu;;SHOW_BUILDLOG)_sz;if [ -f "$workdir/lastbuild.log" ];then "$gui" "$st_" "$bt_" "$title_" --textbox "$workdir/lastbuild.log" "$_lines" "$_cols";fi;_toolchain_build_menu;;LOAD_PROFILE)_load_profile;;SAVE_PROFILE)_save_profile;;BACK)_toolchain_main_menu;;EXIT)bye;exit;;esac;_toolchain_build_menu;};
_toolchain_config_menu(){ [ "$loadprofile" == "yes" ] && load_config;selected=$(
"$gui" "$st_" "$bt_" "$title_" --no-cancel --title " -[ $txt_config_menu ]- " --menu " ADDONS :\n $(e_addons)\n\n PROTOCOLS :\n $(e_protocols)\n\n READERS :\n $(e_readers)\n\n CARD_READERS :\n $(e_card_readers)\n\n USE VARIABLES :\n $(echo $USESTRING| sed -e 's/^[ \t]*//')\n\n" 29 75 6 BACK "$txt_back_build" OSCAM_MODULE "$txt_module_configure" OSCAM_EXTRA "$txt_oscam_extra" BUILD_EXTRA "$txt_build_extra" SELECT_STAPI "select stapi" RESET "$txt_build_reset");[ $? = 255 ] && _toolchain_config_menu;case $selected in BACK)save_config;_toolchain_build_menu;;OSCAM_EXTRA)_oscam_extra_menu;;BUILD_EXTRA)_build_extra_menu;;OSCAM_MODULE)eval "$svndir/config.sh -g" 2>/dev/null;save_config;;SELECT_STAPI)_stapi_select;;RESET)_reset_config;load_config;_toolchain_config_menu;;esac;_toolchain_config_menu;};
_toolchain_main_menu(){ _fill_tc_array;IFS="#";COUNT=0;MENU_OPTIONS="BACK#$txt_back_main#";counter;if [ "$systype" == "ok" ];then MENU_OPTIONS+="ADD#$txt_menu_builder2#";counter;[ "$tcempty" == "0" ] && MENU_OPTIONS+="REMOVE#$txt_menu_builder3#" && counter;fi;MENU_OPTIONS+="native#$txt_menu_builder4 $(hostname)-$(uname -m)#";counter;if [ "$systype" == "ok" ];then if [ "$tcempty" == "0" ];then for i in "${INST_TCLIST[@]}";do if [ ! "$i" == "native" ];then source "$tccfgdir/$i";MENU_OPTIONS+="$_toolchainname#$_description#";counter;fi;done;fi;fi;MENU_OPTIONS+="EXIT#$txt_firstmenu_exit#";counter;out=$(
"$gui" "$st_" "$nc_" "$bt_" "$title_" --help-button --help-label INFO --title "-[ Toolchain $txt_menu ]-" --menu "$txt_main_revision$(REVISION)" "${COUNT+8}" 75 0 ${MENU_OPTIONS});IFS=$OIFS;first=$(echo "$out" | awk '{printf $1}');tc_info=$(echo "$out" | awk '{printf $2}';);case $first in EXIT)bye;;BACK)_select_menu;;ADD)_toolchain_add_menu;;REMOVE)_toolchain_remove_menu;;HELP)if [ -f "$tccfgdir/$tc_info" ];then source "$tccfgdir/$tc_info";"$gui" "$st_" "$nc_" "$bt_" "$title_" "$ib_" "$_tc_info" $((_tc_infolines + 5)) 65;sleep 5;fi;_toolchain_main_menu;;*)[ -f "$tccfgdir/$first" ] && stapi_allowed="" && source "$tccfgdir/$first" || exit;loadprofile="yes";_toolchain_build_menu "$first";;esac;};
get_toolchain_config(){ get_toolchain_list;for ((i=0;i<${#toolchain_list[@]};i++));do [ "${toolchain_list[$i]}" == "$1" ] && source "$sdir/toolchain.cfgs/$1";done;};
_create_native_profile(){ [ ! -d "$tcdir/native/bin" ] && mkdir -p "$tcdir/native/bin";cd "$tcdir/native/bin";g="$(which gcc)";stripvar="$(which strip)";compiler_link="$($g -dumpmachine)-gcc";strip_link="$($g -dumpmachine)-strip";[ ! -L "$compiler_link" ] && ln -sf "$g"     "$compiler_link";[ ! -L "$strip_link" ]    && ln -sf "$stripvar" "$strip_link";
cd "$tccfgdir";cat << EOF > native
_toolchainname="native";
default_use="USE_UTF8 USE_LIBCRYPTO";
_oscamconfdir="/usr/local/etc";
_compiler="$($g -dumpmachine)-";
_tc_info="Native System Compiler \
$(gcc --version)";
_libsearchdir="/lib";
_menuname="native";
_sysroot="/";
EOF
cd "$workdir";};
