Procházet zdrojové kódy

* Allow cacaplay to play streams and updated its manpage.

tags/v0.99.beta14
Sam Hocevar sam před 18 roky
rodič
revize
35f77b6e06
2 změnil soubory, kde provedl 65 přidání a 23 odebrání
  1. +7
    -7
      doc/cacaplay.1
  2. +58
    -16
      src/cacaplay.c

+ 7
- 7
doc/cacaplay.1 Zobrazit soubor

@@ -12,14 +12,14 @@ program by setting the
environment variable to
.B "raw"
and storing the program's standard output.
.SH EXAMPLE
cacaplay file.caca
.SH BUGS
As of now,

If no file argument is provided or '\-' is used,
.B cacaplay
can only play single-image canvases, rendering it pretty useless. See
.B cacaserver
for a more usable alternative.
will read its data from the standard input.
.SH EXAMPLES
cacaplay file.caca

CACA_DRIVER=raw CACA_GEOMETRY=80x32 cacademo | cacaplay
.SH SEE ALSO
cacaserver(1)
.SH AUTHOR


+ 58
- 16
src/cacaplay.c Zobrazit soubor

@@ -15,8 +15,13 @@
#include "common.h"

#if !defined(__KERNEL__)
#include <stdio.h>
#include <stdlib.h>
# include <stdio.h>
# include <stdlib.h>
# include <sys/types.h>
# include <sys/stat.h>
# include <fcntl.h>
# include <string.h>
# include <unistd.h>
#endif

#include "cucul.h"
@@ -24,34 +29,71 @@

int main(int argc, char **argv)
{
caca_event_t ev;
cucul_canvas_t *cv;
cucul_canvas_t *cv, *app;
caca_display_t *dp;
unsigned char *buf = NULL;
long int bytes, total = 0;
int fd;

if(argc < 2)
if(argc < 2 || !strcmp(argv[1], "-"))
{
fprintf(stderr, "%s: missing argument (filename).\n", argv[0]);
return 1;
fd = 0; /* use stdin */
}

cv = cucul_create_canvas(0, 0);
if(cucul_import_file(cv, argv[1], "caca") < 0)
else
{
fprintf(stderr, "%s: could not import file %s.\n", argv[0], argv[1]);
return 1;
fd = open(argv[1], O_RDONLY);
if(fd < 0)
{
fprintf(stderr, "%s: could not open `%s'.\n", argv[0], argv[1]);
return 1;
}
}

dp = caca_create_display(cv);
cv = cucul_create_canvas(0, 0);
app = cucul_create_canvas(0, 0);

caca_refresh_display(dp);
dp = caca_create_display(cv);

while(caca_get_event(dp, CACA_EVENT_KEY_PRESS, &ev, -1))
for(;;)
{
if(ev.data.key.ch == CACA_KEY_ESCAPE)
caca_event_t ev;
int ret = caca_get_event(dp, CACA_EVENT_ANY, &ev, 0);

if(ret && ev.type & CACA_EVENT_KEY_PRESS)
break;

bytes = cucul_import_memory(app, buf, total, "caca");

if(bytes > 0)
{
total -= bytes;
memmove(buf, buf + bytes, total);

cucul_blit(cv, 0, 0, app, NULL);
caca_refresh_display(dp);
}
else if(bytes == 0)
{
ssize_t n;
buf = realloc(buf, total + 128);
n = read(fd, buf + total, 128);
if(n < 0)
{
fprintf(stderr, "%s: read error\n", argv[0]);
return -1;
}
total += n;
}
else /* bytes < 0 */
{
fprintf(stderr, "%s: corrupted caca file\n", argv[0]);
return -1;
}
}

/* Clean up */
close(fd);

caca_free_display(dp);
cucul_free_canvas(cv);



Načítá se…
Zrušit
Uložit