/* Copyright (C) 2019 June McEnroe * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ #define _XOPEN_SOURCE #include #include #include #include #include #include #include #include "cards.h" int main(int argc, char *argv[]) { bool freecell = false; enum Cards_Flag flags = 0; bool invert = false; int opt; while (0 < (opt = getopt(argc, argv, "abfik"))) { switch (opt) { break; case 'a': flags |= Cards_AlphaCorners; break; case 'b': flags |= Cards_BlackBorders; break; case 'f': freecell = true; break; case 'i': invert = true; break; case 'k': flags |= Cards_ColorKey; break; default: return EX_USAGE; } } struct SDL_RWops *rw; if (optind < argc) { rw = SDL_RWFromFile(argv[optind], "rb"); } else { rw = SDL_RWFromFP(stdin, SDL_FALSE); } if (!rw) errx(EX_NOINPUT, "SDL_RWFromFile: %s", SDL_GetError()); SDL_Surface *surfaces[Cards_CardCount]; if (freecell) { int error = Cards_LoadFreeCell( surfaces, Cards_CardCount, rw, flags ); if (error) errx(EX_DATAERR, "Cards_LoadFreeCell: %s", SDL_GetError()); } else { int error = Cards_LoadCards(surfaces, Cards_CardCount, rw, flags); if (error) errx(EX_DATAERR, "Cards_LoadCards: %s", SDL_GetError()); } SDL_RWclose(rw); for (size_t i = 0; i < Cards_CardCount; ++i) { if (!surfaces[i]) continue; if (invert) { int error = Cards_InvertSurface(surfaces[i]); if (error) { errx(EX_DATAERR, "Cards_InvertSurface: %s", SDL_GetError()); } } char name[sizeof("00.bmp")]; snprintf(name, sizeof(name), "%02zu.bmp", i); int error = SDL_SaveBMP(surfaces[i], name); if (error) errx(EX_CANTCREAT, "SDL_SaveBMP: %s", SDL_GetError()); } }