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 #ident  "%Z%%M% %I%     %E% SMI"
  28 
  29 opts=""
  30 while getopts guplmsLv arg
  31 do
  32         if [ "$arg" = "?" ]; then
  33                 exit 1
  34         fi
  35         opts="$opts -$arg"
  36 done
  37 
  38 shift $(($OPTIND - 1))
  39 
  40 if [ $# -le 3 ]; then
  41         echo "$0: at least 3 arguments required." >&2
  42         exit 1
  43 fi
  44 
  45 old="$1"; shift
  46 new="$1"; shift
  47 differ="$1"; shift
  48 
  49 errlog=/tmp/protocmp.err.$$
  50 
  51 protocmp $opts "$@" 2>$errlog |
  52         nawk -v old="$old" -v new="$new" -v differ="$differ" '
  53         /^\**$/ {
  54                 next;
  55         }
  56         /^\* Entries/ {
  57                 category++;
  58                 next;
  59         }
  60         /^\* filea ==/ {
  61                 filea = $NF;
  62                 next;
  63         }
  64         /^\* fileb ==/ {
  65                 fileb = $NF;
  66                 next;
  67         }
  68         {
  69                 buf[category, ++line[category]] = $0
  70         }
  71         END {
  72                 if (line[1] > 2) {
  73                         printf("\n%s\n\n", old);
  74                         for (i = 1; i <= line[1]; i++) {
  75                                 print buf[1, i];
  76                         }
  77                 }
  78                 if (line[2] > 2) {
  79                         printf("\n%s\n\n", new);
  80                         for (i = 1; i <= line[2]; i++) {
  81                                 print buf[2, i];
  82                         }
  83                 }
  84                 if (line[3] > 2) {
  85                         printf("\n%s\n\n", differ);
  86                         for (i = 1; i <= line[3]; i++) {
  87                                 print buf[3, i];
  88                         }
  89                 }
  90         }'
  91 
  92 if [ -s $errlog ]; then
  93         echo "\n====== protocmp ERRORS =====\n" 
  94         cat $errlog
  95 fi
  96 rm -f $errlog