changeset 543:9f9d51b60062

complex lindaapi
author aaa
date Wed, 21 Oct 2009 21:00:48 +0900
parents 129979e7d5c7
children 519a1bba9b05
files TaskManager/Test/test_render/Application/dynamic_create.cc TaskManager/Test/test_render/Makefile.def TaskManager/Test/test_render/Makefile.macosx TaskManager/Test/test_render/SceneGraphRoot.cc TaskManager/Test/test_render/SceneGraphRoot.h TaskManager/Test/test_render/lindaapi.cc TaskManager/Test/test_render/lindaapi.h TaskManager/Test/test_render/lindaapi/Makefile TaskManager/Test/test_render/lindaapi/lindaapi.h
diffstat 9 files changed, 79 insertions(+), 735 deletions(-) [+]
line wrap: on
line diff
--- a/TaskManager/Test/test_render/Application/dynamic_create.cc	Wed Oct 21 19:03:46 2009 +0900
+++ b/TaskManager/Test/test_render/Application/dynamic_create.cc	Wed Oct 21 21:00:48 2009 +0900
@@ -7,6 +7,9 @@
 #include <sys/stat.h>
 #include <unistd.h>
 #include "SceneGraphRoot.h"
+#include "lindaapi/lindaapi.h"
+
+#define PORT 10000
 
 /*
 typedef struct {
@@ -15,6 +18,12 @@
 } st_mmap_t;
 */
 
+typedef struct {
+    int tid;
+    int read_id;
+    SceneGraphPtr node;
+} callback_arg;
+
 int
 fix_byte(int size,int fix_byte_size)
 {
@@ -93,10 +102,11 @@
 	node->stack_xyz[1] = -node->stack_xyz[1];
     }
     
-    Pad *pad = sgroot->getController();
+    //Pad *pad = sgroot->getController();
 
+    /*
     if (pad->right.isPush()) {
-	SceneGraphPtr earth;	
+        SceneGraphPtr earth;	
 	
 	st_mmap_t m = my_mmap("xml_file/universe.xml");
 
@@ -106,17 +116,55 @@
 	earth->set_move_collision(moon_move, moon_collision);
 	node->addChild(earth);
     }
+    */
+
+    psx_sync_n();
+}
+
+void
+create_sg(SceneGraphPtr node, unsigned char *data, int len)
+{
+    SceneGraphPtr earth;    
+
+    //sgroot->createFromXMLmemory(sgroot->tmanager, "xml_file/universe.xml");
+    const char *objname = sgroot->createFromXMLmemory(sgroot->tmanager, (char *)data, len);
+    earth = sgroot->createSceneGraph(objname);
+    earth->set_move_collision(moon_move, moon_collision);
+    node->addChild(earth);
+    
 }
 
-/*
+static void
+callbacker(unsigned char *tuple, void *arg) {
+    int len;
+    unsigned char *data;
+    callback_arg *carg = (callback_arg *)arg;
+    
+    len = psx_get_datalength(tuple);
+    // 最初の4byteデータは使わない
+    data = tuple+LINDA_HEADER_SIZE;
+    
+    // ここで create
+    create_sg(carg->node, data, len);
+
+    /* dataは'\0'で終わっている事を期待     (writerで保証する)  */
+    //printf("get data[%d]: `%s'\n", len, data);
+    free(tuple);
+
+    psx_callback_wait_rd(carg->tid, carg->read_id, callbacker, arg);
+}
+
+
 void
-linda_init()
+linda_init(TaskManager *manager, SceneGraphPtr node)
 {
     init_linda();
-    tspace = open_linda_java("localhost", PORT);
-    printf("open");
+    callback_arg *carg = (callback_arg *)manager->allocate(sizeof(callback_arg));
+    carg->tid = open_linda_java("cycas.cr.ie.u-ryukyu.ac.jp", PORT);
+    carg->read_id = 10;
+    carg->node = node;
+    psx_callback_wait_rd(carg->tid, carg->read_id, callbacker, carg);
 }
-*/
 
 void
 dynamic_init(TaskManager *manager)
@@ -124,10 +172,8 @@
     SceneGraphPtr earth;
     sgroot->tmanager = manager;
 
-    
-
 #if 0
-    // テスト用に mmap したデータを第2引数に渡す
+    // テスト用に mmap したデータを第2引数に渡す予定でした
     sgroot->createFromXMLmemory(manager, "xml_file/universe.xml");
 
     // sglist に登録されている name から sgid を引き、sg_src[sgid] からコピーして返す
@@ -137,6 +183,8 @@
     parent = sgroot->createSceneGraph();
     parent->set_move_collision(earth_move, earth_collision);
 #endif    
