90
|
1 #include <iostream>
|
|
2 #include "viewer.h"
|
|
3 #include "TaskManager.h"
|
|
4 #include "error.h"
|
|
5
|
|
6 int init(void*, void*);
|
|
7 int finish(void*, void*);
|
|
8
|
|
9
|
|
10 Viewer *screen;
|
|
11 TaskManager *manager;
|
|
12
|
|
13 struct init_arg {
|
|
14 int bpp;
|
|
15 int w;
|
|
16 int h;
|
|
17 };
|
|
18
|
|
19 struct init_arg *initArg;
|
|
20
|
|
21 int init(void *r, void *w) {
|
|
22 int fd_sdl_init,fd_run;
|
|
23 HTaskPtr task_sdl_init, task_run;
|
|
24
|
|
25 __debug("[%s]\n",__FUNCTION__);
|
|
26
|
|
27 screen = new Viewer(initArg->bpp, initArg->w, initArg->h);
|
|
28
|
|
29 fd_sdl_init = manager->open("sdl_init");
|
|
30 fd_run = manager->open("run");
|
|
31
|
|
32 task_sdl_init = manager->create_task(fd_sdl_init, 0, 0, 0, NULL);
|
|
33 task_run = manager->create_task(fd_run, 0, 0, 0, NULL);
|
|
34
|
|
35 task_run->set_depend(task_sdl_init);
|
|
36
|
|
37 task_sdl_init->spawn();
|
|
38 task_run->spawn();
|
|
39
|
|
40 free(initArg);
|
|
41 return 0;
|
|
42 }
|
|
43
|
|
44 int sdl_init(void *r , void *w) {
|
|
45
|
|
46 __debug("[%s]\n", __FUNCTION__);
|
|
47 screen->sdl_init();
|
|
48 return 0;
|
|
49 }
|
|
50
|
|
51 int run(void *r, void *w) {
|
|
52
|
|
53 __debug("[%s]\n", __FUNCTION__);
|
|
54 screen->run_init();
|
|
55 return 0;
|
|
56 }
|
|
57
|
|
58 int finish(void *w, void *r)
|
|
59 {
|
|
60 __debug("[%s]\n", __FUNCTION__);
|
|
61 delete screen;
|
|
62 delete manager;
|
|
63 return 0;
|
|
64 }
|
|
65
|
|
66
|
|
67 int main(int argc, char *argv[]) {
|
|
68 manager = new TaskManager(1);
|
|
69 manager->init();
|
|
70
|
|
71 //task_initialize();
|
|
72
|
|
73 manager->set_symbol("init", (void*)init);
|
|
74 manager->set_symbol("sdl_init", (void*)sdl_init);
|
|
75 manager->set_symbol("run", (void*)run);
|
|
76 manager->set_symbol("finish", (void*)finish);
|
|
77
|
|
78 int bpp = 0;
|
|
79 int width = 640;
|
|
80 int height = 480;
|
|
81
|
|
82 for(int i = 1; argv[i]; ++i) {
|
|
83 if (strcmp(argv[i], "-bpp") == 0) {
|
|
84 bpp = atoi(argv[++i]);
|
|
85 }
|
|
86 if (strcmp(argv[i], "-width") == 0) {
|
|
87 width = atoi(argv[++i]);
|
|
88 }
|
|
89 if (strcmp(argv[i], "-height") == 0) {
|
|
90 height = atoi(argv[++i]);
|
|
91 }
|
|
92 }
|
|
93 HTaskPtr task_init;
|
|
94 int fd_init;
|
|
95 initArg = new struct init_arg;
|
|
96 initArg->bpp = bpp;
|
|
97 initArg->w = width;
|
|
98 initArg->h = height;
|
|
99
|
|
100 fd_init = manager->open("init");
|
|
101 task_init = manager->create_task(fd_init, 0, 0, 0, NULL);
|
|
102 task_init->spawn();
|
|
103 manager->run();
|
|
104 finish(NULL, NULL);
|
|
105 return 0;
|
|
106 }
|
|
107
|