changeset 619:278db3ca751d draft

RenewTask removal
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sun, 15 Nov 2009 02:02:30 +0900
parents 58417006268c
children 51d2ce7946e3
files Renderer/Engine/Makefile.macosx Renderer/Engine/lindaapi.cc Renderer/Engine/lindaapi.h Renderer/Engine/spe/DrawSpan.cc Renderer/Engine/task/DrawSpan.cc Renderer/Test/writer.c TaskManager/Cell/CellTaskManagerImpl.cc TaskManager/Cell/spe/SpeTaskManagerImpl.cc TaskManager/Cell/spe/SpeTaskManagerImpl.h TaskManager/Cell/spe/main.cc TaskManager/ChangeLog TaskManager/Fifo/FifoTaskManagerImpl.cc TaskManager/kernel/ppe/TaskManager.cc TaskManager/kernel/ppe/TaskManager.h TaskManager/kernel/ppe/TaskManagerImpl.cc TaskManager/kernel/ppe/TaskManagerImpl.h TaskManager/kernel/schedule/SchedNop2Ready.cc TaskManager/kernel/schedule/SchedTask.cc TaskManager/kernel/schedule/SchedTask.h TaskManager/kernel/schedule/SchedTaskList.cc TaskManager/kernel/schedule/SchedTaskManager.cc TaskManager/kernel/schedule/SchedTaskManager.h TaskManager/kernel/schedule/Scheduler.cc TaskManager/kernel/schedule/Scheduler.h example/HelloWorld/Makefile.def example/MemList/Makefile.macosx example/MemList/main.cc example/basic/Makefile.macosx example/basic/main.cc example/cube/CubeSceneGraph.cpp example/cube/CubeSceneGraph.h example/cube/CubeTask.cpp example/cube/CubeTask.h example/cube/RenderingEngine.cpp example/cube/RenderingEngine.h example/cube/main.cpp example/dependency_task/Makefile.macosx example/get_segment/Makefile.macosx example/mainMem/Makefile.macosx example/many_task/Makefile.macosx example/post_function/Makefile.macosx example/post_function/main.cc example/renew_task/Makefile.macosx example/renew_task/README example/renew_task/main.cc example/renew_task/ppe/Renew1.cc example/renew_task/ppe/Renew1.h example/renew_task/ppe/Renew2.cc example/renew_task/ppe/Renew2.h example/renew_task/ppe/Renew3.cc example/renew_task/ppe/RenewStart.cc example/scenegraph/xml/Makefile example/scenegraph/xml/Makefile.cell example/scenegraph/xml/Makefile.def example/scenegraph/xml/Makefile.linux example/scenegraph/xml/Makefile.macosx example/scenegraph/xml/sg/kanji_ki.png example/scenegraph/xml/sg/player_leftmove.png example/scenegraph/xml/sg/redbomb_anim_0.png example/scenegraph/xml/sg/redbomb_anim_6.png example/scenegraph/xml/sg/sg-test.blend example/scenegraph/xml/sg/sg-test.blend1 example/scenegraph/xml/sg/sg-test.h example/scenegraph/xml/sg/sg-test.xml example/scenegraph/xml/sg/sg-test2.blend example/scenegraph/xml/sg/sg-test2.blend1 example/scenegraph/xml/sg/sg-test2.h example/scenegraph/xml/sg/sg-test2.xml example/scenegraph/xml/task/collision.cpp example/scenegraph/xml/task/collision.h example/scenegraph/xml/task/collision_task1.cpp example/scenegraph/xml/task/move.cpp example/scenegraph/xml/task/move.h example/scenegraph/xml/task/move_task1.cpp example/scenegraph/xml/task/tree_walk_collision.cpp example/scenegraph/xml/task/tree_walk_move.cpp example/scenegraph/xml/tasks.xml example/scenegraph/xml/xml.cpp example/share_task/Makefile.macosx example/task_queue/Makefile.macosx example/task_queue/main.cc example/word_count/Makefile.macosx example/word_count3/Makefile.macosx example/word_count3/main.cc
diffstat 84 files changed, 306 insertions(+), 2518 deletions(-) [+]
line wrap: on
line diff
--- a/Renderer/Engine/Makefile.macosx	Sat Nov 14 21:17:02 2009 +0900
+++ b/Renderer/Engine/Makefile.macosx	Sun Nov 15 02:02:30 2009 +0900
@@ -48,7 +48,6 @@
 
 clean:
 	rm -f $(TARGET) $(OBJS) $(TASK_OBJS)
-	rm -f *~ \#*
-	rm -f SGList.h SGList.cc
+	rm -f *~ \#* *.o
 
 -include depend.inc
--- a/Renderer/Engine/lindaapi.cc	Sat Nov 14 21:17:02 2009 +0900
+++ b/Renderer/Engine/lindaapi.cc	Sun Nov 15 02:02:30 2009 +0900
@@ -156,7 +156,7 @@
       失敗すると -1 を返す。
 /-------------------------------------------------------------------*/
 int
-open_linda(char * hostname, int port){
+open_linda(const char * hostname, int port){
     int fd;
     struct hostent *hoste;
     struct sockaddr_in serv_addr;
@@ -213,7 +213,7 @@
 }
 
 int
-open_linda_java(char * hostname, int port){
+open_linda_java(const char * hostname, int port){
     int fd;
     struct hostent *hoste;
     struct sockaddr_in serv_addr;
--- a/Renderer/Engine/lindaapi.h	Sat Nov 14 21:17:02 2009 +0900
+++ b/Renderer/Engine/lindaapi.h	Sun Nov 15 02:02:30 2009 +0900
@@ -62,8 +62,8 @@
 ----------------------------------------------------------------------*/
 
 extern void init_linda(void);
-extern int open_linda(char *hostname, int port);
-extern int open_linda_java(char *hostname, int port);
+extern int open_linda(const char *hostname, int port);
+extern int open_linda_java(const char *hostname, int port);
 extern int close_linda(int tspace_id);
 
 extern void psx_free(void*);
--- a/Renderer/Engine/spe/DrawSpan.cc	Sat Nov 14 21:17:02 2009 +0900
+++ b/Renderer/Engine/spe/DrawSpan.cc	Sun Nov 15 02:02:30 2009 +0900
@@ -417,7 +417,7 @@
     };
 
     // uint32 display   = smanager->get_param(0);
-    int screen_width = smanager->get_param(1);
+    // int screen_width = smanager->get_param(1);
     int rangex_start = smanager->get_param(2);
     int rangex_end   = smanager->get_param(3);
 
--- a/Renderer/Engine/task/DrawSpan.cc	Sat Nov 14 21:17:02 2009 +0900
+++ b/Renderer/Engine/task/DrawSpan.cc	Sun Nov 15 02:02:30 2009 +0900
@@ -11,6 +11,7 @@
 #include "Tapestry.h"
 #include "SpanPack.h"
 
+#define BIGENDIAN 1
 
 SchedDefineTask(DrawSpan);
 
@@ -174,7 +175,11 @@
 
     int color = get_rgb(tex_x, tex_y, tile);
     /*下位4bitを抽出*/
+#if BIGENDIAN
     int alpha = color & 0x000000ff;
+#else
+    int alpha = color & 0xff000000;
+#endif
     /*完全に透けているか判断*/
     int flag = (alpha != 0);
 
@@ -361,10 +366,17 @@
     float inner_product;
 
     // 引数で受け取った color の rgb 情報の抜き出し
+#if BIGENDIAN
     rgb[0] = (color & 0xff000000) >> 24;
     rgb[1] = (color & 0x00ff0000) >> 16;
     rgb[2] = (color & 0x0000ff00) >> 8;
     rgb[3] = (color & 0x000000ff);
+#else
+    rgb[3] = (color & 0xff000000) >> 24;
+    rgb[2] = (color & 0x00ff0000) >> 16;
+    rgb[1] = (color & 0x0000ff00) >> 8;
+    rgb[0] = (color & 0x000000ff);
+#endif
 
     // 法線ベクトルと光源ベクトルとの内積をとる
     inner_product = innerProduct(normal_vector,light_vector);
@@ -377,7 +389,11 @@
     rgb[2] = (unsigned char)(rgb[2]*inner_product*flag);
 
     //計算した rgb を light_rgb にまとめる。
+#if BIGENDIAN
     light_rgb = (rgb[0] << 24) + (rgb[1] << 16) + (rgb[2] << 8) + (rgb[3]);
+#else
+    light_rgb = (rgb[3] << 24) + (rgb[2] << 16) + (rgb[1] << 8) + (rgb[0]);
+#endif
 
     return light_rgb;
 }
@@ -401,7 +417,7 @@
     };
 
     // uint32 display   = smanager->get_param(0);
-    int screen_width = smanager->get_param(1);
+    // int screen_width = smanager->get_param(1);
     int rangex_start = smanager->get_param(2);
     int rangex_end   = smanager->get_param(3);
 
--- a/Renderer/Test/writer.c	Sat Nov 14 21:17:02 2009 +0900
+++ b/Renderer/Test/writer.c	Sun Nov 15 02:02:30 2009 +0900
@@ -64,7 +64,7 @@
 	int tspace;
 	int serial;
 	int xml_id;
-	char *linda_serv = "localhost";
+	const char *linda_serv = "localhost";
 	if (argc > 1)
 		linda_serv = argv[1];
 	init_linda();
--- a/TaskManager/Cell/CellTaskManagerImpl.cc	Sat Nov 14 21:17:02 2009 +0900
+++ b/TaskManager/Cell/CellTaskManagerImpl.cc	Sun Nov 15 02:02:30 2009 +0900
@@ -53,6 +53,10 @@
     ppeManager = new FifoTaskManagerImpl(machineNum);
     // 大半のTaskQueueInfoは、共有される
     ppeManager->init(new PpeScheduler, this);
+    
+    ppeManager->get_scheduler()->set_manager(this);
+    schedTaskManager = new SchedTask();
+    schedTaskManager->init(0,0,0,ppeManager->get_scheduler());
 }
 
 void
@@ -220,7 +224,9 @@
 		    speThreads->send_mail(id, 2, alloc_info);
 		} else if (data > MY_SPE_NOP) {
 		    //__debug_ppe("[PPE] recv from [SPE %d] : 0x%x\n", id, data);
-		    check_task_finish((HTaskPtr)data);
+		    HTaskPtr task = (HTaskPtr)data;
+		    task->post_func(schedTaskManager, task->post_arg1, task->post_arg2);
+		    check_task_finish(task);
 		}
 	    }
 	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/Cell/spe/SpeTaskManagerImpl.cc	Sun Nov 15 02:02:30 2009 +0900
