From 5259022498241e9d8e85194c29e545145322a026 Mon Sep 17 00:00:00 2001 From: Jon Trulson Date: Wed, 18 Jul 2018 13:45:49 -0600 Subject: [PATCH] Add a new script, dtapp, used to locate and run various helper programs This script is located in /usr/dt/bin/dtapp, and is then symlinked to various helpers that can be used in DT actions to run programs. The various helpers currently installed are: dtapp_vimage - view an image file, override with DTAPP_VIMAGE. Defaults to xv, display, and gimp, in that order. dtapp_vpdf - view a PDF file, override with DTAPP_VPDF. Defaults to okular, xpdf dtapp_vps - view a postscript file, override with DTAPP_VPS. Defaults to mgv, gv dtapp_vvideo - view a video file, override with DTAPP_VVIDEO. Defaults to vlc, ffplay. When a request is made to view one of these files, the list of viewers will be tried, in order, until one is found. If none are found, an error message will be displayed. Add overrides to your ~/.dtprofile file. We can add more dtapp commands and defaults for them as needed. This is in preparation for integrating Antonis Tsolomitis' extended actions and icon files, coming up in future commits. --- cde/databases/CDE-RUN.udb | 39 +++++++ cde/programs/Imakefile | 2 +- cde/programs/dtapp/Imakefile | 13 +++ cde/programs/dtapp/dtapp.src | 204 +++++++++++++++++++++++++++++++++++ 4 files changed, 257 insertions(+), 1 deletion(-) create mode 100644 cde/programs/dtapp/Imakefile create mode 100755 cde/programs/dtapp/dtapp.src diff --git a/cde/databases/CDE-RUN.udb b/cde/databases/CDE-RUN.udb index ffb43d8e..73aae620 100644 --- a/cde/databases/CDE-RUN.udb +++ b/cde/databases/CDE-RUN.udb @@ -1750,3 +1750,42 @@ programs/localized/ja_JP.dt-eucJP/dtsr/jpn.knj { default install_target = /usr/dt/infolib/etc/ja_JP.EUC-JP/dtsr/jpn.knj } +# +#>>----------------------------- +# +# dtapp entries +# +#<<----------------------------- +# +# +programs/dtapp/dtapp +{ default + install_target = /usr/dt/bin/dtapp + mode = 0555 +} +# Now the dtapp symlinks +./dtapp +{ default + install_target = /usr/dt/bin/dtapp_vimage + type = sym_link +} +./dtapp +{ default + install_target = /usr/dt/bin/dtapp_vweb + type = sym_link +} +./dtapp +{ default + install_target = /usr/dt/bin/dtapp_vpdf + type = sym_link +} +./dtapp +{ default + install_target = /usr/dt/bin/dtapp_vps + type = sym_link +} +./dtapp +{ default + install_target = /usr/dt/bin/dtapp_vvideo + type = sym_link +} diff --git a/cde/programs/Imakefile b/cde/programs/Imakefile index f85b6ff1..f0506c97 100644 --- a/cde/programs/Imakefile +++ b/cde/programs/Imakefile @@ -5,7 +5,7 @@ XCOMM $XConsortium: Imakefile /main/17 1996/10/06 17:13:20 rws $ #if UseNSGMLS NSGMLSDIR = nsgmls #endif -EXTRADIRS = types localized tttypes $(NSGMLSDIR) util +EXTRADIRS = types localized tttypes $(NSGMLSDIR) util dtapp XCOMM some of these cannot be built on linux yet. XCOMM dtinfo diff --git a/cde/programs/dtapp/Imakefile b/cde/programs/dtapp/Imakefile new file mode 100644 index 00000000..571b9dbf --- /dev/null +++ b/cde/programs/dtapp/Imakefile @@ -0,0 +1,13 @@ +XCOMM make dtapp fro dtapp.src +#define PassCDebugFlags + +AllTarget(dtapp) + +LOCAL_CPP_DEFINES = -DCDE_INSTALLATION_TOP=$(CDE_INSTALLATION_TOP) \ + -DCDE_CONFIGURATION_TOP=$(CDE_CONFIGURATION_TOP) \ + -DCDE_LOGFILES_TOP=$(CDE_LOGFILES_TOP) + +CppScriptTarget(dtapp,dtapp.src,$(LOCAL_CPP_DEFINES),) + +depend:: + diff --git a/cde/programs/dtapp/dtapp.src b/cde/programs/dtapp/dtapp.src new file mode 100755 index 00000000..02a94e91 --- /dev/null +++ b/cde/programs/dtapp/dtapp.src @@ -0,0 +1,204 @@ +XCOMM!/bin/ksh +XCOMM +XCOMM dtapp - provide an interface for some useful applications. +XCOMM +XCOMM ############################################################# +XCOMM #set -x # uncomment for debugging +XCOMM ############################################################### +XCOMM Init + +DTAPP="dtapp" # Identity crisis +APPNAME="$(basename $0)" # the app to locate/run + +XCOMM apps to look for, given an action (based on APPNAME - see MAIN) + +XCOMM image viewing +if [ -z "$DTAPP_VIMAGE" ] +then + VIMAGE="xv display gimp" +else + VIMAGE="$DTAPP_VIMAGE" +fi + +XCOMM video viewing +if [ -z "$DTAPP_VVIDEO" ] +then + VVIDEO="mplayer vlc ffplay" +else + VVIDEO="$DTAPP_VVIDEO" +fi + +XCOMM web (html) viewing +if [ -z "$DTAPP_VWEB" ] +then + VWEB="firefox chrome chromium-browser lynx" +else + VWEB="$DTAPP_VWEB" +fi + +XCOMM postscript viewing +if [ -z "$DTAPP_VPS" ] +then + VPS="gv" +else + VPS="$DTAPP_VPS" +fi + +XCOMM PDF viewing +if [ -z "$DTAPP_VPDF" ] +then + VPDF="okular xpdf" +else + VPDF="$DTAPP_VPDF" +fi + +XCOMM ############################################################## +XCOMM ## Utility Functions + +XCOMM ## Find the path of a program +FindProg() +{ + # FindProg "program" + # - returns full path, or "" + + whence $1 + + return 0 +} + +XCOMM ## Show an error message +ErrorMsg() +{ + # ErrorMsg "Title "Message" ["OK"] + # use dterror.ds to display it... + + if [ -z "$3" ] + then # default to 'OK' + OKM="OK" + else + OKM="$3" + fi + + CDE_INSTALLATION_TOP/bin/dterror.ds "$2" "$1" "$OKM" + + return 0 +} + +XCOMM ## do a simple command +DoSimpleCmd() +{ + # DoSimpleCmd "commands" args + + didone=0 + cmds="$1" + shift + args="$*" + + for i in $cmds + do + thecmd="$(FindProg $i)" + + if [ ! -z "$thecmd" ] + then # it's there + $thecmd $* + didone=1 + break + fi + done + + if [ $didone -eq 0 ] + then # couldn't find a viewer + ErrorMsg "Helper not found" \ + "${DTAPP}: Could not find any of the following\ncommands for this file type:\n\n$cmds" + fi + + return 0 +} + + +XCOMM ############################################################### +XCOMM ### Actions + +XCOMM ## Web browsing +DoWeb() +{ + # DoWeb [[arg] ...] + + didone=0 + url="$1" + + for i in $VWEB + do + thecmd="$(FindProg $i)" + + if [ ! -z "$thecmd" ] + then # it's there + + # We'll do special things for lynx, + # else we'll just call whatever is available, and + # hope it's X aware... + + case $i in + lynx) + # start a dtterm + CDE_INSTALLATION_TOP/bin/dtterm -e $thecmd $url + didone=1 + ;; + *) + # any others + $thecmd $url + didone=1 + ;; + esac + + if [ $didone -eq 1 ] + then + break + fi + fi + done + + if [ $didone -eq 0 ] + then # couldn't find a viewer + ErrorMsg "Helper not found" \ + "${DTAPP}: Could not find any of the following\nweb browsers:\n\n$VWEB" + fi + + + return 0 +} + +XCOMM ################################################################## +XCOMM ## MAIN + +XCOMM # We'll just look at our args and decide what to do... + +XCOMM # Commands we'll recognize + +COMMANDS="dtapp_vimage dtapp_vweb dtapp_vpdf dtapp_vps dtapp_vvideo" + +case $APPNAME in + dtapp_vimage) + DoSimpleCmd "$VIMAGE" $* + ;; + dtapp_vweb) + DoWeb $* + ;; + dtapp_vpdf) + DoSimpleCmd "$VPDF" $* + ;; + dtapp_vps) + DoSimpleCmd "$VPS" $* + ;; + dtapp_vvideo) + DoSimpleCmd "$VVIDEO" $* + ;; + *) + # Unknown + ErrorMsg "${DTAPP}: Unknown Helper Application" \ + "\"$APPNAME\" is not a recognized Helper Application. \nKnown Helper Applications are:\n\n$COMMANDS" + ;; +esac + +XCOMM # Fini +exit 0 -- 2.25.1