#!/bin/sh
# set -x
# check_patches
#

ECHO=/usr/bin/echo
GREP=/usr/bin/grep
SORT=/usr/bin/sort
TAIL=/usr/bin/tail
SCRATCH_FILE=/tmp/SunPC_patch_scratch_file
INFO_FILE=/tmp/SunPC_patch_info_file

#
# function to check if patch already installed, or obsoleted
#

need_patch() {
SHOWPATCHES="/usr/bin/showrev -p "
PATCH=$1
VER_REQUIRED=$2
BLURB=$3
DO_PATCH=0

PATCH_INFO=`$GREP $PATCH $SCRATCH_FILE 2>/dev/null`
if [ "$PATCH_INFO" != "" ]        	# patch installed or obsolete
then
    PATCH_INSTALLED=`$GREP "Patch:[     ]$PATCH" $SCRATCH_FILE 2>/dev/null| $SORT | $TAIL -1`
    if [ "$PATCH_INSTALLED" = "" ]
    then
        return 0  # patch obsolete
    else
        VER_INSTALLED=`/usr/bin/echo $PATCH_INSTALLED | /bin/awk -F" " '{print $2}'`
    	VER_NUM=`/usr/bin/expr $VER_INSTALLED : '.*\-\(.*\)' \| $VER_INSTALLED`
    	if [ "$VER_NUM" -ge "$VER_REQUIRED" ]
    	then
	    return 0 # high enough version installed
	fi
    fi
fi
if [ $OVERRIDE = 1 ]
then
    $ECHO "Patch required:"
    $ECHO "  $BLURB"
    $ECHO ""
    $ECHO "Override and install anyway? (y/n)[n]"
    read ANSWER
    $ECHO " "
    if [ "$ANSWER" != "Y" -a "$ANSWER" != "y" ]
    then
        return 1
    else
        $ECHO "Overriding requirement for $PATCH-$VER_REQUIRED."
        $ECHO " "
	return 0
    fi
fi
return 1
}


OSREVINFO=`/usr/bin/uname -r`
OSREVLEVEL=`/usr/bin/echo "$OSREVINFO"| sed 's/\.//'`
CHECK_DEV=$SUNPCHOME/bin/check_device
KARCH=`/bin/uname -m`

HAS_FLOPPY=0
HAS_GT=0
HAS_GS=0
HAS_ZX=0
NUMPATCHES=0
MUST_PATCH=0

#
# uncomment for debug
#
#CHECK_DEV=check_device
#OSREVLEVEL=52
#HAS_FLOPPY=1
#HAS_GT=1
#HAS_GS=1
#HAS_ZX=1
#KARCH=sun4m

#----------------------------------------------------
# START HERE
#----------------------------------------------------

rm -f $INFO_FILE
rm -f $SCRATCH_FILE

if [ "$1" = "override" ]
then
    OVERRIDE=1
else
    OVERRIDE=0
fi

#
# dump current patch info to tmp file
#
/usr/bin/showrev -p > $SCRATCH_FILE

#
# If we have a floppy drive check for the patch
#
$CHECK_DEV /dev/diskette
if [ $? -eq 1 ]
then
    HAS_FLOPPY=1
fi

#
#  If we have a GT check for the patch
#
$CHECK_DEV /dev/gt0 -open
if [ $? -eq 1 ]
then
    HAS_GT=1
fi

#
#  If we have a GS (cgtwelve) check for the patch
#
$CHECK_DEV /dev/cgtwelve0 -open
if [ $? -eq 1 ]
then
    HAS_GS=1
fi

#
#  If we have a ZX (Leo) check for the patch
#
$CHECK_DEV /dev/zx0 -open
if [ $? -eq 1 ]
then
    HAS_ZX=1
fi

