summaryrefslogtreecommitdiff
path: root/miralib/menudriver.csh
diff options
context:
space:
mode:
Diffstat (limited to 'miralib/menudriver.csh')
-rwxr-xr-xmiralib/menudriver.csh104
1 files changed, 104 insertions, 0 deletions
diff --git a/miralib/menudriver.csh b/miralib/menudriver.csh
new file mode 100755
index 0000000..2aa89e7
--- /dev/null
+++ b/miralib/menudriver.csh
@@ -0,0 +1,104 @@
+#!/bin/csh -f
+# 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
+
+if(! $?MENUVIEWER) set MENUVIEWER = cat #ALTERNATIVE: more
+if(! $?VIEWER) then
+# choose one of these by removing the '#' in column one
+ set VIEWER = 'less -EX' RETURNTOMENU = NO
+# set VIEWER = less RETURNTOMENU = YES
+# set VIEWER = 'more -d' RETURNTOMENU = NO
+endif
+
+set sansnl n invalid last oldlasts noglob
+set histchars = '@^' #neutralize '!'
+
+if("`echo -n`" == '') then #use flag -n to suppress newline, if working
+set sansnl = '-n'
+endif
+
+if("$1" != '') cd "$1"
+set top = "`pwd`"
+while( -f contents )
+ if("$n" == '') then
+ clear
+ if("$invalid" != '') echo invalid option "$invalid"
+ set invalid = ''
+ $MENUVIEWER contents;
+ echo $sansnl ::please type selection number \(or q to quit\):
+ set line = "$<"
+ set n = `expr " $line" : ' *\([^ ]*\)'`
+ endif
+ if("$n" == '.' && "$last" != '') then
+ set n = $last;
+ else if("$n" == '+' && "$last" != '' && "$last" != '.') then
+ set n = `expr $last + 1`
+ else if("$n" == '-' && "$last" != '' && "$last" != '.') then
+ set n = `expr $last - 1`
+ endif
+ if("$n" != '') then
+ if(-d "$n") then
+ if(-f "$n/contents") then
+ cd "$n"; set oldlasts = "$n,$oldlasts" last = "."
+ else set invalid = "$n"
+ endif
+ set n = ''
+ else if(-f "$n") then
+ if("$n" == '99') then #special case, 99 is an executable
+ clear; "./$n"
+ else clear;
+ $VIEWER "$n"
+ if("$RETURNTOMENU" == 'YES') then
+ set last = $n n = ''
+ continue #next iteration of while-loop
+ endif
+ endif
+ echo $sansnl ::next selection \(return to go back to menu, q to quit\):
+ set last = $n line = "$<"
+ set n = `expr " $line" : ' *\([^ ]*\)'`
+ else if("$n" == 'q' || "$n" == '/q') then
+ exit
+ else if("$n" == '???') then # ??? interrogates display settings
+ echo " MENUVIEWER='$MENUVIEWER'"
+ echo " VIEWER='$VIEWER', RETURNTOMENU='$RETURNTOMENU'"
+ echo these can be changed by setting environment variables \
+of the same names
+ set n = ''
+ echo $sansnl '[Hit return to continue]'
+ set lose = "$<"
+ else if( "$n" =~ !* ) then
+ set line = `expr "$line" : ' *\(.*\)'`
+ set line = `expr "$line" : '\(.*[^ ]\) *'`
+ if( ".$line" == '.!!' || ".$line" == '.!' ) then
+ if(! $?lastbang) then
+ set invalid = "$n" n = ''; continue
+ else echo !"$lastbang"
+ endif
+ else set lastbang = `expr "$line" : '!\(.*\)'`
+ endif
+ $lastbang
+ echo $sansnl '[Hit return to continue]'
+ set n = ''
+ set lose = "$<"
+ else set invalid = "$n" n = ''
+ endif
+ else if("$oldlasts" == '') exit #we are at the root of the tree
+ cd ..
+ set last = `expr $oldlasts : '\([^,]*\)'`
+ set oldlasts = `expr $oldlasts : '[^,]*,\(.*\)'`
+ endif
+end #of while-loop
+exit
+# 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.