]> ruin.nu Git - popboot.git/commitdiff
Added delay time and pritty output
authorMårten Dolk <dolk@dtek.chalmers.se>
Thu, 2 Jun 2005 15:37:08 +0000 (15:37 +0000)
committerMårten Dolk <dolk@dtek.chalmers.se>
Thu, 2 Jun 2005 15:37:08 +0000 (15:37 +0000)
simprog.c

index 8311d508058dd478a96b0513026f6c5155e54432..473e0ac0655cb03ecf19b6e65bb54c41127b1517 100644 (file)
--- a/simprog.c
+++ b/simprog.c
@@ -1,6 +1,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <unistd.h>
 #include <sys/time.h>
 
 void print_help(char name[])
@@ -8,7 +9,10 @@ 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");
@@ -34,41 +38,63 @@ void parse_argv(char argv[], int *retval, int *percentage)
 
 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 )
+    {
+       printf("Argument sytax error : %s \n", argv[2]);
+       return 1;
+    }
+    
+    for (i=3; i<argc; i++)
     {
-       parse_argv(argv[i], retvals+i-1, percentages+i-1);
+       parse_argv(argv[i], retvals+i-3, percentages+i-3);
     }
 
         
     /* Get random number in interval [0,100) */
     gettimeofday(&td,0);
     srand(td.tv_usec);
-    rand_value = rand() % 100;
+    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;
 }