/* * 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 "output.h" #include "text.h" static void usage(FILE *stream, const char *program_name) { fprintf(stream, _("Usage: %s [-f ] [-w ] [-h ] " " \n"), program_name); fputs(_(" -f name of font face, or \"list\" to list " "available font face names\n"), stream); fputs(_(" -w width of image in character columns\n"), stream); fputs(_(" -h height of image in character rows\n"), stream); } 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; set_program_name(argv[0]); #if defined(ENABLE_NLS) && ENABLE_NLS bindtextdomain(GETTEXT_PACKAGE, LOCALEDIR); #if defined(HAVE_BIND_TEXTDOMAIN_CODESET) && HAVE_BIND_TEXTDOMAIN_CODESET bind_textdomain_codeset(PACKAGE, "UTF-8"); #endif textdomain(PACKAGE); setlocale(LC_ALL, ""); #endif font = NULL; w = 0; h = 0; while ((opt = getopt(argc, argv, "f:w:h:")) != -1) { switch (opt) { case 'f': if (strcmp(optarg, "list") == 0) { font_list(stdout); return 0; } font = font_find(optarg); if (!font) { error(_("Font \"%s\" not found"), optarg); usage(stderr, argv[0]); return 1; } break; case 'w': w = strtol(optarg, &end, 10); if (*optarg == '\0' || *end != '\0' || w <= 0) { error(_("Width must be an integer " "greater than 0" )); usage(stderr, argv[0]); return 1; } break; case 'h': h = strtol(optarg, &end, 10); if (*optarg == '\0' || *end != '\0' || h <= 0) { error(_("Height must be an integer " "greater than 0" )); usage(stderr, argv[0]); return 1; } break; default: usage(stderr, argv[0]); 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) { error(_("Error: Cannot open \"%s\" for reading"), 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; }