#!/bin/sh

[ -n "$DRACUT_SYSTEMD" ] && exit 0

if [ -x "$systemdutildir"/systemd-vconsole-setup ]; then
    "$systemdutildir"/systemd-vconsole-setup "$@"
fi

[ -e /etc/vconsole.conf ] && . /etc/vconsole.conf

DEFAULT_FONT=ter-u16b
DEFAULT_KEYMAP=/etc/sysconfig/console/default.kmap

set_keyboard() {
    local param

    [ "${UNICODE}" = 1 ] && param=-u || param=-a
    kbd_mode ${param}
    return 0
}

set_terminal() {
    local dev=$1

    if [ "${UNICODE}" = 1 ]; then
        printf '\033%%G' >&7
        stty -F "${dev}" iutf8
    else
        printf '\033%%@' >&7
        stty -F "${dev}" -iutf8
    fi
    return 0
}

set_keymap() {
    local utf_switch

    if [ -z "${KEYMAP}" ]; then
        [ -f "${DEFAULT_KEYMAP}" ] && KEYMAP=${DEFAULT_KEYMAP}
    fi

    [ -n "${KEYMAP}" ] || return 1

    [ "${UNICODE}" = 1 ] && utf_switch=-u

    # shellcheck disable=SC2086
    loadkeys -q ${utf_switch} ${KEYMAP} ${EXT_KEYMAPS}
}

set_font() {
    setfont "${FONT-${DEFAULT_FONT}}" \
        -C "${1}" \
        ${FONT_MAP:+-m "${FONT_MAP}"} \
        ${FONT_UNIMAP:+-u "${FONT_UNIMAP}"} || true
    return 0
}

dev_close() {
    exec 6>&-
    exec 7>&-
}

dev_open() {
    local dev=$1

    exec 6< "${dev}" \
        && exec 7>> "${dev}"
}

dev=/dev/${1#/dev/}

[ -c "${dev}" ] || {
    echo "Usage: $0 device" >&2
    exit 1
}

dev_open "${dev}"

for fd in 6 7; do
    if ! [ -t ${fd} ]; then
        echo "ERROR: File descriptor not opened: ${fd}" >&2
        dev_close
        exit 1
    fi
done

set_keyboard
set_terminal "${dev}"
set_font "${dev}"
set_keymap

dev_close
