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 =
/*
* 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
GID gid;
sbjtcache_t *cache;
sbjtparser_t *parser;
+ sbjtlist_t *list;
sbjtlayout_t *layout;
sbjtdraw_t *draw;
TC *title;
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);
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;
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);
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);
{
sbjtcache_t *cache;
sbjtparser_t *parser;
+ sbjtlist_t *list;
sbjtlayout_t *layout;
sbjtdraw_t *draw;
TC *title_buf;
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;
subject->gid = gid;
subject->cache = cache;
subject->parser = parser;
+ subject->list = list;
subject->layout = layout;
subject->draw = draw;
subject->title = title_buf;
error_draw:
sbjtlayout_delete(layout);
error_layout:
+ sbjtlist_delete(list);
+error_list:
sbjtparser_delete(parser);
error_parser:
sbjtcache_delete(cache);
free(subject->title);
sbjtdraw_delete(subject->draw);
sbjtlayout_delete(subject->layout);
+ sbjtlist_delete(subject->list);
sbjtparser_delete(subject->parser);
sbjtcache_delete(subject->cache);
}
/*
* 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
#include "subjectcache.h"
#include "subjectparser.h"
+#include "subjectlist.h"
#include "subjectlayout.h"
#ifndef __BCHANL_SUBJECT_H__
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);
#include "subjectretriever.h"
#include "subjectcache.h"
#include "subjectparser.h"
+#include "subjectlist.h"
#include "subjectlayout.h"
#include "bbsmenuretriever.h"
#include "bbsmenucache.h"
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;
}
draw = bchanl_subject_getdraw(bchanl->currentsubject);
- err = sbjtdraw_findthread(draw, evpos, &thread, &vframe);
+ err = sbjtdraw_findthread(draw, evpos, &tuple, &vframe);
if (err == 0) {
return;
}
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;
*/
#include "subjectlayout.h"
-#include "subjectparser.h"
+#include "subjectlist.h"
#include "tadlib.h"
#include <bstdio.h>
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;
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;
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;
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;
{
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);
}
{
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;
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 */
}
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) {
{
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);
}
{
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);
}
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,
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;
}
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;
}
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;
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;
/*
* 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
#include <basic.h>
#include <btron/dp.h>
-#include "subjectparser.h"
+#include "subjectlist.h"
#ifndef __SUBJECTLAYOUT_H__
#define __SUBJECTLAYOUT_H__
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);
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);
/*
* 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
#include "test.h"
#include "subjectlayout.h"
+#include "subjectlist.h"
#include "subjectparser.h"
#include "subjectcache.h"
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;
sbjtcache_appenddata(cache, test_sbjtlayout_testdata_01, strlen(test_sbjtlayout_testdata_01));
parser = sbjtparser_new(cache);
+ list = sbjtlist_new();
layout = sbjtlayout_new(gid);
for (;;) {
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);