#!/usr/bin/ksh
#####################################################################
# TITRE:	SystAffSwap
#--------------------------------------------------------------------
# CREE LE:	12/11/94		Par: Johann CURE HP
#--------------------------------------------------------------------
# OBJET:	Script affichant les 5 dont la taille
#		en memoire est la plus i;portamte.
#====================================================================
# Modifie le:	JJ/MM/AA		Par: 
#	Motif: motif ayant justifie la modification et points
#	modifies si besoin
#####################################################################
# REMARQUES: Les entetes des fonctions ont ete allegees pour plus
#            de lisibilite (fonction de petite taille et presque
#            identiques
#
#####################################################################
# CONVENTION DES CODES DE RETOUR (autre aue 0 (Ok) et 1 (erreur)
#
#====================================================================
# ACCES ET DROITS D'APPEL
#	Mode: 0777	Owner: 			Group:
#====================================================================
# PRE-REQUIS EN ENTREE
# Environnement materiel:
#	Machine: 			Constructeur: HP,SUN,IBM,SGI
# Environnement logiciel:
#	OS: hp-ux			Version: 9.05
#	    hp-ux				 10.20
#	    Solaris				 5.3
#	    Solaris				 5.5
#	    SunOs 				 4.1.3
#	    AIX					 3.x
#	    AIX					 4.2
#	    IRIX				 5.3
# Initialisation des variables globales (environnement, reseau...):
#	VARIABLE1	=	
#	VARIABLE2	=
#####################################################################

#####################################################################
# INVENTAIRE DES APPELS EXTERNES
# Script(s) appelant(s) ce script: 
#	Operation Center
#--------------------------------------------------------------------
# Script(s) appele(s) par ce script:
#	Non Applicable	
#--------------------------------------------------------------------
# Fonction(s) appelee(s) par ce script:
# - Systeme:
#	Non Applicable	
# - Internes:
#	Non Applicable
#====================================================================
# Environnement et variables globales
# importes non modifies:
#	Non Applicable
#--------------------------------------------------------------------
# Importes modifies:
#	Non Applicable
#--------------------------------------------------------------------
# Exportes:
#	NOM_VARIABLE= Non Applicable
#####################################################################
# Fonctions internes au script
#	DeterminationOS 
#	FonctionHPUX
#	FonctionHPUX10
#	FonctionSunOS
#	FonctionSolaris
#	FonctionAIX
#	FonctionAIX42
#	FonctionIRIX
#####################################################################

# Definition du path des fichiers temporaires :
PATH_FIC_TMP=/tmp

# Definition des variables globales locales script:
typeset TypeMachine                       # Recuperation de l'OS  	
typeset VersionOS                         # Recuperation de la version de l'OS 
typeset ReferenceFonction		  # Commande differente suivant l'OS

#####################################################################
# FONCTION: 	DeterminationOS	
# CREEE LE:	12/12/94		Par: Johann CURE HP
# OBJET:	Cette fonction permet de connaitre l'OS sur lequel
#		le script se deroule
#====================================================================
# Modifiee le:	12/12/96		Par:  Vincent Garreau HP
#	Motif: prise en compte de nouvelles plate-formes HP, AIX, SOLARIS, IRIX
#####################################################################
# Modifiee le:	JJ/MM/AA		Par: 
#	Motif: motif ayant justifie la modification et points
#	modifies si besoin
#####################################################################
# REMARQUES:
# 
#####################################################################
# CONVENTION DES CODES RETOUR (autres que 0 (Ok) et 2 (Erreur))
#
#====================================================================
# Fonctions DU SCRIPT appelees
#
#####################################################################
function DeterminationOS
{
	TypeMachine=$(uname -s)           # Recuperation de l'OS  	
	VersionOS=$(uname -rv)            # Recuperation de la version de l'OS 

	case ${TypeMachine} in
	HP-UX)
		if [[ "$(echo $VersionOS|cut -d. -f2)" = "10" || "$(echo $VersionOS|cut -d. -f2)" = "11" ]]
			then ReferenceFonction=FonctionHPUX10
			else ReferenceFonction=FonctionHPUX
		fi
		;;
	SunOS)
		if [ "$(echo $VersionOS|cut -c1,2)" = "5." ] ; then
				TypeMachine="Solaris"
				ReferenceFonction=FonctionSolaris
		else	
				ReferenceFonction=FonctionSunOS
		fi
		;;
	AIX)
		if [ "$(echo $VersionOS|cut -c 3,3)" = "4" ] 
			then ReferenceFonction=FonctionAIX42
			else ReferenceFonction=FonctionAIX
		fi
		;;
	IRIX)
		ReferenceFonction=FonctionIRIX
		;;

	*)	
		print "$TypeMachine non supporte par ce programme"
		exit 2
		;;
	esac
	return 0
}

