#! /bin/sh #---------------------------------------------------------------------------- # master-diff-config - master file for config file camparison # # Copyright (c) 2001-2003 Ansgar Püster # # Creation: 24.12.2003 ap # Last Update: $Id$ # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. #---------------------------------------------------------------------------- header() { header_$type } header_cd() { clrhome colecho "Show difference between current and default configuration" gn echo "line 1: $l_source line 2: $r_source" } header_cb() { clrhome colecho "Show difference between current and backup configuration" gn echo "line 1: $l_source line 2: $r_source" echo } header_db() { clrhome colecho "Show difference between default and a backup configuration" gn echo "line 1: $l_source line 2: $r_source" echo } header_bb() { clrhome colecho "Show difference between two backup configurations" gn echo "line 1: $l_source line 2: $r_source" echo } footer() { echo echo /var/install/bin/anykey } gotoyx () { echo -e "\033[$1;$2H\c"; } echoyx () { echo -e "\033[$1;$2H\c"; shift; shift; echo -e "$*\c"; } strip_file() { in=$1 out=$2 cat ${in} | \ sed 's|^[[:blank:]]*||' | \ sed 's|[[:blank:]]*$||' | \ sed 's| |~|g' | \ grep '^[A-Z]' | \ sed 's|=| |' | \ sed "s|^\([^']*'\)\([^']*'\)\(.*\)|\1\2|"> ${out} chmod og-rw $out } echo_x() { val="$1 " echo -e "${val:0:max_len}\c" } get_max_len() { max_len=0 while read var val do [ ${#var} -gt $max_len ] && max_len=${#var} done < $left while read var val do [ ${#var} -gt $max_len ] && max_len=${#var} done < $right max_len=$(expr $max_len + 2) } file_differ() { if [ "$diff_sorted" = 'true' ]; then sort < $left > $left_sort sort < $right > $right_sort chmod og-rw $left_sort $right_sort diff $left_sort $right_sort >/dev/null 2>&1 rc=$? rm -f $left_sort $right_sort return $rc else diff $left $right >/dev/null 2>&1 rc=$? return $rc fi } clean() { rm -f $right rm -f $left rm -f $right_sort rm -f $left_sort rm -f $diff_file } show_detail() { get_max_len header row=4 gotoyx $row 1 diff -y $left $right > $diff_file chmod og-rw $diff_file while read line do set -- $line v1="$1" v2="$2" v3="$3" v4="$4" v5="$5" case $# in 3) if [ "$v1" = ">" ]; then echo_x $v2 echo "1: - undefined -" echo_x "" echo '2: '$v3 | sed 's|~| |g' row=$(expr $row + 2) else if [ "$v3" = "<" ]; then echo_x $v1 echo '1: '$v2 | sed 's|~| |g' echo_x "" echo "2: - undefined -" row=$(expr $row + 2) else echo "Error(3): $line" row=$(expr $row + 1) fi fi;; 4) if [ "$v2" != "$v4" ]; then echo_x $v1 echo '1: '$v2 | sed 's|~| |g' echo_x "" echo '2: '$v5 | sed 's|~| |g' row=$(expr $row + 2) fi;; 5) case $v3 in \|) echo_x $v1 echo '1: '$v2 | sed 's|~| |g' echo_x "" echo '2: '$v5 | sed 's|~| |g' row=$(expr $row + 2) ;; *) echo "Error(5): $line" row=$(expr $row + 1) ;; esac;; *) echo "Error($#): $line" row=$(expr $row + 1) ;; esac if [ $row -gt 21 ]; then echo "Enter return to continue, q to quit:" read answer