@@ -0,0 +1,57 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "FifoTaskManagerImpl.h"
+#include "Scheduler.h"
+#include "SchedTask.h"
+#include "types.h"
+#include "error.h"
+
+FifoTaskManagerImpl::~FifoTaskManagerImpl()
+{
+
+}
+
+/**
+ */
+void
+FifoTaskManagerImpl::init()
+{
+}
+
+/**
+ */
+void
+FifoTaskManagerImpl::init(MainScheduler *_sched)
+{
+    scheduler = _sched;
+}
+
+
+void
+FifoTaskManagerImpl::run()
+{
+}
+
+
+void*
+FifoTaskManagerImpl::allocate(int size, int alignment)
+{
+    void *buff;
+    posix_memalign(&buff, alignment, size);
+    return buff;
+}
+
+void*
+FifoTaskManagerImpl::allocate(int size)
+{
+    void *buff;
+    posix_memalign(&buff, DEFAULT_ALIGNMENT, size);
+    return buff;
+}
+
+Scheduler*
+FifoTaskManagerImpl::get_scheduler() {
+    return scheduler;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TaskManager/Cell/spe/SpeTaskManagerImpl.h	Sun Nov 15 02:02:30 2009 +0900
@@ -0,0 +1,30 @@
+#ifndef INCLUDED_FIFO_TASK_MANAGER_IMPL
+#define INCLUDED_FIFO_TASK_MANAGER_IMPL
+
+#include "TaskManagerImpl.h"
+#include "MainScheduler.h"
+#include "Scheduler.h"
+
+class SpeTaskManagerImpl : public TaskManagerImpl {
+public:
+    /* constructor */
+    SpeTaskManagerImpl(int num = 1) : TaskManagerImpl(num) {}
+    ~SpeTaskManagerImpl(void);
+
+    /* variables */
+    CellScheduler *scheduler;
+
+    /* functions */
+    // call by system
+    void init(void);
+    void run(void);
+
+    // call by user
+    int add_data(ListDataPtr, uint32, int);
+    void* allocate(int size,int align);
+    void* allocate(int size);
+    Scheduler* get_scheduler();
+};
+
+
+#endif /* INCLUDED_FIFO_TASK_MANAGER_IMPL */
--- a/TaskManager/Cell/spe/main.cc	Sat Nov 14 21:17:02 2009 +0900
+++ b/TaskManager/Cell/spe/main.cc	Sun Nov 15 02:02:30 2009 +0900
@@ -23,6 +23,9 @@
     manager->init();
     manager->id = (int)argc;
 
+    TaskManagerImpl *tm = new SpeTaskManagerImpl(manager);
+    manager->set_manager(tm);
+
     spu_write_decrementer(0x7FFFFFFFU);
     unsigned int prof = spu_read_decrementer();
     manager->run();
--- a/TaskManager/ChangeLog	Sat Nov 14 21:17:02 2009 +0900
+++ b/TaskManager/ChangeLog	Sun Nov 15 02:02:30 2009 +0900
@@ -1,3 +1,18 @@
+2009-11-14 Shinji KONO <kono@ie.u-ryukyu.ac.jp>
+
+    Scheduler / TaskManger / TaskManagerImpl の区別が不明
+
+    Scheduler は SchedTask から直接見えないはずだが、SchedTask は、
+    Scheduler は知っているが、TaskManager は知らない。これがかなりの
+    混乱を生んでいる。
+
+    SPU上では、TaskManager が存在しないのが原因らしいが、allcoate とかは、
+    TaskManager が行うはず。なので、SPU上にもTaskManagerがある方が自然。
+
+    SchedTask が自分自身で scheduling してしまっているので、Scheduler
+    には、ほとんど仕事がない。なので、大半の処理を scheduler -> manager
+    経由で行うことになる。
+
 2009-11-14 Shinji KONO <kono@ie.u-ryukyu.ac.jp>
 
     要するに、SPE task 側から addOutData できればよい。
--- a/TaskManager/Fifo/FifoTaskManagerImpl.cc	Sat Nov 14 21:17:02 2009 +0900
+++ b/TaskManager/Fifo/FifoTaskManagerImpl.cc	Sun Nov 15 02:02:30 2009 +0900
@@ -3,6 +3,7 @@
 #include <string.h>
 #include "FifoTaskManagerImpl.h"
 #include "Scheduler.h"
+#include "SchedTask.h"
 #include "types.h"
 #include "error.h"
 
@@ -32,6 +33,7 @@
     scheduler->init();
     scheduler->set_mailManager(mailManager);
     scheduler->id = 0;
+    scheduler->set_manager(this);
 
     taskListImpl  = new TaskListInfo;
     taskQueueImpl = new TaskQueueInfo;
@@ -39,6 +41,9 @@
 
     mainTaskList = taskListImpl->create();
 
+    schedTaskManager = new SchedTask();
+    schedTaskManager->init(0,0,0,scheduler);
+
 }
 
 /**
@@ -222,7 +227,11 @@
             __debug_ppe("mail_check(): Task List finish\n");
         } else if (data > MY_SPE_NOP) {
             __debug_ppe("mail_check(): recv from 0x%x\n", data);
-            check_task_finish((HTaskPtr)data);
+	    // post_func を先に実行しないと、systask_finish が active_queue
+	    // 移されてから、wait_for されるという事態が起きることがある。
+            HTaskPtr task = (HTaskPtr)data;
+            task->post_func(schedTaskManager, task->post_arg1, task->post_arg2);
+            check_task_finish(task);
         }
 
         d = q;
--- a/TaskManager/kernel/ppe/TaskManager.cc	Sat Nov 14 21:17:02 2009 +0900
+++ b/TaskManager/kernel/ppe/TaskManager.cc	Sun Nov 15 02:02:30 2009 +0900
@@ -1,8 +1,8 @@
 #include "TaskManager.h"
+#include "Scheduler.h"
 
 TaskManager::TaskManager(int num) : machineNum(num)
 {
-    gen_random = new Random;
 }
 
 TaskManager::~TaskManager()
@@ -83,7 +83,13 @@
 int
 TaskManager::get_random()
 {
-    return gen_random->getData();
+    return random();
+}
+
+MemList*
+TaskManager::createMemList(int size, int count)
+{
+    return get_scheduler()->createMemList(size, count);
 }
 
 Scheduler*
--- a/TaskManager/kernel/ppe/TaskManager.h	Sat Nov 14 21:17:02 2009 +0900
+++ b/TaskManager/kernel/ppe/TaskManager.h	Sun Nov 15 02:02:30 2009 +0900
@@ -4,9 +4,11 @@
 #include "TaskManagerImpl.h"
 #include "Random.h"
 #include "MemList.h"
-#include "Scheduler.h"
 #include "HTask.h"
 
+class Scheduler;
+class MemList;
+
 class TaskManager {
 public:
     /* constructor */
@@ -26,6 +28,7 @@
     int get_cpuNum();
     int get_random();
     Scheduler *get_scheduler();
+    MemList* createMemList(int size, int count);
 
     /* functions */
     void init();
--- a/TaskManager/kernel/ppe/TaskManagerImpl.cc	Sat Nov 14 21:17:02 2009 +0900
+++ b/TaskManager/kernel/ppe/TaskManagerImpl.cc	Sun Nov 15 02:02:30 2009 +0900
@@ -3,9 +3,10 @@
 #include "types.h"
 #include "error.h"
 #include "SchedTask.h"
-#include "SchedTaskManager.h"
 #include "../sys_task/SysTask.h"
 
+#include "Scheduler.h"
+
 static HTaskPtr systask_start;
 static HTaskPtr systask_finish;
 
