/* DIVIDE_START=sort.c */
/*
	ＮＩＦＴＹのＬＯＧ整理				sort.c

		次の順序でソートを行う
			1. 発言の日時でソートする
			2. 発言番号でソートする ただし、MAILはソートしない
*/

#include	"catlog.h"

static	int	sort_line( const void *p11 , const void *p21 )
{
	const struct CATLOG *p1 = p11;
	const struct CATLOG *p2 = p21;

	return( p1->line - p2->line );
}

static	int	sort_date( const void *p11 , const void *p21 )
{
	const struct CATLOG *p1 = p11;
	const struct CATLOG *p2 = p21;

	return( p1->date - p2->date );
}

int	sort()
{
	int		s , e;

	/* 登録データがない場合や 1 個だけの場合はソートしない */
	if ( save_start == save_end )		return( TRUE );
	if ( save_start == save_end - 1 )	return( TRUE );

	/**** 1. 発言の日時でソートする ****/
	qsort( (char *)catlog + save_start * sizeof( struct CATLOG ) ,
		save_end - save_start,
		sizeof( struct CATLOG ) ,
		sort_date
	);

	/**** 2. 発言番号でソートする ただし、MAILはソートしない ****/
	if ( MesNum != MAIL ) {
		s = e = save_start;
		while ( s < save_end ) {
			while (	( catlog[ s ].date == catlog[ e ].date )
			&&		( e < save_end )
			) {
				e++;
			};
			if ( s < e - 1 ) {
				qsort( (char *)catlog + s * sizeof( struct CATLOG ) ,
					e - s,
					sizeof( struct CATLOG ) ,
					sort_line
				);
			};
			s = e;	/* Next Data */
		};
	};

	return( TRUE );
}

/* DIVIDE_END */
