66b4f5f31b27b9b6e8554c5e0059a7d2d4d5dd59
[andemo] / src / demosys.c
1 #include "demosys.h"
2
3 static struct demoscreen *act_tail;
4
5 void regscr_testa(void);
6 void regscr_testb(void);
7
8 int dsys_init(const char *fname)
9 {
10         int i;
11
12         regscr_testa();
13         regscr_testb();
14
15         for(i=0; i<dsys_num_screens; i++) {
16                 if(dsys_screens[i]->init() == -1) {
17                         fprintf(stderr, "failed to initialize demo screen: %s\n", dsys_screens[i]->name);
18                         return -1;
19                 }
20         }
21
22         return 0;
23 }
24
25 void dsys_destroy(void)
26 {
27         int i;
28
29         for(i=0; i<dsys_num_screens; i++) {
30                 if(dsys_screens[i]->destroy) {
31                         dsys_screens[i]->destroy();
32                 }
33         }
34         dsys_num_screens = 0;
35 }
36
37 struct demoscreen *dsys_find_screen(const char *name)
38 {
39         int i;
40
41         for(i=0; i<dsys_num_screens; i++) {
42                 if(strcmp(dsys_screens[i]->name, name) == 0) {
43                         return dsys_screens[i];
44                 }
45         }
46         return 0;
47 }
48
49 void dsys_run_screen(struct demoscreen *scr)
50 {
51         struct demoscreen *act;
52
53         if(!scr) return;
54         if(dsys_act_scr == scr && act_tail == scr) return;
55
56         act = dsys_act_scr;
57         while(act) {
58                 if(act->stop) act->stop();
59                 act = act->next;
60         }
61         dsys_act_scr = act_tail = scr;
62         if(scr->start) scr->start();
63 }
64
65 void dsys_run(void)
66 {
67 }
68
69 void dsys_stop(void)
70 {
71 }
72
73 void dsys_seek_abs(long tm)
74 {
75 }
76
77 void dsys_seek_rel(long dt)
78 {
79 }
80
81 void dsys_seek_norm(float t)
82 {
83 }
84
85 int dsys_add_screen(struct demoscreen *scr)
86 {
87         if(!scr->name || !scr->init || !scr->draw) {
88                 fprintf(stderr, "dsys_add_screen: invalid screen\n");
89                 return -1;
90         }
91         dsys_screens[dsys_num_screens++] = scr;
92         return 0;
93 }