src/util/main.c
author Tero Marttila <terom@fixme.fi>
Mon, 28 Dec 2009 23:15:18 +0200
changeset 8 400ddf1e7aa9
parent 7 997906f5fd2d
child 9 a31048ff76a2
permissions -rw-r--r--
pt_image_status
2
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
#include "lib/pngtile.h"
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
#include "shared/log.h"
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
#include <getopt.h>
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
#include <stdio.h>
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
#include <stdbool.h>
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     7
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     8
/**
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     9
 * Command-line options
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    10
 */
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    11
static const struct option options[] = {
6
766df7c9b90d --force-update and store palette
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    12
    { "help",           false,  NULL,   'h' },
766df7c9b90d --force-update and store palette
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    13
    { "quiet",          false,  NULL,   'q' },
766df7c9b90d --force-update and store palette
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    14
    { "verbose",        false,  NULL,   'v' },
766df7c9b90d --force-update and store palette
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    15
    { "debug",          false,  NULL,   'D' },
766df7c9b90d --force-update and store palette
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    16
    { "force-update",   false,  NULL,   'U' },
766df7c9b90d --force-update and store palette
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    17
    { 0,                0,      0,      0   }
2
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    18
};
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    19
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    20
/**
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
 * Print usage/help info on stderr
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
 */
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    23
void help (const char *argv0)
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    24
{
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    25
    fprintf(stderr, "Usage: %s [options] <image> [...]\n", argv0);
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    26
    fprintf(stderr,
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    27
        "XXX: Process some image files.\n"
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    28
        "\n"
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    29
        "\t-h, --help           show this help and exit\n"
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    30
        "\t-q, --quiet          supress informational output\n"
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    31
        "\t-v, --verbose        display more informational output\n"
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
        "\t-D, --debug          equivalent to -v\n"
6
766df7c9b90d --force-update and store palette
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    33
        "\t-U, --force-update   unconditionally update image caches\n"
2
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    34
    );
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    35
}
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    36
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    37
int main (int argc, char **argv)
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    38
{
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    39
    int opt;
6
766df7c9b90d --force-update and store palette
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    40
    bool force_update = false;
2
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    41
    
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    42
    // parse arguments
6
766df7c9b90d --force-update and store palette
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    43
    while ((opt = getopt_long(argc, argv, "hqvDU", options, NULL)) != -1) {
2
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    44
        switch (opt) {
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    45
            case 'h':
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    46
                // display help
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    47
                help(argv[0]);
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    48
                
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    49
                return EXIT_SUCCESS;
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    50
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    51
            case 'q':
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    52
                // supress excess log output
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    53
                set_log_level(LOG_WARN);
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    54
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    55
                break;
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    56
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    57
            case 'v':
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    58
            case 'D':
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    59
                // display additional output
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    60
                set_log_level(LOG_DEBUG);
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    61
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    62
                break;
6
766df7c9b90d --force-update and store palette
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    63
            
766df7c9b90d --force-update and store palette
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    64
            case 'U':
766df7c9b90d --force-update and store palette
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    65
                // force update of image caches
766df7c9b90d --force-update and store palette
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    66
                force_update = true;
766df7c9b90d --force-update and store palette
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    67
                
766df7c9b90d --force-update and store palette
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
    68
                break;
2
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    69
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    70
            case '?':
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    71
                // useage error
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    72
                help(argv[0]);
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    73
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    74
                return EXIT_FAILURE;
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    75
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    76
            default:
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    77
                // getopt???
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    78
                FATAL("getopt_long returned unknown code %d", opt);
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    79
        }
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    80
    }
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    81
    
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    82
    // end-of-arguments?
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    83
    if (!argv[optind])
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    84
        EXIT_WARN(EXIT_FAILURE, "No images given");
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    85
    
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    86
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    87
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    88
    struct pt_ctx *ctx = NULL;
5
4b440fa03183 move stale-update logic to main
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
    89
    struct pt_image *image = NULL;
8
400ddf1e7aa9 pt_image_status
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
    90
    enum pt_cache_status status;
2
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    91
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    92
    log_debug("Processing %d images...", argc - optind);
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    93
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    94
    for (int i = optind; i < argc; i++) {
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    95
        const char *img_path = argv[i];
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    96
5
4b440fa03183 move stale-update logic to main
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
    97
        log_debug("Loading image from: %s...", img_path);
2
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    98
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    99
        // open
6
766df7c9b90d --force-update and store palette
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
   100
        if (pt_image_open(&image, ctx, img_path, PT_IMG_WRITE)) {
2
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   101
            log_errno("pt_image_open: %s", img_path);
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   102
            continue;
5
4b440fa03183 move stale-update logic to main
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   103
        }
2
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   104
5
4b440fa03183 move stale-update logic to main
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   105
        log_info("Opened image at: %s", img_path);
4b440fa03183 move stale-update logic to main
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   106
        
4b440fa03183 move stale-update logic to main
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   107
        // check if stale
8
400ddf1e7aa9 pt_image_status
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   108
        if ((status = pt_image_status(image)) < 0) {
400ddf1e7aa9 pt_image_status
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   109
            log_errno("pt_image_status: %s", img_path);
5
4b440fa03183 move stale-update logic to main
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   110
            goto error;
4b440fa03183 move stale-update logic to main
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   111
        }
4b440fa03183 move stale-update logic to main
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   112
        
4b440fa03183 move stale-update logic to main
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   113
        // update if stale
8
400ddf1e7aa9 pt_image_status
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   114
        if (status != PT_CACHE_FRESH || force_update) {
400ddf1e7aa9 pt_image_status
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   115
            if (status == PT_CACHE_NONE)
400ddf1e7aa9 pt_image_status
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   116
                log_debug("Image cache is missing");
400ddf1e7aa9 pt_image_status
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   117
400ddf1e7aa9 pt_image_status
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   118
            else if (status == PT_CACHE_STALE)
400ddf1e7aa9 pt_image_status
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   119
                log_debug("Image cache is stale");
400ddf1e7aa9 pt_image_status
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   120
400ddf1e7aa9 pt_image_status
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   121
            else if (status == PT_CACHE_FRESH)
400ddf1e7aa9 pt_image_status
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   122
                log_debug("Image cache is fresh");
400ddf1e7aa9 pt_image_status
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   123
400ddf1e7aa9 pt_image_status
Tero Marttila <terom@fixme.fi>
parents: 7
diff changeset
   124
            log_debug("Updating image cache...");
2
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   125
5
4b440fa03183 move stale-update logic to main
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   126
            if (pt_image_update(image)) {
4b440fa03183 move stale-update logic to main
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   127
                log_warn_errno("pt_image_update: %s", img_path);
4b440fa03183 move stale-update logic to main
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   128
            }
4b440fa03183 move stale-update logic to main
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   129
6
766df7c9b90d --force-update and store palette
Tero Marttila <terom@fixme.fi>
parents: 5
diff changeset
   130
            log_info("Updated image cache");
2
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   131
        }
5
4b440fa03183 move stale-update logic to main
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   132
7
997906f5fd2d mmap header, implement pt_image_info (post-update)
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
   133
        // show info
997906f5fd2d mmap header, implement pt_image_info (post-update)
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
   134
        const struct pt_image_info *img_info;
997906f5fd2d mmap header, implement pt_image_info (post-update)
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
   135
        
997906f5fd2d mmap header, implement pt_image_info (post-update)
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
   136
        if (pt_image_info(image, &img_info))
997906f5fd2d mmap header, implement pt_image_info (post-update)
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
   137
            log_warn_errno("pt_image_info: %s", img_path);
997906f5fd2d mmap header, implement pt_image_info (post-update)
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
   138
997906f5fd2d mmap header, implement pt_image_info (post-update)
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
   139
        else
997906f5fd2d mmap header, implement pt_image_info (post-update)
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
   140
            log_info("\tImage dimensions: %zux%zu", img_info->width, img_info->height);
997906f5fd2d mmap header, implement pt_image_info (post-update)
Tero Marttila <terom@fixme.fi>
parents: 6
diff changeset
   141
5
4b440fa03183 move stale-update logic to main
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   142
        // done
4b440fa03183 move stale-update logic to main
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   143
4b440fa03183 move stale-update logic to main
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   144
error:
4b440fa03183 move stale-update logic to main
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   145
        // cleanup
4b440fa03183 move stale-update logic to main
Tero Marttila <terom@fixme.fi>
parents: 2
diff changeset
   146
        pt_image_destroy(image);
2
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   147
    }
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   148
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   149
    // XXX: done
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   150
    return 0;
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   151
}
05de54150a4c up to a test client
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
   152