#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#include <sched.h>
#include "cbs.h"

extern char **environ;

int main(int argc, char *argv[])
{
  int i;
  int points;
  struct sched_param sp;
  struct cbs_param cs;
  int res;
  char **my_args;

  if (argc < 4) {
    printf("Usage: %s Q T <command>\n", argv[0]);

    return -1;
  }
  
  sp.sched_size = sizeof(struct cbs_param);
  sp.sched_p = &cs;
  cs.signature = CBS_SIGNATURE;
  cs.max_budget = atoi(argv[1]);
  cs.period = atoi(argv[2]);

  res = sched_setscheduler(getpid(), SCHED_CBS, &sp);
  if (res < 0) {
    perror("Error in setscheduler!");
    exit(-1);
  }

  my_args = malloc(sizeof(char *) * (argc - 2));
  for (i = 3; i < argc; i++) {
    printf("Setting argv[%d] = %s\n", i - 3, argv[i]);
    my_args[i - 3] = argv[i];
  }
  my_args[argc - 3] = NULL;

  execve(argv[3], my_args, environ);

  perror("ExecVE Failed:");

  return -1;
}