+
+    linda_init(manager, parent);
     
     // SceneGraphRoot に、使用する SceneGraph を設定する
     // このとき、ユーザーが記述した SceneGraph の root を渡す。
--- a/TaskManager/Test/test_render/Makefile.def	Wed Oct 21 19:03:46 2009 +0900
+++ b/TaskManager/Test/test_render/Makefile.def	Wed Oct 21 21:00:48 2009 +0900
@@ -6,4 +6,4 @@
 CFLAGS  = -O9 -g -Wall -DUSE_MEMLIST=1 -DUSE_MEMHASH=1 # -DDEBUG
 
 INCLUDE = -I$(CERIUM)/include/TaskManager -I.
-LIBS = -L$(CERIUM)/TaskManager
+LIBS = -L$(CERIUM)/TaskManager -Llindaapi
--- a/TaskManager/Test/test_render/Makefile.macosx	Wed Oct 21 19:03:46 2009 +0900
+++ b/TaskManager/Test/test_render/Makefile.macosx	Wed Oct 21 21:00:48 2009 +0900
@@ -12,6 +12,7 @@
 TASK_OBJS = $(TASK_SRCS:.cc=.o)
 
 LIBS += -lFifoManager
+LIBS += -llindaapi
 
 CFLAGS += `sdl-config --cflags` `xml2-config --cflags`
 LIBS   += `sdl-config --libs` `xml2-config --libs` -lSDL_image -Wl,-framework,OpenGL
--- a/TaskManager/Test/test_render/SceneGraphRoot.cc	Wed Oct 21 19:03:46 2009 +0900
+++ b/TaskManager/Test/test_render/SceneGraphRoot.cc	Wed Oct 21 21:00:48 2009 +0900
@@ -171,9 +171,10 @@
 			__FUNCTION__, __LINE__, sg->name);
 }
 
-void
+const char *
 //SceneGraphRoot::createFromXMLmemory(TaskManager *manager, const char *xmlfile)
-SceneGraphRoot::createFromXMLmemory(TaskManager *manager, st_mmap_t mmap_t)
+//SceneGraphRoot::createFromXMLmemory(TaskManager *manager, st_mmap_t mmap_t)
+SceneGraphRoot::createFromXMLmemory(TaskManager *manager, char *data, int len)
 {
     xmlDocPtr doc;
     xmlNodePtr cur;
@@ -182,9 +183,11 @@
     // size は取れるはず、テスト用に mmap したデータを使う
     /* パース DOM生成 */
     //doc = xmlParseFile(xmlfile);
-    int size = (int)mmap_t.size;
-    char *xmldata = (char *)mmap_t.file_mmap;
-    doc = xmlParseMemory(xmldata, size);
+    //int size = (int)mmap_t.size;
+    //char *xmldata = (char *)mmap_t.file_mmap;
+    //doc = xmlParseMemory(xmldata, size);
+
+    doc = xmlParseMemory(data, len);
     cur = xmlDocGetRootElement(doc);
 
     /* ??  */
@@ -206,6 +209,10 @@
     }
     
     xmlFreeDoc(doc);
+
+    // 1つの xml file に object は1つだと想定しているので、だめだこりゃ
+    
+    return tmp->name;
 }
 
 /* 生成された SceneGraph のを sglist に登録 */
@@ -218,7 +225,7 @@
 }
 
 SceneGraphPtr
