4 * Copyright (c) 2010-2011 project bchan
6 * This software is provided 'as-is', without any express or implied
7 * warranty. In no event will the authors be held liable for any damages
8 * arising from the use of this software.
10 * Permission is granted to anyone to use this software for any purpose,
11 * including commercial applications, and to alter it and redistribute it
12 * freely, subject to the following restrictions:
14 * 1. The origin of this software must not be misrepresented; you must not
15 * claim that you wrote the original software. If you use this software
16 * in a product, an acknowledgment in the product documentation would be
17 * appreciated but is not required.
19 * 2. Altered source versions must be plainly marked as such, and must not be
20 * misrepresented as being the original software.
22 * 3. This notice may not be removed or altered from any source
28 #include "layoutarray.h"
36 #ifdef BCHAN_CONFIG_DEBUG
37 # define DP(arg) printf arg
38 # define DP_ER(msg, err) printf("%s (%d/%x)\n", msg, err>>16, err)
41 # define DP_ER(msg, err) /**/
44 struct dattraydata_t_ {
45 datlayoutarray_t *layoutarray;
48 LOCAL W datlayout_res_totraytextdata_write_zenkaku(TC *str)
50 TADSEG *seg = (TADSEG*)str;
56 seg->id = 0xFF00|TS_TFONT;
58 *(UH*)(str + 2) = 3 << 8;
59 *(RATIO*)(str + 3) = 0x0101;
60 *(RATIO*)(str + 4) = 0x0101;
65 LOCAL W datlayout_res_totraytextdata(datlayout_res_t *res, B *data, W data_len)
72 i += datlayout_res_totraytextdata_write_zenkaku(str + i) / 2;
73 i += tadlib_UW_to_str(num, str + i, data_len - i / 2);
75 i += tadlib_remove_TA_APPL(res->parser_res->name, res->parser_res->name_len, str + i, data_len - i / 2) / 2;
77 i += datlayout_res_totraytextdata_write_zenkaku(str + i) / 2;
79 i += tadlib_remove_TA_APPL(res->parser_res->mail, res->parser_res->mail_len, str + i, data_len - i / 2) / 2;
80 i += datlayout_res_totraytextdata_write_zenkaku(str + i) / 2;
83 i += tadlib_remove_TA_APPL(res->parser_res->date, res->parser_res->date_len, str + i, data_len - i / 2) / 2;
85 i += datlayout_res_totraytextdata_write_zenkaku(str + i) / 2;
86 i += tadlib_remove_TA_APPL(res->parser_res->body, res->parser_res->body_len, str + i, data_len - i / 2) / 2;
90 i += datlayout_res_totraytextdata_write_zenkaku(NULL) / 2;
91 i += tadlib_UW_to_str(num, NULL, 0);
93 i += tadlib_remove_TA_APPL_calcsize(res->parser_res->name, res->parser_res->name_len) / 2;
95 i += datlayout_res_totraytextdata_write_zenkaku(NULL) / 2;
97 i += tadlib_remove_TA_APPL_calcsize(res->parser_res->mail, res->parser_res->mail_len) / 2;
98 i += datlayout_res_totraytextdata_write_zenkaku(NULL) / 2;
101 i += tadlib_remove_TA_APPL_calcsize(res->parser_res->date, res->parser_res->date_len) / 2;
103 i += datlayout_res_totraytextdata_write_zenkaku(NULL) / 2;
104 i += tadlib_remove_TA_APPL_calcsize(res->parser_res->body, res->parser_res->body_len) / 2;
108 return i * sizeof(TC);
111 EXPORT W dattraydata_resindextotraytextdata(dattraydata_t *traydata, W n, B *data, W data_len)
113 datlayout_res_t *res;
115 exist = datlayoutarray_getresbyindex(traydata->layoutarray, n, &res);
116 if (exist == False) {
117 return -1; /* TODO */
119 return datlayout_res_totraytextdata(res, data, data_len);
122 LOCAL Bool dattraydata_isrescopytotray(datlayout_res_t *layout_res)
126 ok = datlayout_res_isenableindexNG(layout_res);
130 ok = datlayout_res_isenableidNG(layout_res);
134 ok = datlayout_res_isenablewordNG(layout_res);
142 EXPORT W dattraydata_idtotraytextdata(dattraydata_t *traydata, TC *id, W id_len, B *data, W data_len)
144 W i, len, result, sum = 0;
146 datlayout_res_t *res;
148 len = datlayoutarray_length(traydata->layoutarray);
149 for (i = 0; i < len; i++) {
150 datlayoutarray_getresbyindex(traydata->layoutarray, i, &res);
152 haveid = datlayout_res_issameid(res, id, id_len);
153 if (haveid == False) {
156 ok = dattraydata_isrescopytotray(res);
161 result = datlayout_res_totraytextdata(res, NULL, 0);
166 result = datlayout_res_totraytextdata(res, data + sum, data_len - sum);
177 EXPORT dattraydata_t* dattraydata_new(datlayoutarray_t *layoutarray)
179 dattraydata_t *traydata;
181 traydata = (dattraydata_t *)malloc(sizeof(dattraydata_t));
182 if (traydata == NULL) {
185 traydata->layoutarray = layoutarray;
190 EXPORT VOID dattraydata_delete(dattraydata_t *traydata)