@@ -32,8 +33,6 @@
 {
     systask_register();
 
-    schedTaskManager = new SchedTaskManager(this);
-
     systask_start = create_task(SYSTASK_START);
     systask_finish = create_task(SYSTASK_FINISH);
 
@@ -125,10 +124,6 @@
 void
 TaskManagerImpl::check_task_finish(HTaskPtr me)
 {
-    // post_func を先に実行しないと、systask_finish が active_queue
-    // 移されてから、wait_for されるという事態が起きることがある。
-
-    me->post_func(schedTaskManager, me->post_arg1,me->post_arg2);
 
     while(TaskQueue *p = me->wait_me->poll()) {
 	HTaskPtr you = p->task;
@@ -166,4 +161,5 @@
   // done in check_task_finish   
 }
 
+
 /* end */
--- a/TaskManager/kernel/ppe/TaskManagerImpl.h	Sat Nov 14 21:17:02 2009 +0900
+++ b/TaskManager/kernel/ppe/TaskManagerImpl.h	Sun Nov 15 02:02:30 2009 +0900
@@ -3,10 +3,11 @@
 
 #include "MailManager.h"
 #include "ListData.h"
-#include "Scheduler.h"
 #include "TaskListInfo.h"
 #include "TaskQueueInfo.h"
 #include "HTaskInfo.h"
+class Scheduler;
+class MemList;
 
 
 class TaskManagerImpl {
@@ -20,6 +21,7 @@
     TaskListInfo *taskListImpl;
     TaskQueueInfo *taskQueueImpl;
     HTaskInfo *htaskImpl;
+
     SchedTask *schedTaskManager;
 
     /* constructor */
@@ -44,8 +46,10 @@
     void set_task_depend(HTaskPtr master, HTaskPtr slave);
     void spawn_task(HTaskPtr);
     void set_task_cpu(HTaskPtr, CPU_TYPE);
+
     virtual void* allocate(int size) = 0;
     virtual void* allocate(int size,int align) = 0;
     virtual Scheduler* get_scheduler() = 0;
 };
+
 #endif
--- a/TaskManager/kernel/schedule/SchedNop2Ready.cc	Sat Nov 14 21:17:02 2009 +0900
+++ b/TaskManager/kernel/schedule/SchedNop2Ready.cc	Sun Nov 15 02:02:30 2009 +0900
@@ -20,19 +20,8 @@
 SchedTaskBase*
 SchedNop2Ready::next(Scheduler *scheduler,SchedTaskBase *p)
 {
-    SchedTaskBase *nextSched;
-
     __debug("[SchedNop2Ready:%s]\n", __FUNCTION__);
     
-    // delete p;
-
-    nextSched = scheduler->get_nextRenewTaskList();
-	
-    // RenewTask がある
-    if (nextSched) {
-	return nextSched;
-    } else {
-	scheduler->mail_write(MY_SPE_STATUS_READY);
-	return new SchedMail();
-    }
+    scheduler->mail_write(MY_SPE_STATUS_READY);
+    return new SchedMail();
 }
--- a/TaskManager/kernel/schedule/SchedTask.cc	Sat Nov 14 21:17:02 2009 +0900
+++ b/TaskManager/kernel/schedule/SchedTask.cc	Sun Nov 15 02:02:30 2009 +0900
@@ -10,8 +10,6 @@
 
 extern Scheduler::TaskObject task_list[MAX_TASK_OBJECT];
 
-//#define NO_PIPELINE
-
 /**
    Task Object を作る
  */
@@ -46,19 +44,11 @@
     readbuf     = NULL;
     writebuf    = NULL;
     scheduler   = NULL;
-    taskGroup   = NULL;
-    renew_flag  = 0;
     cur_index   = 0;
-    flag_renewTask = SCHED_TASK_NORMAL;
     this->stdout_ = stdout;
     this->stderr_ = stderr;
     this->stdin_ = stdin;
 
-    ex_init  = &SchedTask::ex_init_normal;
-    ex_read  = &SchedTask::ex_read_normal;
-    ex_exec  = &SchedTask::ex_exec_normal;
-    ex_write = &SchedTask::ex_write_normal;
-    ex_next  = &SchedTask::ex_next_normal;
 
 }
 
@@ -67,35 +57,8 @@
  */
 SchedTask::~SchedTask()
 {
-    if (flag_renewTask == SCHED_TASK_RENEW) {
-        /**
-         * list != NULL の場合、
-         * この Task が list の最後の Task になるので (SchedTask::next 参照)
-         * このタイミングで list を解放する
-         *   (free に渡されるアドレスが正しいものとなる)。
-         * それ以外の Task では当然解放しない。
-         *  list == NULL なので、free に渡しても無問題
-         */
-        free(list);
-    }
-
-
 }
 
-/**
- * このタスクを Renew Task とし、それに応じた関数をセットする
- */
-void
-SchedTask::setRenew()
-{
-    flag_renewTask = SCHED_TASK_RENEW;
-
-    ex_init   = &SchedTask::ex_init_renew;
-    ex_read   = &SchedTask::ex_read_renew;
-    ex_exec   = &SchedTask::ex_exec_renew;
-    ex_write  = &SchedTask::ex_write_renew;
-    ex_next   = &SchedTask::ex_next_renew;
-}
 
 void
 SchedTask::init(TaskListPtr _list, TaskPtr _task, int index,
@@ -111,56 +74,14 @@
 
     scheduler->mainMem_wait();
 
-    (this->*ex_init)();
 }
 
-/**
- * PPE 内で生成されたタスクの ex_init()
- */
-void
-SchedTask::ex_init_normal()
-{
-#if 0
-    // task list に入れたので既に読んでいる?
-    //
-    scheduler->dma_load(inListData, (uint32)&task->inData,
-                          sizeof(ListData), DMA_READ_IN_LIST);
-    scheduler->dma_load(outListData, (uint32)&task->outData,
-                          sizeof(ListData), DMA_READ_OUT_LIST);
-#if defined(NO_PIPELINE)
-    scheduler->dma_wait(DMA_READ_IN_LIST);
-    scheduler->dma_wait(DMA_READ_OUT_LIST);
-#endif
-#endif
-
-    taskGroup = new TaskGroup;
-    taskGroup->command = (int)task->self;
-}
-
-/**
- * SPE 内で生成されたタスクの ex_init()
- * 各データは SPE 内の create_task 時に生成もしくは引き継がれているので
- * ex_init_normal() と違い、ここでは値を渡すだけ
- */
-void
-SchedTask::ex_init_renew()
-{
-    inListData = &task->inData;
-    outListData = &task->outData;
-    taskGroup = (TaskGroupPtr)task->self;
-}
 
 void
 SchedTask::read()
 {
     __debug("[SchedTask:%s]\n", __FUNCTION__);
 
-#if 0
-#if !defined(NO_PIPELINE)
-    scheduler->dma_wait(DMA_READ_IN_LIST);
-    scheduler->dma_wait(DMA_READ_OUT_LIST);
-#endif
-#endif
     // object creation をSchedTask生成時にやらないので、
     // exec の直前のread で十分に間に合う
     if (cur_index < list->length) {
@@ -177,61 +98,24 @@
     readbuf = scheduler->allocate(inListData->size);
     scheduler->dma_loadList(inListData, readbuf, DMA_READ);
 
-#if defined(NO_PIPELINE)
-    scheduler->dma_wait(DMA_READ);
-#endif
 
-    (this->*ex_read)();
 }
 
-/**
- * PPE 内で生成されたタスクの ex_read()
- *
- * [Todo]
- *   データの読み込み場所を readbuf ではなく、
- *   ユーザ自身で決めれるようになるといいかもしれない。
- *
- *   # TaskManager が勝手に消すことなく、
- *   # ユーザが SPE 上に持ち続けることができるため。
- *   # もちろん管理はユーザに任せるわけだ。
- */
-void
-SchedTask::ex_read_normal()
-{
-}
 
 void
 SchedTask::exec()
 {
     __debug("[SchedTask:%s]\n", __FUNCTION__);
 
-#if !defined(NO_PIPELINE)
     scheduler->dma_wait(DMA_READ);
     task_list[task->command].wait(scheduler,task->command);
-#endif
-
     task_list[task->command].run(this, readbuf, writebuf);
-
     free(readbuf);
 
-    if (taskGroup->status() != 0) {
-        task->self = (int)taskGroup->command;
-        delete taskGroup;
-        taskGroup = NULL;
-    }
-
-
     // 書き込む領域がなければ無視
     if (outListData->length > 0) {
         scheduler->dma_storeList(outListData, writebuf, DMA_WRITE);
-
-#if defined(NO_PIPELINE)
-        scheduler->dma_wait(DMA_WRITE);
-        free(writebuf);
-#endif
     }
-
-    (this->*ex_exec)();
 }
 
 void
@@ -239,187 +123,40 @@
 {
     __debug("[SchedTask:%s]\n", __FUNCTION__);
 
-#if !defined(NO_PIPELINE)
     scheduler->dma_wait(DMA_WRITE);
     free(writebuf);
-#endif
 
-    if ((int)task->self == MY_SPE_NOP) return;
-
-    (this->*ex_write)();
-}
-
-
-/**
- * SPE 内で生成されたタスクの ex_read()
- */
-void
-SchedTask::ex_read_renew()
-{
-    writebuf = scheduler->allocate(outListData->size);
-}
-
-/**
- * PPE 内で生成されたタスクの ex_exec()
- */
-void
-SchedTask::ex_exec_normal()
-{
-}
-
-/**
- * SPE 内で生成されたタスクの ex_exec()
- */
-void
-SchedTask::ex_exec_renew()
-{
+    scheduler->mail_write((int)task->self);
 }
 
 
-
-/**
- * PPE 内で生成されたタスクの ex_write()
- *
- * このタスク内で新たにタスクが生成され、
- * 且つそのタスクの終了を待つ必要がある場合、
- * PPE に終了したことは知らせない(command は送信しない)
- */
-void
-SchedTask::ex_write_normal()
-{
-    /**
-     * このタスク内で新たにタスクが生成されなかった
-     * or 生成されたが、そのタスクの終了を待つ必要は無い
-     */
-    if (renew_flag == 0) {
-        scheduler->mail_write((int)task->self);
-    }
-}
-
-/**
- * SPE 内で生成されたタスクの ex_write()
- *
- *  A <- 親タスク
- *  | \
- *  B   C <- SPE 内で生成されたタスク
- *
- * A は SPE 内で B, C を生成したとする。
- * B と C が終了したら、A が PPE に送るはずだったコマンドが
- * 子タスクに引き継がれているので、最後に実行された子タスクが
- * PPE に mail 送信する。
- */
-void
-SchedTask::ex_write_renew()
-{
-    uint32 cmd;
-
-    taskGroup->remove(task);
-    cmd = taskGroup->status();
-
-    // タスク内で作られた全てのタスクが終了した
-    if (cmd != 0) {
-        delete taskGroup;
-        scheduler->mail_write(cmd);
-    }
-}
-
 SchedTaskBase*
 SchedTask::next(Scheduler *scheduler, SchedTaskBase *p)
 {
     __debug("[SchedTask:%s]\n", __FUNCTION__);
 
-    // delete p;  move to Scheduler
-
-    return (this->*ex_next)();
-}
-
-SchedTaskBase*
-SchedTask::ex_next_normal()
-{
     if (cur_index < list->length) {
-        SchedTaskBase *nextSched;
-
-        nextSched = scheduler->get_nextRenewTaskList();
+	// Task List が残っているので、次を準備
 
-        // RenewTask がある
-        if (nextSched) {
-            scheduler->set_backupTaskList(list);
-            scheduler->set_backupTaskListIndex(cur_index);
-            return nextSched;
-        } else {
-            TaskPtr nextTask = &list->tasks[cur_index++];
-            nextSched = createSchedTask(scheduler, nextTask);
-            ((SchedTask*)nextSched)->init(list, nextTask, cur_index,
-                                              // scheduler->get_curReadBuf(),
-                                              // scheduler->get_curWriteBuf(),
-                                              scheduler);
-            return nextSched;
-        }
+	TaskPtr nextTask = &list->tasks[cur_index++];
+        SchedTaskBase *nextSched = createSchedTask(scheduler, nextTask);
+	// この up cast は汚い...
+	((SchedTask*)nextSched)->init(list, nextTask, cur_index,
+					  scheduler);
+	return nextSched;
     } else {
         memaddr nextList = (memaddr)list->next;
-
         if (nextList == 0) {
+	    // もう何もする必要がない
             return new SchedNop2Ready(scheduler);
         } else {
+	    // 新しいリストに取り掛かる
             return createSchedTaskList(nextList, scheduler,
                                        SCHED_TASKLIST_NORMAL);
         }
     }
 }
 
-/**
- *
- */
-SchedTaskBase*
-SchedTask::ex_next_renew()
-{
-    TaskPtr nextTask;
-    SchedTask *nextSched;
-
-    if (cur_index < list->length) {
-        nextTask = &list->tasks[cur_index++];
-        nextSched = createSchedTask(scheduler, nextTask);
-
-        // RenewTaskList を実行中なので
-        nextSched->setRenew();
-        nextSched->init(list, nextTask, cur_index,
-                            // scheduler->get_curReadBuf(),
-                            // scheduler->get_curWriteBuf(),
-                            scheduler);
-
-        /**
-         * この理由は SchedTask:~SchedTask() で
-         */
-        list = NULL;
-        return nextSched;
-    } else {
-        SchedTaskBase *nextList;
-
-        nextList = scheduler->get_nextRenewTaskList();
-
-        if (nextList) {
-            return nextList;
-        } else {
-            TaskListPtr nextList = scheduler->get_backupTaskList();
-
-            // 中断した TaskList がある
-            if (nextList) {
-                cur_index = scheduler->get_backupTaskListIndex();
-
-                nextTask = &nextList->tasks[cur_index++];
-                nextSched = createSchedTask(scheduler, nextTask);
-
-                nextSched->init(nextList, nextTask, cur_index,
-                                    // scheduler->get_curReadBuf(),
-                                    // scheduler->get_curWriteBuf(),
-                                    scheduler);
-                return nextSched;
-            } else {
-                return new SchedNop2Ready(scheduler);
-            }
-        }
-    }
-}
 
 int
 SchedTask::get_cpuid()
@@ -496,39 +233,6 @@
     return task->param[index];
 }
 
-TaskPtr
-SchedTask::create_task(int cmd)
-{
-    TaskListPtr taskList = scheduler->get_renewListBuf();
-    TaskPtr p = &taskList->tasks[taskList->length++];
-    p->command = cmd;
-
-    // already allocated 
-    // p->inData = (ListData*)scheduler->allocate(sizeof(ListData));
-    // p->outData = (ListData*)scheduler->allocate(sizeof(ListData));
-
-    p->inData.clear();
-    p->outData.clear();
-
-    p->self = (int)MY_SPE_NOP;
-    p->param_size = 0;
-
-    return p;
-}
-
-/**
- *
- * @param[in] waitTask タスク内で生成したタスクの登録(spawn()に相当)
- */
-void
-SchedTask::wait_task(TaskPtr waitTask)
-{
-    waitTask->self = (memaddr)taskGroup;
-
-    scheduler->add_groupTask(taskGroup, waitTask);
-
-    renew_flag++;
-}
 
 void*
 SchedTask::global_alloc(int id, int size) {
@@ -570,11 +274,6 @@
     return scheduler->mainMem_get(id);
 }
 
-void*
-SchedTask::allocate(int size) {
-    return scheduler->allocate(size);
-}
-
 
 void
 SchedTask::dma_load(void *buf, uint32 addr, uint32 size, uint32 mask) {
@@ -608,6 +307,42 @@
     scheduler->wait_segment(s);
 }
 
+
+HTaskPtr SchedTask::create_task(int cmd)
+{
+    return scheduler->create_task(cmd);
+}
+
+void SchedTask::set_task_depend(HTaskPtr master, HTaskPtr slave)
+{
+    scheduler->set_task_depend(master, slave);
+}
+
+void SchedTask::spawn_task(HTaskPtr t)
+{
+    scheduler->spawn_task(t);
+}
+
+void SchedTask::set_task_cpu(HTaskPtr t, CPU_TYPE cpu)
+{
+    scheduler->set_task_cpu(t, cpu);
+}
+
+void* SchedTask::allocate(int size) 
+{
+    return scheduler->allocate(size) ;
+}
+
+void* SchedTask::allocate(int size,int align) 
+{
+    return scheduler->allocate(size,align) ;
+}
+
+Scheduler* SchedTask::get_scheduler() 
+{
+    return scheduler;
+}
+
 /* system call */
 
 int 
--- a/TaskManager/kernel/schedule/SchedTask.h	Sat Nov 14 21:17:02 2009 +0900
+++ b/TaskManager/kernel/schedule/SchedTask.h	Sun Nov 15 02:02:30 2009 +0900
@@ -7,7 +7,7 @@
 #include "Scheduler.h"
 #include "SchedTaskBase.h"
 #include "ListData.h"
-#include "TaskGroup.h"
+#include "HTask.h"
 #include "MemList.h"
 
 class SchedTask : public SchedTaskBase {
@@ -44,25 +44,6 @@
     // Task の、Tasklist での位置。(task = &list[cur_index-1])
     int cur_index;
 
-    // タスク内で生成されたタスクのグループ
-    TaskGroup *taskGroup;
-
-    // このタスク内で生成されたタスクの数
-    int renew_flag;
-
-    // このタスクが SPE 内で生成されたタスクか否か 1: Yes, 0: No
-    int flag_renewTask;
-
-    // タスクがメインメモリ側で生成されたものか、
-    // SPE で生成されたものかによって、データの扱いが変わってくる。
-    // そのために if (flag_renewTask) を連発するのはよくないので
-    // 関数ポインタで持っておく
-    void (SchedTask::*ex_init)();
-    void (SchedTask::*ex_read)();
-    void (SchedTask::*ex_exec)();
-    void (SchedTask::*ex_write)();
-    SchedTaskBase* (SchedTask::*ex_next)();
-
     /* functions */
 
     // override
@@ -76,30 +57,10 @@
     //---  System API ---
     SchedTask* get_nextTask(TaskListPtr list);
 
-    /**
-     * PPE で生成されたタスクに対する
-     * init, read,exec,write,next の付属(?)処理
-     */
-    void ex_init_normal();
-    void ex_read_normal();
-    void ex_exec_normal();
-    void ex_write_normal();
-    SchedTaskBase* ex_next_normal();
-
-    /**
-     * SPE で生成されたタスクに対する
-     * inti, ead,exec,write,next の付属(?)処理
-     */
-    void ex_init_renew();
-    void ex_read_renew();
-    void ex_exec_renew();
-    void ex_write_renew();
-    SchedTaskBase* ex_next_renew();
 
 public:
     /* functions */
 
-    void setRenew();
     void init(TaskListPtr _list, TaskPtr _task, int index,
                     // ListDataPtr rbuf, ListDataPtr wbuf, 
 		    Scheduler* sc);
@@ -117,8 +78,6 @@
     int get_param(int index);
 
 
-    TaskPtr create_task(int cmd);
-    void wait_task(TaskPtr waitTask);
 
     void* global_alloc(int id, int size);
     void* global_get(int id);
@@ -160,6 +119,14 @@
       return get_output(writebuf, index);
     }
 
+    // user
+    HTaskPtr create_task(int cmd);
+    void set_task_depend(HTaskPtr master, HTaskPtr slave);
+    void spawn_task(HTaskPtr);
+    void set_task_cpu(HTaskPtr, CPU_TYPE);
+    void* allocate(int size,int align);
+    Scheduler* get_scheduler();
+
     /* system call */
 
     FILE *stdout_;
--- a/TaskManager/kernel/schedule/SchedTaskList.cc	Sat Nov 14 21:17:02 2009 +0900
+++ b/TaskManager/kernel/schedule/SchedTaskList.cc	Sun Nov 15 02:02:30 2009 +0900
@@ -54,10 +54,7 @@
 
     __debug("[SchedTaskList:%s]\n", __FUNCTION__);
 
-    // delete p;
-
     scheduler->dma_wait(DMA_READ_TASKLIST);
-
     if (list->length < 1) {
 	nextSched = new SchedNop2Ready(scheduler);
 
@@ -68,14 +65,7 @@
     } else {
 	TaskPtr nextTask = &list->tasks[0];
 	nextSched = createSchedTask(scheduler, nextTask);
-
-	if (flag_renewTaskList == SCHED_TASKLIST_RENEW) {
-	    ((SchedTask*)nextSched)->setRenew();
-	}
-	
 	((SchedTask*)nextSched)->init(list, nextTask, 1,
-					  // scheduler->get_curReadBuf(),
-					  // scheduler->get_curWriteBuf(),
 					  scheduler);
     }
 
--- a/TaskManager/kernel/schedule/SchedTaskManager.cc	Sat Nov 14 21:17:02 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +0,0 @@
-
-#include "TaskManagerImpl.h"
-#include "SchedTaskManager.h"
-
-SchedTaskManager::SchedTaskManager(TaskManagerImpl *m_)
-{
-    m = m_;
-}
-
-SchedTaskManager::~SchedTaskManager()
-{
-}
-
-HTaskPtr SchedTaskManager::create_task(int cmd)
-{
-    return m->create_task(cmd);
-}
-
-void SchedTaskManager::set_task_depend(HTaskPtr master, HTaskPtr slave)
-{
-    m->set_task_depend(master, slave);
-}
-
-void SchedTaskManager::spawn_task(HTaskPtr t)
-{
-    m->spawn_task(t);
-}
-
-void SchedTaskManager::set_task_cpu(HTaskPtr t, CPU_TYPE cpu)
-{
-    m->set_task_cpu(t, cpu);
-}
-
-void* SchedTaskManager::allocate(int size) 
-{
-    return m->allocate(size) ;
-}
-
-void* SchedTaskManager::allocate(int size,int align) 
-{
-    return m->allocate(size,align) ;
-}
-
-Scheduler* SchedTaskManager::get_scheduler() 
-{
-    return m->get_scheduler() ;
-}
-
-/* end */
--- a/TaskManager/kernel/schedule/SchedTaskManager.h	Sat Nov 14 21:17:02 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-#ifndef INCLUDED_SCHED_TASK_MANAGER
-#define INCLUDED_SCHED_TASK_MANAGER
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "base.h"
-#include "SchedTask.h"
-#include "TaskManagerImpl.h"
-
-class SchedTaskManager : public SchedTask {
-public:
-    /* constructor */
-    SchedTaskManager(TaskManagerImpl *m);
-
-    virtual ~SchedTaskManager();
-
-    BASE_NEW_DELETE(SchedTask);
-
-    /* variables */
-
-    // Task を実行するスケジューラ自身
-    TaskManagerImpl *m;
-    
-public:
-    /* functions */
-
-    // user
-    HTaskPtr create_task(int cmd);
-    void set_task_depend(HTaskPtr master, HTaskPtr slave);
-    void spawn_task(HTaskPtr);
-    void set_task_cpu(HTaskPtr, CPU_TYPE);
-    void* allocate(int size);
-    void* allocate(int size,int align);
-    Scheduler* get_scheduler();
-};
-#endif
--- a/TaskManager/kernel/schedule/Scheduler.cc	Sat Nov 14 21:17:02 2009 +0900
+++ b/TaskManager/kernel/schedule/Scheduler.cc	Sun Nov 15 02:02:30 2009 +0900
@@ -28,14 +28,9 @@
 
     for (int i = 0; i < 2; i++) {
         buff_taskList[i]    = (TaskListPtr)allocate(sizeof(TaskList));
-        // buff_inListData[i]  = (ListDataPtr)allocate(sizeof(ListData));
-        // buff_outListData[i] = (ListDataPtr)allocate(sizeof(ListData));
     }
 
     buffFlag_taskList = 0;
-    // buffFlag_inListData = 0;
-    // buffFlag_outListData = 0;
-    flag_renewTaskList = 0;
 
     // bzero でもいいけど
     for (int i = 0; i < MAX_GLOBAL_AREA; i++) {
@@ -47,10 +42,6 @@
     }
 
 
-    taskGroup = new TaskGroup;
-    renewTop_taskList = NULL;
-    renewCur_taskList = NULL;
-    bak_curTaskList = NULL;
 }
 
 void
