summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authormschubert2015-06-12 12:10:32 +0100
committermschubert2015-06-12 12:10:32 +0100
commitd9bd564190fe3551f06ae3036fcb489eff6d8806 (patch)
treedef37dcf38ed023d48078040920d8b3b5352698f
downloadaur-d9bd564190fe3551f06ae3036fcb489eff6d8806.tar.gz
Initial import
-rw-r--r--.SRCINFO25
-rw-r--r--PKGBUILD43
-rw-r--r--imagej.desktop43
-rwxr-xr-ximagej.sh479
-rw-r--r--microscope.xpm30
5 files changed, 620 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO
new file mode 100644
index 000000000000..a12934323b18
--- /dev/null
+++ b/.SRCINFO
@@ -0,0 +1,25 @@
+pkgbase = imagej
+ pkgdesc = Image manipulation software for scientists
+ pkgver = 1.49o
+ pkgrel = 1
+ epoch = 2
+ url = http://rsbweb.nih.gov/ij/index.html
+ arch = any
+ license = Public Domain
+ makedepends = unzip
+ depends = java-runtime
+ optdepends = java-environment-common
+ noextract = ij148.zip
+ source = http://rsbweb.nih.gov/ij/download/zips/ij148.zip
+ source = http://imagej.nih.gov/ij/upgrade/ij.jar
+ source = imagej.sh
+ source = imagej.desktop
+ source = microscope.xpm
+ md5sums = 57b5b52a5a6ce5a21f1553cf7a02b4a5
+ md5sums = SKIP
+ md5sums = 7dc3fd02120f699204b3d85a7e383082
+ md5sums = 9d60878b6adad0e1895ce875bf299147
+ md5sums = e7a7cef1b44ad3a8752ba63885fd88fb
+
+pkgname = imagej
+
diff --git a/PKGBUILD b/PKGBUILD
new file mode 100644
index 000000000000..70a8cb6a3ae1
--- /dev/null
+++ b/PKGBUILD
@@ -0,0 +1,43 @@
+# Maintainer: Michael Schubert <mschu.dev at gmail>
+# Contributor: Giulio Guzzinati <guzzinati.giulio at gmail>
+
+pkgname=imagej
+pkgver=1.49o
+_pkgver=148
+pkgrel=1
+epoch=2
+pkgdesc="Image manipulation software for scientists"
+arch=('any')
+url="http://rsbweb.nih.gov/ij/index.html"
+license=('Public Domain')
+depends=('java-runtime')
+makedepends=('unzip')
+optdepends=('java-environment-common')
+source=("http://rsbweb.nih.gov/ij/download/zips/ij$_pkgver.zip"
+ "http://imagej.nih.gov/ij/upgrade/ij.jar"
+ "imagej.sh"
+ "imagej.desktop"
+ "microscope.xpm")
+noextract=("ij$_pkgver.zip")
+md5sums=('57b5b52a5a6ce5a21f1553cf7a02b4a5'
+ 'SKIP'
+ '7dc3fd02120f699204b3d85a7e383082'
+ '9d60878b6adad0e1895ce875bf299147'
+ 'e7a7cef1b44ad3a8752ba63885fd88fb')
+
+package() {
+ cd "$pkgdir"
+ unzip -d "$pkgdir" "$srcdir/ij$_pkgver.zip"
+ rm -rf ImageJ/ImageJ.exe ImageJ/ImageJ.app ImageJ/run
+
+ mkdir -p "$pkgdir"/usr/share
+ mv ImageJ "$pkgdir"/usr/share/imagej
+ install -m644 "$srcdir"/ij.jar "$pkgdir"/usr/share/imagej/ij.jar
+
+ find "$pkgdir" -type d -exec chmod 755 {} \; -o -exec chmod 644 {} \;
+
+ cd "$srcdir"
+ install -Dm755 imagej.sh "$pkgdir"/usr/bin/imagej
+ install -Dm644 imagej.desktop "$pkgdir"/usr/share/applications/imagej.desktop
+ install -Dm644 microscope.xpm "$pkgdir"/usr/share/pixmaps/microscope.xpm
+}
diff --git a/imagej.desktop b/imagej.desktop
new file mode 100644
index 000000000000..cac7e285b815
--- /dev/null
+++ b/imagej.desktop
@@ -0,0 +1,43 @@
+[Desktop Entry]
+Version=1.0
+Type=Application
+Name=ImageJ
+GenericName=Image Editor
+GenericName[bg]=Редактор на изображения
+GenericName[ca]=Editor de imatge
+GenericName[cs]=Editor obrázků
+GenericName[da]=Billedredigering
+GenericName[de]=Bildeditor
+GenericName[en_CA]=Image Editor
+GenericName[en_GB]=Image Editor
+GenericName[es]=Editor de imagen
+GenericName[eu]=Irudi-editorea
+GenericName[fi]=Kuvaeditori
+GenericName[fr]=Éditeur d'images
+GenericName[hu]=Képszerkesztő
+GenericName[it]=Editor di immagini
+GenericName[ja]=画像エディタ
+GenericName[ko]=색상표 편집기
+GenericName[mk]=Уредник за слики
+GenericName[nb]=Bildebehandler
+GenericName[nl]=Afbeelding-editor
+GenericName[no]=Bildebehandler
+GenericName[pa]=ਚਿੱਤਰ ਸੰਪਾਦਕ
+GenericName[pl]=Edytor obrazu
+GenericName[pt_BR]=Editor de Imagens
+GenericName[ru]=Редактор изображений
+GenericName[sk]=Editor obrázkov
+GenericName[sr]=Обрада слика
+GenericName[sr@Latn]=Obrada slika
+GenericName[sv]=Bildeditor
+GenericName[uk]=Редактор зображень
+GenericName[zh_CN]=图像编辑器
+GenericName[zh_TW]=色盤編輯程序
+Comment=Image processing and analysis
+Comment[en_GB]=Image processing and analysis
+Comment[fr]=Traitement et analyse de l'image
+Comment[it]=Trattamento ed analisi delle immagini
+Exec=imagej %f
+Icon=microscope
+Categories=Graphics;Science;Biology;
+MimeType=image/bmp;image/gif;image/jpeg;image/jpg;image/pjpeg;image/png;image/tiff;image/x-bmp;image/x-fits;image/x-png;image/x-psd;image/x-xbitmap;application/dicom;
diff --git a/imagej.sh b/imagej.sh
new file mode 100755
index 000000000000..c75c8b19168e
--- /dev/null
+++ b/imagej.sh
@@ -0,0 +1,479 @@
+#!/bin/bash
+
+# imagej.sh - a not so simple wrapper script used to run ImageJ
+#
+# Copyright 2008 Paolo Ariano
+# Authors: Paolo Ariano (paolo dot ariano at unito dot it)
+# Last modified date: 19 Sept 2008
+#
+# This is a not so simple wrapper script used to run ImageJ in Unix but
+# optimized for Debian GNU/Linux, this is a merge between my original script
+# and a more exhaustive one from Jon Jackson (jjackson at familyjackson dot net)
+
+# Adapted for use with ArchLinux
+
+# Edited 2009 Giulio Guzzinati
+# Authors: Giulio Guzzinati (guzzinati.giulio at gmail)
+# Last modified date: 24 May 2009
+
+# Edited 2012/13 Michael Schubert
+# Authors: Michael Schubert (mschu.dev at gmail)
+# Last modified date: 17 Feb 2013
+
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Lesser General Public Licenseas published by
+# the Free Software Foundation, either version 3 of the License, or (at
+# your option) any later version. See the file Documentation/LGPL3 in the
+# original distribution for details. There is ABSOLUTELY NO warranty.
+# This program is free software, but comes with no warrenty or guarantee
+# send bug reports or feedback to me or to debian bug tracking system
+
+
+# setup environment
+# dont give error for unset variables (matters for environment variables)
+set +u
+# allow extended pattern matching
+shopt -s extglob
+
+##################### CREATE THE RIGHT ENVIRONMENT #####################
+
+# ImageJ path
+ij_path=/usr/share/imagej
+
+#ImageJ user path
+ij_user_path=$HOME/.imagej
+
+# Documentation URL
+doc_url='http://rsb.info.nih.gov/ij/'
+
+# temp folder
+ij_tmp='/tmp/imagej'
+
+# default behaviour when an ImageJ window is already open
+newwindow='true'
+#newwindow='false'
+
+# macro argument conjoining character
+separator=':'
+# a ' ' may work provided no arguments would contain spaces
+# use macro functions: args=getArgument(); argArray=split(args, ':');
+# to recover macro arguments
+
+# create plugins,macro,tmp dirs
+mkdir -p ${ij_user_path}/{plugins,macros,luts}
+
+# makes symbolik links from shared plugins, macros and luts
+find ${ij_path}/{plugins,macros,luts} -maxdepth 1 -mindepth 1 | while read p; do
+ if [ ! -e "${p/$ij_path/$ij_user_path}" ] ; then
+ ln -s "$p" "${p/$ij_path/$ij_user_path}"
+ fi
+done
+
+# remove symlinks for files that do no longer exist
+find ${ij_user_path} -type l | while read p; do
+ if ! readlink -qe "$p" > /dev/null; then
+ rm "$p"
+ fi
+done
+
+# report errors to this user
+# ijadmin='paolo.ariano@unito.it'
+
+# other variables
+dir=`pwd`
+user=`whoami`
+host=`hostname`
+if [[ -z "$DISPLAY" ]] ; then
+ echo 'Display variable not set'
+ echo 'If ImageJ fails to load, try '
+ echo '% setenv DISPLAY yourcomputer:0'
+ echo 'if you use the "csh" or for "bash" try'
+ echo '% export DISPLAY=yourcomputer:0'
+ display='default'
+else
+ display="$DISPLAY"
+fi
+
+declare -i port=0
+declare -i verbosity=0
+images=''
+macrocmd=''
+macroargs=''
+
+############ DEFAULT MEMORY SETTINGS #########################
+
+declare -i default_mem=768
+declare -i min_mem=32
+declare -i max_32bit=1800 # empirical
+declare -i max_64bit=17000000000 # conservative
+
+############ MEMORY ALLOCATION #########################
+
+OS=$(uname)
+processor=$(uname -m) # -p doesn't work on debian/ubuntu
+declare -i mem
+declare -i max_mem
+declare -i free_mem
+
+java_home="${java_home:-$JAVA_HOME}"
+
+if [[ "$OS" == 'SunOS' ]] ; then
+ java_arch='-d64'
+ JAVA_HOME="${java_home_SunOS:-$java_home}"
+ max_mem=`vmstat | awk 'BEGIN{maxMem='$max_64bit'} NR == 3 {fmem=int($5 / 1024); if (fmem < maxMem) {print fmem} else {print maxMem}}'`
+ free_mem="max_mem"
+ mem=${free_mem}/2
+ if (( $mem > $default_mem || $mem < $min_mem )) ; then mem=$default_mem ; fi
+elif [[ "$OS" == 'Linux' ]] ; then
+ if [[ "$processor" == 'x86_64' ]] ; then
+ java_arch='-d64'
+ JAVA_HOME="${java_home_Linux_x86_64:-$java_home}"
+ max_mem=`free | awk -v maxMem=$max_64bit 'NR == 2 {fmem=int($2 / 1024); if (fmem < maxMem) {print fmem} else {print maxMem}}'`
+ free_mem=`free | awk -v maxMem=$max_64bit 'NR == 3 {fmem=int($4 / 1024); if (fmem < maxMem) {print fmem} else {print maxMem}}'`
+ mem=${free_mem}/3*2
+ if (( $mem > $default_mem || $mem < $min_mem )) ; then mem=$default_mem ; fi
+ else
+ java_arch='-d32'
+ JAVA_HOME="${java_home_Linux:-$java_home}"
+ max_mem=`free | awk -v maxMem=$max_32bit 'NR == 2 {fmem=int($2 / 1024); if (fmem < maxMem) {print fmem} else {print maxMem}}'`
+ free_mem=`free | awk -v maxMem=$max_32bit 'NR == 3 {fmem=int($4 / 1024); if (fmem < maxMem) {print fmem} else {print maxMem}}'`
+ mem=${free_mem}/3*2
+ if (( $mem > $default_mem || $mem < $min_mem )) ; then mem=$default_mem ; fi
+ fi
+fi
+
+
+##################### USAGE DESCRIPTION #####################
+
+function usage {
+ echo
+ echo 'Image display and analysis program. Opens formats including:'
+ echo 'UNC, Analyze, Dicom, NIFTI, Tiff, Jpeg, Gif, PNG ...'
+ echo
+ echo 'imagej [options] image [ image2 ... image3 ]'
+ echo ' -h print help and more options'
+ echo ' -o open images in an open ImageJ panel'
+ echo ' -p <N> open images in ImageJ panel number <N>'
+ echo " -x <MB> set available memory (default=${mem} max=${max_mem})"
+ echo
+}
+
+function fullusage {
+ echo
+ echo 'Image display and analysis program. Opens formats including:'
+ echo 'UNC, Analyze, Dicom, NIFTI, Tiff, Jpeg, Gif, PNG ...'
+ echo
+ echo 'imagej [options] image [ image2 ... image3 ] -> open images'
+ echo
+ echo 'basic options:'
+ echo ' -h print help and more options'
+ echo ' -o open images in existing ImageJ panel if one exists'
+ echo ' -p <N> open images in existing ImageJ panel number <N>'
+ echo " -x <MB> set available memory (default=${mem} max=${max_mem})"
+ echo
+ echo 'advanced options:'
+ echo ' -c enable plugin compilation within imagej'
+ echo ' -d use development version'
+ echo ' -v be verbose (vv or vvv increases verbosity)'
+ echo
+ echo 'options for batch processing:'
+ echo " -e 'Macro Code' execute macro code"
+ echo " -r 'Menu Command' run menu command"
+ echo "Quotation marks '' are required around commands including spaces"
+ echo 'Commands can be sent to open ImageJ panels with the -p option'
+ echo
+ echo 'options for macros:'
+ echo 'imagej [-i image] [-b|-m] [arg1 ... argN] '
+ echo ' -b macro run macro without graphics window'
+ echo ' -m macro run macro'
+ echo '"image" will be opened before macro is run'
+ echo 'all following arguments are passed to macro'
+ echo
+ echo "Documentation - $doc_url "
+ echo "Report problems with this software to $ijadmin"
+ echo
+}
+
+function macroCmdError {
+ fullusage
+ echo 'Only one command option (-b -e -m OR -r) may be specified' 1>&2
+ exit 1
+}
+
+function getFullPath {
+ # Return full path to file
+ # treats multiple arguments as a single file with spaces
+ if (( $# == 0 )) ; then
+ echo "error getting full path for '${*}'" 1>&2
+ fi
+ pwd_getFullPath="$PWD"
+ \cd $(dirname "${*}") > /dev/null
+ dir_getFullPath="$PWD"
+ \cd "$pwd_getFullPath" > /dev/null
+ echo "$dir_getFullPath"/$(basename "${*}")
+}
+function derefln {
+ # Returns the full path of file to which link points
+ # following multiple levels of symbolic links.
+ # NOTE: if you use this function in a script, don't use any
+ # of the variable names used here
+ if (( $# == 0 )) ; then
+ return
+ fi
+ local the_link="$1"
+ local link_dir
+ local current_dir="$PWD"
+ while file "$the_link" | grep symbolic > /dev/null ; do # resolve links until target is regular file
+ if [[ "$the_link" == */* ]] ; then # path contains /
+ \cd $(dirname "${the_link}") > /dev/null
+ the_link=$(basename "$the_link")
+ fi
+ link_dir="$PWD"
+ # some versions of 'file' surround the path in `' quotes, hence the tr to remove them
+ the_link=$(file "${the_link}" | awk '/symbolic link/ {print $NF}' | tr -d "\140\047" )
+ if [[ "$the_link" != /* ]] ; then # path is not absolute path - make it one
+ the_link="$link_dir/$the_link"
+ fi
+ \cd "$current_dir" > /dev/null
+ done
+ echo $the_link
+}
+
+
+# The best way to install .jar libraries required by plugins is to copy them
+# to the imagej plugins/jars directory
+# Alternatively, either copy them to ${ij_path}/jre/lib/ext/ or add the .jar
+# filepath to the modules line below. Paths are separated by a colon
+# Classpath must follow command line arguments, as ij_path is dependent on the -d option
+
+# Resolving ij.jar path. If ij.jar is a symbolic link to ij_<version>.jar
+# this allows updating ij.jar without crashing running sessions
+ij_jar_path=$(derefln ${ij_path}/ij.jar)
+
+for mod_jar in ${ij_path}/lib/*jar ; do
+ modules="${modules:-}${modules+:}$mod_jar"
+done
+modules="-cp ${ij_jar_path}:${modules+:}${modules:-}"
+#${ij_path}/plugins/jars/dcmie.jar
+
+export LD_LIBRARY_PATH="${ij_path}/lib/${OS}_$processor"
+if (( $verbosity > 0 )) ; then
+ echo "LD_LIBRARY_PATH=$LD_LIBRARY_PATH"
+fi
+
+# enable plugins to be compiled in imagej
+tools="$JAVA_HOME/lib/tools.jar"
+
+
+##################### ARGUMENTS PARSING #####################
+
+while getopts b:cde:hi:m:nop:r:vx: options
+do
+ case $options in
+ b) if [[ -n "$macrocmd" ]] ; then macroCmdError ; fi
+ macrocmd="-batch ${OPTARG}"
+ ;;
+ c) modules="${modules:-}${modules+:}${tools}"
+ ;;
+ d) ij_path="$ij_path_dev"
+ ;;
+ e) if [[ -n "$macrocmd" ]] ; then macroCmdError ; fi
+ macrocmd='-eval'
+ macroargs="'${OPTARG}'"
+ ;;
+ h) fullusage
+ exit 0
+ ;;
+ i) images="${images}'${OPTARG}' "
+ ;;
+ m) if [[ -n "$macrocmd" ]] ; then macroCmdError ; fi
+ macrocmd="-macro ${OPTARG}"
+ ;;
+ n) newwindow='true'
+ ;;
+ o) newwindow='false'
+ ;;
+ p) newwindow='false'
+ port="${OPTARG}"
+ if (( "$port" < 1 || "$port" > 99 )) ; then
+ echo "${OPTARG} is not a permissible value for port number (-p)" 1>&2
+ exit 1
+ fi
+ ;;
+ r) if [[ -n "$macrocmd" ]] ; then macroCmdError ; fi
+ macrocmd='-run'
+ macroargs="'${OPTARG}'"
+ ;;
+ v) verbosity=verbosity+1
+ if (( $verbosity == 2 )) ; then set -x ; fi
+ if (( $verbosity == 3 )) ; then set -v ; fi
+ ;;
+ x) mem="${OPTARG}"
+ newwindow='true'
+ if (( $mem < $min_mem || $mem > $max_mem )) ; then
+ echo "${OPTARG} is not a permissible value for memory (-x)" 1>&2
+ echo "min=${min_mem}, max=${max_mem}" 1>&2
+ exit 1
+ fi
+ ;;
+ \?) usage
+ exit 1
+ ;;
+ esac
+done
+
+
+declare -i i=1
+while (( i < $OPTIND )) ; do
+ shift
+ i=i+1
+done
+
+#if (( "$#" == 0 )) ; then
+# usage
+#fi
+
+# -b and -m options only:
+# remaining command line arguments are passed as macro arguments
+# separated by $separator
+if [[ -n "$macrocmd" && -z "$macroargs" ]] ; then
+ while (( "$#" > 0 )) ; do
+ if [[ -z "$macroargs" ]] ; then
+ macroargs="${1}"
+ else
+ macroargs="${macroargs}${separator}${1}"
+ fi
+ shift
+ done
+ macroargs="'$macroargs'"
+fi
+
+# PROTECT POSSIBLE SPACES IN IMAGE FILENAMES
+if (( "$#" > 0 )) ; then
+ while (( "$#" > 0 )) ; do
+ filearg="${1}"
+ # full file path required when sending images to running ImageJ panel
+ if [[ "${newwindow}" == 'false' && -f "${filearg}" ]] && ! expr "${filearg}" : '/.*' > /dev/null; then
+ filearg="$(getFullPath ${filearg})"
+ fi
+ images="${images}'$filearg' "
+ shift
+ done
+fi
+
+##################### USING PORT #####################
+
+# CREATE IMAGEJ SOCKET-LOCK DIRECTORY IF NON EXISTANT
+if [[ ! -d "$ij_tmp" ]] ; then
+ mkdir "$ij_tmp"
+ chmod 777 "$ij_tmp"
+fi
+
+# CREATE IMAGEJ LOG FILE IF NON EXISTANT
+if [[ -n "$ij_log" && ! -f "$ij_log" ]] ; then
+ touch "$ij_log"
+ chmod 666 "$ij_log"
+fi
+
+# CREATES A TEMP FILE INDICATING A PORT IS IN USE BY IMAGEJ
+cd "$ij_tmp"
+declare -i count=1
+portopen='false'
+lockFileCreated='false'
+declare -a locklist=(`ls | grep '[0-9][0-9]-.*'`)
+
+[[ -n "$ij_log" ]] && echo -e "$$\t$(date)\tNew Window = $newwindow" >> "$ij_log" 2> /dev/null
+[[ -n "$ij_log" ]] && echo -e "$$\t$(date)\tPort = $port" >> "$ij_log" 2> /dev/null
+[[ -n "$ij_log" ]] && echo -e "$$\t$(date)\tlocklist: \n ${locklist[*]}" >> "$ij_log" 2> /dev/null
+if (( $verbosity > 0 )) ; then echo -e "locklist: \n ${locklist[*]}" ; fi
+
+# PORT SPECIFIED BY USER
+if (( $port > 0 )) ; then
+ # look for a lock on the port specified
+ for lockname in ${locklist[*]} ; do
+ prefix=`printf '%02u' $port`
+ if [[ "$lockname" == ${prefix}-${user}-${host}* ]] ; then
+ # found lock on the requested port, owned by user on current display
+ portopen='true'
+ if (( $verbosity > 0 )) ; then echo "Using socket lock: $lockname" ; fi
+ count=$port
+ break
+ elif [[ "$lockname" == ${prefix}-* ]] ; then
+ echo "Port $port is in use by some other user or a different host" 1>&2
+ if (( $verbosity > 0 )) ; then echo "Port lock: $lockname" ; fi
+ exit 1
+ fi
+ done
+ # specified port not in use
+ count=$port
+
+# IF EXISTING WINDOW IS REQUESTED, LOOK FOR LISTENING PORT
+elif [[ "$newwindow" == 'false' && ${#locklist} != 0 ]] ; then
+ # look for a lock on the current display for this user
+ for lockname in ${locklist[*]} ; do
+ if [[ "$lockname" == [0-9][0-9]-${user}-${host}-${display} ]] ; then
+ portopen='true'
+ if (( $verbosity > 0 )) ; then echo "Found socket lock: $lockname" ; fi
+ # if a matching user/display is found, use this one
+ count="${lockname%-*-*-*}"
+ #count=`echo $lockname | sed -e 's/^\([0-9][0-9]\).*/\1/' -e 's/^0//'` # csh?
+ break
+ fi
+ done
+fi
+
+# IF A NEW PORT IS TO BE USED
+if [[ "$portopen" == 'false' ]] ; then
+ # new window requested or no matching port found
+ # if port is not specified, look for first free port
+ if (( "$port" == 0 )) ; then
+ if (( ${#locklist} == 0 )) ; then
+ # no active locks - use first port
+ count=1
+ else
+ # active locks - check each port number so see if it is in use
+ # this is not synchronised!!
+ count=0
+ inuse='true'
+ while [[ "$inuse" == 'true' ]] ; do
+ count=count+1
+ prefix=`printf '%02u' $count`
+ inuse='false'
+ for lockname in ${locklist[*]} ; do
+ if [[ "$lockname" == ${prefix}-* ]] ; then
+ inuse='true'
+ fi
+ done
+ done
+ fi
+ fi
+ # CREATING A NEW PORT LOCK
+ prefix=`printf '%02u' $count`
+ lockname=${prefix}-${user}-${host}-${display}
+
+ [[ -n "$ij_log" ]] && echo -e "$$\t$(date)\tCreating lock\t$lockname" >> "$ij_log" 2> /dev/null
+ if (( $verbosity > 0 )) ; then echo -n "creating lock $lockname ... " ; fi
+ touch $lockname
+ trap '\rm -f ${ij_tmp}/$lockname >/dev/null ; echo -e "$$\t$(date)\tReleasing lock\t$lockname" >> "$ij_log" 2> /dev/null' EXIT TERM KILL
+ # Quitting ImageJ sends EXIT, as does a kill/kill -9
+ # CTRL+C in terminal sends INT + EXIT
+ # System shutdown sends TERM (+EXIT??)
+
+ if (( $verbosity > 0 )) ; then echo 'done' ; fi
+
+ lockFileCreated='true'
+ if [[ -z "$macrocmd" ]] ; then
+ echo 'Open other images in this ImageJ panel as follows:'
+ echo " imagej -p $count <image1> [<image2> ... <imageN>]"
+ fi
+ [[ -n "$ij_log" ]] && echo -e "$$\t$(date)\tSocket lock:\t$lockname" >> "$ij_log" 2> /dev/null
+ if (( $verbosity > 0 )) ; then echo "Socket lock: $lockname" ; fi
+ echo
+fi
+
+##################### FINALLY RUN IMAGEJ #####################
+
+eval java ${java_arch} -mx${mem}m ${modules} ij.ImageJ -ijpath ${ij_user_path} -port${count} ${images} ${macrocmd} ${macroargs}
+
+exit 0
+
diff --git a/microscope.xpm b/microscope.xpm
new file mode 100644
index 000000000000..6379977da24a
--- /dev/null
+++ b/microscope.xpm
@@ -0,0 +1,30 @@
+/* XPM */
+static char * microscope_xpm[] = {
+"20 20 7 1",
+" c None",
+". c #C3D100",
+"+ c #D1C700",
+"@ c #D1B500",
+"# c #D1A900",
+"$ c #CB8E00",
+"% c #C57700",
+" %% ",
+" %. ",
+" %. ",
+" %. ",
+" %$ ",
+" %$ ",
+" #%$ ",
+" $%%$ ",
+" %%%%$ ",
+" $% %$ ",
+" %% %% ",
+" %% %% ",
+" %% ",
+" %%%%$@@.. ",
+" %%%$$$$ ",
+" %% ",
+" %% + ",
+" %% $$ ",
+" %%%@@@@@.. ",
+" %%%%%%%%$$+. "};