/*
 * Copyright (C) 2009 Daniel Verkamp <daniel@drv.nu>.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of the
 * License, or any later version.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
 * 02110-1301, USA.
 *
 * March-19-2009 @ 02:44: Added sleep command.
 * Shao Miller <shao.miller@yrdsb.edu.on.ca>.
 */

FILE_LICENCE ( GPL2_OR_LATER );

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <ipxe/command.h>
#include <ipxe/parseopt.h>
#include <ipxe/timer.h>

/** @file
 *
 * Time commands
 *
 */

/** "time" options */
struct time_options {};

/** "time" option list */
static struct option_descriptor time_opts[] = {};

/** "time" command descriptor */
static struct command_descriptor time_cmd =
	COMMAND_DESC ( struct time_options, time_opts, 1, MAX_ARGUMENTS,
		       "<command>" );

/**
 * "time" command
 *
 * @v argc		Argument count
 * @v argv		Argument list
 * @ret rc		Return status code
 */
static int time_exec ( int argc, char **argv ) {
	struct time_options opts;
	unsigned long start;
	unsigned long elapsed;
	int decisecs;
	int rc;

	/* Parse options */
	if ( ( rc = parse_options ( argc, argv, &time_cmd, &opts ) ) != 0 )
		return rc;

	start = currticks();
	rc = execv ( argv[1], argv + 1 );
	elapsed = ( currticks() - start );
	decisecs = ( 10 * elapsed / TICKS_PER_SEC );

	printf ( "%s: %d.%ds\n", argv[0],
		 ( decisecs / 10 ), ( decisecs % 10 ) );

	return rc;
}

/** "time" command */
struct command time_command __command = {
	.name = "time",
	.exec = time_exec,
};
