Ignore:
Timestamp:
Nov 12, 2006, 10:48:37 AM (13 years ago)
Author:
Sam Hocevar
Message:
  • Allow cacaplay to play streams and updated its manpage.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/src/cacaplay.c

    r1308 r1352  
    1616
    1717#if !defined(__KERNEL__)
    18   #include <stdio.h>
    19   #include <stdlib.h>
     18#   include <stdio.h>
     19#   include <stdlib.h>
     20#   include <sys/types.h>
     21#   include <sys/stat.h>
     22#   include <fcntl.h>
     23#   include <string.h>
     24#   include <unistd.h>
    2025#endif
    2126
     
    2530int main(int argc, char **argv)
    2631{
    27     caca_event_t ev;
    28     cucul_canvas_t *cv;
     32    cucul_canvas_t *cv, *app;
    2933    caca_display_t *dp;
     34    unsigned char *buf = NULL;
     35    long int bytes, total = 0;
     36    int fd;
    3037
    31     if(argc < 2)
     38    if(argc < 2 || !strcmp(argv[1], "-"))
    3239    {
    33         fprintf(stderr, "%s: missing argument (filename).\n", argv[0]);
    34         return 1;
     40        fd = 0; /* use stdin */
     41    }
     42    else
     43    {
     44        fd = open(argv[1], O_RDONLY);
     45        if(fd < 0)
     46        {
     47            fprintf(stderr, "%s: could not open `%s'.\n", argv[0], argv[1]);
     48            return 1;
     49        }
    3550    }
    3651
    3752    cv = cucul_create_canvas(0, 0);
    38     if(cucul_import_file(cv, argv[1], "caca") < 0)
    39     {
    40         fprintf(stderr, "%s: could not import file %s.\n", argv[0], argv[1]);
    41         return 1;
    42     }
     53    app = cucul_create_canvas(0, 0);
    4354
    4455    dp = caca_create_display(cv);
    4556
    46     caca_refresh_display(dp);
     57    for(;;)
     58    {
     59        caca_event_t ev;
     60        int ret = caca_get_event(dp, CACA_EVENT_ANY, &ev, 0);
    4761
    48     while(caca_get_event(dp, CACA_EVENT_KEY_PRESS, &ev, -1))
    49     {
    50         if(ev.data.key.ch == CACA_KEY_ESCAPE)
     62        if(ret && ev.type & CACA_EVENT_KEY_PRESS)
    5163            break;
     64
     65        bytes = cucul_import_memory(app, buf, total, "caca");
     66
     67        if(bytes > 0)
     68        {
     69            total -= bytes;
     70            memmove(buf, buf + bytes, total);
     71
     72            cucul_blit(cv, 0, 0, app, NULL);
     73            caca_refresh_display(dp);
     74        }
     75        else if(bytes == 0)
     76        {
     77            ssize_t n;
     78            buf = realloc(buf, total + 128);
     79            n = read(fd, buf + total, 128);
     80            if(n < 0)
     81            {
     82                fprintf(stderr, "%s: read error\n", argv[0]);
     83                return -1;
     84            }
     85            total += n;
     86        }
     87        else /* bytes < 0 */
     88        {
     89            fprintf(stderr, "%s: corrupted caca file\n", argv[0]);
     90            return -1;
     91        }
    5292    }
    5393
    5494    /* Clean up */
     95    close(fd);
     96
    5597    caca_free_display(dp);
    5698    cucul_free_canvas(cv);
Note: See TracChangeset for help on using the changeset viewer.