]> diplodocus.org Git - nmh/blobdiff - etc/mhn.defaults.sh
Fix invalid pointer arithmetic.
[nmh] / etc / mhn.defaults.sh
index b7cecd51be069686f733d51193e3477d5345c1c8..0253f283d7eeb76c33ff083743b9e0b875601ff2 100755 (executable)
@@ -1,4 +1,4 @@
-#!/bin/sh
+#! /bin/sh
 #
 # mhn.defaults.sh -- create extra profile file for MIME handling
 #
@@ -9,7 +9,7 @@
 if [ -n "$1" ]; then
     SEARCHPATH=$1
 else
-    SEARCHPATH="$PATH:/usr/demo/SOUND"
+    SEARCHPATH="$PATH"
 fi
 
 # If a search program is passed to the script, we
@@ -25,78 +25,82 @@ fi
 TMP=/tmp/nmh_temp.$$
 trap "rm -f $TMP" 0 1 2 3 13 15
 
-
-if [ ! -z "`$SEARCHPROG $SEARCHPATH w3m`" ]; then
-  echo 'mhfixmsg-format-text/html: charset="%{charset}"; '"\
-"'w3m -dump -T text/html "${charset:+-I $charset}" -O utf-8 %F' >> $TMP
-elif [ ! -z "`$SEARCHPROG $SEARCHPATH lynx`" ]; then
-  #### lynx indents with 3 spaces, remove them and any trailing spaces.
-  echo 'mhfixmsg-format-text/html: charset="%{charset}"; '"\
-"'lynx -child -dump -force_html "${charset:+--assume_charset $charset}" %F | '"\
-expand | sed -e 's/^   //' -e 's/  *$//'" >> $TMP
-elif [ ! -z "`$SEARCHPROG $SEARCHPATH elinks`" ]; then
-  echo "mhfixmsg-format-text/html: elinks -dump -force-html -no-numbering \
--eval 'set document.browse.margin_width = 0' %F" >> $TMP
+if [ ! -z `$SEARCHPROG "$SEARCHPATH" par` ]; then
+    #### The widths here correspond to those for the text browsers below.
+    textfmt=' | par 64'
+    replfmt=" | sed 's/^\(.\)/> \1/; s/^$/>/;' | par 64"
+elif [ ! -z `$SEARCHPROG "$SEARCHPATH" fmt` ]; then
+    textfmt=' | fmt'
+    replfmt=" | fmt | sed 's/^\(.\)/> \1/; s/^$/>/;'"
+else
+    textfmt=
+    replfmt=
 fi
+[ ! -z `$SEARCHPROG "$SEARCHPATH" iconv` ]  &&
+    charsetconv=' | iconv -f ${charset:-us-ascii} -t utf-8'"${textfmt}"  ||
+    charsetconv=
 
+cat >>"$TMP" <<'EOF'
+mhstore-store-text: %m%P.txt
+mhstore-store-text/calendar: %m%P.ics
+mhstore-store-text/html: %m%P.html
+mhstore-store-text/richtext: %m%P.rt
+mhstore-store-video/mpeg: %m%P.mpg
+mhstore-store-application/PostScript: %m%P.ps
+EOF
 
-echo "mhstore-store-text: %m%P.txt" >> $TMP
-echo "mhstore-store-text/richtext: %m%P.rt" >> $TMP
-echo "mhstore-store-video/mpeg: %m%P.mpg" >> $TMP
-echo "mhstore-store-application/PostScript: %m%P.ps" >> $TMP
-
-PGM="`$SEARCHPROG $SEARCHPATH xwud`"
+PGM=`$SEARCHPROG "$SEARCHPATH" xwud`
 if [ ! -z "$PGM" ]; then
     XWUD="$PGM" X11DIR="`echo $PGM | awk -F/ '{ for(i=2;i<NF;i++)printf "/%s", $i;}'`"/
 else
     XWUD= X11DIR=
 fi
 
-PGM="`$SEARCHPROG $SEARCHPATH pnmtoxwd`"
+PGM=`$SEARCHPROG "$SEARCHPATH" pnmtoxwd`
 if [ ! -z "$PGM" ]; then
     NETPBM="$PGM" NETPBMDIR="`echo $PGM | awk -F/ '{ for(i=2;i<NF;i++)printf "/%s", $i;}'`"/
 else
     NETPBM= NETPBMDIR=
 fi
 
-PGM="`$SEARCHPROG $SEARCHPATH xv`"
+PGM=`$SEARCHPROG "$SEARCHPATH" xv`
 if [ ! -z "$PGM" ]; then
