/* * Program entry point * * Copyright (C) 2019 Patrick McDermott * * This file is part of fbcon2png. * * fbcon2png is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * fbcon2png 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with fbcon2png. If not, see . */ #include #include #include #include "font.h" #include "i18n.h" #include "image.h" #include "text.h" int main(int argc, char **argv) { struct font *font; int w; int h; int opt; char *end; const char *input; const char *output; FILE *fp; struct text *text; struct image *image; font = NULL; w = 0; h = 0; while ((opt = getopt(argc, argv, "f:w:h:")) != -1) { switch (opt) { case 'f': font = font_find(optarg); if (!font) { printf(_("Font \"%s\" not found\n"), optarg); return 1; } break; case 'w': w = strtol(optarg, &end, 10); if (*optarg == '\0' || *end != '\0' || w <= 0) { printf(_("Width must be an integer " "greater than " "0\n")); return 1; } break; case 'h': h = strtol(optarg, &end, 10); if (*optarg == '\0' || *end != '\0' || h <= 0) { printf(_("Height must be an integer " "greater than " "0\n")); return 1; } break; default: printf(_("Invalid option\n")); return 1; } } argc -= optind; if (argc != 2) { return 1; } if (!font) { font = font_default(); } input = argv[optind++]; output = argv[optind++]; if (strcmp(input, "-") != 0) { fp = fopen(input, "r"); if (!fp) { printf(_("Error: Cannot open \"%s\" for reading\n"), input); return 1; } } else { fp = stdin; } text = text_new(fp); if (fp != stdin) { fclose(fp); } if (w > 0) { text_set_width(text, w); } if (h > 0) { text_set_height(text, h); } image = image_new(output); image_render(image, text, font); text_destroy(&text); image_destroy(&image); return 0; }