#include #include #include #include #include #include #include #include #include #include #include #include "commands.h" static cammy_image_color palette[4] = { { 0, 0, 0, 0 }, { 85, 85, 85, 0 }, { 171, 171, 171, 0 }, { 255, 255, 255, 0 } }; static void usage(int argc, char **argv, const char *message, ...) { if (message) { va_list args; va_start(args, message); vfprintf(stderr, message, args); va_end(args); fprintf(stderr, "\n"); } fprintf(stderr, "usage: %1$s export file.sav 1..30 output.png\n", argv[0]); exit(1); } int cammy_export(int argc, char **argv) { cammy_camera *camera; int photo = 0; cammy_image *image; if (argc < 3) { usage(argc, argv, "No save file provided"); } else if (argc < 4) { usage(argc, argv, "No photo number provided"); } else if (argc < 5) { usage(argc, argv, "No output filename provided"); } photo = atoi(argv[3]); if (photo < 1 || photo > CAMMY_CAMERA_PHOTO_COUNT) { usage(argc, argv, "Invalid photo number"); } if ((camera = cammy_camera_open(argv[2])) == NULL) { fprintf(stderr, "%s: %s: %s: %s\n", argv[0], "cammy_camera_open()", argv[2], strerror(errno)); goto error_camera_open; } if ((image = cammy_photo_export(&camera->data->photos[photo-1], CAMMY_IMAGE_BITMAP, CAMMY_IMAGE_24BPP_RGB, palette)) == NULL) { goto error_photo_export; } if (cammy_image_save(image, argv[4]) < 0) { goto error_image_save; } cammy_image_destroy(image); cammy_camera_close(camera); return 0; error_image_save: cammy_image_destroy(image); error_photo_export: cammy_camera_close(camera); error_camera_open: return 1; }