// TIMER.C
// определены функции sleep и delay выполняющие временные задержки

#include <time.h>
#include <sys/timeb.h>

#include "timer.h"


/**
*.Name         sleep
*
*.Title        Приостанавливает выполнение программы
*
*.Descr        Эта функция приостанавливает выполнение
*              программы на заданное число секунд.
*
*.Proto        void sleep(time_t interval)
*
*.Params       time_t interval - время задержки в секундах
*
*.Return       не используется
*
*.Sample       timer.c
**/
void sleep(time_t interval) {

   time_t start;

   start = time((time_t *)NULL);

	// ожидаем пока пройдет time_t секунд

   while ((time((time_t *)NULL) - start) < interval)
		delay(1000);
}



/**
*.Name         delay
*
*.Title        Приостанавливает выполнение программы
*
*.Descr        Эта функция приостанавливает выполнение
*              программы на заданное число милисекунд.
*
*.Proto        void delay(int milliseconds)
*
*.Params       time_t interval - время задержки в милисекундах
*
*.Return       не используется
*
*.Sample       timer.c
**/
void   delay   (int milliseconds) {

   struct timeb t;
   time_t seconds;
   unsigned last;

	if (milliseconds == 0)
      return;

	// определяем текущее время

	ftime(&t);

	last = t.millitm;
	seconds = t.time;

	// ожидаем milliseconds милисекунд

	while( milliseconds > 0) {

		int count;

		// задержка
		for ( count = 0; count < 2000; count ++);

		// определяем текущее время

		ftime(&t);

		if (t.time == seconds)
			milliseconds -= (t.millitm - last);

      else
			milliseconds -= 1000 * (int) (t.time - seconds) -
												  (last - t.millitm);

		last = t.millitm;
		seconds = t.time;
	}
}
