| #!/bin/sh | 
 | # | 
 | # Create menu/desktop entries for an application | 
 | # This is used by the IShellLink interface | 
 | # | 
 | # Copyright 2000 Alexandre Julliard | 
 | # | 
 | # This library is free software; you can redistribute it and/or | 
 | # modify it under the terms of the GNU Lesser General Public | 
 | # License as published by the Free Software Foundation; either | 
 | # version 2.1 of the License, or (at your option) any later version. | 
 | # | 
 | # This library is distributed in the hope that it will be useful, | 
 | # but WITHOUT ANY WARRANTY; without even the implied warranty of | 
 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | 
 | # Lesser General Public License for more details. | 
 | # | 
 | # You should have received a copy of the GNU Lesser General Public | 
 | # License along with this library; if not, write to the Free Software | 
 | # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA | 
 | # | 
 |  | 
 | # Note that the link is a relative unix-style path name.  Since the / character | 
 | # is not valid in Windows filenames it is an adequate separator to show the | 
 | # menu structure.  (This program may need to split the menu structure out for | 
 | # implementing xdg-style menus) | 
 |  | 
 | mode="" | 
 | args="" | 
 | menu="" | 
 | icon="" | 
 | descr="" | 
 | link="" | 
 | path="" | 
 | workdir="" | 
 |  | 
 | usage() | 
 | { | 
 |     cat <<EOF | 
 | usage: wineshelllink options | 
 |  | 
 | options: | 
 |   --desktop     create a desktop link | 
 |   --menu        create a menu entry | 
 |   --path xx     path to the application | 
 |   --link xx     name of link to create, including path | 
 |   --args xx     command-line arguments for the application | 
 |   --icon xx     icon to display | 
 |   --workdir xx  working directory for the application | 
 |   --descr xx    application description | 
 |  | 
 | EOF | 
 |     exit 2 | 
 | } | 
 |  | 
 | if [ $# -eq 0 ] ; then | 
 |     usage | 
 | fi | 
 |  | 
 | while [ $# -gt 0 ] | 
 | do | 
 |   case "$1" in | 
 |     --desktop) mode="desktop"; shift 1 ;; | 
 |     --menu)    mode="menu"; shift 1 ;; | 
 |     --path)    path="$2"; shift 2 ;; | 
 |     --link)    link="$2"; shift 2 ;; | 
 |     --args)    args="$2"; shift 2 ;; | 
 |     --icon)    icon="$2"; shift 2 ;; | 
 |     --descr)   descr="$2"; shift 2 ;; | 
 |     --workdir) workdir="$2"; shift 2 ;; | 
 |     *) usage ;; | 
 |   esac | 
 | done | 
 |  | 
 | if [ -z "$mode" ] ; then | 
 |     echo "Either --desktop or --menu required" | 
 |     usage | 
 | fi | 
 |  | 
 | if [ -z "$link" ] ; then | 
 |     echo "You must specify a link name with --link" | 
 |     usage | 
 | fi | 
 |  | 
 | kde_entry() | 
 | { | 
 |     xname=`basename "$link"` | 
 |     cat <<EOF | 
 | # KDE Config File | 
 | [KDE Desktop Entry] | 
 | Name=$xname | 
 | Exec=wine '$path' $args | 
 | Type=Application | 
 | Comment=$descr | 
 | EOF | 
 |     [ -z "$workdir" ] || echo "Path=\"$workdir\"" | 
 |     [ -z "$xpmicon" ] || echo "Icon=$xpmicon" | 
 | } | 
 |  | 
 | gnome_entry() | 
 | { | 
 |     xname=`basename "$link"` | 
 |     cat <<EOF | 
 | [Desktop Entry] | 
 | Name=$xname | 
 | Exec=wine "$path" $args | 
 | Type=Application | 
 | Comment=$descr | 
 | EOF | 
 |     [ -z "$workdir" ] || echo "Path=$workdir" | 
 |     [ -z "$xpmicon" ] || echo "Icon=$xpmicon" | 
 | } | 
 |  | 
 | mdk_entry() | 
 | { | 
 |     base=`basename "$link"` | 
 |     section=`dirname "$link"` | 
 |     [ -z "$icon" ] || xicon="icon=\"$xpmicon\"" | 
 |     pathmenu=`echo "$path" | sed 's+\\\\+\\\\\\\\+g'` | 
 |     echo "?package(local.Wine):needs=x11 section=\"/Wine/$section\" title=\"$base\" longtitle=\"$descr\" command=\"wine '$pathmenu' $args\" $xicon" | 
 | } | 
 |  | 
 | # copy the icon file to a specified dir and set xpmicon to the resulting path | 
 | copy_icon() | 
 | { | 
 |   dir="$1" | 
 |   mkdir -p "$dir" | 
 |   mkdir -p "$dir/""`dirname "$link"`" || true | 
 |   if [ -f "$icon" ] | 
 |   then | 
 |     cp "$icon" "$dir/$link.xpm" | 
 |     xpmicon="$dir/$link.xpm" | 
 |   else | 
 |     xpmicon="" | 
 |   fi | 
 | } | 
 |  | 
 | # Debian/Mandrake | 
 |  | 
 | type update-menus > /dev/null 2>&1 | 
 | if [ $? = 0 -a $mode = "menu" ] | 
 | then | 
 |   iconname="`basename "$link"`.xpm" | 
 |   dir="$HOME/.menu/icons" | 
 |   if [ -f "$icon" ] | 
 |   then | 
 |     mkdir -p "$dir" | 
 |     cp "$icon" "$dir/$iconname" | 
 |     xpmicon="$dir/$iconname" | 
 |   else | 
 |     xpmicon="" | 
 |   fi | 
 |   mdk_entry >> "$HOME/.menu/wine" | 
 |   if [ -d "/usr/lib/menu" ] && [ -w "/usr/lib/menu" ] | 
 |   then | 
 |     mdk_entry >> "/usr/lib/menu/wine" | 
 |   fi | 
 |   update-menus > /dev/null 2>&1 | 
 | fi | 
 |  | 
 | # KDE | 
 |  | 
 | if [ -d "$HOME/.kde" ] | 
 | then | 
 |   kdeversion=0 | 
 |   if type kde-config >/dev/null 2>&1 | 
 |   then | 
 |     kdeversion=`kde-config -v | grep KDE: | sed -n "s/^KDE: \([^.]*\)\..*$/\1/p"` | 
 |   fi | 
 |  | 
 |   if [ $kdeversion -ge 2 ] | 
 |   then | 
 |     copy_icon "$HOME/.kde/share/applnk/Wine" | 
 |     if [ $mode = "menu" ] | 
 |     then | 
 |       gnome_entry > "$HOME/.kde/share/applnk/Wine/$link.desktop" | 
 |     elif [ -d "$HOME/Desktop" ] | 
 |     then | 
 |       gnome_entry > "$HOME/Desktop/$link.desktop" | 
 |     fi | 
 |   else | 
 |     copy_icon "$HOME/.kde/share/applnk/Wine" | 
 |     if [ $mode = "menu" ] | 
 |     then | 
 |       kde_entry > "$HOME/.kde/share/applnk/Wine/$link.kdelnk" | 
 |  | 
 |       # KDE 1.x kludge.  Wake up KDE, if we can find kpanel running | 
 |       type kwmcom >/dev/null 2>/dev/null && \ | 
 |         ps u -C kpanel >/dev/null 2>/dev/null && \ | 
 |           kwmcom kpanel:restart | 
 |  | 
 |     elif [ -d "$HOME/Desktop" ] | 
 |     then | 
 |       kde_entry > "$HOME/Desktop/$link.kdelnk" | 
 |       #   KDE 1.x kludge:  wake up KDE, if we can find kfm running... | 
 |       type kfmclient >/dev/null 2>/dev/null && \ | 
 |         ps u -C kfm >/dev/null 2>/dev/null  && \ | 
 |           kfmclient refreshDesktop | 
 |     fi | 
 |   fi | 
 | fi | 
 |  | 
 | if [ -d "$HOME/.kde2" ] | 
 | then | 
 |   copy_icon "$HOME/.kde2/share/applnk/Wine" | 
 |   if [ $mode = "menu" ] | 
 |   then | 
 |     gnome_entry > "$HOME/.kde2/share/applnk/Wine/$link.desktop" | 
 |   else | 
 |     if [ -d "$HOME/Desktop2" ] | 
 |     then | 
 |       gnome_entry > "$HOME/Desktop2/$link.desktop" | 
 |     fi | 
 |     if [ -d "$HOME/Desktop" ] | 
 |     then | 
 |       gnome_entry > "$HOME/Desktop/$link.desktop" | 
 |     fi | 
 |   fi | 
 | fi | 
 |  | 
 | if [ -d "$HOME/.kde3/share/applnk" ] | 
 | then | 
 |   copy_icon "$HOME/.kde3/share/applnk/Wine" | 
 |   if [ $mode = "menu" ] | 
 |   then | 
 |     gnome_entry > "$HOME/.kde3/share/applnk/Wine/$link.desktop" | 
 |   else | 
 |     if [ -d "$HOME/Desktop3" ] | 
 |     then | 
 |       gnome_entry > "$HOME/Desktop3/$link.desktop" | 
 |     fi | 
 |     if [ -d "$HOME/Desktop2" ] | 
 |     then | 
 |       gnome_entry > "$HOME/Desktop2/$link.desktop" | 
 |     fi | 
 |     if [ -d "$HOME/Desktop" ] | 
 |     then | 
 |       gnome_entry > "$HOME/Desktop/$link.desktop" | 
 |     fi | 
 |   fi | 
 | fi | 
 |  | 
 | # Gnome | 
 |  | 
 | if [ -d "$HOME/.gnome" ] | 
 | then | 
 |   copy_icon "$HOME/.gnome/apps/Wine" | 
 |   if [ $mode = "menu" ] | 
 |   then | 
 |     gnome_entry > "$HOME/.gnome/apps/Wine/$link.desktop" | 
 |   elif [ -d "$HOME/.gnome-desktop" ] | 
 |   then | 
 |     gnome_entry > "$HOME/.gnome-desktop/$link.desktop" | 
 |   fi | 
 | fi | 
 |  | 
 | exit 0 |