#
#  If SunOS 5.1 check for patches for the following:
#
#	Floppy
#	GT
#	GS
#	
if [ "$OSREVLEVEL" -eq "51" ]
then
    if [ "$HAS_FLOPPY" -eq "1" ]
    then 
	need_patch 100938 02 "PATCH ID#: 100938-02: Solaris2.1 floppy diskette fix"
	if [ $? -eq 1 ]
	then
            $ECHO "PATCH ID#: 100938-02: Solaris2.1 floppy diskette fix" >> $INFO_FILE
	    $ECHO "    Required to use floppy with SunPC." >> $INFO_FILE
            $ECHO "    Patch directory: /cdrom/patches/2.1/100938-02" >> $INFO_FILE
            $ECHO "" >> $INFO_FILE
	    NUMPATCHES=`expr $NUMPATCHES + 1`
            MUST_PATCH=1
	fi
    fi

    if [ "$HAS_GT" -eq "1" -o "$HAS_GS" -eq "1" ]
    then
	need_patch 101234 01 "PATCH ID#: 101234-01: Solaris2.1 GT/GS fix" 
	if [ $? -eq 1 ]
	then
            $ECHO "PATCH ID#: 101234-01: Solaris2.1 GT/GS fix" >> $INFO_FILE
	    $ECHO "    Required to run SunPC with GT/GS framebuffer." >> $INFO_FILE
            $ECHO "    Patch directory: /cdrom/patches/2.1/101234-01" >> $INFO_FILE
            $ECHO "" >> $INFO_FILE
	    NUMPATCHES=`expr $NUMPATCHES + 1`
            MUST_PATCH=1
	fi
    fi
fi


#
#  If SunOS 5.2 check for patches for the following:
#
#	Floppy
#	Lockd
#	GT
#	GS
#	Leo
#	
if [ "$OSREVLEVEL" -eq "52" ]
then
#
# Floppy
#
    if [ "$HAS_FLOPPY" -eq "1" ]
    then
	need_patch 101143 01 "PATCH ID#: 101143-01: Solaris2.2 floppy diskette fix"
	if [ $? -eq 1 ]
	then
            $ECHO "PATCH ID#: 101143-01: Solaris2.2 floppy diskette fix" >> $INFO_FILE
	    $ECHO "    Required to use floppy with SunPC." >> $INFO_FILE
            $ECHO "    Patch directory: /cdrom/sunpc_4_0_1/patches/2.2/101143-01" >> $INFO_FILE
            $ECHO "" >> $INFO_FILE
	    NUMPATCHES=`expr $NUMPATCHES + 1`
	    MUST_PATCH=1
	fi
    fi

#
# Check for the 5.2 lockd patch.
#
    need_patch 101279 01 "PATCH ID#: 101279-01: Solaris2.2 lock daemon fix" 
    if [ $? -eq 1 ]
    then
        $ECHO "PATCH ID#: 101279-01: Solaris2.2 lock daemon fix" >> $INFO_FILE
  	$ECHO "    Required for SunPC filesharing." >> $INFO_FILE
        $ECHO "    Patch directory: /cdrom/sunpc_4_0_1/patches/2.2/101279-01" >> $INFO_FILE
        $ECHO "" >> $INFO_FILE
	NUMPATCHES=`expr $NUMPATCHES + 1`
        MUST_PATCH=1
    fi