-    echo "mhshow-show-image: %p$PGM -geometry =-0+0 %f" >> $TMP
+    echo "mhshow-show-image: %l$PGM -geometry =-0+0 %f" >> $TMP
 elif [ ! -z $"NETPBM" -a ! -z "$XWUD" ]; then
-    echo "mhshow-show-image/gif: %p${NETPBMDIR}giftopnm | ${NETPBMDIR}ppmtopgm | ${NETPBMDIR}pgmtopbm | ${NETPBMDIR}pnmtoxwd | $XWUD -geometry =-0+0" >> $TMP
-    echo "mhshow-show-image/x-pnm: %p${NETPBMDIR}pnmtoxwd | $XWUD -geometry =-0+0" >> $TMP
-    echo "mhshow-show-image/x-pgm: %p${NETPBMDIR}pgmtopbm | ${NETPBMDIR}pnmtoxwd | $XWUD -geometry =-0+0" >> $TMP
-    echo "mhshow-show-image/x-ppm: %p${NETPBMDIR}ppmtopgm | ${NETPBMDIR}pgmtopbm | ${NETPBMDIR}pnmtoxwd | $XWUD -geometry =-0+0" >> $TMP
-    echo "mhshow-show-image/x-xwd: %p$XWUD -geometry =-0+0" >> $TMP
+    echo "mhshow-show-image/gif: %l${NETPBMDIR}giftopnm | ${NETPBMDIR}ppmtopgm | ${NETPBMDIR}pgmtopbm | ${NETPBMDIR}pnmtoxwd | $XWUD -geometry =-0+0" >> $TMP
+    echo "mhshow-show-image/x-pnm: %l${NETPBMDIR}pnmtoxwd | $XWUD -geometry =-0+0" >> $TMP
+    echo "mhshow-show-image/x-pgm: %l${NETPBMDIR}pgmtopbm | ${NETPBMDIR}pnmtoxwd | $XWUD -geometry =-0+0" >> $TMP
+    echo "mhshow-show-image/x-ppm: %l${NETPBMDIR}ppmtopgm | ${NETPBMDIR}pgmtopbm | ${NETPBMDIR}pnmtoxwd | $XWUD -geometry =-0+0" >> $TMP
+    echo "mhshow-show-image/x-xwd: %l$XWUD -geometry =-0+0" >> $TMP
 
-    PGM="`$SEARCHPROG $SEARCHPATH djpeg`"
+    PGM=`$SEARCHPROG "$SEARCHPATH" djpeg`
     if [ ! -z "$PGM" ]; then
-       echo "mhshow-show-image/jpeg: %p$PGM -Pg | ${NETPBMDIR}ppmtopgm | ${NETPBMDIR}pgmtopbm | ${NETPBMDIR}pnmtoxwd | $XWUD -geometry =-0+0" >> $TMP
+       echo "mhshow-show-image/jpeg: %l$PGM -Pg | ${NETPBMDIR}ppmtopgm | ${NETPBMDIR}pgmtopbm | ${NETPBMDIR}pnmtoxwd | $XWUD -geometry =-0+0" >> $TMP
     fi
 fi
 
 if [ -f "/dev/audioIU" ]; then
-    PGM="`$SEARCHPROG $SEARCHPATH recorder`"
+    PGM=`$SEARCHPROG "$SEARCHPATH" recorder`
     if [ ! -z "$PGM" ]; then
        echo "mhstore-store-audio/basic: %m%P.au" >> $TMP
         echo "mhbuild-compose-audio/basic: ${AUDIODIR}recorder %f -au -pause > /dev/tty" >> $TMP
-        echo "mhshow-show-audio/basic: %p${AUDIODIR}splayer -au" >> $TMP
+        echo "mhshow-show-audio/basic: %l${AUDIODIR}splayer -au" >> $TMP
     fi
 elif [ -f "/dev/audio" ]; then
-    PGM="`$SEARCHPROG $SEARCHPATH raw2audio`"
+    PGM=`$SEARCHPROG "$SEARCHPATH" raw2audio`
     if [ ! -z "$PGM" ]; then
        AUDIODIR="`echo $PGM | awk -F/ '{ for(i=2;i<NF;i++)printf "/%s", $i;}'`"/
        echo "mhstore-store-audio/basic: | ${AUDIODIR}raw2audio -e ulaw -s 8000 -c 1 > %m%P.au" >> $TMP
         echo "mhstore-store-audio/x-next: %m%P.au" >> $TMP
