From 457fcfecefcdc408f3f4fdc014b1f4a6cee79d8b Mon Sep 17 00:00:00 2001 From: +++ Date: Fri, 4 Jun 2021 22:53:26 +0200 Subject: [PATCH] =?UTF-8?q?umstellung=20auf=20temp.=20verzeichnis,=20optio?= =?UTF-8?q?nen=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - das skript erledigt seine arbeit jetzt in einem temp. verzeichnis - per default nur ausgabe von fehler- und abschlussmeldung - buchstaben einiger optionen geändert - optionen -b, -o und -t hinzugekommen --- TODO.txt | 3 - readme.txt | 54 ++++- rechnung.sh | 666 +++++++++++++++++++++++++++++++--------------------- 3 files changed, 436 insertions(+), 287 deletions(-) diff --git a/TODO.txt b/TODO.txt index d3fdddf..df48841 100644 --- a/TODO.txt +++ b/TODO.txt @@ -4,9 +4,6 @@ TODO * Bessere Fehlerkontrolle (besonders beim Einlesen) * Längenprüfung * Backticks -* Parameterübergabe für ein Ausgabeverzeichnis. - * Ansonsten vielleicht PDF verschieben * Nicht mehr benötigte Dateien (*.log, *.aux, etc.) der Rechnung löschen. * Den Begleittext im Latex-File durch eine Variable ersetzen. -* Das Program in einem temporären Verzeichnis arbeiten lassen. diff --git a/readme.txt b/readme.txt index db15157..dd82c98 100644 --- a/readme.txt +++ b/readme.txt @@ -15,34 +15,66 @@ Latexcompiler eine Rechnung im PDF-Format erstellt. Installation ------------ -Kopieren Sie die Dateien template.ltx, absender.lco, rechnung.ini und -rechnung.{sh|py} in ein Verzeichnis Ihrer Wahl. Passen Sie die Dateien -rechnung.ini und absender.lco an Ihre Bedürfnisse an. +Variante 1: + +Erstellen Sie in $HOME ein Verzeichnis '.rechnung'. Kopieren Sie die +Dateien template.ltx, absender.lco, rechnung.ini in dieses Verzeichnis. +Passen Sie die Dateien rechnung.ini und absender.lco an Ihre Bedürfnisse an. +Kopieren Sie rechnung.{sh|py} in ein Verzeichnis von $PATH. + +Variante 2: + +Kopieren Sie alle Dateien template.ltx, absender.lco, rechnung.ini und +rechnung.{sh|py} in ein Verzeichnis ihrer Wahl. Sie sollten dann dem +Programm beim Aufruf mit der Option -b das aktuelle Verzeichnis als +Basisverzeichnis mitgeben. Optionen -------- +-b basisverzeichnis + + Hier sucht das Programm nach allen Dateien, die nicht extra als Option + übergeben wurde. Der Defaultwert ist '$HOME/.rechnung'. + -h Gibt eine kurze Hilfe aus und beendet das Programm. --f kundendatei - - Die Kundendaten werden aus 'kundendatei' gelesen. - -i Installiert bei Bedarf das Latex-Paket rechnung.sty. Das Paket wird aus dem Repo geklont, mittels latex gebaut und in das Verzeichnis $HOME/texmf/latex/tex/rechnung/ kopiert. --l lco-datei +-k kundendatei - Verwendet 'lco-datei' für verschiedene Variablen des Absenders. + Die Daten zu den einzelnen Kunden werden aus 'kundendatei' gelesen. Der + Defaultwert ist '$BASISVERZEICHNIS/rechnung.ini'. Begin und Ende eines + Kunden sind mit '[start]' und '[ende]' markiert. Die einzelnen Einträge + haben die Form 'schlüssel=wert'. Derzeit sind die Schlüssel kunde, + adresse, anrede, anzahl, position, short, betrag und lfdnr + implementiert. --q +-l lcodatei - Es werden nur noch Fehlermeldungen ausgegeben. + Verwendet die Datei 'lcodatei' für verschiedene Variablen des + Absenders. + +-o ausgabeverzeichnis + + Verzeichnis, in welches der Output des Latexkompilers geschrieben wird. + Defaultwert ist das Verzeichnis, in dem das Programm gestartet wird. + +-t + + Der Pfad zum Latex-Template, welches verwendet werden soll. Default ist + $BASISVERZEICHNIS/template.ltx. -v + + Setzt die Ausgabe auf verbose. Standartmäßig werden nur Fehlermeldungen + und eine Abschlußmeldung ausgegeben. + +-V Zeigt die Programmversion an. diff --git a/rechnung.sh b/rechnung.sh index 8e184bc..1172b77 100755 --- a/rechnung.sh +++ b/rechnung.sh @@ -15,13 +15,59 @@ set -e OLDIFS=$IFS IFS=' ' - -unset -f command -unset -f unalias -\unalias -a +UMASK=077 +umask=$UMASK OLDPATH=$PATH PATH=/bin:/usr/bin export PATH +unset -f command +unset -f unalias +\unalias -a + + +# Variablen +# --------- + +PROGRAMM_NAME=$(basename $0) +PROGRAMM_VERSION="0.0.2" +VERBOSITY=0 +DEBUG=0 +COLORED_OUTPUT=0 +RED="$(tput bold)$(tput setaf 1)" +GREEN="$(tput bold)$(tput setaf 2)" +YELLOW="$(tput bold)$(tput setaf 3)" +BLUE="$(tput bold)$(tput setaf 4)" +NORMAL="$(tput bold)$(tput sgr0)" + +RECHNUNG_STY_URL="https://github.com/tomka/rechnung" +RECHNUNG_STY_FILE="rechnung.sty" +RECHNUNG_STY_HOME="$HOME/texmf/tex/latex/rechnung" +BASEDIR="$HOME/.rechnung" +KUNDENFILE="rechnung.ini" +TEMPLATEFILE="template.ltx" +LCOFILE="absender.lco" +LCO= +SEDFILE="sedfile.txt" +INSTALL_LCO_FILE=0 +ANZAHL_RECHNUNGEN=0 +READABLES_TO_CHECK= + +STARTDIR="$(realpath -s `pwd`)" +TEMPDIR= +OUTPUTDIR="$STARTDIR" +LINE_BUFFER= +KEY_BUFFER= +VALUE_BUFFER= + +KUNDE= +ADRESSE= +ANREDE= +BEGLEITTEXT= +ANZAHL= +POSITION= +SHORT= +BETRAG= +LFDNR= # Benötigte Programme # ------------------- @@ -44,92 +90,49 @@ EXECUTABLES_TO_CHECK="$BC_BIN $TR_BIN $SED_BIN $CUT_BIN $TPUT_BIN $DATE_BIN $PDF GENPDF="" if [ -x "$RUBBER_BIN" ]; then - GENPDF="$RUBBER_BIN -d " + GENPDF="$RUBBER_BIN -d --into $OUTPUTDIR " else - GENPDF="$PDFLATEX_BIN -halt-on-error " + GENPDF="$PDFLATEX_BIN -halt-on-error -output-directory $OUTPUTDIR " fi - -# Variablen definieren -# -------------------- - -PROGRAMM_NAME=$(basename $0) -PROGRAMM_VERSION="0.0.1" -VERBOSITY=1 -STY_HOME="$HOME/texmf/tex/latex" -STY_RECHNUNG="rechnung.sty" -STY_URL="https://github.com/tomka/rechnung" -RECHNUNGSFILE="rechnung.ini" -TEMPLATEFILE="template.ltx" -LCOFILE="absender.lco" -LCO=$(basename $LCOFILE .lco) -INSTALL_LCO_FILE=0 -SEDFILE="sed.txt" -LINE_BUFFER="" -KEY_BUFFER="" -VALUE_BUFFER="" -KUNDE="" -ADRESSE="" -ANREDE="" -ANZAHL="" -POSITION="" -SHORT="" -BETRAG="" -LFDNR="" - -# Farben definieren -# ----------------- - -NUMBER_OF_COLORS=$($TPUT_BIN colors) -COLORED_OUTPUT=0 -RED="$(tput bold)$(tput setaf 1)" -GREEN="$(tput bold)$(tput setaf 2)" -YELLOW="$(tput bold)$(tput setaf 3)" -BLUE="$(tput bold)$(tput setaf 4)" -NORMAL="$(tput bold)$(tput sgr0)" - - # Ausgabefunktionen für Terminal # ------------------------------ print_start() { - msg=$* - - if [ "$VERBOSITY" -eq 0 ]; then - return - else + if [ "$VERBOSITY" -eq 1 ]; then if [ "$COLORED_OUTPUT" -eq 1 ]; then - printf "%s[+]%s %s" "$GREEN" "$NORMAL" "$msg" + printf "%s[+]%s %s" "$GREEN" "$NORMAL" "$@" else printf " Failed" fi fi } +print_middle() { + + if [ "$VERBOSITY" -eq 1 ]; then + printf "%s" "$@" + fi +} + print_failed() { - msg=$* - - if [ "$VERBOSITY" -eq 0 ]; then - return - else + if [ "$VERBOSITY" -eq 1 ]; then if [ "$COLORED_OUTPUT" -eq 1 ]; then printf "%s Failed%s\n" "$RED" "$NORMAL" else printf " Failed\n" fi - if [ ! -z "$msg" ]; then - print_error "$msg" - fi + fi + if [ ! -z "$@" ]; then + print_error "$@" fi } print_ok() { - if [ "$VERBOSITY" -eq 0 ]; then - return - else + if [ "$VERBOSITY" -eq 1 ]; then if [ "$COLORED_OUTPUT" -eq 1 ]; then printf "%s OK%s\n" "$GREEN" "$NORMAL" else @@ -138,96 +141,189 @@ print_ok() { fi } -print_deko() { - - msg=$* - - if [ "$VERBOSITY" -eq 0 ]; then - return - else - if [ "$COLORED_OUTPUT" -eq 1 ]; then - echo "${BLUE}${msg}${NORMAL}" - else - echo "$msg" - fi - fi -} - print_info() { - msg=$* - - if [ "$VERBOSITY" -eq 0 ]; then - return - else + if [ "$VERBOSITY" -eq 1 ]; then if [ "$COLORED_OUTPUT" -eq 1 ]; then - echo "${GREEN}[+]$NORMAL $msg" + echo "${GREEN}[+]$NORMAL $@" else - echo "[-] $msg" + echo "[-] $@" fi fi } print_warn() { - msg=$* - - if [ "$VERBOSITY" -eq 0 ]; then - return - else + if [ "$VERBOSITY" -eq 1 ]; then if [ "$COLORED_OUTPUT" -eq 1 ]; then - echo "${YELLOW}[-]$NORMAL $msg" + echo "${YELLOW}[-]$NORMAL $@" 1>&2 else - echo "[-] $msg" + echo "[-] $@" 1>&2 fi fi } print_error() { - msg=$* - if [ "$COLORED_OUTPUT" -eq 1 ]; then - echo "${RED}[-]$NORMAL $msg" + echo "${RED}[-]$NORMAL Error: $@" 1>&2 else - echo "[-] $msg" + echo "[-] Error: $@" 1>&2 fi } -failed_and_exit() { +print_head() { - print_failed - exit $* + if [ "$VERBOSITY" -eq 1 ]; then + if [ "$COLORED_OUTPUT" -eq 1 ]; then + echo "${BLUE} ========================${NORMAL}" + echo "${BLUE} = $PROGRAMM_NAME v$PROGRAMM_VERSION =${NORMAL}" + echo "${BLUE} ========================${NORMAL}" + else + echo " ========================" + echo " = $PROGRAMM_NAME v$PROGRAMM_VERSION =" + echo " ========================" + fi + fi +} + +print_trenner() { + + echo "------------------------------------" +} + +print_usage() { + +cat <&1 >/dev/null; then + print_failed "$program ist nicht im Pfad" + fi + fi + print_ok + fi +} + +check_file() { # testet, ob die übergebene datei kein symlink ist, existiert und lesbar # ist. schlägt einer der tests fehl, wird das programm beendet. - print_start "Datei $1 ist lesbar ..." - if test -h "$1"; then - target=$(get_link_target "$1") - print_failed "$1 ist ein symbolischer Link auf $target" - exit 1 + file="$*" + + print_start "Suche nach Datei $file ..." + if [ -h "$file" ]; then + target=$(realpath "$file") + print_failed "'$file' ist ein symbolischer Link auf '$target'" + exit 4 fi - if test -f "$1" && test -r "$1"; then + if test -f "$file" && test -r "$file"; then print_ok else - failed_and_exit 1 + print_failed "Datei '$file' nicht lesbar oder nicht gefunden" + exit 5 fi } -check_sty() ( +check_dir() { - # sucht in einer subshell nach dem paket rechnung.sty. gibt true oder - # false zurück. + # testet, ob das übergebene verzeichnis keine link ist, existiert und + # hinein gewechselt werden darf. schlägt ein test fehl, wird das + # programm beendet. - print_start "Suche nach $STY_RECHNUNG ..." - kpsewhich "$STY_RECHNUNG" 2>&1 >/dev/null + dir="$*" + + print_start "Suche nach Verzeichnis $dir ..." + if [ -h "$dir" ]; then + target=$(realpath "$dir") + print_failed "'$dir' ist ein symbolischer Link auf '$target'" + exit 6 + fi + if test -d "$dir" && test -x "$dir"; then + print_ok + else + print_failed "Verzeichnis '$dir' nicht gefunden oder keine Berechtigung" + exit 7 + fi + +} + +check_sty() { + + # sucht nach dem paket rechnung.sty. gibt true oder false zurück. + + print_start "Suche nach $RECHNUNG_STY_FILE ..." + kpsewhich "$RECHNUNG_STY_FILE" 2>&1 >/dev/null if [ $? -eq 0 ]; then print_ok return 0 @@ -235,49 +331,7 @@ check_sty() ( print_failed return 1 fi -) - -check_binaries() ( - - # die funktion prüft in einer subshell, ob alle benötigten binaries - # installiert sind. sollte das binary ein symlink auf eine ander datei - # sein, wird geprüft, ob sich diese im PATH befindet und nicht ebenfalls - # ein symlink ist. schlägt eine der prüfungen fehl, wird das programm - # beendet. - - program= - binaries=$* - - for program in $binaries; do - print_start "Suche nach $program ..." - if test ! -x "$program"; then - print_failed "Das Programm $program wird benötigt, aber nicht gefunden." - quit 3 - else - if [ -h "$program" ]; then - program=$(get_link_target $program) - fi - if ! which "$program" 2>&1 >/dev/null; then - print_failed "$program ist nicht im Pfad" - fi - print_ok - fi - done -) - -get_link_target() ( - - # die funktion bekommt einen symbolischen link und folgt ihm bis zum - # ende. mit dem echo-befehl wird das ziel an die aufrufende funktion - # zurück gegeben. - - program=$1 - - while [ -h "$program" ]; do - program=$(readlink $program) - done - echo "$program" -) +} is_option() ( @@ -293,41 +347,105 @@ is_option() ( fi ) -check_rechnunsdaten() ( +check_rechnunsdaten() { - # die funktion überprüft in einer subshell, ob alle variablen belegt - # sind. ist eine variable leer, wird der name der variablen ausgegeben - # und ein fehler (1) zurück gegeben. + # die funktion prüft, ob alle variablen belegt sind. ist eine variable + # leer, wird der name der variablen ausgegeben und ein fehler (1) zurück + # gegeben. + + response=1 print_start "Prüfe Rechnungsdaten ..." if test -z "$KUNDE"; then print_failed "Das Feld Kunde ist leer" - return 1 elif test -z "$ADRESSE"; then print_failed "Das Feld Adresse ist leer" - return 1 elif test -z "$ANREDE"; then print_failed "Das Feld Anrede ist leer" - return 1 elif test -z "$ANZAHL"; then print_failed "Das Feld Anzahl ist leer" - return 1 elif test -z "$POSITION"; then print_failed "Das Feld Position ist leer" - return 1 elif test -z "$SHORT"; then print_failed "Das Feld Short ist leer" - return 1 elif test -z "$BETRAG"; then print_failed "Das Feld Betrag ist leer" - return 1 elif test -z "$LFDNR"; then print_failed "Das Feld LfdNr ist leer" - return 1 else print_ok - return 0 + response=0 fi + return $response +} + +# Funktionen zum setzen von CLI-Variablen +# --------------------------------------- + +set_cli_opt() { + + # die funktion setzt für einen übergebenen pfad den absoluten pfad ohne + # sich darim zu kümmern, ob er existiert. FIS= sorgt dafür, daß der + # übergebene pfad nicht getrennt wird. sollte nur als subshell + # aufgerufen werden. + + IFS= + echo "$(realpath -m -s "$@")" +} + +set_abs_path() { + + filename="$*" + first=$(echo "$filename" | cut -c1-1) + if [ ! "$first" = "/" ]; then + filename=$(realpath -m "$BASEDIR/$filename") + fi + echo "$filename" +} + +# LaTeX-Paket rechnung.sty installieren +# ------------------------------------- + +install_sty() ( + + # Clont das Repo von rechnung.sty, baut das Latex-Paket und kopiert es + # nach $HOME/texmf/tex/latex/rechnung. Schlägt einer der Schritte fehl, + # wird clean_and_exit aufgerufen. + + ## notwendige programm prüfen + for program in "$GIT_BIN" "$LATEX_BIN"; do + check_binary $program + done + ## Repo clonen + print_start "Hole Repo von $RECHNUNG_STY_URL ..." + if $GIT_BIN clone $RECHNUNG_STY_URL >/dev/null 2>&1; then + print_ok + cd rechnung + ## rechnung.sty kompilieren + print_start "Kompiliere $RECHNUNG_STY_FILE ..." + if $LATEX_BIN rechnung.ins >/dev/null 2>&1; then + print_ok + ## mach TEXHOME/rechnung/ kopieren + print_start "Kopiere $RECHNUNG_STY_FILE nach $RECHNUNG_STY_HOME ..." + if [ ! -d "$RECHNUNG_STY_HOME" ]; then + mkdir -p "$RECHNUNG_STY_HOME" + fi + if cp rechnung.sty "$RECHNUNG_STY_HOME"; then + print_ok + print_info "Paket $RECHNUNG_STY_FILE erfolgreich installiert" + else + print_failed "Installation fehlgeschlagen" + clean_and_exit 12 + fi + else + print_failed "Kompilieren fehlgeschlagen" + clean_and_exit 11 + fi + else + print_failed "Klonen des Repos fehlgeschlagen" + clean_and_exit 10 + fi + cd "$TEMPDIR" ) # Whitespaces entfernen @@ -358,47 +476,6 @@ trim_value() { set +f } -# LaTeX-Paket rechnung.sty installieren -# ------------------------------------- - -install_sty() ( - - old_pwd=$(pwd) - - check_binaries "$GIT_BIN $LATEX_BIN" - print_start "Hole Repo von $STY_URL ..." - - if $GIT_BIN clone $STY_URL >/dev/null 2>&1; then - print_ok - cd rechnung - mkdir -p "$STY_HOME/rechnung/" - print_start "Kompiliere $STY_RECHNUNG ..." - - if $LATEX_BIN rechnung.ins >/dev/null 2>&1; then - print_ok - print_start "Kopiere $STY_RECHNUNG nach $STY_HOME/rechnung ..." - - if cp rechnung.sty "$STY_HOME/rechnung/"; then - print_ok - else - failed_and_exit 3 - fi - cd "$old_pwd" - rm -rf rechnung/ - print_info "Paket $STY_RECHNUNG erfolgreich installiert" - else - print_error "Installation fehlgeschlagen" - exit 4 - fi - else - print_error "Klonen des Repos fehlgeschlagen" - exit 5 - fi -) - -# wenn ein neuer Kunde beginnt, alle Variablen neu initialisieren -# --------------------------------------------------------------- - reset_values() { print_info "Beginne neue Rechnung" @@ -424,6 +501,7 @@ set_value() { trim_key "$key" trim_value "$value" + print_info "Setze $key auf $value" case $KEY_BUFFER in kunde) KUNDE="$VALUE_BUFFER";; adresse) ADRESSE="$VALUE_BUFFER";; @@ -437,7 +515,7 @@ set_value() { esac } -make_invoice() ( +make_invoice() { # die funktion erstellt in einer subshell die rechnung. schlägt die # prüfung der rechnungsdaten fehl, kehrt sie zur aufrufenden shell @@ -445,11 +523,12 @@ make_invoice() ( # darin befindlichen platzhalter durch die entsprechenden variablen zu # ersetzen und das ganze zu kompilieren. - check_rechnunsdaten - if [ ! "$?" -eq 0 ]; then - return 1 + if ! check_rechnunsdaten; then + print_error "Check der Rechnungsdaten fehlgeschlagen" + print_error "Erstelle keine Rechnung" + print_trenner + return fi - dead_days="14" if [ "$(date +%u)" -gt 5 ]; then dead_days="16" @@ -481,18 +560,20 @@ make_invoice() ( if ! $GENPDF "$filename" 1>&2 >/dev/null; then print_error "Kompilierung von $filename fehlgeschlagen" - logfile=$(echo "$filename" | sed -e s/ltx/log/) + logfile=$(echo "$OUTPUTDIR/$filename" | sed -e s/ltx/log/) print_error "$(grep "Error" $logfile)" else print_info "Rechnung $filename erfolgreich erstellt" + ANZAHL_RECHNUNGEN=$(expr $ANZAHL_RECHNUNGEN + 1) fi if [ -x "$RUBBER_BIN" ]; then "$RUBBER_BIN" --clean "$filename" fi -) + print_trenner +} -proced_ini_line() { +parse_line() { line=$* first=$(echo "$line" | cut -c1-1) @@ -524,71 +605,110 @@ proced_ini_line() { fi } -display_help() ( - echo "Usage: $PROGRAMM_NAME [-f rechnungsfile] [-h] [-l lco-file]" -) - -display_version() ( - - echo "$PROGRAMM_NAME version $PROGRAMM_VERSION" -) - -quit() { - printf "\n" - printf "%s" "$BLUE" - printf "[-] Exit%s\n" "$NORMAL" - exit 1 -} # --- Programmstart --- # # --------------------- # -# CLI Optionen auswerten -while getopts f:hl:qv opt -do - case $opt in - f) RECHNUNGSFILE=$OPTARG;; - h) display_help; exit 0;; - i) INSTALL_LCO_FILE=1;; - l) LCOFILE=$OPTARG;; - q) VERBOSITY=0;; - v) display_version; exit 0;; - *) display_help; exit 1;; - esac -done +## Nicht als Root laufen lassen +if [ "$(id -u)" -eq 0 ]; then + echo "$PROGRAMM_NAME: Das Skript sollte nicht als Root ausgeführt werden!" + exit 1 +fi -# Farbe aktivieren wenn vorhanden +## Farbe aktivieren wenn vorhanden +NUMBER_OF_COLORS=$($TPUT_BIN colors) if [ -n "$NUMBER_OF_COLORS" ] && [ "$NUMBER_OF_COLORS" -ge 8 ]; then COLORED_OUTPUT=1 fi -print_deko " ========================" -print_deko " = $PROGRAMM_NAME v$PROGRAMM_VERSION =" -print_deko " ========================" - -# Verschiedene Basic Checks -if [ "$(id -u)" -eq 0 ]; then - print_error "$0: Das Skript darf nicht als Root ausgeführt werden." - exit 1 -fi -check_binaries "$EXECUTABLES_TO_CHECK" -check_readable "$RECHNUNGSFILE" -check_readable "$TEMPLATEFILE" -check_readable "$LCOFILE" -if ! check_sty; then - print_warn "Verwenden sie -i um $STY_RECHNUNG zu installieren" - if [ $INSTALL_LCO_FILE -eq 0 ]; then - exit 7 - else - install_sty - fi -fi - -# Kundendatei einlesen und rechnungen erstellen -while IFS= read -r rawline +## CLI Optionen auswerten +while getopts b:hik:l:o:t:vV opt do - trim_line "$rawline" - proced_ini_line "$LINE_BUFFER" -done < "$RECHNUNGSFILE" + case $opt in + b) + BASEDIR=$(set_cli_opt "$OPTARG") + ;; + h) + usage_and_exit 0 + ;; + i) + INSTALL_LCO_FILE=1 + ;; + k) + KUNDENFILE=$(set_cli_opt "$OPTARG") + ;; + l) + LCOFILE=$(set_cli_opt "$OPTARG") + ;; + o) + OUTPUTDIR=$(set_cli_opt "$OPTARG") + ;; + t) + TEMPLATEFILE=$(set_cli_opt "$OPTARG") + ;; + v) + VERBOSITY=1 + ;; + V) + print_version + ;; + *) + usage_and_exit 2 + ;; + esac +done +print_head + +## Die nötigen Programme und rechnung.sty testen +for program in $EXECUTABLES_TO_CHECK; do + check_binary $program +done + +## relative pfade in den variablen LCOFILE, KUNDENFILE und TEMPLATEFILE wenn +## nötig in absolute pfade umwandeln. -- TODO: das geht sicher besser. +LCOFILE=$(set_abs_path "$LCOFILE") +KUNDENFILE=$(set_abs_path "$KUNDENFILE") +TEMPLATEFILE=$(set_abs_path "$TEMPLATEFILE") + +## verzeichnisse testen +check_dir "$BASEDIR" +check_dir "$OUTPUTDIR" + +## die nötigen Dateien testen +for file in "$LCOFILE" "$KUNDENFILE" "$TEMPLATEFILE"; do + check_file "$file" +done + +## temporäres Verzeichnis erstellen und hineinwechseln +TEMPDIR=$(mktemp -d) +if [ ! $? -eq 0 ]; then + print_error "Erstellen der temp. Verzeichnis fehlgeschlagen" + exit 8 +else + cd "$TEMPDIR" + print_info "Wechsle nach $(pwd)" + ## prüfen, ob rechnung.sty installiert ist + if ! check_sty; then + if [ $INSTALL_LCO_FILE -eq 0 ]; then + print_error "Verwenden sie -i um $RECHNUNG_STY_FILE zu installieren" + clear_and_exit 9 + else + print_info "Versuche $RECHNUNG_STY_FILE zu installieren" + install_sty + fi + fi + # Kundendatei einlesen und die einzelnen Zeilen an den Zeilenparser + # weiterreichen. + + while IFS= read -r rawline + do + trim_line "$rawline" + parse_line "$LINE_BUFFER" + done < "$KUNDENFILE" +fi + + +# aufräumen +clear_and_exit 0