OSDN Git Service

unite subjectlist.
authorornse01 <ornse01@users.sourceforge.jp>
Sat, 10 Sep 2011 03:54:38 +0000 (03:54 +0000)
committerornse01 <ornse01@users.sourceforge.jp>
Sat, 10 Sep 2011 03:54:38 +0000 (03:54 +0000)
- add sbjtlist_t
- replace sbjtparser_thread_t to sbjtlist_tuple_t.

git-svn-id: http://svn.sourceforge.jp/svnroot/bchan/bchanl/trunk@301 20a0b8eb-f62a-4a12-8fe1-b598822500fb

src/Makefile
src/bchanl_subject.c
src/bchanl_subject.h
src/main.c
src/subjectlayout.c
src/subjectlayout.h
src/test_subjectlayout.c

index d4af83c..d66ce45 100644 (file)
@@ -38,7 +38,7 @@ VPATH = $(S)
 HEADER := $(S) $(HEADER)
 
 # ¥½¡¼¥¹¥Õ¥¡¥¤¥ë
-SRC =  main.c subjectcache.c subjectparser.c subjectlayout.c cache.c bbsmenucache.c bbsmenuparser.c bbsmenulayout.c bchanl_subject.c retriever.c subjectretriever.c tadlib.c bbsmenuretriever.c parselib.c bbsmenufilter.c bchanl_hmi.c hmi_wscr.c bchanl_menus.c
+SRC =  main.c subjectcache.c subjectparser.c subjectlayout.c cache.c bbsmenucache.c bbsmenuparser.c bbsmenulayout.c bchanl_subject.c retriever.c subjectretriever.c tadlib.c bbsmenuretriever.c parselib.c bbsmenufilter.c bchanl_hmi.c hmi_wscr.c bchanl_menus.c subjectlist.c array.c
 
 # ¥Ç¡¼¥¿¥Ü¥Ã¥¯¥¹¥½¡¼¥¹¥Õ¥¡¥¤¥ë
 DBSRC =
index 67f3aee..64dcad5 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * bchanl_subject.c
  *
- * Copyright (c) 2009-2010 project bchan
+ * Copyright (c) 2009-2011 project bchan
  *
  * This software is provided 'as-is', without any express or implied
  * warranty. In no event will the authors be held liable for any damages
@@ -60,6 +60,7 @@ struct bchanl_subject_t_ {
        GID gid;
        sbjtcache_t *cache;
        sbjtparser_t *parser;
+       sbjtlist_t *list;
        sbjtlayout_t *layout;
        sbjtdraw_t *draw;
        TC *title;
@@ -103,11 +104,16 @@ EXPORT sbjtdraw_t* bchanl_subject_getdraw(bchanl_subject_t *subject)
 EXPORT W bchanl_subject_relayout(bchanl_subject_t *subject)
 {
        sbjtparser_t *parser;
+       sbjtlist_t *list;
        sbjtlayout_t *layout;
        sbjtparser_thread_t *thread = NULL;
+       sbjtlist_iterator_t *list_iter;
+       sbjtlist_tuple_t *tuple;
        W err;
+       Bool next;
 
        parser = subject->parser;
+       list = subject->list;
        layout = subject->layout;
 
        sbjtlayout_clear(layout);
@@ -119,16 +125,28 @@ EXPORT W bchanl_subject_relayout(bchanl_subject_t *subject)
                        break;
                }
                if (thread != NULL) {
-                       sbjtlayout_appendthread(layout, thread);
+                       sbjtlist_appendthread(list, thread);
                } else {
                        break;
                }
        }
 
+       sbjtlist_sort(list, SBJTLIST_SORTBY_NUMBER, NULL, 0);
+
+       list_iter = sbjtlist_startread(list, False);
+       for (;;) {
+               next = sbjtlist_iterator_next(list_iter, &tuple);
+               if (next == False) {
+                       break;
+               }
+               sbjtlayout_appendthread(layout, tuple);
+       }
+       sbjtlist_endread(list, list_iter);
+
        return 0;
 }
 