-       AUDIOTOOL="`$SEARCHPROG $SEARCHPATH audiotool`"
+       AUDIOTOOL=`$SEARCHPROG "$SEARCHPATH" audiotool`
        if [ ! -z "$AUDIOTOOL" ]; then
            echo "mhbuild-compose-audio/basic: $AUDIOTOOL %f && ${AUDIODIR}raw2audio -F < %f" >> $TMP
        else
            echo "mhbuild-compose-audio/basic: trap \"exit 0\" 2 && ${AUDIODIR}record | ${AUDIODIR}raw2audio -F" >> $TMP
        fi
-       echo "mhshow-show-audio/basic: %p${AUDIODIR}raw2audio 2>/dev/null | ${AUDIODIR}play" >> $TMP
+       echo "mhshow-show-audio/basic: %l${AUDIODIR}raw2audio 2>/dev/null | ${AUDIODIR}play" >> $TMP
 
-       PGM="`$SEARCHPROG $SEARCHPATH adpcm_enc`"
+       PGM=`$SEARCHPROG "$SEARCHPATH" adpcm_enc`
        if [ ! -z "$PGM" ]; then
            DIR="`echo $PGM | awk -F/ '{ for(i=2;i<NF;i++)printf "/%s", $i;}'`"/
            if [ ! -z "$AUDIOTOOL" ]; then
@@ -104,44 +108,87 @@ elif [ -f "/dev/audio" ]; then
            else
                echo "mhbuild-compose-audio/x-next: ${AUDIODIR}record | ${DIR}adpcm_enc" >> $TMP
            fi
-           echo "mhshow-show-audio/x-next: %p${DIR}adpcm_dec | ${AUDIODIR}play" >> $TMP
+           echo "mhshow-show-audio/x-next: %l${DIR}adpcm_dec | ${AUDIODIR}play" >> $TMP
        else
            if [ ! -z "$AUDIOTOOL" ]; then
                echo "mhbuild-compose-audio/x-next: $AUDIOTOOL %f" >> $TMP
            else
                echo "mhbuild-compose-audio/x-next: ${AUDIODIR}record" >> $TMP
            fi
-           echo "mhshow-show-audio/x-next: %p${AUDIODIR}play" >> $TMP
+           echo "mhshow-show-audio/x-next: %l${AUDIODIR}play" >> $TMP
        fi
     else
        echo "mhbuild-compose-audio/basic: cat < /dev/audio" >> $TMP
-        echo "mhshow-show-audio/basic: %pcat > /dev/audio" >> $TMP
+        echo "mhshow-show-audio/basic: %lcat > /dev/audio" >> $TMP
     fi
 fi
 
-PGM="`$SEARCHPROG $SEARCHPATH mpeg_play`"
+####
+#### mhbuild-disposition-<type>[/<subtype>] entries are used by the
+#### WhatNow attach for deciding whether the Content-Disposition
+#### should be 'attachment' or 'inline'.  Only those values are
+#### supported.  mhbuild-convert-text/html is defined below.
+####
+cat <<EOF >>${TMP}
+mhbuild-convert-text/calendar: mhical -infile %F -contenttype
+mhbuild-convert-text: charset=%{charset}; iconv -f \${charset:-us-ascii} -t utf-8 %F${replfmt}
+mhbuild-disposition-text/calendar: inline
+mhbuild-disposition-message/rfc822: inline
+EOF
+
+PGM=`$SEARCHPROG "$SEARCHPATH" mpeg_play`
 if [ ! -z "$PGM" ]; then
-       echo "mhshow-show-video/mpeg: %p$PGM %f" >> $TMP
+       echo "mhshow-show-video/mpeg: %l$PGM %f" >> $TMP
 fi
 
-PGM="`$SEARCHPROG $SEARCHPATH okular`"
+PGM=`$SEARCHPROG "$SEARCHPATH" okular`
 if [ ! -z "$PGM" ]; then
-       echo "mhshow-show-application/PostScript: %pokular %F" >> $TMP
+    echo "mhshow-show-application/PostScript: %l$PGM %F" >> $TMP
 else
-    PGM="`$SEARCHPROG $SEARCHPATH evince`"
+    PGM=`$SEARCHPROG "$SEARCHPATH" evince`
     if [ ! -z "$PGM" ]; then
-       echo "mhshow-show-application/PostScript: %pevince %F" >> $TMP
+       echo "mhshow-show-application/PostScript: %l$PGM %F" >> $TMP
     else
-       PGM="`$SEARCHPROG $SEARCHPATH gv`"
+       PGM=`$SEARCHPROG "$SEARCHPATH" gv`
        if [ ! -z "$PGM" ]; then
-           echo "mhshow-show-application/PostScript: %pgv %F" >> $TMP
+           echo "mhshow-show-application/PostScript: %l$PGM %F" >> $TMP
        fi
     fi
 fi
 