@@ -83,10 +74,6 @@
 {
     free(buff_taskList[0]);
     free(buff_taskList[1]);
-    // free(buff_inListData[0]);
-    // free(buff_inListData[1]);
-    // free(buff_outListData[0]);
-    // free(buff_outListData[1]);
 }
 
 /**
@@ -102,115 +89,6 @@
 }
 
 
-/**
- * Task に inListData, outListData を入れたので、
- * これは必要ないらしい。
- *
- * あらかじめ memory allocte してある ListData の領域を
- * パイプラインの各処理が交代して使う。
- */
-#if 0
-ListDataPtr
-Scheduler::get_curWriteBuf()
-{
-    buffFlag_outListData ^= 1;
-    return buff_outListData[buffFlag_outListData];
-}
-
-
-ListDataPtr
-Scheduler::get_curReadBuf()
-{
-    buffFlag_inListData ^= 1;
-    return buff_inListData[buffFlag_inListData];
-}
-#endif
-
-/**
- * タスク内で生成されたタスクを格納する TaskList を取得する
- * 現在格納に使っている TaskList (renewCur_taskList) が使えるならそれを返す
- * もしそうでないなら、新しく TaskList を allocate してそれを返す
- * コード中で renewCur_taskList が NULL になるのは
- *   - プログラム開始時
- *   - タスク内生成タスクがある TaskList の実行を新しく始める (Nop2Ready 参照)
- * 以上の場合です
- */
-TaskListPtr
-Scheduler::get_renewListBuf()
-{
-    if (renewCur_taskList && renewCur_taskList->length < TASK_MAX_SIZE) {
-        return renewCur_taskList;
-    } else {
-        TaskListPtr newList = (TaskListPtr)allocate(sizeof(TaskList));
-        newList->length = 0;
-        newList->next = NULL;
-        renewTop_taskList = TaskList::append(renewTop_taskList, newList);
-        renewCur_taskList = newList;
-        return newList;
-    }
-}
-
-/**
- * 次に実行する Renew Task List を返す
- *
- * @param[in] curList 現在実行中の TaskList
- *                    中断して RenewTaskList を行うため
- *                    バックアップを取っておく
- * @return next RenewTaskList
- */
-SchedTaskList*
-Scheduler::get_nextRenewTaskList()
-{
-    if (renewTop_taskList) {
-        TaskListPtr list  = renewTop_taskList;
-        renewTop_taskList = renewTop_taskList->next;
-        renewCur_taskList = NULL;
-
-        list->next = NULL;
-        SchedTaskList *sched
-            = createSchedTaskList((memaddr)list, this, SCHED_TASKLIST_RENEW);
-        return sched;
-    } else {
-        return NULL;
-    }
-}
-
-void
-Scheduler::set_backupTaskList(TaskListPtr cur_taskList)
-{
-    bak_curTaskList = cur_taskList;
-}
-
-void
-Scheduler::set_backupTaskListIndex(int cur_index)
-{
-    bakIndex_taskList = cur_index;
-}
-
-/**
- * RenewTaskList 実行前に中断した TaskList を返す
- * NULL の場合、中断した TaskList は無い。
- *
- * @return TaskList
- */
-TaskListPtr
-Scheduler::get_backupTaskList()
-{
-    TaskListPtr ret = bak_curTaskList;
-
-    bak_curTaskList = NULL;
-    return ret;
-}
-
-int
-Scheduler::get_backupTaskListIndex()
-{
-    int ret = bakIndex_taskList;
-
-    bakIndex_taskList = 0;
-    return ret;
-}
-
 void
 Scheduler::dma_load(void *buf, uint32 addr, uint32 size, uint32 mask)
 {
@@ -254,40 +132,6 @@
     return connector->mail_read();
 }
 
-TaskGroupPtr
-Scheduler::set_groupTask(uint32 command)
-{
-    TaskGroupPtr ret = taskGroup;
-
-    reload_groupTask();
-
-    ret->command = command;
-    return ret;
-}
-
-void
-Scheduler::add_groupTask(TaskGroupPtr group, TaskPtr task)
-{
-    group->add(task);
-}
-
-void
-Scheduler::remove_groupTask(TaskGroupPtr group, TaskPtr task)
-{
-    group->remove(task);
-}
-
-void
-Scheduler::reload_groupTask()
-{
-    taskGroup = new TaskGroup;
-}
-
-uint32
-Scheduler::status_groupTask(TaskGroupPtr group)
-{
-    return group->status();
-}
 
 /*
     ここから下は、memory 以下にあるべき
--- a/TaskManager/kernel/schedule/Scheduler.h	Sat Nov 14 21:17:02 2009 +0900
+++ b/TaskManager/kernel/schedule/Scheduler.h	Sun Nov 15 02:02:30 2009 +0900
@@ -1,15 +1,17 @@
 #ifndef INCLUDED_SCHEDULER
 #define INCLUDED_SCHEDULER
 
+#include "stdlib.h"
 #include "base.h"
 #include "TaskList.h"
 #include "ListData.h"
 #include "DmaManager.h"
 #include "SchedTaskBase.h"
 #include "SchedTaskList.h"
-#include "TaskGroup.h"
 #include "MemList.h"
 #include "MemHash.h"
+#include "TaskManagerImpl.h"
+
 
 #define MAX_USER_TASK 32
 #define MAX_SYSTEM_TASK 2
@@ -20,6 +22,7 @@
 class SchedTaskBase;
 class SchedTask;
 class SchedTaskList;
+class TaskManager;
 
 typedef int (*TaskObjectRun)(SchedTask* smanager, void* r, void *w);
 
@@ -35,54 +38,8 @@
 
     // double buffering
     TaskListPtr buff_taskList[2];
-    // ListDataPtr buff_inListData[2];
-    // ListDataPtr buff_outListData[2];
 
     int buffFlag_taskList;
-    // int buffFlag_inListData;
-    // int buffFlag_outListData;
-
-    /* TaskList 関連 */
-
-    /**
-     * 実行中 TaskList の現在の位置 (list->tasks[index])
-     *
-     * bakIndex_taskList がある理由
-     * taskList の途中で renew task が作られたとき、
-     * 即座に実行するため、TaskList -> RenewTaskList と移って処理する。
-     * RenewTaskList が終了したとき、再び TaskList に戻ってくるが
-     * Renew Task を生成した所から再スタートするため、
-     * taskList の index を覚えておく (backup)
-     * 同様に TaskList も覚えておく
-     */
-    int bakIndex_taskList;
-    TaskListPtr bak_curTaskList;
-
-
-    /**
-     * タスク内で生成されたタスクを入れる
-     * Linked List で管理
-     */
-    TaskListPtr renewCur_taskList;
-    TaskListPtr renewTop_taskList;
-
-    /**
-     * 実行中 TaskList が Renew されたものかどうかのフラグ
-     * Renew の場合、ListData は DMA する必要ないとか
-     * いろいろな判定に使えるかもしれん
-     * if (flag == 1) taskList is Renew
-     */
-    int flag_renewTaskList;
-
-    /**
-     * タスク内 (T1) でタスク (Tc = T2, T3, ..) が複数生成された場合、
-     * Tc が全て終わってから、T1 の終了コマンドを PPE に送る。
-     * なので、Tc を process group として記憶しておく。
-     *
-     * Tc が taskGroup のアドレスを持つので
-     * Scheduler が持つ taskGroup 変数は一つだけで(多分)おk
-     */
-    TaskGroupPtr taskGroup;
 
     /* GlobalMemoryList */
     void* globalList[MAX_GLOBAL_AREA];
@@ -108,6 +65,7 @@
     } TaskObject, *TaskObjectPtr;
 
     DmaManager* connector;
+    TaskManagerImpl* manager;
 
     // Pipeline Stage
     SchedTaskBase* task1;
@@ -121,8 +79,6 @@
     void finish();
 
     TaskListPtr get_curListBuf();
-    // ListDataPtr get_curReadBuf();
-    // ListDataPtr get_curWriteBuf();
     TaskListPtr get_renewListBuf();
 
     void set_backupTaskList(TaskListPtr cur_taskList);
@@ -131,13 +87,6 @@
     TaskListPtr get_backupTaskList();
     int get_backupTaskListIndex();
 
-    // なんか名前が変だが。。。
-    /* TaskGroup */
-    TaskGroupPtr set_groupTask(uint32 command);
-    void add_groupTask(TaskGroupPtr group, TaskPtr task);
-    void remove_groupTask(TaskGroupPtr group, TaskPtr task);
-    void reload_groupTask();
-    uint32 status_groupTask(TaskGroupPtr group);
 
     /* GlobalMemory */
     void* global_alloc(int id, int size);
@@ -170,6 +119,23 @@
     uint32 mail_read();
     void dma_loadList(ListDataPtr list, void *, uint32 mask);
     void dma_storeList(ListDataPtr list, void *, uint32 mask);
+
+    /* manager */
+
+    void set_manager(TaskManagerImpl *m) { manager = m; }
+
+    // user
+    HTaskPtr create_task(int cmd) { return manager->create_task(cmd); }
+    void set_task_depend(HTaskPtr master, HTaskPtr slave) {
+	manager->set_task_depend(master, slave) ;
+    }
+    void spawn_task(HTaskPtr t) { manager->spawn_task(t); }
+    void set_task_cpu(HTaskPtr t, CPU_TYPE cpu) { manager->set_task_cpu(t,cpu); }
+    void* allocate(int size,int align) { return manager->allocate(size,align); }
+    int get_random() { return random(); }
+    Scheduler *get_scheduler() { return this; }
+
+
 };
 
 extern void register_task(int cmd, TaskObjectRun run);
--- a/example/HelloWorld/Makefile.def	Sat Nov 14 21:17:02 2009 +0900
+++ b/example/HelloWorld/Makefile.def	Sun Nov 15 02:02:30 2009 +0900
@@ -1,13 +1,13 @@
 TARGET = hello
 
 # include/library path
-# ex: macosx
+# ex  macosx
 #CERIUM = /Users/gongo/Source/Cerium
 
-# ex: linux/ps3
+# ex  linux/ps3
 CERIUM = ../../../Cerium
 
-CC      = g++
+CC      = g++ -m32
 CFLAGS  = -g -Wall -O9
 
 INCLUDE = -I${CERIUM}/include/TaskManager -I. -I..
--- a/example/MemList/Makefile.macosx	Sat Nov 14 21:17:02 2009 +0900
+++ b/example/MemList/Makefile.macosx	Sun Nov 15 02:02:30 2009 +0900
@@ -1,5 +1,6 @@
 include ./Makefile.def
 
+CC += -m32
 SRCS_TMP = $(wildcard *.cc)
 SRCS_EXCLUDE = 
 SRCS = $(filter-out $(SRCS_EXCLUDE),$(SRCS_TMP))