#
# Check for the GT/GS/Leo patch.
#
    if [ "$HAS_GT" -eq "1" -o "$HAS_GS" -eq "1" -o "$HAS_ZX" -eq "1" ]
    then
	if pkginfo -v 11.0.15,REV=1.0.8 SUNWgt > /dev/null 2>&1 ||
	   pkginfo -v 1.0.0,REV=1.0.14 SUNWleo > /dev/null 2>&1
	then
	    need_patch 101235 01 "PATCH ID#: 101235-01: Solaris2.2 GT/GS/ZX fix"
	    if [ $? -eq 1 ]
	    then
                $ECHO "PATCH ID#: 101235-01: Solaris2.2 GT/GS/ZX fix" >> $INFO_FILE
	       	$ECHO "    Required to run SunPC with GT/GS/ZX framebuffer." >> $INFO_FILE
                $ECHO "    Patch directory: /cdrom/sunpc_4_0_1/patches/2.2/101235-01" >> $INFO_FILE
                $ECHO "" >> $INFO_FILE
	        NUMPATCHES=`expr $NUMPATCHES + 1`
                MUST_PATCH=1
	    fi
	else
	    need_patch 101248 01 "PATCH ID#: 101248-01: Solaris2.2 GT/GS/ZX fix"
	    if [ $? -eq 1 ]
	    then
                $ECHO "PATCH ID#: 101248-01: Solaris2.2 GT/GS/ZX fix" >> $INFO_FILE
	        $ECHO "    Required to run SunPC with GT/GS/ZX framebuffer and" >> $INFO_FILE
		$ECHO "    GT/ZX supplement." >> $INFO_FILE
                $ECHO "    Patch directory: /cdrom/sunpc_4_0_1/patches/2.2/101248-01" >> $INFO_FILE
                $ECHO "" >> $INFO_FILE
		NUMPATCHES=`expr $NUMPATCHES + 1`
        	MUST_PATCH=1
	    fi
	fi
    fi
fi
#
#
#  If SunOS 5.3 check for patches for the following:
#
#	GT
#	4m kernel patch
#	Auxdev
#	lockd
#
if [ "$OSREVLEVEL" -eq "53" ]
then

#
# Check for the 4M patch.
#
    if [ "$KARCH" = "sun4m" ]
    then
	need_patch 101318 06 "PATCH ID#: 101318-06: Solaris2.3 kernel patch"
	if [ $? -eq 1 ]
	then
            $ECHO "PATCH ID#: 101318-06: Solaris2.3 kernel patch" >> $INFO_FILE
	    $ECHO "    Fixes SunPC/sun4m incompatibility." >> $INFO_FILE
            $ECHO "    Patch directory: /cdrom/sunpc_4_0_1/patches/2.3/101318-06" >> $INFO_FILE
	    $ECHO "" >> $INFO_FILE
	    NUMPATCHES=`expr $NUMPATCHES + 1`
            MUST_PATCH=1
	fi
    fi
#
# Check for the Auxdev patch.
#
    need_patch 101362 03 "PATCH ID#: 101362-03: Solaris2.3 Openwindows patch"
    if [ $? -eq 1 ]
    then
      	$ECHO "PATCH ID#: 101362-03: Solaris2.3 Openwindows patch" >> $INFO_FILE
        $ECHO "    Fixes graphics and cursor problems with OpenWindow3.3." >> $INFO_FILE
	$ECHO "    Patch directory: /cdrom/sunpc_4_0_1/patches/2.3/101362-03" >> $INFO_FILE
	$ECHO "" >> $INFO_FILE
	NUMPATCHES=`expr $NUMPATCHES + 1`
        MUST_PATCH=1
    fi

#
# Check for the 5.3 lockd patch.
#
    need_patch 101267 01 "PATCH ID#: 101267-01: Solaris2.3 lock daemon fix"
    if [ $? -eq 1 ]
    then
        $ECHO "PATCH ID#: 101267-01: Solaris2.3 lock daemon fix" >> $INFO_FILE
        $ECHO "    Required for SunPC filesharing." >> $INFO_FILE
        $ECHO "    Patch directory: /cdrom/sunpc_4_0_1/patches/2.3/101267-01" >> $INFO_FILE
        $ECHO "" >> $INFO_FILE
	NUMPATCHES=`expr $NUMPATCHES + 1`
        MUST_PATCH=1
    fi

#
# check for GT
#
    if [ "$HAS_GT" -eq "1" ]
    then
	need_patch 101311 01 "PATCH ID#: 101311: Solaris2.3 OpenWindows GT fix"
	if [ $? -eq 1 ]
	then
            $ECHO "PATCH ID#: 101311: Solaris2.3 OpenWindows GT fix" >> $INFO_FILE
	    $ECHO "    Required for SunPC DGA with GT/GS framebuffer." >> $INFO_FILE
            $ECHO "    Patch not available on SunPC CD." >> $INFO_FILE
	    $ECHO "    See SunPC4.0.1 Product Notes for more information." >> $INFO_FILE
            $ECHO "" >> $INFO_FILE
	    NUMPATCHES=`expr $NUMPATCHES + 1`
	fi
    fi
