#! /bin/bash
#
# The System Manager
# An Administration Tool For UNIX
#
# Copyright (c) 1994 Stuart Herbert
# Released under the GNU GPL v2
#
# Bugs/comments/contributions to S.Herbert@Sheffield.ac.uk

# $1 = Menu Name
# $2 = Grep Parameter
# $3 = Menu Depth

function SpodThroughModules()
{
  local MenuLine
  local SpodLevel
  local x
  
  SpodLevel=`expr $3 + 1`
  
  if [ -s $1 ]; then
    rm -f $1
  fi
  
  if [ -f "AA" ]; then
    rm -f AA
  fi
  
  ln -s $bin/AuthorInfo AA
  
  for x in * ; do
    if [ -d $x ]; then
      MenuLine="`./$x/README.module --SysmanInstall | grep "$2" `"
    elif [ -x $x -a "$x" != "README.module" ]; then
      MenuLine="`./$x --SysmanInstall | grep "$2" `"
    else
      MenuLine=""
    fi
    if [ -n "$MenuLine" ]; then
      Option="`echo $MenuLine | cut -d : -f 3`"
      Text="`echo $MenuLine | cut -d : -f 4`"
      echo "\"$Option\" \"$Text\" \\" >> $SysmanFile2
      echo "if [ \"\$MenuLine\" = \"$Option\" ]; then" >> $SysmanFile3
      if [ -d $x ]; then
        echo "  cd $x" >> $SysmanFile3
      else
        echo "  ./$x" >> $SysmanFile3
      fi
      echo "fi" >> $SysmanFile3
    fi
  done
  
  if [ $SpodLevel -eq 1 ]; then
    echo "\" DONE \" \" Exit The System Manager \" \\" >> $SysmanFile2
    echo "if [ \"\$MenuLine\" = \" DONE \" ]; then" >> $SysmanFile3
    echo "  break" >> $SysmanFile3
    echo "fi" >> $SysmanFile3
  else
    echo "\" END \" \" Return To Previous Menu \" \\" >> $SysmanFile2
    echo "if [ \"\$MenuLine\" = \" END \" ]; then" >> $SysmanFile3
    echo "  cd .." >> $SysmanFile3
    echo "fi" >> $SysmanFile3
  fi
  
  if [ -s $SysmanFile2 ]; then
    MenuSize="`wc $SysmanFile2 | tr -s "\040" | cut -d " " -f 2`"
    DialogSize=`expr $MenuSize + 7`   
    if [ $DialogSize -gt 20 ]; then
      DialogSize=20
    fi
    echo "Dialog --menu \"Please select an option.\" $DialogSize 71 $MenuSize \\" > $SysmanFile1
    cat $SysmanFile2 >> $SysmanFile1
    echo "2> \$SysmanFile1" >> $SysmanFile1
    echo "if [ -s \$SysmanFile1 ]; then" >> $SysmanFile1
    echo "  MenuLine=\"\`cat \$SysmanFile1\`\" " >> $SysmanFile1
    echo "else" >> $SysmanFile1
    echo "  break" >> $SysmanFile1
    echo "fi" >> $SysmanFile1
    cat $SysmanFile3 >> $SysmanFile1
    cp -f $SysmanFile1 $1
    rm -f $SysmanFile1 $SysmanFile2 $SysmanFile3
  fi
  
  for x in * ; do
    if [ -d $x ]; then
      cd $x
      SpodThroughModules "$1" "$2" "$SpodLevel"
      cd ..
    fi
  done
}

function main()
{
  pushd . > /dev/null
  cd /var/adm/sysman/modules
  InfoBox "Rebuilding menus ... please wait"
  SpodThroughModules "Root.menu" "[Yy] : [YyNn]" 0
  SpodThroughModules "User.menu" "[NnYy] : [Yy]" 0
  popd > /dev/null
}

# main code
if [ -n "$1" ]; then
  case "$1" in
    --SysmanInstall)
      echo "Y : Y : UPDATE : Update The System Manager :$0"
      exit
      ;;
    --SysmanAuthor)
      echo "UPDATE : Rebuild The System Manager's Menus"
      echo "Copyright (c) 1994 Stuart Herbert"
      exit
      ;;
  esac
else
  main
fi

# clean up here
for x in $SysmanFile1 $SysmanFile2 $SysmanFile3 ; do
  if [ -f $x ]; then rm -f $x ; fi
done

# that's it, folks