-PGM="`$SEARCHPROG $SEARCHPATH ivs_replay`"
+PGM=`$SEARCHPROG "$SEARCHPATH" acroread`
 if [ ! -z "$PGM" ]; then
-       echo "mhshow-show-application/x-ivs: %p$PGM -o %F" >> $TMP
+    echo "mhshow-show-application/pdf: %l$PGM %F" >> $TMP
+else
+    PGM=`$SEARCHPROG "$SEARCHPATH" okular`
+    if [ ! -z "$PGM" ]; then
+       echo "mhshow-show-application/pdf: %l$PGM %F" >> $TMP
+    else
+       PGM=`$SEARCHPROG "$SEARCHPATH" evince`
+       if [ ! -z "$PGM" ]; then
+           echo "mhshow-show-application/pdf: %l$PGM %F" >> $TMP
+        else
+           PGM=`$SEARCHPROG "$SEARCHPATH" xpdf`
+           if [ ! -z "$PGM" ]; then
+               echo "mhshow-show-application/pdf: %l$PGM %F" >> $TMP
+            else
+               PGM=`$SEARCHPROG "$SEARCHPATH" gv`
+               if [ ! -z "$PGM" ]; then
+                   echo "mhshow-show-application/pdf: %l$PGM %F" >> $TMP
+               fi
+           fi
+       fi
+    fi
+fi
+
+echo "mhshow-show-text/calendar: mhical -infile %F" >> $TMP
+echo "mhshow-show-application/ics: mhical -infile %F" >> $TMP
+echo "mhfixmsg-format-text/calendar: mhical -infile %F" >> $TMP
+echo "mhfixmsg-format-application/ics: mhical -infile %F" >> $TMP
+
+PGM=`$SEARCHPROG "$SEARCHPATH" ivs_replay`
+if [ ! -z "$PGM" ]; then
+       echo "mhshow-show-application/x-ivs: %l$PGM -o %F" >> $TMP
 fi
 
 # The application/vnd.openxmlformats-officedocument.wordprocessingml.document
@@ -217,6 +264,7 @@ mhshow-suffix-image/jpeg: .jpg
 mhshow-suffix-image/png: .png
 mhshow-suffix-image/tiff: .tif
 mhshow-suffix-image/tiff: .tiff
+mhshow-suffix-text: .txt
 mhshow-suffix-text/calendar: .ics
 mhshow-suffix-text/css: .css
 mhshow-suffix-text/html: .html
@@ -237,56 +285,93 @@ EOF
 # but only once I've added a new %-escape that makes more permanent temp files,
 # so netscape -remote can be used (without -remote you get a complaint dialog
 # that another netscape is already running and certain things can't be done).
-PGM="`$SEARCHPROG $SEARCHPATH lynx`"
+PGM=`$SEARCHPROG "$SEARCHPATH" w3m`
 if [ ! -z "$PGM" ]; then
-       echo 'mhshow-show-text/html: charset="%{charset}"; '"\
-%p$PGM"' -force-html "${charset:+--assume_charset $charset}" %F' >> $TMP
+    echo 'mhshow-show-text/html: charset=%{charset}; '"\
+%l$PGM"' -dump ${charset:+-I} ${charset:+"$charset"} -T text/html %F' >> $TMP
+    echo 'mhfixmsg-format-text/html: charset=%{charset}; '"\
+$PGM "'-dump ${charset:+-I} ${charset:+"$charset"} -O utf-8 -T text/html %F' \
+         >> $TMP
+    echo 'mhbuild-convert-text/html: charset=%{charset}; '"\
+$PGM "'-dump ${charset:+-I} ${charset:+"$charset"} -O utf-8 -T text/html %F '"\
+${replfmt}" >> $TMP
 else
