summaryrefslogtreecommitdiff
path: root/miralib/menudriver.sh
diff options
context:
space:
mode:
Diffstat (limited to 'miralib/menudriver.sh')
-rwxr-xr-xmiralib/menudriver.sh102
1 files changed, 102 insertions, 0 deletions
diff --git a/miralib/menudriver.sh b/miralib/menudriver.sh
new file mode 100755
index 0000000..81d4362
--- /dev/null
+++ b/miralib/menudriver.sh
@@ -0,0 +1,102 @@
+#! /bin/sh
+# menu driver - Copyright Research Software Ltd 1985, 2006
+# this version modified to ignore execute permissions of files
+
+# see below for explanation of these variables, which we
+# set to defaults if not present in the user's environment
+
+test "$MENUVIEWER" || MENUVIEWER=cat #ALTERNATIVE: more
+if test ! "$VIEWER"
+then
+# choose one of these by removing the '#' in column one
+ VIEWER='less -EX'; RETURNTOMENU=NO
+# VIEWER=less, RETURNTOMENU=YES
+# VIEWER='more -d'; RETURNTOMENU=NO
+fi
+
+if test -z "`echo -n`" #use flag -n to suppress newline, if working
+then sansnl='-n'
+fi
+
+cd "$1"
+top="`pwd`"
+while test -f contents
+do
+ if test '' = "$n"
+ then echo  #clear
+ test ."$invalid" = . || echo invalid option "$invalid"
+ invalid=""
+ $MENUVIEWER contents;
+ echo $sansnl ::please type selection number \(or q to quit\):
+ read n
+ fi
+ if test '.' = "$n" -a "$last"
+ then n=$last
+ elif test '+' = "$n" -a "$last" -a "$last" != .
+ then n=`expr $last + 1`
+ elif test '-' = "$n" -a "$last" -a "$last" != .
+ then n=`expr $last - 1`
+ fi
+ if test '' != "$n"
+ then if test -d "$n"
+ then if test -f "$n/contents"
+ then cd "$n"; oldlasts=$n:$oldlasts; last=".";
+ else invalid="$n"; fi
+ n=""
+ elif test -f "$n"
+ then if test '99' = "$n" #special case, 99 is an executable
+ then echo ; "./$n"
+ else echo  #clear
+ $VIEWER "$n"
+ if test "$RETURNTOMENU" = YES
+ then last=$n; n=""; continue #next iteration of while-loop
+ fi
+ fi
+ echo $sansnl ::next selection \(return to go back to menu, q to quit\):
+ last=$n; read n
+ elif test ."$n" = .q -o ."$n" = ./q
+ then exit
+ elif test '???' = "$n" # ??? interrogates display settings
+ then echo " MENUVIEWER='$MENUVIEWER'"
+ echo " VIEWER='$VIEWER', RETURNTOMENU='$RETURNTOMENU'"
+ echo these can be changed by setting environment variables \
+of the same names
+ n=""
+ echo $sansnl '[Hit return to continue]'
+ read lose
+ else case $n in
+ !*) if test ".$n" = '.!!' -o ".$n" = '.!'
+ then if test "$lastbang" = ''
+ then invalid="$n"; n=""; continue
+ else echo !"$lastbang"
+ fi
+ else lastbang=`expr "$n" : '!\(.*\)'`
+ fi
+ $lastbang
+ echo $sansnl '[Hit return to continue]'
+ n=""
+ read lose ;;
+ *) invalid="$n"; n="" ;;
+ esac
+ fi
+ else test "$oldlasts" || exit #we are at the root of the tree
+ cd ..
+ last=`expr $oldlasts : '\([^:]*\)'`
+ oldlasts=`expr $oldlasts : '[^:]*:\(.*\)'`
+ fi
+done
+exit
+# Oct 2003 modified for Peter Bartke to overcome problem on UWIN
+# no test -x, instead all files displayed except 99 which is executed
+# May 2006 use echo $sansnl because echo -n not portable
+
+# Explanation of variables
+#
+# MENUVIEWER is the program used to display contents pages
+#
+# VIEWER is the program used to display individual sections
+#
+# RETURNTOMENU=YES prevents another prompt being given after displaying
+# each section, causing instead an immediate return to contents page. It
+# should be `YES' if VIEWER is a program that pauses for input at end of
+# file, `NO' if VIEWER is a program that quits silently at end of file.