NoPaste

Kalender-Script

von heinz

SNIPPET_TEXT:
  1. #!/bin/bash
  2. #
  3. # Script um einen Kalender fuer ein bestimmtes Jahr zu erstellen.
  4. #
  5. # heinz 29-01-2021
  6. #
  7.  
  8.  
  9. VERSIOn='0.15'
  10. DEBUg=false
  11.  
  12.  
  13. # Verzeichnis in dem das Script liegt
  14. scriptpfad="$(dirname `readlink -f $0`)"
  15.  
  16. # Liste der Feiertage
  17. feiertag_liste="$scriptpfad/feiertagliste.txt"
  18.  
  19. # Einstellungen fuer den Kalender
  20. einstellungen="$scriptpfad/einstellungen.txt"
  21.  
  22. # Verzeichnis in dem die Bilder fuer die Monate gesucht werden. (1-12.typ, 01-12.typ, Januar-Dezember.typ, januar-dezember.typ)
  23. monatsbilder_verzeichnis="$scriptpfad/bilder"
  24.  
  25. # Tempverzeichnis
  26. tempverzeichnis="/tmp/temp_kalender_temp"
  27.  
  28. # Verwendete/Benoetigte Programme
  29. verwendete_programme=( dialog convert montage identify cal ncal date )
  30.  
  31. # Anzeigedauer fuer Infos und Fehler in vollen Sekunden
  32. infopause=5
  33.  
  34. # Jahreszahl (ist hier nur, damit man sieht das es sie gibt...)
  35. jahr=
  36.  
  37. # Voreinstellungen fuer dialog
  38. dialog="dialog --stdout --colors --backtitle ---==\ZbKalender\ZB==---\Z4__$VERSIOn"
  39. test -s "$scriptpfad/dialogrc" && export DIALOGRC="$scriptpfad/dialogrc"
  40.  
  41. # Moegliche Text-Positionen
  42. textpositionen=( Center North NorthEast East SouthEast South SouthWest West NorthWest )
  43.  
  44. # Sofortstart (-e JAHR)
  45. sofortstart=false
  46.  
  47. # Font-Grafik erstellen (--fonts)
  48. fonts_zeigen=false
  49.  
  50.  
  51.  
  52.  
  53.  
  54. # Funktionen ---------------------------------------------------------------------------------------
  55.  
  56. # Feiertags-funktionen ---------------------------------------------------------
  57. function Feiertage_menue
  58. {
  59.         local wahl knopf tage_anzeige
  60.  
  61.         while true
  62.         do
  63.                 wahl=$($dialog --title "\Z6[\Z5 Feiertagmenue \Z6]" \
  64.                         --default-item "$wahl" \
  65.                         --cancel-label "Hauptmenue" \
  66.                         --menu '\Z2Bitte waehlen Sie:' 20 75 12 \
  67.                         "zeige" "Feiertage" \
  68.                         "neuer" "Feiertag" \
  69.                         "Feiertage" "bearbeiten" \
  70.                         "loesche" "Feiertage")
  71.                 knopf=$?
  72.                 test $knopf -eq 1 && return
  73.  
  74.                 case "$wahl" in
  75.                         'zeige') # Feiertage anzeigen
  76.                                 Zeige_feiertage
  77.                         ;;
  78.                         'neuer') # Neuen Feiertag erstellen
  79.                                 Neuer_feiertag
  80.                         ;;
  81.                         'Feiertage') # Feiertage bearbeiten
  82.                                 Aendere_feiertag
  83.                         ;;
  84.                         'loesche') # Feiertage loeschen
  85.                                 Loesche_feiertag
  86.                         ;;
  87.                 esac
  88.         done
  89. }
  90.  
  91.  
  92.  
  93.  
  94.  
  95.  
  96.  
  97.  
  98.  
  99. function Zeige_feiertage
  100. {
  101.         Gibt_es_eingetragene_Feiertage || return
  102.  
  103. # Variablen
  104.         local akt_jahr="`date +%Y`"
  105.         local jahr=$akt_jahr
  106.         local name formel datum z feier_farbe
  107.  
  108. # Hauptschleife
  109.         while true
  110.         do
  111. # Jahr eingeben
  112.                 while true
  113.                 do
  114.                         jahr=`$dialog --title "\Z6[\Z5 Feiertage anzeigen \Z6]" \
  115.                                 --cancel-label "Zurueck" \
  116.                                 --inputbox '\Z2Bitte geben Sie das Jahr an:  \Z5(4 Stellig)' 8 45 $jahr`
  117.                         test -z "$jahr" && return
  118.  
  119. # Eingabe testen (4-Stellig und nur Zahlen)
  120.                         if test ${#jahr} -ne 4 -o -n "`tr -d '[:digit:]' <<<$jahr`"
  121.                         then
  122.                                 Info "\Z3Die Eingabe \Z2$jahr\Z3 ist nicht korrekt!" Fehler
  123.                         else
  124.                                 break
  125.                         fi
  126.                 done
  127.  
  128. # Feiertage einlesen (In Namen und Formeln aufteilen)
  129.                 unset name
  130.                 unset formel
  131.                 unset datum
  132.                 z=0
  133.                 while read
  134.                 do
  135.                         name[$z]="${REPLY%%|*}"
  136.                         formel[$z]="${REPLY##*|}"
  137.                         let z++
  138.                 done <"$feiertag_liste"
  139.  
  140.  
  141. # Feiertage berechnen (in sek. seit...)
  142.                 z=0
  143.                 while test -n "${formel[$z]}"
  144.                 do
  145.                         if test "`tr -d '[:digit:]' <<<"${formel[$z]}"`" == '-'
  146.                         then
  147. # Datum ist ein festes Datum
  148.                                 datum[$z]="$(date -d "$jahr-${formel[$z]}" '+%s')|$z"
  149.                         elif grep -qe '^ncal -e$' <<<"${formel[$z]}"
  150.                         then
  151. # Datum ist Ostern
  152.                                 datum[$z]="$(date -d "$(ncal -e $jahr)" '+%s')|$z"
  153.                         elif test -z "`sed -r 's#[+-][[:digit:]]+day##' <<<"${formel[$z]##* }"`"
  154.                         then
  155. # Datum geht von Ostern aus
  156.                                 datum[$z]="$(date -d "$(ncal -e $jahr) ${formel[$z]##* }" '+%s')|$z"
  157.                         else
  158. # Datum ist falsch
  159.                                 datum[$z]="Fehler|$z"
  160.                         fi
  161.                         let z++
  162.                 done
  163.  
  164. # Feiertage sortieren (nach Datum)
  165.                 datum=( `tr ' ' '\n' <<<${datum[*]}|sort -nk1` )
  166.  
  167. # Feiertage anzeigen (Bereits vergangene in Rot, noch kommende in Gelb)
  168.                 clear
  169.                 echo -e "\e[32mFeiertage fuer das Jahr $jahr:\e[10C\e[35m(Heute `date '+%A, %d %B %Y'`)\e[32m\n------------------------------"
  170.                 z=0
  171.                 while test -n "${datum[$z]}"
  172.                 do
  173.                         test ${datum[$z]%%|*} -le `date '+%s'` && feier_farbe='\e[31m' || feier_farbe='\e[33m'
  174.                         echo -e "$feier_farbe${name[${datum[$z]##*|}]}\r\e[40C\e[36m`date -d "@${datum[$z]%%|*}" '+%A, %d %B'`\e[0m"
  175.                         let z++
  176.                 done
  177.                 read -sn1
  178.         done
  179. }
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  
  186.  
  187.  
  188.  
  189. function Neuer_feiertag # ($1=wert1, $2=wert2  (Sind $1 und $2 "gefuellt", dann Feiertag aendern))
  190. {
  191. # Datei erzeugen, wenn noch nicht existent
  192.         touch "$feiertag_liste"
  193.  
  194. # Variablen
  195.         local werte wert1 wert2
  196.         local fehler=true
  197.         local datumtest knopf
  198.         local akt_jahr="`date +%Y`"
  199.         local ueberschrift='Neuen Feiertag eintragen'
  200.         local titel='Neuer Feiertag'
  201.         local aendern=false
  202.  
  203. # Feiertage aendern?
  204.         if test -n "$1" -a -n "$2"
  205.         then
  206.                 wert1="$1"
  207.                 wert2="$2"
  208.                 ueberschrift='Feiertag aendern'
  209.                 titel='Feiertag bearbeiten'
  210.                 aendern=true
  211.         fi
  212.  
  213. # Hauptschleife
  214.         while $fehler
  215.         do
  216.                 fehler=false
  217.  
  218.                 werte=`$dialog --title "\Z6[\Z5 $titel \Z6]" \
  219.                         --extra-button --extra-label 'Hilfe' \
  220.                         --output-separator \~ \
  221.                         --form "\Z2$ueberschrift:" 9 75 2 \
  222.                         "Feiertag Name:" 1 2 "$wert1" 1 19 50 50 \
  223.                         "Datum (Formel):" 2 2 "$wert2" 2 19 50 50`
  224.                 knopf=$?
  225. # Abbruch-Knopf
  226.                 test $knopf -eq 1 && return
  227.  
  228. # Werte ermitteln
  229.                 wert1="`cut -f1 -d~ <<<"$werte"`"
  230.                 wert2="`cut -f2 -d~ <<<"$werte"`"
  231.  
  232. # OK-Knopf
  233.                 if test $knopf -eq 0
  234.                 then
  235. # Auf leere Eingaben testen
  236.                         if test -z "$wert1" -o -z "$wert2"
  237.                         then
  238.                                 fehler=true
  239.                                 Info '\Z3Bitte keine leeren Angaben!' Fehler
  240.                         fi
  241.  
  242. # Auf verbotenes Zeichen >|< testen
  243.                         if grep -qe '|' <<<"$wert1$wert2"
  244.                         then
  245.                                 fehler=true
  246.                                 Info '\Z3Bitte keine >\Z2|\Z3< Zeichen verwenden!' Fehler
  247.                         fi
  248.  
  249. # Existiert der Feiertag schon?
  250.                         if grep -qe "^$wert1|" "$feiertag_liste" && ! $aendern
  251.                         then
  252.                                 fehler=true
  253.                                 Info '\Z3Dieser Feiertag existiert schon!' Fehler
  254.                         fi
  255.  
  256. # Datum testen
  257.                         datumtest=
  258.                         if test "`tr -d '[:digit:]' <<<"$wert2"`" == '-'
  259.                         then
  260. # Datum ist ein festes Datum
  261.                                 datumtest=$(date -d "$akt_jahr-$wert2" '+%A, %d %B, %Y')
  262.                         elif grep -qe '^ncal -e$' <<<"$wert2"
  263.                         then
  264. # Datum ist Ostern
  265.                                 datumtest=$(date -d "$(ncal -e $akt_jahr)" '+%A, %d %B, %Y')
  266.                         elif test -z "`sed -r 's#[+-][[:digit:]]+day##' <<<"${wert2##* }"`"
  267.                         then
  268. # Datum geht von Ostern aus
  269.                                 datumtest=$(date -d "$(ncal -e $akt_jahr) ${wert2##* }" '+%A, %d %B, %Y')
  270.                         else
  271. # Datum ist falsch
  272.                                 fehler=true
  273.                                 Info '\Z3Das Datum ist falsch! \Z4(Siehe Hilfe...)' Fehler
  274.                         fi
  275.  
  276. # Konnte das Datum ermittelt werden?
  277.                         if test -z "$datumtest"
  278.                         then
  279.                                 fehler=true
  280.                                 Info '\Z3Das Datum konnte nicht errechnet werden! \Z4(Siehe Hilfe...)' Fehler
  281.                         fi
  282.                 else
  283. # Hilfe-Knopf
  284.                         fehler=true
  285.                         $dialog --title "\Z6[\Z5 Hilfe \Z6]" --infobox \
  286.                                 '\Z2Anleitung zur Datumseingabe:\n-----------------------------\n\Z6Methode 1: \Z3Monat-Tag\Z6  z.B. \Z31 Mai\Z6 = \Z35-1\Z6\n\nMethode 2: \Z3Ostern\Z6                = \Z3ncal -e\Z6\n\nMethode 3: \Z3Pfingstsonntag\Z6        = \Z3ncal -e +49day\Z6\n  oder   : \Z3Karfreitag\Z6            = \Z3ncal -e -2day' \
  287.                                 10 75
  288.                         read -sn1
  289.                 fi
  290.  
  291. # Datum vom Menschen pruefen lassen
  292.                 if test -n "$datumtest" -a "$fehler" == 'false'
  293.                 then
  294.                         if ! $dialog --title "\Z6[\Z5 Feiertag pruefen \Z6]" \
  295.                                         --yesno "\Z2Das errechnete Datum fuer den Feiertag\n\Z3$wert1\Z2\nim aktuellen Jahr \Z3$akt_jahr\Z2\nlautet: \Z3$datumtest\Z2\n\nIst das korrekt?" \
  296.                                         10 75
  297.                         then
  298.                                 fehler=true
  299.                         fi
  300.                 fi
  301.         done
  302.  
  303. # Feiertag aendern?
  304.         if $aendern
  305.         then
  306. # Feiertag aus Liste entfernen
  307.                 grep -ve "^$1|" "$feiertag_liste" >"$feiertag_liste.tmp" && mv "$feiertag_liste.tmp" "$feiertag_liste"
  308.         fi
  309.  
  310. # Feiertag eintragen
  311.         echo -e "$wert1|$wert2" >>"$feiertag_liste"
  312. }
  313.  
  314.  
  315.  
  316.  
  317.  
  318.  
  319.  
  320.  
  321.  
  322. function Aendere_feiertag
  323. {
  324.         Gibt_es_eingetragene_Feiertage || return
  325.  
  326. # Variablen
  327.         local menue name formel wahl z
  328.  
  329. # Hauptschleife
  330.         while true
  331.         do
  332. # Liste erzeugen
  333.                 unset name
  334.                 unset formel
  335.                 menue=
  336.                 z=0
  337.                 while read
  338.                 do
  339.                         name[$z]="${REPLY%%|*}"
  340.                         formel[$z]="${REPLY##*|}"
  341.                         menue="$menue $z ${name[$z]// /_}"
  342.                         let z++
  343.                 done <"$feiertag_liste"
  344.  
  345. # Feiertag auswaehlen
  346.                 wahl=$($dialog --title "\Z6[\Z5 Feiertage bearbeiten \Z6]" \
  347.                         --cancel-label "Zurueck" \
  348.                         --default-item "$wahl" \
  349.                         --menu '\Z2Waehlen Sie einen Feiertag:' 20 75 12 $menue)
  350.                 test $? -eq 1 && return
  351.  
  352. # Feiertag aendern
  353.                 Neuer_feiertag "${name[$wahl]}" "${formel[$wahl]}"
  354.         done
  355. }
  356.  
  357.  
  358.  
  359.  
  360.  
  361.  
  362.  
  363.  
  364.  
  365. function Loesche_feiertag
  366. {
  367.         Gibt_es_eingetragene_Feiertage || return
  368.  
  369. # Variablen
  370.         local menue name wahl z
  371.  
  372. # Hauptschleife
  373.         while true
  374.         do
  375. # Liste erzeugen
  376.                 unset name
  377.                 menue=
  378.                 z=0
  379.                 while read
  380.                 do
  381.                         name[$z]="${REPLY%%|*}"
  382.                         menue="$menue $z ${name[$z]// /_}"
  383.                         let z++
  384.                 done <"$feiertag_liste"
  385.  
  386. # Feiertag auswaehlen
  387.                 wahl=$($dialog --title "\Z6[\Z5 Feiertage loeschen \Z6]" \
  388.                         --cancel-label "Zurueck" \
  389.                         --default-item "$wahl" \
  390.                         --menu '\Z2Waehlen Sie einen Feiertag:' 20 75 12 $menue)
  391.                 test $? -eq 1 && return
  392.  
  393. # Feiertag loeschen Abfrage
  394.                 if $dialog --title "\Z6[\Z5 Feiertage loeschen \Z6]" \
  395.                         --defaultno \
  396.                         --yesno "\Z3>${name[$wahl]}< \Z2loeschen.\n\Z1Sind Sie sicher?" 6 75
  397.                 then
  398. # Loeschen
  399.                         grep -ve "^${name[$wahl]}|" "$feiertag_liste" >"$feiertag_liste.tmp" && mv "$feiertag_liste.tmp" "$feiertag_liste"
  400.                 fi
  401.         done
  402. }
  403.  
  404.  
  405.  
  406.  
  407.  
  408.  
  409.  
  410.  
  411.  
  412. function Feiertagstermine_ermitteln
  413. {
  414.         test -s "$feiertag_liste" || return
  415.  
  416. # Variablen
  417.         local name
  418.         local formel
  419.         local datum
  420.         local z
  421.  
  422.  
  423. # Feiertage einlesen
  424.         z=0
  425.         while read
  426.         do
  427.                 name[$z]="${REPLY%%|*}"
  428.                 formel[$z]="${REPLY##*|}"
  429.                 let z++
  430.         done <"$feiertag_liste"
  431.  
  432. # Feiertage berechnen (in sek. seit...)
  433.         z=0
  434.         while test -n "${formel[$z]}"
  435.         do
  436.                 if test "`tr -d '[:digit:]' <<<"${formel[$z]}"`" == '-'
  437.                 then
  438. # Datum ist ein festes Datum
  439.                         datum[$z]="$(date -d "$jahr-${formel[$z]}" '+%s')|$z"
  440.                 elif grep -qe '^ncal -e$' <<<"${formel[$z]}"
  441.                 then
  442. # Datum ist Ostern
  443.                         datum[$z]="$(date -d "$(ncal -e $jahr)" '+%s')|$z"
  444.                 elif test -z "`sed -r 's#[+-][[:digit:]]+day##' <<<"${formel[$z]##* }"`"
  445.                 then
  446. # Datum geht von Ostern aus
  447.                         datum[$z]="$(date -d "$(ncal -e $jahr) ${formel[$z]##* }" '+%s')|$z"
  448.                 else
  449. # Datum ist falsch
  450.                         datum[$z]="Fehler|$z"
  451.                 fi
  452.                 let z++
  453.         done
  454.  
  455. # Feiertage sortieren
  456.         datum=( `tr ' ' '\n' <<<${datum[*]}|sort -nk1` )
  457.  
  458. # Name und Termin fuer alle Feiertage zurueckgeben.
  459.         z=0
  460.         while test -n "${datum[$z]}"
  461.         do
  462.                 echo -e "${name[${datum[$z]##*|}]}|${datum[$z]%%|*}"
  463.                 let z++
  464.         done
  465. }
  466.  
  467.  
  468.  
  469.  
  470.  
  471.  
  472.  
  473.  
  474.  
  475. # Kalender-Funktionen ----------------------------------------------------------
  476. function Einstellungen_reset
  477. {
  478.         jahr=`date '+%Y'`
  479.         tagesgroesse='100x100'
  480.         tagesaufteilung='7x5'
  481.         tagesabstand_h='10'
  482.         tagesabstand_v='20'
  483.         schriftgroesse_tage='30'
  484.         schriftfarbe_tage='#000000'
  485.         schriftfarbe_sonntage='#c00000'
  486.         hintergrundfarbe_tage='#ffffff'
  487.         schriftart="`convert -list font|tr -d ' '|grep Font:|cut -f2 -d:|head -n1`"
  488.         textposition_tage="${textpositionen[1]}"
  489.         rahmendicke_tage=1
  490.         rahmenfarbe_tage='#000000'
  491.         schriftgroesse_monat='50'
  492.         schriftfarbe_monat='#000000'
  493.         rand_h='100'
  494.         rand_v='50'
  495.         hintergrundfarbe_kalender='#ffffff'
  496.         schriftgroesse_feiertag='8'
  497.         textposition_feiertag="${textpositionen[0]}"
  498.         schriftfarbe_feiertag='#0000c0'
  499.         schriftgroesse_woche='10'
  500.         textposition_woche="${textpositionen[5]}"
  501.         schriftfarbe_woche='#000000'
  502.         text_vor_woche='KW'
  503.  
  504.         Einstellungen_machen
  505. }
  506.  
  507.  
  508.  
  509.  
  510.  
  511.  
  512.  
  513.  
  514.  
  515. function Einstellungen_machen
  516. {
  517.         local wert werte wertmenge z
  518.         local fehler=true
  519.  
  520. # Werte in Bearbeitungs-Array ablegen und falls leer, mit "sinnvollen" Standardwerten versehen
  521.         wert=(
  522.                 "$jahr"
  523.                 "${tagesgroesse:=100x100}"
  524.                 "${tagesaufteilung:=7x5}"
  525.                 "${tagesabstand_h:=10}"
  526.                 "${tagesabstand_v:=20}"
  527.                 "${schriftgroesse_tage:=20}"
  528.                 "${schriftfarbe_tage:=#000000}"
  529.                 "${schriftfarbe_sonntage:=#c00000}"
  530.                 "${hintergrundfarbe_tage:=#ffffff}"
  531.                 "${schriftart:=`convert -list font|tr -d ' '|grep Font:|cut -f2 -d:|head -n1`}"
  532.                 "${textposition_tage:=${textpositionen[1]}}"
  533.                 "${rahmendicke_tage:=1}"
  534.                 "${rahmenfarbe_tage:=#000000}"
  535.                 "${schriftgroesse_monat:=50}"
  536.                 "${schriftfarbe_monat:=#000000}"
  537.                 "${rand_h:=100}"
  538.                 "${rand_v:=50}"
  539.                 "${hintergrundfarbe_kalender:=#ffffff}"
  540.                 "${schriftgroesse_feiertag:=8}"
  541.                 "${textposition_feiertag:=${textpositionen[0]}}"
  542.                 "${schriftfarbe_feiertag:=#0000c0}"
  543.                 "${schriftgroesse_woche:=10}"
  544.                 "${textposition_woche:=${textpositionen[5]}}"
  545.                 "${schriftfarbe_woche:=#000000}"
  546.                 "${text_vor_woche}"
  547.         )
  548.        
  549.  
  550. # Werte vom User eingeben/aendern lassen und auf korrektheit pruefen
  551.         while $fehler
  552.         do
  553.                 fehler=false
  554.  
  555.                 werte=`$dialog --title "\Z6[\Z5 Einstellungen \Z6]" \
  556.                         --extra-button --extra-label 'Textpositionen' \
  557.                         --help-button --help-label 'Fonts' \
  558.                         --ok-label "Speichern" \
  559.                         --output-separator \~ \
  560.                         --form "\Z2Kalender-Einstellungen:" 19 75 12 \
  561.                         "Jahr:" 1 2 "${wert[0]}" 1 40 5 4 \
  562.                         "Groesse Tage: (BxH)" 2 2 "${wert[1]}" 2 40 10 9 \
  563.                         "Aufteilung Tage: (Horiz.xVert.)" 3 2 "${wert[2]}" 3 40 6 5 \
  564.                         "Abstand Tage Horizontal:" 4 2 "${wert[3]}" 4 40 4 3 \
  565.                         "Abstand Tage Vertikal:" 5 2 "${wert[4]}" 5 40 4 3 \
  566.                         "Schriftgroesse Tage:" 6 2 "${wert[5]}" 6 40 4 3 \
  567.                         "Schriftfarbe Tage:" 7 2 "${wert[6]}" 7 40 8 7 \
  568.                         "Schriftfarbe Sonntage:" 8 2 "${wert[7]}" 8 40 8 7 \
  569.                         "Hintergrundfarbe Tage:" 9 2 "${wert[8]}" 9 40 8 7 \
  570.                         "Schriftart:" 10 2 "${wert[9]}" 10 40 41 40 \
  571.                         "Textposition Tage:" 11 2 "${wert[10]}" 11 40 10 9 \
  572.                         "Rahmendicke Tage:" 12 2 "${wert[11]}" 12 40 3 2 \
  573.                         "Rahmenfarbe Tage:" 13 2 "${wert[12]}" 13 40 8 7 \
  574.                         "Schriftgroesse Monat:" 14 2 "${wert[13]}" 14 40 4 3 \
  575.                         "Schriftfarbe Monat:" 15 2 "${wert[14]}" 15 40 8 7 \
  576.                         "Rand Horizontal:" 16 2 "${wert[15]}" 16 40 4 3 \
  577.                         "Rand Vertikal:" 17 2 "${wert[16]}" 17 40 4 3 \
  578.                         "Hintergrundfarbe Kalender:" 18 2 "${wert[17]}" 18 40 8 7 \
  579.                         "Schriftgroesse Feiertag:" 19 2 "${wert[18]}" 19 40 4 3 \
  580.                         "Textposition Feiertage:" 20 2 "${wert[19]}" 20 40 10 9 \
  581.                         "Schriftfarbe Feiertage:" 21 2 "${wert[20]}" 21 40 8 7 \
  582.                         "Schriftgroesse Woche:" 22 2 "${wert[21]}" 22 40 4 3 \
  583.                         "Textposition Woche:" 23 2 "${wert[22]}" 23 40 10 9 \
  584.                         "Schriftfarbe Woche:" 24 2 "${wert[23]}" 24 40 8 7 \
  585.                         "Text vor Woche:" 25 2 "${wert[24]}" 25 40 21 20 \
  586.                         `
  587.  
  588. # Tasten abfragen
  589.                 case "$?" in
  590.                         1) # Abbruch
  591.                                 return
  592.                         ;;
  593.                         3) # Textpositionen anzeigen
  594.                                 Info "\n\Z6`tr ' ' '\n' <<<"${textpositionen[*]}"`\n\n\Z3Taste:\n" '' 'Warten'
  595.                                 fehler=true
  596.                         ;;
  597.                         2) # Fonts anzeigen
  598.                                 echo -e "Druecken~Sie~die~Taste~[q]~zum~schliessen.\n~\n`convert -list font`"|grep -e '~' -e 'Font:'|tr -d ' '|tr '~' ' '|cut -f2 -d:|less
  599.                                 fehler=true
  600.                         ;;
  601.                 esac
  602.  
  603. # Eingegebene Werte wieder in das Array legen
  604.                 let wertmenge=`tr '~' '\n' <<<"$werte"|wc -l`-1
  605.                 for z in `seq $wertmenge`
  606.                 do
  607.                         wert[$z-1]="`cut -f$z -d~ <<<"$werte"`"
  608.                 done
  609.  
  610. # Alle Werte testen
  611. # Jahr
  612.                 if test ${#wert[0]} -ne 4 -o -n "`tr -d '[:digit:]' <<<${wert[0]}`"
  613.                 then
  614.                         Info "\Z1Die Jahreszahl \Z3${wert[0]:-leer}\Z1 ist nicht korrekt!" Fehler
  615.                         fehler=true
  616.                 fi
  617. # Tagesgroesse
  618.                 if test -z "${wert[1]}" -o "`tr -d '[:digit:]' <<<${wert[1]}`" != 'x' -o -z "${wert[1]%%x*}" -o -z "${wert[1]##*x}"
  619.                 then
  620.                         Info "\Z1Die Groesse der Tage \Z3${wert[1]:-leer}\Z1 ist nicht korrekt!" Fehler
  621.                         fehler=true
  622.                 fi
  623. # Tagesaufteilung
  624.                 if test -z "${wert[2]}" -o "`tr -d '[:digit:]' <<<${wert[2]}`" != 'x' -o -z "${wert[2]%%x*}" -o -z "${wert[2]##*x}" -o $((${wert[2]%%x*}*${wert[2]##*x})) -lt 31
  625.                 then
  626.                         Info "\Z1Die Aufteilung der Tage \Z3${wert[2]:-leer}\Z1 ist nicht korrekt!" Fehler
  627.                         fehler=true
  628.                 fi
  629. # Abstand Tage Horizontal
  630.                 Nur_zahlen_test "${wert[3]}" "Der horizontale Abstand der Tage" && fehler=true
  631. # Abstand Tage Vertikal
  632.                 Nur_zahlen_test "${wert[4]}" "Der vertikale Abstand der Tage" && fehler=true
  633. # Schriftgroesse Tage
  634.                 Nur_zahlen_test "${wert[5]}" "Die Schriftgroesse der Tage" && fehler=true
  635. # Schriftfarbe Tage
  636.                 Farbwert_test "${wert[6]}" "Die Schriftfarbe der Tage" && fehler=true
  637. # Schriftfarbe Sonntage
  638.                 Farbwert_test "${wert[7]}" "Die Schriftfarbe der Sonntage" && fehler=true
  639. # Hintergrundfarbe Tage
  640.                 if test "${wert[8]}" != 'none'
  641.                 then
  642.                         Farbwert_test "${wert[8]}" "Die Hintergrundfarbe der Tage" && fehler=true
  643.                 fi
  644. # Schriftart
  645.                 if test -z "${wert[9]}" -o -z "`convert -list font|tr -d ' '|grep Font:|cut -f2 -d:|grep -e "^${wert[9]}$"`"
  646.                 then
  647.                         Info "\Z1Die Schriftart \Z3${wert[9]:-leer}\Z1 kennt Ihr System nicht!" Fehler
  648.                         fehler=true
  649.                 fi
  650. # Textposition Tage
  651.                 Textposition_test "${wert[10]}" "Die Schriftposition der Tage" && fehler=true
  652. # Rahmenstaerke
  653.                 Nur_zahlen_test "${wert[11]}" "Die Rahmenstaerke der Tage" && fehler=true
  654. # Rahmenfarbe
  655.                 Farbwert_test "${wert[12]}" "Die Rahmenfarbe der Tage" && fehler=true
  656. # Schriftgroesse Monat
  657.                 Nur_zahlen_test "${wert[13]}" "Die Schriftgroesse der Monate" && fehler=true
  658. # Schriftfarbe Monat
  659.                 Farbwert_test "${wert[14]}" "Die Schriftfarbe der Monate" && fehler=true
  660. # Rand Horizontal
  661.                 Nur_zahlen_test "${wert[15]}" "Der horizontale Rand" && fehler=true
  662. # Rand Vertikal
  663.                 Nur_zahlen_test "${wert[16]}" "Der vertikale Rand" && fehler=true
  664. # Hintergrundfarbe Kalender
  665.                 Farbwert_test "${wert[17]}" "Die Hintergrundfarbe des Kalenders" && fehler=true
  666. # Schriftgroesse Feiertage
  667.                 Nur_zahlen_test "${wert[18]}" "Die Schriftgroesse der Feiertage" && fehler=true
  668. # Textposition Feiertag
  669.                 Textposition_test "${wert[19]}" "Die Schriftposition der Feiertage" && fehler=true
  670. # Schriftfarbe Feiertage
  671.                 Farbwert_test "${wert[20]}" "Die Schriftfarbe der Feiertage" && fehler=true
  672. # Schriftgroesse Woche
  673.                 Nur_zahlen_test "${wert[21]}" "Die Schriftgroesse der Wochen" && fehler=true
  674. # Textposition Woche
  675.                 Textposition_test "${wert[22]}" "Die Schriftposition der Wochen" && fehler=true
  676. # Schriftfarbe Woche
  677.                 Farbwert_test "${wert[23]}" "Die Schriftfarbe der Wochen" && fehler=true
  678. # Text vor Wochennummer
  679. # kein Test noetig
  680.         done
  681.  
  682.  
  683. # Werte in Original-Variablen uebernehmen
  684.         jahr="${wert[0]}"
  685.         tagesgroesse="${wert[1]}"
  686.         tagesaufteilung="${wert[2]}"
  687.         tagesabstand_h="${wert[3]}"
  688.         tagesabstand_v="${wert[4]}"
  689.         schriftgroesse_tage="${wert[5]}"
  690.         schriftfarbe_tage="${wert[6]}"
  691.         schriftfarbe_sonntage="${wert[7]}"
  692.         hintergrundfarbe_tage="${wert[8]}"
  693.         schriftart="${wert[9]}"
  694.         textposition_tage="${wert[10]}"
  695.         rahmendicke_tage="${wert[11]}"
  696.         rahmenfarbe_tage="${wert[12]}"
  697.         schriftgroesse_monat="${wert[13]}"
  698.         schriftfarbe_monat="${wert[14]}"
  699.         rand_h="${wert[15]}"
  700.         rand_v="${wert[16]}"
  701.         hintergrundfarbe_kalender="${wert[17]}"
  702.         schriftgroesse_feiertag="${wert[18]}"
  703.         textposition_feiertag="${wert[19]}"
  704.         schriftfarbe_feiertag="${wert[20]}"
  705.         schriftgroesse_woche="${wert[21]}"
  706.         textposition_woche="${wert[22]}"
  707.         schriftfarbe_woche="${wert[23]}"
  708.         text_vor_woche="${wert[24]:+${wert[24]} }"
  709.  
  710.  
  711. # Werte/Einstellungen speichern
  712.         echo "# Einstellungen fuer den Kalender" >"$einstellungen"
  713.         echo "tagesgroesse='$tagesgroesse'" >>"$einstellungen"
  714.         echo "tagesaufteilung='$tagesaufteilung'" >>"$einstellungen"
  715.         echo "tagesabstand_h='$tagesabstand_h'" >>"$einstellungen"
  716.         echo "tagesabstand_v='$tagesabstand_v'" >>"$einstellungen"
  717.         echo "schriftgroesse_tage='$schriftgroesse_tage'" >>"$einstellungen"
  718.         echo "schriftfarbe_tage='$schriftfarbe_tage'" >>"$einstellungen"
  719.         echo "schriftfarbe_sonntage='$schriftfarbe_sonntage'" >>"$einstellungen"
  720.         echo "hintergrundfarbe_tage='$hintergrundfarbe_tage'" >>"$einstellungen"
  721.         echo "schriftart='$schriftart'" >>"$einstellungen"
  722.         echo "textposition_tage='$textposition_tage'" >>"$einstellungen"
  723.         echo "rahmendicke_tage='$rahmendicke_tage'" >>"$einstellungen"
  724.         echo "rahmenfarbe_tage='$rahmenfarbe_tage'" >>"$einstellungen"
  725.         echo "schriftgroesse_monat='$schriftgroesse_monat'" >>"$einstellungen"
  726.         echo "schriftfarbe_monat='$schriftfarbe_monat'" >>"$einstellungen"
  727.         echo "rand_h='$rand_h'" >>"$einstellungen"
  728.         echo "rand_v='$rand_v'" >>"$einstellungen"
  729.         echo "hintergrundfarbe_kalender='$hintergrundfarbe_kalender'" >>"$einstellungen"
  730.         echo "schriftgroesse_feiertag='$schriftgroesse_feiertag'" >>"$einstellungen"
  731.         echo "textposition_feiertag='$textposition_feiertag'" >>"$einstellungen"
  732.         echo "schriftfarbe_feiertag='$schriftfarbe_feiertag'" >>"$einstellungen"
  733.         echo "schriftgroesse_woche='$schriftgroesse_woche'" >>"$einstellungen"
  734.         echo "textposition_woche='$textposition_woche'" >>"$einstellungen"
  735.         echo "schriftfarbe_woche='$schriftfarbe_woche'" >>"$einstellungen"
  736.         echo "text_vor_woche='$text_vor_woche'" >>"$einstellungen"
  737. }
  738.  
  739.  
  740.  
  741.  
  742.  
  743.  
  744.  
  745.  
  746.  
  747. function Kalender_erzeugen
  748. {
  749. # Testen, ob Einstellungen schon gespeichert wurden
  750.         if ! test -s "$einstellungen"
  751.         then
  752.                 Info "\Z3Dies ist der erste Start dieses scriptes!\nSie muessen zuerst die Einstellungen machen."
  753.                 return
  754.         fi
  755.  
  756. # Benutzte Variablen
  757.         local monat monats_name tag tages_name \
  758.                 mon_bil_nam mon_bil_list bildgroesse \
  759.                 textfarbe \
  760.                 feierliste akt_feiertag tag_in_sek \
  761.                 woche woche_merker
  762.  
  763. # Liste der Feiertage holen
  764.         feierliste=`Feiertagstermine_ermitteln`
  765.  
  766. # Alle Monate durchgehen
  767.         for monat in `seq 1 12`
  768.         do
  769.                 monats_name="`date '+%B' -d $jahr-$monat-1`"
  770.  
  771. # Alle Tage des Monats durchgehen
  772.                 for tag in `cal -h $monat $jahr|tail -n6|tr -d '\n'`
  773.                 do
  774.                         tages_name="`date '+%a' -d $jahr-$monat-$tag`"
  775.  
  776. # Lebenszeichen/Fortschrittsanzeige. (auf Fehlerkanal)
  777.                         echo -ne "\e[2K\r$monats_name $tag $tages_name" 1>&2
  778.  
  779. # Monatsverzeichnis erstellen
  780.                         mkdir -p "$tempverzeichnis/`printf '%02i' $monat`"
  781.  
  782. # Textfarbe an Sonntagen aendern
  783.                         test `date '+%u' -d $jahr-$monat-$tag` -ne 7 && textfarbe="$schriftfarbe_tage" || textfarbe="$schriftfarbe_sonntage"
  784.  
  785. # Textfarbe an Feiertagen aendern
  786.                         tag_in_sek=`date '+%s' -d $jahr-$monat-$tag`
  787.                         akt_feiertag="`grep -e "|$tag_in_sek$" <<<"$feierliste"`"
  788.                         if test -n "$akt_feiertag"
  789.                         then
  790.                                 akt_feiertag="${akt_feiertag%|*}"
  791.                                 textfarbe="$schriftfarbe_feiertag"
  792.                         fi
  793.  
  794. # Tagesgrafik erstellen
  795.                         convert -background "$hintergrundfarbe_tage" \
  796.                                 -fill "$textfarbe" \
  797.                                 -mattecolor "$rahmenfarbe_tage" \
  798.                                 -frame "${rahmendicke_tage}x${rahmendicke_tage}" \
  799.                                 -font "$schriftart" \
  800.                                 -size "$tagesgroesse" \
  801.                                 -pointsize "$schriftgroesse_tage" \
  802.                                 -gravity "$textposition_tage" \
  803.                                 label:"$tages_name  $tag" "$tempverzeichnis/`printf '%02i' $monat`/`printf '%02i' $tag`.png"
  804.  
  805. # Feiertagname auf das Bild schreiben
  806.                         if test -n "$akt_feiertag"
  807.                         then
  808.                                 convert "$tempverzeichnis/`printf '%02i' $monat`/`printf '%02i' $tag`.png" \
  809.                                         -fill "$textfarbe" \
  810.                                         -font "$schriftart" \
  811.                                         -pointsize "$schriftgroesse_feiertag" \
  812.                                         -gravity "$textposition_feiertag" \
  813.                                         -annotate 0 "$akt_feiertag" \
  814.                                         "$tempverzeichnis/`printf '%02i' $monat`/`printf '%02i' $tag`.png"
  815.                         fi
  816.  
  817. # Wochennummer auf das Bild schreiben, wenn Woche wechselt (Mo = erster Tag der Woche = %V)
  818. # Aktuelle Wochennummer
  819.                         woche="`date '+%-V' -d $jahr-$monat-$tag`"
  820.                         if test "$woche" != "$woche_merker"
  821.                         then
  822.                                 convert "$tempverzeichnis/`printf '%02i' $monat`/`printf '%02i' $tag`.png" \
  823.                                         -fill "$schriftfarbe_woche" \
  824.                                         -font "$schriftart" \
  825.                                         -pointsize "$schriftgroesse_woche" \
  826.                                         -gravity "$textposition_woche" \
  827.                                         -annotate 0 "$text_vor_woche$woche" \
  828.                                         "$tempverzeichnis/`printf '%02i' $monat`/`printf '%02i' $tag`.png"
  829.                                 woche_merker="$woche"
  830.                         fi
  831.                 done
  832.  
  833. # Alle Tagesbilder zusammenfassen
  834.                 montage -label '' \
  835.                         "$tempverzeichnis/`printf '%02i' $monat`/"*.png \
  836.                         -tile "$tagesaufteilung" \
  837.                         -geometry "$tagesgroesse+$tagesabstand_h+$tagesabstand_v" \
  838.                         -background "$hintergrundfarbe_tage" "$tempverzeichnis/${monats_name}_tage.png"
  839.  
  840. # Nach Monatsbild suchen (Nummer., 0Nummer., Name., name.)
  841.                 mon_bil_list=`ls $monatsbilder_verzeichnis 2>/dev/null`
  842.                 mon_bil_nam=
  843. # Zahlen ohne fuehrende 0
  844.                 if grep -qie "^$monat\." <<<"$mon_bil_list"
  845.                 then
  846.                         mon_bil_nam="$monatsbilder_verzeichnis/`grep -ie "^$monat\." <<<"$mon_bil_list"`"
  847. # Zahlen mit fuehrender 0
  848.                 elif grep -qie "^`printf '%02i' $monat`\." <<<"$mon_bil_list"
  849.                 then
  850.                         mon_bil_nam="$monatsbilder_verzeichnis/$(grep -ie "^`printf '%02i' $monat`\." <<<"$mon_bil_list")"
  851. # Gross oder kleingeschriebene Namen
  852.                 elif grep -qie "^$monats_name\." <<<"$mon_bil_list"
  853.                 then
  854.                         mon_bil_nam="$monatsbilder_verzeichnis/`grep -ie "^$monats_name\." <<<"$mon_bil_list"`"
  855.                 fi
  856.  
  857. # Monatsgrafik erstellen
  858.                 bildgroesse=`identify -format '%wx%h' "$tempverzeichnis/${monats_name}_tage.png"`
  859.                 if test -n "$mon_bil_nam"
  860.                 then
  861. # Mit Bild
  862.                         montage -background "$hintergrundfarbe_kalender" \
  863.                                 -font "$schriftart" \
  864.                                 -pointsize "$schriftgroesse_monat" \
  865.                                 -fill "$schriftfarbe_monat" \
  866.                                 -title "$monats_name $jahr" \
  867.                                 "$mon_bil_nam" "$tempverzeichnis/${monats_name}_tage.png" \
  868.                                 -tile 1x2 \
  869.                                 -geometry "$bildgroesse+$rand_h+$rand_v" "./${jahr}_`printf '%02i' $monat`.png"
  870.                 else
  871. # Ohne Bild
  872.                         montage -background "$hintergrundfarbe_kalender" \
  873.                                 -font "$schriftart" \
  874.                                 -pointsize "$schriftgroesse_monat" \
  875.                                 -fill "$schriftfarbe_monat" \
  876.                                 -title "$monats_name $jahr" \
  877.                                 "$tempverzeichnis/${monats_name}_tage.png" \
  878.                                 -geometry "$bildgroesse+$rand_h+$rand_v" "./${jahr}_`printf '%02i' $monat`.png"
  879.                 fi
  880.         done
  881.  
  882. # Tempverzeichnis leeren wenn debug ausgeschaltet
  883.         if ! $DEBUg && test -e "$tempverzeichnis"
  884.         then
  885.                 rm -r "$tempverzeichnis"
  886.                 mkdir -p "$tempverzeichnis"
  887.         fi
  888. }
  889.  
  890.  
  891.  
  892.  
  893.  
  894.  
  895.  
  896.  
  897.  
  898. # Sonstige Funktionen ----------------------------------------------------------
  899. function Optionen_test # (Optionen)
  900. {
  901. # Hilfe
  902.         if test "$1" == "--help"
  903.         then
  904.                 Hilfe $0
  905.                 exit 0
  906.         fi
  907.  
  908.  
  909. # Fonts anzeigen
  910.         if test "$1" == "--fonts"
  911.         then
  912.                 fonts_zeigen=true
  913.                 return
  914.         fi
  915.  
  916.  
  917. # Jahr
  918.         if test -z "$1"
  919.         then
  920.                 jahr=`date '+%Y'`
  921.         else
  922.                 if test "$1" == '-e'
  923.                 then
  924.                         sofortstart=true
  925.                         shift
  926.                 fi
  927.                 if test ${#1} -ne 4 -o -n "`tr -d '[:digit:]' <<<$1`"
  928.                 then
  929.                         Info "\Z1Die Jahreszahl \Z3$1\Z1 ist nicht korrekt!" Fehler
  930.                         exit 1
  931.                 fi
  932.                 jahr="$1"
  933.         fi
  934. }
  935.  
  936.  
  937.  
  938.  
  939.  
  940.  
  941.  
  942.  
  943.  
  944. function Farbwert_test # ($1=Wert, $2=Text) Gibt fehler (true/false) zurueck.
  945. {
  946.         if test -z "$1" -o "${1:0:1}" != '#' -o ${#1} -ne 7 -o -n "`tr -d '#[:digit:][a-f]'<<<"$1"`"
  947.         then
  948.                 Info "\Z1$2 \Z3${1:-leer}\Z1 ist nicht korrekt!" Fehler
  949.                 return 0
  950.         fi
  951.         return 1
  952. }
  953.  
  954.  
  955.  
  956.  
  957.  
  958.  
  959.  
  960.  
  961.  
  962. function Nur_zahlen_test # ($1=Wert, $2=Text) Gibt fehler (true/false) zurueck.
  963. {
  964.         if test -z "${1}" -o -n "`tr -d '[:digit:]' <<<$1`"
  965.         then
  966.                 Info "\Z1$2 \Z3${1:-leer}\Z1 ist nicht korrekt!" Fehler
  967.                 return 0
  968.         fi
  969.         return 1
  970. }
  971.  
  972.  
  973.  
  974.  
  975.  
  976.  
  977.  
  978.  
  979.  
  980. function Textposition_test # ($1=Wert, $2=Text) Gibt fehler (true/false) zurueck.
  981. {
  982.         if test -z "${1}" -o -z "`tr ' ' '\n' <<<"${textpositionen[*]}"|grep -ie "$1"`"
  983.         then
  984.                 Info "\Z1$2 \Z3${1:-leer}\Z1 ist nicht korrekt!" Fehler
  985.                 return 0
  986.         fi
  987.         return 1
  988. }
  989.  
  990.  
  991.  
  992.  
  993.  
  994.  
  995.  
  996.  
  997.  
  998. function Gibt_es_eingetragene_Feiertage
  999. {
  1000.         if ! test -s "$feiertag_liste"
  1001.         then
  1002.                 Info '\Z3Es wurden noch keine Feiertage eingetragen!'
  1003.                 return 1
  1004.         fi
  1005.  
  1006.         return 0
  1007. }
  1008.  
  1009.  
  1010.  
  1011.  
  1012.  
  1013.  
  1014.  
  1015.  
  1016.  
  1017. function Zeige_alle_Schriftarten
  1018. {
  1019.         $dialog --infobox "\Z2\ZbEinen moment bitte..." 3 25
  1020.  
  1021. # Von jeder Schriftart ein Bild erstellen
  1022.         convert -list font|grep -e 'Font:'|tr -d ' '|cut -f2 -d:|while read
  1023.         do
  1024.                 convert -size 500x58 xc:white -frame 4x4+2+2 -fill white -stroke black -font "$REPLY" -pointsize 20 -gravity center -annotate 0 "abcdefghijklmnopqrstuvwxyz" "$tempverzeichnis/$REPLY.gif"
  1025.         done
  1026.  
  1027. # Alle Bilder aneinander haengen
  1028.         montage -label '%t' "$tempverzeichnis/"*.gif -tile 1 -geometry 500x58+1+10 -background white ./fonts.png
  1029.  
  1030.         $dialog --infobox "\Z2\ZbFertig." 3 11
  1031. }
  1032.  
  1033.  
  1034.  
  1035.  
  1036.  
  1037.  
  1038.  
  1039.  
  1040.  
  1041. function Info # ($1=Nachricht (dialog-farben erlaubt), $2=leer=Info inhalt=Fehler, $3=leer=Pause inhalt=keine Pause
  1042. {
  1043. # Fenstergroesse ermitteln
  1044.         local zeilen
  1045.         let zeilen=$(echo -e "$1"|wc -l)+2
  1046.         local zeichen
  1047.         let zeichen=`echo -e "$1"|sed -r 's#\\\Z[0-9]##g'|wc -L`+4
  1048.         local art
  1049. # Ueberschrift waehlen
  1050.         if test -z "$2"
  1051.         then
  1052.                 art='\Z3 Info'
  1053.         else
  1054.                 art='\Z1 Fehler'
  1055.                 echo -ne '\a'
  1056.         fi
  1057.  
  1058. # Pausezeit verwenden?
  1059.         local pause
  1060.         test -z "$3" && pause="-t$infopause"
  1061.  
  1062. # Anzeigen
  1063.         $dialog --title "\Z6[$art \Z6]" --infobox "$1" $zeilen $zeichen
  1064.  
  1065. # Auf Taste warten oder nach Ablauf der Pause weiter
  1066.         read -sn1 $pause
  1067. }
  1068.  
  1069.  
  1070.  
  1071.  
  1072.  
  1073.  
  1074.  
  1075.  
  1076.  
  1077. function Programm_existenz_test
  1078. {
  1079.         local z fehler=false
  1080.  
  1081. # Nach allen benoetigten Programmen suchen
  1082.         z=0
  1083.         while test -n "${verwendete_programme[$z]}"
  1084.         do
  1085.                 if test -z "`which "${verwendete_programme[$z]}"`"
  1086.                 then
  1087.                         echo -e "\a\n\e[31mDas Programm: \e[33m${verwendete_programme[$z]}\e[31m wird benoetigt,\nwurde aber nicht gefunden!\e[0m"
  1088.                         fehler=true
  1089.                 fi
  1090.                 let z++
  1091.         done
  1092.         echo
  1093.  
  1094. # Wenn auch nur eines fehlt, keine Funktion!
  1095.         $fehler && exit 1
  1096. }
  1097.  
  1098.  
  1099.  
  1100.  
  1101.  
  1102.  
  1103.  
  1104.  
  1105.  
  1106. function Hilfe
  1107. {
  1108.         local name="$(basename $1)"
  1109.         echo -e "\n\e[36mStarten mit:\n$name [JAHR]"
  1110.         echo -e "JAHR = Jahreszahl (4-Stellig) z.B. 2021.\e[0m"
  1111.         echo -e "\nOptionen:\n----------"
  1112.         echo "$name             = Startet das Menue."
  1113.         echo "$name JAHR        = Startet das Menue und setzt das Jahr."
  1114.         echo "$name -e JAHR     = Erstelle Kalender fuer das angegebene Jahr."
  1115.         echo "$name --fonts     = Erzeugt im aktuellen Verzeichnis eine Datei in der"
  1116.         echo "                     alle Fonts aufgefistet sind.  (fonts.png)"
  1117.         echo "$name --help      = Diese Kurzhilfe."
  1118.         echo
  1119. }
  1120.  
  1121.  
  1122.  
  1123.  
  1124.  
  1125.  
  1126.  
  1127.  
  1128. function Ende
  1129. {
  1130. # Aufraeumen
  1131.         if test -e "$tempverzeichnis"
  1132.         then
  1133.                 rm -r "$tempverzeichnis"
  1134.         fi
  1135.  
  1136.         exit 0
  1137. }
  1138.  
  1139.  
  1140.  
  1141.  
  1142.  
  1143.  
  1144.  
  1145.  
  1146.  
  1147. # Hauptprogramm ------------------------------------------------------------------------------------
  1148. # Ein paar Beenden-Signale abfangen (Damit noch aufgeraeumt werden kann)
  1149. trap 'Ende' 1 2 9
  1150.  
  1151.  
  1152. # Sind alle zum Betrieb noetigen Programme vorhanden?
  1153. Programm_existenz_test
  1154.  
  1155.  
  1156. # Verarbeitung der uebergebenen Optionen
  1157. Optionen_test "$@"
  1158.  
  1159.  
  1160. # Einstellungen laden
  1161. test -s "$einstellungen" -a -f "$einstellungen" && . "$einstellungen"
  1162.  
  1163.  
  1164. # Tempverzeichnis erstellen und leeren falls noch vorhanden
  1165. test -e "$tempverzeichnis" && rm -r "$tempverzeichnis"
  1166. mkdir -p "$tempverzeichnis"
  1167.  
  1168.  
  1169. # Grafik aller Fonts erstellen falls gewuenscht
  1170. if $fonts_zeigen
  1171. then
  1172.         Zeige_alle_Schriftarten
  1173.         Ende
  1174. fi
  1175.  
  1176.  
  1177. # Direkt Kalender erstellen oder Hauptmenue?
  1178. if $sofortstart
  1179. then
  1180. # Direkt Kalender erstellen
  1181.         Kalender_erzeugen
  1182.         echo
  1183. else
  1184. # Hauptmenue
  1185.         $DEBUg && debuG='\Z1\ZrDEBUG_MODUS\ZR '
  1186.         while true
  1187.         do
  1188.                 wahl=$($dialog --title "\Z6[\Z5 Hauptmenue $debuG\Z6]" --cancel-label 'Ende' --default-item "$wahl" --no-collapse \
  1189.                         --menu "\Z2Bitte waehlen Sie:                          \Z4[Eingestelltes Jahr $jahr]" 20 75 12 \
  1190.                         "Einstellungen" "machen" \
  1191.                         "Standard-Einstellungen" "wiederherstellen" \
  1192.                         "Kalender" "erstellen" \
  1193.                         "Feiertags" "menue" \
  1194.                         "Anleitung" "lesen")
  1195.                 test $? -eq 1 && break
  1196.  
  1197.                 case "$wahl" in
  1198.                         'Einstellungen') Einstellungen_machen ;;
  1199.                         'Standard-Einstellungen') $dialog --title '\Z6[\Z5 Reset \Z6]' --defaultno --yesno '\Z3Sind Sie sicher?' 5 20 && Einstellungen_reset ;;
  1200.                         'Feiertags') Feiertage_menue ;;
  1201.                         'Kalender') $dialog --infobox '\Z2Bitte warten...' 3 19 ; Kalender_erzeugen ;;
  1202.                         'Anleitung') $dialog --title '\Z6[\Z5 Anleitung \Z6]' --exit-label 'Zurueck' --textbox "$scriptpfad/anleitung.txt" 22 80 ;;
  1203.                 esac
  1204.         done
  1205. fi
  1206.  
  1207.  
  1208.  
  1209. #
  1210. # Fuegen Sie hier die noetigen Befehle ein, um aus den Bildern z.B. ein .pdf oder "wasauchimmer" zu erstellen.
  1211. #
  1212. # Dateinamen der Bilder waehren z.B.
  1213. #
  1214. # "[0-9][0-9][0-9][0-9]_[0-1][0-9].png"
  1215. #
  1216.  
  1217.  
  1218.  
  1219. # Aufraeumen und Ende
  1220. Ende
  1221.  
  1222.  
  1223.  
  1224.  
  1225.  
  1226.  

Quellcode

Hier kannst du den Code kopieren und ihn in deinen bevorzugten Editor einfügen. PASTEBIN_DOWNLOAD_SNIPPET_EXPLAIN