Files
CISS.debian.installer/lib/cdi_0200_dialog/0200_dialog_helper.sh
Marc S. Weidner 45ff672479
All checks were successful
🛡️ Shell Script Linting / 🛡️ Shell Script Linting (push) Successful in 1m0s
V8.00.000.2025.06.17
Signed-off-by: Marc S. Weidner <msw@coresecret.dev>
2025-07-31 23:04:30 +02:00

154 lines
5.0 KiB
Bash

#!/bin/bash
# SPDX-Version: 3.0
# SPDX-CreationInfo: 2025-06-17; WEIDNER, Marc S.; <msw@coresecret.dev>
# SPDX-ExternalRef: GIT https://git.coresecret.dev/msw/CISS.debian.installer.git
# SPDX-FileContributor: WEIDNER, Marc S.; Centurion Intelligence Consulting Agency
# SPDX-FileCopyrightText: 2024-2025; WEIDNER, Marc S.; <msw@coresecret.dev>
# SPDX-FileType: SOURCE
# SPDX-License-Identifier: EUPL-1.2 OR LicenseRef-CCLA-1.0
# SPDX-LicenseComment: This file is part of the CISS.debian.installer.secure framework.
# SPDX-PackageName: CISS.debian.installer
# SPDX-Security-Contact: security@coresecret.eu
guard_sourcing
#######################################
# Terminal cleaner for Dialog Wrappers.
# Arguments:
# None
#######################################
clean_screen() {
tput cnorm > /dev/tty # Cursor visible
tput sgr0 > /dev/tty # Attributes off
stty sane < /dev/tty # Sane modes
tput rmcup > /dev/tty # Back to the main buffer
clear > /dev/tty # Clear residual
#lines=$(tput lines)
#tput cup $((lines-1)) 0 > /dev/tty
#printf "\n" > /dev/tty
}
#######################################
# Wrapper for Dialog Gauge Bar.
# Globals:
# PID_DIALOG_GAUGE
# PIPE_DIALOG_GAUGE
# VAR_IN_DIALOG_WR
# Arguments:
# None
#######################################
dialog_gauge() {
clear
declare -gx VAR_IN_DIALOG_WR="gauge"
declare -gx PIPE_DIALOG_GAUGE="/tmp/dialog_gauge_$$.fifo"
if [[ -e "${PIPE_DIALOG_GAUGE}" && ! -p "${PIPE_DIALOG_GAUGE}" ]]; then
rm -f "${PIPE_DIALOG_GAUGE}"
fi
[[ -p "${PIPE_DIALOG_GAUGE}" ]] || mkfifo "${PIPE_DIALOG_GAUGE}"
setsid dialog --no-collapse \
--ascii-lines \
--keep-tite \
--title "CISS.debian.installer" \
--gauge "Starting installation..." \
10 70 0 \
< "${PIPE_DIALOG_GAUGE}" &
declare -gx PID_DIALOG_GAUGE="$!"
exec {FD_GAUGE}> "${PIPE_DIALOG_GAUGE}"
}
#######################################
# Wrapper for Dialog Program Box.
# Globals:
# COLS_USE
# PID_DIALOG_BOX
# PIPE_DIALOG_BOX
# ROWS_USE
# VAR_IN_DIALOG_WR
# Arguments:
# None
#######################################
dialog_box() {
### Save original stdout
exec {FD_SAVE_OUT}>&1
clear
declare -gx VAR_IN_DIALOG_WR="box"
declare -gx PIPE_DIALOG_BOX="/tmp/dialog_box_$$.fifo"
if [[ -e "${PIPE_DIALOG_BOX}" && ! -p "${PIPE_DIALOG_BOX}" ]]; then
rm -f "${PIPE_DIALOG_BOX}"
fi
[[ -p "${PIPE_DIALOG_BOX}" ]] || mkfifo "${PIPE_DIALOG_BOX}"
dialog --create-rc ~/.dialogrc
sed -i 's/screen_color = (CYAN,BLUE,ON)/screen_color = (WHITE,RED,ON)/' ~/.dialogrc
sed -i 's/title_color = (BLUE,WHITE,ON)/title_color = (BLACK,WHITE,ON,ON)/' ~/.dialogrc
sed -i 's/use_scrollbar = OFF/use_scrollbar = ON/' ~/.dialogrc
sed -i 's/dialog_color = (BLACK,WHITE,OFF)/dialog_color = (WHITE,BLACK,OFF)/' ~/.dialogrc
sed -i 's/border2_color = dialog_color/border2_color = (BLACK,WHITE,OFF)/' ~/.dialogrc
sed -i 's/inputbox_border_color = dialog_color/inputbox_border_color = (BLACK,WHITE,OFF)/' ~/.dialogrc
sed -i 's/inputbox_border2_color = dialog_color/inputbox_border2_color = (BLACK,WHITE,OFF)/' ~/.dialogrc
sed -i 's/menubox_border_color = border_color/menubox_border_color = (BLACK,WHITE,OFF)/' ~/.dialogrc
sed -i 's/menubox_border2_color = dialog_color/menubox_border2_color = (BLACK,WHITE,OFF)/' ~/.dialogrc
sed -i 's/searchbox_border2_color = dialog_color/searchbox_border2_color = (BLACK,WHITE,OFF)/' ~/.dialogrc
chmod 0440 ~/.dialogrc
setsid dialog --colors \
--ascii-lines \
--title "Installation Progress" \
--backtitle "CISS.2025.debian.installer" \
--programbox "${ROWS_USE}" "${COLS_USE}" \
< "${PIPE_DIALOG_BOX}" &
declare -gx PID_DIALOG_BOX="$!"
### Redirect both stdout and stderr into FIFO
exec 1> "${PIPE_DIALOG_BOX}" 2>&1
}
#######################################
# Dialog Program Box Cleaner.
# Globals:
# PID_DIALOG_BOX
# PIPE_DIALOG_BOX
# Arguments:
# None
#######################################
dialog_box_cleaner() {
[[ -n "${FD_SAVE_OUT-}" ]] && exec 1>&"${FD_SAVE_OUT}" 2>&"${FD_SAVE_OUT}"
[[ -n "${FD_SAVE_OUT-}" ]] && exec {FD_SAVE_OUT}>&-
[[ -n "${FD_SAVE_OUT-}" ]] && unset FD_SAVE_OUT
kill -TERM -- -"${PID_DIALOG_BOX}" 2>/dev/null || true
wait "${PID_DIALOG_BOX}" 2>/dev/null || true
unset PID_DIALOG_BOX
rm -f "${PIPE_DIALOG_BOX}"
unset PIPE_DIALOG_BOX
rm -f ~/.dialogrc
declare -gx VAR_IN_DIALOG_WR="false"
clean_screen
sleep 1
}
#######################################
# Dialog Gauge Bar Cleaner.
# Globals:
# PID_DIALOG_GAUGE
# PIPE_DIALOG_GAUGE
# Arguments:
# None
#######################################
dialog_gauge_cleaner() {
if [[ -n "${FD_GAUGE-}" ]]; then
exec {FD_GAUGE}>&-
unset FD_GAUGE
fi
kill -TERM -- -"${PID_DIALOG_GAUGE}" 2>/dev/null || true
wait "${PID_DIALOG_GAUGE}" 2>/dev/null || true
unset PID_DIALOG_GAUGE
rm -f "${PIPE_DIALOG_GAUGE}"
unset PIPE_DIALOG_GAUGE
declare -gx VAR_IN_DIALOG_WR="false"
clean_screen
sleep 1
}
# vim: number et ts=2 sw=2 sts=2 ai tw=128 ft=sh