Don't like ads? PRO users don't see any ads ;-)
Guest

/usr/bin/xplanetFX

By: a guest on May 3rd, 2011  |  syntax: Bash  |  size: 61.34 KB  |  hits: 236  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. #!/bin/bash
  2.  
  3. # set to 1 if you want to get more information while rendering
  4. DEBUG=1
  5.  
  6. # DEFAULT CONFIGURATION
  7. # OVERWRITTEN WITH $CONFIGFILE
  8. LANGUAGE="en"
  9. TEMPLATE="default"
  10. STYLE="default"
  11. GEOMETRY="1920x1200"
  12. CENTER="+960+600"
  13. DELAY=1200
  14. AUTOSTART=60
  15. LOGGING=1
  16. LONGITUDE=0
  17. LATITUDE=0
  18. LONROTATE=0
  19. LATROTATE=0
  20. BUMPCLOUDS=1
  21. SPECULAR=1
  22. POST=1
  23. OVERLAY=0
  24. CLOUDFACTOR=1.01
  25. RADIUS=32
  26. CORONA=1.03
  27. CORONABLUR=5
  28. SHOWDATE=0
  29. DATE=0
  30. GMT=0
  31. OUTPUT=""
  32. SCRIPT=""
  33. PRESCRIPT=""
  34. SEARCHMAPURL="http://www.informationfreeway.org/"
  35. SHOWORBIT=1
  36. ORBIT=-60
  37. STARS=0
  38. PREGRID=0
  39. ATMOSPHERE=1
  40. # END OF DEFAULT CONFIGURATION
  41.  
  42. # determine the working directory
  43. #ABSPATH="$(cd "${0%/*}" 2>/dev/null; echo "$PWD"/"${0#*/}")"
  44. #WORKDIR=`dirname "$ABSPATH"`
  45. WORKDIR=/usr/share/xplanetFX
  46. USERDIR=$HOME/.xplanetFX
  47. ACTDIR=`pwd`
  48.  
  49. # not neccessary to change anything below
  50. MAPSIZE="2500x1250" # do not change except all base maps are resized, too
  51. BACKGROUND=$USERDIR"/cache/background.png"
  52. BASEIMAGE=$USERDIR"/base/canvas.png" # overall background, must be png
  53. CONFIG=$USERDIR"/config/xplanet-final" # config for xplanet used in final rendering
  54. INTERIM=$USERDIR"/cache/final.png"
  55. OUTPUT1=$USERDIR"/output/xplanetFX1.png"
  56. OUTPUT2=$USERDIR"/output/xplanetFX2.png"
  57. FINAL="$USERDIR/Desktop/xplanetFX.png" # default output if SINGLE is set to 1
  58. CONFIGFILE=$USERDIR"/xplanetFX.conf"
  59.  
  60. SINGLE=0 # default behavior, SINGLE=1 always creates single renderings and exits.
  61. DESKTOP="" # "GNOME", "KDE", "XFCE", "FLUXBOX", determined by function later
  62.  
  63. XPLANETDEF="-num_times 1 -starfreq 0 -starmap false -glare 0"
  64.  
  65. function random2b () { dd if=/dev/random count=1 bs=2 2>/dev/null | hexdump -e '"%d"'; }
  66. function random () { echo $(( `random2b`*$1/65536-$1/2)); }
  67. function echo2 () { echo `date +"%x %X"` $@ | tee -a $USERDIR/logs/xplanetFX.log; }
  68. function echo3 () { echo `date +"%x %X"` $@ >> $USERDIR/logs/xplanetFX.log; }
  69. function echo4 () {
  70.     while read data; do
  71.         echo `date +"%x %X"` $data | tee -a $USERDIR/logs/xplanetFX.log;
  72.     done
  73. }
  74. function debug () {
  75.     if [ "$DEBUG" = "1" ]; then
  76.         echo2 \# DEBUG $1
  77.     fi
  78. }
  79.  
  80. function round () { echo $(printf %.$2f $(echo "scale=$2;(((10^$2)*$1)+0.5)/(10^$2)" | bc)); }
  81. function install_template() {
  82.     # massive cleanup
  83.     rm $USERDIR/overlays/*  >/dev/null 2>&1
  84.     rm $USERDIR/temp/*  >/dev/null 2>&1
  85.     mv $USERDIR/backgrounds/stars.png $USERDIR/backgrounds/black.png $USERDIR/backgrounds/white.png $USERDIR/backgrounds/transparent.png $USERDIR/temp >/dev/null 2>&1
  86.     rm $USERDIR/backgrounds/* >/dev/null 2>&1
  87.     mv $USERDIR/temp/* $USERDIR/backgrounds/ >/dev/null 2>&1
  88.    
  89.     cd $USERDIR/templates
  90.     DESTSIZE=`cat $CONFIGFILE | grep --regexp="^GEOMETRY = " | awk -F " = " '{ print $2 }'`
  91.     if [ -f "$1/$2.tpl" -o -f "$1/$2" ]; then
  92.         if [ -f "$1/$2" ]; then
  93.             TEMPLATE="$1/$2"
  94.         else
  95.             TEMPLATE="$1/$2.tpl"
  96.         fi
  97.         TPL=`echo $TEMPLATE | sed "s/.tpl//" | awk -F '/' '{ print $1 }'`
  98.         sed -i -r "s/^TEMPLATE = .*/TEMPLATE = $TPL/" $CONFIGFILE
  99.         STY=`echo $TEMPLATE | sed "s/.tpl//" | awk -F '/' '{ print $2 }'`
  100.         sed -i -r "s/^STYLE = .*/STYLE = $STY/" $CONFIGFILE
  101.         echo "Please wait while images are prepared..."
  102.         echo ""
  103.         # copy all template files
  104.         #cp `dirname $TEMPLATE`/backgrounds/* ../backgrounds/ 2>/dev/null
  105.         cp `dirname $TEMPLATE`/config/* ../config/ 2>/dev/null
  106.         cp `dirname $TEMPLATE`/base/* ../base/ 2>/dev/null
  107.         #cp `dirname $TEMPLATE`/overlays/* ../overlays/ 2>/dev/null
  108.        
  109.         DESTW=`echo $DESTSIZE | awk -F "x" '{ print $1 }'`
  110.         DESTH=`echo $DESTSIZE | awk -F "x" '{ print $2 }'`
  111.        
  112.         # read template file
  113.         while read line; do
  114.             var=`echo $line | awk -F "#" '{ print $1 }'`
  115.             name=`echo $var | awk -F "=" '{ print $1 }'`
  116.             value=`echo $var | awk -F "=" '{ print $2 }'`
  117.             # treat special variables
  118.             if [ "$name" == "X0" ]; then
  119.                 # we have to recalculate the final position set in the template
  120.                 # as a percentual value. As the ratio changes, somewhere something
  121.                 # gets cut off so the position in the template depending on 16:10
  122.                 # doesn't fit any more.
  123.                 # start with getting the output ratio set by the user
  124.                 RATIOD=`echo "$DESTW / $DESTH" | bc -l`
  125.                 # get the virtual size of the image if nothing would be cut off
  126.                 DESTW1=`echo "$DESTW * 1.6 / $RATIOD" | bc -l`
  127.                 # where the center would really be (in pixels) in the virtual size
  128.                 DESTX1=`echo "$DESTW1 * (0$value) / 100" | bc -l`
  129.                 # subtract the difference from the original position
  130.                 DESTX=`echo "$DESTX1 - ($DESTW1 - $DESTW) / 2" | bc -l`
  131.                 # and finally convert to an integer
  132.                 DESTX=`round $DESTX 0`
  133.                 if [ $DESTX -gt -1 ]; then
  134.                     DESTX="+"$DESTX
  135.                 fi
  136.             elif [ "$name" == "Y0" ]; then
  137.                 DESTY=`echo "$DESTH/100*(0$value)" | bc -l`
  138.                 DESTY=`round $DESTY 0`
  139.                 if [ $DESTY -gt -1 ]; then
  140.                     DESTY="+"$DESTY
  141.                 fi
  142.             elif [ "$name" == "RADIUS" ]; then
  143.                 rad=$value
  144.             elif [ "$name" == "CORONA" ]; then
  145.                 cor=$value
  146.             elif [ "$name" == "BACKGROUND" -a "$2" != "--no-images" ]; then
  147.                 cp "`dirname $TEMPLATE`/$value" "../$value" 2>/dev/null
  148.                 if [ "$3" != "--no-images" ]; then
  149.                     convert $USERDIR/$value \
  150.                         -background transparent \
  151.                         -resize $DESTSIZE^ \
  152.                         -gravity center \
  153.                         -extent $DESTSIZE \
  154.                         $USERDIR/base/canvas.png
  155.                 fi
  156.                 TEMPLATEBG="$value"
  157.             elif [ "$name" == "OVERLAY" ]; then
  158.                 if [ "$value" != "" ]; then
  159.                     cp "`dirname $TEMPLATE`/$value" "../$value" 2>/dev/null
  160.                     if [ "$3" != "--no-images" ]; then
  161.                         convert $USERDIR/$value \
  162.                             -background transparent \
  163.                             -resize $DESTSIZE^ \
  164.                             -gravity center \
  165.                             -extent $DESTSIZE \
  166.                             $USERDIR/cache/overlay.png
  167.                     fi
  168.                     sed -i -r "s/^OVERLAY = .*/OVERLAY = 1/" $CONFIGFILE
  169.                     TEMPLATEOVER="cache/overlay.png"
  170.                 else
  171.                     sed -i -r "s/^OVERLAY = .*/OVERLAY = 0/" $CONFIGFILE
  172.                     TEMPLATEOVER=""
  173.                 fi
  174.                
  175.             # treat any other variable
  176.             else
  177.                 sed -i -r "s/^$name = .*/$name = $value/" $CONFIGFILE
  178.             fi
  179.            
  180.             # set center
  181.             if [ "$DESTX" != "" -a "$DESTY" != "" ]; then
  182.                 sed -i -r "s/^CENTER = .*/CENTER = $DESTX$DESTY/" $CONFIGFILE
  183.                 DESTX=
  184.                 DESTY=
  185.             fi
  186.         done < $TEMPLATE
  187.         # set radius and corona
  188.         if [ "$rad" != "" -a "$cor" == "" ]; then
  189.             cor=1.03
  190.         fi
  191.         if [ "$rad" != "" ]; then
  192.             sed -i -r "s/^RADIUS = .*/RADIUS = $rad/" $CONFIGFILE
  193.         fi
  194.         if [ "$cor" != "" ]; then
  195.             if [ "$cor" == "0" ]; then
  196.                 cor="1.0"
  197.             fi
  198.             coro=`echo "if ($cor > 2) { $cor/$rad } else { $cor }" | bc -l`
  199.             sed -i -r "s/^CORONA = .*/CORONA = $coro/" $CONFIGFILE
  200.         fi
  201.         add=""
  202.         if [  "$3" == "--no-images" ]; then
  203.             add=" (without image conversion)"
  204.         fi
  205.         echo3 "Template "`echo $TEMPLATE | sed "s/.tpl//"`" was installed $add."
  206.     elif [ "$1" == "" -o "$2" == "" ]; then
  207.         echo "You must specify template and style, ex. --template default default"
  208.     else
  209.         echo "Template $1/$2 not available!"
  210.     fi
  211. }
  212.  
  213. function update_template() {
  214.     if [ ! -f "templates/$1/config/xplanet-clouds-moon" ]; then
  215.         echo2 "Template $1 not available, no update possible."
  216.     else
  217.         echo2 "Updating template $1..."
  218.         rm "templates/$1/config/xplanet-clouds-moon.tmp" >/dev/null 2>&1
  219.         EARTH=0
  220.         MOON=0
  221.         MOONSHADE=0
  222.         DONE=0
  223.         while read line; do
  224.             if [ "$line" == "[earth]" ]; then
  225.                 EARTH=1
  226.                 MOON=0
  227.             elif [ "$line" == "[moon]" ]; then
  228.                 EARTH=0
  229.                 MOON=1
  230.             else
  231.                 if [ $EARTH -eq 1 -a "$line" == "map=backgrounds/white.png" ]; then
  232.                     line="map=base/black.png"
  233.                     echo2 "Map for earth updated."
  234.                     DONE=1
  235.                 fi
  236.                 if [ $EARTH -eq 1 -a "$line" == "color={255,255,255}" ]; then
  237.                     line="color={0,0,0}"
  238.                     echo2 "Color for earth updated."
  239.                     DONE=1
  240.                 fi
  241.                 if [ $MOON -eq 1 -a "$line" == "map=base/black.png" ]; then
  242.                     line="map=backgrounds/white.png"
  243.                     echo2 "Map for moon updated."
  244.                     DONE=1
  245.                 fi
  246.                 if [ $MOON -eq 1 -a "$line" == "color={0,0,0}" ]; then
  247.                     line="color={255,255,255}"
  248.                     echo2 "Color for moon updated."
  249.                     DONE=1
  250.                 fi
  251.                 if [ $MOON -eq 1 -a "$line" == "orbit_color={0,0,0}" ]; then
  252.                     line="orbit_color={255,255,255}"
  253.                     echo2 "Moon's orbit color updated."
  254.                 fi
  255.                 if [ $MOON -eq 1 -a "$line" == "shade=100" ]; then
  256.                     MOONSHADE=1
  257.                 fi
  258.             fi
  259.             echo $line >> "templates/$1/config/xplanet-clouds-moon.tmp"
  260.         done < "templates/$1/config/xplanet-clouds-moon"
  261.         if [ $MOONSHADE -eq 0 ]; then
  262.             echo "shade=100" >> "templates/$1/config/xplanet-clouds-moon.tmp"
  263.             echo2 "Moon shade updated."
  264.             DONE=1
  265.         fi
  266.         mv -f "templates/$1/config/xplanet-clouds-moon.tmp" "templates/$1/config/xplanet-clouds-moon" >/dev/null 2>&1
  267.         if [ $DONE -eq 1 ]; then
  268.             echo2 "done."
  269.         else
  270.             echo2 "Nothing to do."
  271.         fi
  272.     fi
  273. }
  274.  
  275. # DESKTOP ENVIRONMENT
  276. # feh as a wallpaper switcher was mentioned by Alexander Batischev,
  277. # thanks for pointing that out.
  278. if [ x"$KDE_FULL_SESSION" = x"true" ]; then DESKTOP="KDE";
  279. elif [ x"$GNOME_DESKTOP_SESSION_ID" != x"" ]; then DESKTOP="GNOME";
  280. elif xprop -root _DT_SAVE_MODE | grep ' = \"xfce4\"$' >/dev/null 2>&1; then DESKTOP="XFCE";
  281. elif [ `ps aux | grep [f]luxbox 2>&1 > /dev/null; echo $?` -eq 0 ]; then DESKTOP="FLUXBOX";
  282. elif [ `feh -h >/dev/null 2>&1; echo $?` -eq 0 ]; then DESKTOP="feh";
  283. else DESKTOP="snafu";
  284. fi
  285.  
  286. # BASIC INSTALLATION
  287. if [ ! -d $USERDIR ]; then
  288.     cd $WORKDIR
  289.     mkdir $USERDIR
  290.     cp -R templates $USERDIR
  291.     cp -R base $USERDIR
  292.     cp -R backgrounds $USERDIR
  293.     cp -R config $USERDIR
  294.     cp -R cache $USERDIR
  295.     cp -R logs $USERDIR
  296.     cp -R output $USERDIR
  297.     cp -R overlays $USERDIR
  298.     cat $WORKDIR/xplanetFX.conf > $CONFIGFILE
  299. fi
  300.  
  301. # create thumbcache if nonexistent
  302. if [ ! -d $USERDIR/thumbcache ]; then
  303.     mkdir $USERDIR/thumbcache >/dev/null 2>&1
  304. fi
  305.  
  306. # create temp if nonexistent
  307. if [ ! -d $USERDIR/temp ]; then
  308.     mkdir $USERDIR/temp >/dev/null 2>&1
  309. fi
  310.  
  311. # create preview if nonexistent v < 2.2.5
  312. if [ ! -d $USERDIR/preview ]; then
  313.     mkdir $USERDIR/preview >/dev/null 2>&1
  314. fi
  315.  
  316. # copy xplanet_stars.cfg v < 2.0.23
  317. if [ ! -f $USERDIR"/config/xplanet_stars" ]; then
  318.     cp $WORKDIR"/config/xplanet_stars" $USERDIR"/config" >/dev/null 2>&1
  319. fi
  320.  
  321. cd $USERDIR
  322.  
  323. # check lock file
  324. if [ -f lock ]; then
  325.     pid=`cat lock`
  326.     if [ "`ps -p $pid -o comm=`" == "" ]; then
  327.         rm lock >/dev/null 2>&1
  328.     fi
  329. fi
  330.  
  331. # CONFIG
  332. for v in "`grep " = " "$CONFIGFILE" | awk -F " = " '{ printf "%s=%s\n",$1,$2 }'`"; do
  333.     eval "$v"
  334. done
  335.  
  336. case $1 in
  337.     ("--start")
  338.         # taken from xplanetconfig:
  339.         kill $(pidof -x -o %PPID $(basename $0)) 2>/dev/null
  340.         rm lock >/dev/null 2>&1
  341.         sleep 1
  342.         nice -n 19 $0 >/dev/null 2>&1 &
  343.         echo3 "xplanetFX was (re)started."
  344.         exit;;
  345.     ("--stop")
  346.         # taken from xplanetconfig:
  347.         kill $(pidof -x -o %PPID $(basename $0)) 2>/dev/null
  348.         rm lock >/dev/null 2>&1
  349.         echo3 "xplanetFX was stopped."
  350.         exit;;
  351.     ("--toggle")
  352.         if [ $DESKTOP == "GNOME" -o $DESKTOP == "XFCE" ]; then
  353.             zenity --question --title="Toggle xplanetFX" --text="[re-]start (yes) or stop (no) xplanetFX?"
  354.         elif [ $DESKTOP == "KDE" ] ; then
  355.             kdialog --yesno --title="Toggle xplanetFX" --text="[re-]start (yes) or stop (no) xplanetFX?"
  356.         fi
  357.         if [ $? == 0 ]; then
  358.             kill $(pidof -x -o %PPID $(basename $0)) 2>/dev/null
  359.             rm lock >/dev/null 2>&1
  360.             nice -n 19 $0 >/dev/null 2>&1 &
  361.             echo3 "xplanetFX was (re)started."
  362.         else
  363.             kill $(pidof -x -o %PPID $(basename $0)) 2>/dev/null
  364.             rm lock >/dev/null 2>&1
  365.             echo3 "xplanetFX was stopped."
  366.         fi
  367.         exit;;
  368.     ("--single")
  369.         if [ "$2" == "" ] ; then
  370.             echo "You have to specify a filename to produce a single image."
  371.             exit
  372.         else
  373.             file=$2
  374.             if [ ${file:0:1} != "/" ]; then
  375.                 file=$ACTDIR/$file
  376.             fi
  377.             kill $(pidof -x -o %PPID $(basename $0)) 2>/dev/null
  378.             rm lock >/dev/null 2>&1
  379.             sleep 1
  380.             nice -n 19 $0 --render-single "$file" >/dev/null 2>&1 &
  381.             echo3 "xplanetFX is creating single image @ $file"
  382.             exit 0
  383.         fi
  384.         ;;
  385.     ("--render-single")
  386.         if [ "$2" == "" ] ; then
  387.             echo "You have to specify a filename to produce a single image."
  388.             exit
  389.         else
  390.             file=$2
  391.             if [ ${file:0:1} != "/" ]; then
  392.                 file=$ACTDIR/$file
  393.             fi
  394.             if [ ! -d `dirname "$file"` ]; then
  395.                 echo3 "Couldn't find directory, exiting."
  396.                 exit 1
  397.             else
  398.                 FINAL="$file"
  399.                 SINGLE=1
  400.             fi
  401.         fi
  402.         ;;
  403.     ("--log")
  404.         less logs/xplanetFX.log
  405.         exit;;
  406.     ("--clearlog")
  407.         rm logs/*
  408.         exit;;
  409.     ("--gui")
  410.         cd $WORKDIR
  411.         exec $WORKDIR/xplanetFX_gtk 2>&1 "$@"
  412.         exit;;
  413.     ("--rclouds")
  414.         rm cache/clouds.jpg >/dev/null 2>&1
  415.         exit;;
  416.     ("--install")
  417.         if [ "$2" == "" ] ; then
  418.             echo "You have to specify a file to install."
  419.         else
  420.             cd $ACTDIR
  421.             tar -C $USERDIR/templates -xzf "$2"
  422.             if [ $? -eq 0 ]; then  
  423.                 echo3 "Template $2 was installed."
  424.             else
  425.                 echo3 "Installation of template $2 failed!!"
  426.             fi
  427.         fi
  428.        
  429.         exit;;
  430.     ("--autostart")
  431.         sleep $AUTOSTART
  432.         kill $(pidof -x -o %PPID $(basename $0)) 2>/dev/null
  433.         nice -n 19 $0 >/dev/null 2>&1 &
  434.         echo3 "xplanetFX was autostarted."
  435.         exit;;
  436.     ("--geometry")
  437.         if [ "$2" == "" ] ; then
  438.             echo "You have to specify a geometry to set, ex. --geometry 1280x800"
  439.         elif [[ $2 =~ [0-9]+x[0-9]+ ]]; then
  440.             cd $USERDIR
  441.             for v in `cat $CONFIGFILE | grep " = " | awk -F " = " '{ printf "%s=%s\n",$1,$2 }'`; do
  442.                 eval $v
  443.             done
  444.             for v in `cat templates/$TEMPLATE/$STYLE.tpl | awk -F '#' '{ print $1 }'`; do
  445.                 eval $v
  446.             done
  447.             if [ "$BACKGROUND" != "" ]; then
  448.                 convert $BACKGROUND -background transparent -resize $2^ -gravity center -extent $2 $USERDIR/base/canvas.png
  449.             fi
  450.             if [ "$OVERLAY" != "" ]; then
  451.                 convert $OVERLAY -background transparent -resize $2^ -gravity center -extent $2 $USERDIR/cache/overlay.png
  452.             fi
  453.             DESTW=`echo $2 | awk -F "x" '{ print $1 }'`
  454.             DESTH=`echo $2 | awk -F "x" '{ print $2 }'`
  455.             # we have to recalculate the final position set in the template
  456.             # as a percentual value. As the ratio changes, somewhere something
  457.             # gets cut off so the position in the template depending on 16:10
  458.             # doesn't fit any more.
  459.             # start with getting the output ratio set by the user
  460.             RATIOD=`echo "$DESTW / $DESTH" | bc -l`
  461.             # get the virtual size of the image if nothing would be cut off
  462.             DESTW1=`echo "$DESTW * 1.6 / $RATIOD" | bc -l`
  463.             # where the center would really be (in pixels) in the virtual size
  464.             DESTX1=`echo "$DESTW1 * (0$X0) / 100" | bc -l`
  465.             # subtract the difference from the original position
  466.             DESTX=`echo "$DESTX1 - ($DESTW1 - $DESTW) / 2" | bc -l`
  467.             # and finally convert to an integer
  468.             DESTX=`round $DESTX 0`
  469.             if [ $DESTX -gt -1 ]; then
  470.                 DESTX="+"$DESTX
  471.             fi
  472.             DESTY=`echo "$DESTH/100*(0$Y0)" | bc -l`
  473.             DESTY=`round $DESTY 0`
  474.             if [ $DESTY -gt -1 ]; then
  475.                 DESTY="+"$DESTY
  476.             fi
  477.             if [ "$DESTX" != "" -a "$DESTY" != "" ]; then
  478.                 sed -i "s/CENTER = $CENTER/CENTER = $DESTX$DESTY/" $CONFIGFILE
  479.             fi
  480.             sed -i "s/GEOMETRY = $GEOMETRY/GEOMETRY = $2/" $CONFIGFILE
  481.             echo3 "Geometry was set to $2"
  482.         else
  483.             echo "The format is --geometry [WIDTH]x[HEIGHT]"
  484.         fi
  485.         exit;;
  486.     ("--template")
  487.         install_template "$2" "$3" $4
  488.         exit;;
  489.     ("--random")
  490.         restart=0
  491.         if [ "`pidof -s -x -o %PPID xplanetFX`" != "" ]; then
  492.             restart=1
  493.         fi
  494.         while [ -f $USERDIR'/lock' ]; do sleep 2; done
  495.         dir=$USERDIR'/templates/'
  496.         file1=`/bin/ls -1 "$dir" | sort --random-sort | head -1`
  497.         path=`readlink --canonicalize "$dir/$file1"`
  498.         file2=`/bin/ls -1 "$path" | grep ".tpl" | sort --random-sort | head -1 `
  499.         echo "switching to $file1 `basename $file2 .tpl`..."
  500.         install_template "$file1" "`basename $file2 .tpl`"
  501.         if [ $restart -eq 1 ]; then
  502.             xplanetFX --start
  503.         fi
  504.         exit;;
  505.     ("--update-templates")
  506.         for file in $(ls ./templates); do
  507.             update_template $file
  508.         done
  509.         update_template ".."
  510.         exit;;
  511.     ("--setup")
  512.         echo ""
  513.         echo "Welcome to xplanetFX setup!"
  514.         echo ""
  515.         echo "This setup routine is able to install xplanet and imagemagic on your system, make some configurations and place a starter in your autostarted programs."
  516.         echo "The setup will ask for some values in this process. The actual values are shown in []. so hitting enter will choose this selection (in configuration no action will take place in that step)."
  517.         echo ""
  518.         # KILL RUNNING DAEMON
  519.         if [ `pidof -x -o %PPID xplanetFX` ]; then
  520.             echo -n "It seems there is an instance of xplanetFX running. Should it be killed? [y]: "
  521.             read KILL
  522.             echo ""
  523.             case "$KILL" in
  524.                 "y" | "Y" | "j" | "J" | "" )
  525.                     kill $(pidof -x -o %PPID xplanetFX) 2>/dev/null
  526.                 ;;
  527.             esac
  528.         fi
  529.  
  530.         # INSTALL DEPENDENCIES
  531.         if [ -x /usr/bin/xplanet -a -x /usr/bin/convert ]; then
  532.             echo "Seems that xplanet and imagemagick are both installed. Nothing to do here."
  533.         else
  534.             echo "We'll begin with installing the software. Please enter your root password to gain access to your package manager if neccessary."
  535.             echo ""
  536.             inst=0
  537.             which apt-get >/dev/null
  538.             if [ $? -eq 0 ]; then
  539.                 sudo apt-get install -y --force-yes xplanet imagemagick perlmagick &>/dev/null
  540.                 inst=1
  541.             fi
  542.             if [ $inst -eq 0 ]; then
  543.                 which rpm >/dev/null
  544.                 if [ $? -eq 0 ]; then
  545.                     su -c "rpm -i xplanet ImageMagick ImageMagick-perl &>/dev/null"
  546.                     inst=1
  547.                 fi
  548.             fi
  549.             if [ $inst -eq 0 ]; then
  550.                 which yast >/dev/null
  551.                 if [ $? -eq 0 ]; then
  552.                     su -c "yast --install xplanet ImageMagick perl-PerlMagick &>/dev/null"
  553.                     inst=1
  554.                 fi
  555.             fi
  556.             if [ $inst -eq 0 ]; then
  557.                 which yast2 >/dev/null
  558.                 if [ $? -eq 0 ]; then
  559.                     su -c "yast2 --install xplanet ImageMagick perl-PerlMagick &>/dev/null"
  560.                     inst=1
  561.                 fi
  562.             fi
  563.             if [ $inst -eq 0 ]; then
  564.                 which yum >/dev/null
  565.                 if [ $? -eq 0 ]; then
  566.                     yum install xplanet ImageMagick ImageMagick-perl &>/dev/null
  567.                     inst=1
  568.                 fi
  569.             fi
  570.             if [ inst -eq 0 ]; then
  571.                 echo "The installation of xplanet and imagemagick failed. Please install manually and run setup again."
  572.                 exit 0
  573.             fi
  574.         fi
  575.         echo ""
  576.  
  577.  
  578.         # SCREENSIZE
  579.         ACTSCREEN=`cat $CONFIGFILE | grep --regexp="^GEOMETRY = " | awk -F " = " '{ print $2 }'`
  580.         XRANDR=`xrandr -q | grep "Screen 0:" | awk '{ print $8$9$10 }'`
  581.         DISP=${XRANDR%,*}
  582.         echo -n "Create images at this resolution (actually $ACTSCREEN) [$DISP]: "
  583.         read DESTSIZE
  584.         echo ""
  585.         if [ "$DESTSIZE" == "" ]; then
  586.             DESTSIZE=$DISP
  587.         fi
  588.         if [ "$ACTSCREEN" != "$DESTSIZE" ]; then
  589.             sed -i -r "s/^GEOMETRY = $ACTSCREEN/GEOMETRY = $DESTSIZE/" $CONFIGFILE
  590.         fi
  591.         echo ""
  592.  
  593.         # TEMPLATE
  594.         echo "Please choose one of the following templates:"
  595.         echo ""
  596.         c=1
  597.         echo " [0] no template"
  598.         cd templates
  599.         for f in */*.tpl ; do
  600.             f2=`echo $f | sed "s/.tpl//"`
  601.             echo " [$c] template \"$f2\""
  602.             let c=$c+1
  603.         done
  604.         echo ""
  605.         echo -n "Which template should be used? If you want to see a preview please type a \"v\" in front of your choice (ex. v1) [0]: "
  606.         read SETUP
  607.         echo ""
  608.         while [ "${SETUP:0:1}" == "v" ]; do
  609.             c=1
  610.             for f in */*.png; do
  611.                 if [ "$c" == "${SETUP:1}" ]; then
  612.                     echo "pre-viewing template "`echo $f | sed "s/.tpl//"` &
  613.                     display "$f"
  614.                 fi
  615.                 let c=$c+1
  616.             done
  617.             echo -n "Which template should be used? If you want to see a preview please type a \"v\" in front of your choice (ex. v1) [0]: "
  618.             read SETUP
  619.             echo ""
  620.         done
  621.         if [ "$SETUP" != "" -a "$SETUP" != "0" ]; then
  622.             c=1
  623.             TEMPLATE=
  624.             for f in */*.tpl; do
  625.                 if [ "$c" == "$SETUP" ]; then
  626.                     TEMPLATE=$f
  627.                 fi
  628.                 let c=$c+1
  629.             done
  630.             if [ $TEMPLATE != "" ]; then
  631.                 TPL=`echo $TEMPLATE | sed "s/.tpl//" | awk -F '/' '{ print $1 }'`
  632.                 STY=`echo $TEMPLATE | sed "s/.tpl//" | awk -F '/' '{ print $2 }'`
  633.                 install_template "$TPL" "$STY"
  634.             fi
  635.             # EXIT?
  636.             echo -n "Do you want to go on with the configuration? (y/n) [n]: "
  637.             read EXIT
  638.             echo ""
  639.             case "$EXIT" in
  640.                 "n" | "N" | "" )
  641.                     # START NOW
  642.                     echo -n "Do you want to start xplanetFX now? (y/n) [n]: "
  643.                     read START
  644.                     echo ""
  645.                     case "$START" in
  646.                         "y" | "Y" | "j" | "J" )
  647.                             xplanetFX --start
  648.                         ;;
  649.                     esac
  650.                     exit 0
  651.                 ;;
  652.             esac
  653.             echo ""
  654.         fi
  655.  
  656.         cd ..
  657.  
  658.  
  659.         # BACKGROUND
  660.         echo "Please choose one of the following background images:"
  661.         echo ""
  662.         c=0
  663.         cd backgrounds
  664.         for f in *.png; do
  665.             echo -n " [$c] $f "
  666.             if [ "backgrounds/$f" == "$TEMPLATEBG" ]; then
  667.                 echo "(recommended by template)"
  668.                 TBGID=$c
  669.             else
  670.                 echo
  671.             fi
  672.             let c=$c+1
  673.         done
  674.         echo ""
  675.         echo -n "Which background should be used? (0-$c): "
  676.         if [ "$TBGID" != "" ]; then
  677.             echo -n " [$TBGID] "
  678.         fi
  679.         read BACKGR
  680.         echo ""
  681.         c=0
  682.         FILE=
  683.         for f in *.png; do
  684.             if [ "$c" == "$BACKGR" ]; then
  685.                 FILE=$f
  686.             elif [ "$c" == "$TBGID" -a "$BACKGR" == "" ]; then
  687.                 FILE=$f
  688.             fi
  689.             let c=$c+1
  690.         done
  691.         cd ..
  692.         if [ "$FILE" != "" ] ; then
  693.             convert $USERDIR/backgrounds/$FILE -resize $DESTSIZE^ -gravity center -extent $DESTSIZE $USERDIR/base/canvas.png
  694.         fi
  695.         echo ""
  696.  
  697.         # POSITION
  698.         POS=`cat $CONFIGFILE | grep --regexp="^CENTER = " | awk -F " = " '{ print $2 }'`
  699.         echo -n "Center of the earth on the screen (ex. \"+800+600\") [$POS]: "
  700.         read CENTER
  701.         echo ""
  702.         if [ "$CENTER" != "" -a "$CENTER" != "$POS" ]; then
  703.             sed -i -r "s/^CENTER = .*/CENTER = $CENTER/" $CONFIGFILE
  704.         fi
  705.         echo ""
  706.  
  707.         # REGION
  708.         echo "Next step is to determine the region to display. This is specified by longitude and latitude."
  709.         echo -n "Do you want to search for your values now? (This opens a browser window - y/n) [n]: "
  710.         read -n1 BROWSER
  711.         echo ""
  712.         case "$BROWSER" in
  713.             "y" | "Y" | "j" | "J" )
  714.                 xdg-open $SEARCHMAPURL &>/dev/null
  715.             ;;
  716.         esac
  717.         echo ""
  718.  
  719.         # LONGITUDE
  720.         LONGITUDE=`cat $CONFIGFILE | grep --regexp="^LONGITUDE = " | awk -F " = " '{ print $2 }'`
  721.         echo -n "Display this longitude position (integer or enter \"random\") [$LONGITUDE]: "
  722.         read LONG
  723.         echo ""
  724.         if [ "$LONG" != "" -a "$LONGITUDE" != "$LONG" ]; then
  725.             sed -i -r "s/^LONGITUDE = .*/LONGITUDE = $LONG/" $CONFIGFILE
  726.         fi
  727.         echo ""
  728.  
  729.         # LATITUDE
  730.         LATITUDE=`cat $CONFIGFILE | grep --regexp="^LATITUDE = " | awk -F " = " '{ print $2 }'`
  731.         echo -n "Display this latitude position (integer or enter \"random\") [$LATITUDE]: "
  732.         read LAT
  733.         echo ""
  734.         if [ "$LAT" != "" -a "$LATITUDE" != "$LAT" ]; then
  735.             sed -i -r "s/^LATITUDE = .*/LATITUDE = $LAT/" $CONFIGFILE
  736.         fi
  737.         echo ""
  738.        
  739.         # SHOWORBIT
  740.         SHOWORBIT=`cat $CONFIGFILE | grep --regexp="^SHOWORBIT = " | awk -F " = " '{ print $2 }'`
  741.         echo -n "Should the view follow the sun? The day and night border will stay static while the earth turns. 0 = no, 1 = yes [$SHOWORBIT]: "
  742.         read SHO
  743.         echo ""
  744.         if [ "$SHO" != "" -a "$SHOWORBIT" != "$SHO" ]; then
  745.             cont="`cat $CONFIGFILE | grep SHOWORBIT`"
  746.             if [ -z "$cont" ]; then
  747.                 echo "SHOWORBIT = $SHO" >> $CONFIGFILE
  748.             else
  749.                 sed -i -r "s/^SHOWORBIT = .*/SHOWORBIT = $SHO/" $CONFIGFILE
  750.             fi
  751.         fi
  752.         echo ""
  753.        
  754.         # ORBIT
  755.         ORBIT=`cat $CONFIGFILE | grep --regexp="^ORBIT = " | awk -F " = " '{ print $2 }'`
  756.         echo -n "Set the angle at which we follow the sun (-180 to 180) [$ORBIT]: "
  757.         read ORB
  758.         echo ""
  759.         if [ "$ORB" != "" -a "$ORBIT" != "$ORB" ]; then
  760.             cont="`cat $CONFIGFILE | grep ORBIT`"
  761.             if [ -z "$cont" ]; then
  762.                 echo "ORBIT = $ORB" >> $CONFIGFILE
  763.             else
  764.                 sed -i -r "s/^ORBIT = .*/ORBIT = $ORB/" $CONFIGFILE
  765.             fi
  766.         fi
  767.         echo ""
  768.        
  769.         # SIZE
  770.         SIZE=`cat $CONFIGFILE | grep --regexp="^RADIUS = " | awk -F " = " '{ print $2 }'`
  771.         echo -n "Radiant of the earth in percent of the screen height [$SIZE]: "
  772.         read RAD
  773.         echo ""
  774.         if [ "$RAD" != "" -a "$RAD" != "$SIZE" ]; then
  775.             sed -i -r "s/^RADIUS = .*/RADIUS = $RAD/" $CONFIGFILE
  776.         fi
  777.         echo ""
  778.  
  779.         # CORONA
  780.         CORONA=`cat $CONFIGFILE | grep --regexp="^CORONA = " | awk -F " = " '{ print $2 }'`
  781.         coro=`echo "if ($CORONA > 2) { $CORONA/$SIZE } else { $CORONA }" | bc -l`
  782.         echo -n "Size of the atmosphere FX, multiplier of the earth, 0 to disable, FLOAT between 1.00 and 1.10 (medium CPU usage) [$coro]: "
  783.         read COR
  784.         echo ""
  785.         if [ "$COR" != "" -a "$coro" != "$COR" -o "$coro" != "$CORONA" ]; then
  786.             sed -i -r "s/^CORONA = .*/CORONA = $COR/" $CONFIGFILE
  787.         fi
  788.         echo ""
  789.        
  790.         # CORONABLUR
  791.         CORONABLUR=`cat $CONFIGFILE | grep --regexp="^CORONABLUR = " | awk -F " = " '{ print $2 }'`
  792.         echo -n "Blurring of the corona (0 - 50) [$CORONABLUR]: "
  793.         read CORB
  794.         echo ""
  795.         if [ "$CORB" != "" -a "$CORB" != "$CORONABLUR" ]; then
  796.             cont="`cat $CONFIGFILE | grep CORONABLUR`"
  797.             if [ -z "$cont" ]; then
  798.                 echo "CORONABLUR = $CORB" >> $CONFIGFILE
  799.             else
  800.                 sed -i -r "s/^CORONABLUR = .*/CORONABLUR = $CORB/" $CONFIGFILE
  801.             fi
  802.         fi
  803.         echo ""
  804.        
  805.         # STARS
  806.         STARS=`cat $CONFIGFILE | grep --regexp="^STARS = " | awk -F " = " '{ print $2 }'`
  807.         echo -n "Draw a star field on the background image? 0 = no, 1 - 20 FOV (CPU usage depends on POST setting) [$STARS]: "
  808.         read STA
  809.         echo ""
  810.         if [ "$STA" != "" -a "$STA" != "$STARS" ]; then
  811.             cont="`cat $CONFIGFILE | grep STARS`"
  812.             if [ -z "$cont" ]; then
  813.                 echo "STARS = $STA" >> $CONFIGFILE
  814.             else
  815.                 sed -i.backup -r "s/^STARS = .*/STARS = $STA/" $CONFIGFILE
  816.             fi
  817.         fi
  818.         echo ""
  819.        
  820.         # BUMPCLOUDS
  821.         BUMPCLOUDS=`cat $CONFIGFILE | grep --regexp="^BUMPCLOUDS = " | awk -F " = " '{ print $2 }'`
  822.         echo -n "Draw high quality clouds? 0 = no, 1 = yes (high CPU usage) [$BUMPCLOUDS]: "
  823.         read CLOUDS
  824.         echo ""
  825.         if [ "$CLOUDS" != "" -a "$CLOUDS" != "$BUMPCLOUDS" ]; then
  826.             sed -i -r "s/^BUMPCLOUDS = .*/BUMPCLOUDS = $CLOUDS/" $CONFIGFILE
  827.         fi
  828.         echo ""
  829.  
  830.         ## CLOUDFACTOR
  831.         #CLOUDFACTOR=`cat xplanetFX | grep --regexp="^CLOUDFACTOR=" | awk '{ print $1 }' | awk -F "=" '{ print $2 }'`
  832.         #echo -n "Resize the clouds by factor n (affects only HQ clouds) [$CLOUDFACTOR]: "
  833.         #read CLOUDF
  834.         #echo ""
  835.         #if [ "$CLOUDF" != "" -a "$CLOUDF" != "$CLOUDFACTOR" ]; then
  836.         #    sed -i.backup -r "s/^CLOUDFACTOR=/CLOUDFACTOR=$CLOUDF # /" xplanetFX
  837.         #    rm xplanetFX.backup
  838.         #fi
  839.         #echo ""
  840.  
  841.         # SPECULAR
  842.         SPECULAR=`cat $CONFIGFILE | grep --regexp="^SPECULAR = " | awk -F " = " '{ print $2 }'`
  843.         echo -n "Draw high quality specular FX? 0 = no, 1 = yes (high CPU usage) [$SPECULAR]: "
  844.         read SPEC
  845.         echo ""
  846.         if [ "$SPEC" != "" -a "$SPEC" != "$SPECULAR" ]; then
  847.             sed -i.backup -r "s/^SPECULAR = .*/SPECULAR = $SPEC/" $CONFIGFILE
  848.         fi
  849.         echo ""
  850.  
  851.         # MOON ORBIT
  852.         ORBIT=`cat config/xplanet-final | grep --regexp="^orbit_color=" | awk '{ print $1 }' | awk -F "=" '{ print $2 }'`
  853.         echo -n "Color of the moon's orbit - {R,G,B} 0-255 [$ORBIT]: "
  854.         read ORB
  855.         echo ""
  856.         if [ "$ORB" != "" -a "$ORB" != "$ORBIT" ]; then
  857.             sed -i -r "s/^orbit_color=/orbit_color=$ORB # /" cache/xplanet-final
  858.             rm cache/xplanet-final.backup
  859.         fi
  860.         echo ""
  861.  
  862.         # POST
  863.         POST=`cat $CONFIGFILE | grep --regexp="^POST = " | awk -F " = " '{ print $2 }'`
  864.         echo -n "Render post production FX? 0 = no, 1 = yes (medium CPU usage) [$POST]: "
  865.         read POS
  866.         echo ""
  867.         if [ "$POS" != "" -a "$POS" != "$POST" ]; then
  868.             sed -i -r "s/^POST = .*/POST = $POS # /" $CONFIGFILE
  869.         fi
  870.         echo ""
  871.  
  872.         # OVERLAY
  873.         OVERLAY=`cat $CONFIGFILE | grep --regexp="^OVERLAY = " | awk -F "=" '{ print $2 }'`
  874.         echo "Please choose one of the following overlay images:"
  875.         echo ""
  876.         c=1
  877.         cd overlays
  878.         echo " [0] none"
  879.         for f in *.png; do
  880.             echo " [$c] $f"
  881.             let c=$c+1
  882.         done
  883.         if [ "$OVERLAY" == "0" ]; then
  884.             ACTOVER=0
  885.         fi
  886.         if [ "$TEMPLATEOVER" != "" ]; then
  887.             ACTOVER=$c
  888.             echo " [$c] keep existing one from template ($TEMPLATEOVER)"
  889.         fi
  890.         echo ""
  891.         echo -n "Which overlay should be used? (low CPU usage) [$ACTOVER]: "
  892.         read OVER
  893.         echo ""
  894.         if [ "$OVER" != "" -a "$OVER" != "$ACTOVER" ]; then
  895.             if [ "$OVER" == "0" ]; then
  896.                 sed -i -r "s/^OVERLAY = .*/OVERLAY = 0/" $CONFIGFILE
  897.             elif [ "$OVER" != "$c" ]; then
  898.                 c=1
  899.                 FILE=
  900.                 for f in *.png; do
  901.                     if [ "$c" == "$OVER" ]; then
  902.                         FILE=$f
  903.                     fi
  904.                     let c=$c+1
  905.                 done
  906.                 convert $USERDIR/overlays/$FILE -background transparent -resize $DESTSIZE^ -gravity center -extent $DESTSIZE $USERDIR/cache/overlay.png
  907.                 sed -i -r "s/^OVERLAY = .*/OVERLAY = 1/" $CONFIGFILE
  908.             fi
  909.         fi
  910.         cd ..
  911.         echo ""
  912.  
  913.         # LOG FILES
  914.         LOG=`cat $CONFIGFILE | grep --regexp="^LOGGING = " | awk -F " = " '{ print $2 }'`
  915.         echo -n "Create logfiles? (0 = no, 1 = yes) [$LOG]: "
  916.         read LOGGING
  917.         echo ""
  918.         if [ "$LOGGING" != "" -a "$LOG" != "$LOGGING" ]; then
  919.             sed -i -r "s/^LOGGIN = .*/LOGGING = $LOGGING/" $CONFIGFILE
  920.         fi
  921.         echo ""
  922.  
  923.         # CYCLE DELAY
  924.         CYCLE=`cat $CONFIGFILE | grep --regexp="^DELAY = " | awk -F " = " '{ print $2 }'`
  925.         echo -n "Reproduce every n seconds [$CYCLE]: "
  926.         read CYC
  927.         echo ""
  928.         if [ "$CYC" != "" -a "$CYC" != "$CYCLE" ]; then
  929.             sed -i -r "s/^DELAY = .*/DELAY = $CYC/" $CONFIGFILE
  930.         fi
  931.         echo ""
  932.  
  933.         # DELAY
  934.         DELAY=`cat $CONFIGFILE | grep --regexp="^AUTOSTART = " | awk -F " = " '{ print $2 }'`
  935.         echo -n "Delay startup on autostart for n seconds [$DELAY]: "
  936.         read DEL
  937.         echo ""
  938.         if [ "$DEL" != "" -a "$DEL" != "$DELAY" ]; then
  939.             sed -i -r "s/^AUTOSTART = .*/AUTOSTART = $DEL/" $CONFIGFILE
  940.         fi
  941.         echo ""
  942.  
  943.         # STARTER
  944.         echo -n "Do you want to create an autostart entry? Enter \"g\" for GNOME, \"k\" for KDE, \"x\" for XFCE >= 4.4, \"X\" for XFCE < 4.4, \"f\" for Fluxbox or leave blank for no autostart entry: "
  945.         read AUTO
  946.         echo ""
  947.         if [ "$AUTO" != "" ]; then
  948.             if [ "$AUTO" == "k" ]; then
  949.                 ln -s /usr/bin/xplanetFX $HOME/.kde/Autostart/xplanetFX
  950.             elif [ "$AUTO" == "x" ]; then
  951.                 ln -s /usr/bin/xplanetFX $HOME/.config/autostart/xplanetFX
  952.             elif [ "$AUTO" == "X" ]; then
  953.                 ln -s /usr/bin/xplanetFX $HOME/Desktop/Autostart/xplanetFX
  954.             elif [ "$AUTO" == "g" ]; then
  955.                 echo "[Desktop Entry]
  956.        Type=Application
  957.        Exec=xplanetFX --autostart
  958.        Hidden=false
  959.        NoDisplay=false
  960.        X-GNOME-Autostart-enabled=true
  961.        Name=xplanetFX
  962.        Comment=Create photorealistic backgrounds of earth views" > $HOME/.config/autostart/xplanetFX.desktop
  963.             elif [ "$AUTO" == "f" ]; then
  964.                 if [ "`grep -r 'xplanetFX --autostart &' $HOME/.fluxbox/startup`" == "" ]; then
  965.                     echo "xplanetFX --autostart &" >> $HOME/.fluxbox/startup
  966.                 fi
  967.             else
  968.                 echo "WTF?! Knowing how to read is a great advantage."
  969.             fi
  970.         fi
  971.         echo ""
  972.        
  973.         # OUTPUT
  974.         OUTPUT=`cat $CONFIGFILE | grep --regexp="^OUTPUT = " | awk -F " = " '{ print $2 }'`
  975.         echo "Choose a file to render to if your desktop environment couldn't be determined. Leave blank to let xplanetFX look for GNOME, KDE, XFCE or feh."
  976.         if [ -z $DESKTOP ]; then
  977.             echo -n "The desktop environment wasn't found. Enter a file [\"$OUTPUT\"]: "
  978.         else
  979.             echo -n "The determined desktop environment is: \"$DESKTOP\". [\"$OUTPUT\"]: "
  980.         fi
  981.         read OUT
  982.         echo ""
  983.         if [ "$OUT" != "" -a "$OUT" != "$OUTPUT" ]; then
  984.             cont="`cat $CONFIGFILE | grep OUTPUT`"
  985.             if [ -z "$cont" ]; then
  986.                 echo "OUTPUT = $OUT" >> $CONFIGFILE
  987.             else
  988.                 sed -i -r "s/^OUTPUT = .*/OUTPUT = $OUT/" $CONFIGFILE
  989.             fi
  990.         fi
  991.         echo ""
  992.        
  993.         # SCRIPT
  994.         PRESCRIPT=`cat $CONFIGFILE | grep --regexp="^SCRIPT = " | awk -F " = " '{ print $2 }'`
  995.         echo -n "Script to execute before xplanetFX has rendered the image [$PRESCRIPT]: "
  996.         read PRS
  997.         echo ""
  998.         if [ "$PRS" != "" -a "$PRS" != "$PRESCRIPT" ]; then
  999.             cont="`cat $CONFIGFILE | grep PRESCRIPT`"
  1000.             if [ -z "$cont" ]; then
  1001.                 echo "PRESCRIPT = $PRS" >> $CONFIGFILE
  1002.             else
  1003.                 sed -i -r "s/^PRESCRIPT = .*/PRESCRIPT = $PRS/" $CONFIGFILE
  1004.             fi
  1005.         fi
  1006.         echo ""
  1007.        
  1008.         # SCRIPT
  1009.         SCRIPT=`cat $CONFIGFILE | grep --regexp="^SCRIPT = " | awk -F " = " '{ print $2 }'`
  1010.         echo -n "Script to execute after xplanetFX has rendered the image [$SCRIPT]: "
  1011.         read SCR
  1012.         echo ""
  1013.         if [ "$SCR" != "" -a "$SCR" != "$SCRIPT" ]; then
  1014.             cont="`cat $CONFIGFILE | grep SCRIPT`"
  1015.             if [ -z "$cont" ]; then
  1016.                 echo "SCRIPT = $SCR" >> $CONFIGFILE
  1017.             else
  1018.                 sed -i -r "s/^SCRIPT = .*/SCRIPT = $SCR/" $CONFIGFILE
  1019.             fi
  1020.         fi
  1021.         echo ""
  1022.        
  1023.         # START NOW
  1024.         echo -n "Do you want to start xplanetFX now? [n]: "
  1025.         read START
  1026.         echo ""
  1027.         case "$START" in
  1028.             "y" | "Y" | "j" | "J" )
  1029.                 xplanetFX --start &
  1030.             ;;
  1031.         esac
  1032.         echo ""
  1033.  
  1034.         echo "xplanetFX is now set up. You can close this terminal if you like."
  1035.         echo "Call xplanetFX --help for rudimentary information about usage."
  1036.         echo "Read the README for detailed instructions and further information."
  1037.         exit;;
  1038.     ("")
  1039.         ;;
  1040.     ("--help"|*)
  1041.         echo "xplanetFX - HQ renderings of mother earth for your desktop"
  1042.         echo "Call: $0 [OPTION]"
  1043.         echo "  --help          show this help."
  1044.         echo "  --setup         configure xplanetFX step by step if you don't use the GUI"
  1045.         echo "  --start         start in the background. A running script will be stopped."
  1046.         echo "  --stop          stop a running instance."
  1047.         echo "  --toggle        display a window asking for starting/stopping xplanetFX"
  1048.         echo "  --autostart     start xplanetFX with the autostart delay"
  1049.         echo "  --single [file] create one single image and exit"
  1050.         echo "  --template [template] [style] activate an installed template"
  1051.         echo "  --random        select a random template and restart a running xplanetFX"
  1052.         echo "  --log           show the latest log file."
  1053.         echo "  --clearlog      remove all log files"
  1054.         echo "  --gui           open a GTK userinterface"
  1055.         echo "  --rclouds       remove a corrupt clouds image"
  1056.         echo "  --install [file] install a template file (use absolute path)"
  1057.         echo "  --geometry [WIDTHxHEIGHT] set xplanetFX to specified size"
  1058.         echo "  --update-templates convert all templates for version >= 1.1"
  1059.         echo "Without any option xplanetFX will run in this terminal."
  1060.         echo ""
  1061.         exit;;
  1062. esac
  1063.  
  1064. # clear log
  1065. if [ $LOGGING -eq 0 ]; then
  1066.     rm logs/xplanetFX.log >/dev/null 2>&1
  1067. fi
  1068.  
  1069. while true;
  1070. do
  1071.     XPLANETFLAGS="$LABEL"
  1072.    
  1073.     # CONFIG
  1074.     deb="config"
  1075.     for v in "`grep " = " "$CONFIGFILE" | awk -F " = " '{ printf "%s=%s\n",$1,$2 }'`"; do
  1076.         eval "$v"
  1077.         deb="$deb | $v"
  1078.     done
  1079.     debug "$deb"
  1080.    
  1081.     # update oldest background image
  1082.     if [ $SINGLE -eq 0 ]; then
  1083.         if [ ! -z "$OUTPUT" ]; then
  1084.             FINAL="$OUTPUT"
  1085.         elif [ "$OUTPUT1" -ot "$OUTPUT2" ]; then
  1086.             FINAL="$OUTPUT1"
  1087.         else
  1088.             FINAL="$OUTPUT2"
  1089.         fi
  1090.         debug "output | file: $FINAL"
  1091.     fi
  1092.    
  1093.     # rotate the view
  1094.     if [ $SHOWORBIT -eq 1 ]; then
  1095.         if [ "$LONGITUDE" == "random" ]; then LONGITUDE=0; fi
  1096.         # add suns position to longitude
  1097.         hour=`date +%k`
  1098.         min=`date +%M`
  1099.         add=`echo "(($hour + $min / 60) / 12 - 1) * 180" | bc -l`
  1100.         LONGITUDE=`echo "($LONGITUDE) - ($add)" | bc -l | sed -r "s/^\./0./" | sed -r "s/^\-\./-0./" | awk -F "." '{ print $1 }'`
  1101.         LONGITUDE=`echo "($LONGITUDE) + ($ORBIT) * -1" | bc -l | sed -r "s/^\./0./" | sed -r "s/^\-\./-0./" | awk -F "." '{ print $1 }'`
  1102.         debug "rotating view | hour: $hour | min: $min | add: $add | lon: $LONGITUDE | lat: $LATITUDE"
  1103.     else
  1104.         if [ "$LONGITUDE" == "random" ]; then
  1105.             LONGITUDE=`random 360`
  1106.         fi
  1107.     fi
  1108.     XPLANETFLAGS="$XPLANETFLAGS -longitude $LONGITUDE"
  1109.    
  1110.     if [ "$LATITUDE" == "random" ]; then
  1111.         #LATITUDE=`python -c "import math,random; print int(math.asin(random.random()*2-1)*180/3.141592654)"`
  1112.         # SteveH mentioned this one for easier maintainace and installation on Arch - thanks!
  1113.         LATITUDE=`perl -e 'use Math::Trig; print int(asin(rand()*2-1)*180/pi())'`
  1114.         debug "random lat | lat: $LATITUDE"
  1115.     fi
  1116.     XPLANETFLAGS="$XPLANETFLAGS -latitude $LATITUDE"
  1117.          
  1118.     # build commant options
  1119.    
  1120.     #if [ ! -z $ORIGIN ]; then XPLANETFLAGS="$XPLANETFLAGS -origin $ORIGIN"; fi
  1121.     #if [ ! -z $TARGET ]; then XPLANETFLAGS="$XPLANETFLAGS -target $TARGET"; fi
  1122.     #if [ ! -z $RANGE ]; then XPLANETFLAGS="$XPLANETFLAGS -range $RANGE"; fi
  1123.    
  1124.     if [ "$SHOWDATE" == "1" ]; then
  1125.         DATE=`echo "$DATE+((0$GMT)*(0-1)*60*60)" | bc`
  1126.         XPLANETFLAGS="$XPLANETFLAGS -date "`date --utc --date "1970-01-01 $DATE sec" "+%Y%m%d.%H%M00"`
  1127.         debug "showdate | date: $DATE | gmt: $GMT"
  1128.     fi
  1129.    
  1130.     XPLANETFLAGSCORONA="$XPLANETFLAGS $XPLANETDEF"
  1131.     if [ ! -z $GEOMETRY ]; then XPLANETFLAGS="$XPLANETFLAGS -geometry $GEOMETRY"; fi
  1132.     XPLANETFLAGSCLOUDS="$XPLANETFLAGS $XPLANETDEF"
  1133.    
  1134.     if [ ! -z $CENTER ]; then XPLANETFLAGS="$XPLANETFLAGS -center $CENTER"; fi
  1135.     #if [ ! -z $CENTER ]; then XPLANETFLAGSCORONA="$XPLANETFLAGSCORONA -center $CENTER"; fi
  1136.     if [ ! -z $RADIUS ]; then XPLANETFLAGS="$XPLANETFLAGS -radius $RADIUS"; fi
  1137.     if [ ! -z $RADIUS ]; then XPLANETFLAGSCLOUDS="$XPLANETFLAGSCLOUDS -radius $RADIUS"; fi
  1138.    
  1139.     XPLANETFLAGS="$XPLANETFLAGS $XPLANETDEF"
  1140.    
  1141.     debug "xplanetflags | $XPLANETFLAGS"
  1142.     debug "xplanetflagscorona | $XPLANETFLAGSCORONA"
  1143.     debug "xplanetflagsclouds | $XPLANETFLAGSCLOUDS"
  1144.    
  1145.     # tell everyone we're online
  1146.     echo $$ > lock
  1147.     echo "" | tee -a logs/xplanetFX.log
  1148.    
  1149.     # SCRIPT TO CALL?
  1150.     if [ -n "$PRESCRIPT" ] && [ $SINGLE -eq 0 ]; then
  1151.         echo2 "Executing: $PRESCRIPT ..."
  1152.         $PRESCRIPT
  1153.         echo2 "done."
  1154.     fi
  1155.    
  1156.     VER="`cat $WORKDIR/version 2>/dev/null`"
  1157.    
  1158.     if [ $SINGLE -eq 1 ]; then
  1159.         echo2 "###### xplanetFX $VER starting single render ######"
  1160.     else
  1161.         echo2 "###### xplanetFX $VER starting render cycle ######"
  1162.     fi
  1163.     # HAVE A LOOK @ THE LOGS
  1164.     rm logs/*.gz >/dev/null 2>&1
  1165.     cat logs/xplanetFX.log | tail -n 1000 > logs/xplanetFX.log.bak
  1166.     mv logs/xplanetFX.log.bak logs/xplanetFX.log
  1167.    
  1168.     # moved config reading from here
  1169.  
  1170.     # spit out some information
  1171.     echo2 "final image @ "$FINAL
  1172.     echo2 "location @ lon $LONGITUDE / lat $LATITUDE"
  1173.     if [ "$SHOWDATE" == "1" ]; then
  1174.         echo2 "time @ `date --utc --date "1970-01-01 $DATE sec" "+%Y/%m/%d.%H:%M:00"`"
  1175.     fi
  1176.     echo2 "screen size @ $GEOMETRY | center @ $CENTER | radius @ $RADIUS"
  1177.     echo2 "special f/x @ clouds: $BUMPCLOUDS | specular: $SPECULAR | post: $POST"
  1178.    
  1179.    
  1180.     # CREATE SINGLE IMAGE?
  1181.     if [ $SINGLE -eq 1 ]; then
  1182.         echo2 "creating a single image and exit."
  1183.     fi
  1184.    
  1185.     # calculate some position fixes - thx @ Chrischi
  1186.     X0S=`echo $CENTER | sed -E 's/([+-])([0-9]+)([+-])([0-9]+)/\1/'`
  1187.     Y0S=`echo $CENTER | sed -E 's/([+-])([0-9]+)([+-])([0-9]+)/\3/'`
  1188.     X0=`echo $CENTER | sed -E 's/([+-])([0-9]+)([+-])([0-9]+)/\2/'`
  1189.     Y0=`echo $CENTER | sed -E 's/([+-])([0-9]+)([+-])([0-9]+)/\4/'`
  1190.    
  1191.     debug "positions 1 | x0: $X0S$X0 | y0: $Y0S$Y0"
  1192.    
  1193.     if [ $X0S == "-" ]; then
  1194.         CROPX="+0"
  1195.         CENTERX=`echo "($X0-($X0*$CLOUDFACTOR-$X0))" | bc -l`
  1196.         CENTERX="-"`round $CENTERX 0`
  1197.     else
  1198.         CROPX=`echo "($X0*$CLOUDFACTOR-$X0)" | bc -l`
  1199.         CROPX="+"`round $CROPX 0`
  1200.         CENTERX="+"$X0
  1201.     fi
  1202.    
  1203.     if [ $Y0S == "-" ]; then
  1204.         CROPY="+0"
  1205.         CENTERY=`echo "($Y0-($Y0*$CLOUDFACTOR-$Y0))" | bc -l`
  1206.         CENTERY="-"`round $CENTERY 0`
  1207.     else
  1208.         CROPY=`echo "($Y0*$CLOUDFACTOR-$Y0)" | bc -l`
  1209.         CROPY="+"`round $CROPY 0`
  1210.         CENTERY="+"$Y0
  1211.     fi
  1212.    
  1213.     debug "positions 2 | centerx: $CENTERX | centery: $CENTERY | cropx: $CROPX | cropy: $CROPY"
  1214.    
  1215.     # WIDTH & HEIGHT
  1216.     WIDTH=`echo $GEOMETRY | awk -F "x" '{ print $1 }'`
  1217.     HEIGHT=`echo $GEOMETRY | awk -F "x" '{ print $2 }'`
  1218.    
  1219.     debug "geometry | width: $WIDTH | height: $HEIGHT | geometry: $GEOMETRY"
  1220.    
  1221.     # BLURFACTOR
  1222.     BLURFACTOR=`echo "($HEIGHT/1200)*($RADIUS/33)" | bc -l`
  1223.    
  1224.     debug "blurfactor: $BLURFACTOR"
  1225.    
  1226.     # fetch clouds image
  1227.     echo2 "inspecting cloud map..."
  1228.     cd cache
  1229.     perl $WORKDIR/clouds/download_clouds.pl | echo4
  1230.     DLOK=${PIPESTATUS[0]}
  1231.     if [ $DLOK -eq 2 ]; then
  1232.         # clouds are corrupt, use a default image
  1233.         echo2 "using default clouds image..."
  1234.         cp ../base/clouds.jpg clouds.jpg &>/dev/null 2>&1
  1235.         # and set its time far in the past
  1236.         touch -d "2000-01-01 00:00" clouds.jpg &>/dev/null 2>&1
  1237.     fi
  1238.     cd ..
  1239.     echo2 "done."
  1240.    
  1241.     # STARMAP
  1242.     if [ $STARS -gt 0 ]; then
  1243.         if [ $POST -eq 1 ]; then
  1244.             echo2 "Rendering hi-quality stars on background..."
  1245.             # render stars
  1246.             xplanet -config $WORKDIR/config/xplanet-stars \
  1247.                 -output cache/stars.png \
  1248.                 $XPLANETFLAGS \
  1249.                 -radius 1 \
  1250.                 -range `echo "($STARS+1)^2" | bc` \
  1251.                 -starmap starmap \
  1252.                 -searchdir $WORKDIR &>/dev/null
  1253.            
  1254.             # blur 1
  1255.             blur=`echo "$BLURFACTOR*2" | bc -l`
  1256.            
  1257.             debug "starblur 1: $blur"
  1258.            
  1259.             convert $USERDIR/cache/stars.png \
  1260.                 \( +clone -blur 0x$blur -level 0%,70% \) \
  1261.                 -compose screen \
  1262.                 -composite \
  1263.                 $USERDIR/cache/stars.png
  1264.  
  1265.             # blur 2
  1266.             blur=`echo "$BLURFACTOR*5" | bc -l`
  1267.            
  1268.             debug "starblur 2: $blur"
  1269.            
  1270.             convert $USERDIR/cache/stars.png \
  1271.                 \( +clone -blur 0x$blur -level 0%,70% \) \
  1272.                 -compose screen \
  1273.                 -composite \
  1274.                 $USERDIR/cache/stars.png &>/dev/null
  1275.            
  1276.             # compose with baseimage
  1277.             convert $BASEIMAGE $USERDIR/cache/stars.png \
  1278.                 -compose screen \
  1279.                 -composite \
  1280.                 $BACKGROUND
  1281.            
  1282.         else
  1283.             # render stars on background
  1284.             echo2 "Rendering simple stars on background..."
  1285.             xplanet -config $WORKDIR/config/xplanet-stars \
  1286.                 -background $BASEIMAGE \
  1287.                 -output $BACKGROUND \
  1288.                 $XPLANETFLAGS \
  1289.                 -radius 1 \
  1290.                 -range `echo "($STARS+1)^2" | bc` \
  1291.                 -starmap starmap \
  1292.                 -searchdir $WORKDIR &>/dev/null
  1293.         fi
  1294.        
  1295.         echo2 "done."
  1296.     else
  1297.         cp $BASEIMAGE $BACKGROUND
  1298.     fi
  1299.    
  1300.     # CORONA
  1301.     if [ "$CORONA" != "1.0" -a "$CORONA" != "0" ]; then
  1302.         echo2 "creating corona on background..."
  1303.         _CORONA=`echo "if ($CORONA > 2) { $CORONA/$RADIUS } else { $CORONA }" | bc -l`
  1304.         _CORONABLUR=`echo "$BLURFACTOR*$CORONABLUR * $_CORONA" | bc -l`
  1305.         _CORONASIZE=`echo "$HEIGHT.0 * ($RADIUS.0 / 100.0) * 2.0 * $_CORONA" | bc -l`
  1306.         _CORONASIZE=`round $_CORONASIZE 0`
  1307.         _CORONARADIANT=`echo "$_CORONASIZE/2" | bc`
  1308.         _CORONAADD=`echo "$_CORONABLUR*2" | bc -l | xargs printf "%1.0f"`
  1309.         _CORONAREP=`echo "$_CORONAADD+$_CORONAADD+$_CORONASIZE" | bc`
  1310.         _CORONAPOSX=`echo "0$X0S$X0-$_CORONAREP/2" | bc -l | xargs printf "%1.0f"`
  1311.         _CORONAPOSY=`echo "0$Y0S$Y0-$_CORONAREP/2" | bc -l | xargs printf "%1.0f"`
  1312.         if [ $_CORONAPOSX -gt 0 ]; then
  1313.             _CORONAPOSX="+$_CORONAPOSX"
  1314.         fi
  1315.         if [ $_CORONAPOSY -gt 0 ]; then
  1316.             _CORONAPOSY="+$_CORONAPOSY"
  1317.         fi
  1318.        
  1319.         debug "corona: $_CORONA | coronablur: $_CORONABLUR | coronasize: $_CORONASIZE | coronaradiant: $_CORONARADIANT"
  1320.         debug "coronaadd: $_CORONAADD | coronarep: $_CORONAREP | coronaposx: $_CORONAPOSX | coronaposy: $_CORONAPOSY"
  1321.        
  1322.         # create corona
  1323.         xplanet -config config/xplanet-corona \
  1324.             -output cache/corona.png \
  1325.             $XPLANETFLAGSCORONA \
  1326.             -radius 50 \
  1327.             -center +$_CORONARADIANT+$_CORONARADIANT \
  1328.             -geometry $_CORONASIZE"x"$_CORONASIZE &>/dev/null
  1329.        
  1330.         # blur corona and composit background and corona in one step
  1331.         convert $BACKGROUND \
  1332.             \( $USERDIR/cache/corona.png \
  1333.                 -level 0%,90% \
  1334.                 -background black \
  1335.                 -gravity center \
  1336.                 -extent $_CORONAREP"x"$_CORONAREP \
  1337.                 +repage \
  1338.                 -blur 0x$_CORONABLUR \) \
  1339.             -gravity NorthWest \
  1340.             -geometry $_CORONAPOSX$_CORONAPOSY \
  1341.             -compose screen \
  1342.             -composite \
  1343.             $BACKGROUND
  1344.        
  1345.          echo2 "done."
  1346.     fi
  1347.    
  1348.     # NORMAL CLOUDS
  1349.     if [ $BUMPCLOUDS -eq 0 ]; then
  1350.         sed -i.backup -r "s/^#cloud_map=cache\/clouds.png/cloud_map=cache\/clouds.png/" $CONFIG
  1351.         sed -i.backup -r "s/^#cloud_gamma=1.2/cloud_gamma=1.2/" $CONFIG
  1352.         sed -i.backup -r "s/^#cloud_ssec=false/cloud_ssec=false/" $CONFIG
  1353.         sed -i.backup -r "s/^#cloud_threshold=70/cloud_threshold=70/" $CONFIG
  1354.         rm $CONFIG.backup
  1355.        
  1356.         echo2 "preparing clouds map..."
  1357.         # clouds resize
  1358.         convert $USERDIR/cache/clouds.jpg \
  1359.             -resize $MAPSIZE \
  1360.             $USERDIR/cache/clouds.png
  1361.         echo2 "done."
  1362.     else
  1363.         sed -i.backup -r "s/^cloud_map=cache\/clouds.png/#cloud_map=cache\/clouds.png/" $CONFIG
  1364.         sed -i.backup -r "s/^cloud_gamma=1.2/#cloud_gamma=1.2/" $CONFIG
  1365.         sed -i.backup -r "s/^cloud_ssec=false/#cloud_ssec=false/" $CONFIG
  1366.         sed -i.backup -r "s/^cloud_threshold=70/#cloud_threshold=70/" $CONFIG
  1367.         rm $CONFIG.backup
  1368.     fi
  1369.    
  1370.     # FINAL XPLANET IMAGE
  1371.     echo2 "rendering image via xplanet..."
  1372.     if [ "$BACKGROUND" ]; then
  1373.         xplanet -output $INTERIM \
  1374.             -config config/xplanet-final \
  1375.             $XPLANETFLAGS \
  1376.             -background $BACKGROUND &>/dev/null
  1377.     else
  1378.         xplanet -output $INTERIM \
  1379.             -config config/xplanet-final \
  1380.             $XPLANETFLAGS &>/dev/null
  1381.     fi
  1382.     echo2 "done."
  1383.    
  1384.     # BUMPCLOUDS
  1385.     if [ $BUMPCLOUDS -eq 1 ]; then
  1386.         echo2 "creating different renderings with clouds..."
  1387.         # clouds resize and greyscale
  1388.         convert $USERDIR/cache/clouds.jpg \
  1389.             -level 10%,100% \
  1390.             -resize $MAPSIZE \
  1391.             $USERDIR/cache/clouds.png
  1392.        
  1393.         # render cloud overlay
  1394.         xplanet -config config/xplanet-clouds \
  1395.             -output cache/clouds_render.png \
  1396.             $XPLANETFLAGSCLOUDS \
  1397.             -center $CENTERX$CENTERY &>/dev/null
  1398.        
  1399.         # create final clouds
  1400.         # Chrischi has helped figuring out how to crop at the correct position
  1401.         scale=`echo $CLOUDFACTOR*100 | bc -l`
  1402.        
  1403.         debug "cloudscale: $scale"
  1404.        
  1405.         # possible filters:
  1406.         #Bartlett
  1407.         #Bessel (?)
  1408.         #Blackman
  1409.         #Bohman
  1410.         #Box
  1411.         #Catrom
  1412.         #Cubic
  1413.         #Gaussian
  1414.         #Hamming (x)
  1415.         #Hanning
  1416.         #Hermite
  1417.         #Kaiser
  1418.         #Lagrange
  1419.         #Lanczos
  1420.         #Mitchell (?)
  1421.         #Parzen
  1422.         #Point
  1423.         #Quadratic
  1424.         #Sinc
  1425.         #Triangle
  1426.         #Welsh (x)
  1427.        
  1428.         convert $USERDIR/cache/clouds_render.png \
  1429.             -filter Welsh \
  1430.             -resize $scale% \
  1431.             -sharpen 0x0.5 \
  1432.             -crop $GEOMETRY$CROPX$CROPY \
  1433.             +repage \
  1434.             -auto-level \
  1435.             $USERDIR/cache/clouds_overlay.png
  1436.        
  1437.         # cut moon from clouds
  1438.         xplanet -config config/xplanet-clouds-moon \
  1439.             -output cache/clouds_moon_mask.png \
  1440.             $XPLANETFLAGSCLOUDS \
  1441.             -center $CENTERX$CENTERY \
  1442.             -background backgrounds/black.png &>/dev/null
  1443.         convert \( $USERDIR/cache/clouds_moon_mask.png \
  1444.                 -level 40%,0%,1.5 \) \
  1445.             $USERDIR/cache/clouds_moon_mask.png
  1446.         convert $USERDIR/cache/clouds_overlay.png \
  1447.             $USERDIR/cache/clouds_moon_mask.png \
  1448.             -compose Multiply \
  1449.             -composite \
  1450.             $USERDIR/cache/clouds_overlay.png
  1451.        
  1452.         # create shadows and cut moon from shadows
  1453.         blur=`echo "$BLURFACTOR * 2.5 * (1 + ($CLOUDFACTOR - 1) * 20)" | bc -l`
  1454.        
  1455.         debug "shadowblur: $blur"
  1456.        
  1457.         convert \( $USERDIR/cache/clouds_render.png -level 80%,25% -blur 0x$blur \) \
  1458.                 \( $USERDIR/cache/clouds_moon_mask.png -negate \) \
  1459.                 -compose Screen \
  1460.                 -composite \
  1461.                 $USERDIR/cache/clouds_shadows.png
  1462.        
  1463.         echo2 "done."
  1464.        
  1465.         echo2 "compositing clouds with final image..."
  1466.         # compose shadows with earth
  1467.         convert $INTERIM \
  1468.             $USERDIR/cache/clouds_shadows.png \
  1469.             -compose Multiply \
  1470.             -composite \
  1471.             $INTERIM
  1472.        
  1473.         # composit clouds with earth
  1474.         convert $INTERIM \
  1475.             $USERDIR/cache/clouds_overlay.png \
  1476.             -compose Screen \
  1477.             -composite \
  1478.             $INTERIM
  1479.         echo2 "done."
  1480.     fi
  1481.    
  1482.     # ATMOSPHERE
  1483.     if [ $ATMOSPHERE -eq 1 ]; then
  1484.         echo2 "creating atmosphere..."
  1485.         _ATMOBLUR=`echo "$BLURFACTOR*40" | bc -l`
  1486.         _ATMOSIZE=`echo "$HEIGHT.0 * ($RADIUS.0 / 100.0) * 2.0" | bc -l | xargs printf "%1.0f"`
  1487.         _ATMOMASK=`echo "$HEIGHT.0 * ($RADIUS.0 / 100.0) * 0.95" | bc -l | xargs printf "%1.0f"`
  1488.         _ATMORADIANT=`echo "$_ATMOSIZE/2" | bc`
  1489.         _ATMOPOSX=`echo "0$X0S$X0-$_ATMOSIZE/2" | bc -l | xargs printf "%1.0f"`
  1490.         _ATMOPOSY=`echo "0$Y0S$Y0-$_ATMOSIZE/2" | bc -l | xargs printf "%1.0f"`
  1491.        
  1492.         if [ $_ATMOPOSX -gt 0 ]; then
  1493.             _ATMOPOSX="+$_ATMOPOSX"
  1494.         fi
  1495.         if [ $_ATMOPOSY -gt 0 ]; then
  1496.             _ATMOPOSY="+$_ATMOPOSY"
  1497.         fi
  1498.        
  1499.         debug "atmosphere | atmoblur: $_ATMOBLUR | atmosize: $_ATMOSIZE | atmoradiant: $_ATMORADIANT"
  1500.         debug "atmoposx: $_ATMOPOSX | atmoposy: $_ATMOPOSY | atmomask: $_ATMOMASK"
  1501.        
  1502.         xplanet -config config/xplanet-corona \
  1503.             -transpng cache/atmosphere.png \
  1504.             $XPLANETFLAGSCORONA \
  1505.             -radius 50 \
  1506.             -center +$_ATMORADIANT+$_ATMORADIANT \
  1507.             -geometry $_ATMOSIZE"x"$_ATMOSIZE &>/dev/null
  1508.        
  1509.         convert $INTERIM \
  1510.             +matte \
  1511.             \( $USERDIR/cache/atmosphere.png \
  1512.                 +matte \
  1513.                 \( +clone \
  1514.                     -level 0%,80% \
  1515.                     -fill rgb\(30,220,255\) \
  1516.                     -tint 80 \
  1517.                     -fill black \
  1518.                     -draw "ellipse $_ATMORADIANT,$_ATMORADIANT $_ATMOMASK,$_ATMOMASK 0,360" \
  1519.                     -channel RGBA \
  1520.                     -blur 0x$_ATMOBLUR \
  1521.                     -alpha off \
  1522.                 \) \
  1523.                 \( -clone 0 \
  1524.                     -alpha extract \
  1525.                 \) \
  1526.                 -delete 0 \
  1527.                 -compose Copy_Opacity \
  1528.                 -composite \
  1529.             \) \
  1530.             -gravity NorthWest \
  1531.             -geometry $_ATMOPOSX$_ATMOPOSY \
  1532.             -compose screen \
  1533.             -composite \
  1534.             $INTERIM
  1535.            
  1536.         echo2 "done."
  1537.     fi
  1538.     # SPECULAR
  1539.     if [ $SPECULAR -eq 1 ]; then
  1540.         echo2 "creating specular image..."
  1541.         # composit specular and clouds for spec fx
  1542.         convert $USERDIR/base/earth_spec.jpg \
  1543.             cache/clouds.png \
  1544.             -compose Screen \
  1545.             -composite \
  1546.             -level -50%,100%,1.5 \
  1547.             $USERDIR/cache/earth_spec2.png
  1548.        
  1549.         # create specular b/w
  1550.         xplanet -config config/xplanet-specular \
  1551.             -output cache/specular_overlay.png \
  1552.             $XPLANETFLAGS &>/dev/null
  1553.        
  1554.         # curve and blur specular map blur
  1555.         blur1=`echo "$BLURFACTOR*2.5" | bc -l`
  1556.         blur2=`echo "$BLURFACTOR*5" | bc -l`
  1557.        
  1558.         debug "specblur 1: $blur1"
  1559.         debug "specblur 2: $blur2"
  1560.  
  1561.         convert $INTERIM \
  1562.             \( $USERDIR/cache/specular_overlay.png -level 5%,33% -blur 0x$blur2 \) \
  1563.             -compose Color_Dodge \
  1564.             -composite \
  1565.             $INTERIM
  1566.            
  1567.         echo2 "done."
  1568.     fi
  1569.    
  1570.     # OVERLAY
  1571.     if [ "$OVERLAY" = "1" -a -f cache/overlay.png ]; then
  1572.         echo2 "rendering overlay image..."
  1573.         # composit background and overlay
  1574.         convert $INTERIM \
  1575.             $USERDIR/cache/overlay.png \
  1576.             -composite \
  1577.             $INTERIM
  1578.         echo2 "done."
  1579.     fi
  1580.    
  1581.     # POST PRODUCTION
  1582.     if [ $POST -eq 1 ]; then
  1583.         echo2 "rendering post production..."
  1584.         # clone a contrast map, rework and recompose
  1585.         blur=`echo "$BLURFACTOR * 20" | bc -l`
  1586.        
  1587.         debug "postblur: $blur"
  1588.        
  1589.         convert $INTERIM \
  1590.             \( +clone -blur 0x$blur -level 0%,90%,1.5 \) \
  1591.             -compose Soft_Light \
  1592.             -composite \
  1593.             $INTERIM
  1594.        
  1595.         echo2 "done."
  1596.     fi
  1597.    
  1598.     # MOVE INTERIM TO FINAL LOCATION
  1599.     cp -f $INTERIM $FINAL >/dev/null 2>&1
  1600.    
  1601.     # UPDATE BACKGROUND
  1602.     if [ $SINGLE -eq 0 ] && [ -z $OUTPUT ]; then
  1603.         echo2 "updating background for $DESKTOP environment..."
  1604.         # We have a GNOME desktop - use gconf
  1605.         if [ $DESKTOP = "GNOME" ]; then
  1606.             gsettings set org.gnome.desktop.background picture-uri "$FINAL"
  1607.             # $gconf -t str -s /desktop/gnome/background/picture_filename "$FINAL" hacked!!!!
  1608.         fi
  1609.         # The older KDE's can be switched by dcop, newer ones > 4.3 doesn't work this way.
  1610.         # No soultion by now, try to use the OUTPUT config setting and invoke
  1611.         # a script afterwards.
  1612.         if [ $DESKTOP = "KDE" ]; then
  1613.             dcop kdesktop KBackgroundIface setWallpaper "$FINAL" 5
  1614.         fi
  1615.         # XFCE desktops have to restart the mcs-manager with some changes
  1616.         # in a XML file
  1617.         if [ $DESKTOP = "XFCE" ]; then
  1618.             killall xfce-mcs-manager
  1619.                 wait
  1620.                 CHANGE="$(cat $HOME/.config/xfce4/mcs_settings/desktop.xml | grep path_0_0 | cut -d\" -f 6 | sed 's/\//\\\//g')"
  1621.                 WITH=$FINAL
  1622.                 cat $HOME/.config/xfce4/mcs_settings/desktop.xml | sed 's/'$CHANGE'/'$WITH'/g' > xfce_desktop.xml
  1623.                 mv xfce_desktop.xml $HOME/.config/xfce4/mcs_settings/desktop.xml
  1624.                 xfce-mcs-manager &
  1625.             fi
  1626.             # Fluxbox uses fbsetbg by default but a bunch of users
  1627.             # have feh installed.
  1628.             if [ $DESKTOP = "FLUXBOX" -a `feh -h >/dev/null 2>&1; echo $?` -eq 0 ]; then
  1629.             feh --bg-scale "$FINAL"
  1630.         elif [ $DESKTOP = "FLUXBOX" ]; then
  1631.             fbsetbg -f "$FINAL"
  1632.             fi
  1633.             # Thanks to Alexander Batischev who pointed this out!
  1634.             # feh seems to be the only wallpaper setting program,
  1635.             # if this doesn't work the user can set an image to
  1636.             # copy the final to. But first we try Alexander's idea:
  1637.             if [ $DESKTOP = "feh" ]; then
  1638.             feh --bg-scale "$FINAL"
  1639.             fi
  1640.             echo2 "done."
  1641.         fi
  1642.        
  1643.         # CLEAN UP OLD SHITE v < 2.0.21
  1644.     rm -f $USERDIR"/output/xplanet1.png" >/dev/null 2>&1
  1645.     rm -f $USERDIR"/output/xplanet2.png" >/dev/null 2>&1
  1646.    
  1647.     # SCRIPT TO CALL?
  1648.     if [ -n "$SCRIPT" ] && [ $SINGLE -eq 0 ]; then
  1649.         echo2 Executing: "$SCRIPT" ...
  1650.         $SCRIPT &
  1651.         echo2 "done."
  1652.     fi
  1653.     # EXIT AFTER SINGLE IMAGE?
  1654.     if [ $SINGLE -eq 1 ]; then
  1655.         exit 0
  1656.     else
  1657.         date=`date +"%Y-%m-%d %H:%M:%S"`
  1658.         echo2 "next update: "`date --date "$date $DELAY sec" +"%X %x"`
  1659.     fi
  1660.     rm lock >/dev/null 2>&1
  1661.     # go to bed
  1662.     sleep $DELAY
  1663. done