-  PGM="`$SEARCHPROG $SEARCHPATH w3m`"
-  if [ ! -z "$PGM" ]; then
-       echo 'mhshow-show-text/html: charset="%{charset}"; '"\
-%p$PGM"' "${charset:+-I $charset}" -T text/html %F' >> $TMP
-  fi
+    PGM=`$SEARCHPROG "$SEARCHPATH" lynx`
+    if [ ! -z "$PGM" ]; then
+       echo 'mhshow-show-text/html: charset=%{charset}; '"\
+%l$PGM"' -child -dump -force-html ${charset:+--assume_charset} ${charset:+"$charset"} %F' >> $TMP
+        #### lynx indents with 3 spaces, remove them and any trailing spaces.
+        echo 'mhfixmsg-format-text/html: charset=%{charset}; '"\
+$PGM "'-child -dump -force_html ${charset:+--assume_charset} ${charset:+"$charset"} %F | '"\
+expand | sed -e 's/^   //' -e 's/  *$//'" >> $TMP
+        echo 'mhbuild-convert-text/html: charset=%{charset}; '"\
+$PGM "'-child -dump -force_html ${charset:+--assume_charset} ${charset:+"$charset"} '"\
+%F${replfmt}" >> $TMP
+    else
+        PGM=`$SEARCHPROG "$SEARCHPATH" elinks`
+        if [ ! -z "$PGM" ]; then
+            echo "mhshow-show-text/html: %l$PGM -dump -force-html \
+-eval 'set document.browse.margin_width = 0' %F" >> $TMP
+            echo "mhfixmsg-format-text/html: $PGM -dump -force-html \
+-no-numbering -eval 'set document.browse.margin_width = 0' %F" >> $TMP
+            echo "mhbuild-convert-text/html: $PGM -dump -force-html \
+-no-numbering -eval 'set document.browse.margin_width = 0' %F${replfmt}" >> $TMP
+        else
+            echo 'mhbuild-convert-text/html: cat %F' >> $TMP
+        fi
+    fi
 fi
 
-PGM="`$SEARCHPROG $SEARCHPATH richtext`"
+PGM=`$SEARCHPROG "$SEARCHPATH" richtext`
 if [ ! -z "$PGM" ]; then
-       echo "mhshow-show-text/richtext: %p$PGM -p %F" >> $TMP
+       echo "mhshow-show-text/richtext: %l$PGM -p %F" >> $TMP
 else
-    PGM="`$SEARCHPROG $SEARCHPATH rt2raw`"
+    PGM=`$SEARCHPROG "$SEARCHPATH" rt2raw`
     if [ ! -z "$PGM" ]; then
-       echo "mhshow-show-text/richtext: %p$PGM < %f | fmt -78 | more" >> $TMP
+       echo "mhshow-show-text/richtext: %l$PGM < %f | fmt -78 | more" >> $TMP
     fi
 fi
 
 # staroffice to read .doc files
-PGM="`$SEARCHPROG $SEARCHPATH soffice`"
+PGM=`$SEARCHPROG "$SEARCHPATH" soffice`
 if [ ! -z "$PGM" ]; then
-       echo "mhshow-show-application/msword: %psoffice %F" >> $TMP
-       echo "mhshow-suffix-application/msword: .doc" >> $TMP
+       echo "mhshow-show-application/msword: %l$PGM %F" >> $TMP
 fi
 
-# output a sorted version of the file
-sort < $TMP
+# This entry is used to retrieve external-body types that use a "url"
+# access-type.
+case "`uname`" in
+  FreeBSD)
+       echo "nmh-access-url: fetch -o -" >> $TMP
+       ;;
+  *)
+       PGM=`$SEARCHPROG "$SEARCHPATH" curl`
+       if [ ! -z "$PGM" ]; then
+               echo "nmh-access-url: $PGM -L" >> $TMP
+       fi
+       ;;
+esac
+
+# Output a sorted version of the file, along with some comments in
+# appropriate places.
+echo '#: This file was generated by mhn.defaults.sh.'
+sort < $TMP | \
+    sed -e 's|^\(mhshow-show-application/ics:.*\)|#: might need -notextonly -noinlineonly or -part/-type to show application/ics parts\n\1|'
 
 exit 0
 
-: not until we get a "safe" postscript environment...
 
-PGM="`$SEARCHPROG $SEARCHPATH pageview`"
-if [ "$DISPLAY" = "unix:0.0" -a ! -z "$PGM" ]; then
-    echo "mhshow-show-application/PostScript: %p$PGM -" >> $TMP
-else
-    PGM="`$SEARCHPROG $SEARCHPATH gs`"
-    if [ ! -z "$PGM" ]; then
-       echo "mhshow-show-application/PostScript: %p$PGM -- %F" >> $TMP
-       echo "mhshow-suffix-application/PostScript: .ps" >> $TMP
-    fi
-fi
+###############################################################################
+###############################################################################
+####
+#### Note the exit 0 above; everything below is unused.
+####
+###############################################################################
+###############################################################################
 
 : have to experiment more with this
 
-PGM="`$SEARCHPROG $SEARCHPATH ivs_record`"
+PGM=`$SEARCHPROG "$SEARCHPATH" ivs_record`
 if [ ! -z "$PGM" ]; then
        echo "mhbuild-compose-application/x-ivs: $PGM -u localhost %F" >> $TMP
 fi