Ignore:
Timestamp:
Oct 8, 2006, 2:14:13 PM (14 years ago)
Author:
Sam Hocevar
Message:
  • Break everything. Temporarily. Only the term output works.
  • Allow to read from stdin.
  • Wrap at terminal width (currently letter-wrap, not word-wrap).
File:
1 edited

Legend:

Unmodified
Added
Removed
  • toilet/trunk/src/main.c

    r1150 r1193  
    3737#include "filters.h"
    3838
    39 char const *toilet_export = "utf8";
    40 char const *toilet_font = "mono9";
    41 char const *toilet_dir = "/usr/share/figlet/";
    42 
    4339static void version(void);
    4440#if defined(HAVE_GETOPT_H)
     
    4844int main(int argc, char *argv[])
    4945{
    50     cucul_canvas_t *cv;
     46    context_t struct_cx;
     47    context_t *cx = &struct_cx;
     48
    5149    cucul_buffer_t *buffer;
    5250
    53     uint32_t *string = NULL;
    54     unsigned int length;
    55 
    56     int i;
     51    int i, j;
    5752
    5853    unsigned int flag_gay = 0;
    5954    unsigned int flag_metal = 0;
    60     unsigned int term_width = 80;
    6155    int infocode = -1;
     56
     57    cx->export = "utf8";
     58    cx->font = "mono9";
     59    cx->dir = "/usr/share/figlet/";
     60
     61    cx->term_width = 80;
    6262
    6363#if defined(HAVE_GETOPT_H)
     
    104104            return 0;
    105105        case 'f': /* --font */
    106             toilet_font = optarg;
     106            cx->font = optarg;
    107107            break;
    108108        case 'd': /* --directory */
    109             toilet_dir = optarg;
     109            cx->dir = optarg;
    110110            break;
    111111        case 'g': /* --gay */
     
    116116            break;
    117117        case 'w': /* --width */
    118             term_width = atoi(optarg);
     118            cx->term_width = atoi(optarg);
    119119            break;
    120120        case 't': /* --termwidth */
     
    126126                ioctl(2, TIOCGWINSZ, &ws) != -1 ||
    127127                ioctl(0, TIOCGWINSZ, &ws) != -1) && ws.ws_col != 0)
    128                 term_width = ws.ws_col;
     128                cx->term_width = ws.ws_col;
    129129#endif
    130130            break;
    131131        }
    132132        case 'i': /* --irc */
    133             toilet_export = "irc";
     133            cx->export = "irc";
    134134            break;
    135135        case '?':
     
    158158            return 0;
    159159        case 2:
    160             printf("%s\n", toilet_dir);
     160            printf("%s\n", cx->dir);
    161161            return 0;
    162162        case 3:
    163             printf("%s\n", toilet_font);
     163            printf("%s\n", cx->font);
    164164            return 0;
    165165        case 4:
    166             printf("%u\n", term_width);
     166            printf("%u\n", cx->term_width);
    167167            return 0;
    168168        default:
     
    170170    }
    171171
     172#if 0
    172173    if(optind >= argc)
    173     {
    174         printf("%s: too few arguments\n", argv[0]);
    175         printf(MOREINFO, argv[0]);
    176         return 1;
    177     }
    178 
    179     /* Load rest of commandline into a UTF-32 string */
    180     for(i = optind, length = 0; i < argc; i++)
    181     {
    182         unsigned int k, guessed_len, real_len;
    183 
    184         guessed_len = strlen(argv[i]);
    185 
    186         if(i > optind)
    187             string[length++] = (uint32_t)' ';
    188 
    189         string = realloc(string, (length + guessed_len + 1) * 4);
    190 
    191         for(k = 0, real_len = 0; k < guessed_len; real_len++)
    192         {
    193             unsigned int char_len;
    194 
    195             string[length + real_len] =
    196                 cucul_utf8_to_utf32(argv[i] + k, &char_len);
    197 
    198             k += char_len;
    199         }
    200 
    201         length += real_len;
    202     }
    203 
     174#endif
     175
     176#if 0
    204177    /* Render string to canvas */
    205     if(!strcasecmp(toilet_font, "mono9"))
     178    if(!strcasecmp(cx->font, "mono9"))
    206179    {
    207180        cv = render_big(string, length);
    208181        filter_autocrop(cv);
    209182    }
    210     else if(!strcasecmp(toilet_font, "term"))
     183    else if(!strcasecmp(cx->font, "term"))
    211184        cv = render_tiny(string, length);
    212185    else
    213         cv = render_figlet(string, length);
    214 
    215     free(string);
    216 
    217     if(!cv)
    218         return -1;
     186        cv = render_figlet(cx, string, length);
     187#endif
     188
     189    init_tiny(cx);
     190
     191    if(optind >= argc)
     192    {
     193        char buf[10];
     194        unsigned int len;
     195        uint32_t ch;
     196
     197        i = 0;
     198
     199        /* Read from stdin */
     200        while(!feof(stdin))
     201        {
     202            buf[i++] = getchar();
     203            buf[i] = '\0';
     204
     205            ch = cucul_utf8_to_utf32(buf, &len);
     206
     207            if(!len)
     208                continue;
     209
     210            cx->feed(cx, ch);
     211            i = 0;
     212        }
     213    }
     214    else for(i = optind; i < argc; i++)
     215    {
     216        /* Read from commandline */
     217        unsigned int len;
     218
     219        if(i != optind)
     220            cx->feed(cx, ' ');
     221
     222        for(j = 0; argv[i][j];)
     223        {
     224            cx->feed(cx, cucul_utf8_to_utf32(argv[i] + j, &len));
     225            j += len;
     226        }
     227    }
     228
     229    cx->end(cx);
    219230
    220231    /* Apply optional effects to our string */
    221232    if(flag_metal)
    222         filter_metal(cv);
     233        filter_metal(cx->cv);
    223234    if(flag_gay)
    224         filter_gay(cv);
     235        filter_gay(cx->cv);
    225236
    226237    /* Output char */
    227     buffer = cucul_export_canvas(cv, toilet_export);
     238    buffer = cucul_export_canvas(cx->cv, cx->export);
    228239    fwrite(cucul_get_buffer_data(buffer),
    229240           cucul_get_buffer_size(buffer), 1, stdout);
    230241    cucul_free_buffer(buffer);
    231242
    232     cucul_free_canvas(cv);
     243    cucul_free_canvas(cx->cv);
    233244
    234245    return 0;
    235246}
    236247
     248#if defined(HAVE_GETOPT_H)
     249#   define USAGE \
     250    "Usage: toilet [ -ghimtv ] [ -d fontdirectory ]\n" \
     251    "              [ -f fontfile ] [ -w outputwidth ]\n" \
     252    "              [ -I infocode ] [ message ]\n"
     253#else
     254#   define USAGE ""
     255#endif
     256
    237257static void version(void)
    238258{
    239     printf("TOIlet Copyright 2006 Sam Hocevar %s\n", VERSION);
    240     printf("Internet: <sam@zoy.org> Version: 0, date: 21 Sep 2006\n");
    241     printf("\n");
     259    printf(
     260    "TOIlet Copyright 2006 Sam Hocevar\n"
     261    "Internet: <sam@zoy.org> Version: %s, date: %s\n"
     262    "\n"
     263    "TOIlet, along with the various TOIlet fonts and documentation, may be\n"
     264    "freely copied and distributed.\n"
     265    "\n"
     266    "If you use TOIlet, please send an e-mail message to <sam@zoy.org>.\n"
     267    "\n"
     268    "The latest version of TOIlet is available from the web site,\n"
     269    "        http://libcaca.zoy.org/toilet.html\n"
     270    "\n"
     271    USAGE,
     272    VERSION, DATE);
    242273}
    243274
     
    245276static void usage(void)
    246277{
    247     printf("Usage: toilet [ -ghimtv ] [ -d fontdirectory ]\n");
    248     printf("              [ -f fontfile ] [ -w outputwidth ]\n");
    249     printf("              [ -I infocode ] [ message ]\n");
     278    printf(USAGE);
    250279#   ifdef HAVE_GETOPT_LONG
    251280    printf("  -f, --font <fontfile>    select the font\n");
Note: See TracChangeset for help on using the changeset viewer.