#include <stdio.h>
#include "hd.h"

APTR IntuitionBase;
extern APTR OpenLibrary ();

char buf[512];

main ()
{
	int i;
	long sec1,sec2, micro1,micro2;
	struct posn posn;
	int loop;

	IntuitionBase = OpenLibrary ( "intuition.library" , 0L );
	if ( IntuitionBase == NULL ) {
		printf ( "Failed to open intuition.library\n" );
		exit ( 1 );
	}
	if ( wd_open () == 0 ) {
		posn.cylinder = 10;
		posn.surface = 0;
		for ( i = 0; i < first.sectors; i++ ) {
			printf ( "Trying interleave %d\n" , i );
			fflush ( stdout );
			new_interleave ( i , first.sectors );
			posn.sector = 0;
			posn.block = posn.sector + ( posn.surface * first.sectors )
				+ ( posn.cylinder * first.sectors * first.heads );
			wd_format_track ( &posn );
			CurrentTime ( &sec1 , &micro1 );
			for ( loop = 0; loop < 20; loop++ ) {
				for ( posn.sector = 0; posn.sector < first.sectors; posn.sector++ ) {
					posn.block = posn.sector
						+ ( posn.surface * first.sectors )
						+ ( posn.cylinder * first.sectors * first.heads );
					read_sector ( &posn , buf );
				}
			}
			CurrentTime ( &sec2 , &micro2 );
			sec2 -= sec1;
			micro2 -= micro1;
			if ( micro2 < 0 ) {
				micro2 += 1000000;
				sec2--;
			}
			printf ( "difference %ld sec, %ld micro\n" , sec2 , micro2 );
		}
		wd_close ();
	}
	else
		printf ( "wd_reset() failed\n" );
	CloseLibrary ( IntuitionBase );
}


new_interleave ( interleave )
int interleave;
{
	int i;
	int j;

	for ( i = 0; i < first.sectors; i++ )
		first.interleave[i*2+1] = first.sectors;	/* mark as free */
	j = 0;
	for ( i = 0; i < first.sectors; i++ ) {
		while ( first.interleave[j*2+1] != first.sectors ) {
			j++;
			while ( j >= first.sectors ) j -= first.sectors;
		}
		first.interleave[j*2+1] = i;
		j += interleave;
		while ( j >= first.sectors ) j -= first.sectors;
	}
	for ( i = 0; i < first.sectors; i++ )
		printf ( "%d " , first.interleave[i*2+1] );
	printf ( "\n" );
}