-SceneGraphRoot::createSceneGraph(char *name)
+SceneGraphRoot::createSceneGraph(const char *name)
 {
     SceneGraphPtr src;
     SceneGraphPtr p;
--- a/TaskManager/Test/test_render/SceneGraphRoot.h	Wed Oct 21 19:03:46 2009 +0900
+++ b/TaskManager/Test/test_render/SceneGraphRoot.h	Wed Oct 21 21:00:48 2009 +0900
@@ -63,10 +63,11 @@
     /* User API */
     void createFromXMLfile(TaskManager *manager, const char *);
     //void createFromXMLmemory(TaskManager *manager, const char *xml);
-    void createFromXMLmemory(TaskManager *manager, st_mmap_t mmap_t);
+    //void createFromXMLmemory(TaskManager *manager, st_mmap_t mmap_t);
+    const char *createFromXMLmemory(TaskManager *manager, char *data, int len);
     SceneGraphPtr createSceneGraph(int id);
     SceneGraphPtr createSceneGraph(void);
-    SceneGraphPtr createSceneGraph(char *name);
+    SceneGraphPtr createSceneGraph(const char *name);
     void setSceneData(SceneGraphPtr sg);
     Pad *getController(void);
     SceneGraphIteratorPtr getIterator(void);
--- a/TaskManager/Test/test_render/lindaapi.cc	Wed Oct 21 19:03:46 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,627 +0,0 @@
-//  $Id: lindaapi.c,v 1.9 2006/04/03 08:17:11 kono Exp $
-//
-
-/*----------------------------------------------------------------------
- インクルードファイル読み込み
-----------------------------------------------------------------------*/
-#include <sys/file.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <sys/uio.h>
-#include <sys/time.h>
-#include <sys/select.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <netinet/in.h>
-#include <netinet/tcp.h>
-#include <signal.h>
-#include <termios.h>
-#include <netdb.h>
-#include <errno.h>
-#include <sys/select.h>
-
-#include "lindaapi.h"
-
-#define TIMEDELTA       10
-#if 0
-#define PSX_Debug(deb)    (putchar(PS_DEB)),\
-            (printf deb ),\
-            (putchar(PS_DEB))
-#define DEB(a)
-#else
-#define PSX_Debug(deb)
-#define DEB(a)        /* a */
-#endif
-
-COMMAND *q_top, *q_end;
-REPLY *reply, *r_end;
-
-int qsize, ps;
-unsigned short seq;
-
-#ifdef COUNT_PACKET
-// print packet count message per PRINT_INTERVAL sec
-#define PRINT_INTERVAL 4
-
-/*-------------------------------------------------------------------/
-  void
-  count_packet (char type):
-      パケットの送受信カウントする
-
-  引き数:
-      type - 送信、受信 (char型: s,r)
-/-------------------------------------------------------------------*/
-void count_packet(char type)
-{
-    static int send_packet=-1,receive_packet=0;
-    static struct timeval start,now,previous;
-
-    if (out_packet == -1) {
-        gettimeofday(&start,NULL);
-        gettimeofday(&previous,NULL);
-        send_packet = 0;
-        printf("packet\tout\tread\t\ttime\n");
-    }
-
-    if (type == 's') {
-        send_packet++;
-    } else if (type == 'r') {
-        receive_packet++;
-    } else {
-        fprintf(stderr,"No type in count_packet function\n");
-        return;
-    }
-
-    gettimeofday(&now,NULL);
-    if ((now.tv_sec-previous.tv_sec) > PRINT_INTERVAL) {
-        printf("log\t%d\t%d\t%ld\n",
-               send_packet,receive_packet,now.tv_sec-start.tv_sec);
-        fflush(stdout);
-
-        previous.tv_sec = now.tv_sec;
-        send_packet = receive_packet = 0;
-    }
-}
-#endif
-
-
-#define unix_open       open
-#define unix_read_w     read
-/*-------------------------------------------------------------------/
-  int
-  unix_read (int fd, char *buf, unsigned int size):
-      サーバからTUPLEを読みこむ。
-      現在は使われていない。
-
-  引き数:
-      fd   - サーバのファイルディスクリプタ
-      buf  - 受け取るデータの格納場所(TUPLEヘッダ含む)
-      size - bufのbyte数
-  返り値:
-      読みこんだbyte数
-/-------------------------------------------------------------------*/
-int
-unix_read(int fd,char *buf,unsigned int size) {
-    int len,a,i;
-    if(read(fd,buf,INT_SIZE)!=INT_SIZE) {  // INT_SIZE is sizeof(int)
-        fprintf(stderr, "read error! on fd:%d len=%d %s\n", fd,
-                *(unsigned int*)&buf[0],
-                strerror(errno));
-        exit(1);
-    }
-    len = ntohl(*(unsigned int*)&buf[0]);
-    if((unsigned int)len>size) len=(int)size;
-    for(a=0;a<len;a+=i) {
-        if((i=read(fd,buf+a,len-a))<0) {
-            fprintf(stderr, "ldserv: client read error! on i=%d len= %d %s\n",
-                    i, len, strerror(errno));
-            exit(1);
-        }
-    }
-    return len;
-}
-
-/*-------------------------------------------------------------------/
-  int
-  unix_write (int fd, unsigned char *buf, unsigned int size):
-      サーバへTUPLEを送る。
-
-  引き数:
-      fd   - サーバのファイルディスクリプタ
-      buf  - サーバへ送るデータ(TUPLEヘッダ含む)
-      size - bufのbyte数
-  返り値:
-      送った(書きこんだ)データのbyte数
-/-------------------------------------------------------------------*/
-int
-unix_write(int fd,unsigned char *buf,unsigned int size) {
-    int i,nsize;
-    nsize = htonl(size);
-    i  = write(fd,&nsize,INT_SIZE);
-    i += write(fd,buf,size); // size == datasize + LINDA_HEADER_SIZE
-#ifdef COUNT_PACKET
-    count_packet('s');
-#endif
-    return(i);
-}
-
-#define unix_write_w   unix_write
-
-#define SERV_NAME      unix_port
-#define PROTO_NAME     "tcp"
-#define SERVER_NAME    hostname
-#define MAX_REQ        16
-
-int fd,paddrlen;
-struct hostent *hoste;
-struct sockaddr_in serv_addr;
-struct sockaddr_un serv_addr_un;
-unsigned char ipaddr[4];
-
-
-/*-------------------------------------------------------------------/
-  int
-  start_linda (char * hostname):
-      サーバとのコネクションを確立し、COMMANDキューとREPLYキューの
-      初期化を行なう。
-
-  引き数:
-      hostname - サーバのホスト名
-  返り値:
-      コネクション確立が成功するとそのファイルディスクリプタを返す。
-      失敗すると -1 を返す。
-/-------------------------------------------------------------------*/
-int
-start_linda(char * hostname){
-    char *p;
-    const char *hostname0 = "/tmp/ldserv";
-
-    if (! hostname) {
-        hostname = (char *)hostname0;
-    }
-    if (hostname[0]=='/') {
-        /* Unix domain */
-        if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) == FAIL){
-            fprintf(stderr, "socket open error! errno :%d %s\n", errno,
-                    strerror(errno));
-            return(-1);
-        }
-        serv_addr_un.sun_family = AF_UNIX;
-        strcpy(serv_addr_un.sun_path, hostname);
-        fprintf(stdout,"connecting ... %d\n", ntohs(serv_addr.sin_port));
-        if (connect(fd, (struct sockaddr *)&serv_addr_un,sizeof(serv_addr_un)) == FAIL){
-            fprintf(stderr,"connection error! errno :%d %s\n", errno,
-                    strerror(errno));
-            close(fd);
-            return(-1);
-        }
-
-    } else {
-        /* INET domain */
-        if ((fd = socket(AF_INET, SOCK_STREAM, 0)) == FAIL){
-            fprintf(stderr, "socket open error! errno :%d %s\n", errno,
-                    strerror(errno));
-            return(-1);
-        }
-        /* check optional port number */
-        serv_addr.sin_port = htons(10000);
-        p = (char *)malloc(strlen(hostname));
-        strcpy(p,hostname);
-        hostname = p;
-        while(*p) {
-            if (*p==':') {
-                serv_addr.sin_port = htons(atoi(p+1));
-                *p = 0;
-                break;
-            }
-            p++;
-        }
-        if ((hoste = gethostbyname(hostname)) == NULL){
-            fprintf(stderr,"hostname error\n");
-            close(fd);
-            return(-1);
-        }
-        free(hostname); hostname=0;
-        serv_addr.sin_family = AF_INET;
-        serv_addr.sin_addr.s_addr = ((struct in_addr *)(hoste->h_addr))->s_addr;
-        if (serv_addr.sin_family == AF_INET) {
-            int tmp = 1;
-            setsockopt (fd, IPPROTO_TCP, TCP_NODELAY,
-                        (char *) &tmp, sizeof (int));
-        }
-        fprintf(stdout,"connecting ... %d\n", ntohs(serv_addr.sin_port));
-        if (connect(fd, (struct sockaddr *)&serv_addr,sizeof(serv_addr)) == FAIL){
-            fprintf(stderr,"connection error! errno :%d %s\n", errno,
-                    strerror(errno));
-            close(fd);
-            return(-1);
-        }
-    }
-
-    ps = fd;
-    fprintf(stdout," connect middle server %d\n", fd);
-    q_end = q_top = NULL;
-    r_end = reply = NULL;
-    qsize = seq = 0;
-    seq = 120;
-    return ps;
-}
-
-/*-------------------------------------------------------------------/
-  int
-  psx_out (unsigned int id, unsigned char *data, unsigned int size):
-      outコマンドをCOMMANDキューへ溜める。
-
-  引き数:
-      id   - TUPLE SpaceのID
-      data - 送信するデータ
-      size - dataのサイズ
-  返り値:
-      シーケンス番号
-/-------------------------------------------------------------------*/
-int
-psx_out(unsigned int id, unsigned char *data, unsigned int size){
-    if (psx_queue(id, size, data, 'o', NULL, NULL) == FAIL){
-        return(FAIL);
-    }
-    DEB( fprintf(stdout, "psx_out: size = %d, command = %s\n",
-                 q_end->size, q_end->command+LINDA_HEADER_SIZE));
-    return(seq);
-}
-
-/*-------------------------------------------------------------------/
-  int
-  psx_ld (unsigned int id, char mode, void(*callback)(char*,void*),
-              void * obj):
-      in,read,waitなどの受信コマンドをCOMMANDキューへ溜める。
-      psx_in,psx_rd,psx_wait_rdなどに置き換えられている。
-
-  引き数:
-      id       - TUPLE SpaceのID
-      mode     - i,r,w の文字を取り、各々in,read,waitを表している。
-      callback - コールバックを使用する場合の関数へのポインタ。
-                 使用しない場合はNULLをいれる。
-      obj      - コールバックで用いる関数の引き数。
-  返り値:
-      psx_queue内でmallocされたREPLY構造体へのポインタ
-/-------------------------------------------------------------------*/
-int
-psx_ld(unsigned int id, char mode,void(*callback)(char *,void *),void * obj){
-    int r;
-    if ((r=psx_queue(id, 0, NULL, mode, callback, obj)) == FAIL){
-        return(FAIL);
-    }
-    return(r);
-}
-
-/*-------------------------------------------------------------------/
-  unsigned char *
-  psx_reply (int seq):
-      サーバから答えが来たデータを返す。
-
-  引き数:
-      seq - psx_ld()が返した値。
-  返り値:
-      seqに対応したデータを返す。データをまだ受信していない場合は
-      NULLを返す。
-/-------------------------------------------------------------------*/
-unsigned char *
-psx_reply(int seq){
-    REPLY *p, *q;
-    char *ans;
-
-    DEB(fprintf(stdout, "psx_reply: search of seq = %d\n", seq));
-    PSX_Debug(("psx_reply: seq %d", seq));
-    for(q = NULL,p = reply;p;q = p,p = p->next){
-        if (p->seq == (unsigned)seq){
-            DEB(fprintf(stdout, "psx_reply: match of seq = %d\n", seq));
-            if (p->mode == '!'){
-                ans = (char *)p->answer;
-                if (q == NULL){
-                    reply = p->next;
-                    if(p==r_end) {
-                        r_end = p->next;
-                    }
-                } else {
-                    q->next = p->next;
-                    if(p==r_end) {
-                        r_end = q;
-                    }
-                }
-                PSX_Debug(("psx_reply: reply %x r_end %x p %x q %x",reply,r_end,p,q));
-                free(p);
-                DEB( for(p=reply;p;p=p->next) { PSX_Debug(("psx_queue dump: seq %d mode %c %x %x",p->seq,p->mode,p,p->next))});
-                DEB( fprintf(stdout, "psx_reply: returned answer = %s\n", ans));
-                PSX_Debug(("psx_reply: answer %s",ans));
-                return((unsigned char *)ans);
-            } else {
-                if (p->mode == '?'){
-                    DEB(fprintf(stdout, "psx_reply: don't accept anser\n"));
-                    return(NULL);
-                }
-            }
-        }
-
-    }
-    PSX_Debug(("psx_reply: no match seq %d",seq));
-    DEB(fprintf(stdout, "psx_reply: no match of seq\n"));
-    return(NULL);
-}
-
-/*-------------------------------------------------------------------/
-  void
-  psx_sync_n ():
-      サーバとデータの送受信をする。COMMANDキューに溜まったデータを
-      送信し、サーバから送られて来たデータを対応するREPLYへいれる。
-/-------------------------------------------------------------------*/
-void
-psx_sync_n(){
-    int acount;
-    COMMAND *c, *t;
-
-    fd_set tmp, fds;
-    struct timeval timeout;
-    timeout.tv_sec=0;
-    timeout.tv_usec=TIMEDELTA * 1000;
-
-    acount = 0;
-    while (q_top != NULL){
-        c = q_top;
-        unix_write_w(ps, c->command, c->size);
-        free(c->command);
-        t = c->next;
-        free(c);
-        q_top = c = t;qsize--;
-    }
-    FD_ZERO(&fds);
-    FD_SET(ps, &fds);
-    tmp = fds;
-    while(select(32, &tmp, NULL, NULL, &timeout) > 0) {
-        if(FD_ISSET(ps, &tmp)) {
-            unix_chkserv();
-        }
-    }
-}
-
-/*-------------------------------------------------------------------/
-  int
-  psx_queue (unsigned int id, unsigned int size, unsigned char *data,
-             char mode, void(*callback)(char*,void*), void * obj):
-      out,in,read,waitなどのコマンドをCOMMANDキューに溜める。データを
-      受信するコマンド(in,read,wait)のときは受け取ったときにデータを
-      格納するREPLY構造体を作る。
-
-  引き数:
-      id       - アクセスするTUPLE SpaceのID
-      size     - dataのサイズ
-      data     - 送信するデータ。受信時はNULL。
-      mode     - コマンドのモード(out,in,read,wait は各々char型: o,i,r,w)
-      callback - コールバックを使用する場合の関数へのポインタ。
-                 使用しない場合はNULL。
-      obj      - コールバックで用いる関数に引き渡すデータ。
-  返り値:
-      成功した場合 - mallocしたREPLY構造体へのポインタ。outの場合は
-                     0が返る。
-      失敗した場合 - FAIL(-1)が返る。
-/-------------------------------------------------------------------*/
-int
-psx_queue(unsigned int id, unsigned int size, unsigned char *data, char mode,
-          void(*callback)(char *,void *), void * obj){
-    REPLY *p;
-    COMMAND *c;
-
-    seq++;
-    if (qsize >= MAX_QUEUE){
-//        PSX_Debug(("max queue: qsize=%d",qsize));
-        psx_sync_n();
-    }
-
-    for(p=reply;p;p=p->next){
-        if(p->seq == seq){
-            printf("same seq number: %d\n",seq);
-        }
-    }
-
-    if (q_top == NULL){
-        if ((q_top = (COMMAND *) malloc (sizeof(COMMAND))) == NULL){
-            return(FAIL);
-        }
-        c = q_end = q_top;
-    } else {
-        if ((q_end->next = (COMMAND *) malloc (sizeof(COMMAND))) == NULL){
-            return(FAIL);
-        }
-        c = q_end;
-        q_end = q_end->next;
-    }
-
-    // size は DATASIZE
-    if ((q_end->command = (unsigned char *) malloc(size+LINDA_HEADER_SIZE)) == NULL){
-        free(q_end);
-        c->next = NULL;
-        return(FAIL);
-    }
-
-    if (mode != 'o'){
-        if (reply == NULL){
-            if ((reply = (REPLY *) malloc (sizeof(REPLY))) == NULL){
-                return(FAIL);
-            }
-            p = r_end = reply; p->next = NULL;
-        } else {
-            if ((r_end->next = (REPLY *) malloc (sizeof(REPLY))) == NULL){
-                return(FAIL);
-            }
-            p = r_end->next; r_end = p; p->next = NULL;
-        }
-        p->mode = '?';
-        p->seq = (int)p;  // 構造体のアドレスで識別
-        p->callback = callback;
-        p->obj = obj;
-        PSX_Debug(("psx_queue: seq %d reply %x p %x r_end %x",seq,reply,p,r_end));
-    }else{
-        p=0;
-    }
-    q_end->command[LINDA_MODE_OFFSET] = mode;
-
-    q_end->command[LINDA_ID_OFFSET]   = id >> 8;
-    q_end->command[LINDA_ID_OFFSET+1] = id & 0xff;
-
-    q_end->command[LINDA_SEQ_OFFSET]   = ((int)p>>24) & 0xff;
-    q_end->command[LINDA_SEQ_OFFSET+1] = ((int)p>>16) & 0xff;
-    q_end->command[LINDA_SEQ_OFFSET+2] = ((int)p>>8)  & 0xff;
-    q_end->command[LINDA_SEQ_OFFSET+3] = ((int)p)     & 0xff;
-
-    q_end->command[LINDA_DATA_LENGTH_OFFSET]   = (size>>24) & 0xff;
-    q_end->command[LINDA_DATA_LENGTH_OFFSET+1] = (size>>16) & 0xff;
-    q_end->command[LINDA_DATA_LENGTH_OFFSET+2] = (size>>8)  & 0xff;
-    q_end->command[LINDA_DATA_LENGTH_OFFSET+3] = (size)     & 0xff;
-
-    q_end->size = size+LINDA_HEADER_SIZE;       /* command size */
-    q_end->next = NULL; qsize++;
-    if (data && size>0) memcpy(q_end->command+LINDA_HEADER_SIZE, data, size);
-    return((int)p);
-}
-
-/*-------------------------------------------------------------------/
-  void
-  unix_chkserv ():
-      サーバからデータ(TUPLE)を受け取る。REPLY構造体にコールバック関数
-      が指定されていればその関数を実行し、REPLY構造体をキューから取り
-      除く。コールバック関数が指定されていなければREPLY構造体にデータ
-      を引き渡す。
-/-------------------------------------------------------------------*/
-void
-unix_chkserv(){
-    int i,k,pkt,npkt;
-    REPLY *r,*prev;
-    int a;
-    unsigned char * tuple = 0;
-
-    if((i=read(ps,&npkt,INT_SIZE))<0) {
-        fprintf(stderr, "size read error! on fd:%d %s\n", ps,
-                strerror(errno));
-        exit(1);
-    }
-    pkt = ntohl(npkt);
-    DEB(printf("pkt: %d\n",pkt));
-    DEB(fprintf(stdout, "psx_chkserv: queue number: %d , size = %d\n", i, pkt));
-    if((tuple = (unsigned char *)malloc(pkt))==NULL){
-        fprintf(stderr,"allocate error! errno :%d %s",errno,strerror(errno));
-        exit(1);
-    }
-    for(a=0;a<pkt;a+=i) {
-        if((i=unix_read_w(ps,tuple+a,pkt-a))<0) {
-            fprintf(stderr, "psx_chkserv: read error! on i=%d pkt=%d %s\n",
-                    i, pkt, strerror(errno));
-            exit(1);//close(ps);
-        }
-    }
-
-#ifdef COUNT_PACKET
-    count_packet('r');
-#endif
-
-    i = tuple[LINDA_ID_OFFSET] * 256 + tuple[LINDA_ID_OFFSET+1];  /* id */
-    k = (tuple[LINDA_SEQ_OFFSET]  <<24) +
-        (tuple[LINDA_SEQ_OFFSET+1]<<16) +
-        (tuple[LINDA_SEQ_OFFSET+2]<<8)  +
-        (tuple[LINDA_SEQ_OFFSET+3]);  /* seq */
-    PSX_Debug(("psx_chkserv: anser packet size = %d id %d seq %d", pkt,i,k));
-    DEB(fprintf(stdout, "psx_chkserv: data from server: %s id=%d seq = %d\n", tuple, i, k));
-    DEB (
-        for(p=reply;p;p=p->next) {
-        PSX_Debug(printf("psx_queue dump: seq %d mode %c %x %x",p->seq,p->mode,p,p->next));
-        })
-
-    for(prev = NULL,r = reply; r; prev = r,r = r->next){
-        DEB(fprintf(stdout,"seq: %d\n",r->seq);)
-	if (r->seq == (unsigned int)k){
-            if(r->callback){     // call callback function
-                (*r->callback)((char *)tuple,r->obj);
-                if (prev == NULL){
-                    reply = r->next;
-                    if(r == r_end) {
-                        r_end = r->next;
-                    }
-                } else {
-                    prev->next = r->next;
-                    if(r == r_end) {
-                        r_end = prev;
-                    }
-                }
-                free(r);
-            }else{                // normal reply
-                PSX_Debug(("psx_chkserv: copy answer r %x seq %d",r,k));
-                r->answer = tuple;
-                r->mode = '!';
-            }
-            break;
-        }
-    }
-    tuple = 0;
-    if (!r){
-        DEB(fprintf(stdout, "unix_chkserv: accepted seq %d does not match. \n",k));
-    }
-}
-
-void psx_free(char * tuple)
-{
-//    free(tuple - LINDA_HEADER_SIZE);
-    free(tuple);
-}
-
-/*-------------------------------------------------------------------/
-  int
-  get_int(unsigned char * tuple, int offset):
-      TUPLEのヘッダに格納された int型 のデータを得るための関数
-      psx_get_datalength() と psx_get_seq() から呼ばれる。
-
-  引き数:
-      tuple  - ヘッダ情報も含んだTUPLE。psx_reply()で得たものでもいい。
-      offset - 取りだすデータのオフセット。LINDA_DATA_LENGTH_OFFSET
-               か LINDA_SEQ_OFFSET。
-
-  返り値:
-      指定したオフセットに格納されていた数値(int型)
-/-------------------------------------------------------------------*/
-static
-int get_int(unsigned char * tuple, int offset){
-    int i;
-    i = (tuple[offset]  <<24) +
-        (tuple[offset+1]<<16) +
-        (tuple[offset+2]<<8)  +
-        (tuple[offset+3]);
-    return i;
-}
-
-int psx_get_datalength(unsigned char * tuple){
-    return get_int(tuple,LINDA_DATA_LENGTH_OFFSET);
-}
-
-unsigned char *psx_get_data(unsigned char * tuple){
-    return tuple+LINDA_HEADER_SIZE;
-}
-
-int psx_get_seq(unsigned char * tuple){
-    return get_int(tuple,LINDA_SEQ_OFFSET);
-}
-
-short psx_get_id(unsigned char * tuple){
-    short s;
-    s = tuple[LINDA_ID_OFFSET] * 256 +
-        tuple[LINDA_ID_OFFSET+1];
-    return s;
-}
-
-char psx_get_mode(unsigned char * tuple){
-    return tuple[LINDA_MODE_OFFSET];
-}
-
-
-/* end */
--- a/TaskManager/Test/test_render/lindaapi.h	Wed Oct 21 19:03:46 2009 +0900
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,86 +0,0 @@
-//  $Id: lindaapi.h,v 1.8 2005/12/21 07:29:38 yasumura Exp $
-//
-
-/*----------------------------------------------------------------------
- ޥ
-----------------------------------------------------------------------*/
-
-#define FAIL            (-1)
-
-#define PS_DEB          0xf8
-
-#define MAX_QUEUE       1024
-
-#define INT_SIZE    4     // Byte = sizeof(int)
-
-/*----------------------------------------------------------------------
- ѥåȥեޥå
- char     short  int    int
- Mode +   ID   + Seq  + Data_len + Padding + Data
- 0        1      3      7          11        12
-----------------------------------------------------------------------*/
-
-#define LINDA_MODE_OFFSET          0
-#define LINDA_ID_OFFSET            1
-#define LINDA_SEQ_OFFSET           3
-#define LINDA_DATA_LENGTH_OFFSET   7
-#define LINDA_TID_OFFSET           11
-#define LINDA_HEADER_SIZE          12
-
-/*----------------------------------------------------------------------
- ¤
-----------------------------------------------------------------------*/
-typedef struct psx_reply{
-    unsigned char *answer;
-    unsigned int seq;
-    struct psx_reply *next;
-    char mode;
-    void(*callback)(char * tuple, void * obj);
-    void * obj;
-} REPLY, *REPLY_PTR;
-
-typedef struct command_queue{
-    unsigned char *command;
-    struct command_queue *next;
-    unsigned int size;
-} COMMAND, *COMMAND_PTR;
-
-/*----------------------------------------------------------------------
- Ūؿƥץ졼
-----------------------------------------------------------------------*/
-
-int start_linda(char *hostname);
-void unix_chkserv();
-extern void psx_free(char *tuple);
-
-int psx_out(unsigned int id, unsigned char *data, unsigned int size);
-int psx_ld(unsigned int id, char mode, void(*callback)(char *,void *),void * obj);
-
-#define psx_in(id)      psx_ld(id, 'i', NULL, NULL)
-#define psx_rd(id)      psx_ld(id, 'r', NULL, NULL)
-#define psx_ck(id)      psx_ld(id, 'c', NULL, NULL)
-#define psx_wait_rd(id) psx_ld(id, 'w', NULL, NULL)
-
-#define psx_callback_in(id,callback,obj)       psx_ld(id, 'i', callback, obj)
-#define psx_callback_rd(id,callback,obj)       psx_ld(id, 'r', callback, obj)
-#define psx_callback_ck(id,callback,obj)       psx_ld(id, 'c', callback, obj)
-#define psx_callback_wait_rd(id,callback,obj)  psx_ld(id, 'w', callback, obj)
-
-unsigned char *psx_reply(int seq);
-void psx_sync_n();
-//void psx_free(unsigned char *);
-int psx_queue(unsigned int id, unsigned int size, unsigned char *data, char mode,
-              void(*callback)(char *,void *),void * obj);
-int psx_get_datalength(unsigned char *);
-unsigned char *psx_get_data(unsigned char *);
-int psx_get_seq(unsigned char *);
-short psx_get_id(unsigned char *);
-char psx_get_mode(unsigned char *);
-
-int unix_open();                        /* UNIX ̿ߤ */
-int unix_read(int,char *,unsigned int); /* UNIX ɤ߹ */
-int unix_read_w(int,char *,int);        /* UNIX ɤ߹(non wait) */
-int unix_write(int,unsigned char *,unsigned int);/* UNIX ؽ񤭹 */
-int unix_write_w(int,unsigned char *,unsigned int);/* UNIX ؽ񤭹(non wait) */
-int send_able();                        /* ɤ߽񤭤Ǥѥåȿ */
-
--- a/TaskManager/Test/test_render/lindaapi/Makefile	Wed Oct 21 19:03:46 2009 +0900
+++ b/TaskManager/Test/test_render/lindaapi/Makefile	Wed Oct 21 21:00:48 2009 +0900
@@ -1,4 +1,4 @@
-CC=gcc
+CC=g++
 AR=ar
 CFLAGS=-g -O2 -Wall
 #FLAGS=-Wall -DDEBUG
@@ -12,7 +12,7 @@
 ldserv : $(LINDADIR)/ldserv.c
 	$(CC) $(FLAGS) -g -o ldserv $(LINDADIR)/ldserv.c
 
-.c.o:
+.cc.o:
 	$(CC) $(CFLAGS) -c $^ -o $@
 
 liblindaapi.a : lindaapi.o
--- a/TaskManager/Test/test_render/lindaapi/lindaapi.h	Wed Oct 21 19:03:46 2009 +0900
+++ b/TaskManager/Test/test_render/lindaapi/lindaapi.h	Wed Oct 21 21:00:48 2009 +0900
@@ -54,7 +54,7 @@
 extern void init_linda(void);
 extern int open_linda(char *hostname, int port);
 extern int close_linda(int tspace_id);
-
+extern int open_linda_java(char * hostname, int port);
 extern void psx_free(void*);
 
 extern unsigned char *psx_reply(int seq);