/*
 * 5799-WZQ (C) COPYRIGHT = NONE
 * LICENSED MATERIALS - PROPERTY OF IBM
 */
/* $Header:shell.c 12.0$ */
/* $ACIS:shell.c 12.0$ */
/* $Source: /ibm/acis/usr/src/usr.bin/refer/RCS/shell.c,v $ */

#ifndef lint
static char *rcsid = "$Header:shell.c 12.0$";
#endif

#ifndef lint
static char *sccsid = "@(#)shell.c	4.1 (Berkeley) 5/6/83";
#endif
/*
 * SORTS UP.
 * IF THERE ARE NO EXCHANGES (IEX=0) ON A SWEEP
 * THE COMPARISON GAP (IGAP) IS HALVED FOR THE NEXT SWEEP
 */
shell (n, comp, exch)
int (*comp)(), (*exch)();
{
	int igap, iplusg, iex, i, imax;
	igap=n;
	while (igap > 1)
	{
		igap /= 2;
		imax = n-igap;
		do
		    {
			iex=0;
			for(i=0; i<imax; i++)
			{
				iplusg = i + igap;
				if ((*comp) (i, iplusg) ) continue;
				(*exch) (i, iplusg);
				iex=1;
			}
		} 
		while (iex>0);
	}
}
