diff options
Diffstat (limited to 'miralib/menudriver.csh')
-rwxr-xr-x | miralib/menudriver.csh | 104 |
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. |