#!/bin/sh
#
# Create menu/desktop entries for an application
# This is used by the IShellLink interface
#
# Copyright 2000 Alexandre Julliard
#
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
  --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 1
}

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 [ "$mode" = ""  ] ; then
    echo Either --desktop or --menu required
    usage
fi

if [ "$link" = ""  ] ; then
    echo You must specify a link name with --link
    usage
fi

kde_entry()
{
    cat <<EOF
# KDE Config File
[KDE Desktop Entry]
Name=`basename "$link"`
Exec=wine "$path" $args
Type=Application
Comment=$descr
EOF
    [ -z "$workdir" ] || echo "Path=\"$workdir\""
    [ -z "$xpmicon" ] || echo "Icon=$xpmicon"
}

gnome_entry()
{
    cat <<EOF
[Desktop Entry]
Name=`basename "$link"`
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\""
    echo "?package(local.Wine):needs=x11 section=\"Wine/$section\" title=\"$base\" longtitle=\"$descr\" command=\"wine \\\"$path\\\" $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"
  update-menus > /dev/null 2>&1
fi

# KDE

if [ -d "$HOME/.kde" ]
then
  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

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"
  elif [ -d "$HOME/Desktop2" ]
  then
    gnome_entry > "$HOME/Desktop2/$link.desktop"
  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