#####################################################################
# FONCTION:     FonctionHP-UX
#		FonctionHPUX10
#		FonctionSunOS 
#		FonctionSolaris
#		FonctionAIX
#		FonctionAIX42
#		FonctionIRIX
# CREEE LE:     12/12/94                Par: Johann CURE HP
# OBJET:        Ces 6 fonctions execute les instructions propres a
#		chaque systeme pour obtenir les memes resultats 
#====================================================================
# Modifiee le:  JJ/MM/AA                Par:
#       Motif: motif ayant justifie la modification et points
#       modifies si besoin
#####################################################################
# REMARQUES:	Chaque fonction fait appel a un ps specifique.
#		Il se peut que deux colonnes soit collees.
#		Pour cela je considere la sortie standard comme une
#		seule colonne en donnant un field separateur ayant
#		peu de chances de sortir "@" et j'extrais colonne
#		par colonne avec la fonction substr de awk
#		et je reaffiche le resultat avec un blanc entre
#		chaque. 
#		Je recupere l'entete de la fonction ps puis j'effectue
#		le tri sur la colonne SZ (Size) en retirant l'entete
#		si cette derniere fait partie du tri
#
#####################################################################
# CONVENTION DES CODES RETOUR (autres que 0 (Ok) et 2 (Erreur))
#
#====================================================================
# Fonctions DU SCRIPT appelees
#
#####################################################################
function FonctionHPUX
	{
	ps -efl | awk -F @ ' { c1=substr($1,1,3); c2=substr($1,4,2) ; \
		c3=substr($1,6,8); c4=substr($1,14,6); c5=substr($1,20,6); \
		c6=substr($1,26,3); c7=substr($1,29,4); c8=substr($1,33,3); \
		c9=substr($1,36,9); c10=substr($1,45,5); c11=substr($1,50,100) } 
		{ print c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11 } '>> $PATH_FIC_TMP/tmp$$
	cat $PATH_FIC_TMP/tmp$$ | head -n 1
	sort -r -k 10,10  $PATH_FIC_TMP/tmp$$ | grep -v "COMD" | head -n 5
	rm $PATH_FIC_TMP/tmp$$
	return 0
	}

function FonctionHPUX10
	{
	ps -efl | awk -F @ ' { c1=substr($1,1,3); c2=substr($1,4,2) ; \
		c3=substr($1,6,9); c4=substr($1,15,6); c5=substr($1,21,6); \
		c6=substr($1,27,3); c7=substr($1,30,4); c8=substr($1,34,3); \
		c9=substr($1,37,9); c10=substr($1,46,5); c11=substr($1,51,100) } 
		{ print c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11 } '>> $PATH_FIC_TMP/tmp$$
	cat $PATH_FIC_TMP/tmp$$ | head -n 1
	sort -r -k 10,10  $PATH_FIC_TMP/tmp$$ | grep -v "COMD" | head -n 5
	rm $PATH_FIC_TMP/tmp$$
	return 0
	}

function FonctionSunOS
	{
	ps -axlww | awk -F@ ' { c1=substr($1,1,8); c2=substr($1,9,4) ; \
		c3=substr($1,13,6); c4=substr($1,19,6); c5=substr($1,25,3); \
		c6=substr($1,28,4); c7=substr($1,32,3); c8=substr($1,35,4); \
		c9=substr($1,39,100) } 
		{ print c1,c2,c3,c4,c5,c6,c7,c8,c9 } '>> $PATH_FIC_TMP/tmp$$
	cat $PATH_FIC_TMP/tmp$$ | head -1
	sort -rn +7 $PATH_FIC_TMP/tmp$$ | grep -v "COMMAND" | head -5
	rm $PATH_FIC_TMP/tmp$$
	return 0
	}

function FonctionSolaris
	{
	ps -efl | awk -F@ ' { c1=substr($1,1,2); c2=substr($1,3,2) ; \
		c3=substr($1,5,9); c4=substr($1,14,6); c5=substr($1,20,6); \
		c6=substr($1,26,3); c7=substr($1,29,4); c8=substr($1,33,3); \
		c9=substr($1,36,9); c10=substr($1,45,7); c11=substr($1,52,100) } 
		{ print c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11 } '>> $PATH_FIC_TMP/tmp$$
	cat $PATH_FIC_TMP/tmp$$ | head -1
	sort -rn +9 $PATH_FIC_TMP/tmp$$ | grep -v "COMD" | head -5
	rm $PATH_FIC_TMP/tmp$$
	return 0
	}

function FonctionAIX
	{
	ps -efl | awk -F @ ' { c1=substr($1,1,8); c2=substr($1,9,2) ; \
		c3=substr($1,11,9); c4=substr($1,20,6); c5=substr($1,26,6); \
		c6=substr($1,32,4); c7=substr($1,36,4); c8=substr($1,40,3); \
		c9=substr($1,43,5); c10=substr($1,48,6); c11=substr($1,54,100) } 
		{ print c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11 } '>> $PATH_FIC_TMP/tmp$$
	cat $PATH_FIC_TMP/tmp$$ | head -n 1
	sort -rn +9 $PATH_FIC_TMP/tmp$$ | grep -v "CND" | head -n 5
	rm $PATH_FIC_TMP/tmp$$
	return 0
	}

function FonctionAIX42
	{
	FonctionAIX
	}

function FonctionIRIX
	{
	ps -efl | awk -F@ ' { c1=substr($1,1,2); c2=substr($1,3,2) ; \
		c3=substr($1,5,9); c4=substr($1,14,6); c5=substr($1,20,6); \
		c6=substr($1,26,3); c7=substr($1,29,4); c8=substr($1,33,3); \
		c9=substr($1,36,9); c10=substr($1,45,7); c11=substr($1,52,100) } 
		{ print c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11 } '>> $PATH_FIC_TMP/tmp$$
	cat $PATH_FIC_TMP/tmp$$ | head -1
	sort -rn +9 $PATH_FIC_TMP/tmp$$ | grep -v "COMD" | head -5
	rm $PATH_FIC_TMP/tmp$$
	return 0
	}


####################################################################
#			PROGRAMME PRINCIPAL
####################################################################

DeterminationOS

${ReferenceFonction}

if [ $? -ne 0 ]
	then
	echo "Probleme sur le programme SystAffSwap." 1>&2
	exit 1
fi

exit 0