fi

#  If SunOS 5.4 check for patches for the following:
#
#	TCX patch
#	HWC patches
#
if [ "$OSREVLEVEL" -eq "54" ]
then

# check for 2 Hardware Cursor fixes
    need_patch 101933 01 "PATCH ID#: 101933-01: Solaris2.4 OpenWindows patch" 
    if [ $? -eq 1 ]
    then
      	$ECHO "PATCH ID#: 101933-01: Solaris2.4 OpenWindows patch" >> $INFO_FILE
        $ECHO "    Fixes hardware cursor problem in OW3.4" >> $INFO_FILE
	$ECHO "    Obtain patch from your Sun vendor or service provider" >> $INFO_FILE
	$ECHO "" >> $INFO_FILE
	NUMPATCHES=`expr $NUMPATCHES + 1`
        MUST_PATCH=1
    fi

    need_patch 102057 01 "PATCH ID#: 102057-01: Solaris2.4 OpenWindows patch"
    if [ $? -eq 1 ]
    then
      	$ECHO "PATCH ID#: 102057-01: Solaris2.4 OpenWindows patch" >> $INFO_FILE
        $ECHO "    Fixes another hardware cursor problem in OW3.4" >> $INFO_FILE
	$ECHO "    Obtain patch from your Sun vendor or service provider" >> $INFO_FILE
	$ECHO "" >> $INFO_FILE
	NUMPATCHES=`expr $NUMPATCHES + 1`
        MUST_PATCH=1
    fi

# check for TCX driver and fix

    $SUNPCHOME/bin/ServerVersion -tcx
    SERVERVERSION_RET=$? 
    if [ "$SERVERVERSION_RET" -eq "1" ]
    then
      	$ECHO "PATCH ID#: 101923-01: Solaris2.4 TCX driver patch" >> $INFO_FILE
        $ECHO "    Fixes SunPC DVMA with A24 framebuffer" >> $INFO_FILE
	$ECHO "    Obtain patch from your Sun vendor or service provider" >> $INFO_FILE
	$ECHO "" >> $INFO_FILE
	NUMPATCHES=`expr $NUMPATCHES + 1`
        MUST_PATCH=1
    fi
fi
#
#
#
if [ -f $INFO_FILE ]
then

    $ECHO ""
    $ECHO "**************************************************************"
    $ECHO ""
    if [ "$NUMPATCHES" -eq "1" ]
    then
    $ECHO "To run SunPC, your system needs 1 Solaris patch."
    else
    $ECHO "To run SunPC, your system needs $NUMPATCHES Solaris patches."
    fi
    $ECHO "Most Solaris patches for SunPC are available on the SunPC CD."
    $ECHO "For each patch listed below, go to the indicated directory,"
    $ECHO "read the README file, and follow the installation instructions."
    $ECHO "See SunPC4.0.1 Product Notes for more information."
    $ECHO ""
    cat $INFO_FILE
    if [ "$MUST_PATCH" -eq "1" ]
    then
    $ECHO ""
    $ECHO "--------------------------------------------------------------"
    $ECHO "INSTALL THESE PATCHES, REBOOT, AND RUN sunpc_install AGAIN."
    $ECHO "--------------------------------------------------------------"
    $ECHO ""
    $ECHO "If you believe that your system has the required patches installed"
    $ECHO "and that these instructions are in error, please report the problem"
    $ECHO "to your vendor or SunService representative.  You can override these"
    $ECHO "instructions by typing './sunpc_install -OVERRIDE_PATCH_CHECK', but"
    $ECHO "this is not recommended."
    $ECHO "**************************************************************"
    $ECHO ""
    fi

    rm $INFO_FILE
    rm $SCRATCH_FILE
    if [ "$MUST_PATCH" -eq "1" ]
    then
        exit 1
    fi
fi
exit 0