--- a/example/MemList/main.cc	Sat Nov 14 21:17:02 2009 +0900
+++ b/example/MemList/main.cc	Sun Nov 15 02:02:30 2009 +0900
@@ -37,8 +37,8 @@
     uint32 size = 128;
     uint32 count = 64;
 
-    MemList* active = manager->get_scheduler()->createMemList(size, 0);
-    MemList* freelist = manager->get_scheduler()->createMemList(size, count);
+    MemList* active = manager->createMemList(size, 0);
+    MemList* freelist = manager->createMemList(size, count);
 
     // 配列!
     uint32 i = 0;
@@ -59,3 +59,5 @@
 
     return 0;
 }
+
+/* end */
--- a/example/basic/Makefile.macosx	Sat Nov 14 21:17:02 2009 +0900
+++ b/example/basic/Makefile.macosx	Sun Nov 15 02:02:30 2009 +0900
@@ -12,6 +12,7 @@
 TASK_OBJS = $(TASK_SRCS:.cc=.o)
 
 LIBS += -lFifoManager `sdl-config --libs`
+CC += -m32
 
 .SUFFIXES: .cc .o
 
--- a/example/basic/main.cc	Sat Nov 14 21:17:02 2009 +0900
+++ b/example/basic/main.cc	Sun Nov 15 02:02:30 2009 +0900
@@ -28,7 +28,7 @@
  * タスク終了後の data1, data2 の確認
  */
 void
