1 #!/bin/ksh
   2 #
   3 # CDDL HEADER START
   4 #
   5 # The contents of this file are subject to the terms of the
   6 # Common Development and Distribution License, Version 1.0 only
   7 # (the "License").  You may not use this file except in compliance
   8 # with the License.
   9 #
  10 # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
  11 # or http://www.opensolaris.org/os/licensing.
  12 # See the License for the specific language governing permissions
  13 # and limitations under the License.
  14 #
  15 # When distributing Covered Code, include this CDDL HEADER in each
  16 # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  17 # If applicable, add the following below this CDDL HEADER, with the
  18 # fields enclosed by brackets "[]" replaced with your own identifying
  19 # information: Portions Copyright [yyyy] [name of copyright owner]
  20 #
  21 # CDDL HEADER END
  22 #
  23 #
  24 # Copyright 1993-2003 Sun Microsystems, Inc.  All rights reserved.
  25 # Use is subject to license terms.
  26 # 
  27 
  28 opts=""
  29 while getopts guplmsLv arg
  30 do
  31         if [ "$arg" = "?" ]; then
  32                 exit 1
  33         fi
  34         opts="$opts -$arg"
  35 done
  36 
  37 shift $(($OPTIND - 1))
  38 
  39 if [ $# -le 3 ]; then
  40         echo "$0: at least 3 arguments required." >&2
  41         exit 1
  42 fi
  43 
  44 old="$1"; shift
  45 new="$1"; shift
  46 differ="$1"; shift
  47 
  48 errlog=/tmp/protocmp.err.$$
  49 
  50 protocmp $opts "$@" 2>$errlog |
  51         /usr/xpg4/bin/awk -v old="$old" -v new="$new" -v differ="$differ" '
  52         /^\**$/ {
  53                 next;
  54         }
  55         /^\* Entries/ {
  56                 category++;
  57                 next;
  58         }
  59         /^\* filea ==/ {
  60                 filea = $NF;
  61                 next;
  62         }
  63         /^\* fileb ==/ {
  64                 fileb = $NF;
  65                 next;
  66         }
  67         {
  68                 buf[category, ++line[category]] = $0
  69         }
  70         END {
  71                 if (line[1] > 2) {
  72                         printf("\n%s\n\n", old);
  73                         for (i = 1; i <= line[1]; i++) {
  74                                 print buf[1, i];
  75                         }
  76                 }
  77                 if (line[2] > 2) {
  78                         printf("\n%s\n\n", new);
  79                         for (i = 1; i <= line[2]; i++) {
  80                                 print buf[2, i];
  81                         }
  82                 }
  83                 if (line[3] > 2) {
  84                         printf("\n%s\n\n", differ);
  85                         for (i = 1; i <= line[3]; i++) {
  86                                 print buf[3, i];
  87                         }
  88                 }
  89         }'
  90 
  91 if [ -s $errlog ]; then
  92         echo "\n====== protocmp ERRORS =====\n" 
  93         cat $errlog
  94 fi
  95 rm -f $errlog