tadded simulation listing if sphere_status is run without arguments - sphere - GPU-based 3D discrete element method algorithm with optional fluid coupling
 (HTM) git clone git://src.adamsgaard.dk/sphere
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) LICENSE
       ---
 (DIR) commit 59a52a5999acdcf3c4235c985ca350f0aae79625
 (DIR) parent ab5356655fac61353b4b0183aa4596dcb17dbb5c
 (HTM) Author: Anders Damsgaard <anders.damsgaard@geo.au.dk>
       Date:   Thu,  8 May 2014 10:33:02 +0200
       
       added simulation listing if sphere_status is run without arguments
       
       Diffstat:
         M src/sphere_status.c                 |      49 ++++++++++++++++++++++++-------
       
       1 file changed, 38 insertions(+), 11 deletions(-)
       ---
 (DIR) diff --git a/src/sphere_status.c b/src/sphere_status.c
       t@@ -1,8 +1,10 @@
        #include <stdio.h>
        #include <unistd.h>
        #include <string.h>
       +#include <sys/types.h>
       +#include <dirent.h>
        
       -int print_usage(char* argv0, int return_status);
       +int print_usage(FILE* stream, char* argv0, int return_status);
        
        int main(int argc, char *argv[])
        {
       t@@ -11,16 +13,39 @@ int main(int argc, char *argv[])
            char *cwd;
            cwd = getcwd(0, 0);
            if (!cwd) {  // Terminate program execution if path is not obtained
       -        fprintf(stderr, "getcwd failed");
       -        return 1; // Return unsuccessful exit status
       +        perror("Could not read path to current workind directory "
       +                "(getcwd failed)");
       +        return 1;
            }
        
       -    // Simulation name/ID read from first input argument
       -    if (argc != 2)
       -        return print_usage(argv[0], 1);
       +    if (argc == 1) {
       +        DIR *dir;
       +        struct dirent *ent;
       +        char outputdir[1000];
       +        char* dotpos;
       +        sprintf(outputdir, "%s/output/", cwd);
       +        if ((dir = opendir(outputdir)) != NULL) {
       +            puts("Simulations with the following ID's are found in the "
       +                    "./output/ folder:");
       +
       +            while ((ent = readdir(dir)) != NULL) {
       +                if ((dotpos = strstr(ent->d_name, ".status.dat")) != NULL) {
       +                    *dotpos = '\0';
       +                    printf("\t%s\n", ent->d_name);
       +                }
       +            }
       +            closedir(dir);
       +        } else {
       +            fprintf(stderr, "Error: could not open directory: %s\n", outputdir);
       +            return 1;
       +        }
       +        return 0;
        
       -    if (strcmp(argv[1], "-h") == 0 || strcmp(argv[1], "--help") == 0)
       -        return print_usage(argv[0], 0);
       +    } else if (argc != 2) {
       +        return print_usage(stderr, argv[0], 1);
       +    } else if (strcmp(argv[1], "-h") == 0 || strcmp(argv[1], "--help") == 0) {
       +        return print_usage(stdout, argv[0], 0);
       +    }
        
            char *sim_name = argv[1];
        
       t@@ -56,10 +81,12 @@ int main(int argc, char *argv[])
            }
        }
        
       -int print_usage(char* argv0, int return_status)
       +int print_usage(FILE* stream, char* argv0, int return_status)
        {
       -    fprintf(stderr, "You need to specify the simulation ID as an input "
       -            "parameter, e.g.\n%s particle_test\n", argv0);
       +    fprintf(stream, "sphere simulation status checker. Usage:\n"
       +            "%s [simulation id]\n"
       +            "If the simulation id isn't specified, a list of simulations \n"
       +            "found in the ./output/ folder will be shown\n", argv0);
            return return_status;
        }