-twice_result(void *a)
+twice_result(SchedTask *s, void *a, void *b)
 {
     int* data = (int*)a;
     print_data(data, length, "after");
@@ -90,7 +90,7 @@
     /*
      * set_post() で ppe task を渡せるようにしたい
      */
-    twice->set_post(twice_result, (void*)data);
+    twice->set_post(twice_result, (void*)data, 0);
 
     // add Active Queue
     twice->spawn();    
--- a/example/cube/CubeSceneGraph.cpp	Sat Nov 14 21:17:02 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,13 +0,0 @@
-#include "CubeSceneGraph.h"
-
-CubeSceneGraph::CubeSceneGraph(char *xml)
-{
-    SceneGraph::SceneGraph(xml);
-    task = new CubeTask();
-}
-
-void
-CubeSceneGraph::update(CubeSceneGraph *old)
-{
-    task->update(old->data_pack, data_pack);
-}
--- a/example/cube/CubeSceneGraph.h	Sat Nov 14 21:17:02 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,8 +0,0 @@
-#include "SceneGraph.h"
-#include "CubeTask.h"
-
-class CubeSceneGraph : SceneGraph {
-public:
-    CubeTask* task;
-    CubeSceneGraph(char *xml);
-};
--- a/example/cube/CubeTask.cpp	Sat Nov 14 21:17:02 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-void
-CubeTask::update(CubeDataPack *input, CubeDataPack *output)
-{
-    output->angle[0] = input->angle[0] + 1;
-}
--- a/example/cube/CubeTask.h	Sat Nov 14 21:17:02 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,4 +0,0 @@
-class CubeTask : Task {
-    void update(CubeDataPack *input, CubeDataPack *output);
-    
-};
--- a/example/cube/RenderingEngine.cpp	Sat Nov 14 21:17:02 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,101 +0,0 @@
-void
-RenderingEngine::init(int width, int height, int bpp)
-{
-}
-
-TaskDepend
-RenderingEngine::update_all(SceneGraph* next, SceneGraph* now, TaskDepend wait)
-{
-    SceneGraph *t, *nt;
-    t = now;
-    nt = next;
-
-    //glPushMatrix();
-    int s=0;
-    while(t)
-    {
-	//t->draw(stack);
-	t->update(t->data_pack, nt->data_pack);
-	if(t->child != NULL)
-	{
-	    stack[s++] = t->matrix; //push
-	    t = t->child;
-	}
-	else if(t->brother != NULL)
-	{
-	    stack[--s] = NULL; //pop
-	    stack[s++] = t->matrix; //push
-	    t = t->brother;
-	}
-	else
-	{
-	    while(t)
-	    {
-		if(t->brother != NULL)
-		{
-		    stack[--s] = NULL; //pop
-		    stack[s++] = t->matrix; //push
-		    t = t->brother;
-		    break;
-		}
-		else
-		{
-		    t = t->parent;
-		    if(t)
-		    {
-			stack[--s] = NULL; //pop
-		    }
-		}
-	    }
-	}
-    }
-    //glPopMatrix();
-}
-
-TaskDepend
-RenderingEngin::draw_all(SceneGraph* now, TaskDepend wait)
-{
-    Polygon *t;
-
-    t = this;
-
-    //glPushMatrix();
-    int s=0;
-    while(t)
-    {
-	t->draw(stack);
-	if(t->child != NULL)
-	{
-	    stack[s++] = t->matrix; //push
-	    t = t->child;
-	}
-	else if(t->brother != NULL)
-	{
-	    stack[--s] = NULL; //pop
-	    stack[s++] = t->matrix; //push
-	    t = t->brother;
-	}
-	else
-	{
-	    while(t)
-	    {
-		if(t->brother != NULL)
-		{
-		    stack[--s] = NULL; //pop
-		    stack[s++] = t->matrix; //push
-		    t = t->brother;
-		    break;
-		}
-		else
-		{
-		    t = t->parent;
-		    if(t)
-		    {
-			stack[--s] = NULL; //pop
-		    }
-		}
-	    }
-	}
-    }
-    //glPopMatrix();
-}
--- a/example/cube/RenderingEngine.h	Sat Nov 14 21:17:02 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-class RenderingEngine {
-public:
-    RenderingEngine();
-
-    void init(int width, int height, int bpp);
-};
--- a/example/cube/main.cpp	Sat Nov 14 21:17:02 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-int
-main()
-{
-    CubeSceneGraph scg[2];
-    TaskID wait = 0;
-    TaskID wait2 = 0;
-    int phase = 0;
-
-    scg[0] = new CubeSceneGraph("cube.xml");
-    scg[1] = scg[0]->copy();
-
-    // OPENGL, SHARED, DATAPACK, CELL
-    RenderingEngine *engine = RenderingEngineFactory(OPENGL);
-    engine->init(width, height, bpp);
-
-    while (1) {
-	wait = engine->update_all(scg[1-phase], scg[phase], wait);
-	//scg[1-phase]->update_all(scg[phase]);
-	wait2 = engine->draw_all(scg[phase], wait2);
-	//scg[phase]->draw_all(engine);
-	phase ^= 1;
-    }
-}
--- a/example/dependency_task/Makefile.macosx	Sat Nov 14 21:17:02 2009 +0900
+++ b/example/dependency_task/Makefile.macosx	Sun Nov 15 02:02:30 2009 +0900
@@ -1,5 +1,7 @@
 include ./Makefile.def
 
+CC += -m32
+
 SRCS_TMP = $(wildcard *.cc)
 SRCS_EXCLUDE =  # ե
 SRCS = $(filter-out $(SRCS_EXCLUDE),$(SRCS_TMP))
--- a/example/get_segment/Makefile.macosx	Sat Nov 14 21:17:02 2009 +0900
+++ b/example/get_segment/Makefile.macosx	Sun Nov 15 02:02:30 2009 +0900
@@ -1,5 +1,7 @@
 include ./Makefile.def
 
+CC += -m32 
+
 SRCS_TMP = $(wildcard *.cc)
 SRCS_EXCLUDE =  # ե
 SRCS = $(filter-out $(SRCS_EXCLUDE),$(SRCS_TMP))
--- a/example/mainMem/Makefile.macosx	Sat Nov 14 21:17:02 2009 +0900
+++ b/example/mainMem/Makefile.macosx	Sun Nov 15 02:02:30 2009 +0900
@@ -1,5 +1,7 @@
 include ./Makefile.def
 
+CC += -m32
+
 SRCS_TMP = $(wildcard *.cc)
 SRCS_EXCLUDE =  # ե
 SRCS = $(filter-out $(SRCS_EXCLUDE),$(SRCS_TMP))
--- a/example/many_task/Makefile.macosx	Sat Nov 14 21:17:02 2009 +0900
+++ b/example/many_task/Makefile.macosx	Sun Nov 15 02:02:30 2009 +0900
@@ -1,5 +1,6 @@
 include ./Makefile.def
 
+
 SRCS_TMP = $(wildcard *.cc)
 SRCS_EXCLUDE =  # ե
 SRCS = $(filter-out $(SRCS_EXCLUDE),$(SRCS_TMP))
@@ -12,6 +13,7 @@
 TASK_OBJS = $(TASK_SRCS:.cc=.o)
 
 CC      = g++
+CC += -m32
 CFLAGS  = -g -Wall# -O9 #-DDEBUG
 
 INCLUDE = -I${CERIUM}/include/TaskManager -I. -I..
--- a/example/post_function/Makefile.macosx	Sat Nov 14 21:17:02 2009 +0900
+++ b/example/post_function/Makefile.macosx	Sun Nov 15 02:02:30 2009 +0900
@@ -12,6 +12,7 @@
 TASK_OBJS = $(TASK_SRCS:.cc=.o)
 
 LIBS += -lFifoManager `sdl-config --libs`
+CC += -m32
 
 .SUFFIXES: .cc .o
 
--- a/example/post_function/main.cc	Sat Nov 14 21:17:02 2009 +0900
+++ b/example/post_function/main.cc	Sun Nov 15 02:02:30 2009 +0900
@@ -14,7 +14,7 @@
   -count  Number of print \"Hello, World!!\"";
 
 void
-func1(void *p)
+func1(SchedTask *m, void *p, void *q)
 {
     int i = (int)p;
 
@@ -23,7 +23,7 @@
     if (i > 0) {
 	HTaskPtr next = manager->create_task(HELLO_TASK);
 	next->add_param(i);
-	next->set_post(func1, (void*)i);
+	next->set_post(func1, (void*)i, 0);
 	next->set_cpu(SPE_ANY);
 	next->spawn();    
     }
@@ -49,7 +49,7 @@
 
     task = manager->create_task(HELLO_TASK);
     task->add_param(count);
-    task->set_post(func1, (void*)count);
+    task->set_post(func1, (void*)count, 0);
     task->set_cpu(SPE_ANY);
     task->spawn();
 }
--- a/example/renew_task/Makefile.macosx	Sat Nov 14 21:17:02 2009 +0900
+++ b/example/renew_task/Makefile.macosx	Sun Nov 15 02:02:30 2009 +0900
@@ -12,6 +12,7 @@
 TASK_OBJS = $(TASK_SRCS:.cc=.o)
 
 LIBS += -lFifoManager `sdl-config --libs`
+CC += -m32
 
 .SUFFIXES: .cc .o
 
--- a/example/renew_task/README	Sat Nov 14 21:17:02 2009 +0900
+++ b/example/renew_task/README	Sun Nov 15 02:02:30 2009 +0900
@@ -9,10 +9,10 @@
 
 
 -------------------------------------
-RenewTask 
+Task 
 -------------------------------------
 
-  TaskPtr create_task(int TASK_ID);
+  HTaskPtr create_task(int TASK_ID);
 
  PPE ǻȤ
 
@@ -27,10 +27,11 @@
   smanager->create_task, smanager->add_inData,
 
 Ȥ褦ˡsmanager ƤӽФƤ
-ϡPPE Ǥ TaskManager ƱǤ STaskManager äƷǤ
-ʤsmanager->spawn() ȤΤϤޤ󡣤Τޤ޼¹Ԥޤ
+ϡPPE Ǥ TaskManager ƱǤ
 
 
+   SPU ϻȤޤ...
+
 -------------------------------------
 RenewTask Ԥ
 -------------------------------------
@@ -44,10 +45,8 @@
 ˤäƤϡTaskB λޤԤäơ TaskA λ
 ΤȻפޤȤ
 
-  TaskPtr taskB = smanager->create_task(TASK_B);
-  smanager->wait_task(taskB);
-
-ȤƤPPE Ǥ wait_for Ȱ㤤ʣϤǤޤ
+  HTaskPtr taskB = smanager->create_task(TASK_B);
+  taskB->spawn();
 
 
 -------------------------------------
@@ -119,4 +118,4 @@
 [SPE] ** finish  Renew4
 
 
-¬ñ̤ msec Ǥ
\ No newline at end of file
+¬ñ̤ msec Ǥ
--- a/example/renew_task/main.cc	Sat Nov 14 21:17:02 2009 +0900
+++ b/example/renew_task/main.cc	Sun Nov 15 02:02:30 2009 +0900
@@ -2,6 +2,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include "TaskManager.h"
+#include "SchedTask.h"
 #include "Func.h"
 
 extern void task_init();
@@ -14,13 +15,13 @@
 static int task_count = 1;
 
 static void
-renewRepeat(SchedTask *s, void *arg, void *d)
+renewRepeat1(SchedTask *s, void *arg, void *d)
 {
     TaskManager *manager = (TaskManager *)arg;
 
     if (count-->0) {
 	HTask *repeat = manager->create_task(RENEW_REPEAT);
-	repeat->set_post(renewRepeat, (void*)manager, 0);
+	repeat->set_post(renewRepeat1, (void*)manager, 0);
 	repeat->spawn();
 
 	HTask *renew;
@@ -69,7 +70,7 @@
     printf("[PPE] Create Task : RenewRepeat\n\n");
 
     repeat = manager->create_task(RENEW_REPEAT);
-    repeat->set_post(renewRepeat, (void*)manager, 0);
+    repeat->set_post(renewRepeat1, (void*)manager, 0);
 
     // add Active Queue
     repeat->spawn();    
--- a/example/renew_task/ppe/Renew1.cc	Sat Nov 14 21:17:02 2009 +0900
+++ b/example/renew_task/ppe/Renew1.cc	Sun Nov 15 02:02:30 2009 +0900
@@ -11,8 +11,9 @@
     s->printf("[PPE] ** running Renew1\n");
     
     s->printf("[PPE] Create Task : Renew2\n");
-    TaskPtr nextTask = s->create_task(RENEW2);
-    s->wait_task(nextTask);
+    HTaskPtr nextTask = s->create_task(RENEW2);
+    // s->wait_task(nextTask);
+    nextTask->spawn();
     
     s->printf("[PPE] ** finish  Renew1\n");
     s->printf("\n");
--- a/example/renew_task/ppe/Renew1.h	Sat Nov 14 21:17:02 2009 +0900
+++ b/example/renew_task/ppe/Renew1.h	Sun Nov 15 02:02:30 2009 +0900
@@ -1,9 +1,6 @@
 #ifndef INCLUDED_TASK_RENEW1
 #define INCLUDED_TASK_RENEW1
 
-#ifndef INCLUDED_SCHED_TASK
-#  include "SchedTask.h"
-#endif
-
+#include "SchedTask.h"
 
 #endif
--- a/example/renew_task/ppe/Renew2.cc	Sat Nov 14 21:17:02 2009 +0900
+++ b/example/renew_task/ppe/Renew2.cc	Sun Nov 15 02:02:30 2009 +0900
@@ -11,8 +11,9 @@
     s->printf("[PPE] ** running Renew2\n");
 
     s->printf("[PPE] Create Task : Renew3\n");
-    TaskPtr nextTask = s->create_task(RENEW3);
-    s->wait_task(nextTask);
+    HTaskPtr nextTask = s->create_task(RENEW3);
+    nextTask->spawn();
+    // s->wait_task(nextTask);
     
     s->printf("[PPE] ** finish  Renew2\n");
     s->printf("\n");
--- a/example/renew_task/ppe/Renew2.h	Sat Nov 14 21:17:02 2009 +0900
+++ b/example/renew_task/ppe/Renew2.h	Sun Nov 15 02:02:30 2009 +0900
@@ -1,9 +1,7 @@
 #ifndef INCLUDED_TASK_RENEW2
 #define INCLUDED_TASK_RENEW2
 
-#ifndef INCLUDED_SCHED_TASK
 #  include "SchedTask.h"
-#endif
 
 
 #endif
--- a/example/renew_task/ppe/Renew3.cc	Sat Nov 14 21:17:02 2009 +0900
+++ b/example/renew_task/ppe/Renew3.cc	Sun Nov 15 02:02:30 2009 +0900
@@ -11,8 +11,9 @@
     s->printf("[PPE] ** running Renew3\n");
     
     s->printf("[PPE] Create Task : Renew4\n");
-    TaskPtr nextTask = s->create_task(RENEW4);
-    s->wait_task(nextTask);
+    HTaskPtr nextTask = s->create_task(RENEW4);
+    // s->wait_task(nextTask);
+    nextTask->spawn();
     
     s->printf("[PPE] ** finish  Renew3\n");
     s->printf("\n");
--- a/example/renew_task/ppe/RenewStart.cc	Sat Nov 14 21:17:02 2009 +0900
+++ b/example/renew_task/ppe/RenewStart.cc	Sun Nov 15 02:02:30 2009 +0900
@@ -15,8 +15,9 @@
     s->printf("[PPE] ** running RenewStart %d\n", id);
 
     s->printf("[PPE] Create Task : Renew1\n");
-    TaskPtr nextTask =  s->create_task(RENEW1);
-    s->wait_task(nextTask);
+    HTaskPtr nextTask =  s->create_task(RENEW1);
+    nextTask->spawn();
+    // s->wait_task(nextTask);
     
     s->printf("[PPE] ** finish  RenewStart\n");
     s->printf("\n");
--- a/example/scenegraph/xml/Makefile	Sat Nov 14 21:17:02 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-default: macosx
-
-macosx: FORCE
-	@echo "Make for Mac OS X"
-	@$(MAKE) -f Makefile.macosx
-
-linux: FORCE
-	@echo "Make for Linux"
-	@$(MAKE) -f Makefile.linux
-
-cell: FORCE
-	@echo "Make for PS3 (Cell)"
-	@$(MAKE) -f Makefile.cell
-
-FORCE:
-
-clean:
-	@$(MAKE) -f Makefile.macosx clean
-	@$(MAKE) -f Makefile.linux clean
-	@$(MAKE) -f Makefile.cell clean
\ No newline at end of file
--- a/example/scenegraph/xml/Makefile.cell	Sat Nov 14 21:17:02 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,42 +0,0 @@
-include ./Makefile.def
-
-SRCS_TMP = $(wildcard *.cc)
-SRCS_EXCLUDE =  # ե
-SRCS = $(filter-out $(SRCS_EXCLUDE),$(SRCS_TMP))
-OBJS = $(SRCS:.cc=.o)
-
-TASK_DIR  = ppe
-TASK_SRCS_TMP = $(wildcard $(TASK_DIR)/*.cc)
-TASK_SRCS_EXCLUDE = 
-TASK_SRCS = $(filter-out $(TASK_DIR)/$(TASK_SRCS_EXCLUDE),$(TASK_SRCS_TMP))
-TASK_OBJS = $(TASK_SRCS:.cc=.o)
-
-LIBS += -lCellManager -lspe2 -lpthread -Wl,--gc-sections 
-
-.SUFFIXES: .cc .o
-
-.cc.o:
-	$(CC) $(CFLAGS) $(INCLUDE) -c $< -o $@
-
-all: $(TARGET) speobject
-
-$(TARGET): $(OBJS) $(TASK_OBJS)
-	$(CC) -o $@ $(OBJS) $(TASK_OBJS) $(LIBS)
-
-speobject:
-	cd spe; $(MAKE)
-
-run:
-	./$(TARGET) -cpu 6 
-
-link:
-	$(CC) -o $(TARGET) $(OBJS) $(TASK_OBJS) $(LIBS)
-
-debug: $(TARGET)
-	sudo ppu-gdb ./$(TARGET) 
-
-clean:
-	rm -f $(TARGET) $(OBJS) $(TASK_OBJS)
-	rm -f *~ \#*
-	rm -f ppe/*~ ppe/\#*
-	cd spe; $(MAKE) clean
--- a/example/scenegraph/xml/Makefile.def	Sat Nov 14 21:17:02 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,13 +0,0 @@
-TARGET = test_xml
-
-# include/library path
-# ex: macosx
-
-# ex: linux/ps3
-CERIUM = ../../../../Cerium
-
-CC      = g++
-CFLAGS  = -g -Wall -O9
-
-INCLUDE = -I${CERIUM}/include/TaskManager -I. -I..
-LIBS = -L${CERIUM}/TaskManager
--- a/example/scenegraph/xml/Makefile.linux	Sat Nov 14 21:17:02 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-include ./Makefile.def
-
-SRCS_TMP = $(wildcard *.cc)
-SRCS_EXCLUDE =  # ե
-SRCS = $(filter-out $(SRCS_EXCLUDE),$(SRCS_TMP))
-OBJS = $(SRCS:.cc=.o)
-
-TASK_DIR  = ppe
-TASK_SRCS_TMP = $(wildcard $(TASK_DIR)/*.cc)
-TASK_SRCS_EXCLUDE = 
-TASK_SRCS = $(filter-out $(TASK_DIR)/$(TASK_SRCS_EXCLUDE),$(TASK_SRCS_TMP))
-TASK_OBJS = $(TASK_SRCS:.cc=.o)
-
-LIBS += -lFifoManager
-
-.SUFFIXES: .cc .o
-
-.cc.o:
-	$(CC) $(CFLAGS) $(INCLUDE) -c $< -o $@
-
-all: $(TARGET)
-
-$(TARGET): $(OBJS) $(TASK_OBJS)
-	$(CC) -o $@ $(OBJS) $(TASK_OBJS) $(LIBS)
-
-link:
-	$(CC) -o $(TARGET) $(OBJS) $(TASK_OBJS) $(LIBS)
-
-debug: $(TARGET)
-	sudo gdb ./$(TARGET) 
-
-clean:
-	rm -f $(TARGET) $(OBJS) $(TASK_OBJS)
-	rm -f *~ \#*
-	rm -f ppe/*~ ppe/\#*
-	rm -f spe/*~ spe/\#*
--- a/example/scenegraph/xml/Makefile.macosx	Sat Nov 14 21:17:02 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-include ./Makefile.def
-
-SRCS_TMP = $(wildcard *.cc)
-SRCS_EXCLUDE =  # ե
-SRCS = $(filter-out $(SRCS_EXCLUDE),$(SRCS_TMP))
-OBJS = $(SRCS:.cc=.o)
-
-TASK_DIR  = ppe
-TASK_SRCS_TMP = $(wildcard $(TASK_DIR)/*.cc)
-TASK_SRCS_EXCLUDE = 
-TASK_SRCS = $(filter-out $(TASK_DIR)/$(TASK_SRCS_EXCLUDE),$(TASK_SRCS_TMP))
-TASK_OBJS = $(TASK_SRCS:.cc=.o)
-
-LIBS += -lFifoManager `sdl-config --libs`
-
-.SUFFIXES: .cc .o
-
-.cc.o:
-	$(CC) $(CFLAGS) $(INCLUDE) -c $< -o $@
-
-all: $(TARGET)
-
-$(TARGET): $(OBJS) $(TASK_OBJS)
-	$(CC) -o $@ $(OBJS) $(TASK_OBJS) $(LIBS)
-
-link:
-	$(CC) -o $(TARGET) $(OBJS) $(TASK_OBJS) $(LIBS)
-
-debug: $(TARGET)
-	sudo gdb ./$(TARGET) 
-
-clean:
-	rm -f $(TARGET) $(OBJS) $(TASK_OBJS)
-	rm -f *~ \#*
-	rm -f ppe/*~ ppe/\#*
-	rm -f spe/*~ spe/\#*
Binary file example/scenegraph/xml/sg/kanji_ki.png has changed
Binary file example/scenegraph/xml/sg/player_leftmove.png has changed
Binary file example/scenegraph/xml/sg/redbomb_anim_0.png has changed
Binary file example/scenegraph/xml/sg/redbomb_anim_6.png has changed
Binary file example/scenegraph/xml/sg/sg-test.blend has changed
Binary file example/scenegraph/xml/sg/sg-test.blend1 has changed
--- a/example/scenegraph/xml/sg/sg-test.h	Sat Nov 14 21:17:02 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2 +0,0 @@
-#define Cube scene_graph
-#define Cube_1 scene_graph->next
--- a/example/scenegraph/xml/sg/sg-test.xml	Sat Nov 14 21:17:02 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,606 +0,0 @@
-<?xml version="1.0"?>
-<OBJECT-3D>
-	<surface name="Cube" size="36" prim="Triangle" parent="NULL">
-		<coordinate>
-			1.251144 0.119058 -0.025325
-			1.251144 -1.880942 -0.025325
-			-0.748856 -1.880942 -0.025325
-			-0.748856 -1.880942 -0.025325
-			-0.748855 0.119058 -0.025325
-			1.251144 0.119058 -0.025325
-			1.251145 0.119057 1.974675
-			-0.748856 0.119058 1.974675
-			-0.748856 -1.880942 1.974675
-			-0.748856 -1.880942 1.974675
-			1.251144 -1.880943 1.974675
-			1.251145 0.119057 1.974675
-			1.251144 0.119058 -0.025325
-			1.251145 0.119057 1.974675
-			1.251144 -1.880943 1.974675
-			1.251144 -1.880943 1.974675
-			1.251144 -1.880942 -0.025325
-			1.251144 0.119058 -0.025325
-			1.251144 -1.880942 -0.025325
-			1.251144 -1.880943 1.974675
-			-0.748856 -1.880942 1.974675
-			-0.748856 -1.880942 1.974675
-			-0.748856 -1.880942 -0.025325
-			1.251144 -1.880942 -0.025325
-			-0.748856 -1.880942 -0.025325
-			-0.748856 -1.880942 1.974675
-			-0.748856 0.119058 1.974675
-			-0.748856 0.119058 1.974675
-			-0.748855 0.119058 -0.025325
-			-0.748856 -1.880942 -0.025325
-			1.251145 0.119057 1.974675
-			1.251144 0.119058 -0.025325
-			-0.748855 0.119058 -0.025325
-			-0.748855 0.119058 -0.025325
-			-0.748856 0.119058 1.974675
-			1.251145 0.119057 1.974675
-		</coordinate>
-		<normal>
-			0.000000 0.000000 -1.000000
-			0.000000 0.000000 -1.000000
-			0.000000 0.000000 -1.000000
-			0.000000 0.000000 -1.000000
-			0.000000 0.000000 -1.000000
-			0.000000 0.000000 -1.000000
-			0.000000 -0.000000 1.000000
-			0.000000 -0.000000 1.000000
-			0.000000 -0.000000 1.000000
-			0.000000 -0.000000 1.000000
-			0.000000 -0.000000 1.000000
-			0.000000 -0.000000 1.000000
-			1.000000 -0.000000 0.000000
-			1.000000 -0.000000 0.000000
-			1.000000 -0.000000 0.000000
-			1.000000 -0.000000 0.000000
-			1.000000 -0.000000 0.000000
-			1.000000 -0.000000 0.000000
-			-0.000000 -1.000000 -0.000000
-			-0.000000 -1.000000 -0.000000
-			-0.000000 -1.000000 -0.000000
-			-0.000000 -1.000000 -0.000000
-			-0.000000 -1.000000 -0.000000
-			-0.000000 -1.000000 -0.000000
-			-1.000000 0.000000 -0.000000
-			-1.000000 0.000000 -0.000000
-			-1.000000 0.000000 -0.000000
-			-1.000000 0.000000 -0.000000
-			-1.000000 0.000000 -0.000000
-			-1.000000 0.000000 -0.000000
-			0.000000 1.000000 0.000000
-			0.000000 1.000000 0.000000
-			0.000000 1.000000 0.000000
-			0.000000 1.000000 0.000000
-			0.000000 1.000000 0.000000
-			0.000000 1.000000 0.000000
-		</normal>
-		<model>
-			0.251144 -0.880942 0.974675
-		</model>
-		<texture>
-			0.000000 0.000000
-			1.000000 0.000000
-			1.000000 1.000000
-			1.000000 1.000000
-			0.000000 1.000000
-			0.000000 0.000000
-			0.000000 0.000000
-			1.000000 0.000000
-			1.000000 1.000000
-			1.000000 1.000000
-			0.000000 1.000000
-			0.000000 0.000000
-			0.000000 0.000000
-			1.000000 0.000000
-			1.000000 1.000000
-			1.000000 1.000000
-			0.000000 1.000000
-			0.000000 0.000000
-			0.000000 0.000000
-			1.000000 0.000000
-			1.000000 1.000000
-			1.000000 1.000000
-			0.000000 1.000000
-			0.000000 0.000000
-			0.000000 0.000000
-			1.000000 0.000000
-			1.000000 1.000000
-			1.000000 1.000000
-			0.000000 1.000000
-			0.000000 0.000000
-			0.000000 0.000000
-			1.000000 0.000000
-			1.000000 1.000000
-			1.000000 1.000000
-			0.000000 1.000000
-			0.000000 0.000000
-		</texture>
-		<image name="kanji_ki.png">
-			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
-			YII=
-		</image>
-	</surface>
-	<surface name="Cube_1" size="36" prim="Triangle" parent="Cube">
-		<coordinate>
-			-2.384044 0.062584 -1.290772
-			-2.384044 -1.937416 -1.290772
-			-4.384044 -1.937416 -1.290772
-			-4.384044 -1.937416 -1.290772
-			-4.384043 0.062584 -1.290772
-			-2.384044 0.062584 -1.290772
-			-2.384043 0.062583 0.709228
-			-4.384044 0.062584 0.709228
-			-4.384044 -1.937416 0.709228
-			-4.384044 -1.937416 0.709228
-			-2.384044 -1.937417 0.709228
-			-2.384043 0.062583 0.709228
-			-2.384044 0.062584 -1.290772
-			-2.384043 0.062583 0.709228
-			-2.384044 -1.937417 0.709228
-			-2.384044 -1.937417 0.709228
-			-2.384044 -1.937416 -1.290772
-			-2.384044 0.062584 -1.290772
-			-2.384044 -1.937416 -1.290772
-			-2.384044 -1.937417 0.709228
-			-4.384044 -1.937416 0.709228
-			-4.384044 -1.937416 0.709228
-			-4.384044 -1.937416 -1.290772
-			-2.384044 -1.937416 -1.290772
-			-4.384044 -1.937416 -1.290772
-			-4.384044 -1.937416 0.709228
-			-4.384044 0.062584 0.709228
-			-4.384044 0.062584 0.709228
-			-4.384043 0.062584 -1.290772
-			-4.384044 -1.937416 -1.290772
-			-2.384043 0.062583 0.709228
-			-2.384044 0.062584 -1.290772
-			-4.384043 0.062584 -1.290772
-			-4.384043 0.062584 -1.290772
-			-4.384044 0.062584 0.709228
-			-2.384043 0.062583 0.709228
-		</coordinate>
-		<normal>
-			0.000000 0.000000 -1.000000
-			0.000000 0.000000 -1.000000
-			0.000000 0.000000 -1.000000
-			0.000000 0.000000 -1.000000
-			0.000000 0.000000 -1.000000
-			0.000000 0.000000 -1.000000
-			0.000000 -0.000000 1.000000
-			0.000000 -0.000000 1.000000
-			0.000000 -0.000000 1.000000
-			0.000000 -0.000000 1.000000
-			0.000000 -0.000000 1.000000
-			0.000000 -0.000000 1.000000
-			1.000000 -0.000000 0.000000
-			1.000000 -0.000000 0.000000
-			1.000000 -0.000000 0.000000
-			1.000000 -0.000000 0.000000
-			1.000000 -0.000000 0.000000
-			1.000000 -0.000000 0.000000
-			-0.000000 -1.000000 -0.000000
-			-0.000000 -1.000000 -0.000000
-			-0.000000 -1.000000 -0.000000
-			-0.000000 -1.000000 -0.000000
-			-0.000000 -1.000000 -0.000000
-			-0.000000 -1.000000 -0.000000
-			-1.000000 0.000000 -0.000000
-			-1.000000 0.000000 -0.000000
-			-1.000000 0.000000 -0.000000
-			-1.000000 0.000000 -0.000000
-			-1.000000 0.000000 -0.000000
-			-1.000000 0.000000 -0.000000
-			0.000000 1.000000 0.000000
-			0.000000 1.000000 0.000000
-			0.000000 1.000000 0.000000
-			0.000000 1.000000 0.000000
-			0.000000 1.000000 0.000000
-			0.000000 1.000000 0.000000
-		</normal>
-		<model>
-			-3.384044 -0.937416 -0.290772
-		</model>
-		<texture>
-			0.000000 0.000000
-			1.000000 0.000000
-			1.000000 1.000000
-			1.000000 1.000000
-			0.000000 1.000000
-			0.000000 0.000000
-			0.000000 0.000000
-			1.000000 0.000000
-			1.000000 1.000000
-			1.000000 1.000000
-			0.000000 1.000000
-			0.000000 0.000000
-			0.000000 0.000000
-			1.000000 0.000000
-			1.000000 1.000000
-			1.000000 1.000000
-			0.000000 1.000000
-			0.000000 0.000000
-			0.000000 0.000000
-			1.000000 0.000000
-			1.000000 1.000000
-			1.000000 1.000000
-			0.000000 1.000000
-			0.000000 0.000000
-			0.000000 0.000000
-			1.000000 0.000000
-			1.000000 1.000000
-			1.000000 1.000000
-			0.000000 1.000000
-			0.000000 0.000000
-			0.000000 0.000000
-			1.000000 0.000000
-			1.000000 1.000000
-			1.000000 1.000000
-			0.000000 1.000000
-			0.000000 0.000000
-		</texture>
-		<image name="kanji_ki.png"/>
-	</surface>
-</OBJECT-3D>
\ No newline at end of file
Binary file example/scenegraph/xml/sg/sg-test2.blend has changed
Binary file example/scenegraph/xml/sg/sg-test2.blend1 has changed
--- a/example/scenegraph/xml/sg/sg-test2.h	Sat Nov 14 21:17:02 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,2 +0,0 @@
-#define Cone scene_graph
-#define Cone_1 scene_graph->next
--- a/example/scenegraph/xml/sg/sg-test2.xml	Sat Nov 14 21:17:02 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,552 +0,0 @@
-<?xml version="1.0"?>
-<OBJECT-3D>
-	<surface name="Cone" size="18" prim="Triangle" parent="NULL">
-		<coordinate>
-			-2.990213 -4.356150 -0.270008
-			-2.541925 -2.683117 -0.270008
-			-3.249032 -3.390224 1.729992
-			-3.249032 -3.390224 1.729992
-			-4.214958 -3.131405 -0.270008
-			-2.990213 -4.356150 -0.270008
-			-3.249032 -3.390224 1.729992
-			-2.541925 -2.683117 -0.270008
-			-4.214958 -3.131405 -0.270008
-			-3.249032 -3.390224 -0.270008
-			-2.541925 -2.683117 -0.270008
-			-2.990213 -4.356150 -0.270008
-			-3.249032 -3.390224 -0.270008
-			-2.990213 -4.356150 -0.270008
-			-4.214958 -3.131405 -0.270008
-			-4.214958 -3.131405 -0.270008
-			-2.541925 -2.683117 -0.270008
-			-3.249032 -3.390224 -0.270008
-		</coordinate>
-		<normal>
-			0.937086 -0.251091 0.242536
-			0.937086 -0.251091 0.242536
-			0.937086 -0.251091 0.242536
-			-0.685995 -0.685994 0.242536
-			-0.685995 -0.685994 0.242536
-			-0.685995 -0.685994 0.242536
-			-0.251091 0.937086 0.242536
-			-0.251091 0.937086 0.242536
-			-0.251091 0.937086 0.242536
-			-0.000000 0.000000 -1.000000
-			-0.000000 0.000000 -1.000000
-			-0.000000 0.000000 -1.000000
-			-0.000000 0.000000 -1.000000
-			0.000000 0.000000 -1.000000
-			0.000000 0.000000 -1.000000
-			-0.000000 0.000000 -1.000000
-			-0.000000 0.000000 -1.000000
-			-0.000000 0.000000 -1.000000
-		</normal>
-		<model>
-			-3.249032 -3.390224 0.729992
-		</model>
-		<texture>
-			0.000000 0.000000
-			1.000000 0.000000
-			1.000000 1.000000
-			0.000000 0.000000
-			1.000000 0.000000
-			1.000000 1.000000
-			0.000000 0.000000
-			1.000000 0.000000
-			1.000000 1.000000
-			0.000000 0.000000
-			1.000000 0.000000
-			1.000000 1.000000
-			0.000000 0.000000
-			1.000000 0.000000
-			1.000000 1.000000
-			0.000000 0.000000
-			1.000000 0.000000
-			1.000000 1.000000
-		</texture>
-		<image name="redbomb_anim_0.png">
-			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
-			SUVORK5CYII=
-		</image>
-	</surface>
-	<surface name="Cone_1" size="18" prim="Triangle" parent="Cone">
-		<coordinate>
-			-0.137300 -0.931876 -1.241959
-			0.310988 0.741157 -1.241959
-			-0.396119 0.034050 0.758041
-			-0.396119 0.034050 0.758041
-			-1.362045 0.292869 -1.241959
-			-0.137300 -0.931876 -1.241959
-			-0.396119 0.034050 0.758041
-			0.310988 0.741157 -1.241959
-			-1.362045 0.292869 -1.241959
-			-0.396119 0.034050 -1.241959
-			0.310988 0.741157 -1.241959
-			-0.137300 -0.931876 -1.241959
-			-0.396119 0.034050 -1.241959
-			-0.137300 -0.931876 -1.241959
-			-1.362045 0.292869 -1.241959
-			-1.362045 0.292869 -1.241959
-			0.310988 0.741157 -1.241959
-			-0.396119 0.034050 -1.241959
-		</coordinate>
-		<normal>
-			0.937086 -0.251091 0.242536
-			0.937086 -0.251091 0.242536
-			0.937086 -0.251091 0.242536
-			-0.685995 -0.685994 0.242536
-			-0.685995 -0.685994 0.242536
-			-0.685995 -0.685994 0.242536
-			-0.251091 0.937086 0.242536
-			-0.251091 0.937086 0.242536
-			-0.251091 0.937086 0.242536
-			-0.000000 0.000000 -1.000000
-			-0.000000 0.000000 -1.000000
-			-0.000000 0.000000 -1.000000
-			-0.000000 0.000000 -1.000000
-			0.000000 0.000000 -1.000000
-			0.000000 0.000000 -1.000000
-			-0.000000 0.000000 -1.000000
-			-0.000000 0.000000 -1.000000
-			-0.000000 0.000000 -1.000000
-		</normal>
-		<model>
-			-0.396119 0.034050 -0.241959
-		</model>
-		<texture>
-			0.000000 0.000000
-			1.000000 0.000000
-			1.000000 1.000000
-			0.000000 0.000000
-			1.000000 0.000000
-			1.000000 1.000000
-			0.000000 0.000000
-			1.000000 0.000000
-			1.000000 1.000000
-			0.000000 0.000000
-			1.000000 0.000000
-			1.000000 1.000000
-			0.000000 0.000000
-			1.000000 0.000000
-			1.000000 1.000000
-			0.000000 0.000000
-			1.000000 0.000000
-			1.000000 1.000000
-		</texture>
-		<image name="kanji_ki.png">
-			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
-			YII=
-		</image>
-	</surface>
-</OBJECT-3D>
\ No newline at end of file
--- a/example/scenegraph/xml/task/collision.cpp	Sat Nov 14 21:17:02 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,38 +0,0 @@
-/**
- * 前もって collision する対象を task の global に登録しておく task が必要
- * SceneGraph を読み込んで
- * 衝突判定を行う node を確保する
- * node の型に対応する collision 関数を呼び出す
- * 新しい SceneGraoh を生成する
- * 登録してある global を解放する task を用意する
- *
- */
-
-// #define DEBUG
-#include "error.h"
-#include "scene_graph_pack.h"
-
-// 本来は tasks.xml に書く
-SchedDefineTask(SceneGraphCollision);
-
-int
-move::run(void *rbuf, void *wbuf)
-{
-    __debug_spe("SceneGraphCollision\n");
-
-    SceneGraphPackPtr cur = (SceneGraphPack*) rbuf;
-    int collision_task_id = cur->collision_task;
-    // next は Mainmemory 上のアドレス
-    SceneGraphPackPtr next =
-      (SceneGraphPackPtr)smanager->allocate(sizeof(SceneGraphPack));
-
-    if (smanager->call_task(collision_task_id, (void*)cur, (void*)next)) {
-      // 次の状態があって、新しく node を確保してそこを確保する
-      smanager->write(cur, next, sizeof(SceneGraphPack));
-    } else {
-      // この node は消滅
-      smanager->free(next);
-    }
-
-    return 0;
-}
--- a/example/scenegraph/xml/task/collision.h	Sat Nov 14 21:17:02 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,15 +0,0 @@
-#ifndef INCLUDED_CREATE_POLYGON
-#define INCLUDED_CREATE_POLYGON
-
-#ifndef INCLUDED_SCHED_TASK
-#  include "SchedTask.h"
-#endif
-
-class CreatePolygon : public SchedTask {
-public:
-    SchedConstructor(CreatePolygon);
-
-    int run(void *rbuf, void *wbuf);
-};
-
-#endif
--- a/example/scenegraph/xml/task/collision_task1.cpp	Sat Nov 14 21:17:02 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-/**
- * node の衝突判定を行う
- *
- */
-
-// #define DEBUG
-#include "error.h"
-#include "scene_graph_pack.h"
-
-// 本来は tasks.xml に書く
-SchedDefineTask(SceneGraphMove);
-
-int
-move::run(void *rbuf, void *wbuf)
-{
-    __debug_spe("SceneGraphMove\n");
-
-    SceneGraphPackPtr cur = (SceneGraphPack*) rbuf;
-    //SceneGraphPackPtr next = (SceneGraphPackPtr*)wbuf;
-    SceneGraphPackPtr next = cur;
-    //memcpy((void*)rbuf, (void*)wbuf, sizeof(SceneGtaphPack));
-
-    SceneGraphPackPtr col =
-      (SceneGraphPackPtr*)smanager->global_get(cur->collision);
-    if (cur->x == col->x) {
-      next->move_function_id = Next;
-    }
-    return 1;
-}
--- a/example/scenegraph/xml/task/move.cpp	Sat Nov 14 21:17:02 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-/**
- * SceneGraph を読み込んで
- * node の型に対応する move 関数を呼び出す
- * move 関数が無かったら load する
- * 新しい SceneGraoh を生成する
- *
- */
-
-// #define DEBUG
-#include "error.h"
-#include "scene_graph_pack.h"
-
-// 本来は tasks.xml に書く
-SchedDefineTask(SceneGraphMove);
-
-int
-move::run(void *rbuf, void *wbuf)
-{
-    __debug_spe("SceneGraphMove\n");
-
-    SceneGraphPackPtr cur = (SceneGraphPack*) rbuf;
-    int move_task_id = cur->move_task;
-    // next は Mainmemory 上のアドレス
-    SceneGraphPackPtr next =
-      (SceneGraphPackPtr)smanager->allocate(sizeof(SceneGraphPack));
-
-    if (smanager->call_task(move_task_id, (void*)cur, (void*)next)) {
-      // 次の状態があって、新しく node を確保してそこを確保する
-      smanager->write(cur, next, sizeof(SceneGraphPack));
-    } else {
-      // この node は消滅
-      smanager->free(next);
-    }
-
-    return 0;
-}
--- a/example/scenegraph/xml/task/move.h	Sat Nov 14 21:17:02 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,15 +0,0 @@
-#ifndef INCLUDED_CREATE_POLYGON
-#define INCLUDED_CREATE_POLYGON
-
-#ifndef INCLUDED_SCHED_TASK
-#  include "SchedTask.h"
-#endif
-
-class CreatePolygon : public SchedTask {
-public:
-    SchedConstructor(CreatePolygon);
-
-    int run(void *rbuf, void *wbuf);
-};
-
-#endif
--- a/example/scenegraph/xml/task/move_task1.cpp	Sat Nov 14 21:17:02 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +0,0 @@
-/**
- * node の状態を変化させる
- *
- */
-
-// #define DEBUG
-#include "error.h"
-#include "scene_graph_pack.h"
-
-// 本来は tasks.xml に書く
-SchedDefineTask(SceneGraphMove);
-
-int
-move::run(void *rbuf, void *wbuf)
-{
-    __debug_spe("SceneGraphMove\n");
-
-    SceneGraphPackPtr cur = (SceneGraphPack*) rbuf;
-    //SceneGraphPackPtr next = (SceneGraphPackPtr*)wbuf;
-    SceneGraphPackPtr next = cur;
-    //memcpy((void*)rbuf, (void*)wbuf, sizeof(SceneGtaphPack));
-
-    next->x = cur->x + 1;
-
-    return 1;
-}
--- a/example/scenegraph/xml/task/tree_walk_collision.cpp	Sat Nov 14 21:17:02 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-/*!
-  tree_walk cell の場合は spe がデータを作成して送り込む
-  SPE が出力した tree を DMA 転送するのに必要なデータ構造を作成する
-
- */
--- a/example/scenegraph/xml/task/tree_walk_move.cpp	Sat Nov 14 21:17:02 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-/*!
-  tree_walk cell の場合は spe がデータを作成して送り込む
-  SPE が出力した tree を DMA 転送するのに必要なデータ構造を作成する
-
- */
-
-// #define DEBUG
-#include "error.h"
-#include "scene_graph_pack.h"
-
-// 本来は tasks.xml に書く
-SchedDefineTask(TreeWalkMove);
-
-int
-tree_walk_move::run(void *rbuf, void *wbuf)
-{
-    __debug_spe("TreeWalkMove\n");
-
-    SceneGraphPackPtr cur = (SceneGraphPack*) rbuf;
-    //SceneGraphPackPtr next = (SceneGraphPackPtr*)wbuf;
-    SceneGraphPackPtr next = cur;
-    //memcpy((void*)rbuf, (void*)wbuf, sizeof(SceneGtaphPack));
-
-    next->x = cur->x + 1;
-
-    return 1;
-}
--- a/example/scenegraph/xml/tasks.xml	Sat Nov 14 21:17:02 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,55 +0,0 @@
-<!-- Cerium Task Configuration
-     CPU_PPE = 0, // default
-     CPU_SPE = 1,
-     SPE_ANY = CPU_SPE,
-     SPE_0 = 2,
-     SPE_1 = 3,
-     SPE_2 = 4,
-     SPE_3 = 5,
-     SPE_4 = 6,
-     SPE_5 = 7,
-  -->
-
-<directory>
-  <path> task </path>
-
-    <target>
-      <path> spe </path>
-      <cpu> SPE_ANY </cpu>
-      <cc cc:compiler="spu-g++"/>
-    </target>
-
-    <target>
-      <path> ppe </path>
-      <cpu> CPU_PPE </cpu>
-      <cc cc:compiler="ppu-g++"/>
-    </target>
-
-    <target>
-      <path> macosx </path>
-      <cpu> CPU_PPE </cpu>
-      <cc cc:compiler="mac-g++"/>
-    </target>
-
-    <target name="linux">
-      <path> linux </path>
-      <cpu> CPU_PPE </cpu>
-      <cc cc:compiler="linux-g++"/>
-    </target>
-    <task name="move">
-    <source> move.cpp </source>
-
-  </task>
-
-  <task name="collision">
-    <source> collision.cpp </source>
-  </task>
-
-</directory>
-
-<directory>
-  <path> ${CERIUM}/Renderer/test_render </path>
-  <task name="Renderer">
-    <config> renderer.xml </config>
-  </task>
-</directory>
--- a/example/scenegraph/xml/xml.cpp	Sat Nov 14 21:17:02 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,64 +0,0 @@
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <sys/time.h>
-#include "TaskManager.h"
-
-/**
- * 2つの XML ファイルを読み込んで、それを表示する。
- * move を使って SceneGraph の値を変える。
- * 1つの型に複数のインスタンスを対応させる。
- * それぞれの型にランダムアクセスする。
- * 型 ID の割り当て。
- */
-
-void TMend(void);
-
-const char *usr_help_str = "Usage: ./test_xml [option]\n \
-options\n\
-  -cpu     Number of SPE used (default 1)\n\
-  -l, --length  Sorted number of data (default 1200)\n\
-  -h, --help    Print this message";
-
-int
-init(int argc, char **argv)
-{
-    for (int i = 1; argv[i]; ++i) {
-        if (strcmp(argv[i], "--length") == 0 || strcmp(argv[i], "-l") == 0) {
-            length = atoi(argv[++i]);
-        }
-
-    }
-
-    return 0;
-}
-
-int
-TMmain(int argc, char *argv[])
-{
-  if (init(argc, argv) < 0) {
-    return -1;
-  }
-  SceneGraphRootPtr sgroot = new SceneGraphRoot(this->width, this->height);
-
-  sgroot->createFromXMLfile("sg/sg-test.xml");
-  sgroot->createFromXMLfile("sg/sg-test2.xml");
-
-  manager->set_TMend(TMend);
-
-}
-
-void
-TMend(void)
-{
-}
-
-void
-load_xml()
-{
-}
-
-static void
-test_move(SceneGraphPtr node)
-{
-}
--- a/example/share_task/Makefile.macosx	Sat Nov 14 21:17:02 2009 +0900
+++ b/example/share_task/Makefile.macosx	Sun Nov 15 02:02:30 2009 +0900
@@ -12,6 +12,7 @@
 TASK_OBJS = $(TASK_SRCS:.cc=.o)
 
 LIBS += -lFifoManager `sdl-config --libs`
+CC += -m32
 
 .SUFFIXES: .cc .o
 
--- a/example/task_queue/Makefile.macosx	Sat Nov 14 21:17:02 2009 +0900
+++ b/example/task_queue/Makefile.macosx	Sun Nov 15 02:02:30 2009 +0900
@@ -12,6 +12,7 @@
 TASK_OBJS = $(TASK_SRCS:.cc=.o)
 
 LIBS += -lFifoManager `sdl-config --libs`
+CC += -m32
 
 .SUFFIXES: .cc .o
 
--- a/example/task_queue/main.cc	Sat Nov 14 21:17:02 2009 +0900
+++ b/example/task_queue/main.cc	Sun Nov 15 02:02:30 2009 +0900
@@ -31,7 +31,7 @@
 Queues queues;
 
 static void
-repeat(void *arg)
+repeat(SchedTask *s, void *arg, void *dm)
 {
     static int count = 4;
     QueuePtr q = (QueuePtr) arg;
@@ -39,7 +39,7 @@
 
     if (count-->0) {
         HTask *t = manager->create_task(HELLO_TASK);
-        t->set_post(repeat, arg);
+        t->set_post(repeat, arg, 0);
         t->add_param(q->i);
         t->add_param((int)arg);
         t->spawn();
@@ -91,7 +91,7 @@
 
 	hello->add_param(i);
 	hello->add_param((int)&queues);
-	hello->set_post(repeat, (void*) &queues);
+	hello->set_post(repeat, (void*) &queues, 0);
 
 	hello->spawn();
     }
--- a/example/word_count/Makefile.macosx	Sat Nov 14 21:17:02 2009 +0900
+++ b/example/word_count/Makefile.macosx	Sun Nov 15 02:02:30 2009 +0900
@@ -12,6 +12,7 @@
 TASK_OBJS = $(TASK_SRCS:.cc=.o)
 
 LIBS += -lFifoManager `sdl-config --libs`
+CC += -m32
 
 .SUFFIXES: .cc .o
 
--- a/example/word_count3/Makefile.macosx	Sat Nov 14 21:17:02 2009 +0900
+++ b/example/word_count3/Makefile.macosx	Sun Nov 15 02:02:30 2009 +0900
@@ -12,6 +12,7 @@
 TASK_OBJS = $(TASK_SRCS:.cc=.o)
 
 LIBS += -lFifoManager `sdl-config --libs`
+CC += -m32
 
 .SUFFIXES: .cc .o
 
--- a/example/word_count3/main.cc	Sat Nov 14 21:17:02 2009 +0900
+++ b/example/word_count3/main.cc	Sun Nov 15 02:02:30 2009 +0900
@@ -145,7 +145,7 @@
 }
 
 void
-func2(void *p)
+func2(SchedTask *s, void *p, void *q)
 {
   data_list_t *data = (data_list_t*)p;
 
@@ -175,7 +175,7 @@
 }
 
 void
-func1(void *p)
+func1(SchedTask *s, void *p, void *q)
 {
 
   /*receive*/
@@ -255,12 +255,12 @@
   
   
   if (*data->sum_task_num > 0) {
-    wait_task->set_post(func1,p);
+    wait_task->set_post(func1,p, 0);
   }
 
   /* すべての task が終了するのを待つ。*/
   else {
-    wait_task->set_post(func2,p);
+    wait_task->set_post(func2,p, 0);
   }
 
   /* 16task が終了するのを待つ */
@@ -335,7 +335,7 @@
 
   data->task_list = now;
 
-  func1((void*)data);
+  func1(0, (void*)data, 0);
 
   t_print->spawn();