#!@SH@ # # Main program file # # Copyright (C) 2013, 2014 Patrick "P. J." McDermott # # This file is part of the ProteanOS Development Kit. # # The ProteanOS Development Kit is free software: you can redistribute # it and/or modify it under the terms of the GNU General Public License # as published by the Free Software Foundation, either version 3 of the # License, or (at your option) any later version. # # The ProteanOS Development Kit is distributed in the hope that it # will be useful, but WITHOUT ANY WARRANTY; without even the implied # warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with the ProteanOS Development Kit. If not, see # . set -u # Constant global variables HT=' ' LF=' ' PACKAGE_NAME='@PACKAGE_NAME@' PACKAGE_VERSION='@PACKAGE_VERSION@' PKGDATADIR='@pkgdatadir@' OPTSTRING='hV' if [ -f "${0%/*}/../.builddirstamp" ]; then in_place=true builddir="${0%/*}/.." else in_place=false builddir='' fi # use() must be defined inline so it can be used to load other modules. use() { local module="${1}" local dir= if ${in_place}; then dir="${builddir}/lib" else dir="${PKGDATADIR}" fi if [ -f "${dir}/${module}.sm" ]; then . "${dir}/${module}.sm" else printf '%s: Error: Failed to load module "%s": %s\n' \ "${0##*/}" "${module}" 'no such file or directory' >&2 exit 2 fi } use locale use cmd use getopt use rand main() { local cmd= load_locale load_cmds if ! get_options "${@}"; then cmd_help_main >&2 exit 1 fi shift $(($OPTIND - 1)) if ${opt_h:-false}; then cmd='help' elif ${opt_V:-false}; then cmd='version' elif [ ${#} -lt 1 ]; then cmd_help_main >&2 exit 1 else cmd="${1}" shift fi srand $(expr ${$} + $(date '+%s')) case "${cmd}" in 'help'|'version') ;; *) check_uid || error 1 "$(get_msg 'uid_0_req')";; esac run_cmd "${cmd}" "${@}" return ${?} } check_uid() { local uname_s= local uid= uname_s="$( (uname -s) 2>/dev/null)" || uname_s='unknown' uid="$(id -u)" case "${uname_s}" in 'Linux') if [ ${uid} -ne 0 ]; then return 1 fi ;; esac return 0 } main "${@}"