Explorar el Código

* Allow cacaplay to play streams and updated its manpage.

tags/v0.99.beta14
Sam Hocevar sam hace 18 años
padre
commit
35f77b6e06
Se han modificado 2 ficheros con 65 adiciones y 23 borrados
  1. +7
    -7
      doc/cacaplay.1
  2. +58
    -16
      src/cacaplay.c

+ 7
- 7
doc/cacaplay.1 Ver fichero

@@ -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 Ver fichero

@@ -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);



Cargando…
Cancelar
Guardar