#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-
+#include <unistd.h>
+#include <sys/time.h>
void print_help(char name[])
{
printf("\n");
printf("Simulates execution of an program. \n");
printf("\n");
- printf("Usage: %s \n", name);
+ printf("Usage: %s name time [-eNN=MM [...]]\n", name);
+ printf(" name A label to print\n");
+ printf(" time Time for program to sleep in seconds\n");
+ printf("\n");
printf("The default action of the program is to return with 0 (success) \n");
printf(" -eNN=MM Return with value NN with a probability of MM% \n");
printf("\n");
int main (int argc, char** argv)
{
- int i, rand_value, sum;
+ char *name;
+ int sleep_time, i, rand_value, retval, sum;
int retvals[100];
int percentages[100];
+ struct timeval td;
- if (argc==2 && strcmp("--help",argv[1])==0 )
+ if (argc < 3 )
{
print_help(argv[0]);
return 1;
}
+
+
+
+ name = argv[1];
- for (i=1; i<argc; i++)
+ if ( sscanf(argv[2],"%d",&sleep_time)!=1 )
{
- parse_argv(argv[i], retvals+i-1, percentages+i-1);
+ printf("Argument sytax error : %s \n", argv[2]);
+ return 1;
+ }
+
+ for (i=3; i<argc; i++)
+ {
+ parse_argv(argv[i], retvals+i-3, percentages+i-3);
}
/* Get random number in interval [0,100) */
- srand(time(0));
- rand_value = rand() % 100;
+ gettimeofday(&td,0);
+ srand(td.tv_usec);
+ rand_value = rand() % 100; //I know, bad practice
/* See if we want to fire an "error" */
+ retval = 0;
sum = 0;
- for (i=0; i<argc-1; i++)
+ for (i=0; i<argc-3; i++)
{
sum += percentages[i];
if ( rand_value < sum )
{
- printf("Simulated error : %d \n", retvals[i]);
- return retvals[i];
+ retval = retvals[i];
+ break;
}
}
- /* No "error" */
- return 0;
+ /* Sleep */
+ sleep(sleep_time);
+
+ /* Print result */
+ printf( name );
+ for (i=0; i<70-strlen(name); i++)
+ {
+ putchar('.');
+ }
+ printf("%d\n", retval);
+
+ return retval;
}