summaryrefslogtreecommitdiff
path: root/examples/playit-null.c
blob: 9a80b864b08c2715b7a53bc5140d198922e8795e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <stdio.h>
#include <stdlib.h>

#include "fmt.h"
#include "sndfile.h"

/*
 * gcc -O2 -o playit-null playit-null.c -I.. -I../src/include -DHAVE_CONFIG_H -lm -s ../src/libplayit.a
 */

song_t * song_load_it(const char *file)
{
	slurp_t	*s;
	song_t	*song;

	s = slurp(file, NULL, 0);
	if (!s) {
		printf("failed to open \"%s\"\n", file);
		goto _fail;
	}

	song = csf_allocate();
	if (!song) {
		printf("failed to allocate song\n");
		goto _fail_slurp;
	}

	if (fmt_it_load_song(song, s, 0) != LOAD_SUCCESS)
		goto _fail_song;

	unslurp(s);

	return song;

_fail_song:
	csf_free(song);
_fail_slurp:
	unslurp(s);
_fail:
	return NULL;
}


int main(int argc, char *argv[])
{
	song_t	*song;
	uint8_t	buf[8192];
	int	len;

	if (argc != 2) {
		printf("usage: %s song.it\n", argv[0]);
		goto _fail;
	}

	song = song_load_it(argv[1]);
	if (!song) {
		printf("failed to load song!\n");
		goto _fail;
	}

	csf_set_current_order(song, 0);
	song->repeat_count = 0;
	song->buffer_count = 0;
	song->stop_at_order = -1;
	song->stop_at_row = -1;
	song->flags &= ~(SONG_PAUSED | SONG_PATTERNLOOP | SONG_ENDREACHED);
	csf_reset_playmarks(song);

	while ((len = csf_read(song, buf, sizeof(buf))))
		printf("mixed %i bytes\n", len);

	return EXIT_SUCCESS;

_fail:
	return EXIT_FAILURE;
}
© All Rights Reserved