-EXPORT W bchanl_subject_createviewervobj(bchanl_subject_t *subject, sbjtparser_thread_t *thread, UB *fsnrec, W fsnrec_len, VOBJSEG *seg, LINK *lnk)
+EXPORT W bchanl_subject_createviewervobj(bchanl_subject_t *subject, sbjtlist_tuple_t *tuple, UB *fsnrec, W fsnrec_len, VOBJSEG *seg, LINK *lnk)
 {
        W fd, len, err;
        UB *bin;
@@ -145,17 +163,11 @@ EXPORT W bchanl_subject_createviewervobj(bchanl_subject_t *subject, sbjtparser_t
        seg->bgcol = 0x10ffffff;
        seg->dlen = 0;
 
-       /* should move to parser? */
-       str = tc_strrchr(thread->title, TK_LPAR);
-       if (str == NULL) {
-               len = thread->title_len;
-       } else {
-               len = (str - thread->title) - 1;
-       }
+       sbjtlist_tuple_gettitle(tuple, &str, &len);
        if (len > 20) {
                len = 20;
        }
-       tc_strncpy(title, thread->title, len);
+       tc_strncpy(title, str, len);
        title[len] = TNULL;
 
        fd = cre_fil(lnk, title, NULL, 1, F_FLOAT);
@@ -217,8 +229,7 @@ EXPORT W bchanl_subject_createviewervobj(bchanl_subject_t *subject, sbjtparser_t
                del_fil(NULL, lnk, 0);
                return fd;
        }
-       bin = thread->number;
-       len = thread->number_len;
+       sbjtlist_tuple_getthreadnumberstr(tuple, &bin, &len);
        err = wri_rec(fd, -1, bin, len, NULL, NULL, 0);
        if (err < 0) {
                DP_ER("wri_rec:thread error", err);
@@ -279,6 +290,7 @@ LOCAL W bchanl_subject_initialize(bchanl_subject_t *subject, GID gid, UB *host,
 {
        sbjtcache_t *cache;
        sbjtparser_t *parser;
+       sbjtlist_t *list;
        sbjtlayout_t *layout;
        sbjtdraw_t *draw;
        TC *title_buf;
@@ -292,6 +304,10 @@ LOCAL W bchanl_subject_initialize(bchanl_subject_t *subject, GID gid, UB *host,
        if (parser == NULL) {
                goto error_parser;
        }
+       list = sbjtlist_new();
+       if (list == NULL) {
+               goto error_list;
+       }
        layout = sbjtlayout_new(gid);
        if (layout == NULL) {
                goto error_layout;
@@ -320,6 +336,7 @@ LOCAL W bchanl_subject_initialize(bchanl_subject_t *subject, GID gid, UB *host,
        subject->gid = gid;
        subject->cache = cache;
        subject->parser = parser;
+       subject->list = list;
        subject->layout = layout;
        subject->draw = draw;
        subject->title = title_buf;
@@ -333,6 +350,8 @@ error_title:
 error_draw:
        sbjtlayout_delete(layout);
 error_layout:
+       sbjtlist_delete(list);
+error_list:
        sbjtparser_delete(parser);
 error_parser:
        sbjtcache_delete(cache);
@@ -345,6 +364,7 @@ LOCAL VOID bchanl_subject_finalize(bchanl_subject_t *subject)
        free(subject->title);
        sbjtdraw_delete(subject->draw);
        sbjtlayout_delete(subject->layout);
+       sbjtlist_delete(subject->list);
        sbjtparser_delete(subject->parser);
        sbjtcache_delete(subject->cache);
 }
index c812003..17ef625 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * bchanl_subject.h
  *
- * Copyright (c) 2009-2010 project bchan
+ * Copyright (c) 2009-2011 project bchan
  *
  * This software is provided 'as-is', without any express or implied
  * warranty. In no event will the authors be held liable for any damages
@@ -30,6 +30,7 @@
 
 #include    "subjectcache.h"
 #include    "subjectparser.h"
+#include    "subjectlist.h"
 #include    "subjectlayout.h"
 
 #ifndef __BCHANL_SUBJECT_H__
@@ -45,7 +46,7 @@ IMPORT sbjtdraw_t* bchanl_subject_getdraw(bchanl_subject_t *subject);
 IMPORT W bchanl_subject_relayout(bchanl_subject_t *subject);
 #define BCHANL_SUBJECT_CREATEVIEWERVOBJ_CANCELED 0
 #define BCHANL_SUBJECT_CREATEVIEWERVOBJ_CREATED  1
-IMPORT W bchanl_subject_createviewervobj(bchanl_subject_t *subject, sbjtparser_thread_t *thread, UB *fsnrec, W fsnrec_len, VOBJSEG *seg, LINK *lnk);
+IMPORT W bchanl_subject_createviewervobj(bchanl_subject_t *subject, sbjtlist_tuple_t *tuple, UB *fsnrec, W fsnrec_len, VOBJSEG *seg, LINK *lnk);
 
 IMPORT bchanl_subjecthash_t* bchanl_subjecthash_new(GID gid, W base);
 IMPORT VOID bchanl_subjecthash_delete(bchanl_subjecthash_t *subjecthash);
index d33b37a..f6dc442 100644 (file)
@@ -43,6 +43,7 @@
 #include       "subjectretriever.h"
 #include       "subjectcache.h"
 #include       "subjectparser.h"
+#include       "subjectlist.h"
 #include       "subjectlayout.h"
 #include    "bbsmenuretriever.h"
 #include    "bbsmenucache.h"
@@ -222,7 +223,7 @@ LOCAL VOID bchanl_subjectwindow_close(bchanl_t *bchanl)
 
 LOCAL VOID bchanl_subjectwindow_press(bchanl_t *bchanl, PNT evpos)
 {
-       sbjtparser_thread_t *thread;
+       sbjtlist_tuple_t *tuple;
        sbjtdraw_t *draw;
        WID wid_butup;
        W event_type, size, err, fsn_len, dx, dy;
@@ -240,7 +241,7 @@ LOCAL VOID bchanl_subjectwindow_press(bchanl_t *bchanl, PNT evpos)
        }
        draw = bchanl_subject_getdraw(bchanl->currentsubject);
 
-       err = sbjtdraw_findthread(draw, evpos, &thread, &vframe);
+       err = sbjtdraw_findthread(draw, evpos, &tuple, &vframe);
        if (err == 0) {
                return;
        }
@@ -305,7 +306,7 @@ LOCAL VOID bchanl_subjectwindow_press(bchanl_t *bchanl, PNT evpos)
                return;
        }
        fsn_len = dget_siz((B*)fsn);
-       err = bchanl_subject_createviewervobj(bchanl->currentsubject, thread, fsn, fsn_len, &vrec.vseg, (LINK*)&vrec.vlnk);
+       err = bchanl_subject_createviewervobj(bchanl->currentsubject, tuple, fsn, fsn_len, &vrec.vseg, (LINK*)&vrec.vlnk);
        if (err < 0) {
                DP_ER("bchanl_subject_createviewervobj error", err);
                return;
index 385b62d..6f35750 100644 (file)
@@ -25,7 +25,7 @@
  */
 
 #include    "subjectlayout.h"
-#include    "subjectparser.h"
+#include    "subjectlist.h"
 #include    "tadlib.h"
 
 #include       <bstdio.h>
@@ -106,8 +106,8 @@ LOCAL W WtoTCS(W num, TC *dest)
 
 typedef struct sbjtlayout_thread_t_ sbjtlayout_thread_t;
 struct sbjtlayout_thread_t_ {
-       sbjtparser_thread_t *parser_thread;
-       W index;
+       sbjtlist_tuple_t *tuple;
+       //W index;
        W view_l,view_t,view_r,view_b;
        SIZE sz_title;
        W baseline;
@@ -123,7 +123,7 @@ struct sbjtlayout_t_ {
        COLOR vobjbgcol;
 };
 
-LOCAL sbjtlayout_thread_t* sbjtlayout_thread_new(sbjtparser_thread_t *thread)
+LOCAL sbjtlayout_thread_t* sbjtlayout_thread_new(sbjtlist_tuple_t *thread)
 {
        sbjtlayout_thread_t *layout_thread;
 
@@ -131,7 +131,7 @@ LOCAL sbjtlayout_thread_t* sbjtlayout_thread_new(sbjtparser_thread_t *thread)
        if (layout_thread == NULL) {
                return NULL;
        }
-       layout_thread->parser_thread = thread;
+       layout_thread->tuple = thread;
        layout_thread->view_l = 0;
        layout_thread->view_t = 0;
        layout_thread->view_r = 0;
@@ -142,16 +142,17 @@ LOCAL sbjtlayout_thread_t* sbjtlayout_thread_new(sbjtparser_thread_t *thread)
 
 LOCAL VOID sbjtlayout_thread_delete(sbjtlayout_thread_t *layout_thread)
 {
-       sbjtparser_thread_delete(layout_thread->parser_thread);
        free(layout_thread);
 }
 
 LOCAL W sbjtlayout_thread_calcindexdrawsize(sbjtlayout_thread_t *layout_thread, GID gid, SIZE *sz)
 {
        TC str[12];
-       W err, len;
+       W err, len, num;
 
-       len = WtoTCS(layout_thread->index, str);
+       sbjtlist_tuple_getnumber(layout_thread->tuple, &num);
+
+       len = WtoTCS(num, str);
        str[len++] = TK_COLN;
        str[len] = TNULL;
 
@@ -173,7 +174,7 @@ LOCAL W sbjtlayout_thread_calctitledrawsize(sbjtlayout_thread_t *layout_thread,
 {
        TC *str;
        W len;
-       sbjtparser_thread_gettitlestr(layout_thread->parser_thread, &str, &len);
+       sbjtlist_tuple_gettitle(layout_thread->tuple, &str, &len);
        return tadlib_calcdrawsize(str, len, gid, sz);
 }
 
@@ -181,17 +182,15 @@ LOCAL W sbjtlayout_thread_calcresnumdrawsize(sbjtlayout_thread_t *layout_thread,
 {
        TC *str;
        W len;
-       sbjtparser_thread_getresnumstr(layout_thread->parser_thread, &str, &len);
+       sbjtlist_tuple_getresnumberstr(layout_thread->tuple, &str, &len);
        return tadlib_calcdrawsize(str, len, gid, sz);
 }
 
-LOCAL W sbjtlayout_thread_calcsize(sbjtlayout_thread_t *layout_res, GID gid, W top, W index)
+LOCAL W sbjtlayout_thread_calcsize(sbjtlayout_thread_t *layout_res, GID gid, W top)
 {
        SIZE sz_index, sz_title, sz_resnum;
        W err;
 
-       layout_res->index = index;
-
        err = sbjtlayout_thread_calcindexdrawsize(layout_res, gid, &sz_index);
        if (err < 0) {
                return err;
@@ -230,12 +229,12 @@ LOCAL W sbjtlayout_setupgid(sbjtlayout_t *layout, GID gid)
        return gset_fon(gid, &layout->fspec);
 }
 
-EXPORT W sbjtlayout_appendthread(sbjtlayout_t *layout, sbjtparser_thread_t *parser_thread)
+EXPORT W sbjtlayout_appendthread(sbjtlayout_t *layout, sbjtlist_tuple_t *tuple)
 {
        sbjtlayout_thread_t *layout_thread;
        W len;
 
-       layout_thread = sbjtlayout_thread_new(parser_thread);
+       layout_thread = sbjtlayout_thread_new(tuple);
        if (layout_thread == NULL) {
                return -1; /* TODO */
        }
@@ -247,7 +246,7 @@ EXPORT W sbjtlayout_appendthread(sbjtlayout_t *layout, sbjtparser_thread_t *pars
 
        sbjtlayout_setupgid(layout, layout->target);
 
-       sbjtlayout_thread_calcsize(layout_thread, layout->target, layout->draw_b, layout->len);
+       sbjtlayout_thread_calcsize(layout_thread, layout->target, layout->draw_b);
 
        /* orrect */
        if (layout->draw_l > layout_thread->view_l) {
@@ -354,7 +353,7 @@ LOCAL W sbjtdraw_entrydraw_drawtitle(sbjtlayout_thread_t *entry, GID gid, W dh,
 {
        TC *str;
        W len;
-       sbjtparser_thread_gettitlestr(entry->parser_thread, &str, &len);
+       sbjtlist_tuple_gettitle(entry->tuple, &str, &len);
        return tadlib_drawtext(str, len, gid, dh, dv);
 }
 
@@ -362,7 +361,7 @@ LOCAL W sbjtdraw_entrydraw_drawresnum(sbjtlayout_thread_t *entry, GID gid, W dh,
 {
        TC *str;
        W len;
-       sbjtparser_thread_getresnumstr(entry->parser_thread, &str, &len);
+       sbjtlist_tuple_getresnumberstr(entry->tuple, &str, &len);
        return tadlib_drawtext(str, len, gid, dh, dv);
 }
 
@@ -380,9 +379,9 @@ LOCAL int sectrect_tmp(RECT a, W left, W top, W right, W bottom)
        return (a.c.left<right && left<a.c.right && a.c.top<bottom && top<a.c.bottom);
 }
 
-LOCAL W sbjtdraw_drawthread(sbjtlayout_thread_t *entry, W index, GID target, RECT *r, W dh, W dv, COLOR vobjbgcol)
+LOCAL W sbjtdraw_drawthread(sbjtlayout_thread_t *entry, GID target, RECT *r, W dh, W dv, COLOR vobjbgcol)
 {
-       W sect, err;
+       W sect, err, num;
        RECT view, vframe, vframe_b;
        static  PAT     pat0 = {{
                0,
@@ -410,11 +409,13 @@ LOCAL W sbjtdraw_drawthread(sbjtlayout_thread_t *entry, W index, GID target, REC
        view.c.right = entry->view_r - dh;
        view.c.bottom = entry->view_b - dv;
 
+       sbjtlist_tuple_getnumber(entry->tuple, &num);
+
        err = gset_chp(target, - dh, entry->view_t + entry->baseline - dv, 1);
        if (err < 0) {
                return err;
        }
-       err = sbjtdraw_entrydraw_resnumber(entry, index+1, target);
+       err = sbjtdraw_entrydraw_resnumber(entry, num, target);
        if (err < 0) {
                return err;
        }
@@ -476,7 +477,7 @@ EXPORT W sbjtdraw_draw(sbjtdraw_t *draw, RECT *r)
 
        for (i=0;i < layout->len;i++) {
                sbjtlayout_setupgid(layout, layout->target);
-               err = sbjtdraw_drawthread(layout->layout_thread[i], i, target, r, draw->view_l, draw->view_t, layout->vobjbgcol);
+               err = sbjtdraw_drawthread(layout->layout_thread[i], target, r, draw->view_l, draw->view_t, layout->vobjbgcol);
                if (err < 0) {
                        return err;
                }
@@ -485,7 +486,7 @@ EXPORT W sbjtdraw_draw(sbjtdraw_t *draw, RECT *r)
        return 0;
 }
 
-EXPORT W sbjtdraw_findthread(sbjtdraw_t *draw, PNT rel_pos, sbjtparser_thread_t **thread, RECT *vframe)
+EXPORT W sbjtdraw_findthread(sbjtdraw_t *draw, PNT rel_pos, sbjtlist_tuple_t **thread, RECT *vframe)
 {
        W i,abs_x,abs_y,l,t,r,b;
        sbjtlayout_t *layout;
@@ -503,7 +504,7 @@ EXPORT W sbjtdraw_findthread(sbjtdraw_t *draw, PNT rel_pos, sbjtparser_thread_t
                b = sbjt_thread->view_t + sbjt_thread->vframe.c.bottom;
                if ((l <= abs_x)&&(abs_x < r)
                        &&(t <= abs_y)&&(abs_y < b)) {
-                       *thread = sbjt_thread->parser_thread;
+                       *thread = sbjt_thread->tuple;
                        if (vframe != NULL) {
                                vframe->c.left = l - draw->view_l;
                                vframe->c.top = t - draw->view_t;
index ffbb5b9..a71e257 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * subjectlayout.h
  *
- * Copyright (c) 2009-2010 project bchan
+ * Copyright (c) 2009-2011 project bchan
  *
  * This software is provided 'as-is', without any express or implied
  * warranty. In no event will the authors be held liable for any damages
@@ -27,7 +27,7 @@
 #include    <basic.h>
 #include       <btron/dp.h>
 
-#include    "subjectparser.h"
+#include    "subjectlist.h"
 
 #ifndef __SUBJECTLAYOUT_H__
 #define __SUBJECTLAYOUT_H__
@@ -36,7 +36,7 @@ typedef struct sbjtlayout_t_ sbjtlayout_t;
 
 IMPORT sbjtlayout_t* sbjtlayout_new(GID gid);
 IMPORT VOID sbjtlayout_delete(sbjtlayout_t *layout);
-IMPORT W sbjtlayout_appendthread(sbjtlayout_t *layout, sbjtparser_thread_t *parser_thread);
+IMPORT W sbjtlayout_appendthread(sbjtlayout_t *layout, sbjtlist_tuple_t *tuple);
 IMPORT VOID sbjtlayout_getdrawrect(sbjtlayout_t *layout, W *l, W *t, W *r, W *b);
 IMPORT TC* sbjtlayout_gettitle(sbjtlayout_t *layout);
 IMPORT VOID sbjtlayout_clear(sbjtlayout_t *layout);
@@ -49,7 +49,7 @@ typedef struct sbjtdraw_t_ sbjtdraw_t;
 IMPORT sbjtdraw_t* sbjtdraw_new(sbjtlayout_t *layout);
 IMPORT VOID sbjtdraw_delete(sbjtdraw_t *draw);
 IMPORT W sbjtdraw_draw(sbjtdraw_t *draw, RECT *r);
-IMPORT W sbjtdraw_findthread(sbjtdraw_t *draw, PNT rel_pos, sbjtparser_thread_t **thread, RECT *vframe);
+IMPORT W sbjtdraw_findthread(sbjtdraw_t *draw, PNT rel_pos, sbjtlist_tuple_t **thread, RECT *vframe);
 IMPORT VOID sbjtdraw_setviewrect(sbjtdraw_t *draw, W l, W t, W r, W b);
 IMPORT VOID sbjtdraw_getviewrect(sbjtdraw_t *draw, W *l, W *t, W *r, W *b);
 IMPORT VOID sbjtdraw_scrollviewrect(sbjtdraw_t *draw, W dh, W dv);
index dc2b746..36a69ba 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * test_subjectlayout.c
  *
- * Copyright (c) 2009 project bchan
+ * Copyright (c) 2009-2011 project bchan
  *
  * This software is provided 'as-is', without any express or implied
  * warranty. In no event will the authors be held liable for any damages
@@ -34,6 +34,7 @@
 #include    "test.h"
 
 #include    "subjectlayout.h"
+#include    "subjectlist.h"
 #include    "subjectparser.h"
 #include    "subjectcache.h"
 
@@ -99,7 +100,11 @@ LOCAL TEST_RESULT test_sbjtlayout_1()
        BMP *bmp;
        GID gid;
        W err;
+       Bool next;
        sbjtlayout_t *layout;
+       sbjtlist_t *list;
+       sbjtlist_iterator_t *list_iter;
+       sbjtlist_tuple_t *tuple;
        sbjtcache_t *cache;
        sbjtparser_t *parser;
        sbjtparser_thread_t *thread = NULL;
@@ -118,6 +123,7 @@ LOCAL TEST_RESULT test_sbjtlayout_1()
        sbjtcache_appenddata(cache, test_sbjtlayout_testdata_01, strlen(test_sbjtlayout_testdata_01));
 
        parser = sbjtparser_new(cache);
+       list = sbjtlist_new();
        layout = sbjtlayout_new(gid);
 
        for (;;) {
@@ -126,13 +132,26 @@ LOCAL TEST_RESULT test_sbjtlayout_1()
                        break;
                }
                if (thread != NULL) {
-                       sbjtlayout_appendthread(layout, thread);
+                       sbjtlist_appendthread(list, thread);
                } else {
                        break;
                }
        }
 
+       sbjtlist_sort(list, SBJTLIST_SORTBY_NUMBER, NULL, 0);
+
+       list_iter = sbjtlist_startread(list, False);
+       for (;;) {
+               next = sbjtlist_iterator_next(list_iter, &tuple);
+               if (next == False) {
+                       break;
+               }
+               sbjtlayout_appendthread(layout, tuple);
+       }
+       sbjtlist_endread(list, list_iter);
+
        sbjtlayout_delete(layout);
+       sbjtlist_delete(list);
        sbjtparser_delete(parser);
 
        sbjtcache_delete(cache);